From e779a2a956d828c37b45081bd92b6ab52b0e88ed Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Sat, 22 Jul 2017 16:49:22 -0400 Subject: [PATCH 01/32] initial commit version 1 --- Godeps/Godeps.json | 47 - Godeps/Readme | 5 - execution.go | 93 - gophernotes.go | 211 - gophernotes_test.go | 113 - internal/repl/commands.go | 375 - internal/repl/log.go | 32 - internal/repl/node.go | 41 - internal/repl/quickfix.go | 276 - internal/repl/repl.go | 654 -- internal/repl/utils.go | 14 - kernel.go | 304 + main.go | 16 +- messages.go | 88 +- vendor/github.com/alecthomas/gozmq/.gitignore | 15 - .../github.com/alecthomas/gozmq/.godocdown.md | 158 - vendor/github.com/alecthomas/gozmq/.todo2 | 4 - .../github.com/alecthomas/gozmq/.travis.yml | 6 - vendor/github.com/alecthomas/gozmq/AUTHORS | 9 - vendor/github.com/alecthomas/gozmq/README.md | 1024 -- vendor/github.com/alecthomas/gozmq/zmq.go | 455 - vendor/github.com/alecthomas/gozmq/zmq_2_2.go | 30 - vendor/github.com/alecthomas/gozmq/zmq_2_x.go | 110 - vendor/github.com/alecthomas/gozmq/zmq_3_x.go | 237 - vendor/github.com/alecthomas/gozmq/zmq_4_x.go | 46 - .../github.com/alecthomas/gozmq/zmq_unix.go | 31 - .../alecthomas/gozmq/zmq_windows.go | 29 - .../github.com/alecthomas/gozmq/zmqgen_2_1.go | 272 - .../github.com/alecthomas/gozmq/zmqgen_2_2.go | 306 - .../github.com/alecthomas/gozmq/zmqgen_3_2.go | 436 - .../github.com/alecthomas/gozmq/zmqgen_4_0.go | 627 -- vendor/github.com/davecgh/go-spew/LICENSE | 13 - .../github.com/davecgh/go-spew/spew/bypass.go | 151 - .../davecgh/go-spew/spew/bypasssafe.go | 37 - .../github.com/davecgh/go-spew/spew/common.go | 341 - .../github.com/davecgh/go-spew/spew/config.go | 297 - vendor/github.com/davecgh/go-spew/spew/doc.go | 202 - .../github.com/davecgh/go-spew/spew/dump.go | 509 - .../github.com/davecgh/go-spew/spew/format.go | 419 - .../github.com/davecgh/go-spew/spew/spew.go | 148 - .../github.com/mitchellh/go-homedir/LICENSE | 21 - .../github.com/mitchellh/go-homedir/README.md | 14 - .../mitchellh/go-homedir/homedir.go | 132 - .../motemen/go-quickfix/.travis.yml | 8 - vendor/github.com/motemen/go-quickfix/LICENSE | 22 - .../motemen/go-quickfix/README.adoc | 82 - .../motemen/go-quickfix/quickfix.go | 428 - vendor/github.com/nu7hatch/gouuid/.gitignore | 11 - vendor/github.com/nu7hatch/gouuid/COPYING | 19 - vendor/github.com/nu7hatch/gouuid/README.md | 21 - vendor/github.com/nu7hatch/gouuid/uuid.go | 173 - vendor/github.com/pmezard/go-difflib/LICENSE | 27 - .../pmezard/go-difflib/difflib/difflib.go | 772 -- .../github.com/stretchr/testify/LICENCE.txt | 22 - vendor/github.com/stretchr/testify/LICENSE | 22 - .../testify/assert/assertion_forward.go | 387 - .../testify/assert/assertion_forward.go.tmpl | 4 - .../stretchr/testify/assert/assertions.go | 1004 -- .../github.com/stretchr/testify/assert/doc.go | 45 - .../stretchr/testify/assert/errors.go | 10 - .../testify/assert/forward_assertions.go | 16 - .../testify/assert/http_assertions.go | 106 - vendor/golang.org/x/tools/LICENSE | 27 - vendor/golang.org/x/tools/PATENTS | 22 - .../x/tools/go/ast/astutil/enclosing.go | 627 -- .../x/tools/go/ast/astutil/imports.go | 400 - .../golang.org/x/tools/go/ast/astutil/util.go | 14 - vendor/golang.org/x/tools/imports/fastwalk.go | 172 - .../x/tools/imports/fastwalk_dirent_fileno.go | 13 - .../x/tools/imports/fastwalk_dirent_ino.go | 13 - .../x/tools/imports/fastwalk_portable.go | 29 - .../x/tools/imports/fastwalk_unix.go | 122 - vendor/golang.org/x/tools/imports/fix.go | 900 -- vendor/golang.org/x/tools/imports/imports.go | 289 - vendor/golang.org/x/tools/imports/mkindex.go | 173 - vendor/golang.org/x/tools/imports/mkstdlib.go | 102 - .../golang.org/x/tools/imports/sortimports.go | 212 - vendor/golang.org/x/tools/imports/zstdlib.go | 9162 ----------------- 78 files changed, 367 insertions(+), 23437 deletions(-) delete mode 100644 Godeps/Godeps.json delete mode 100644 Godeps/Readme delete mode 100644 execution.go delete mode 100644 gophernotes.go delete mode 100644 gophernotes_test.go delete mode 100644 internal/repl/commands.go delete mode 100644 internal/repl/log.go delete mode 100644 internal/repl/node.go delete mode 100644 internal/repl/quickfix.go delete mode 100644 internal/repl/repl.go delete mode 100644 internal/repl/utils.go create mode 100644 kernel.go delete mode 100644 vendor/github.com/alecthomas/gozmq/.gitignore delete mode 100644 vendor/github.com/alecthomas/gozmq/.godocdown.md delete mode 100644 vendor/github.com/alecthomas/gozmq/.todo2 delete mode 100644 vendor/github.com/alecthomas/gozmq/.travis.yml delete mode 100644 vendor/github.com/alecthomas/gozmq/AUTHORS delete mode 100644 vendor/github.com/alecthomas/gozmq/README.md delete mode 100644 vendor/github.com/alecthomas/gozmq/zmq.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmq_2_2.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmq_2_x.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmq_3_x.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmq_4_x.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmq_unix.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmq_windows.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmqgen_2_1.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmqgen_2_2.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmqgen_3_2.go delete mode 100644 vendor/github.com/alecthomas/gozmq/zmqgen_4_0.go delete mode 100644 vendor/github.com/davecgh/go-spew/LICENSE delete mode 100644 vendor/github.com/davecgh/go-spew/spew/bypass.go delete mode 100644 vendor/github.com/davecgh/go-spew/spew/bypasssafe.go delete mode 100644 vendor/github.com/davecgh/go-spew/spew/common.go delete mode 100644 vendor/github.com/davecgh/go-spew/spew/config.go delete mode 100644 vendor/github.com/davecgh/go-spew/spew/doc.go delete mode 100644 vendor/github.com/davecgh/go-spew/spew/dump.go delete mode 100644 vendor/github.com/davecgh/go-spew/spew/format.go delete mode 100644 vendor/github.com/davecgh/go-spew/spew/spew.go delete mode 100644 vendor/github.com/mitchellh/go-homedir/LICENSE delete mode 100644 vendor/github.com/mitchellh/go-homedir/README.md delete mode 100644 vendor/github.com/mitchellh/go-homedir/homedir.go delete mode 100644 vendor/github.com/motemen/go-quickfix/.travis.yml delete mode 100644 vendor/github.com/motemen/go-quickfix/LICENSE delete mode 100644 vendor/github.com/motemen/go-quickfix/README.adoc delete mode 100644 vendor/github.com/motemen/go-quickfix/quickfix.go delete mode 100644 vendor/github.com/nu7hatch/gouuid/.gitignore delete mode 100644 vendor/github.com/nu7hatch/gouuid/COPYING delete mode 100644 vendor/github.com/nu7hatch/gouuid/README.md delete mode 100644 vendor/github.com/nu7hatch/gouuid/uuid.go delete mode 100644 vendor/github.com/pmezard/go-difflib/LICENSE delete mode 100644 vendor/github.com/pmezard/go-difflib/difflib/difflib.go delete mode 100644 vendor/github.com/stretchr/testify/LICENCE.txt delete mode 100644 vendor/github.com/stretchr/testify/LICENSE delete mode 100644 vendor/github.com/stretchr/testify/assert/assertion_forward.go delete mode 100644 vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl delete mode 100644 vendor/github.com/stretchr/testify/assert/assertions.go delete mode 100644 vendor/github.com/stretchr/testify/assert/doc.go delete mode 100644 vendor/github.com/stretchr/testify/assert/errors.go delete mode 100644 vendor/github.com/stretchr/testify/assert/forward_assertions.go delete mode 100644 vendor/github.com/stretchr/testify/assert/http_assertions.go delete mode 100644 vendor/golang.org/x/tools/LICENSE delete mode 100644 vendor/golang.org/x/tools/PATENTS delete mode 100644 vendor/golang.org/x/tools/go/ast/astutil/enclosing.go delete mode 100644 vendor/golang.org/x/tools/go/ast/astutil/imports.go delete mode 100644 vendor/golang.org/x/tools/go/ast/astutil/util.go delete mode 100644 vendor/golang.org/x/tools/imports/fastwalk.go delete mode 100644 vendor/golang.org/x/tools/imports/fastwalk_dirent_fileno.go delete mode 100644 vendor/golang.org/x/tools/imports/fastwalk_dirent_ino.go delete mode 100644 vendor/golang.org/x/tools/imports/fastwalk_portable.go delete mode 100644 vendor/golang.org/x/tools/imports/fastwalk_unix.go delete mode 100644 vendor/golang.org/x/tools/imports/fix.go delete mode 100644 vendor/golang.org/x/tools/imports/imports.go delete mode 100644 vendor/golang.org/x/tools/imports/mkindex.go delete mode 100644 vendor/golang.org/x/tools/imports/mkstdlib.go delete mode 100644 vendor/golang.org/x/tools/imports/sortimports.go delete mode 100644 vendor/golang.org/x/tools/imports/zstdlib.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json deleted file mode 100644 index 59c2857..0000000 --- a/Godeps/Godeps.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "ImportPath": "github.com/gopherds/gophernotes", - "GoVersion": "go1.6", - "GodepVersion": "v74", - "Packages": [ - "./..." - ], - "Deps": [ - { - "ImportPath": "github.com/alecthomas/gozmq", - "Rev": "d1b01a2df6b2c64f03fecaeabea541963fc4749f" - }, - { - "ImportPath": "github.com/davecgh/go-spew/spew", - "Rev": "5215b55f46b2b919f50a1df0eaa5886afe4e3b3d" - }, - { - "ImportPath": "github.com/mitchellh/go-homedir", - "Rev": "d682a8f0cf139663a984ff12528da460ca963de9" - }, - { - "ImportPath": "github.com/motemen/go-quickfix", - "Rev": "5c522febc6796f9c2ceabf9374a75490e2d268da" - }, - { - "ImportPath": "github.com/nu7hatch/gouuid", - "Rev": "179d4d0c4d8d407a32af483c2354df1d2c91e6c3" - }, - { - "ImportPath": "github.com/pmezard/go-difflib/difflib", - "Rev": "792786c7400a136282c1664665ae0a8db921c6c2" - }, - { - "ImportPath": "github.com/stretchr/testify/assert", - "Comment": "v1.1.3", - "Rev": "f390dcf405f7b83c997eac1b06768bb9f44dec18" - }, - { - "ImportPath": "golang.org/x/tools/go/ast/astutil", - "Rev": "ed69e84b1518b5857a9f4e01d1f9cefdcc45246e" - }, - { - "ImportPath": "golang.org/x/tools/imports", - "Rev": "ed69e84b1518b5857a9f4e01d1f9cefdcc45246e" - } - ] -} diff --git a/Godeps/Readme b/Godeps/Readme deleted file mode 100644 index 4cdaa53..0000000 --- a/Godeps/Readme +++ /dev/null @@ -1,5 +0,0 @@ -This directory tree is generated automatically by godep. - -Please do not edit. - -See https://github.com/tools/godep for more information. diff --git a/execution.go b/execution.go deleted file mode 100644 index 5ac8254..0000000 --- a/execution.go +++ /dev/null @@ -1,93 +0,0 @@ -package main - -import ( - "fmt" - "go/token" - - repl "github.com/gopherds/gophernotes/internal/repl" -) - -var ( - // REPLSession manages the I/O to/from the notebook. - REPLSession *repl.Session - fset *token.FileSet -) - -// ExecCounter is incremented each time we run user code in the notebook. -var ExecCounter int - -// SetupExecutionEnvironment initializes the REPL session and set of tmp files. -func SetupExecutionEnvironment() { - - var err error - REPLSession, err = repl.NewSession() - if err != nil { - panic(err) - } - - fset = token.NewFileSet() -} - -// OutputMsg holds the data for a pyout message. -type OutputMsg struct { - Execcount int `json:"execution_count"` - Data map[string]string `json:"data"` - Metadata map[string]interface{} `json:"metadata"` -} - -// ErrMsg encodes the traceback of errors output to the notebook. -type ErrMsg struct { - EName string `json:"ename"` - EValue string `json:"evalue"` - Traceback []string `json:"traceback"` -} - -// HandleExecuteRequest runs code from an execute_request method, and sends the various -// reply messages. -func HandleExecuteRequest(receipt MsgReceipt) { - - reply := NewMsg("execute_reply", receipt.Msg) - content := make(map[string]interface{}) - reqcontent := receipt.Msg.Content.(map[string]interface{}) - code := reqcontent["code"].(string) - silent := reqcontent["silent"].(bool) - if !silent { - ExecCounter++ - } - content["execution_count"] = ExecCounter - - // Do the compilation/execution magic. - val, stderr, err := REPLSession.Eval(code) - - if err == nil { - content["status"] = "ok" - content["payload"] = make([]map[string]interface{}, 0) - content["user_variables"] = make(map[string]string) - content["user_expressions"] = make(map[string]string) - if len(val) > 0 && !silent { - var outContent OutputMsg - out := NewMsg("pyout", receipt.Msg) - outContent.Execcount = ExecCounter - outContent.Data = make(map[string]string) - outContent.Data["text/plain"] = fmt.Sprint(val) - outContent.Metadata = make(map[string]interface{}) - out.Content = outContent - receipt.SendResponse(receipt.Sockets.IOPubSocket, out) - } - } else { - content["status"] = "error" - content["ename"] = "ERROR" - content["evalue"] = err.Error() - content["traceback"] = []string{stderr.String()} - errormsg := NewMsg("pyerr", receipt.Msg) - errormsg.Content = ErrMsg{"Error", err.Error(), []string{stderr.String()}} - receipt.SendResponse(receipt.Sockets.IOPubSocket, errormsg) - } - - // send the output back to the notebook - reply.Content = content - receipt.SendResponse(receipt.Sockets.ShellSocket, reply) - idle := NewMsg("status", receipt.Msg) - idle.Content = KernelStatus{"idle"} - receipt.SendResponse(receipt.Sockets.IOPubSocket, idle) -} diff --git a/gophernotes.go b/gophernotes.go deleted file mode 100644 index 9230428..0000000 --- a/gophernotes.go +++ /dev/null @@ -1,211 +0,0 @@ -package main - -import ( - "encoding/json" - "fmt" - "io" - "io/ioutil" - "log" - "os" - - zmq "github.com/alecthomas/gozmq" - "github.com/pkg/errors" -) - -var logger *log.Logger - -// ConnectionInfo stores the contents of the kernel connection file created by Jupyter. -type ConnectionInfo struct { - SignatureScheme string `json:"signature_scheme"` - Transport string `json:"transport"` - StdinPort int `json:"stdin_port"` - ControlPort int `json:"control_port"` - IOPubPort int `json:"iopub_port"` - HBPort int `json:"hb_port"` - ShellPort int `json:"shell_port"` - Key string `json:"key"` - IP string `json:"ip"` -} - -// SocketGroup holds the sockets needed to communicate with the kernel, and -// the key for message signing. -type SocketGroup struct { - ShellSocket *zmq.Socket - ControlSocket *zmq.Socket - StdinSocket *zmq.Socket - IOPubSocket *zmq.Socket - Key []byte -} - -// PrepareSockets sets up the ZMQ sockets through which the kernel will communicate. -func PrepareSockets(connInfo ConnectionInfo) (SocketGroup, error) { - - // Initialize the Socket Group. - context, sg, err := createSockets() - if err != nil { - return sg, errors.Wrap(err, "Could not initialize context and Socket Group") - } - - // Bind the sockets. - address := fmt.Sprintf("%v://%v:%%v", connInfo.Transport, connInfo.IP) - sg.ShellSocket.Bind(fmt.Sprintf(address, connInfo.ShellPort)) - sg.ControlSocket.Bind(fmt.Sprintf(address, connInfo.ControlPort)) - sg.StdinSocket.Bind(fmt.Sprintf(address, connInfo.StdinPort)) - sg.IOPubSocket.Bind(fmt.Sprintf(address, connInfo.IOPubPort)) - - // Message signing key - sg.Key = []byte(connInfo.Key) - - // Start the heartbeat device - HBSocket, err := context.NewSocket(zmq.REP) - if err != nil { - return sg, errors.Wrap(err, "Could not get the Heartbeat device socket") - } - HBSocket.Bind(fmt.Sprintf(address, connInfo.HBPort)) - go zmq.Device(zmq.FORWARDER, HBSocket, HBSocket) - - return sg, nil -} - -// createSockets initializes the sockets for the socket group based on values from zmq. -func createSockets() (*zmq.Context, SocketGroup, error) { - - context, err := zmq.NewContext() - if err != nil { - return context, SocketGroup{}, errors.Wrap(err, "Could not create zmq Context") - } - - var sg SocketGroup - sg.ShellSocket, err = context.NewSocket(zmq.ROUTER) - if err != nil { - return context, sg, errors.Wrap(err, "Could not get Shell Socket") - } - - sg.ControlSocket, err = context.NewSocket(zmq.ROUTER) - if err != nil { - return context, sg, errors.Wrap(err, "Could not get Control Socket") - } - - sg.StdinSocket, err = context.NewSocket(zmq.ROUTER) - if err != nil { - return context, sg, errors.Wrap(err, "Could not get Stdin Socket") - } - - sg.IOPubSocket, err = context.NewSocket(zmq.PUB) - if err != nil { - return context, sg, errors.Wrap(err, "Could not get IOPub Socket") - } - - return context, sg, nil -} - -// HandleShellMsg responds to a message on the shell ROUTER socket. -func HandleShellMsg(receipt MsgReceipt) { - switch receipt.Msg.Header.MsgType { - case "kernel_info_request": - SendKernelInfo(receipt) - case "execute_request": - HandleExecuteRequest(receipt) - case "shutdown_request": - HandleShutdownRequest(receipt) - default: - logger.Println("Unhandled shell message:", receipt.Msg.Header.MsgType) - } -} - -// KernelInfo holds information about the igo kernel, for kernel_info_reply messages. -type KernelInfo struct { - ProtocolVersion []int `json:"protocol_version"` - Language string `json:"language"` -} - -// KernelStatus holds a kernel state, for status broadcast messages. -type KernelStatus struct { - ExecutionState string `json:"execution_state"` -} - -// SendKernelInfo sends a kernel_info_reply message. -func SendKernelInfo(receipt MsgReceipt) { - reply := NewMsg("kernel_info_reply", receipt.Msg) - reply.Content = KernelInfo{[]int{4, 0}, "go"} - receipt.SendResponse(receipt.Sockets.ShellSocket, reply) -} - -// ShutdownReply encodes a boolean indication of stutdown/restart -type ShutdownReply struct { - Restart bool `json:"restart"` -} - -// HandleShutdownRequest sends a "shutdown" message -func HandleShutdownRequest(receipt MsgReceipt) { - reply := NewMsg("shutdown_reply", receipt.Msg) - content := receipt.Msg.Content.(map[string]interface{}) - restart := content["restart"].(bool) - reply.Content = ShutdownReply{restart} - receipt.SendResponse(receipt.Sockets.ShellSocket, reply) - logger.Println("Shutting down in response to shutdown_request") - os.Exit(0) -} - -// RunKernel is the main entry point to start the kernel. -func RunKernel(connectionFile string, logwriter io.Writer) { - - logger = log.New(logwriter, "gophernotes ", log.LstdFlags) - - // Set up the "Session" with the replpkg. - SetupExecutionEnvironment() - - var connInfo ConnectionInfo - bs, err := ioutil.ReadFile(connectionFile) - if err != nil { - log.Fatalln(err) - } - if err = json.Unmarshal(bs, &connInfo); err != nil { - log.Fatalln(err) - } - logger.Printf("%+v\n", connInfo) - - // Set up the ZMQ sockets through which the kernel will communicate. - sockets, err := PrepareSockets(connInfo) - if err != nil { - log.Fatalln(err) - } - - pi := zmq.PollItems{ - zmq.PollItem{Socket: sockets.ShellSocket, Events: zmq.POLLIN}, - zmq.PollItem{Socket: sockets.StdinSocket, Events: zmq.POLLIN}, - zmq.PollItem{Socket: sockets.ControlSocket, Events: zmq.POLLIN}, - } - - // Start a message receiving loop. - var msgparts [][]byte - for { - if _, err = zmq.Poll(pi, -1); err != nil { - log.Fatalln(err) - } - switch { - case pi[0].REvents&zmq.POLLIN != 0: // shell socket - msgparts, _ = pi[0].Socket.RecvMultipart(0) - msg, ids, err := WireMsgToComposedMsg(msgparts, sockets.Key) - if err != nil { - log.Println(err) - return - } - HandleShellMsg(MsgReceipt{msg, ids, sockets}) - case pi[1].REvents&zmq.POLLIN != 0: // stdin socket - not implemented. - pi[1].Socket.RecvMultipart(0) - case pi[2].REvents&zmq.POLLIN != 0: // control socket - treat like shell socket. - msgparts, err = pi[2].Socket.RecvMultipart(0) - if err != nil { - log.Println(err) - return - } - msg, ids, err := WireMsgToComposedMsg(msgparts, sockets.Key) - if err != nil { - log.Println(err) - return - } - HandleShellMsg(MsgReceipt{msg, ids, sockets}) - } - } -} diff --git a/gophernotes_test.go b/gophernotes_test.go deleted file mode 100644 index 36d302f..0000000 --- a/gophernotes_test.go +++ /dev/null @@ -1,113 +0,0 @@ -package main - -import ( - "testing" - - repl "github.com/gopherds/gophernotes/internal/repl" - "github.com/stretchr/testify/assert" -) - -// noError is a helper function for testing -func noError(t *testing.T, err error) { - if err != nil { - t.Fatal(err) - } -} - -// TestStub is a canary test to make sure testing and testify are good to go -func TestStub(t *testing.T) { - assert.True(t, true, "This is good. Canary test passing") -} - -// TestRun_import tests importing and use of a package -func TestRun_import(t *testing.T) { - s, err := repl.NewSession() - noError(t, err) - - codes := []string{ - ":import encoding/json", - "b, err := json.Marshal(nil)", - "string(b)", - } - - for _, code := range codes { - _, _, err := s.Eval(code) - noError(t, err) - } -} - -// TestRun_QuickFix_evaluated_but_not_used makes sure errors are not thrown for -// evaluations of variables that aren't used -func TestRun_QuickFix_evaluated_but_not_used(t *testing.T) { - s, err := repl.NewSession() - noError(t, err) - - codes := []string{ - `[]byte("")`, - `make([]int, 0)`, - `1+1`, - `func() {}`, - `(4 & (1 << 1))`, - `1`, - } - - for _, code := range codes { - _, _, err := s.Eval(code) - noError(t, err) - } -} - -// TestRun_QuickFix_used_as_value tests assignment of values to variables -// and subsequent use -func TestRun_QuickFix_used_as_value(t *testing.T) { - s, err := repl.NewSession() - noError(t, err) - - codes := []string{ - `:import log`, - `a := 1`, - `log.SetPrefix("")`, - } - - for _, code := range codes { - _, _, err := s.Eval(code) - noError(t, err) - } -} - -// TestRun_Copy tests a copy within the replpkg -func TestRun_Copy(t *testing.T) { - s, err := repl.NewSession() - noError(t, err) - - codes := []string{ - `a := []string{"hello", "world"}`, - `b := []string{"goodbye", "world"}`, - `copy(a, b)`, - `if (a[0] != "goodbye") { - panic("should be copied") - }`, - } - - for _, code := range codes { - _, _, err := s.Eval(code) - noError(t, err) - } -} - -// TestRun_Const tests a constant within the replpkg -func TestRun_Const(t *testing.T) { - s, err := repl.NewSession() - noError(t, err) - - codes := []string{ - `const ( a = iota; b )`, - `a`, - `b`, - } - - for _, code := range codes { - _, _, err := s.Eval(code) - noError(t, err) - } -} diff --git a/internal/repl/commands.go b/internal/repl/commands.go deleted file mode 100644 index 79c2413..0000000 --- a/internal/repl/commands.go +++ /dev/null @@ -1,375 +0,0 @@ -package replpkg - -import ( - "fmt" - "io/ioutil" - "os" - "os/exec" - "path" - "path/filepath" - "runtime" - "strings" - "text/tabwriter" - "time" - - "go/ast" - "go/build" - "go/importer" - "go/types" - - "golang.org/x/tools/go/ast/astutil" -) - -type command struct { - name string - action func(*Session, string) (string, error) - complete func(*Session, string) []string - arg string - document string -} - -// TODO -// - :edit -// - :undo -// - :reset -// - :type -var commands []command - -func init() { - commands = []command{ - { - name: "import", - action: actionImport, - complete: completeImport, - arg: "", - document: "import a package", - }, - { - name: "print", - action: actionPrint, - document: "print current source", - }, - { - name: "write", - action: actionWrite, - complete: nil, // TODO implement - arg: "[]", - document: "write out current source", - }, - { - name: "help", - action: actionHelp, - document: "show this help", - }, - { - name: "quit", - action: actionQuit, - document: "quit the session", - }, - { - name: "containerize", - action: actionContainerize, - document: "containerize go binary", - }, - } -} - -func actionImport(s *Session, arg string) (string, error) { - if arg == "" { - return "", fmt.Errorf("arg required") - } - - path := strings.Trim(arg, `"`) - - // check if the package specified by path is importable - _, err := importer.Default().Import(path) - if err != nil { - return "", err - } - - astutil.AddImport(s.Fset, s.File, path) - - return "", nil -} - -var gorootSrc = filepath.Join(filepath.Clean(runtime.GOROOT()), "src") - -func completeImport(s *Session, prefix string) []string { - result := []string{} - seen := map[string]bool{} - - d, fn := path.Split(prefix) - for _, srcDir := range build.Default.SrcDirs() { - dir := filepath.Join(srcDir, d) - - if fi, err := os.Stat(dir); err != nil || !fi.IsDir() { - if err != nil && !os.IsNotExist(err) { - errorf("Stat %s: %s", dir, err.Error()) - } - continue - } - - entries, err := ioutil.ReadDir(dir) - if err != nil { - errorf("ReadDir %s: %s", dir, err.Error()) - continue - } - for _, fi := range entries { - if !fi.IsDir() { - continue - } - - name := fi.Name() - if strings.HasPrefix(name, ".") || strings.HasPrefix(name, "_") || name == "testdata" { - continue - } - - if strings.HasPrefix(name, fn) { - r := path.Join(d, name) - if srcDir != gorootSrc { - // append "/" if this directory is not a repository - // e.g. does not have VCS directory such as .git or .hg - // TODO: do not append "/" to subdirectories of repos - var isRepo bool - for _, vcsDir := range []string{".git", ".hg", ".svn", ".bzr"} { - _, err := os.Stat(filepath.Join(srcDir, filepath.FromSlash(r), vcsDir)) - if err == nil { - isRepo = true - break - } - } - if !isRepo { - r = r + "/" - } - } - - if !seen[r] { - result = append(result, r) - seen[r] = true - } - } - } - } - - return result -} - -func actionPrint(s *Session, _ string) (string, error) { - source, err := s.source(true) - - if err == nil { - fmt.Println(source) - } - - return source, err -} - -func actionWrite(s *Session, filename string) (string, error) { - source, err := s.source(false) - if err != nil { - return "", err - } - - if filename == "" { - filename = fmt.Sprintf("gore_session_%s.go", time.Now().Format("20060102_150405")) - } - - err = ioutil.WriteFile(filename, []byte(source), 0644) - if err != nil { - return "", err - } - - infof("Source wrote to %s", filename) - - return "", nil -} - -func actionDoc(s *Session, in string) (string, error) { - s.clearQuickFix() - - s.storeMainBody() - defer s.restoreMainBody() - - expr, err := s.evalExpr(in) - if err != nil { - return "", err - } - - s.TypeInfo = types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - Uses: make(map[*ast.Ident]types.Object), - Defs: make(map[*ast.Ident]types.Object), - Scopes: make(map[ast.Node]*types.Scope), - } - _, err = s.Types.Check("_tmp", s.Fset, []*ast.File{s.File}, &s.TypeInfo) - if err != nil { - debugf("typecheck error (ignored): %s", err) - } - - // :doc patterns: - // - "json" -> "encoding/json" (package name) - // - "json.Encoder" -> "encoding/json", "Encoder" (package member) - // - "json.NewEncoder(nil).Encode" -> "encoding/json", "Decode" (package type member) - var docObj types.Object - if sel, ok := expr.(*ast.SelectorExpr); ok { - // package member, package type member - docObj = s.TypeInfo.ObjectOf(sel.Sel) - } else if t := s.TypeInfo.TypeOf(expr); t != nil && t != types.Typ[types.Invalid] { - for { - if pt, ok := t.(*types.Pointer); ok { - t = pt.Elem() - } else { - break - } - } - switch t := t.(type) { - case *types.Named: - docObj = t.Obj() - case *types.Basic: - // builtin types - docObj = types.Universe.Lookup(t.Name()) - } - } else if ident, ok := expr.(*ast.Ident); ok { - // package name - mainScope := s.TypeInfo.Scopes[s.mainFunc().Type] - _, docObj = mainScope.LookupParent(ident.Name, ident.NamePos) - } - - if docObj == nil { - return "", fmt.Errorf("cannot determine the document location") - } - - debugf("doc :: obj=%#v", docObj) - - var pkgPath, objName string - if pkgName, ok := docObj.(*types.PkgName); ok { - pkgPath = pkgName.Imported().Path() - } else { - if pkg := docObj.Pkg(); pkg != nil { - pkgPath = pkg.Path() - } else { - pkgPath = "builtin" - } - objName = docObj.Name() - } - - debugf("doc :: %q %q", pkgPath, objName) - - args := []string{pkgPath} - if objName != "" { - args = append(args, objName) - } - - godoc := exec.Command("godoc", args...) - godoc.Stderr = os.Stderr - - // TODO just use PAGER? - if pagerCmd := os.Getenv("GORE_PAGER"); pagerCmd != "" { - r, err := godoc.StdoutPipe() - if err != nil { - return "", err - } - - pager := exec.Command(pagerCmd) - pager.Stdin = r - pager.Stdout = os.Stdout - pager.Stderr = os.Stderr - - err = pager.Start() - if err != nil { - return "", err - } - - err = godoc.Run() - if err != nil { - return "", err - } - - return "", pager.Wait() - } - - godoc.Stdout = os.Stdout - return "", godoc.Run() - -} - -func actionHelp(s *Session, _ string) (string, error) { - w := tabwriter.NewWriter(os.Stdout, 0, 8, 4, ' ', 0) - for _, command := range commands { - cmd := ":" + command.name - if command.arg != "" { - cmd = cmd + " " + command.arg - } - w.Write([]byte(" " + cmd + "\t" + command.document + "\n")) - } - w.Flush() - - return "", nil -} - -func actionQuit(s *Session, _ string) (string, error) { - return "", ErrQuit -} - -func actionContainerize(s *Session, _ string) (string, error) { - - // get the source code - source, err := s.source(true) - if err != nil { - return "", err - } - - // create tmp directory in GOPATH - gopath := os.Getenv("GOPATH") - os.Mkdir(gopath+"/src/tmpcontainerize", 0777) - - d := []byte(source) - err = ioutil.WriteFile(gopath+"/src/tmpcontainerize/containerize.go", d, 0777) - if err != nil { - return "", err - } - - cmd := exec.Command("go", "install", "tmpcontainerize") - err = cmd.Run() - if err != nil { - panic(err) - } - - // dockerize - dockerfile := ` - FROM scratch - ADD tmpcontainerize /tmpcontainerize - CMD ["/tmpcontainerize"] - ` - d = []byte(dockerfile) - err = ioutil.WriteFile(gopath+"/bin/Dockerfile", d, 0777) - - out, err := exec.Command("uuidgen").Output() - containerid := string(out) - containerid = containerid[0 : len(containerid)-1] - if err != nil { - return "", err - } - - fmt.Println("Dockerizing") - cmd = exec.Command("docker", "build", "-t", containerid, gopath+"/bin/") - err = cmd.Run() - if err != nil { - fmt.Println(err) - panic(err) - } - - fmt.Println("removing src") - // now that we have the binary, remove the tmp src - err = os.RemoveAll(gopath + "/src/tmpcontainerize/") - if err != nil { - return "", err - } - fmt.Println("removing docker image") - err = os.Remove(gopath + "/bin/Dockerfile") - if err != nil { - return "", err - } - - return "", nil -} diff --git a/internal/repl/log.go b/internal/repl/log.go deleted file mode 100644 index aa05a0b..0000000 --- a/internal/repl/log.go +++ /dev/null @@ -1,32 +0,0 @@ -package replpkg - -import ( - "fmt" - "os" - "path/filepath" - "runtime" -) - -var debug bool - -func debugf(format string, args ...interface{}) { - - if !debug { - return - } - - _, file, line, ok := runtime.Caller(1) - if ok { - format = fmt.Sprintf("%s:%d %s", filepath.Base(file), line, format) - } - - fmt.Fprintf(os.Stderr, format+"\n", args...) -} - -func errorf(format string, args ...interface{}) { - fmt.Fprintf(os.Stderr, "error: "+format+"\n", args...) -} - -func infof(format string, args ...interface{}) { - fmt.Fprintf(os.Stderr, format+"\n", args...) -} diff --git a/internal/repl/node.go b/internal/repl/node.go deleted file mode 100644 index 7b4359d..0000000 --- a/internal/repl/node.go +++ /dev/null @@ -1,41 +0,0 @@ -package replpkg - -import ( - "reflect" - - "go/ast" - "go/token" -) - -// normalizeNodePos resets all position information of node and its descendants. -func normalizeNodePos(node ast.Node) { - ast.Inspect(node, func(node ast.Node) bool { - if node == nil { - return true - } - - if node.Pos() == token.NoPos && node.End() == token.NoPos { - return true - } - - pv := reflect.ValueOf(node) - if pv.Kind() != reflect.Ptr { - return true - } - - v := pv.Elem() - if v.Kind() != reflect.Struct { - return true - } - - for i := 0; i < v.NumField(); i++ { - f := v.Field(i) - ft := f.Type() - if f.CanSet() && ft.PkgPath() == "go/token" && ft.Name() == "Pos" && f.Int() != 0 { - f.SetInt(1) - } - } - - return true - }) -} diff --git a/internal/repl/quickfix.go b/internal/repl/quickfix.go deleted file mode 100644 index 2e4998e..0000000 --- a/internal/repl/quickfix.go +++ /dev/null @@ -1,276 +0,0 @@ -package replpkg - -import ( - "strings" - - "go/ast" - "go/types" - - "golang.org/x/tools/go/ast/astutil" - - "github.com/motemen/go-quickfix" -) - -// doQuickFix tries to fix the source AST so that it compiles well. -func (s *Session) doQuickFix() error { - const maxAttempts = 10 - - s.reset() - -quickFixAttempt: - for i := 0; i < maxAttempts; i++ { - s.TypeInfo = types.Info{ - Types: make(map[ast.Expr]types.TypeAndValue), - } - - files := s.ExtraFiles - files = append(files, s.File) - - config := quickfix.Config{ - Fset: s.Fset, - Files: files, - TypeInfo: &s.TypeInfo, - } - _, err := config.QuickFixOnce() - if err == nil { - break - } - - debugf("quickFix :: err = %#v", err) - - errList, ok := err.(quickfix.ErrorList) - if !ok { - continue - } - - // (try to) fix gore-specific remaining errors - for _, err := range errList { - err, ok := err.(types.Error) - if !ok { - continue - } - - // "... used as value": - // - // convert - // __gore_pp(funcWithSideEffectReturningNoValue()) - // to - // funcWithSideEffectReturningNoValue() - if strings.HasSuffix(err.Msg, " used as value") { - nodepath, _ := astutil.PathEnclosingInterval(s.File, err.Pos, err.Pos) - - for _, node := range nodepath { - stmt, ok := node.(ast.Stmt) - if !ok { - continue - } - - for i := range s.mainBody.List { - if s.mainBody.List[i] != stmt { - continue - } - - exprs := printedExprs(stmt) - - stmts := s.mainBody.List[0:i] - for _, expr := range exprs { - stmts = append(stmts, &ast.ExprStmt{X: expr}) - } - - s.mainBody.List = append(stmts, s.mainBody.List[i+1:]...) - continue quickFixAttempt - } - } - } - } - - debugf("quickFix :: give up: %#v", err) - } - - return nil -} - -func (s *Session) clearQuickFix() { - - // make all import specs explicit (i.e. no "_"). - for _, imp := range s.File.Imports { - imp.Name = nil - } - - for i := 0; i < len(s.mainBody.List); { - stmt := s.mainBody.List[i] - - // remove "_ = x" stmt - if assign, ok := stmt.(*ast.AssignStmt); ok && len(assign.Lhs) == 1 { - if isNamedIdent(assign.Lhs[0], "_") { - s.mainBody.List = append(s.mainBody.List[0:i], s.mainBody.List[i+1:]...) - continue - } - } - - // remove expressions just for printing out - // i.e. what causes "evaluated but not used." - if exprs := printedExprs(stmt); exprs != nil { - allPure := true - for _, expr := range exprs { - if !s.isPureExpr(expr) { - allPure = false - break - } - } - - if allPure { - s.mainBody.List = append(s.mainBody.List[0:i], s.mainBody.List[i+1:]...) - continue - } - - // strip (possibly impure) printing expression to expression - var trailing []ast.Stmt - s.mainBody.List, trailing = s.mainBody.List[0:i], s.mainBody.List[i+1:] - for _, expr := range exprs { - if !isNamedIdent(expr, "_") { - s.mainBody.List = append(s.mainBody.List, &ast.ExprStmt{X: expr}) - } - } - - s.mainBody.List = append(s.mainBody.List, trailing...) - continue - } - - i++ - } - - debugf("clearQuickFix :: %s", showNode(s.Fset, s.mainBody)) -} - -// printedExprs returns arguments of statement stmt of form "p(x...)" -func printedExprs(stmt ast.Stmt) []ast.Expr { - st, ok := stmt.(*ast.ExprStmt) - if !ok { - return nil - } - - // first check whether the expr is p(_) form - call, ok := st.X.(*ast.CallExpr) - if !ok { - return nil - } - - if !isNamedIdent(call.Fun, printerName) { - return nil - } - - return call.Args -} - -var pureBuiltinFuncNames = map[string]bool{ - "append": true, - "cap": true, - "complex": true, - "imag": true, - "len": true, - "make": true, - "new": true, - "real": true, -} - -var pureNotBuiltinFuncNames = map[string]bool{ - "Println": true, - "Printf": true, -} - -// isPureExpr checks if an expression expr is "pure", which means -// removing this expression will no affect the entire program. -// - identifiers ("x") -// - types -// - selectors ("x.y") -// - slices ("a[n:m]") -// - literals ("1") -// - type conversion ("int(1)") -// - type assertion ("x.(int)") -// - call of some built-in functions as listed in pureBuiltinFuncNames -func (s *Session) isPureExpr(expr ast.Expr) bool { - if expr == nil { - return true - } - - switch expr := expr.(type) { - case *ast.Ident: - return true - case *ast.BasicLit: - return true - case *ast.BinaryExpr: - return s.isPureExpr(expr.X) && s.isPureExpr(expr.Y) - case *ast.CallExpr: - tv := s.TypeInfo.Types[expr.Fun] - - //for _, arg := range expr.Args { - // if s.isPureExpr(arg) == false { - // return false - // } - //} - - if tv.IsType() { - return true - } - - if tv.IsBuiltin() { - if ident, ok := expr.Fun.(*ast.Ident); ok { - if pureBuiltinFuncNames[ident.Name] { - return true - } - } - } - - if !tv.IsBuiltin() { - if selectorExpr, ok := expr.Fun.(*ast.SelectorExpr); ok { - if pureNotBuiltinFuncNames[selectorExpr.Sel.Name] { - return true - } - } - } - - return false - case *ast.CompositeLit: - return true - case *ast.FuncLit: - return true - case *ast.IndexExpr: - return s.isPureExpr(expr.X) && s.isPureExpr(expr.Index) - case *ast.SelectorExpr: - return s.isPureExpr(expr.X) - case *ast.SliceExpr: - return s.isPureExpr(expr.Low) && s.isPureExpr(expr.High) && s.isPureExpr(expr.Max) - case *ast.StarExpr: - return s.isPureExpr(expr.X) - case *ast.TypeAssertExpr: - return true - case *ast.UnaryExpr: - return s.isPureExpr(expr.X) - case *ast.ParenExpr: - return s.isPureExpr(expr.X) - - case *ast.InterfaceType: - return true - case *ast.ArrayType: - return true - case *ast.ChanType: - return true - case *ast.KeyValueExpr: - return true - case *ast.MapType: - return true - case *ast.StructType: - return true - case *ast.FuncType: - return true - - case *ast.Ellipsis: - return true - - case *ast.BadExpr: - return false - } - - return false -} diff --git a/internal/repl/repl.go b/internal/repl/repl.go deleted file mode 100644 index b567193..0000000 --- a/internal/repl/repl.go +++ /dev/null @@ -1,654 +0,0 @@ -package replpkg - -import ( - "bytes" - "errors" - "fmt" - "io/ioutil" - "os" - "os/exec" - "path/filepath" - "strings" - "syscall" - - "go/ast" - "go/build" - "go/importer" - "go/parser" - "go/printer" - "go/scanner" - "go/token" - "go/types" - - // Importing this package installs Import as go/types.DefaultImport. - "golang.org/x/tools/imports" - - "github.com/motemen/go-quickfix" -) - -const printerName = "__gophernotes" - -// Session encodes info about the current REPL session. -type Session struct { - FilePath string - File *ast.File - Fset *token.FileSet - Types *types.Config - TypeInfo types.Info - ExtraFilePaths []string - ExtraFiles []*ast.File - - mainBody *ast.BlockStmt - storedBodyLength int -} - -const initialSourceTemplate = ` -package main - -import %q - -func ` + printerName + `(xx ...interface{}) { - for _, x := range xx { - %s - } -} - -func main() { -} -` - -// printerPkgs is a list of packages that provides -// pretty printing function. -var printerPkgs = []struct { - path string - code string -}{ - {"github.com/k0kubun/pp", `pp.Println(x)`}, - {"github.com/davecgh/go-spew/spew", `spew.Printf("%#v\n", x)`}, - {"fmt", `fmt.Printf("%#v\n", x)`}, -} - -// NewSession initiates a new REPL -func NewSession() (*Session, error) { - - s := &Session{ - Fset: token.NewFileSet(), - Types: &types.Config{ - Importer: importer.Default(), - }, - } - - var err error - s.FilePath, err = tempFile() - if err != nil { - return nil, err - } - - var initialSource string - for _, pp := range printerPkgs { - _, err := importer.Default().Import(pp.path) - if err == nil { - initialSource = fmt.Sprintf(initialSourceTemplate, pp.path, pp.code) - break - } - debugf("could not import %q: %s", pp.path, err) - } - if initialSource == "" { - return nil, fmt.Errorf("Could not load pretty printing package") - } - - s.File, err = parser.ParseFile(s.Fset, "gophernotes_session.go", initialSource, parser.Mode(0)) - if err != nil { - return nil, err - } - - s.mainBody = s.mainFunc().Body - - return s, nil -} - -func (s *Session) mainFunc() *ast.FuncDecl { - return s.File.Scope.Lookup("main").Decl.(*ast.FuncDecl) -} - -// Run calls "go run" with appropriate files appended. -func (s *Session) Run() ([]byte, bytes.Buffer, error) { - f, err := os.Create(s.FilePath) - if err != nil { - return nil, bytes.Buffer{}, err - } - - err = printer.Fprint(f, s.Fset, s.File) - if err != nil { - return nil, bytes.Buffer{}, err - } - - return goRun(append(s.ExtraFilePaths, s.FilePath)) -} - -// tempFile prepares the temporary session file for the REPL. -func tempFile() (string, error) { - dir, err := ioutil.TempDir("", "") - if err != nil { - return "", err - } - - err = os.MkdirAll(dir, 0755) - if err != nil { - return "", err - } - - return filepath.Join(dir, "gophernotes_session.go"), nil -} - -func goRun(files []string) ([]byte, bytes.Buffer, error) { - - var stderr bytes.Buffer - - args := append([]string{"run"}, files...) - debugf("go %s", strings.Join(args, " ")) - cmd := exec.Command("go", args...) - cmd.Stdin = os.Stdin - cmd.Stderr = &stderr - out, err := cmd.Output() - return out, stderr, err -} - -func (s *Session) evalExpr(in string) (ast.Expr, error) { - expr, err := parser.ParseExpr(in) - if err != nil { - return nil, err - } - - stmt := &ast.ExprStmt{ - X: &ast.CallExpr{ - Fun: ast.NewIdent(printerName), - Args: []ast.Expr{expr}, - }, - } - - s.appendStatements(stmt) - - return expr, nil -} - -func isNamedIdent(expr ast.Expr, name string) bool { - ident, ok := expr.(*ast.Ident) - return ok && ident.Name == name -} - -func (s *Session) evalStmt(in string, noPrint bool) error { - src := fmt.Sprintf("package P; func F() { %s }", in) - f, err := parser.ParseFile(s.Fset, "stmt.go", src, parser.Mode(0)) - if err != nil { - debugf("stmt :: err = %s", err) - - // try to import this as a proxy function and correct for any imports - appendForImport := `package main - - - ` - - f, err := os.Create(string(filepath.Dir(s.FilePath)) + "/func_proxy.go") - if err != nil { - return err - } - - _, err = f.Write([]byte(appendForImport + in)) - if err != nil { - return err - } - f.Close() - - b := new(bytes.Buffer) - cmd := exec.Command("goimports", "-w", string(filepath.Dir(s.FilePath))+"/func_proxy.go") - cmd.Stdout = b - cmd.Stderr = b - err = cmd.Run() - if err != nil { - err = errors.New(b.String()) - return err - } - - functproxy, err := ioutil.ReadFile(string(filepath.Dir(s.FilePath)) + "/func_proxy.go") - if err != nil { - return err - } - - if err = s.importFile(functproxy); err != nil { - errorf("%s", err.Error()) - if _, ok := err.(scanner.ErrorList); ok { - return ErrContinue - } - } - - } - - enclosingFunc := f.Scope.Lookup("F").Decl.(*ast.FuncDecl) - stmts := enclosingFunc.Body.List - - if len(stmts) > 0 { - - debugf("evalStmt :: %s", showNode(s.Fset, stmts)) - lastStmt := stmts[len(stmts)-1] - - // print last assigned/defined values - if !noPrint { - if assign, ok := lastStmt.(*ast.AssignStmt); ok { - vs := []ast.Expr{} - for _, v := range assign.Lhs { - if !isNamedIdent(v, "_") { - vs = append(vs, v) - } - } - if len(vs) > 0 { - printLastValues := &ast.ExprStmt{ - X: &ast.CallExpr{ - Fun: ast.NewIdent(printerName), - Args: vs, - }, - } - stmts = append(stmts, printLastValues) - } - } - } - } - - s.appendStatements(stmts...) - - return nil -} - -func (s *Session) appendStatements(stmts ...ast.Stmt) { - s.mainBody.List = append(s.mainBody.List, stmts...) -} - -// Error is an exported error. -type Error string - -// ErrContinue and ErrQuit are specific exported error types. -const ( - ErrContinue Error = "" - ErrQuit Error = "" -) - -func (e Error) Error() string { - return string(e) -} - -func (s *Session) source(space bool) (string, error) { - normalizeNodePos(s.mainFunc()) - - var config *printer.Config - if space { - config = &printer.Config{ - Mode: printer.UseSpaces, - Tabwidth: 4, - } - } else { - config = &printer.Config{ - Tabwidth: 8, - } - } - - var buf bytes.Buffer - err := config.Fprint(&buf, s.Fset, s.File) - return buf.String(), err -} - -func (s *Session) reset() error { - source, err := s.source(false) - if err != nil { - return err - } - - file, err := parser.ParseFile(s.Fset, "gophernotes_session.go", source, parser.Mode(0)) - if err != nil { - return err - } - - s.File = file - s.mainBody = s.mainFunc().Body - - return nil -} - -// Eval handles the evaluation of code parsed from received messages -func (s *Session) Eval(in string) (string, bytes.Buffer, error) { - debugf("eval >>> %q", in) - - s.clearQuickFix() - s.storeMainBody() - - // Split the lines of the input to check for special commands. - inLines := strings.Split(in, "\n") - var nonImportLines []string - for idx, line := range inLines { - - // Extract non-special lines. - trimLine := strings.TrimSpace(line) - if !strings.HasPrefix(line, "import") && !strings.HasPrefix(line, ":") && !strings.HasPrefix(trimLine, "\"") && !strings.HasPrefix(line, ")") { - nonImportLines = append(nonImportLines, line) - continue - } - - // Process special commands. - var args []string - for _, command := range commands { - - // Clear the args. - args = []string{} - - // Extract any argument provided with the special command. - arg := strings.TrimPrefix(line, ":"+command.name) - if command.name == "import" { - arg = strings.TrimPrefix(arg, "import") - } - switch { - case arg == line: - continue - case strings.HasPrefix(strings.TrimSpace(arg), "("): - advance := 1 - currentLine := inLines[idx+advance] - for !strings.Contains(currentLine, ")") { - args = append(args, currentLine) - advance++ - currentLine = inLines[idx+advance] - } - default: - args = append(args, arg) - } - - // Apply the action associated with the special command. - for _, arg = range args { - if arg == "" || strings.HasPrefix(arg, " ") { - arg = strings.TrimSpace(arg) - _, err := command.action(s, arg) - if err != nil { - if err == ErrQuit { - return "", bytes.Buffer{}, err - } - errorf("%s: %s", command.name, err.Error()) - } - } - } - } - } - - // Join the non-special lines back together for evaluation. - in = strings.Join(nonImportLines, "\n") - if len(in) == 0 { - s.doQuickFix() - return "", bytes.Buffer{}, nil - } - - // Extract statements. - priorListLength := len(s.mainBody.List) - if err := s.separateEvalStmt(in); err != nil { - return "", *bytes.NewBuffer([]byte(err.Error())), err - } - - s.doQuickFix() - - output, stderr, runErr := s.Run() - if runErr != nil || stderr.String() != "" { - if exitErr, ok := runErr.(*exec.ExitError); ok { - // if failed with status 2, remove the last statement - if st, ok := exitErr.ProcessState.Sys().(syscall.WaitStatus); ok { - if st.ExitStatus() == 2 { - debugf("got exit status 2, popping out last input") - s.restoreMainBody() - runErr = nil - } - } - } - } - - // Cleanup the session file. - s.mainBody.List = s.mainBody.List[0:priorListLength] - if err := s.cleanEvalStmt(in); err != nil { - return string(output), stderr, err - } - f, err := os.Create(s.FilePath) - if err != nil { - return string(output), stderr, err - } - err = printer.Fprint(f, s.Fset, s.File) - if err != nil { - return string(output), stderr, err - } - - // Catch any unexpected stderr. - if stderr.String() != "" { - runErr = errors.New("Unexpected stderr from execution") - } - - return string(output), stderr, runErr -} - -// separateEvalStmt separates what can be evaluated via evalExpr from what cannot. -func (s *Session) separateEvalStmt(in string) error { - var stmtLines []string - var exprCount int - var bracketCount int - - inLines := strings.Split(in, "\n") - - for _, line := range inLines { - - if bracketCount == 0 && len(stmtLines) == 0 { - _, err := s.evalExpr(line) - if err != nil { - if strings.LastIndex(line, "{") == len(line)-1 { - bracketCount++ - } - } - if err == nil { - continue - } - } - - if strings.LastIndex(line, "}") == len(line)-1 { - if !strings.HasSuffix(line, "{}") { - bracketCount-- - } - } - if strings.LastIndex(line, "{") == len(line)-1 { - bracketCount++ - } - stmtLines = append(stmtLines, line) - - if bracketCount == 0 && len(stmtLines) > 0 { - - if err := s.evalStmt(strings.Join(stmtLines, "\n"), true); err != nil { - return err - } - stmtLines = []string{} - continue - } - - exprCount++ - } - - if len(stmtLines) > 0 { - var noPrint bool - if exprCount > 0 { - noPrint = true - } - if err := s.evalStmt(strings.Join(stmtLines, "\n"), noPrint); err != nil { - return err - } - } - - return nil -} - -// cleanEvalStmt cleans up prior print statements etc. -func (s *Session) cleanEvalStmt(in string) error { - var stmtLines []string - - inLines := strings.Split(in, "\n") - - for _, line := range inLines { - - beforeLines := len(s.mainBody.List) - if expr, err := s.evalExpr(line); err == nil { - if !s.isPureExpr(expr) { - s.mainBody.List = s.mainBody.List[0:beforeLines] - stmtLines = append(stmtLines, line) - } - continue - } - stmtLines = append(stmtLines, line) - } - - if len(stmtLines) != 0 { - if err := s.evalStmt(strings.Join(stmtLines, "\n"), true); err != nil { - return err - } - } - - return nil -} - -// storeMainBody stores current state of code so that it can be restored -// actually it saves the length of statements inside main() -func (s *Session) storeMainBody() { - s.storedBodyLength = len(s.mainBody.List) -} - -func (s *Session) restoreMainBody() { - s.mainBody.List = s.mainBody.List[0:s.storedBodyLength] -} - -// includeFiles imports packages and funcsions from multiple golang source -func (s *Session) includeFiles(files []string) { - for _, file := range files { - s.includeFile(file) - } -} - -func (s *Session) includeFile(file string) { - content, err := ioutil.ReadFile(file) - if err != nil { - errorf("%s", err.Error()) - return - } - - if err = s.importPackages(content); err != nil { - errorf("%s", err.Error()) - return - } - - if err = s.importFile(content); err != nil { - errorf("%s", err.Error()) - } - - infof("added file %s", file) -} - -// importPackages includes packages defined on external file into main file -func (s *Session) importPackages(src []byte) error { - astf, err := parser.ParseFile(s.Fset, "", src, parser.Mode(0)) - if err != nil { - return err - } - - for _, imt := range astf.Imports { - debugf("import package: %s", imt.Path.Value) - actionImport(s, imt.Path.Value) - } - - return nil -} - -// importFile adds external golang file to goRun target to use its function -func (s *Session) importFile(src []byte) error { - // Don't need to same directory - tmp, err := ioutil.TempFile(filepath.Dir(s.FilePath), "gore_extarnal_") - if err != nil { - return err - } - - ext := tmp.Name() + ".go" - - f, err := parser.ParseFile(s.Fset, ext, src, parser.Mode(0)) - if err != nil { - return err - } - - // rewrite to package main - f.Name.Name = "main" - - // remove func main() - for i, decl := range f.Decls { - if funcDecl, ok := decl.(*ast.FuncDecl); ok { - if isNamedIdent(funcDecl.Name, "main") { - f.Decls = append(f.Decls[0:i], f.Decls[i+1:]...) - // main() removed from this file, we may have to - // remove some unsed import's - quickfix.QuickFix(s.Fset, []*ast.File{f}) - break - } - } - } - - out, err := os.Create(ext) - if err != nil { - return err - } - defer out.Close() - - err = printer.Fprint(out, s.Fset, f) - if err != nil { - return err - } - - debugf("import file: %s", ext) - s.ExtraFilePaths = append(s.ExtraFilePaths, ext) - s.ExtraFiles = append(s.ExtraFiles, f) - - return nil -} - -// fixImports formats and adjusts imports for the current AST. -func (s *Session) fixImports() error { - - var buf bytes.Buffer - err := printer.Fprint(&buf, s.Fset, s.File) - if err != nil { - return err - } - - formatted, err := imports.Process("", buf.Bytes(), nil) - if err != nil { - return err - } - - s.File, err = parser.ParseFile(s.Fset, "", formatted, parser.Mode(0)) - if err != nil { - return err - } - s.mainBody = s.mainFunc().Body - - return nil -} - -func (s *Session) includePackage(path string) error { - pkg, err := build.Import(path, ".", 0) - if err != nil { - var err2 error - pkg, err2 = build.ImportDir(path, 0) - if err2 != nil { - return err // return package path import error, not directory import error as build.Import can also import directories if "./foo" is specified - } - } - - files := make([]string, len(pkg.GoFiles)) - for i, f := range pkg.GoFiles { - files[i] = filepath.Join(pkg.Dir, f) - } - s.includeFiles(files) - - return nil -} diff --git a/internal/repl/utils.go b/internal/repl/utils.go deleted file mode 100644 index 6b22f4d..0000000 --- a/internal/repl/utils.go +++ /dev/null @@ -1,14 +0,0 @@ -package replpkg - -import ( - "bytes" - - "go/printer" - "go/token" -) - -func showNode(fset *token.FileSet, node interface{}) string { - var buf bytes.Buffer - printer.Fprint(&buf, fset, node) - return buf.String() -} diff --git a/kernel.go b/kernel.go new file mode 100644 index 0000000..2c7ec06 --- /dev/null +++ b/kernel.go @@ -0,0 +1,304 @@ +package main + +import ( + "encoding/json" + "fmt" + "io/ioutil" + "log" + "os" + + "github.com/cosmos72/gomacro/classic" + zmq "github.com/pebbe/zmq4" +) + +// ExecCounter is incremented each time we run user code in the notebook. +var ExecCounter int + +// ConnectionInfo stores the contents of the kernel connection +// file created by Jupyter. +type ConnectionInfo struct { + SignatureScheme string `json:"signature_scheme"` + Transport string `json:"transport"` + StdinPort int `json:"stdin_port"` + ControlPort int `json:"control_port"` + IOPubPort int `json:"iopub_port"` + HBPort int `json:"hb_port"` + ShellPort int `json:"shell_port"` + Key string `json:"key"` + IP string `json:"ip"` +} + +// SocketGroup holds the sockets needed to communicate with the kernel, +// and the key for message signing. +type SocketGroup struct { + ShellSocket *zmq.Socket + ControlSocket *zmq.Socket + StdinSocket *zmq.Socket + IOPubSocket *zmq.Socket + Key []byte +} + +// kernelInfo holds information about the igo kernel, for +// kernel_info_reply messages. +type kernelInfo struct { + ProtocolVersion []int `json:"protocol_version"` + Language string `json:"language"` +} + +// kernelStatus holds a kernel state, for status broadcast messages. +type kernelStatus struct { + ExecutionState string `json:"execution_state"` +} + +// shutdownReply encodes a boolean indication of stutdown/restart +type shutdownReply struct { + Restart bool `json:"restart"` +} + +// runKernel is the main entry point to start the kernel. +func runKernel(connectionFile string) { + + // Set up the "Session" with the replpkg. + ir := classic.New() + + // Parse the connection info. + var connInfo ConnectionInfo + + connData, err := ioutil.ReadFile(connectionFile) + if err != nil { + log.Fatal(err) + } + + if err = json.Unmarshal(connData, &connInfo); err != nil { + log.Fatal(err) + } + + // Set up the ZMQ sockets through which the kernel will communicate. + sockets, err := prepareSockets(connInfo) + if err != nil { + log.Fatal(err) + } + + poller := zmq.NewPoller() + poller.Add(sockets.ShellSocket, zmq.POLLIN) + poller.Add(sockets.StdinSocket, zmq.POLLIN) + poller.Add(sockets.ControlSocket, zmq.POLLIN) + + // msgParts will store a received multipart message. + var msgParts [][]byte + + // Start a message receiving loop. + for { + polled, err := poller.Poll(-1) + if err != nil { + log.Fatal(err) + } + + for _, item := range polled { + + // Handle various types of messages. + switch socket := item.Socket; socket { + + // Handle shell messages. + case sockets.ShellSocket: + msgparts, err := sockets.ShellSocket.RecvMessageBytes(0) + if err != nil { + log.Println(err) + } + + msg, ids, err := WireMsgToComposedMsg(msgparts, sockets.Key) + if err != nil { + log.Println(err) + return + } + + handleShellMsg(ir, msgReceipt{msg, ids, sockets}) + + // TODO Handle stdin socket. + case sockets.StdinSocket: + sockets.StdinSocket.RecvMessageBytes(0) + + // Handle control messages. + case sockets.ControlSocket: + msgparts, err := sockets.ControlSocket.RecvMessageBytes(0) + if err != nil { + log.Println(err) + return + } + + msg, ids, err := WireMsgToComposedMsg(msgparts, sockets.Key) + if err != nil { + log.Println(err) + return + } + + handleShellMsg(ir, msgReceipt{msg, ids, sockets}) + } + } + } +} + +// prepareSockets sets up the ZMQ sockets through which the kernel +// will communicate. +func prepareSockets(connInfo ConnectionInfo) (SocketGroup, error) { + + // Initialize the context. + context, err := zmq.NewContext() + if err != nil { + return SocketGroup{}, err + } + + // Initialize the socket group. + var sg SocketGroup + + sg.ShellSocket, err = context.NewSocket(zmq.ROUTER) + if err != nil { + return sg, err + } + + sg.ControlSocket, err = context.NewSocket(zmq.ROUTER) + if err != nil { + return sg, err + } + + sg.StdinSocket, err = context.NewSocket(zmq.ROUTER) + if err != nil { + return sg, err + } + + sg.IOPubSocket, err = context.NewSocket(zmq.PUB) + if err != nil { + return sg, err + } + + // Bind the sockets. + address := fmt.Sprintf("%v://%v:%%v", connInfo.Transport, connInfo.IP) + sg.ShellSocket.Bind(fmt.Sprintf(address, connInfo.ShellPort)) + sg.ControlSocket.Bind(fmt.Sprintf(address, connInfo.ControlPort)) + sg.StdinSocket.Bind(fmt.Sprintf(address, connInfo.StdinPort)) + sg.IOPubSocket.Bind(fmt.Sprintf(address, connInfo.IOPubPort)) + + // Set the message signing key. + sg.Key = []byte(connInfo.Key) + + return sg, nil +} + +// handleShellMsg responds to a message on the shell ROUTER socket. +func handleShellMsg(ir *classic.Interp, receipt msgReceipt) { + switch receipt.Msg.Header.MsgType { + case "kernel_info_request": + if err := sendKernelInfo(receipt); err != nil { + log.Fatal(err) + } + case "execute_request": + if err := handleExecuteRequest(ir, receipt); err != nil { + log.Fatal(err) + } + case "shutdown_request": + if err := handleShutdownRequest(receipt); err != nil { + log.Fatal(err) + } + default: + log.Println("Unhandled shell message: ", receipt.Msg.Header.MsgType) + } +} + +// sendKernelInfo sends a kernel_info_reply message. +func sendKernelInfo(receipt msgReceipt) error { + reply, err := NewMsg("kernel_info_reply", receipt.Msg) + if err != nil { + return err + } + + reply.Content = kernelInfo{[]int{4, 0}, "go"} + if err := receipt.SendResponse(receipt.Sockets.ShellSocket, reply); err != nil { + return err + } + + return nil +} + +// handleExecuteRequest runs code from an execute_request method, +// and sends the various reply messages. +func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { + + reply, err := NewMsg("execute_reply", receipt.Msg) + if err != nil { + return err + } + + content := make(map[string]interface{}) + + reqcontent := receipt.Msg.Content.(map[string]interface{}) + code := reqcontent["code"].(string) + silent := reqcontent["silent"].(bool) + + if !silent { + ExecCounter++ + } + + content["execution_count"] = ExecCounter + + // Do the compilation/execution magic. + rawVal, _ := ir.Eval(code) + val := rawVal.(string) + + if err == nil { + content["status"] = "ok" + content["payload"] = make([]map[string]interface{}, 0) + content["user_variables"] = make(map[string]string) + content["user_expressions"] = make(map[string]string) + if len(val) > 0 && !silent { + var outContent OutputMsg + out := NewMsg("pyout", receipt.Msg) + outContent.Execcount = ExecCounter + outContent.Data = make(map[string]string) + outContent.Data["text/plain"] = fmt.Sprint(val) + outContent.Metadata = make(map[string]interface{}) + out.Content = outContent + receipt.SendResponse(receipt.Sockets.IOPubSocket, out) + } + } else { + content["status"] = "error" + content["ename"] = "ERROR" + content["evalue"] = err.Error() + content["traceback"] = nil + errormsg := NewMsg("pyerr", receipt.Msg) + errormsg.Content = ErrMsg{"Error", err.Error(), nil} + receipt.SendResponse(receipt.Sockets.IOPubSocket, errormsg) + } + + // Send the output back to the notebook. + reply.Content = content + + if err := receipt.SendResponse(receipt.Sockets.ShellSocket, reply); err != nil { + return err + } + + idle := NewMsg("status", receipt.Msg) + idle.Content = KernelStatus{"idle"} + + if err := receipt.SendResponse(receipt.Sockets.IOPubSocket, idle); err != nil { + return err + } +} + +// handleShutdownRequest sends a "shutdown" message +func handleShutdownRequest(receipt msgReceipt) error { + reply, err := NewMsg("shutdown_reply", receipt.Msg) + if err != nil { + return err + } + + content := receipt.Msg.Content.(map[string]interface{}) + restart := content["restart"].(bool) + reply.Content = ShutdownReply{restart} + + if err := receipt.SendResponse(receipt.Sockets.ShellSocket, reply); err != nil { + return err + } + + log.Println("Shutting down in response to shutdown_request") + os.Exit(0) +} diff --git a/main.go b/main.go index 00a7eba..d0469a7 100644 --- a/main.go +++ b/main.go @@ -2,25 +2,17 @@ package main import ( "flag" - "io" - "io/ioutil" "log" - "os" ) func main() { - debug := flag.Bool("debug", false, "Log extra info to stderr") - + // Parse the connection file. flag.Parse() if flag.NArg() < 1 { - log.Fatalln("Need a command line argument for the connection file.") - } - - var logwriter io.Writer = os.Stderr - if !*debug { - logwriter = ioutil.Discard + log.Fatalln("Need a command line argument specifying the connection file.") } - RunKernel(flag.Arg(0), logwriter) + // Run the kernel. + RunKernel(flag.Arg(0)) } diff --git a/messages.go b/messages.go index 2e23f2a..51f5a33 100644 --- a/messages.go +++ b/messages.go @@ -5,11 +5,9 @@ import ( "crypto/sha256" "encoding/hex" "encoding/json" - "log" - zmq "github.com/alecthomas/gozmq" uuid "github.com/nu7hatch/gouuid" - "github.com/pkg/errors" + zmq "github.com/pebbe/zmq4" ) // MsgHeader encodes header info for ZMQ messages. @@ -28,6 +26,28 @@ type ComposedMsg struct { Content interface{} } +// msgReceipt represents a received message, its return identities, and +// the sockets for communication. +type msgReceipt struct { + Msg ComposedMsg + Identities [][]byte + Sockets SocketGroup +} + +// OutputMsg holds the data for a pyout message. +type OutputMsg struct { + Execcount int `json:"execution_count"` + Data map[string]string `json:"data"` + Metadata map[string]interface{} `json:"metadata"` +} + +// ErrMsg encodes the traceback of errors output to the notebook. +type ErrMsg struct { + EName string `json:"ename"` + EValue string `json:"evalue"` + Traceback []string `json:"traceback"` +} + // InvalidSignatureError is returned when the signature on a received message does not // validate. type InvalidSignatureError struct{} @@ -47,7 +67,7 @@ func WireMsgToComposedMsg(msgparts [][]byte, signkey []byte) (ComposedMsg, [][]b } identities := msgparts[:i] - // Validate signature + // Validate signature. var msg ComposedMsg if len(signkey) != 0 { mac := hmac.New(sha256.New, signkey) @@ -60,6 +80,8 @@ func WireMsgToComposedMsg(msgparts [][]byte, signkey []byte) (ComposedMsg, [][]b return msg, nil, &InvalidSignatureError{} } } + + // Unmarshal contents. json.Unmarshal(msgparts[i+2], &msg.Header) json.Unmarshal(msgparts[i+3], &msg.ParentHeader) json.Unmarshal(msgparts[i+4], &msg.Metadata) @@ -72,30 +94,32 @@ func WireMsgToComposedMsg(msgparts [][]byte, signkey []byte) (ComposedMsg, [][]b func (msg ComposedMsg) ToWireMsg(signkey []byte) ([][]byte, error) { msgparts := make([][]byte, 5) + header, err := json.Marshal(msg.Header) if err != nil { - return msgparts, errors.Wrap(err, "Could not marshal message header") + return msgparts, err } msgparts[1] = header parentHeader, err := json.Marshal(msg.ParentHeader) if err != nil { - return msgparts, errors.Wrap(err, "Could not marshal parent header") + return msgparts, err } msgparts[2] = parentHeader if msg.Metadata == nil { msg.Metadata = make(map[string]interface{}) } + metadata, err := json.Marshal(msg.Metadata) if err != nil { - return msgparts, errors.Wrap(err, "Could not marshal metadata") + return msgparts, err } msgparts[3] = metadata content, err := json.Marshal(msg.Content) if err != nil { - return msgparts, errors.Wrap(err, "Could not marshal content") + return msgparts, err } msgparts[4] = content @@ -108,43 +132,49 @@ func (msg ComposedMsg) ToWireMsg(signkey []byte) ([][]byte, error) { msgparts[0] = make([]byte, hex.EncodedLen(mac.Size())) hex.Encode(msgparts[0], mac.Sum(nil)) } - return msgparts, nil -} -// MsgReceipt represents a received message, its return identities, and the sockets for -// communication. -type MsgReceipt struct { - Msg ComposedMsg - Identities [][]byte - Sockets SocketGroup + return msgparts, nil } // SendResponse sends a message back to return identites of the received message. -func (receipt *MsgReceipt) SendResponse(socket *zmq.Socket, msg ComposedMsg) { +func (receipt *msgReceipt) SendResponse(socket *zmq.Socket, msg ComposedMsg) error { + + for _, idt := range receipt.Identities { + _, err := socket.Send(idt, zmq.SNDMORE) + if err != nil { + return err + } + } - socket.SendMultipart(receipt.Identities, zmq.SNDMORE) - socket.Send([]byte(""), zmq.SNDMORE) + _, err := socket.Send([]byte(""), zmq.SNDMORE) + if err != nil { + return err + } - msgParts, err := msg.ToWireMsg(receipt.Sockets.Key) + msgParts, err = msg.ToWireMsg(receipt.Sockets.Key) if err != nil { - log.Fatalln(err) + return err + } + + _, err = socket.SendMessage(msgParts) + if err != nil { + return err } - socket.SendMultipart(msgParts, 0) - logger.Println("<--", msg.Header.MsgType) - logger.Printf("%+v\n", msg.Content) } -// NewMsg creates a new ComposedMsg to respond to a parent message. This includes setting -// up its headers. -func NewMsg(msgType string, parent ComposedMsg) (msg ComposedMsg) { +// NewMsg creates a new ComposedMsg to respond to a parent message. +// This includes setting up its headers. +func NewMsg(msgType string, parent ComposedMsg) (ComposedMsg, error) { msg.ParentHeader = parent.Header msg.Header.Session = parent.Header.Session msg.Header.Username = parent.Header.Username msg.Header.MsgType = msgType + u, err := uuid.NewV4() if err != nil { - log.Fatalln(errors.Wrap(err, "Could not generate UUID")) + return msg, err } msg.Header.MsgID = u.String() - return + + return msg, nil } diff --git a/vendor/github.com/alecthomas/gozmq/.gitignore b/vendor/github.com/alecthomas/gozmq/.gitignore deleted file mode 100644 index 9b46cdf..0000000 --- a/vendor/github.com/alecthomas/gozmq/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -*.o -*.a -*.[568vq] -[568vq].out -*.cgo1.go -*.cgo2.c -_cgo_defun.c -_cgo_gotypes.go -_cgo_export.* -*.so -_obj -_test -_testmain.go -*.exe -.cache diff --git a/vendor/github.com/alecthomas/gozmq/.godocdown.md b/vendor/github.com/alecthomas/gozmq/.godocdown.md deleted file mode 100644 index 8a3e12f..0000000 --- a/vendor/github.com/alecthomas/gozmq/.godocdown.md +++ /dev/null @@ -1,158 +0,0 @@ -# Go (golang) Bindings for 0mq (zmq, zeromq) - -[![Build Status](https://travis-ci.org/alecthomas/gozmq.png)](https://travis-ci.org/alecthomas/gozmq) - -This package implements [Go](http://golang.org) (golang) bindings for -the [0mq](http://zeromq.org) C API. - -It is licensed under the [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0). - -GoZMQ [does not](#zero-copy) support zero-copy. - -A full list of examples is included in the [zguide](https://github.com/imatix/zguide/tree/master/examples/Go). - -Note that this is *not* the same as [this -implementation](http://github.com/boggle/gozero) or [this -implementation](http://code.google.com/p/gozmq/). - -## Upgrading - -GoZMQ has made some public changes that will break old code. Fortunately, we've also written a tool based on `go fix` that will upgrade your code for you! Here's how to run it over your source (after making a backup of course): - - go get github.com/alecthomas/gozmq/gozmqfix - cd $YOUR_SOURCE_DIR - gozmqfix . - -## Installing - -GoZMQ currently supports ZMQ 2.1.x, 2.2.x and *basic* support for 3.x. Following are instructions on how to compile against these versions. - -Install gozmq with: - - go get github.com/alecthomas/gozmq - -This implementation works currently against:: ZeroMQ 2.2.x - -### ZeroMQ 2.1.x - -If you're using ZeroMQ 2.1.x, install with: - - go get -tags zmq_2_1 github.com/alecthomas/gozmq - -### ZeroMQ 3.x - -There is *basic* support for ZeroMQ 3.x. Install with: - - go get -tags zmq_3_x github.com/alecthomas/gozmq - -### Troubleshooting - -#### Go can't find ZMQ - -If the go tool can't find zmq and you know it is installed, you may need to override the C compiler/linker flags. - -eg. If you installed zmq into `/opt/zmq` you might try: - - CGO_CFLAGS=-I/opt/zmq/include CGO_LDFLAGS=-L/opt/zmq/lib \ - go get github.com/alecthomas/gozmq - -#### Mismatch in version of ZMQ - -If you get errors like this with 'go get' or 'go build': - - 1: error: 'ZMQ_FOO' undeclared (first use in this function) - -There are two possibilities: - -1. Your version of zmq is *very* old. In this case you will need to download and build zmq yourself. -2. You are building gozmq against the wrong version of zmq. See the [installation](#installation) instructions for details on how to target the correct version. - -## Differences from the C API - -The API implemented by this package does not attempt to expose -`zmq_msg_t` at all. Instead, `Recv()` and `Send()` both operate on byte -slices, allocating and freeing the memory automatically. Currently this -requires copying to/from C malloced memory, but a future implementation -may be able to avoid this to a certain extent. - -All major features are supported: contexts, sockets, devices, and polls. - -## Example - -Here are direct translations of some of the examples from [this blog -post](http://nichol.as/zeromq-an-introduction). - -A simple echo server: - -```go -package main - -import zmq "github.com/alecthomas/gozmq" - -func main() { - context, _ := zmq.NewContext() - socket, _ := context.NewSocket(zmq.REP) - socket.Bind("tcp://127.0.0.1:5000") - socket.Bind("tcp://127.0.0.1:6000") - - for { - msg, _ := socket.Recv(0) - println("Got", string(msg)) - socket.Send(msg, 0) - } -} -``` - -A simple client for the above server: - -```go -package main - -import "fmt" -import zmq "github.com/alecthomas/gozmq" - -func main() { - context, _ := zmq.NewContext() - socket, _ := context.NewSocket(zmq.REQ) - socket.Connect("tcp://127.0.0.1:5000") - socket.Connect("tcp://127.0.0.1:6000") - - for i := 0; i < 10; i++ { - msg := fmt.Sprintf("msg %d", i) - socket.Send([]byte(msg), 0) - println("Sending", msg) - socket.Recv(0) - } -} -``` - -## Caveats - -### Zero-copy - -GoZMQ does not support zero-copy. - -GoZMQ does not attempt to expose `zmq_msg_t` at all. Instead, `Recv()` and `Send()` -both operate on byte slices, allocating and freeing the memory automatically. -Currently this requires copying to/from C malloced memory, but a future -implementation may be able to avoid this to a certain extent. - - -### Memory management - -It's not entirely clear from the 0mq documentation how memory for -`zmq_msg_t` and packet data is managed once 0mq takes ownership. After -digging into the source a little, this package operates under the -following (educated) assumptions: - -- References to `zmq_msg_t` structures are not held by the C API - beyond the duration of any function call. -- Packet data is reference counted internally by the C API. The count - is incremented when a packet is queued for delivery to a destination - (the inference being that for delivery to N destinations, the - reference count will be incremented N times) and decremented once - the packet has either been delivered or errored. - -{{ .EmitUsage }} - -*(generated from .[godocdown](https://github.com/robertkrimen/godocdown).md with `godocdown github.com/alecthomas/gozmq > README.md`)* diff --git a/vendor/github.com/alecthomas/gozmq/.todo2 b/vendor/github.com/alecthomas/gozmq/.todo2 deleted file mode 100644 index 375a2b8..0000000 --- a/vendor/github.com/alecthomas/gozmq/.todo2 +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "GoZMQ - ZMQ bindings for Go", - "tasks": [] -} \ No newline at end of file diff --git a/vendor/github.com/alecthomas/gozmq/.travis.yml b/vendor/github.com/alecthomas/gozmq/.travis.yml deleted file mode 100644 index 462490a..0000000 --- a/vendor/github.com/alecthomas/gozmq/.travis.yml +++ /dev/null @@ -1,6 +0,0 @@ -before_install: -- sudo apt-get install libzmq3-dev -language: go -go: 1.1.1 -install: go get -tags zmq_3_x -d -v ./... && go build -tags zmq_3_x -v ./... -script: go test -v -tags zmq_3_x ./... diff --git a/vendor/github.com/alecthomas/gozmq/AUTHORS b/vendor/github.com/alecthomas/gozmq/AUTHORS deleted file mode 100644 index 1687393..0000000 --- a/vendor/github.com/alecthomas/gozmq/AUTHORS +++ /dev/null @@ -1,9 +0,0 @@ -The GoZmq package was originally written by Alec Thomas . - -Thanks to the following frequent contributors: - - @mcgoo Jim McGrath (https://github.com/mcgoo) - @jtacoma Joshua Tacoma (https://github.com/jtacoma) - @jhawk28 - -And many others. diff --git a/vendor/github.com/alecthomas/gozmq/README.md b/vendor/github.com/alecthomas/gozmq/README.md deleted file mode 100644 index 15f836f..0000000 --- a/vendor/github.com/alecthomas/gozmq/README.md +++ /dev/null @@ -1,1024 +0,0 @@ -# _NOTE:_ These gozmq bindings are in maintenance mode. Only critical bugs will be fixed. Henceforth I would suggest using [@pebbe's](https://github.com/pebbe) actively maintained bindings for [zmq2](https://github.com/pebbe/zmq2), [zmq3](https://github.com/pebbe/zmq3) and [zmq4](https://github.com/pebbe/zmq4). - -## Go (golang) Bindings for 0mq (zmq, zeromq) - -[![Build Status](https://travis-ci.org/alecthomas/gozmq.png)](https://travis-ci.org/alecthomas/gozmq) - -This package implements [Go](http://golang.org) (golang) bindings for -the [0mq](http://zeromq.org) C API. - -GoZMQ [does not](#zero-copy) support zero-copy. - -A full list of examples is included in the [zguide](https://github.com/imatix/zguide/tree/master/examples/Go). - -Note that this is *not* the same as [this -implementation](http://github.com/boggle/gozero) or [this -implementation](http://code.google.com/p/gozmq/). - -## Upgrading - -GoZMQ has made some public changes that will break old code. Fortunately, we've also written a tool based on `go fix` that will upgrade your code for you! Here's how to run it over your source (after making a backup of course): - - go get github.com/alecthomas/gozmq/gozmqfix - cd $YOUR_SOURCE_DIR - gozmqfix . - -## Installing - -GoZMQ currently supports ZMQ 2.1.x, 2.2.x, 3.x and 4.x. Following are instructions on how to compile against these versions. - -For ZeroMQ 2.2.x install with: - - go get github.com/alecthomas/gozmq - -For 2.1.x install with: - - go get -tags zmq_2_1 github.com/alecthomas/gozmq - -For 3.x install with: - - go get -tags zmq_3_x github.com/alecthomas/gozmq - -For 4.x install with: - - go get -tags zmq_4_x github.com/alecthomas/gozmq - -### Troubleshooting - -#### Go can't find ZMQ - -If the go tool can't find zmq and you know it is installed, you may need to override the C compiler/linker flags. - -eg. If you installed zmq into `/opt/zmq` you might try: - - CGO_CFLAGS=-I/opt/zmq/include CGO_LDFLAGS=-L/opt/zmq/lib \ - go get github.com/alecthomas/gozmq - -#### Mismatch in version of ZMQ - -If you get errors like this with 'go get' or 'go build': - - 1: error: 'ZMQ_FOO' undeclared (first use in this function) - -There are two possibilities: - -1. Your version of zmq is *very* old. In this case you will need to download and build zmq yourself. -2. You are building gozmq against the wrong version of zmq. See the [installation](#installation) instructions for details on how to target the correct version. - -## Differences from the C API - -The API implemented by this package does not attempt to expose -`zmq_msg_t` at all. Instead, `Recv()` and `Send()` both operate on byte -slices, allocating and freeing the memory automatically. Currently this -requires copying to/from C malloced memory, but a future implementation -may be able to avoid this to a certain extent. - -All major features are supported: contexts, sockets, devices, and polls. - -## Example - -Here are direct translations of some of the examples from [this blog -post](http://nichol.as/zeromq-an-introduction). - -A simple echo server: - -```go -package main - -import zmq "github.com/alecthomas/gozmq" - -func main() { - context, _ := zmq.NewContext() - socket, _ := context.NewSocket(zmq.REP) - socket.Bind("tcp://127.0.0.1:5000") - socket.Bind("tcp://127.0.0.1:6000") - - for { - msg, _ := socket.Recv(0) - println("Got", string(msg)) - socket.Send(msg, 0) - } -} -``` - -A simple client for the above server: - -```go -package main - -import "fmt" -import zmq "github.com/alecthomas/gozmq" - -func main() { - context, _ := zmq.NewContext() - socket, _ := context.NewSocket(zmq.REQ) - socket.Connect("tcp://127.0.0.1:5000") - socket.Connect("tcp://127.0.0.1:6000") - - for i := 0; i < 10; i++ { - msg := fmt.Sprintf("msg %d", i) - socket.Send([]byte(msg), 0) - println("Sending", msg) - socket.Recv(0) - } -} -``` - -## Caveats - -### Zero-copy - -GoZMQ does not support zero-copy. - -GoZMQ does not attempt to expose `zmq_msg_t` at all. Instead, `Recv()` and `Send()` -both operate on byte slices, allocating and freeing the memory automatically. -Currently this requires copying to/from C malloced memory, but a future -implementation may be able to avoid this to a certain extent. - - -### Memory management - -It's not entirely clear from the 0mq documentation how memory for -`zmq_msg_t` and packet data is managed once 0mq takes ownership. After -digging into the source a little, this package operates under the -following (educated) assumptions: - -- References to `zmq_msg_t` structures are not held by the C API - beyond the duration of any function call. -- Packet data is reference counted internally by the C API. The count - is incremented when a packet is queued for delivery to a destination - (the inference being that for delivery to N destinations, the - reference count will be incremented N times) and decremented once - the packet has either been delivered or errored. - -## Usage - -```go -const ( - // NewSocket types - PAIR = SocketType(C.ZMQ_PAIR) - PUB = SocketType(C.ZMQ_PUB) - SUB = SocketType(C.ZMQ_SUB) - REQ = SocketType(C.ZMQ_REQ) - REP = SocketType(C.ZMQ_REP) - DEALER = SocketType(C.ZMQ_DEALER) - ROUTER = SocketType(C.ZMQ_ROUTER) - PULL = SocketType(C.ZMQ_PULL) - PUSH = SocketType(C.ZMQ_PUSH) - XPUB = SocketType(C.ZMQ_XPUB) - XSUB = SocketType(C.ZMQ_XSUB) - - // Deprecated aliases - XREQ = DEALER - XREP = ROUTER - UPSTREAM = PULL - DOWNSTREAM = PUSH - - // NewSocket options - AFFINITY = UInt64SocketOption(C.ZMQ_AFFINITY) - IDENTITY = StringSocketOption(C.ZMQ_IDENTITY) - SUBSCRIBE = StringSocketOption(C.ZMQ_SUBSCRIBE) - UNSUBSCRIBE = StringSocketOption(C.ZMQ_UNSUBSCRIBE) - RATE = Int64SocketOption(C.ZMQ_RATE) - RECOVERY_IVL = Int64SocketOption(C.ZMQ_RECOVERY_IVL) - SNDBUF = UInt64SocketOption(C.ZMQ_SNDBUF) - RCVBUF = UInt64SocketOption(C.ZMQ_RCVBUF) - FD = Int64SocketOption(C.ZMQ_FD) - EVENTS = UInt64SocketOption(C.ZMQ_EVENTS) - TYPE = UInt64SocketOption(C.ZMQ_TYPE) - LINGER = IntSocketOption(C.ZMQ_LINGER) - RECONNECT_IVL = IntSocketOption(C.ZMQ_RECONNECT_IVL) - RECONNECT_IVL_MAX = IntSocketOption(C.ZMQ_RECONNECT_IVL_MAX) - BACKLOG = IntSocketOption(C.ZMQ_BACKLOG) - - // Send/recv options - SNDMORE = SendRecvOption(C.ZMQ_SNDMORE) -) -``` - -```go -const ( - POLLIN = PollEvents(C.ZMQ_POLLIN) - POLLOUT = PollEvents(C.ZMQ_POLLOUT) - POLLERR = PollEvents(C.ZMQ_POLLERR) -) -``` - -```go -const ( - STREAMER = DeviceType(C.ZMQ_STREAMER) - FORWARDER = DeviceType(C.ZMQ_FORWARDER) - QUEUE = DeviceType(C.ZMQ_QUEUE) -) -``` - -```go -const ( - RCVTIMEO = IntSocketOption(C.ZMQ_RCVTIMEO) - SNDTIMEO = IntSocketOption(C.ZMQ_SNDTIMEO) -) -``` - -```go -const ( - RCVMORE = UInt64SocketOption(C.ZMQ_RCVMORE) - RECOVERY_IVL_MSEC = Int64SocketOption(C.ZMQ_RECOVERY_IVL_MSEC) - SWAP = Int64SocketOption(C.ZMQ_SWAP) - MCAST_LOOP = Int64SocketOption(C.ZMQ_MCAST_LOOP) - HWM = UInt64SocketOption(C.ZMQ_HWM) - NOBLOCK = SendRecvOption(C.ZMQ_NOBLOCK) - - // Forwards-compatible aliases: - DONTWAIT = NOBLOCK -) -``` - -```go -const ( - RCVMORE = IntSocketOption(C.ZMQ_RCVMORE) - SNDHWM = IntSocketOption(C.ZMQ_SNDHWM) - RCVHWM = IntSocketOption(C.ZMQ_RCVHWM) - - // TODO Not documented in the man page... - //LAST_ENDPOINT = UInt64SocketOption(C.ZMQ_LAST_ENDPOINT) - FAIL_UNROUTABLE = BoolSocketOption(C.ZMQ_FAIL_UNROUTABLE) - TCP_KEEPALIVE = IntSocketOption(C.ZMQ_TCP_KEEPALIVE) - TCP_KEEPALIVE_CNT = IntSocketOption(C.ZMQ_TCP_KEEPALIVE_CNT) - TCP_KEEPALIVE_IDLE = IntSocketOption(C.ZMQ_TCP_KEEPALIVE_IDLE) - TCP_KEEPALIVE_INTVL = IntSocketOption(C.ZMQ_TCP_KEEPALIVE_INTVL) - TCP_ACCEPT_FILTER = StringSocketOption(C.ZMQ_TCP_ACCEPT_FILTER) - - // Message options - MORE = MessageOption(C.ZMQ_MORE) - - // Send/recv options - DONTWAIT = SendRecvOption(C.ZMQ_DONTWAIT) - - // Deprecated aliases - NOBLOCK = DONTWAIT -) -``` - -```go -var ( - // Additional ZMQ errors - ENOTSOCK error = zmqErrno(C.ENOTSOCK) - EFSM error = zmqErrno(C.EFSM) - EINVAL error = zmqErrno(C.EINVAL) - ENOCOMPATPROTO error = zmqErrno(C.ENOCOMPATPROTO) - ETERM error = zmqErrno(C.ETERM) - EMTHREAD error = zmqErrno(C.EMTHREAD) -) -``` - -#### func Device - -```go -func Device(t DeviceType, in, out *Socket) error -``` -run a zmq_device passing messages between in and out - -#### func Poll - -```go -func Poll(items []PollItem, timeout time.Duration) (count int, err error) -``` -Poll ZmqSockets and file descriptors for I/O readiness. Timeout is in -time.Duration. The smallest possible timeout is time.Millisecond for ZeroMQ -version 3 and above, and time.Microsecond for earlier versions. - -#### func Proxy - -```go -func Proxy(in, out, capture *Socket) error -``` -run a zmq_proxy with in, out and capture sockets - -#### func Version - -```go -func Version() (int, int, int) -``` -void zmq_version (int *major, int *minor, int *patch); - -#### type BoolSocketOption - -```go -type BoolSocketOption int -``` - - -#### type Context - -```go -type Context struct { -} -``` - -* A context handles socket creation and asynchronous message delivery. * There -should generally be one context per application. - -#### func NewContext - -```go -func NewContext() (*Context, error) -``` -Create a new context. - -#### func (*Context) Close - -```go -func (c *Context) Close() -``` - -#### func (*Context) IOThreads - -```go -func (c *Context) IOThreads() (int, error) -``` -Get a context option. - -#### func (*Context) MaxSockets - -```go -func (c *Context) MaxSockets() (int, error) -``` - -#### func (*Context) NewSocket - -```go -func (c *Context) NewSocket(t SocketType) (*Socket, error) -``` -Create a new socket. void *zmq_socket (void *context, int type); - -#### func (*Context) SetIOThreads - -```go -func (c *Context) SetIOThreads(value int) error -``` -Set a context option. - -#### func (*Context) SetMaxSockets - -```go -func (c *Context) SetMaxSockets(value int) error -``` - -#### type DeviceType - -```go -type DeviceType int -``` - - -#### type Int64SocketOption - -```go -type Int64SocketOption int -``` - - -#### type IntSocketOption - -```go -type IntSocketOption int -``` - - -#### type MessageOption - -```go -type MessageOption int -``` - - -#### type PollEvents - -```go -type PollEvents C.short -``` - - -#### type PollItem - -```go -type PollItem struct { - Socket *Socket // socket to poll for events on - Fd ZmqOsSocketType // fd to poll for events on as returned from os.File.Fd() - Events PollEvents // event set to poll for - REvents PollEvents // events that were present -} -``` - -Item to poll for read/write events on, either a *Socket or a file descriptor - -#### type PollItems - -```go -type PollItems []PollItem -``` - -a set of items to poll for events on - -#### type SendRecvOption - -```go -type SendRecvOption int -``` - - -#### type Socket - -```go -type Socket struct { -} -``` - - -#### func (*Socket) Affinity - -```go -func (s *Socket) Affinity() (uint64, error) -``` -ZMQ_AFFINITY: Retrieve I/O thread affinity. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc7 - -#### func (*Socket) Backlog - -```go -func (s *Socket) Backlog() (int, error) -``` -ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc18 - -#### func (*Socket) Bind - -```go -func (s *Socket) Bind(address string) error -``` -Bind the socket to a listening address. int zmq_bind (void *s, const char -*addr); - -#### func (*Socket) Close - -```go -func (s *Socket) Close() error -``` -Shutdown the socket. int zmq_close (void *s); - -#### func (*Socket) Connect - -```go -func (s *Socket) Connect(address string) error -``` -Connect the socket to an address. int zmq_connect (void *s, const char *addr); - -#### func (*Socket) Events - -```go -func (s *Socket) Events() (uint64, error) -``` -ZMQ_EVENTS: Retrieve socket event state. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc20 - -#### func (*Socket) GetSockOptBool - -```go -func (s *Socket) GetSockOptBool(option BoolSocketOption) (value bool, err error) -``` - -#### func (*Socket) GetSockOptInt - -```go -func (s *Socket) GetSockOptInt(option IntSocketOption) (value int, err error) -``` -Get an int option from the socket. int zmq_getsockopt (void *s, int option, void -*optval, size_t *optvallen); - -#### func (*Socket) GetSockOptInt64 - -```go -func (s *Socket) GetSockOptInt64(option Int64SocketOption) (value int64, err error) -``` -Get an int64 option from the socket. int zmq_getsockopt (void *s, int option, -void *optval, size_t *optvallen); - -#### func (*Socket) GetSockOptString - -```go -func (s *Socket) GetSockOptString(option StringSocketOption) (value string, err error) -``` -Get a string option from the socket. int zmq_getsockopt (void *s, int option, -void *optval, size_t *optvallen); - -#### func (*Socket) GetSockOptUInt64 - -```go -func (s *Socket) GetSockOptUInt64(option UInt64SocketOption) (value uint64, err error) -``` -Get a uint64 option from the socket. int zmq_getsockopt (void *s, int option, -void *optval, size_t *optvallen); - -#### func (*Socket) HWM - -```go -func (s *Socket) HWM() (uint64, error) -``` -ZMQ_HWM: Retrieve high water mark. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc5 - -#### func (*Socket) Identity - -```go -func (s *Socket) Identity() (string, error) -``` -ZMQ_IDENTITY: Retrieve socket identity. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc8 - -#### func (*Socket) Linger - -```go -func (s *Socket) Linger() (time.Duration, error) -``` -ZMQ_LINGER: Retrieve linger period for socket shutdown. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc15 - -#### func (*Socket) McastLoop - -```go -func (s *Socket) McastLoop() (bool, error) -``` -ZMQ_MCAST_LOOP: Control multicast loop-back. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc12 - -#### func (*Socket) Rate - -```go -func (s *Socket) Rate() (int64, error) -``` -ZMQ_RATE: Retrieve multicast data rate. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc9 - -#### func (*Socket) RcvBuf - -```go -func (s *Socket) RcvBuf() (uint64, error) -``` -ZMQ_RCVBUF: Retrieve kernel receive buffer size. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc14 - -#### func (*Socket) RcvHWM - -```go -func (s *Socket) RcvHWM() (int, error) -``` -ZMQ_RCVHWM: Retrieve high water mark for inbound messages. - -See: http://api.zeromq.org/3.2:zmq-getsockopt#toc6 - -#### func (*Socket) RcvMore - -```go -func (s *Socket) RcvMore() (bool, error) -``` -ZMQ_RCVMORE: More message parts to follow. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc4 - -#### func (*Socket) RcvTimeout - -```go -func (s *Socket) RcvTimeout() (time.Duration, error) -``` -ZMQ_RCVTIMEO: Maximum time before a socket operation returns with EAGAIN. - -See: http://api.zeromq.org/2.2:zmq-getsockopt#toc6 - -#### func (*Socket) ReconnectIvl - -```go -func (s *Socket) ReconnectIvl() (time.Duration, error) -``` -ZMQ_RECONNECT_IVL: Retrieve reconnection interval. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc16 - -#### func (*Socket) ReconnectIvlMax - -```go -func (s *Socket) ReconnectIvlMax() (time.Duration, error) -``` -ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc17 - -#### func (*Socket) RecoveryIvl - -```go -func (s *Socket) RecoveryIvl() (time.Duration, error) -``` -ZMQ_RECOVERY_IVL_MSEC: Get multicast recovery interval in milliseconds. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc11 - -#### func (*Socket) Recv - -```go -func (s *Socket) Recv(flags SendRecvOption) (data []byte, err error) -``` -Receive a message from the socket. int zmq_recv (void *s, zmq_msg_t *msg, int -flags); - -#### func (*Socket) RecvMultipart - -```go -func (s *Socket) RecvMultipart(flags SendRecvOption) (parts [][]byte, err error) -``` -Receive a multipart message. - -#### func (*Socket) Send - -```go -func (s *Socket) Send(data []byte, flags SendRecvOption) error -``` -Send a message to the socket. int zmq_send (void *s, zmq_msg_t *msg, int flags); - -#### func (*Socket) SendMultipart - -```go -func (s *Socket) SendMultipart(parts [][]byte, flags SendRecvOption) (err error) -``` -Send a multipart message. - -#### func (*Socket) SetAffinity - -```go -func (s *Socket) SetAffinity(value uint64) error -``` -ZMQ_AFFINITY: Set I/O thread affinity. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc5 - -#### func (*Socket) SetBacklog - -```go -func (s *Socket) SetBacklog(value int) error -``` -ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc18 - -#### func (*Socket) SetHWM - -```go -func (s *Socket) SetHWM(value uint64) error -``` -ZMQ_HWM: Set high water mark. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc3 - -#### func (*Socket) SetIdentity - -```go -func (s *Socket) SetIdentity(value string) error -``` -ZMQ_IDENTITY: Set socket identity. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc6 - -#### func (*Socket) SetLinger - -```go -func (s *Socket) SetLinger(value time.Duration) error -``` -ZMQ_LINGER: Set linger period for socket shutdown. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc15 - -#### func (*Socket) SetMcastLoop - -```go -func (s *Socket) SetMcastLoop(value bool) error -``` -ZMQ_MCAST_LOOP: Control multicast loop-back. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc12 - -#### func (*Socket) SetRate - -```go -func (s *Socket) SetRate(value int64) error -``` -ZMQ_RATE: Set multicast data rate. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc9 - -#### func (*Socket) SetRcvBuf - -```go -func (s *Socket) SetRcvBuf(value uint64) error -``` -ZMQ_RCVBUF: Set kernel receive buffer size. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc14 - -#### func (*Socket) SetRcvHWM - -```go -func (s *Socket) SetRcvHWM(value int) error -``` -ZMQ_RCVHWM: Set high water mark for inbound messages. - -See: http://api.zeromq.org/3.2:zmq-setsockopt#toc4 - -#### func (*Socket) SetRcvTimeout - -```go -func (s *Socket) SetRcvTimeout(value time.Duration) error -``` -ZMQ_RCVTIMEO: Maximum time before a recv operation returns with EAGAIN. - -See: http://api.zeromq.org/2.2:zmq-setsockopt#toc9 - -#### func (*Socket) SetReconnectIvl - -```go -func (s *Socket) SetReconnectIvl(value time.Duration) error -``` -ZMQ_RECONNECT_IVL: Set reconnection interval. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc16 - -#### func (*Socket) SetReconnectIvlMax - -```go -func (s *Socket) SetReconnectIvlMax(value time.Duration) error -``` -ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc17 - -#### func (*Socket) SetRecoveryIvl - -```go -func (s *Socket) SetRecoveryIvl(value time.Duration) error -``` -ZMQ_RECOVERY_IVL_MSEC: Set multicast recovery interval in milliseconds. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc11 - -#### func (*Socket) SetSndBuf - -```go -func (s *Socket) SetSndBuf(value uint64) error -``` -ZMQ_SNDBUF: Set kernel transmit buffer size. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc13 - -#### func (*Socket) SetSndHWM - -```go -func (s *Socket) SetSndHWM(value int) error -``` -ZMQ_SNDHWM: Set high water mark for outbound messages. - -See: http://api.zeromq.org/3.2:zmq-setsockopt#toc3 - -#### func (*Socket) SetSndTimeout - -```go -func (s *Socket) SetSndTimeout(value time.Duration) error -``` -ZMQ_SNDTIMEO: Maximum time before a send operation returns with EAGAIN. - -See: http://api.zeromq.org/2.2:zmq-setsockopt#toc10 - -#### func (*Socket) SetSockOptInt - -```go -func (s *Socket) SetSockOptInt(option IntSocketOption, value int) error -``` -Set an int option on the socket. int zmq_setsockopt (void *s, int option, const -void *optval, size_t optvallen); - -#### func (*Socket) SetSockOptInt64 - -```go -func (s *Socket) SetSockOptInt64(option Int64SocketOption, value int64) error -``` -Set an int64 option on the socket. int zmq_setsockopt (void *s, int option, -const void *optval, size_t optvallen); - -#### func (*Socket) SetSockOptString - -```go -func (s *Socket) SetSockOptString(option StringSocketOption, value string) error -``` -Set a string option on the socket. int zmq_setsockopt (void *s, int option, -const void *optval, size_t optvallen); - -#### func (*Socket) SetSockOptStringNil - -```go -func (s *Socket) SetSockOptStringNil(option StringSocketOption) error -``` -Set a string option on the socket to nil. int zmq_setsockopt (void *s, int -option, const void *optval, size_t optvallen); - -#### func (*Socket) SetSockOptUInt64 - -```go -func (s *Socket) SetSockOptUInt64(option UInt64SocketOption, value uint64) error -``` -Set a uint64 option on the socket. int zmq_setsockopt (void *s, int option, -const void *optval, size_t optvallen); - -#### func (*Socket) SetSubscribe - -```go -func (s *Socket) SetSubscribe(value string) error -``` -ZMQ_SUBSCRIBE: Establish message filter. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc7 - -#### func (*Socket) SetSwap - -```go -func (s *Socket) SetSwap(value int64) error -``` -ZMQ_SWAP: Set disk offload size. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc4 - -#### func (*Socket) SetTCPKeepalive - -```go -func (s *Socket) SetTCPKeepalive(value int) error -``` -ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option. - -See: http://api.zeromq.org/3.2:zmq-setsockopt#toc25 - -#### func (*Socket) SetTCPKeepaliveCnt - -```go -func (s *Socket) SetTCPKeepaliveCnt(value int) error -``` -ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option. - -See: http://api.zeromq.org/3.2:zmq-setsockopt#toc27 - -#### func (*Socket) SetTCPKeepaliveIdle - -```go -func (s *Socket) SetTCPKeepaliveIdle(value int) error -``` -ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS). - -See: http://api.zeromq.org/3.2:zmq-setsockopt#toc26 - -#### func (*Socket) SetTCPKeepaliveIntvl - -```go -func (s *Socket) SetTCPKeepaliveIntvl(value int) error -``` -ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option. - -See: http://api.zeromq.org/3.2:zmq-setsockopt#toc28 - -#### func (*Socket) SetUnsubscribe - -```go -func (s *Socket) SetUnsubscribe(value string) error -``` -ZMQ_UNSUBSCRIBE: Remove message filter. - -See: http://api.zeromq.org/2.1:zmq-setsockopt#toc8 - -#### func (*Socket) SndBuf - -```go -func (s *Socket) SndBuf() (uint64, error) -``` -ZMQ_SNDBUF: Retrieve kernel transmit buffer size. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc13 - -#### func (*Socket) SndHWM - -```go -func (s *Socket) SndHWM() (int, error) -``` -ZMQ_SNDHWM: Retrieves high water mark for outbound messages. - -See: http://api.zeromq.org/3.2:zmq-getsockopt#toc5 - -#### func (*Socket) SndTimeout - -```go -func (s *Socket) SndTimeout() (time.Duration, error) -``` -ZMQ_SNDTIMEO: Maximum time before a socket operation returns with EAGAIN. - -See: http://api.zeromq.org/2.2:zmq-getsockopt#toc7 - -#### func (*Socket) Swap - -```go -func (s *Socket) Swap() (int64, error) -``` -ZMQ_SWAP: Retrieve disk offload size. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc6 - -#### func (*Socket) TCPKeepalive - -```go -func (s *Socket) TCPKeepalive() (int, error) -``` -ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option. - -See: http://api.zeromq.org/3.2:zmq-getsockopt#toc26 - -#### func (*Socket) TCPKeepaliveCnt - -```go -func (s *Socket) TCPKeepaliveCnt() (int, error) -``` -ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option. - -See: http://api.zeromq.org/3.2:zmq-getsockopt#toc28 - -#### func (*Socket) TCPKeepaliveIdle - -```go -func (s *Socket) TCPKeepaliveIdle() (int, error) -``` -ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS). - -See: http://api.zeromq.org/3.2:zmq-getsockopt#toc27 - -#### func (*Socket) TCPKeepaliveIntvl - -```go -func (s *Socket) TCPKeepaliveIntvl() (int, error) -``` -ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option. - -See: http://api.zeromq.org/3.2:zmq-getsockopt#toc29 - -#### func (*Socket) Type - -```go -func (s *Socket) Type() (SocketType, error) -``` -ZMQ_TYPE: Retrieve socket type. - -See: http://api.zeromq.org/2.1:zmq-getsockopt#toc3 - -#### type SocketType - -```go -type SocketType int -``` - - -#### type StringSocketOption - -```go -type StringSocketOption int -``` - - -#### type UInt64SocketOption - -```go -type UInt64SocketOption int -``` - - -#### type ZmqOsSocketType - -```go -type ZmqOsSocketType C.SOCKET -``` - - -#### func (ZmqOsSocketType) ToRaw - -```go -func (self ZmqOsSocketType) ToRaw() C.SOCKET -``` - -*(generated from .[godocdown](https://github.com/robertkrimen/godocdown).md with `godocdown github.com/alecthomas/gozmq > README.md`)* diff --git a/vendor/github.com/alecthomas/gozmq/zmq.go b/vendor/github.com/alecthomas/gozmq/zmq.go deleted file mode 100644 index de987f0..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmq.go +++ /dev/null @@ -1,455 +0,0 @@ -/* - Copyright 2010-2012 Alec Thomas - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -// Go (golang) Bindings for 0mq (zmq, zeromq) -package gozmq - -/* -#cgo !windows pkg-config: libzmq -#include -#include -#include -*/ -import "C" - -import ( - "errors" - "sync" - "syscall" - "time" - "unsafe" -) - -type SocketType int - -type IntSocketOption int -type Int64SocketOption int -type UInt64SocketOption int -type StringSocketOption int -type BoolSocketOption int - -type MessageOption int -type SendRecvOption int - -const ( - // NewSocket types - PAIR = SocketType(C.ZMQ_PAIR) - PUB = SocketType(C.ZMQ_PUB) - SUB = SocketType(C.ZMQ_SUB) - REQ = SocketType(C.ZMQ_REQ) - REP = SocketType(C.ZMQ_REP) - DEALER = SocketType(C.ZMQ_DEALER) - ROUTER = SocketType(C.ZMQ_ROUTER) - PULL = SocketType(C.ZMQ_PULL) - PUSH = SocketType(C.ZMQ_PUSH) - XPUB = SocketType(C.ZMQ_XPUB) - XSUB = SocketType(C.ZMQ_XSUB) - - // Deprecated aliases - XREQ = DEALER - XREP = ROUTER - UPSTREAM = PULL - DOWNSTREAM = PUSH - - // NewSocket options - AFFINITY = UInt64SocketOption(C.ZMQ_AFFINITY) - IDENTITY = StringSocketOption(C.ZMQ_IDENTITY) - SUBSCRIBE = StringSocketOption(C.ZMQ_SUBSCRIBE) - UNSUBSCRIBE = StringSocketOption(C.ZMQ_UNSUBSCRIBE) - RATE = Int64SocketOption(C.ZMQ_RATE) - RECOVERY_IVL = Int64SocketOption(C.ZMQ_RECOVERY_IVL) - SNDBUF = UInt64SocketOption(C.ZMQ_SNDBUF) - RCVBUF = UInt64SocketOption(C.ZMQ_RCVBUF) - FD = Int64SocketOption(C.ZMQ_FD) - EVENTS = UInt64SocketOption(C.ZMQ_EVENTS) - TYPE = UInt64SocketOption(C.ZMQ_TYPE) - LINGER = IntSocketOption(C.ZMQ_LINGER) - RECONNECT_IVL = IntSocketOption(C.ZMQ_RECONNECT_IVL) - RECONNECT_IVL_MAX = IntSocketOption(C.ZMQ_RECONNECT_IVL_MAX) - BACKLOG = IntSocketOption(C.ZMQ_BACKLOG) - - // Send/recv options - SNDMORE = SendRecvOption(C.ZMQ_SNDMORE) -) - -type zmqErrno syscall.Errno - -var ( - // Additional ZMQ errors - ENOTSOCK error = zmqErrno(C.ENOTSOCK) - EFSM error = zmqErrno(C.EFSM) - EINVAL error = syscall.EINVAL - ENOCOMPATPROTO error = zmqErrno(C.ENOCOMPATPROTO) - ETERM error = zmqErrno(C.ETERM) - EMTHREAD error = zmqErrno(C.EMTHREAD) -) - -type PollEvents C.short - -const ( - POLLIN = PollEvents(C.ZMQ_POLLIN) - POLLOUT = PollEvents(C.ZMQ_POLLOUT) - POLLERR = PollEvents(C.ZMQ_POLLERR) -) - -type DeviceType int - -const ( - STREAMER = DeviceType(C.ZMQ_STREAMER) - FORWARDER = DeviceType(C.ZMQ_FORWARDER) - QUEUE = DeviceType(C.ZMQ_QUEUE) -) - -var ( - pollunit time.Duration -) - -func init() { - if v, _, _ := Version(); v < 3 { - pollunit = time.Microsecond - } else { - pollunit = time.Millisecond - } -} - -// void zmq_version (int *major, int *minor, int *patch); -func Version() (int, int, int) { - var major, minor, patch C.int - C.zmq_version(&major, &minor, &patch) - return int(major), int(minor), int(patch) -} - -func (e zmqErrno) Error() string { - return C.GoString(C.zmq_strerror(C.int(e))) -} - -// If possible, convert a syscall.Errno to a zmqErrno. -func casterr(fromcgo error) error { - errno, ok := fromcgo.(syscall.Errno) - if !ok { - return fromcgo - } - zmqerrno := zmqErrno(errno) - switch zmqerrno { - case ENOTSOCK: - return zmqerrno - } - if zmqerrno >= C.ZMQ_HAUSNUMERO { - return zmqerrno - } - return errno -} - -func getErrorForTesting() error { - return zmqErrno(C.EFSM) -} - -/* - * A context handles socket creation and asynchronous message delivery. - * There should generally be one context per application. - */ -type Context struct { - c unsafe.Pointer - mutex sync.Mutex // ensure init is only called once - init func() // func that calls zmq_init - err error // error returned from zmq_init - iothreads int // hold the iothreads option until zmq_init time -} - -// Create a new context. -func NewContext() (*Context, error) { - c := &Context{iothreads: 1} - c.init = func() { - c.mutex.Lock() - defer c.mutex.Unlock() - if c.c == nil && c.err == nil { - // C.NULL is correct but causes a runtime failure on darwin at present - if ptr, err := C.zmq_init(C.int(c.iothreads)); ptr != nil /*C.NULL*/ { - c.c = ptr - } else { - c.err = casterr(err) - } - } - } - return c, nil -} - -func (c *Context) Close() { - // C.NULL is correct but causes a runtime failure on darwin at present - if c.c != nil /*C.NULL*/ { - C.zmq_term(c.c) - } -} - -// Create a new socket. -// void *zmq_socket (void *context, int type); -func (c *Context) NewSocket(t SocketType) (*Socket, error) { - if c.init(); c.err != nil { - return nil, c.err - } - s, err := C.zmq_socket(c.c, C.int(t)) - // C.NULL is correct but causes a runtime failure on darwin at present - if s != nil /*C.NULL*/ { - return &Socket{c: c, s: s}, nil - } - return nil, casterr(err) -} - -type Socket struct { - // XXX Ensure the zmq context doesn't get destroyed underneath us. - c *Context - s unsafe.Pointer -} - -// Shutdown the socket. -// int zmq_close (void *s); -func (s *Socket) Close() error { - if s.c == nil { - return ENOTSOCK - } - if rc, err := C.zmq_close(s.s); rc != 0 { - return casterr(err) - } - s.c = nil - return nil -} - -// Set an int option on the socket. -// int zmq_setsockopt (void *s, int option, const void *optval, size_t optvallen); -func (s *Socket) SetSockOptInt(option IntSocketOption, value int) error { - val := C.int(value) - if rc, err := C.zmq_setsockopt(s.s, C.int(option), unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); rc != 0 { - return casterr(err) - } - return nil -} - -// Set an int64 option on the socket. -// int zmq_setsockopt (void *s, int option, const void *optval, size_t optvallen); -func (s *Socket) SetSockOptInt64(option Int64SocketOption, value int64) error { - if rc, err := C.zmq_setsockopt(s.s, C.int(option), unsafe.Pointer(&value), C.size_t(unsafe.Sizeof(value))); rc != 0 { - return casterr(err) - } - return nil -} - -// Set a uint64 option on the socket. -// int zmq_setsockopt (void *s, int option, const void *optval, size_t optvallen); -func (s *Socket) SetSockOptUInt64(option UInt64SocketOption, value uint64) error { - if rc, err := C.zmq_setsockopt(s.s, C.int(option), unsafe.Pointer(&value), C.size_t(unsafe.Sizeof(value))); rc != 0 { - return casterr(err) - } - return nil -} - -// Set a string option on the socket. -// int zmq_setsockopt (void *s, int option, const void *optval, size_t optvallen); -func (s *Socket) SetSockOptString(option StringSocketOption, value string) error { - v := C.CString(value) - defer C.free(unsafe.Pointer(v)) - if rc, err := C.zmq_setsockopt(s.s, C.int(option), unsafe.Pointer(v), C.size_t(len(value))); rc != 0 { - return casterr(err) - } - return nil -} - -// Set a string option on the socket to nil. -// int zmq_setsockopt (void *s, int option, const void *optval, size_t optvallen); -func (s *Socket) SetSockOptStringNil(option StringSocketOption) error { - if rc, err := C.zmq_setsockopt(s.s, C.int(option), nil, 0); rc != 0 { - return casterr(err) - } - return nil -} - -// Get an int option from the socket. -// int zmq_getsockopt (void *s, int option, void *optval, size_t *optvallen); -func (s *Socket) GetSockOptInt(option IntSocketOption) (value int, err error) { - size := C.size_t(unsafe.Sizeof(value)) - var rc C.int - if rc, err = C.zmq_getsockopt(s.s, C.int(option), unsafe.Pointer(&value), &size); rc != 0 { - err = casterr(err) - return - } - return -} - -// Get an int64 option from the socket. -// int zmq_getsockopt (void *s, int option, void *optval, size_t *optvallen); -func (s *Socket) GetSockOptInt64(option Int64SocketOption) (value int64, err error) { - size := C.size_t(unsafe.Sizeof(value)) - var rc C.int - if rc, err = C.zmq_getsockopt(s.s, C.int(option), unsafe.Pointer(&value), &size); rc != 0 { - err = casterr(err) - return - } - return -} - -// Get a uint64 option from the socket. -// int zmq_getsockopt (void *s, int option, void *optval, size_t *optvallen); -func (s *Socket) GetSockOptUInt64(option UInt64SocketOption) (value uint64, err error) { - size := C.size_t(unsafe.Sizeof(value)) - var rc C.int - if rc, err = C.zmq_getsockopt(s.s, C.int(option), unsafe.Pointer(&value), &size); rc != 0 { - println("GetSockOptUInt64:", err.Error()) - err = casterr(err) - return - } - return -} - -// Get a string option from the socket. -// int zmq_getsockopt (void *s, int option, void *optval, size_t *optvallen); -func (s *Socket) GetSockOptString(option StringSocketOption) (value string, err error) { - var buffer [1024]byte - var size C.size_t = 1024 - var rc C.int - if rc, err = C.zmq_getsockopt(s.s, C.int(option), unsafe.Pointer(&buffer), &size); rc != 0 { - err = casterr(err) - return - } - value = string(buffer[:size]) - return -} - -func (s *Socket) GetSockOptBool(option BoolSocketOption) (value bool, err error) { - size := C.size_t(unsafe.Sizeof(value)) - var rc C.int - if rc, err = C.zmq_getsockopt(s.s, C.int(option), unsafe.Pointer(&value), &size); rc != 0 { - err = casterr(err) - return - } - return -} - -// Bind the socket to a listening address. -// int zmq_bind (void *s, const char *addr); -func (s *Socket) Bind(address string) error { - a := C.CString(address) - defer C.free(unsafe.Pointer(a)) - if rc, err := C.zmq_bind(s.s, a); rc != 0 { - return casterr(err) - } - return nil -} - -// Connect the socket to an address. -// int zmq_connect (void *s, const char *addr); -func (s *Socket) Connect(address string) error { - if s.c == nil { - return ENOTSOCK - } - a := C.CString(address) - defer C.free(unsafe.Pointer(a)) - if rc, err := C.zmq_connect(s.s, a); rc != 0 { - return casterr(err) - } - return nil -} - -// Send a multipart message. -func (s *Socket) SendMultipart(parts [][]byte, flags SendRecvOption) (err error) { - for i := 0; i < len(parts)-1; i++ { - if err = s.Send(parts[i], SNDMORE|flags); err != nil { - return - } - } - err = s.Send(parts[(len(parts)-1)], flags) - return -} - -// Receive a multipart message. -func (s *Socket) RecvMultipart(flags SendRecvOption) (parts [][]byte, err error) { - parts = make([][]byte, 0) - for { - var data []byte - var more bool - - data, err = s.Recv(flags) - if err != nil { - return - } - parts = append(parts, data) - more, err = s.getRcvmore() - if err != nil { - return - } - if !more { - break - } - } - return -} - -// return the -func (s *Socket) apiSocket() unsafe.Pointer { - return s.s -} - -// Item to poll for read/write events on, either a *Socket or a file descriptor -type PollItem struct { - Socket *Socket // socket to poll for events on - Fd ZmqOsSocketType // fd to poll for events on as returned from os.File.Fd() - Events PollEvents // event set to poll for - REvents PollEvents // events that were present -} - -// a set of items to poll for events on -type PollItems []PollItem - -// Poll ZmqSockets and file descriptors for I/O readiness. Timeout is in -// time.Duration. The smallest possible timeout is time.Millisecond for -// ZeroMQ version 3 and above, and time.Microsecond for earlier versions. -func Poll(items []PollItem, timeout time.Duration) (count int, err error) { - zitems := make([]C.zmq_pollitem_t, len(items)) - for i, pi := range items { - zitems[i].socket = pi.Socket.apiSocket() - zitems[i].fd = pi.Fd.ToRaw() - zitems[i].events = C.short(pi.Events) - } - ztimeout := C.long(-1) - if timeout >= 0 { - ztimeout = C.long(uint64(timeout / pollunit)) - } - rc, err := C.zmq_poll(&zitems[0], C.int(len(zitems)), ztimeout) - if rc == -1 { - return 0, casterr(err) - } - - for i, zi := range zitems { - items[i].REvents = PollEvents(zi.revents) - } - - return int(rc), nil -} - -// run a zmq_device passing messages between in and out -func Device(t DeviceType, in, out *Socket) error { - if rc, err := C.zmq_device(C.int(t), in.apiSocket(), out.apiSocket()); rc != 0 { - return casterr(err) - } - return errors.New("zmq_device() returned unexpectedly.") -} - -// XXX For now, this library abstracts zmq_msg_t out of the API. -// int zmq_msg_init (zmq_msg_t *msg); -// int zmq_msg_init_size (zmq_msg_t *msg, size_t size); -// int zmq_msg_close (zmq_msg_t *msg); -// size_t zmq_msg_size (zmq_msg_t *msg); -// void *zmq_msg_data (zmq_msg_t *msg); -// int zmq_msg_copy (zmq_msg_t *dest, zmq_msg_t *src); -// int zmq_msg_move (zmq_msg_t *dest, zmq_msg_t *src); diff --git a/vendor/github.com/alecthomas/gozmq/zmq_2_2.go b/vendor/github.com/alecthomas/gozmq/zmq_2_2.go deleted file mode 100644 index 66775e2..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmq_2_2.go +++ /dev/null @@ -1,30 +0,0 @@ -// +build !zmq_2_1 - -/* - Copyright 2010-2012 Alec Thomas - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package gozmq - -/* -#cgo !windows pkg-config: libzmq -#include -*/ -import "C" - -const ( - RCVTIMEO = IntSocketOption(C.ZMQ_RCVTIMEO) - SNDTIMEO = IntSocketOption(C.ZMQ_SNDTIMEO) -) diff --git a/vendor/github.com/alecthomas/gozmq/zmq_2_x.go b/vendor/github.com/alecthomas/gozmq/zmq_2_x.go deleted file mode 100644 index 45be2ad..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmq_2_x.go +++ /dev/null @@ -1,110 +0,0 @@ -// +build !zmq_3_x,!zmq_4_x - -/* - Copyright 2010-2012 Alec Thomas - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package gozmq - -/* -#cgo !windows pkg-config: libzmq -#include -#include -#include -*/ -import "C" -import "unsafe" - -const ( - RCVMORE = UInt64SocketOption(C.ZMQ_RCVMORE) - RECOVERY_IVL_MSEC = Int64SocketOption(C.ZMQ_RECOVERY_IVL_MSEC) - SWAP = Int64SocketOption(C.ZMQ_SWAP) - MCAST_LOOP = Int64SocketOption(C.ZMQ_MCAST_LOOP) - HWM = UInt64SocketOption(C.ZMQ_HWM) - NOBLOCK = SendRecvOption(C.ZMQ_NOBLOCK) - - // Forwards-compatible aliases: - DONTWAIT = NOBLOCK -) - -// Get a context option. -func (c *Context) IOThreads() (int, error) { - return c.iothreads, nil -} - -// Set a context option. -func (c *Context) SetIOThreads(value int) error { - c.iothreads = value - return nil -} - -// Send a message to the socket. -// int zmq_send (void *s, zmq_msg_t *msg, int flags); -func (s *Socket) Send(data []byte, flags SendRecvOption) error { - var m C.zmq_msg_t - // Copy data array into C-allocated buffer. - size := C.size_t(len(data)) - - if rc, err := C.zmq_msg_init_size(&m, size); rc != 0 { - return casterr(err) - } - - if size > 0 { - // FIXME Ideally this wouldn't require a copy. - C.memcpy(C.zmq_msg_data(&m), unsafe.Pointer(&data[0]), size) // XXX I hope this works...(seems to) - } - - if rc, err := C.zmq_send(s.s, &m, C.int(flags)); rc != 0 { - // zmq_send did not take ownership, free message - C.zmq_msg_close(&m) - return casterr(err) - } - return nil -} - -// Receive a message from the socket. -// int zmq_recv (void *s, zmq_msg_t *msg, int flags); -func (s *Socket) Recv(flags SendRecvOption) (data []byte, err error) { - // Allocate and initialise a new zmq_msg_t - var m C.zmq_msg_t - var rc C.int - if rc, err = C.zmq_msg_init(&m); rc != 0 { - err = casterr(err) - return - } - defer C.zmq_msg_close(&m) - // Receive into message - if rc, err = C.zmq_recv(s.s, &m, C.int(flags)); rc != 0 { - err = casterr(err) - return - } - err = nil - // Copy message data into a byte array - // FIXME Ideally this wouldn't require a copy. - size := C.zmq_msg_size(&m) - if size > 0 { - data = C.GoBytes(C.zmq_msg_data(&m), C.int(size)) - } else { - data = nil - } - return -} - -// Portability helper -func (s *Socket) getRcvmore() (more bool, err error) { - value, err := s.GetSockOptUInt64(RCVMORE) - more = value != 0 - return -} diff --git a/vendor/github.com/alecthomas/gozmq/zmq_3_x.go b/vendor/github.com/alecthomas/gozmq/zmq_3_x.go deleted file mode 100644 index c1d0692..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmq_3_x.go +++ /dev/null @@ -1,237 +0,0 @@ -// +build zmq_3_x zmq_4_x - -/* - Copyright 2010-2012 Alec Thomas - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package gozmq - -/* -#cgo !windows pkg-config: libzmq -#include -#include -#include -*/ -import "C" -import ( - "errors" - "unsafe" -) - -const ( - RCVMORE = IntSocketOption(C.ZMQ_RCVMORE) - SNDHWM = IntSocketOption(C.ZMQ_SNDHWM) - RCVHWM = IntSocketOption(C.ZMQ_RCVHWM) - - // TODO Not documented in the man page... - //LAST_ENDPOINT = UInt64SocketOption(C.ZMQ_LAST_ENDPOINT) - DELAY_ATTACH_ON_CONNECT = IntSocketOption(C.ZMQ_DELAY_ATTACH_ON_CONNECT) - FAIL_UNROUTABLE = BoolSocketOption(C.ZMQ_FAIL_UNROUTABLE) - IPV4ONLY = IntSocketOption(C.ZMQ_IPV4ONLY) - MAXMSGSIZE = Int64SocketOption(C.ZMQ_MAXMSGSIZE) - ROUTER_MANDATORY = IntSocketOption(C.ZMQ_ROUTER_MANDATORY) - TCP_KEEPALIVE = IntSocketOption(C.ZMQ_TCP_KEEPALIVE) - TCP_KEEPALIVE_CNT = IntSocketOption(C.ZMQ_TCP_KEEPALIVE_CNT) - TCP_KEEPALIVE_IDLE = IntSocketOption(C.ZMQ_TCP_KEEPALIVE_IDLE) - TCP_KEEPALIVE_INTVL = IntSocketOption(C.ZMQ_TCP_KEEPALIVE_INTVL) - TCP_ACCEPT_FILTER = StringSocketOption(C.ZMQ_TCP_ACCEPT_FILTER) - XPUB_VERBOSE = IntSocketOption(C.ZMQ_XPUB_VERBOSE) - - // Message options - MORE = MessageOption(C.ZMQ_MORE) - - // Send/recv options - DONTWAIT = SendRecvOption(C.ZMQ_DONTWAIT) - - // Deprecated aliases - NOBLOCK = DONTWAIT -) - -// Socket transport events -type Event int - -const ( - EVENT_CONNECTED = Event(C.ZMQ_EVENT_CONNECTED) - EVENT_CONNECT_DELAYED = Event(C.ZMQ_EVENT_CONNECT_DELAYED) - EVENT_CONNECT_RETRIED = Event(C.ZMQ_EVENT_CONNECT_RETRIED) - - EVENT_LISTENING = Event(C.ZMQ_EVENT_LISTENING) - EVENT_BIND_FAILED = Event(C.ZMQ_EVENT_BIND_FAILED) - - EVENT_ACCEPTED = Event(C.ZMQ_EVENT_ACCEPTED) - EVENT_ACCEPT_FAILED = Event(C.ZMQ_EVENT_ACCEPT_FAILED) - - EVENT_CLOSED = Event(C.ZMQ_EVENT_CLOSED) - EVENT_CLOSE_FAILED = Event(C.ZMQ_EVENT_CLOSE_FAILED) - EVENT_DISCONNECTED = Event(C.ZMQ_EVENT_DISCONNECTED) - - EVENT_ALL = EVENT_CONNECTED | EVENT_CONNECT_DELAYED | - EVENT_CONNECT_RETRIED | EVENT_LISTENING | EVENT_BIND_FAILED | - EVENT_ACCEPTED | EVENT_ACCEPT_FAILED | EVENT_CLOSED | - EVENT_CLOSE_FAILED | EVENT_DISCONNECTED -) - -// Get a context option. -// int zmq_ctx_get (void *c, int); -func (c *Context) get(option C.int) (int, error) { - if c.init(); c.err != nil { - return -1, c.err - } - var value C.int - var err error - if value, err = C.zmq_ctx_get(c.c, option); err != nil { - return -1, casterr(err) - } - return int(value), nil -} - -// Set a context option. -// int zmq_ctx_set (void *c, int, int); -func (c *Context) set(option C.int, value int) error { - if c.init(); c.err != nil { - return c.err - } - if rc, err := C.zmq_ctx_set(c.c, option, C.int(value)); rc == -1 { - return casterr(err) - } - return nil -} - -func (c *Context) IOThreads() (int, error) { - return c.get(C.ZMQ_IO_THREADS) -} - -func (c *Context) MaxSockets() (int, error) { - return c.get(C.ZMQ_MAX_SOCKETS) -} - -func (c *Context) SetIOThreads(value int) error { - return c.set(C.ZMQ_IO_THREADS, value) -} - -func (c *Context) SetMaxSockets(value int) error { - return c.set(C.ZMQ_MAX_SOCKETS, value) -} - -func (s *Socket) SetHWM(value int) error { - snd := s.SetSndHWM(value) - rcv := s.SetRcvHWM(value) - if snd != nil { - return snd - } - return rcv -} - -func (s *Socket) SetTCPAcceptFilterNil() error { - return s.SetSockOptStringNil(TCP_ACCEPT_FILTER) -} - -// Disconnect the socket from the address. -// int zmq_disconnect (void *s, const char *addr); -func (s *Socket) Disconnect(address string) error { - if s.c == nil { - return ENOTSOCK - } - a := C.CString(address) - defer C.free(unsafe.Pointer(a)) - if rc, err := C.zmq_disconnect(s.s, a); rc != 0 { - return casterr(err) - } - return nil -} - -// Send a message to the socket. -// int zmq_send (void *s, zmq_msg_t *msg, int flags); -func (s *Socket) Send(data []byte, flags SendRecvOption) error { - var m C.zmq_msg_t - // Copy data array into C-allocated buffer. - size := C.size_t(len(data)) - - if rc, err := C.zmq_msg_init_size(&m, size); rc != 0 { - return casterr(err) - } - - if size > 0 { - // FIXME Ideally this wouldn't require a copy. - C.memcpy(C.zmq_msg_data(&m), unsafe.Pointer(&data[0]), size) // XXX I hope this works...(seems to) - } - - if rc, err := C.zmq_sendmsg(s.s, &m, C.int(flags)); rc == -1 { - // zmq_send did not take ownership, free message - C.zmq_msg_close(&m) - return casterr(err) - } - return nil -} - -// Receive a message from the socket. -// int zmq_recv (void *s, zmq_msg_t *msg, int flags); -func (s *Socket) Recv(flags SendRecvOption) (data []byte, err error) { - // Allocate and initialise a new zmq_msg_t - var m C.zmq_msg_t - var rc C.int - if rc, err = C.zmq_msg_init(&m); rc != 0 { - err = casterr(err) - return - } - defer C.zmq_msg_close(&m) - // Receive into message - if rc, err = C.zmq_recvmsg(s.s, &m, C.int(flags)); rc == -1 { - err = casterr(err) - return - } - err = nil - // Copy message data into a byte array - // FIXME Ideally this wouldn't require a copy. - size := C.zmq_msg_size(&m) - if size > 0 { - data = C.GoBytes(C.zmq_msg_data(&m), C.int(size)) - } else { - data = nil - } - return -} - -// Register a monitoring callback endpoint. -// int zmq_socket_monitor (void *s, const char *addr, int events); -func (s *Socket) Monitor(address string, events Event) error { - a := C.CString(address) - defer C.free(unsafe.Pointer(a)) - - rc, err := C.zmq_socket_monitor(s.apiSocket(), a, C.int(events)) - if rc == -1 { - return casterr(err) - } - return nil -} - -// Portability helper -func (s *Socket) getRcvmore() (more bool, err error) { - value, err := s.GetSockOptInt(RCVMORE) - more = value != 0 - return -} - -// run a zmq_proxy with in, out and capture sockets -func Proxy(in, out, capture *Socket) error { - var c unsafe.Pointer - if capture != nil { - c = capture.apiSocket() - } - if rc, err := C.zmq_proxy(in.apiSocket(), out.apiSocket(), c); rc != 0 { - return casterr(err) - } - return errors.New("zmq_proxy() returned unexpectedly.") -} diff --git a/vendor/github.com/alecthomas/gozmq/zmq_4_x.go b/vendor/github.com/alecthomas/gozmq/zmq_4_x.go deleted file mode 100644 index 7fdacbc..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmq_4_x.go +++ /dev/null @@ -1,46 +0,0 @@ -// +build zmq_4_x - -/* - Copyright 2010-2012 Alec Thomas - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package gozmq - -/* -#cgo !windows pkg-config: libzmq -#include -#include -#include -*/ -import "C" - -const ( - IPV6 = IntSocketOption(C.ZMQ_IPV6) - IMMEDIATE = IntSocketOption(C.ZMQ_IMMEDIATE) - MECHANISM = IntSocketOption(C.ZMQ_MECHANISM) - PLAIN_SERVER = IntSocketOption(C.ZMQ_PLAIN_SERVER) - PLAIN_USERNAME = StringSocketOption(C.ZMQ_PLAIN_USERNAME) - PLAIN_PASSWORD = StringSocketOption(C.ZMQ_PLAIN_PASSWORD) - CURVE_PUBLICKEY = StringSocketOption(C.ZMQ_CURVE_PUBLICKEY) - CURVE_SECRETKEY = StringSocketOption(C.ZMQ_CURVE_SECRETKEY) - CURVE_SERVERKEY = StringSocketOption(C.ZMQ_CURVE_SERVERKEY) - ZAP_DOMAIN = StringSocketOption(C.ZMQ_ZAP_DOMAIN) - ROUTER_RAW = IntSocketOption(C.ZMQ_ROUTER_RAW) - PROBE_ROUTER = IntSocketOption(C.ZMQ_PROBE_ROUTER) - REQ_CORRELATE = IntSocketOption(C.ZMQ_REQ_CORRELATE) - REQ_RELAXED = IntSocketOption(C.ZMQ_REQ_RELAXED) - CURVE_SERVER = IntSocketOption(C.ZMQ_CURVE_SERVER) - CONFLATE = IntSocketOption(C.ZMQ_CONFLATE) -) diff --git a/vendor/github.com/alecthomas/gozmq/zmq_unix.go b/vendor/github.com/alecthomas/gozmq/zmq_unix.go deleted file mode 100644 index 0c3d2fc..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmq_unix.go +++ /dev/null @@ -1,31 +0,0 @@ -// +build darwin freebsd linux netbsd openbsd - -/* - Copyright 2012 Alec Thomas - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package gozmq - -/* -#cgo !windows pkg-config: libzmq -#include -*/ -import "C" - -type ZmqOsSocketType C.int - -func (self ZmqOsSocketType) ToRaw() C.int { - return C.int(self) -} diff --git a/vendor/github.com/alecthomas/gozmq/zmq_windows.go b/vendor/github.com/alecthomas/gozmq/zmq_windows.go deleted file mode 100644 index 8fb2f6f..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmq_windows.go +++ /dev/null @@ -1,29 +0,0 @@ -/* - Copyright 2012 Alec Thomas - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -package gozmq - -/* -#cgo !windows pkg-config: libzmq -#include -*/ -import "C" - -type ZmqOsSocketType C.SOCKET - -func (self ZmqOsSocketType) ToRaw() C.SOCKET { - return C.SOCKET(self) -} diff --git a/vendor/github.com/alecthomas/gozmq/zmqgen_2_1.go b/vendor/github.com/alecthomas/gozmq/zmqgen_2_1.go deleted file mode 100644 index 0eb1ae3..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmqgen_2_1.go +++ /dev/null @@ -1,272 +0,0 @@ -// +build zmq_2_1 -// - -package gozmq - -import ( - "time" -) - -// This file was generated automatically. Changes made here will be lost. - -// Socket Option Getters - -// ZMQ_TYPE: Retrieve socket type. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc3 -// -func (s *Socket) Type() (SocketType, error) { - value, err := s.GetSockOptUInt64(TYPE) - return SocketType(value), err -} - -// ZMQ_RCVMORE: More message parts to follow. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc4 -// -func (s *Socket) RcvMore() (bool, error) { - value, err := s.GetSockOptUInt64(RCVMORE) - return value != 0, err -} - -// ZMQ_HWM: Retrieve high water mark. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc5 -// -func (s *Socket) HWM() (uint64, error) { - return s.GetSockOptUInt64(HWM) -} - -// ZMQ_SWAP: Retrieve disk offload size. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc6 -// -func (s *Socket) Swap() (int64, error) { - return s.GetSockOptInt64(SWAP) -} - -// ZMQ_AFFINITY: Retrieve I/O thread affinity. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc7 -// -func (s *Socket) Affinity() (uint64, error) { - return s.GetSockOptUInt64(AFFINITY) -} - -// ZMQ_IDENTITY: Retrieve socket identity. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc8 -// -func (s *Socket) Identity() (string, error) { - return s.GetSockOptString(IDENTITY) -} - -// ZMQ_RATE: Retrieve multicast data rate. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc9 -// -func (s *Socket) Rate() (int64, error) { - return s.GetSockOptInt64(RATE) -} - -// ZMQ_RECOVERY_IVL_MSEC: Get multicast recovery interval in milliseconds. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc11 -// -func (s *Socket) RecoveryIvl() (time.Duration, error) { - ms, err := s.GetSockOptInt64(RECOVERY_IVL_MSEC) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_MCAST_LOOP: Control multicast loop-back. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc12 -// -func (s *Socket) McastLoop() (bool, error) { - value, err := s.GetSockOptInt64(MCAST_LOOP) - return value != 0, err -} - -// ZMQ_SNDBUF: Retrieve kernel transmit buffer size. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc13 -// -func (s *Socket) SndBuf() (uint64, error) { - return s.GetSockOptUInt64(SNDBUF) -} - -// ZMQ_RCVBUF: Retrieve kernel receive buffer size. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc14 -// -func (s *Socket) RcvBuf() (uint64, error) { - return s.GetSockOptUInt64(RCVBUF) -} - -// ZMQ_LINGER: Retrieve linger period for socket shutdown. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc15 -// -func (s *Socket) Linger() (time.Duration, error) { - ms, err := s.GetSockOptInt(LINGER) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_RECONNECT_IVL: Retrieve reconnection interval. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc16 -// -func (s *Socket) ReconnectIvl() (time.Duration, error) { - ms, err := s.GetSockOptInt(RECONNECT_IVL) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc17 -// -func (s *Socket) ReconnectIvlMax() (time.Duration, error) { - ms, err := s.GetSockOptInt(RECONNECT_IVL_MAX) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc18 -// -func (s *Socket) Backlog() (int, error) { - return s.GetSockOptInt(BACKLOG) -} - -// ZMQ_EVENTS: Retrieve socket event state. -// -// See: http://api.zeromq.org/2.1:zmq-getsockopt#toc20 -// -func (s *Socket) Events() (uint64, error) { - return s.GetSockOptUInt64(EVENTS) -} - -// Socket Option Setters - -// ZMQ_HWM: Set high water mark. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc3 -// -func (s *Socket) SetHWM(value uint64) error { - return s.SetSockOptUInt64(HWM, value) -} - -// ZMQ_SWAP: Set disk offload size. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc4 -// -func (s *Socket) SetSwap(value int64) error { - return s.SetSockOptInt64(SWAP, value) -} - -// ZMQ_AFFINITY: Set I/O thread affinity. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc5 -// -func (s *Socket) SetAffinity(value uint64) error { - return s.SetSockOptUInt64(AFFINITY, value) -} - -// ZMQ_IDENTITY: Set socket identity. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc6 -// -func (s *Socket) SetIdentity(value string) error { - return s.SetSockOptString(IDENTITY, value) -} - -// ZMQ_SUBSCRIBE: Establish message filter. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc7 -// -func (s *Socket) SetSubscribe(value string) error { - return s.SetSockOptString(SUBSCRIBE, value) -} - -// ZMQ_UNSUBSCRIBE: Remove message filter. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc8 -// -func (s *Socket) SetUnsubscribe(value string) error { - return s.SetSockOptString(UNSUBSCRIBE, value) -} - -// ZMQ_RATE: Set multicast data rate. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc9 -// -func (s *Socket) SetRate(value int64) error { - return s.SetSockOptInt64(RATE, value) -} - -// ZMQ_RECOVERY_IVL_MSEC: Set multicast recovery interval in milliseconds. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc11 -// -func (s *Socket) SetRecoveryIvl(value time.Duration) error { - return s.SetSockOptInt64(RECOVERY_IVL_MSEC, int64(value/time.Millisecond)) -} - -// ZMQ_MCAST_LOOP: Control multicast loop-back. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc12 -// -func (s *Socket) SetMcastLoop(value bool) error { - if value { - return s.SetSockOptInt64(MCAST_LOOP, 1) - } - return s.SetSockOptInt64(MCAST_LOOP, 0) -} - -// ZMQ_SNDBUF: Set kernel transmit buffer size. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc13 -// -func (s *Socket) SetSndBuf(value uint64) error { - return s.SetSockOptUInt64(SNDBUF, value) -} - -// ZMQ_RCVBUF: Set kernel receive buffer size. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc14 -// -func (s *Socket) SetRcvBuf(value uint64) error { - return s.SetSockOptUInt64(RCVBUF, value) -} - -// ZMQ_LINGER: Set linger period for socket shutdown. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc15 -// -func (s *Socket) SetLinger(value time.Duration) error { - return s.SetSockOptInt(LINGER, int(value/time.Millisecond)) -} - -// ZMQ_RECONNECT_IVL: Set reconnection interval. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc16 -// -func (s *Socket) SetReconnectIvl(value time.Duration) error { - return s.SetSockOptInt(RECONNECT_IVL, int(value/time.Millisecond)) -} - -// ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc17 -// -func (s *Socket) SetReconnectIvlMax(value time.Duration) error { - return s.SetSockOptInt(RECONNECT_IVL_MAX, int(value/time.Millisecond)) -} - -// ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections. -// -// See: http://api.zeromq.org/2.1:zmq-setsockopt#toc18 -// -func (s *Socket) SetBacklog(value int) error { - return s.SetSockOptInt(BACKLOG, value) -} diff --git a/vendor/github.com/alecthomas/gozmq/zmqgen_2_2.go b/vendor/github.com/alecthomas/gozmq/zmqgen_2_2.go deleted file mode 100644 index 77cbadd..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmqgen_2_2.go +++ /dev/null @@ -1,306 +0,0 @@ -// +build !zmq_2_1,!zmq_3_x,!zmq_4_x -// - -package gozmq - -import ( - "time" -) - -// This file was generated automatically. Changes made here will be lost. - -// Socket Option Getters - -// ZMQ_TYPE: Retrieve socket type. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc3 -// -func (s *Socket) Type() (SocketType, error) { - value, err := s.GetSockOptUInt64(TYPE) - return SocketType(value), err -} - -// ZMQ_RCVMORE: More message parts to follow. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc4 -// -func (s *Socket) RcvMore() (bool, error) { - value, err := s.GetSockOptUInt64(RCVMORE) - return value != 0, err -} - -// ZMQ_HWM: Retrieve high water mark. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc5 -// -func (s *Socket) HWM() (uint64, error) { - return s.GetSockOptUInt64(HWM) -} - -// ZMQ_RCVTIMEO: Maximum time before a socket operation returns with EAGAIN. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc6 -// -func (s *Socket) RcvTimeout() (time.Duration, error) { - ms, err := s.GetSockOptInt(RCVTIMEO) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_SNDTIMEO: Maximum time before a socket operation returns with EAGAIN. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc7 -// -func (s *Socket) SndTimeout() (time.Duration, error) { - ms, err := s.GetSockOptInt(SNDTIMEO) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_SWAP: Retrieve disk offload size. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc8 -// -func (s *Socket) Swap() (int64, error) { - return s.GetSockOptInt64(SWAP) -} - -// ZMQ_AFFINITY: Retrieve I/O thread affinity. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc9 -// -func (s *Socket) Affinity() (uint64, error) { - return s.GetSockOptUInt64(AFFINITY) -} - -// ZMQ_IDENTITY: Retrieve socket identity. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc10 -// -func (s *Socket) Identity() (string, error) { - return s.GetSockOptString(IDENTITY) -} - -// ZMQ_RATE: Retrieve multicast data rate. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc11 -// -func (s *Socket) Rate() (int64, error) { - return s.GetSockOptInt64(RATE) -} - -// ZMQ_RECOVERY_IVL_MSEC: Get multicast recovery interval in milliseconds. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc13 -// -func (s *Socket) RecoveryIvl() (time.Duration, error) { - ms, err := s.GetSockOptInt64(RECOVERY_IVL_MSEC) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_MCAST_LOOP: Control multicast loop-back. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc14 -// -func (s *Socket) McastLoop() (bool, error) { - value, err := s.GetSockOptInt64(MCAST_LOOP) - return value != 0, err -} - -// ZMQ_SNDBUF: Retrieve kernel transmit buffer size. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc15 -// -func (s *Socket) SndBuf() (uint64, error) { - return s.GetSockOptUInt64(SNDBUF) -} - -// ZMQ_RCVBUF: Retrieve kernel receive buffer size. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc16 -// -func (s *Socket) RcvBuf() (uint64, error) { - return s.GetSockOptUInt64(RCVBUF) -} - -// ZMQ_LINGER: Retrieve linger period for socket shutdown. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc17 -// -func (s *Socket) Linger() (time.Duration, error) { - ms, err := s.GetSockOptInt(LINGER) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_RECONNECT_IVL: Retrieve reconnection interval. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc18 -// -func (s *Socket) ReconnectIvl() (time.Duration, error) { - ms, err := s.GetSockOptInt(RECONNECT_IVL) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc19 -// -func (s *Socket) ReconnectIvlMax() (time.Duration, error) { - ms, err := s.GetSockOptInt(RECONNECT_IVL_MAX) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc20 -// -func (s *Socket) Backlog() (int, error) { - return s.GetSockOptInt(BACKLOG) -} - -// ZMQ_EVENTS: Retrieve socket event state. -// -// See: http://api.zeromq.org/2.2:zmq-getsockopt#toc22 -// -func (s *Socket) Events() (uint64, error) { - return s.GetSockOptUInt64(EVENTS) -} - -// Socket Option Setters - -// ZMQ_HWM: Set high water mark. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc3 -// -func (s *Socket) SetHWM(value uint64) error { - return s.SetSockOptUInt64(HWM, value) -} - -// ZMQ_SWAP: Set disk offload size. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc4 -// -func (s *Socket) SetSwap(value int64) error { - return s.SetSockOptInt64(SWAP, value) -} - -// ZMQ_AFFINITY: Set I/O thread affinity. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc5 -// -func (s *Socket) SetAffinity(value uint64) error { - return s.SetSockOptUInt64(AFFINITY, value) -} - -// ZMQ_IDENTITY: Set socket identity. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc6 -// -func (s *Socket) SetIdentity(value string) error { - return s.SetSockOptString(IDENTITY, value) -} - -// ZMQ_SUBSCRIBE: Establish message filter. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc7 -// -func (s *Socket) SetSubscribe(value string) error { - return s.SetSockOptString(SUBSCRIBE, value) -} - -// ZMQ_UNSUBSCRIBE: Remove message filter. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc8 -// -func (s *Socket) SetUnsubscribe(value string) error { - return s.SetSockOptString(UNSUBSCRIBE, value) -} - -// ZMQ_RCVTIMEO: Maximum time before a recv operation returns with EAGAIN. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc9 -// -func (s *Socket) SetRcvTimeout(value time.Duration) error { - return s.SetSockOptInt(RCVTIMEO, int(value/time.Millisecond)) -} - -// ZMQ_SNDTIMEO: Maximum time before a send operation returns with EAGAIN. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc10 -// -func (s *Socket) SetSndTimeout(value time.Duration) error { - return s.SetSockOptInt(SNDTIMEO, int(value/time.Millisecond)) -} - -// ZMQ_RATE: Set multicast data rate. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc11 -// -func (s *Socket) SetRate(value int64) error { - return s.SetSockOptInt64(RATE, value) -} - -// ZMQ_RECOVERY_IVL_MSEC: Set multicast recovery interval in milliseconds. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc13 -// -func (s *Socket) SetRecoveryIvl(value time.Duration) error { - return s.SetSockOptInt64(RECOVERY_IVL_MSEC, int64(value/time.Millisecond)) -} - -// ZMQ_MCAST_LOOP: Control multicast loop-back. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc14 -// -func (s *Socket) SetMcastLoop(value bool) error { - if value { - return s.SetSockOptInt64(MCAST_LOOP, 1) - } - return s.SetSockOptInt64(MCAST_LOOP, 0) -} - -// ZMQ_SNDBUF: Set kernel transmit buffer size. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc15 -// -func (s *Socket) SetSndBuf(value uint64) error { - return s.SetSockOptUInt64(SNDBUF, value) -} - -// ZMQ_RCVBUF: Set kernel receive buffer size. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc16 -// -func (s *Socket) SetRcvBuf(value uint64) error { - return s.SetSockOptUInt64(RCVBUF, value) -} - -// ZMQ_LINGER: Set linger period for socket shutdown. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc17 -// -func (s *Socket) SetLinger(value time.Duration) error { - return s.SetSockOptInt(LINGER, int(value/time.Millisecond)) -} - -// ZMQ_RECONNECT_IVL: Set reconnection interval. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc18 -// -func (s *Socket) SetReconnectIvl(value time.Duration) error { - return s.SetSockOptInt(RECONNECT_IVL, int(value/time.Millisecond)) -} - -// ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc19 -// -func (s *Socket) SetReconnectIvlMax(value time.Duration) error { - return s.SetSockOptInt(RECONNECT_IVL_MAX, int(value/time.Millisecond)) -} - -// ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections. -// -// See: http://api.zeromq.org/2.2:zmq-setsockopt#toc20 -// -func (s *Socket) SetBacklog(value int) error { - return s.SetSockOptInt(BACKLOG, value) -} diff --git a/vendor/github.com/alecthomas/gozmq/zmqgen_3_2.go b/vendor/github.com/alecthomas/gozmq/zmqgen_3_2.go deleted file mode 100644 index 41683a5..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmqgen_3_2.go +++ /dev/null @@ -1,436 +0,0 @@ -// +build zmq_3_x -// - -package gozmq - -import ( - "time" -) - -// This file was generated automatically. Changes made here will be lost. - -// Socket Option Getters - -// ZMQ_TYPE: Retrieve socket type. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc3 -// -func (s *Socket) Type() (SocketType, error) { - value, err := s.GetSockOptUInt64(TYPE) - return SocketType(value), err -} - -// ZMQ_RCVMORE: More message data parts to follow. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc4 -// -func (s *Socket) RcvMore() (bool, error) { - value, err := s.GetSockOptInt(RCVMORE) - return value != 0, err -} - -// ZMQ_SNDHWM: Retrieves high water mark for outbound messages. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc5 -// -func (s *Socket) SndHWM() (int, error) { - return s.GetSockOptInt(SNDHWM) -} - -// ZMQ_RCVHWM: Retrieve high water mark for inbound messages. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc6 -// -func (s *Socket) RcvHWM() (int, error) { - return s.GetSockOptInt(RCVHWM) -} - -// ZMQ_AFFINITY: Retrieve I/O thread affinity. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc7 -// -func (s *Socket) Affinity() (uint64, error) { - return s.GetSockOptUInt64(AFFINITY) -} - -// ZMQ_IDENTITY: Set socket identity. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc8 -// -func (s *Socket) Identity() (string, error) { - return s.GetSockOptString(IDENTITY) -} - -// ZMQ_RATE: Retrieve multicast data rate. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc9 -// -func (s *Socket) Rate() (int64, error) { - return s.GetSockOptInt64(RATE) -} - -// ZMQ_RECOVERY_IVL: Get multicast recovery interval. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc10 -// -func (s *Socket) RecoveryIvl() (time.Duration, error) { - ms, err := s.GetSockOptInt64(RECOVERY_IVL) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_SNDBUF: Retrieve kernel transmit buffer size. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc11 -// -func (s *Socket) SndBuf() (uint64, error) { - return s.GetSockOptUInt64(SNDBUF) -} - -// ZMQ_RCVBUF: Retrieve kernel receive buffer size. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc12 -// -func (s *Socket) RcvBuf() (uint64, error) { - return s.GetSockOptUInt64(RCVBUF) -} - -// ZMQ_LINGER: Retrieve linger period for socket shutdown. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc13 -// -func (s *Socket) Linger() (time.Duration, error) { - ms, err := s.GetSockOptInt(LINGER) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_RECONNECT_IVL: Retrieve reconnection interval. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc14 -// -func (s *Socket) ReconnectIvl() (time.Duration, error) { - ms, err := s.GetSockOptInt(RECONNECT_IVL) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc15 -// -func (s *Socket) ReconnectIvlMax() (time.Duration, error) { - ms, err := s.GetSockOptInt(RECONNECT_IVL_MAX) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc16 -// -func (s *Socket) Backlog() (int, error) { - return s.GetSockOptInt(BACKLOG) -} - -// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc17 -// -func (s *Socket) MaxMsgSize() (int64, error) { - return s.GetSockOptInt64(MAXMSGSIZE) -} - -// ZMQ_RCVTIMEO: Maximum time before a socket operation returns with EAGAIN. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc19 -// -func (s *Socket) RcvTimeout() (time.Duration, error) { - ms, err := s.GetSockOptInt(RCVTIMEO) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_SNDTIMEO: Maximum time before a socket operation returns with EAGAIN. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc20 -// -func (s *Socket) SndTimeout() (time.Duration, error) { - ms, err := s.GetSockOptInt(SNDTIMEO) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_IPV4ONLY: Retrieve IPv4-only socket override status. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc21 -// -func (s *Socket) IPv4Only() (bool, error) { - value, err := s.GetSockOptInt(IPV4ONLY) - return value != 0, err -} - -// ZMQ_DELAY_ATTACH_ON_CONNECT: Retrieve attach-on-connect value. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc22 -// -func (s *Socket) DelayAttachOnConnect() (bool, error) { - value, err := s.GetSockOptInt(DELAY_ATTACH_ON_CONNECT) - return value != 0, err -} - -// ZMQ_EVENTS: Retrieve socket event state. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc24 -// -func (s *Socket) Events() (uint64, error) { - return s.GetSockOptUInt64(EVENTS) -} - -// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc26 -// -func (s *Socket) TCPKeepalive() (int, error) { - return s.GetSockOptInt(TCP_KEEPALIVE) -} - -// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS). -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc27 -// -func (s *Socket) TCPKeepaliveIdle() (int, error) { - return s.GetSockOptInt(TCP_KEEPALIVE_IDLE) -} - -// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc28 -// -func (s *Socket) TCPKeepaliveCnt() (int, error) { - return s.GetSockOptInt(TCP_KEEPALIVE_CNT) -} - -// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option. -// -// See: http://api.zeromq.org/3.2:zmq-getsockopt#toc29 -// -func (s *Socket) TCPKeepaliveIntvl() (int, error) { - return s.GetSockOptInt(TCP_KEEPALIVE_INTVL) -} - -// Socket Option Setters - -// ZMQ_SNDHWM: Set high water mark for outbound messages. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc3 -// -func (s *Socket) SetSndHWM(value int) error { - return s.SetSockOptInt(SNDHWM, value) -} - -// ZMQ_RCVHWM: Set high water mark for inbound messages. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc4 -// -func (s *Socket) SetRcvHWM(value int) error { - return s.SetSockOptInt(RCVHWM, value) -} - -// ZMQ_AFFINITY: Set I/O thread affinity. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc5 -// -func (s *Socket) SetAffinity(value uint64) error { - return s.SetSockOptUInt64(AFFINITY, value) -} - -// ZMQ_SUBSCRIBE: Establish message filter. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc6 -// -func (s *Socket) SetSubscribe(value string) error { - return s.SetSockOptString(SUBSCRIBE, value) -} - -// ZMQ_UNSUBSCRIBE: Remove message filter. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc7 -// -func (s *Socket) SetUnsubscribe(value string) error { - return s.SetSockOptString(UNSUBSCRIBE, value) -} - -// ZMQ_IDENTITY: Set socket identity. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc8 -// -func (s *Socket) SetIdentity(value string) error { - return s.SetSockOptString(IDENTITY, value) -} - -// ZMQ_RATE: Set multicast data rate. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc9 -// -func (s *Socket) SetRate(value int64) error { - return s.SetSockOptInt64(RATE, value) -} - -// ZMQ_RECOVERY_IVL: Set multicast recovery interval. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc10 -// -func (s *Socket) SetRecoveryIvl(value time.Duration) error { - return s.SetSockOptInt64(RECOVERY_IVL, int64(value/time.Millisecond)) -} - -// ZMQ_SNDBUF: Set kernel transmit buffer size. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc11 -// -func (s *Socket) SetSndBuf(value uint64) error { - return s.SetSockOptUInt64(SNDBUF, value) -} - -// ZMQ_RCVBUF: Set kernel receive buffer size. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc12 -// -func (s *Socket) SetRcvBuf(value uint64) error { - return s.SetSockOptUInt64(RCVBUF, value) -} - -// ZMQ_LINGER: Set linger period for socket shutdown. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc13 -// -func (s *Socket) SetLinger(value time.Duration) error { - return s.SetSockOptInt(LINGER, int(value/time.Millisecond)) -} - -// ZMQ_RECONNECT_IVL: Set reconnection interval. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc14 -// -func (s *Socket) SetReconnectIvl(value time.Duration) error { - return s.SetSockOptInt(RECONNECT_IVL, int(value/time.Millisecond)) -} - -// ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc15 -// -func (s *Socket) SetReconnectIvlMax(value time.Duration) error { - return s.SetSockOptInt(RECONNECT_IVL_MAX, int(value/time.Millisecond)) -} - -// ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc16 -// -func (s *Socket) SetBacklog(value int) error { - return s.SetSockOptInt(BACKLOG, value) -} - -// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc17 -// -func (s *Socket) SetMaxMsgSize(value int64) error { - return s.SetSockOptInt64(MAXMSGSIZE, value) -} - -// ZMQ_RCVTIMEO: Maximum time before a recv operation returns with EAGAIN. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc19 -// -func (s *Socket) SetRcvTimeout(value time.Duration) error { - return s.SetSockOptInt(RCVTIMEO, int(value/time.Millisecond)) -} - -// ZMQ_SNDTIMEO: Maximum time before a send operation returns with EAGAIN. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc20 -// -func (s *Socket) SetSndTimeout(value time.Duration) error { - return s.SetSockOptInt(SNDTIMEO, int(value/time.Millisecond)) -} - -// ZMQ_IPV4ONLY: Use IPv4-only sockets. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc21 -// -func (s *Socket) SetIPv4Only(value bool) error { - if value { - return s.SetSockOptInt(IPV4ONLY, 1) - } - return s.SetSockOptInt(IPV4ONLY, 0) -} - -// ZMQ_DELAY_ATTACH_ON_CONNECT: Accept messages only when connections are made. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc22 -// -func (s *Socket) SetDelayAttachOnConnect(value bool) error { - if value { - return s.SetSockOptInt(DELAY_ATTACH_ON_CONNECT, 1) - } - return s.SetSockOptInt(DELAY_ATTACH_ON_CONNECT, 0) -} - -// ZMQ_ROUTER_MANDATORY: accept only routable messages on ROUTER sockets. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc23 -// -func (s *Socket) SetROUTERMandatory(value bool) error { - if value { - return s.SetSockOptInt(ROUTER_MANDATORY, 1) - } - return s.SetSockOptInt(ROUTER_MANDATORY, 0) -} - -// ZMQ_XPUB_VERBOSE: provide all subscription messages on XPUB sockets. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc24 -// -func (s *Socket) SetXPUBVerbose(value bool) error { - if value { - return s.SetSockOptInt(XPUB_VERBOSE, 1) - } - return s.SetSockOptInt(XPUB_VERBOSE, 0) -} - -// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc25 -// -func (s *Socket) SetTCPKeepalive(value int) error { - return s.SetSockOptInt(TCP_KEEPALIVE, value) -} - -// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS). -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc26 -// -func (s *Socket) SetTCPKeepaliveIdle(value int) error { - return s.SetSockOptInt(TCP_KEEPALIVE_IDLE, value) -} - -// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc27 -// -func (s *Socket) SetTCPKeepaliveCnt(value int) error { - return s.SetSockOptInt(TCP_KEEPALIVE_CNT, value) -} - -// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc28 -// -func (s *Socket) SetTCPKeepaliveIntvl(value int) error { - return s.SetSockOptInt(TCP_KEEPALIVE_INTVL, value) -} - -// ZMQ_TCP_ACCEPT_FILTER: Assign filters to allow new TCP connections. -// -// See: http://api.zeromq.org/3.2:zmq-setsockopt#toc29 -// -func (s *Socket) SetTCPAcceptFilter(value string) error { - return s.SetSockOptString(TCP_ACCEPT_FILTER, value) -} diff --git a/vendor/github.com/alecthomas/gozmq/zmqgen_4_0.go b/vendor/github.com/alecthomas/gozmq/zmqgen_4_0.go deleted file mode 100644 index d9c6587..0000000 --- a/vendor/github.com/alecthomas/gozmq/zmqgen_4_0.go +++ /dev/null @@ -1,627 +0,0 @@ -// +build zmq_4_x -// - -package gozmq - -import ( - "time" -) - -// This file was generated automatically. Changes made here will be lost. - -// Socket Option Getters - -// ZMQ_TYPE: Retrieve socket type. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc3 -// -func (s *Socket) Type() (SocketType, error) { - value, err := s.GetSockOptUInt64(TYPE) - return SocketType(value), err -} - -// ZMQ_RCVMORE: More message data parts to follow. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc4 -// -func (s *Socket) RcvMore() (bool, error) { - value, err := s.GetSockOptInt(RCVMORE) - return value != 0, err -} - -// ZMQ_SNDHWM: Retrieves high water mark for outbound messages. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc5 -// -func (s *Socket) SndHWM() (int, error) { - return s.GetSockOptInt(SNDHWM) -} - -// ZMQ_RCVHWM: Retrieve high water mark for inbound messages. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc6 -// -func (s *Socket) RcvHWM() (int, error) { - return s.GetSockOptInt(RCVHWM) -} - -// ZMQ_AFFINITY: Retrieve I/O thread affinity. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc7 -// -func (s *Socket) Affinity() (uint64, error) { - return s.GetSockOptUInt64(AFFINITY) -} - -// ZMQ_IDENTITY: Retrieve socket identity. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc8 -// -func (s *Socket) Identity() (string, error) { - return s.GetSockOptString(IDENTITY) -} - -// ZMQ_RATE: Retrieve multicast data rate. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc9 -// -func (s *Socket) Rate() (int64, error) { - return s.GetSockOptInt64(RATE) -} - -// ZMQ_RECOVERY_IVL: Get multicast recovery interval. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc10 -// -func (s *Socket) RecoveryIvl() (time.Duration, error) { - ms, err := s.GetSockOptInt64(RECOVERY_IVL) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_SNDBUF: Retrieve kernel transmit buffer size. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc11 -// -func (s *Socket) SndBuf() (uint64, error) { - return s.GetSockOptUInt64(SNDBUF) -} - -// ZMQ_RCVBUF: Retrieve kernel receive buffer size. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc12 -// -func (s *Socket) RcvBuf() (uint64, error) { - return s.GetSockOptUInt64(RCVBUF) -} - -// ZMQ_LINGER: Retrieve linger period for socket shutdown. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc13 -// -func (s *Socket) Linger() (time.Duration, error) { - ms, err := s.GetSockOptInt(LINGER) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_RECONNECT_IVL: Retrieve reconnection interval. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc14 -// -func (s *Socket) ReconnectIvl() (time.Duration, error) { - ms, err := s.GetSockOptInt(RECONNECT_IVL) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc15 -// -func (s *Socket) ReconnectIvlMax() (time.Duration, error) { - ms, err := s.GetSockOptInt(RECONNECT_IVL_MAX) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc16 -// -func (s *Socket) Backlog() (int, error) { - return s.GetSockOptInt(BACKLOG) -} - -// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc17 -// -func (s *Socket) MaxMsgSize() (int64, error) { - return s.GetSockOptInt64(MAXMSGSIZE) -} - -// ZMQ_RCVTIMEO: Maximum time before a socket operation returns with EAGAIN. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc19 -// -func (s *Socket) RcvTimeout() (time.Duration, error) { - ms, err := s.GetSockOptInt(RCVTIMEO) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_SNDTIMEO: Maximum time before a socket operation returns with EAGAIN. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc20 -// -func (s *Socket) SndTimeout() (time.Duration, error) { - ms, err := s.GetSockOptInt(SNDTIMEO) - return time.Duration(ms) * time.Millisecond, err -} - -// ZMQ_IPV6: Retrieve IPv6 socket status. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc21 -// -func (s *Socket) Ipv6() (bool, error) { - value, err := s.GetSockOptInt(IPV6) - return value != 0, err -} - -// ZMQ_IPV4ONLY: Retrieve IPv4-only socket override status. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc22 -// -func (s *Socket) IPv4Only() (bool, error) { - value, err := s.GetSockOptInt(IPV4ONLY) - return value != 0, err -} - -// ZMQ_IMMEDIATE: Retrieve attach-on-connect value. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc23 -// -func (s *Socket) Immediate() (bool, error) { - value, err := s.GetSockOptInt(IMMEDIATE) - return value != 0, err -} - -// ZMQ_EVENTS: Retrieve socket event state. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc25 -// -func (s *Socket) Events() (uint64, error) { - return s.GetSockOptUInt64(EVENTS) -} - -// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc27 -// -func (s *Socket) TCPKeepalive() (int, error) { - return s.GetSockOptInt(TCP_KEEPALIVE) -} - -// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS). -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc28 -// -func (s *Socket) TCPKeepaliveIdle() (int, error) { - return s.GetSockOptInt(TCP_KEEPALIVE_IDLE) -} - -// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc29 -// -func (s *Socket) TCPKeepaliveCnt() (int, error) { - return s.GetSockOptInt(TCP_KEEPALIVE_CNT) -} - -// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc30 -// -func (s *Socket) TCPKeepaliveIntvl() (int, error) { - return s.GetSockOptInt(TCP_KEEPALIVE_INTVL) -} - -// ZMQ_MECHANISM: Retrieve current security mechanism. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc31 -// -func (s *Socket) Mechanism() (int, error) { - return s.GetSockOptInt(MECHANISM) -} - -// ZMQ_PLAIN_SERVER: Retrieve current PLAIN server role. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc32 -// -func (s *Socket) PlainServer() (int, error) { - return s.GetSockOptInt(PLAIN_SERVER) -} - -// ZMQ_PLAIN_USERNAME: Retrieve current PLAIN username. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc33 -// -func (s *Socket) PlainUsername() (string, error) { - return s.GetSockOptString(PLAIN_USERNAME) -} - -// ZMQ_PLAIN_PASSWORD: Retrieve current password. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc34 -// -func (s *Socket) PlainPassword() (string, error) { - return s.GetSockOptString(PLAIN_PASSWORD) -} - -// ZMQ_CURVE_PUBLICKEY: Retrieve current CURVE public key. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc35 -// -func (s *Socket) CurvePublickey() (string, error) { - return s.GetSockOptString(CURVE_PUBLICKEY) -} - -// ZMQ_CURVE_SECRETKEY: Retrieve current CURVE secret key. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc36 -// -func (s *Socket) CurveSecretkey() (string, error) { - return s.GetSockOptString(CURVE_SECRETKEY) -} - -// ZMQ_CURVE_SERVERKEY: Retrieve current CURVE server key. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc37 -// -func (s *Socket) CurveServerkey() (string, error) { - return s.GetSockOptString(CURVE_SERVERKEY) -} - -// ZMQ_ZAP_DOMAIN: Retrieve RFC 27 authentication domain. -// -// See: http://api.zeromq.org/4.0:zmq-getsockopt#toc38 -// -func (s *Socket) ZapDomain() (string, error) { - return s.GetSockOptString(ZAP_DOMAIN) -} - -// Socket Option Setters - -// ZMQ_SNDHWM: Set high water mark for outbound messages. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc3 -// -func (s *Socket) SetSndHWM(value int) error { - return s.SetSockOptInt(SNDHWM, value) -} - -// ZMQ_RCVHWM: Set high water mark for inbound messages. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc4 -// -func (s *Socket) SetRcvHWM(value int) error { - return s.SetSockOptInt(RCVHWM, value) -} - -// ZMQ_AFFINITY: Set I/O thread affinity. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc5 -// -func (s *Socket) SetAffinity(value uint64) error { - return s.SetSockOptUInt64(AFFINITY, value) -} - -// ZMQ_SUBSCRIBE: Establish message filter. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc6 -// -func (s *Socket) SetSubscribe(value string) error { - return s.SetSockOptString(SUBSCRIBE, value) -} - -// ZMQ_UNSUBSCRIBE: Remove message filter. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc7 -// -func (s *Socket) SetUnsubscribe(value string) error { - return s.SetSockOptString(UNSUBSCRIBE, value) -} - -// ZMQ_IDENTITY: Set socket identity. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc8 -// -func (s *Socket) SetIdentity(value string) error { - return s.SetSockOptString(IDENTITY, value) -} - -// ZMQ_RATE: Set multicast data rate. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc9 -// -func (s *Socket) SetRate(value int64) error { - return s.SetSockOptInt64(RATE, value) -} - -// ZMQ_RECOVERY_IVL: Set multicast recovery interval. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc10 -// -func (s *Socket) SetRecoveryIvl(value time.Duration) error { - return s.SetSockOptInt64(RECOVERY_IVL, int64(value/time.Millisecond)) -} - -// ZMQ_SNDBUF: Set kernel transmit buffer size. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc11 -// -func (s *Socket) SetSndBuf(value uint64) error { - return s.SetSockOptUInt64(SNDBUF, value) -} - -// ZMQ_RCVBUF: Set kernel receive buffer size. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc12 -// -func (s *Socket) SetRcvBuf(value uint64) error { - return s.SetSockOptUInt64(RCVBUF, value) -} - -// ZMQ_LINGER: Set linger period for socket shutdown. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc13 -// -func (s *Socket) SetLinger(value time.Duration) error { - return s.SetSockOptInt(LINGER, int(value/time.Millisecond)) -} - -// ZMQ_RECONNECT_IVL: Set reconnection interval. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc14 -// -func (s *Socket) SetReconnectIvl(value time.Duration) error { - return s.SetSockOptInt(RECONNECT_IVL, int(value/time.Millisecond)) -} - -// ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc15 -// -func (s *Socket) SetReconnectIvlMax(value time.Duration) error { - return s.SetSockOptInt(RECONNECT_IVL_MAX, int(value/time.Millisecond)) -} - -// ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc16 -// -func (s *Socket) SetBacklog(value int) error { - return s.SetSockOptInt(BACKLOG, value) -} - -// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc17 -// -func (s *Socket) SetMaxMsgSize(value int64) error { - return s.SetSockOptInt64(MAXMSGSIZE, value) -} - -// ZMQ_RCVTIMEO: Maximum time before a recv operation returns with EAGAIN. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc19 -// -func (s *Socket) SetRcvTimeout(value time.Duration) error { - return s.SetSockOptInt(RCVTIMEO, int(value/time.Millisecond)) -} - -// ZMQ_SNDTIMEO: Maximum time before a send operation returns with EAGAIN. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc20 -// -func (s *Socket) SetSndTimeout(value time.Duration) error { - return s.SetSockOptInt(SNDTIMEO, int(value/time.Millisecond)) -} - -// ZMQ_IPV6: Enable IPv6 on socket. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc21 -// -func (s *Socket) SetIpv6(value bool) error { - if value { - return s.SetSockOptInt(IPV6, 1) - } - return s.SetSockOptInt(IPV6, 0) -} - -// ZMQ_IPV4ONLY: Use IPv4-only on socket. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc22 -// -func (s *Socket) SetIPv4Only(value bool) error { - if value { - return s.SetSockOptInt(IPV4ONLY, 1) - } - return s.SetSockOptInt(IPV4ONLY, 0) -} - -// ZMQ_IMMEDIATE: Queue messages only to completed connections. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc23 -// -func (s *Socket) SetImmediate(value bool) error { - if value { - return s.SetSockOptInt(IMMEDIATE, 1) - } - return s.SetSockOptInt(IMMEDIATE, 0) -} - -// ZMQ_ROUTER_MANDATORY: accept only routable messages on ROUTER sockets. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc24 -// -func (s *Socket) SetROUTERMandatory(value bool) error { - if value { - return s.SetSockOptInt(ROUTER_MANDATORY, 1) - } - return s.SetSockOptInt(ROUTER_MANDATORY, 0) -} - -// ZMQ_ROUTER_RAW: switch ROUTER socket to raw mode. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc25 -// -func (s *Socket) SetROUTERRaw(value int) error { - return s.SetSockOptInt(ROUTER_RAW, value) -} - -// ZMQ_PROBE_ROUTER: bootstrap connections to ROUTER sockets. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc26 -// -func (s *Socket) SetProbeROUTER(value int) error { - return s.SetSockOptInt(PROBE_ROUTER, value) -} - -// ZMQ_XPUB_VERBOSE: provide all subscription messages on XPUB sockets. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc27 -// -func (s *Socket) SetXPUBVerbose(value bool) error { - if value { - return s.SetSockOptInt(XPUB_VERBOSE, 1) - } - return s.SetSockOptInt(XPUB_VERBOSE, 0) -} - -// ZMQ_REQ_CORRELATE: match replies with requests. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc28 -// -func (s *Socket) SetReqCorrelate(value int) error { - return s.SetSockOptInt(REQ_CORRELATE, value) -} - -// ZMQ_REQ_RELAXED: relax strict alternation between request and reply. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc29 -// -func (s *Socket) SetReqRelaxed(value int) error { - return s.SetSockOptInt(REQ_RELAXED, value) -} - -// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc30 -// -func (s *Socket) SetTCPKeepalive(value int) error { - return s.SetSockOptInt(TCP_KEEPALIVE, value) -} - -// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT (or TCP_KEEPALIVE on some OS). -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc31 -// -func (s *Socket) SetTCPKeepaliveIdle(value int) error { - return s.SetSockOptInt(TCP_KEEPALIVE_IDLE, value) -} - -// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc32 -// -func (s *Socket) SetTCPKeepaliveCnt(value int) error { - return s.SetSockOptInt(TCP_KEEPALIVE_CNT, value) -} - -// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc33 -// -func (s *Socket) SetTCPKeepaliveIntvl(value int) error { - return s.SetSockOptInt(TCP_KEEPALIVE_INTVL, value) -} - -// ZMQ_TCP_ACCEPT_FILTER: Assign filters to allow new TCP connections. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc34 -// -func (s *Socket) SetTCPAcceptFilter(value string) error { - return s.SetSockOptString(TCP_ACCEPT_FILTER, value) -} - -// ZMQ_PLAIN_SERVER: Set PLAIN server role. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc35 -// -func (s *Socket) SetPlainServer(value int) error { - return s.SetSockOptInt(PLAIN_SERVER, value) -} - -// ZMQ_PLAIN_USERNAME: Set PLAIN security username. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc36 -// -func (s *Socket) SetPlainUsername(value string) error { - return s.SetSockOptString(PLAIN_USERNAME, value) -} - -// ZMQ_PLAIN_PASSWORD: Set PLAIN security password. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc37 -// -func (s *Socket) SetPlainPassword(value string) error { - return s.SetSockOptString(PLAIN_PASSWORD, value) -} - -// ZMQ_CURVE_SERVER: Set CURVE server role. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc38 -// -func (s *Socket) SetCurveServer(value int) error { - return s.SetSockOptInt(CURVE_SERVER, value) -} - -// ZMQ_CURVE_PUBLICKEY: Set CURVE public key. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc39 -// -func (s *Socket) SetCurvePublickey(value string) error { - return s.SetSockOptString(CURVE_PUBLICKEY, value) -} - -// ZMQ_CURVE_SECRETKEY: Set CURVE secret key. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc40 -// -func (s *Socket) SetCurveSecretkey(value string) error { - return s.SetSockOptString(CURVE_SECRETKEY, value) -} - -// ZMQ_CURVE_SERVERKEY: Set CURVE server key. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc41 -// -func (s *Socket) SetCurveServerkey(value string) error { - return s.SetSockOptString(CURVE_SERVERKEY, value) -} - -// ZMQ_ZAP_DOMAIN: Set RFC 27 authentication domain. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc42 -// -func (s *Socket) SetZapDomain(value string) error { - return s.SetSockOptString(ZAP_DOMAIN, value) -} - -// ZMQ_CONFLATE: Keep only last message. -// -// See: http://api.zeromq.org/4.0:zmq-setsockopt#toc43 -// -func (s *Socket) SetConflate(value bool) error { - if value { - return s.SetSockOptInt(CONFLATE, 1) - } - return s.SetSockOptInt(CONFLATE, 0) -} diff --git a/vendor/github.com/davecgh/go-spew/LICENSE b/vendor/github.com/davecgh/go-spew/LICENSE deleted file mode 100644 index 2a7cfd2..0000000 --- a/vendor/github.com/davecgh/go-spew/LICENSE +++ /dev/null @@ -1,13 +0,0 @@ -Copyright (c) 2012-2013 Dave Collins - -Permission to use, copy, modify, and distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/github.com/davecgh/go-spew/spew/bypass.go b/vendor/github.com/davecgh/go-spew/spew/bypass.go deleted file mode 100644 index 565bf58..0000000 --- a/vendor/github.com/davecgh/go-spew/spew/bypass.go +++ /dev/null @@ -1,151 +0,0 @@ -// Copyright (c) 2015 Dave Collins -// -// Permission to use, copy, modify, and distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -// NOTE: Due to the following build constraints, this file will only be compiled -// when the code is not running on Google App Engine and "-tags disableunsafe" -// is not added to the go build command line. -// +build !appengine,!disableunsafe - -package spew - -import ( - "reflect" - "unsafe" -) - -const ( - // UnsafeDisabled is a build-time constant which specifies whether or - // not access to the unsafe package is available. - UnsafeDisabled = false - - // ptrSize is the size of a pointer on the current arch. - ptrSize = unsafe.Sizeof((*byte)(nil)) -) - -var ( - // offsetPtr, offsetScalar, and offsetFlag are the offsets for the - // internal reflect.Value fields. These values are valid before golang - // commit ecccf07e7f9d which changed the format. The are also valid - // after commit 82f48826c6c7 which changed the format again to mirror - // the original format. Code in the init function updates these offsets - // as necessary. - offsetPtr = uintptr(ptrSize) - offsetScalar = uintptr(0) - offsetFlag = uintptr(ptrSize * 2) - - // flagKindWidth and flagKindShift indicate various bits that the - // reflect package uses internally to track kind information. - // - // flagRO indicates whether or not the value field of a reflect.Value is - // read-only. - // - // flagIndir indicates whether the value field of a reflect.Value is - // the actual data or a pointer to the data. - // - // These values are valid before golang commit 90a7c3c86944 which - // changed their positions. Code in the init function updates these - // flags as necessary. - flagKindWidth = uintptr(5) - flagKindShift = uintptr(flagKindWidth - 1) - flagRO = uintptr(1 << 0) - flagIndir = uintptr(1 << 1) -) - -func init() { - // Older versions of reflect.Value stored small integers directly in the - // ptr field (which is named val in the older versions). Versions - // between commits ecccf07e7f9d and 82f48826c6c7 added a new field named - // scalar for this purpose which unfortunately came before the flag - // field, so the offset of the flag field is different for those - // versions. - // - // This code constructs a new reflect.Value from a known small integer - // and checks if the size of the reflect.Value struct indicates it has - // the scalar field. When it does, the offsets are updated accordingly. - vv := reflect.ValueOf(0xf00) - if unsafe.Sizeof(vv) == (ptrSize * 4) { - offsetScalar = ptrSize * 2 - offsetFlag = ptrSize * 3 - } - - // Commit 90a7c3c86944 changed the flag positions such that the low - // order bits are the kind. This code extracts the kind from the flags - // field and ensures it's the correct type. When it's not, the flag - // order has been changed to the newer format, so the flags are updated - // accordingly. - upf := unsafe.Pointer(uintptr(unsafe.Pointer(&vv)) + offsetFlag) - upfv := *(*uintptr)(upf) - flagKindMask := uintptr((1<>flagKindShift != uintptr(reflect.Int) { - flagKindShift = 0 - flagRO = 1 << 5 - flagIndir = 1 << 6 - - // Commit adf9b30e5594 modified the flags to separate the - // flagRO flag into two bits which specifies whether or not the - // field is embedded. This causes flagIndir to move over a bit - // and means that flagRO is the combination of either of the - // original flagRO bit and the new bit. - // - // This code detects the change by extracting what used to be - // the indirect bit to ensure it's set. When it's not, the flag - // order has been changed to the newer format, so the flags are - // updated accordingly. - if upfv&flagIndir == 0 { - flagRO = 3 << 5 - flagIndir = 1 << 7 - } - } -} - -// unsafeReflectValue converts the passed reflect.Value into a one that bypasses -// the typical safety restrictions preventing access to unaddressable and -// unexported data. It works by digging the raw pointer to the underlying -// value out of the protected value and generating a new unprotected (unsafe) -// reflect.Value to it. -// -// This allows us to check for implementations of the Stringer and error -// interfaces to be used for pretty printing ordinarily unaddressable and -// inaccessible values such as unexported struct fields. -func unsafeReflectValue(v reflect.Value) (rv reflect.Value) { - indirects := 1 - vt := v.Type() - upv := unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + offsetPtr) - rvf := *(*uintptr)(unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + offsetFlag)) - if rvf&flagIndir != 0 { - vt = reflect.PtrTo(v.Type()) - indirects++ - } else if offsetScalar != 0 { - // The value is in the scalar field when it's not one of the - // reference types. - switch vt.Kind() { - case reflect.Uintptr: - case reflect.Chan: - case reflect.Func: - case reflect.Map: - case reflect.Ptr: - case reflect.UnsafePointer: - default: - upv = unsafe.Pointer(uintptr(unsafe.Pointer(&v)) + - offsetScalar) - } - } - - pv := reflect.NewAt(vt, upv) - rv = pv - for i := 0; i < indirects; i++ { - rv = rv.Elem() - } - return rv -} diff --git a/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go b/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go deleted file mode 100644 index 457e412..0000000 --- a/vendor/github.com/davecgh/go-spew/spew/bypasssafe.go +++ /dev/null @@ -1,37 +0,0 @@ -// Copyright (c) 2015 Dave Collins -// -// Permission to use, copy, modify, and distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - -// NOTE: Due to the following build constraints, this file will only be compiled -// when either the code is running on Google App Engine or "-tags disableunsafe" -// is added to the go build command line. -// +build appengine disableunsafe - -package spew - -import "reflect" - -const ( - // UnsafeDisabled is a build-time constant which specifies whether or - // not access to the unsafe package is available. - UnsafeDisabled = true -) - -// unsafeReflectValue typically converts the passed reflect.Value into a one -// that bypasses the typical safety restrictions preventing access to -// unaddressable and unexported data. However, doing this relies on access to -// the unsafe package. This is a stub version which simply returns the passed -// reflect.Value when the unsafe package is not available. -func unsafeReflectValue(v reflect.Value) reflect.Value { - return v -} diff --git a/vendor/github.com/davecgh/go-spew/spew/common.go b/vendor/github.com/davecgh/go-spew/spew/common.go deleted file mode 100644 index 14f02dc..0000000 --- a/vendor/github.com/davecgh/go-spew/spew/common.go +++ /dev/null @@ -1,341 +0,0 @@ -/* - * Copyright (c) 2013 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "bytes" - "fmt" - "io" - "reflect" - "sort" - "strconv" -) - -// Some constants in the form of bytes to avoid string overhead. This mirrors -// the technique used in the fmt package. -var ( - panicBytes = []byte("(PANIC=") - plusBytes = []byte("+") - iBytes = []byte("i") - trueBytes = []byte("true") - falseBytes = []byte("false") - interfaceBytes = []byte("(interface {})") - commaNewlineBytes = []byte(",\n") - newlineBytes = []byte("\n") - openBraceBytes = []byte("{") - openBraceNewlineBytes = []byte("{\n") - closeBraceBytes = []byte("}") - asteriskBytes = []byte("*") - colonBytes = []byte(":") - colonSpaceBytes = []byte(": ") - openParenBytes = []byte("(") - closeParenBytes = []byte(")") - spaceBytes = []byte(" ") - pointerChainBytes = []byte("->") - nilAngleBytes = []byte("") - maxNewlineBytes = []byte("\n") - maxShortBytes = []byte("") - circularBytes = []byte("") - circularShortBytes = []byte("") - invalidAngleBytes = []byte("") - openBracketBytes = []byte("[") - closeBracketBytes = []byte("]") - percentBytes = []byte("%") - precisionBytes = []byte(".") - openAngleBytes = []byte("<") - closeAngleBytes = []byte(">") - openMapBytes = []byte("map[") - closeMapBytes = []byte("]") - lenEqualsBytes = []byte("len=") - capEqualsBytes = []byte("cap=") -) - -// hexDigits is used to map a decimal value to a hex digit. -var hexDigits = "0123456789abcdef" - -// catchPanic handles any panics that might occur during the handleMethods -// calls. -func catchPanic(w io.Writer, v reflect.Value) { - if err := recover(); err != nil { - w.Write(panicBytes) - fmt.Fprintf(w, "%v", err) - w.Write(closeParenBytes) - } -} - -// handleMethods attempts to call the Error and String methods on the underlying -// type the passed reflect.Value represents and outputes the result to Writer w. -// -// It handles panics in any called methods by catching and displaying the error -// as the formatted value. -func handleMethods(cs *ConfigState, w io.Writer, v reflect.Value) (handled bool) { - // We need an interface to check if the type implements the error or - // Stringer interface. However, the reflect package won't give us an - // interface on certain things like unexported struct fields in order - // to enforce visibility rules. We use unsafe, when it's available, - // to bypass these restrictions since this package does not mutate the - // values. - if !v.CanInterface() { - if UnsafeDisabled { - return false - } - - v = unsafeReflectValue(v) - } - - // Choose whether or not to do error and Stringer interface lookups against - // the base type or a pointer to the base type depending on settings. - // Technically calling one of these methods with a pointer receiver can - // mutate the value, however, types which choose to satisify an error or - // Stringer interface with a pointer receiver should not be mutating their - // state inside these interface methods. - if !cs.DisablePointerMethods && !UnsafeDisabled && !v.CanAddr() { - v = unsafeReflectValue(v) - } - if v.CanAddr() { - v = v.Addr() - } - - // Is it an error or Stringer? - switch iface := v.Interface().(type) { - case error: - defer catchPanic(w, v) - if cs.ContinueOnMethod { - w.Write(openParenBytes) - w.Write([]byte(iface.Error())) - w.Write(closeParenBytes) - w.Write(spaceBytes) - return false - } - - w.Write([]byte(iface.Error())) - return true - - case fmt.Stringer: - defer catchPanic(w, v) - if cs.ContinueOnMethod { - w.Write(openParenBytes) - w.Write([]byte(iface.String())) - w.Write(closeParenBytes) - w.Write(spaceBytes) - return false - } - w.Write([]byte(iface.String())) - return true - } - return false -} - -// printBool outputs a boolean value as true or false to Writer w. -func printBool(w io.Writer, val bool) { - if val { - w.Write(trueBytes) - } else { - w.Write(falseBytes) - } -} - -// printInt outputs a signed integer value to Writer w. -func printInt(w io.Writer, val int64, base int) { - w.Write([]byte(strconv.FormatInt(val, base))) -} - -// printUint outputs an unsigned integer value to Writer w. -func printUint(w io.Writer, val uint64, base int) { - w.Write([]byte(strconv.FormatUint(val, base))) -} - -// printFloat outputs a floating point value using the specified precision, -// which is expected to be 32 or 64bit, to Writer w. -func printFloat(w io.Writer, val float64, precision int) { - w.Write([]byte(strconv.FormatFloat(val, 'g', -1, precision))) -} - -// printComplex outputs a complex value using the specified float precision -// for the real and imaginary parts to Writer w. -func printComplex(w io.Writer, c complex128, floatPrecision int) { - r := real(c) - w.Write(openParenBytes) - w.Write([]byte(strconv.FormatFloat(r, 'g', -1, floatPrecision))) - i := imag(c) - if i >= 0 { - w.Write(plusBytes) - } - w.Write([]byte(strconv.FormatFloat(i, 'g', -1, floatPrecision))) - w.Write(iBytes) - w.Write(closeParenBytes) -} - -// printHexPtr outputs a uintptr formatted as hexidecimal with a leading '0x' -// prefix to Writer w. -func printHexPtr(w io.Writer, p uintptr) { - // Null pointer. - num := uint64(p) - if num == 0 { - w.Write(nilAngleBytes) - return - } - - // Max uint64 is 16 bytes in hex + 2 bytes for '0x' prefix - buf := make([]byte, 18) - - // It's simpler to construct the hex string right to left. - base := uint64(16) - i := len(buf) - 1 - for num >= base { - buf[i] = hexDigits[num%base] - num /= base - i-- - } - buf[i] = hexDigits[num] - - // Add '0x' prefix. - i-- - buf[i] = 'x' - i-- - buf[i] = '0' - - // Strip unused leading bytes. - buf = buf[i:] - w.Write(buf) -} - -// valuesSorter implements sort.Interface to allow a slice of reflect.Value -// elements to be sorted. -type valuesSorter struct { - values []reflect.Value - strings []string // either nil or same len and values - cs *ConfigState -} - -// newValuesSorter initializes a valuesSorter instance, which holds a set of -// surrogate keys on which the data should be sorted. It uses flags in -// ConfigState to decide if and how to populate those surrogate keys. -func newValuesSorter(values []reflect.Value, cs *ConfigState) sort.Interface { - vs := &valuesSorter{values: values, cs: cs} - if canSortSimply(vs.values[0].Kind()) { - return vs - } - if !cs.DisableMethods { - vs.strings = make([]string, len(values)) - for i := range vs.values { - b := bytes.Buffer{} - if !handleMethods(cs, &b, vs.values[i]) { - vs.strings = nil - break - } - vs.strings[i] = b.String() - } - } - if vs.strings == nil && cs.SpewKeys { - vs.strings = make([]string, len(values)) - for i := range vs.values { - vs.strings[i] = Sprintf("%#v", vs.values[i].Interface()) - } - } - return vs -} - -// canSortSimply tests whether a reflect.Kind is a primitive that can be sorted -// directly, or whether it should be considered for sorting by surrogate keys -// (if the ConfigState allows it). -func canSortSimply(kind reflect.Kind) bool { - // This switch parallels valueSortLess, except for the default case. - switch kind { - case reflect.Bool: - return true - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - return true - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - return true - case reflect.Float32, reflect.Float64: - return true - case reflect.String: - return true - case reflect.Uintptr: - return true - case reflect.Array: - return true - } - return false -} - -// Len returns the number of values in the slice. It is part of the -// sort.Interface implementation. -func (s *valuesSorter) Len() int { - return len(s.values) -} - -// Swap swaps the values at the passed indices. It is part of the -// sort.Interface implementation. -func (s *valuesSorter) Swap(i, j int) { - s.values[i], s.values[j] = s.values[j], s.values[i] - if s.strings != nil { - s.strings[i], s.strings[j] = s.strings[j], s.strings[i] - } -} - -// valueSortLess returns whether the first value should sort before the second -// value. It is used by valueSorter.Less as part of the sort.Interface -// implementation. -func valueSortLess(a, b reflect.Value) bool { - switch a.Kind() { - case reflect.Bool: - return !a.Bool() && b.Bool() - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - return a.Int() < b.Int() - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - return a.Uint() < b.Uint() - case reflect.Float32, reflect.Float64: - return a.Float() < b.Float() - case reflect.String: - return a.String() < b.String() - case reflect.Uintptr: - return a.Uint() < b.Uint() - case reflect.Array: - // Compare the contents of both arrays. - l := a.Len() - for i := 0; i < l; i++ { - av := a.Index(i) - bv := b.Index(i) - if av.Interface() == bv.Interface() { - continue - } - return valueSortLess(av, bv) - } - } - return a.String() < b.String() -} - -// Less returns whether the value at index i should sort before the -// value at index j. It is part of the sort.Interface implementation. -func (s *valuesSorter) Less(i, j int) bool { - if s.strings == nil { - return valueSortLess(s.values[i], s.values[j]) - } - return s.strings[i] < s.strings[j] -} - -// sortValues is a sort function that handles both native types and any type that -// can be converted to error or Stringer. Other inputs are sorted according to -// their Value.String() value to ensure display stability. -func sortValues(values []reflect.Value, cs *ConfigState) { - if len(values) == 0 { - return - } - sort.Sort(newValuesSorter(values, cs)) -} diff --git a/vendor/github.com/davecgh/go-spew/spew/config.go b/vendor/github.com/davecgh/go-spew/spew/config.go deleted file mode 100644 index ee1ab07..0000000 --- a/vendor/github.com/davecgh/go-spew/spew/config.go +++ /dev/null @@ -1,297 +0,0 @@ -/* - * Copyright (c) 2013 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "bytes" - "fmt" - "io" - "os" -) - -// ConfigState houses the configuration options used by spew to format and -// display values. There is a global instance, Config, that is used to control -// all top-level Formatter and Dump functionality. Each ConfigState instance -// provides methods equivalent to the top-level functions. -// -// The zero value for ConfigState provides no indentation. You would typically -// want to set it to a space or a tab. -// -// Alternatively, you can use NewDefaultConfig to get a ConfigState instance -// with default settings. See the documentation of NewDefaultConfig for default -// values. -type ConfigState struct { - // Indent specifies the string to use for each indentation level. The - // global config instance that all top-level functions use set this to a - // single space by default. If you would like more indentation, you might - // set this to a tab with "\t" or perhaps two spaces with " ". - Indent string - - // MaxDepth controls the maximum number of levels to descend into nested - // data structures. The default, 0, means there is no limit. - // - // NOTE: Circular data structures are properly detected, so it is not - // necessary to set this value unless you specifically want to limit deeply - // nested data structures. - MaxDepth int - - // DisableMethods specifies whether or not error and Stringer interfaces are - // invoked for types that implement them. - DisableMethods bool - - // DisablePointerMethods specifies whether or not to check for and invoke - // error and Stringer interfaces on types which only accept a pointer - // receiver when the current type is not a pointer. - // - // NOTE: This might be an unsafe action since calling one of these methods - // with a pointer receiver could technically mutate the value, however, - // in practice, types which choose to satisify an error or Stringer - // interface with a pointer receiver should not be mutating their state - // inside these interface methods. As a result, this option relies on - // access to the unsafe package, so it will not have any effect when - // running in environments without access to the unsafe package such as - // Google App Engine or with the "disableunsafe" build tag specified. - DisablePointerMethods bool - - // ContinueOnMethod specifies whether or not recursion should continue once - // a custom error or Stringer interface is invoked. The default, false, - // means it will print the results of invoking the custom error or Stringer - // interface and return immediately instead of continuing to recurse into - // the internals of the data type. - // - // NOTE: This flag does not have any effect if method invocation is disabled - // via the DisableMethods or DisablePointerMethods options. - ContinueOnMethod bool - - // SortKeys specifies map keys should be sorted before being printed. Use - // this to have a more deterministic, diffable output. Note that only - // native types (bool, int, uint, floats, uintptr and string) and types - // that support the error or Stringer interfaces (if methods are - // enabled) are supported, with other types sorted according to the - // reflect.Value.String() output which guarantees display stability. - SortKeys bool - - // SpewKeys specifies that, as a last resort attempt, map keys should - // be spewed to strings and sorted by those strings. This is only - // considered if SortKeys is true. - SpewKeys bool -} - -// Config is the active configuration of the top-level functions. -// The configuration can be changed by modifying the contents of spew.Config. -var Config = ConfigState{Indent: " "} - -// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the formatted string as a value that satisfies error. See NewFormatter -// for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Errorf(format, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Errorf(format string, a ...interface{}) (err error) { - return fmt.Errorf(format, c.convertArgs(a)...) -} - -// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprint(w, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Fprint(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprint(w, c.convertArgs(a)...) -} - -// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprintf(w, format, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { - return fmt.Fprintf(w, format, c.convertArgs(a)...) -} - -// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it -// passed with a Formatter interface returned by c.NewFormatter. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprintln(w, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprintln(w, c.convertArgs(a)...) -} - -// Print is a wrapper for fmt.Print that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Print(c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Print(a ...interface{}) (n int, err error) { - return fmt.Print(c.convertArgs(a)...) -} - -// Printf is a wrapper for fmt.Printf that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Printf(format, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Printf(format string, a ...interface{}) (n int, err error) { - return fmt.Printf(format, c.convertArgs(a)...) -} - -// Println is a wrapper for fmt.Println that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Println(c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Println(a ...interface{}) (n int, err error) { - return fmt.Println(c.convertArgs(a)...) -} - -// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprint(c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Sprint(a ...interface{}) string { - return fmt.Sprint(c.convertArgs(a)...) -} - -// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were -// passed with a Formatter interface returned by c.NewFormatter. It returns -// the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprintf(format, c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Sprintf(format string, a ...interface{}) string { - return fmt.Sprintf(format, c.convertArgs(a)...) -} - -// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it -// were passed with a Formatter interface returned by c.NewFormatter. It -// returns the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprintln(c.NewFormatter(a), c.NewFormatter(b)) -func (c *ConfigState) Sprintln(a ...interface{}) string { - return fmt.Sprintln(c.convertArgs(a)...) -} - -/* -NewFormatter returns a custom formatter that satisfies the fmt.Formatter -interface. As a result, it integrates cleanly with standard fmt package -printing functions. The formatter is useful for inline printing of smaller data -types similar to the standard %v format specifier. - -The custom formatter only responds to the %v (most compact), %+v (adds pointer -addresses), %#v (adds types), and %#+v (adds types and pointer addresses) verb -combinations. Any other verbs such as %x and %q will be sent to the the -standard fmt package for formatting. In addition, the custom formatter ignores -the width and precision arguments (however they will still work on the format -specifiers not handled by the custom formatter). - -Typically this function shouldn't be called directly. It is much easier to make -use of the custom formatter by calling one of the convenience functions such as -c.Printf, c.Println, or c.Printf. -*/ -func (c *ConfigState) NewFormatter(v interface{}) fmt.Formatter { - return newFormatter(c, v) -} - -// Fdump formats and displays the passed arguments to io.Writer w. It formats -// exactly the same as Dump. -func (c *ConfigState) Fdump(w io.Writer, a ...interface{}) { - fdump(c, w, a...) -} - -/* -Dump displays the passed parameters to standard out with newlines, customizable -indentation, and additional debug information such as complete types and all -pointer addresses used to indirect to the final value. It provides the -following features over the built-in printing facilities provided by the fmt -package: - - * Pointers are dereferenced and followed - * Circular data structures are detected and handled properly - * Custom Stringer/error interfaces are optionally invoked, including - on unexported types - * Custom types which only implement the Stringer/error interfaces via - a pointer receiver are optionally invoked when passing non-pointer - variables - * Byte arrays and slices are dumped like the hexdump -C command which - includes offsets, byte values in hex, and ASCII output - -The configuration options are controlled by modifying the public members -of c. See ConfigState for options documentation. - -See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to -get the formatted result as a string. -*/ -func (c *ConfigState) Dump(a ...interface{}) { - fdump(c, os.Stdout, a...) -} - -// Sdump returns a string with the passed arguments formatted exactly the same -// as Dump. -func (c *ConfigState) Sdump(a ...interface{}) string { - var buf bytes.Buffer - fdump(c, &buf, a...) - return buf.String() -} - -// convertArgs accepts a slice of arguments and returns a slice of the same -// length with each argument converted to a spew Formatter interface using -// the ConfigState associated with s. -func (c *ConfigState) convertArgs(args []interface{}) (formatters []interface{}) { - formatters = make([]interface{}, len(args)) - for index, arg := range args { - formatters[index] = newFormatter(c, arg) - } - return formatters -} - -// NewDefaultConfig returns a ConfigState with the following default settings. -// -// Indent: " " -// MaxDepth: 0 -// DisableMethods: false -// DisablePointerMethods: false -// ContinueOnMethod: false -// SortKeys: false -func NewDefaultConfig() *ConfigState { - return &ConfigState{Indent: " "} -} diff --git a/vendor/github.com/davecgh/go-spew/spew/doc.go b/vendor/github.com/davecgh/go-spew/spew/doc.go deleted file mode 100644 index 5be0c40..0000000 --- a/vendor/github.com/davecgh/go-spew/spew/doc.go +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Copyright (c) 2013 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* -Package spew implements a deep pretty printer for Go data structures to aid in -debugging. - -A quick overview of the additional features spew provides over the built-in -printing facilities for Go data types are as follows: - - * Pointers are dereferenced and followed - * Circular data structures are detected and handled properly - * Custom Stringer/error interfaces are optionally invoked, including - on unexported types - * Custom types which only implement the Stringer/error interfaces via - a pointer receiver are optionally invoked when passing non-pointer - variables - * Byte arrays and slices are dumped like the hexdump -C command which - includes offsets, byte values in hex, and ASCII output (only when using - Dump style) - -There are two different approaches spew allows for dumping Go data structures: - - * Dump style which prints with newlines, customizable indentation, - and additional debug information such as types and all pointer addresses - used to indirect to the final value - * A custom Formatter interface that integrates cleanly with the standard fmt - package and replaces %v, %+v, %#v, and %#+v to provide inline printing - similar to the default %v while providing the additional functionality - outlined above and passing unsupported format verbs such as %x and %q - along to fmt - -Quick Start - -This section demonstrates how to quickly get started with spew. See the -sections below for further details on formatting and configuration options. - -To dump a variable with full newlines, indentation, type, and pointer -information use Dump, Fdump, or Sdump: - spew.Dump(myVar1, myVar2, ...) - spew.Fdump(someWriter, myVar1, myVar2, ...) - str := spew.Sdump(myVar1, myVar2, ...) - -Alternatively, if you would prefer to use format strings with a compacted inline -printing style, use the convenience wrappers Printf, Fprintf, etc with -%v (most compact), %+v (adds pointer addresses), %#v (adds types), or -%#+v (adds types and pointer addresses): - spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2) - spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) - spew.Fprintf(someWriter, "myVar1: %v -- myVar2: %+v", myVar1, myVar2) - spew.Fprintf(someWriter, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) - -Configuration Options - -Configuration of spew is handled by fields in the ConfigState type. For -convenience, all of the top-level functions use a global state available -via the spew.Config global. - -It is also possible to create a ConfigState instance that provides methods -equivalent to the top-level functions. This allows concurrent configuration -options. See the ConfigState documentation for more details. - -The following configuration options are available: - * Indent - String to use for each indentation level for Dump functions. - It is a single space by default. A popular alternative is "\t". - - * MaxDepth - Maximum number of levels to descend into nested data structures. - There is no limit by default. - - * DisableMethods - Disables invocation of error and Stringer interface methods. - Method invocation is enabled by default. - - * DisablePointerMethods - Disables invocation of error and Stringer interface methods on types - which only accept pointer receivers from non-pointer variables. - Pointer method invocation is enabled by default. - - * ContinueOnMethod - Enables recursion into types after invoking error and Stringer interface - methods. Recursion after method invocation is disabled by default. - - * SortKeys - Specifies map keys should be sorted before being printed. Use - this to have a more deterministic, diffable output. Note that - only native types (bool, int, uint, floats, uintptr and string) - and types which implement error or Stringer interfaces are - supported with other types sorted according to the - reflect.Value.String() output which guarantees display - stability. Natural map order is used by default. - - * SpewKeys - Specifies that, as a last resort attempt, map keys should be - spewed to strings and sorted by those strings. This is only - considered if SortKeys is true. - -Dump Usage - -Simply call spew.Dump with a list of variables you want to dump: - - spew.Dump(myVar1, myVar2, ...) - -You may also call spew.Fdump if you would prefer to output to an arbitrary -io.Writer. For example, to dump to standard error: - - spew.Fdump(os.Stderr, myVar1, myVar2, ...) - -A third option is to call spew.Sdump to get the formatted output as a string: - - str := spew.Sdump(myVar1, myVar2, ...) - -Sample Dump Output - -See the Dump example for details on the setup of the types and variables being -shown here. - - (main.Foo) { - unexportedField: (*main.Bar)(0xf84002e210)({ - flag: (main.Flag) flagTwo, - data: (uintptr) - }), - ExportedField: (map[interface {}]interface {}) (len=1) { - (string) (len=3) "one": (bool) true - } - } - -Byte (and uint8) arrays and slices are displayed uniquely like the hexdump -C -command as shown. - ([]uint8) (len=32 cap=32) { - 00000000 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 |............... | - 00000010 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 |!"#$%&'()*+,-./0| - 00000020 31 32 |12| - } - -Custom Formatter - -Spew provides a custom formatter that implements the fmt.Formatter interface -so that it integrates cleanly with standard fmt package printing functions. The -formatter is useful for inline printing of smaller data types similar to the -standard %v format specifier. - -The custom formatter only responds to the %v (most compact), %+v (adds pointer -addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb -combinations. Any other verbs such as %x and %q will be sent to the the -standard fmt package for formatting. In addition, the custom formatter ignores -the width and precision arguments (however they will still work on the format -specifiers not handled by the custom formatter). - -Custom Formatter Usage - -The simplest way to make use of the spew custom formatter is to call one of the -convenience functions such as spew.Printf, spew.Println, or spew.Printf. The -functions have syntax you are most likely already familiar with: - - spew.Printf("myVar1: %v -- myVar2: %+v", myVar1, myVar2) - spew.Printf("myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) - spew.Println(myVar, myVar2) - spew.Fprintf(os.Stderr, "myVar1: %v -- myVar2: %+v", myVar1, myVar2) - spew.Fprintf(os.Stderr, "myVar3: %#v -- myVar4: %#+v", myVar3, myVar4) - -See the Index for the full list convenience functions. - -Sample Formatter Output - -Double pointer to a uint8: - %v: <**>5 - %+v: <**>(0xf8400420d0->0xf8400420c8)5 - %#v: (**uint8)5 - %#+v: (**uint8)(0xf8400420d0->0xf8400420c8)5 - -Pointer to circular struct with a uint8 field and a pointer to itself: - %v: <*>{1 <*>} - %+v: <*>(0xf84003e260){ui8:1 c:<*>(0xf84003e260)} - %#v: (*main.circular){ui8:(uint8)1 c:(*main.circular)} - %#+v: (*main.circular)(0xf84003e260){ui8:(uint8)1 c:(*main.circular)(0xf84003e260)} - -See the Printf example for details on the setup of variables being shown -here. - -Errors - -Since it is possible for custom Stringer/error interfaces to panic, spew -detects them and handles them internally by printing the panic information -inline with the output. Since spew is intended to provide deep pretty printing -capabilities on structures, it intentionally does not return any errors. -*/ -package spew diff --git a/vendor/github.com/davecgh/go-spew/spew/dump.go b/vendor/github.com/davecgh/go-spew/spew/dump.go deleted file mode 100644 index a0ff95e..0000000 --- a/vendor/github.com/davecgh/go-spew/spew/dump.go +++ /dev/null @@ -1,509 +0,0 @@ -/* - * Copyright (c) 2013 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "bytes" - "encoding/hex" - "fmt" - "io" - "os" - "reflect" - "regexp" - "strconv" - "strings" -) - -var ( - // uint8Type is a reflect.Type representing a uint8. It is used to - // convert cgo types to uint8 slices for hexdumping. - uint8Type = reflect.TypeOf(uint8(0)) - - // cCharRE is a regular expression that matches a cgo char. - // It is used to detect character arrays to hexdump them. - cCharRE = regexp.MustCompile("^.*\\._Ctype_char$") - - // cUnsignedCharRE is a regular expression that matches a cgo unsigned - // char. It is used to detect unsigned character arrays to hexdump - // them. - cUnsignedCharRE = regexp.MustCompile("^.*\\._Ctype_unsignedchar$") - - // cUint8tCharRE is a regular expression that matches a cgo uint8_t. - // It is used to detect uint8_t arrays to hexdump them. - cUint8tCharRE = regexp.MustCompile("^.*\\._Ctype_uint8_t$") -) - -// dumpState contains information about the state of a dump operation. -type dumpState struct { - w io.Writer - depth int - pointers map[uintptr]int - ignoreNextType bool - ignoreNextIndent bool - cs *ConfigState -} - -// indent performs indentation according to the depth level and cs.Indent -// option. -func (d *dumpState) indent() { - if d.ignoreNextIndent { - d.ignoreNextIndent = false - return - } - d.w.Write(bytes.Repeat([]byte(d.cs.Indent), d.depth)) -} - -// unpackValue returns values inside of non-nil interfaces when possible. -// This is useful for data types like structs, arrays, slices, and maps which -// can contain varying types packed inside an interface. -func (d *dumpState) unpackValue(v reflect.Value) reflect.Value { - if v.Kind() == reflect.Interface && !v.IsNil() { - v = v.Elem() - } - return v -} - -// dumpPtr handles formatting of pointers by indirecting them as necessary. -func (d *dumpState) dumpPtr(v reflect.Value) { - // Remove pointers at or below the current depth from map used to detect - // circular refs. - for k, depth := range d.pointers { - if depth >= d.depth { - delete(d.pointers, k) - } - } - - // Keep list of all dereferenced pointers to show later. - pointerChain := make([]uintptr, 0) - - // Figure out how many levels of indirection there are by dereferencing - // pointers and unpacking interfaces down the chain while detecting circular - // references. - nilFound := false - cycleFound := false - indirects := 0 - ve := v - for ve.Kind() == reflect.Ptr { - if ve.IsNil() { - nilFound = true - break - } - indirects++ - addr := ve.Pointer() - pointerChain = append(pointerChain, addr) - if pd, ok := d.pointers[addr]; ok && pd < d.depth { - cycleFound = true - indirects-- - break - } - d.pointers[addr] = d.depth - - ve = ve.Elem() - if ve.Kind() == reflect.Interface { - if ve.IsNil() { - nilFound = true - break - } - ve = ve.Elem() - } - } - - // Display type information. - d.w.Write(openParenBytes) - d.w.Write(bytes.Repeat(asteriskBytes, indirects)) - d.w.Write([]byte(ve.Type().String())) - d.w.Write(closeParenBytes) - - // Display pointer information. - if len(pointerChain) > 0 { - d.w.Write(openParenBytes) - for i, addr := range pointerChain { - if i > 0 { - d.w.Write(pointerChainBytes) - } - printHexPtr(d.w, addr) - } - d.w.Write(closeParenBytes) - } - - // Display dereferenced value. - d.w.Write(openParenBytes) - switch { - case nilFound == true: - d.w.Write(nilAngleBytes) - - case cycleFound == true: - d.w.Write(circularBytes) - - default: - d.ignoreNextType = true - d.dump(ve) - } - d.w.Write(closeParenBytes) -} - -// dumpSlice handles formatting of arrays and slices. Byte (uint8 under -// reflection) arrays and slices are dumped in hexdump -C fashion. -func (d *dumpState) dumpSlice(v reflect.Value) { - // Determine whether this type should be hex dumped or not. Also, - // for types which should be hexdumped, try to use the underlying data - // first, then fall back to trying to convert them to a uint8 slice. - var buf []uint8 - doConvert := false - doHexDump := false - numEntries := v.Len() - if numEntries > 0 { - vt := v.Index(0).Type() - vts := vt.String() - switch { - // C types that need to be converted. - case cCharRE.MatchString(vts): - fallthrough - case cUnsignedCharRE.MatchString(vts): - fallthrough - case cUint8tCharRE.MatchString(vts): - doConvert = true - - // Try to use existing uint8 slices and fall back to converting - // and copying if that fails. - case vt.Kind() == reflect.Uint8: - // We need an addressable interface to convert the type - // to a byte slice. However, the reflect package won't - // give us an interface on certain things like - // unexported struct fields in order to enforce - // visibility rules. We use unsafe, when available, to - // bypass these restrictions since this package does not - // mutate the values. - vs := v - if !vs.CanInterface() || !vs.CanAddr() { - vs = unsafeReflectValue(vs) - } - if !UnsafeDisabled { - vs = vs.Slice(0, numEntries) - - // Use the existing uint8 slice if it can be - // type asserted. - iface := vs.Interface() - if slice, ok := iface.([]uint8); ok { - buf = slice - doHexDump = true - break - } - } - - // The underlying data needs to be converted if it can't - // be type asserted to a uint8 slice. - doConvert = true - } - - // Copy and convert the underlying type if needed. - if doConvert && vt.ConvertibleTo(uint8Type) { - // Convert and copy each element into a uint8 byte - // slice. - buf = make([]uint8, numEntries) - for i := 0; i < numEntries; i++ { - vv := v.Index(i) - buf[i] = uint8(vv.Convert(uint8Type).Uint()) - } - doHexDump = true - } - } - - // Hexdump the entire slice as needed. - if doHexDump { - indent := strings.Repeat(d.cs.Indent, d.depth) - str := indent + hex.Dump(buf) - str = strings.Replace(str, "\n", "\n"+indent, -1) - str = strings.TrimRight(str, d.cs.Indent) - d.w.Write([]byte(str)) - return - } - - // Recursively call dump for each item. - for i := 0; i < numEntries; i++ { - d.dump(d.unpackValue(v.Index(i))) - if i < (numEntries - 1) { - d.w.Write(commaNewlineBytes) - } else { - d.w.Write(newlineBytes) - } - } -} - -// dump is the main workhorse for dumping a value. It uses the passed reflect -// value to figure out what kind of object we are dealing with and formats it -// appropriately. It is a recursive function, however circular data structures -// are detected and handled properly. -func (d *dumpState) dump(v reflect.Value) { - // Handle invalid reflect values immediately. - kind := v.Kind() - if kind == reflect.Invalid { - d.w.Write(invalidAngleBytes) - return - } - - // Handle pointers specially. - if kind == reflect.Ptr { - d.indent() - d.dumpPtr(v) - return - } - - // Print type information unless already handled elsewhere. - if !d.ignoreNextType { - d.indent() - d.w.Write(openParenBytes) - d.w.Write([]byte(v.Type().String())) - d.w.Write(closeParenBytes) - d.w.Write(spaceBytes) - } - d.ignoreNextType = false - - // Display length and capacity if the built-in len and cap functions - // work with the value's kind and the len/cap itself is non-zero. - valueLen, valueCap := 0, 0 - switch v.Kind() { - case reflect.Array, reflect.Slice, reflect.Chan: - valueLen, valueCap = v.Len(), v.Cap() - case reflect.Map, reflect.String: - valueLen = v.Len() - } - if valueLen != 0 || valueCap != 0 { - d.w.Write(openParenBytes) - if valueLen != 0 { - d.w.Write(lenEqualsBytes) - printInt(d.w, int64(valueLen), 10) - } - if valueCap != 0 { - if valueLen != 0 { - d.w.Write(spaceBytes) - } - d.w.Write(capEqualsBytes) - printInt(d.w, int64(valueCap), 10) - } - d.w.Write(closeParenBytes) - d.w.Write(spaceBytes) - } - - // Call Stringer/error interfaces if they exist and the handle methods flag - // is enabled - if !d.cs.DisableMethods { - if (kind != reflect.Invalid) && (kind != reflect.Interface) { - if handled := handleMethods(d.cs, d.w, v); handled { - return - } - } - } - - switch kind { - case reflect.Invalid: - // Do nothing. We should never get here since invalid has already - // been handled above. - - case reflect.Bool: - printBool(d.w, v.Bool()) - - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - printInt(d.w, v.Int(), 10) - - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - printUint(d.w, v.Uint(), 10) - - case reflect.Float32: - printFloat(d.w, v.Float(), 32) - - case reflect.Float64: - printFloat(d.w, v.Float(), 64) - - case reflect.Complex64: - printComplex(d.w, v.Complex(), 32) - - case reflect.Complex128: - printComplex(d.w, v.Complex(), 64) - - case reflect.Slice: - if v.IsNil() { - d.w.Write(nilAngleBytes) - break - } - fallthrough - - case reflect.Array: - d.w.Write(openBraceNewlineBytes) - d.depth++ - if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { - d.indent() - d.w.Write(maxNewlineBytes) - } else { - d.dumpSlice(v) - } - d.depth-- - d.indent() - d.w.Write(closeBraceBytes) - - case reflect.String: - d.w.Write([]byte(strconv.Quote(v.String()))) - - case reflect.Interface: - // The only time we should get here is for nil interfaces due to - // unpackValue calls. - if v.IsNil() { - d.w.Write(nilAngleBytes) - } - - case reflect.Ptr: - // Do nothing. We should never get here since pointers have already - // been handled above. - - case reflect.Map: - // nil maps should be indicated as different than empty maps - if v.IsNil() { - d.w.Write(nilAngleBytes) - break - } - - d.w.Write(openBraceNewlineBytes) - d.depth++ - if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { - d.indent() - d.w.Write(maxNewlineBytes) - } else { - numEntries := v.Len() - keys := v.MapKeys() - if d.cs.SortKeys { - sortValues(keys, d.cs) - } - for i, key := range keys { - d.dump(d.unpackValue(key)) - d.w.Write(colonSpaceBytes) - d.ignoreNextIndent = true - d.dump(d.unpackValue(v.MapIndex(key))) - if i < (numEntries - 1) { - d.w.Write(commaNewlineBytes) - } else { - d.w.Write(newlineBytes) - } - } - } - d.depth-- - d.indent() - d.w.Write(closeBraceBytes) - - case reflect.Struct: - d.w.Write(openBraceNewlineBytes) - d.depth++ - if (d.cs.MaxDepth != 0) && (d.depth > d.cs.MaxDepth) { - d.indent() - d.w.Write(maxNewlineBytes) - } else { - vt := v.Type() - numFields := v.NumField() - for i := 0; i < numFields; i++ { - d.indent() - vtf := vt.Field(i) - d.w.Write([]byte(vtf.Name)) - d.w.Write(colonSpaceBytes) - d.ignoreNextIndent = true - d.dump(d.unpackValue(v.Field(i))) - if i < (numFields - 1) { - d.w.Write(commaNewlineBytes) - } else { - d.w.Write(newlineBytes) - } - } - } - d.depth-- - d.indent() - d.w.Write(closeBraceBytes) - - case reflect.Uintptr: - printHexPtr(d.w, uintptr(v.Uint())) - - case reflect.UnsafePointer, reflect.Chan, reflect.Func: - printHexPtr(d.w, v.Pointer()) - - // There were not any other types at the time this code was written, but - // fall back to letting the default fmt package handle it in case any new - // types are added. - default: - if v.CanInterface() { - fmt.Fprintf(d.w, "%v", v.Interface()) - } else { - fmt.Fprintf(d.w, "%v", v.String()) - } - } -} - -// fdump is a helper function to consolidate the logic from the various public -// methods which take varying writers and config states. -func fdump(cs *ConfigState, w io.Writer, a ...interface{}) { - for _, arg := range a { - if arg == nil { - w.Write(interfaceBytes) - w.Write(spaceBytes) - w.Write(nilAngleBytes) - w.Write(newlineBytes) - continue - } - - d := dumpState{w: w, cs: cs} - d.pointers = make(map[uintptr]int) - d.dump(reflect.ValueOf(arg)) - d.w.Write(newlineBytes) - } -} - -// Fdump formats and displays the passed arguments to io.Writer w. It formats -// exactly the same as Dump. -func Fdump(w io.Writer, a ...interface{}) { - fdump(&Config, w, a...) -} - -// Sdump returns a string with the passed arguments formatted exactly the same -// as Dump. -func Sdump(a ...interface{}) string { - var buf bytes.Buffer - fdump(&Config, &buf, a...) - return buf.String() -} - -/* -Dump displays the passed parameters to standard out with newlines, customizable -indentation, and additional debug information such as complete types and all -pointer addresses used to indirect to the final value. It provides the -following features over the built-in printing facilities provided by the fmt -package: - - * Pointers are dereferenced and followed - * Circular data structures are detected and handled properly - * Custom Stringer/error interfaces are optionally invoked, including - on unexported types - * Custom types which only implement the Stringer/error interfaces via - a pointer receiver are optionally invoked when passing non-pointer - variables - * Byte arrays and slices are dumped like the hexdump -C command which - includes offsets, byte values in hex, and ASCII output - -The configuration options are controlled by an exported package global, -spew.Config. See ConfigState for options documentation. - -See Fdump if you would prefer dumping to an arbitrary io.Writer or Sdump to -get the formatted result as a string. -*/ -func Dump(a ...interface{}) { - fdump(&Config, os.Stdout, a...) -} diff --git a/vendor/github.com/davecgh/go-spew/spew/format.go b/vendor/github.com/davecgh/go-spew/spew/format.go deleted file mode 100644 index ecf3b80..0000000 --- a/vendor/github.com/davecgh/go-spew/spew/format.go +++ /dev/null @@ -1,419 +0,0 @@ -/* - * Copyright (c) 2013 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "bytes" - "fmt" - "reflect" - "strconv" - "strings" -) - -// supportedFlags is a list of all the character flags supported by fmt package. -const supportedFlags = "0-+# " - -// formatState implements the fmt.Formatter interface and contains information -// about the state of a formatting operation. The NewFormatter function can -// be used to get a new Formatter which can be used directly as arguments -// in standard fmt package printing calls. -type formatState struct { - value interface{} - fs fmt.State - depth int - pointers map[uintptr]int - ignoreNextType bool - cs *ConfigState -} - -// buildDefaultFormat recreates the original format string without precision -// and width information to pass in to fmt.Sprintf in the case of an -// unrecognized type. Unless new types are added to the language, this -// function won't ever be called. -func (f *formatState) buildDefaultFormat() (format string) { - buf := bytes.NewBuffer(percentBytes) - - for _, flag := range supportedFlags { - if f.fs.Flag(int(flag)) { - buf.WriteRune(flag) - } - } - - buf.WriteRune('v') - - format = buf.String() - return format -} - -// constructOrigFormat recreates the original format string including precision -// and width information to pass along to the standard fmt package. This allows -// automatic deferral of all format strings this package doesn't support. -func (f *formatState) constructOrigFormat(verb rune) (format string) { - buf := bytes.NewBuffer(percentBytes) - - for _, flag := range supportedFlags { - if f.fs.Flag(int(flag)) { - buf.WriteRune(flag) - } - } - - if width, ok := f.fs.Width(); ok { - buf.WriteString(strconv.Itoa(width)) - } - - if precision, ok := f.fs.Precision(); ok { - buf.Write(precisionBytes) - buf.WriteString(strconv.Itoa(precision)) - } - - buf.WriteRune(verb) - - format = buf.String() - return format -} - -// unpackValue returns values inside of non-nil interfaces when possible and -// ensures that types for values which have been unpacked from an interface -// are displayed when the show types flag is also set. -// This is useful for data types like structs, arrays, slices, and maps which -// can contain varying types packed inside an interface. -func (f *formatState) unpackValue(v reflect.Value) reflect.Value { - if v.Kind() == reflect.Interface { - f.ignoreNextType = false - if !v.IsNil() { - v = v.Elem() - } - } - return v -} - -// formatPtr handles formatting of pointers by indirecting them as necessary. -func (f *formatState) formatPtr(v reflect.Value) { - // Display nil if top level pointer is nil. - showTypes := f.fs.Flag('#') - if v.IsNil() && (!showTypes || f.ignoreNextType) { - f.fs.Write(nilAngleBytes) - return - } - - // Remove pointers at or below the current depth from map used to detect - // circular refs. - for k, depth := range f.pointers { - if depth >= f.depth { - delete(f.pointers, k) - } - } - - // Keep list of all dereferenced pointers to possibly show later. - pointerChain := make([]uintptr, 0) - - // Figure out how many levels of indirection there are by derferencing - // pointers and unpacking interfaces down the chain while detecting circular - // references. - nilFound := false - cycleFound := false - indirects := 0 - ve := v - for ve.Kind() == reflect.Ptr { - if ve.IsNil() { - nilFound = true - break - } - indirects++ - addr := ve.Pointer() - pointerChain = append(pointerChain, addr) - if pd, ok := f.pointers[addr]; ok && pd < f.depth { - cycleFound = true - indirects-- - break - } - f.pointers[addr] = f.depth - - ve = ve.Elem() - if ve.Kind() == reflect.Interface { - if ve.IsNil() { - nilFound = true - break - } - ve = ve.Elem() - } - } - - // Display type or indirection level depending on flags. - if showTypes && !f.ignoreNextType { - f.fs.Write(openParenBytes) - f.fs.Write(bytes.Repeat(asteriskBytes, indirects)) - f.fs.Write([]byte(ve.Type().String())) - f.fs.Write(closeParenBytes) - } else { - if nilFound || cycleFound { - indirects += strings.Count(ve.Type().String(), "*") - } - f.fs.Write(openAngleBytes) - f.fs.Write([]byte(strings.Repeat("*", indirects))) - f.fs.Write(closeAngleBytes) - } - - // Display pointer information depending on flags. - if f.fs.Flag('+') && (len(pointerChain) > 0) { - f.fs.Write(openParenBytes) - for i, addr := range pointerChain { - if i > 0 { - f.fs.Write(pointerChainBytes) - } - printHexPtr(f.fs, addr) - } - f.fs.Write(closeParenBytes) - } - - // Display dereferenced value. - switch { - case nilFound == true: - f.fs.Write(nilAngleBytes) - - case cycleFound == true: - f.fs.Write(circularShortBytes) - - default: - f.ignoreNextType = true - f.format(ve) - } -} - -// format is the main workhorse for providing the Formatter interface. It -// uses the passed reflect value to figure out what kind of object we are -// dealing with and formats it appropriately. It is a recursive function, -// however circular data structures are detected and handled properly. -func (f *formatState) format(v reflect.Value) { - // Handle invalid reflect values immediately. - kind := v.Kind() - if kind == reflect.Invalid { - f.fs.Write(invalidAngleBytes) - return - } - - // Handle pointers specially. - if kind == reflect.Ptr { - f.formatPtr(v) - return - } - - // Print type information unless already handled elsewhere. - if !f.ignoreNextType && f.fs.Flag('#') { - f.fs.Write(openParenBytes) - f.fs.Write([]byte(v.Type().String())) - f.fs.Write(closeParenBytes) - } - f.ignoreNextType = false - - // Call Stringer/error interfaces if they exist and the handle methods - // flag is enabled. - if !f.cs.DisableMethods { - if (kind != reflect.Invalid) && (kind != reflect.Interface) { - if handled := handleMethods(f.cs, f.fs, v); handled { - return - } - } - } - - switch kind { - case reflect.Invalid: - // Do nothing. We should never get here since invalid has already - // been handled above. - - case reflect.Bool: - printBool(f.fs, v.Bool()) - - case reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int: - printInt(f.fs, v.Int(), 10) - - case reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint: - printUint(f.fs, v.Uint(), 10) - - case reflect.Float32: - printFloat(f.fs, v.Float(), 32) - - case reflect.Float64: - printFloat(f.fs, v.Float(), 64) - - case reflect.Complex64: - printComplex(f.fs, v.Complex(), 32) - - case reflect.Complex128: - printComplex(f.fs, v.Complex(), 64) - - case reflect.Slice: - if v.IsNil() { - f.fs.Write(nilAngleBytes) - break - } - fallthrough - - case reflect.Array: - f.fs.Write(openBracketBytes) - f.depth++ - if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { - f.fs.Write(maxShortBytes) - } else { - numEntries := v.Len() - for i := 0; i < numEntries; i++ { - if i > 0 { - f.fs.Write(spaceBytes) - } - f.ignoreNextType = true - f.format(f.unpackValue(v.Index(i))) - } - } - f.depth-- - f.fs.Write(closeBracketBytes) - - case reflect.String: - f.fs.Write([]byte(v.String())) - - case reflect.Interface: - // The only time we should get here is for nil interfaces due to - // unpackValue calls. - if v.IsNil() { - f.fs.Write(nilAngleBytes) - } - - case reflect.Ptr: - // Do nothing. We should never get here since pointers have already - // been handled above. - - case reflect.Map: - // nil maps should be indicated as different than empty maps - if v.IsNil() { - f.fs.Write(nilAngleBytes) - break - } - - f.fs.Write(openMapBytes) - f.depth++ - if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { - f.fs.Write(maxShortBytes) - } else { - keys := v.MapKeys() - if f.cs.SortKeys { - sortValues(keys, f.cs) - } - for i, key := range keys { - if i > 0 { - f.fs.Write(spaceBytes) - } - f.ignoreNextType = true - f.format(f.unpackValue(key)) - f.fs.Write(colonBytes) - f.ignoreNextType = true - f.format(f.unpackValue(v.MapIndex(key))) - } - } - f.depth-- - f.fs.Write(closeMapBytes) - - case reflect.Struct: - numFields := v.NumField() - f.fs.Write(openBraceBytes) - f.depth++ - if (f.cs.MaxDepth != 0) && (f.depth > f.cs.MaxDepth) { - f.fs.Write(maxShortBytes) - } else { - vt := v.Type() - for i := 0; i < numFields; i++ { - if i > 0 { - f.fs.Write(spaceBytes) - } - vtf := vt.Field(i) - if f.fs.Flag('+') || f.fs.Flag('#') { - f.fs.Write([]byte(vtf.Name)) - f.fs.Write(colonBytes) - } - f.format(f.unpackValue(v.Field(i))) - } - } - f.depth-- - f.fs.Write(closeBraceBytes) - - case reflect.Uintptr: - printHexPtr(f.fs, uintptr(v.Uint())) - - case reflect.UnsafePointer, reflect.Chan, reflect.Func: - printHexPtr(f.fs, v.Pointer()) - - // There were not any other types at the time this code was written, but - // fall back to letting the default fmt package handle it if any get added. - default: - format := f.buildDefaultFormat() - if v.CanInterface() { - fmt.Fprintf(f.fs, format, v.Interface()) - } else { - fmt.Fprintf(f.fs, format, v.String()) - } - } -} - -// Format satisfies the fmt.Formatter interface. See NewFormatter for usage -// details. -func (f *formatState) Format(fs fmt.State, verb rune) { - f.fs = fs - - // Use standard formatting for verbs that are not v. - if verb != 'v' { - format := f.constructOrigFormat(verb) - fmt.Fprintf(fs, format, f.value) - return - } - - if f.value == nil { - if fs.Flag('#') { - fs.Write(interfaceBytes) - } - fs.Write(nilAngleBytes) - return - } - - f.format(reflect.ValueOf(f.value)) -} - -// newFormatter is a helper function to consolidate the logic from the various -// public methods which take varying config states. -func newFormatter(cs *ConfigState, v interface{}) fmt.Formatter { - fs := &formatState{value: v, cs: cs} - fs.pointers = make(map[uintptr]int) - return fs -} - -/* -NewFormatter returns a custom formatter that satisfies the fmt.Formatter -interface. As a result, it integrates cleanly with standard fmt package -printing functions. The formatter is useful for inline printing of smaller data -types similar to the standard %v format specifier. - -The custom formatter only responds to the %v (most compact), %+v (adds pointer -addresses), %#v (adds types), or %#+v (adds types and pointer addresses) verb -combinations. Any other verbs such as %x and %q will be sent to the the -standard fmt package for formatting. In addition, the custom formatter ignores -the width and precision arguments (however they will still work on the format -specifiers not handled by the custom formatter). - -Typically this function shouldn't be called directly. It is much easier to make -use of the custom formatter by calling one of the convenience functions such as -Printf, Println, or Fprintf. -*/ -func NewFormatter(v interface{}) fmt.Formatter { - return newFormatter(&Config, v) -} diff --git a/vendor/github.com/davecgh/go-spew/spew/spew.go b/vendor/github.com/davecgh/go-spew/spew/spew.go deleted file mode 100644 index d8233f5..0000000 --- a/vendor/github.com/davecgh/go-spew/spew/spew.go +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Copyright (c) 2013 Dave Collins - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -package spew - -import ( - "fmt" - "io" -) - -// Errorf is a wrapper for fmt.Errorf that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the formatted string as a value that satisfies error. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Errorf(format, spew.NewFormatter(a), spew.NewFormatter(b)) -func Errorf(format string, a ...interface{}) (err error) { - return fmt.Errorf(format, convertArgs(a)...) -} - -// Fprint is a wrapper for fmt.Fprint that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprint(w, spew.NewFormatter(a), spew.NewFormatter(b)) -func Fprint(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprint(w, convertArgs(a)...) -} - -// Fprintf is a wrapper for fmt.Fprintf that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprintf(w, format, spew.NewFormatter(a), spew.NewFormatter(b)) -func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) { - return fmt.Fprintf(w, format, convertArgs(a)...) -} - -// Fprintln is a wrapper for fmt.Fprintln that treats each argument as if it -// passed with a default Formatter interface returned by NewFormatter. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Fprintln(w, spew.NewFormatter(a), spew.NewFormatter(b)) -func Fprintln(w io.Writer, a ...interface{}) (n int, err error) { - return fmt.Fprintln(w, convertArgs(a)...) -} - -// Print is a wrapper for fmt.Print that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Print(spew.NewFormatter(a), spew.NewFormatter(b)) -func Print(a ...interface{}) (n int, err error) { - return fmt.Print(convertArgs(a)...) -} - -// Printf is a wrapper for fmt.Printf that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Printf(format, spew.NewFormatter(a), spew.NewFormatter(b)) -func Printf(format string, a ...interface{}) (n int, err error) { - return fmt.Printf(format, convertArgs(a)...) -} - -// Println is a wrapper for fmt.Println that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the number of bytes written and any write error encountered. See -// NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Println(spew.NewFormatter(a), spew.NewFormatter(b)) -func Println(a ...interface{}) (n int, err error) { - return fmt.Println(convertArgs(a)...) -} - -// Sprint is a wrapper for fmt.Sprint that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprint(spew.NewFormatter(a), spew.NewFormatter(b)) -func Sprint(a ...interface{}) string { - return fmt.Sprint(convertArgs(a)...) -} - -// Sprintf is a wrapper for fmt.Sprintf that treats each argument as if it were -// passed with a default Formatter interface returned by NewFormatter. It -// returns the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprintf(format, spew.NewFormatter(a), spew.NewFormatter(b)) -func Sprintf(format string, a ...interface{}) string { - return fmt.Sprintf(format, convertArgs(a)...) -} - -// Sprintln is a wrapper for fmt.Sprintln that treats each argument as if it -// were passed with a default Formatter interface returned by NewFormatter. It -// returns the resulting string. See NewFormatter for formatting details. -// -// This function is shorthand for the following syntax: -// -// fmt.Sprintln(spew.NewFormatter(a), spew.NewFormatter(b)) -func Sprintln(a ...interface{}) string { - return fmt.Sprintln(convertArgs(a)...) -} - -// convertArgs accepts a slice of arguments and returns a slice of the same -// length with each argument converted to a default spew Formatter interface. -func convertArgs(args []interface{}) (formatters []interface{}) { - formatters = make([]interface{}, len(args)) - for index, arg := range args { - formatters[index] = NewFormatter(arg) - } - return formatters -} diff --git a/vendor/github.com/mitchellh/go-homedir/LICENSE b/vendor/github.com/mitchellh/go-homedir/LICENSE deleted file mode 100644 index f9c841a..0000000 --- a/vendor/github.com/mitchellh/go-homedir/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/mitchellh/go-homedir/README.md b/vendor/github.com/mitchellh/go-homedir/README.md deleted file mode 100644 index d70706d..0000000 --- a/vendor/github.com/mitchellh/go-homedir/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# go-homedir - -This is a Go library for detecting the user's home directory without -the use of cgo, so the library can be used in cross-compilation environments. - -Usage is incredibly simple, just call `homedir.Dir()` to get the home directory -for a user, and `homedir.Expand()` to expand the `~` in a path to the home -directory. - -**Why not just use `os/user`?** The built-in `os/user` package requires -cgo on Darwin systems. This means that any Go code that uses that package -cannot cross compile. But 99% of the time the use for `os/user` is just to -retrieve the home directory, which we can do for the current user without -cgo. This library does that, enabling cross-compilation. diff --git a/vendor/github.com/mitchellh/go-homedir/homedir.go b/vendor/github.com/mitchellh/go-homedir/homedir.go deleted file mode 100644 index 6944957..0000000 --- a/vendor/github.com/mitchellh/go-homedir/homedir.go +++ /dev/null @@ -1,132 +0,0 @@ -package homedir - -import ( - "bytes" - "errors" - "os" - "os/exec" - "path/filepath" - "runtime" - "strconv" - "strings" - "sync" -) - -// DisableCache will disable caching of the home directory. Caching is enabled -// by default. -var DisableCache bool - -var homedirCache string -var cacheLock sync.RWMutex - -// Dir returns the home directory for the executing user. -// -// This uses an OS-specific method for discovering the home directory. -// An error is returned if a home directory cannot be detected. -func Dir() (string, error) { - if !DisableCache { - cacheLock.RLock() - cached := homedirCache - cacheLock.RUnlock() - if cached != "" { - return cached, nil - } - } - - cacheLock.Lock() - defer cacheLock.Unlock() - - var result string - var err error - if runtime.GOOS == "windows" { - result, err = dirWindows() - } else { - // Unix-like system, so just assume Unix - result, err = dirUnix() - } - - if err != nil { - return "", err - } - homedirCache = result - return result, nil -} - -// Expand expands the path to include the home directory if the path -// is prefixed with `~`. If it isn't prefixed with `~`, the path is -// returned as-is. -func Expand(path string) (string, error) { - if len(path) == 0 { - return path, nil - } - - if path[0] != '~' { - return path, nil - } - - if len(path) > 1 && path[1] != '/' && path[1] != '\\' { - return "", errors.New("cannot expand user-specific home dir") - } - - dir, err := Dir() - if err != nil { - return "", err - } - - return filepath.Join(dir, path[1:]), nil -} - -func dirUnix() (string, error) { - // First prefer the HOME environmental variable - if home := os.Getenv("HOME"); home != "" { - return home, nil - } - - // If that fails, try getent - var stdout bytes.Buffer - cmd := exec.Command("getent", "passwd", strconv.Itoa(os.Getuid())) - cmd.Stdout = &stdout - if err := cmd.Run(); err != nil { - // If "getent" is missing, ignore it - if err != exec.ErrNotFound { - return "", err - } - } else { - if passwd := strings.TrimSpace(stdout.String()); passwd != "" { - // username:password:uid:gid:gecos:home:shell - passwdParts := strings.SplitN(passwd, ":", 7) - if len(passwdParts) > 5 { - return passwdParts[5], nil - } - } - } - - // If all else fails, try the shell - stdout.Reset() - cmd = exec.Command("sh", "-c", "cd && pwd") - cmd.Stdout = &stdout - if err := cmd.Run(); err != nil { - return "", err - } - - result := strings.TrimSpace(stdout.String()) - if result == "" { - return "", errors.New("blank output when reading home directory") - } - - return result, nil -} - -func dirWindows() (string, error) { - drive := os.Getenv("HOMEDRIVE") - path := os.Getenv("HOMEPATH") - home := drive + path - if drive == "" || path == "" { - home = os.Getenv("USERPROFILE") - } - if home == "" { - return "", errors.New("HOMEDRIVE, HOMEPATH, and USERPROFILE are blank") - } - - return home, nil -} diff --git a/vendor/github.com/motemen/go-quickfix/.travis.yml b/vendor/github.com/motemen/go-quickfix/.travis.yml deleted file mode 100644 index c1e5814..0000000 --- a/vendor/github.com/motemen/go-quickfix/.travis.yml +++ /dev/null @@ -1,8 +0,0 @@ -language: go -go: - - 1.5 - - 1.6 - - tip -install: - - go get ./... - - go get -t ./... diff --git a/vendor/github.com/motemen/go-quickfix/LICENSE b/vendor/github.com/motemen/go-quickfix/LICENSE deleted file mode 100644 index 756f32f..0000000 --- a/vendor/github.com/motemen/go-quickfix/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Hiroshi SHIBAMURA - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/vendor/github.com/motemen/go-quickfix/README.adoc b/vendor/github.com/motemen/go-quickfix/README.adoc deleted file mode 100644 index ee10b21..0000000 --- a/vendor/github.com/motemen/go-quickfix/README.adoc +++ /dev/null @@ -1,82 +0,0 @@ -= goquickfix image:https://travis-ci.org/motemen/go-quickfix.svg?branch=master["Build Status", link="https://travis-ci.org/motemen/go-quickfix"] image:http://godoc.org/github.com/motemen/go-quickfix?status.svg["GoDoc", link="http://godoc.org/github.com/motemen/go-quickfix"] image:http://gocover.io/_badge/github.com/motemen/go-quickfix["Test Coverage", link="http://gocover.io/github.com/motemen/go-quickfix"] - -The goquickfix command quick fixes Go source that is well typed but -Go refuses to compile e.g. "x declared and not used". - -== Installation - - go get github.com/motemen/go-quickfix/cmd/goquickfix - -== Usage - - goquickfix [-w] [-revert] ... - - Flags: - -revert=false: try to revert possible quickfixes introduced by goquickfix - -w=false: write result to (source) file instead of stdout - -== Description - -While coding, sometimes you may write a Go program that is completely well typed -but `go build` (or `run` or `test`) refuses to build, like this: - -[source,go] ----- -package main - -import ( - "fmt" - "log" -) - -func main() { - nums := []int{3, 1, 4, 1, 5} - for i, n := range nums { - fmt.Println(n) - } -} ----- - -The Go compiler will complain: - - eg.go:5: imported and not used: "log" - -Or - - eg.go:9: i declared and not used - -Do we have to bother to comment out the import line or remove -the unused identifier one by one for the Go compiler? Of course no, -`goquickfix` does the work instead of you. - -Run - - goquickfix -w eg.go - -and you will get the source rewritten so that Go compiles it well without -changing the semantics: - -[source,go] ----- -package main - -import ( - "fmt" - _ "log" -) - -func main() { - nums := []int{3, 1, 4, 1, 5} - for i, n := range nums { - fmt.Println(n) - _ = i - } -} ----- - -Now you can `go run` or `go test` your code safely. - -== TODO - -* `-d` option to show diffs -* `-hard=true` option to remove erroneous code rather than adding new code diff --git a/vendor/github.com/motemen/go-quickfix/quickfix.go b/vendor/github.com/motemen/go-quickfix/quickfix.go deleted file mode 100644 index bf76c83..0000000 --- a/vendor/github.com/motemen/go-quickfix/quickfix.go +++ /dev/null @@ -1,428 +0,0 @@ -// Package quickfix provides functions for fixing Go ASTs -// that are well typed but "go build" refuses to build. -package quickfix - -import ( - "fmt" - "regexp" - "strings" - - "go/ast" - "go/importer" - "go/token" - "go/types" - - "golang.org/x/tools/go/ast/astutil" -) - -var ( - declaredNotUsed = regexp.MustCompile(`^([a-zA-Z0-9_]+) declared but not used$`) - importedNotUsed = regexp.MustCompile(`^(".+") imported but not used`) - noNewVariablesOnDefine = "no new variables on left side of :=" -) - -type Config struct { - Fset *token.FileSet - Files []*ast.File - TypeInfo *types.Info - MaxTries int -} - -func QuickFix(fset *token.FileSet, files []*ast.File) (err error) { - config := Config{ - Fset: fset, - Files: files, - MaxTries: 10, - } - return config.QuickFix() -} - -// QuickFix rewrites AST files of same package so that they pass go build. -// For example: -// v declared but not used -> append `_ = v` -// "p" imported but not used -> rewrite to `import _ "p"` -// no new variables on left side of := -> rewrite `:=` to `=` -// -// TODO implement hardMode, which removes errorneous code rather than adding -func (c Config) QuickFix() (err error) { - maxTries := 10 - if c.MaxTries > 0 { - maxTries = c.MaxTries - } - for i := 0; i < maxTries; i++ { - var foundError bool - foundError, err = c.QuickFixOnce() - if !foundError { - return nil - } - } - - return -} - -type tracedVisitor struct { - path []ast.Node - visit func(ast.Node, []ast.Node) bool -} - -func (v tracedVisitor) Visit(node ast.Node) ast.Visitor { - if v.visit(node, v.path) { - return tracedVisitor{ - path: append([]ast.Node{node}, v.path...), - visit: v.visit, - } - } - - return nil -} - -func traverseAST(node ast.Node, visit func(ast.Node, []ast.Node) bool) { - v := tracedVisitor{ - visit: visit, - } - ast.Walk(v, node) -} - -// pkgsWithSideEffect are set of packages which are known to provide APIs by -// blank identifier import (import _ "p"). -var pkgsWithSideEffect = map[string]bool{} - -func init() { - for _, path := range []string{ - "expvar", - "image/gif", - "image/jpeg", - "image/png", - "net/http/pprof", - "unsafe", - "golang.org/x/image/bmp", - "golang.org/x/image/tiff", - "golang.org/x/image/vp8", - "golang.org/x/image/vp81", - "golang.org/x/image/webp", - "golang.org/x/tools/go/gcimporter", - } { - pkgsWithSideEffect[`"`+path+`"`] = true - } -} - -func RevertQuickFix(fset *token.FileSet, files []*ast.File) error { - config := Config{ - Fset: fset, - Files: files, - MaxTries: 10, - } - return config.RevertQuickFix() -} - -// RevertQuickFix reverts possible quickfixes introduced by QuickFix. -// This may result to non-buildable source, and cannot reproduce the original -// code before prior QuickFix. -// For example: -// `_ = v` -> removed -// `import _ "p"` -> rewritten to `import "p"` -func (c Config) RevertQuickFix() (err error) { - fset := c.Fset - files := c.Files - - nodeToRemove := map[ast.Node]bool{} - - for _, f := range files { - ast.Inspect(f, func(node ast.Node) bool { - if assign, ok := node.(*ast.AssignStmt); ok { - if len(assign.Lhs) == 1 && isBlankIdent(assign.Lhs[0]) && - len(assign.Rhs) == 1 && isIdent(assign.Rhs[0]) { - // The statement is `_ = v` - nodeToRemove[node] = true - } - - return false - } else if imp, ok := node.(*ast.ImportSpec); ok { - if isBlankIdent(imp.Name) && !pkgsWithSideEffect[imp.Path.Value] { - // The spec is `import _ "p"` and p is not a package that - // provides "side effects" - imp.Name = nil - } - - return false - } - - return true - }) - - for len(nodeToRemove) > 0 { - traverseAST(f, func(node ast.Node, nodepath []ast.Node) bool { - if nodeToRemove[node] { - parent := nodepath[0] - if removeChildNode(node, parent) == false { - err = fmt.Errorf( - "BUG: could not remove node: %s (in: %s)", - fset.Position(node.Pos()), - fset.Position(parent.Pos()), - ) - } - delete(nodeToRemove, node) - return false - } - - return true - }) - } - } - - return -} - -func (c Config) QuickFixOnce() (bool, error) { - fset := c.Fset - files := c.Files - - errs := []error{} - config := &types.Config{ - Error: func(err error) { - errs = append(errs, err) - }, - Importer: importer.Default(), - } - - _, err := config.Check("_quickfix", fset, files, c.TypeInfo) - if err == nil { - return false, nil - } - - // apply fixes on AST later so that we won't break funcs that inspect AST by positions - fixes := map[error]func() bool{} - unhandled := ErrorList{} - - foundError := len(errs) > 0 - - for _, err := range errs { - err, ok := err.(types.Error) - if !ok { - unhandled = append(unhandled, err) - continue - } - - f := findFile(c.Files, err.Pos) - if f == nil { - e := ErrCouldNotLocate{ - Err: err, - Fset: fset, - } - unhandled = append(unhandled, e) - continue - } - - nodepath, _ := astutil.PathEnclosingInterval(f, err.Pos, err.Pos) - - var fix func() bool - - // - "%s declared but not used" - // - "%q imported but not used" (+ " as %s") - // - "label %s declared but not used" TODO - // - "no new variables on left side of :=" - if m := declaredNotUsed.FindStringSubmatch(err.Msg); m != nil { - identName := m[1] - fix = func() bool { - return fixDeclaredNotUsed(nodepath, identName) - } - } else if m := importedNotUsed.FindStringSubmatch(err.Msg); m != nil { - pkgPath := m[1] // quoted string, but it's okay because this will be compared to ast.BasicLit.Value. - fix = func() bool { - return fixImportedNotUsed(nodepath, pkgPath) - } - } else if err.Msg == noNewVariablesOnDefine { - fix = func() bool { - return fixNoNewVariables(nodepath) - } - } else { - unhandled = append(unhandled, err) - } - - if fix != nil { - fixes[err] = fix - } - } - - for err, fix := range fixes { - if fix() == false { - unhandled = append(unhandled, err) - } - } - - return foundError, unhandled.any() -} - -func fixDeclaredNotUsed(nodepath []ast.Node, identName string) bool { - // insert "_ = x" to supress "declared but not used" error - stmt := &ast.AssignStmt{ - Lhs: []ast.Expr{ast.NewIdent("_")}, - Tok: token.ASSIGN, - Rhs: []ast.Expr{ast.NewIdent(identName)}, - } - return appendStmt(nodepath, stmt) -} - -func fixImportedNotUsed(nodepath []ast.Node, pkgPath string) bool { - for _, node := range nodepath { - if f, ok := node.(*ast.File); ok { - for _, imp := range f.Imports { - if imp.Path.Value == pkgPath { - // make this import spec anonymous one - imp.Name = ast.NewIdent("_") - return true - } - } - } - } - return false -} - -func fixNoNewVariables(nodepath []ast.Node) bool { - for _, node := range nodepath { - switch node := node.(type) { - case *ast.AssignStmt: - if node.Tok == token.DEFINE { - node.Tok = token.ASSIGN - return true - } - - case *ast.RangeStmt: - if node.Tok == token.DEFINE { - node.Tok = token.ASSIGN - return true - } - } - } - return false -} - -type ErrorList []error - -func (errs ErrorList) any() error { - if len(errs) == 0 { - return nil - } - - return errs -} - -func (errs ErrorList) Error() string { - s := []string{fmt.Sprintf("%d error(s):", len(errs))} - for _, e := range errs { - s = append(s, fmt.Sprintf("- %s", e)) - } - return strings.Join(s, "\n") -} - -func appendStmt(nodepath []ast.Node, stmt ast.Stmt) bool { - for _, node := range nodepath { - switch node := node.(type) { - case *ast.BlockStmt: - if node.List == nil { - node.List = []ast.Stmt{} - } - node.List = append(node.List, stmt) - - case *ast.CaseClause: - if node.Body == nil { - node.Body = []ast.Stmt{} - } - node.Body = append(node.Body, stmt) - - case *ast.CommClause: - if node.Body == nil { - node.Body = []ast.Stmt{} - } - node.Body = append(node.Body, stmt) - - case *ast.RangeStmt: - if node.Body == nil { - node.Body = &ast.BlockStmt{} - } - if node.Body.List == nil { - node.Body.List = []ast.Stmt{} - } - node.Body.List = append(node.Body.List, stmt) - - default: - continue - } - - return true - } - - return false -} - -func removeChildNode(child, parent ast.Node) bool { - switch parent := parent.(type) { - case *ast.BlockStmt: - removeFromStmtList(child, parent.List) - return true - case *ast.CaseClause: - removeFromStmtList(child, parent.Body) - return true - case *ast.CommClause: - removeFromStmtList(child, parent.Body) - return true - case *ast.RangeStmt: - removeFromStmtList(child, parent.Body.List) - return true - } - - return false -} - -// removeFromStmtList remove node from slice of statements list. This function -// modifies list in-place and pads rest of the slice with ast.EmptyStmt. -func removeFromStmtList(node ast.Node, list []ast.Stmt) bool { - for i, s := range list { - if s == node { - for ; i < len(list)-1; i++ { - list[i] = list[i+1] - } - list[len(list)-1] = &ast.EmptyStmt{} - return true - } - } - - return false -} - -func findFile(files []*ast.File, pos token.Pos) *ast.File { - for _, f := range files { - if f.Pos() <= pos && pos < f.End() { - return f - } - } - - return nil -} - -func isIdent(node ast.Node) bool { - if node == nil { - return false - } - - _, ok := node.(*ast.Ident) - return ok -} - -func isBlankIdent(node ast.Node) bool { - if node == nil { - return false - } - - ident, ok := node.(*ast.Ident) - return ok && ident != nil && ident.Name == "_" -} - -type ErrCouldNotLocate struct { - Err types.Error - Fset *token.FileSet -} - -func (e ErrCouldNotLocate) Error() string { - return fmt.Sprintf("cannot find file for error %q: %s (%d)", e.Err.Error(), e.Fset.Position(e.Err.Pos), e.Err.Pos) -} diff --git a/vendor/github.com/nu7hatch/gouuid/.gitignore b/vendor/github.com/nu7hatch/gouuid/.gitignore deleted file mode 100644 index f9d9cd8..0000000 --- a/vendor/github.com/nu7hatch/gouuid/.gitignore +++ /dev/null @@ -1,11 +0,0 @@ -_obj -_test -*.6 -*.out -_testmain.go -\#* -.\#* -*.log -_cgo* -*.o -*.a diff --git a/vendor/github.com/nu7hatch/gouuid/COPYING b/vendor/github.com/nu7hatch/gouuid/COPYING deleted file mode 100644 index d7849fd..0000000 --- a/vendor/github.com/nu7hatch/gouuid/COPYING +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) 2011 by Krzysztof Kowalik - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/nu7hatch/gouuid/README.md b/vendor/github.com/nu7hatch/gouuid/README.md deleted file mode 100644 index e3d025d..0000000 --- a/vendor/github.com/nu7hatch/gouuid/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Pure Go UUID implementation - -This package provides immutable UUID structs and the functions -NewV3, NewV4, NewV5 and Parse() for generating versions 3, 4 -and 5 UUIDs as specified in [RFC 4122](http://www.ietf.org/rfc/rfc4122.txt). - -## Installation - -Use the `go` tool: - - $ go get github.com/nu7hatch/gouuid - -## Usage - -See [documentation and examples](http://godoc.org/github.com/nu7hatch/gouuid) -for more information. - -## Copyright - -Copyright (C) 2011 by Krzysztof Kowalik . See [COPYING](https://github.com/nu7hatch/gouuid/tree/master/COPYING) -file for details. diff --git a/vendor/github.com/nu7hatch/gouuid/uuid.go b/vendor/github.com/nu7hatch/gouuid/uuid.go deleted file mode 100644 index ac9623b..0000000 --- a/vendor/github.com/nu7hatch/gouuid/uuid.go +++ /dev/null @@ -1,173 +0,0 @@ -// This package provides immutable UUID structs and the functions -// NewV3, NewV4, NewV5 and Parse() for generating versions 3, 4 -// and 5 UUIDs as specified in RFC 4122. -// -// Copyright (C) 2011 by Krzysztof Kowalik -package uuid - -import ( - "crypto/md5" - "crypto/rand" - "crypto/sha1" - "encoding/hex" - "errors" - "fmt" - "hash" - "regexp" -) - -// The UUID reserved variants. -const ( - ReservedNCS byte = 0x80 - ReservedRFC4122 byte = 0x40 - ReservedMicrosoft byte = 0x20 - ReservedFuture byte = 0x00 -) - -// The following standard UUIDs are for use with NewV3() or NewV5(). -var ( - NamespaceDNS, _ = ParseHex("6ba7b810-9dad-11d1-80b4-00c04fd430c8") - NamespaceURL, _ = ParseHex("6ba7b811-9dad-11d1-80b4-00c04fd430c8") - NamespaceOID, _ = ParseHex("6ba7b812-9dad-11d1-80b4-00c04fd430c8") - NamespaceX500, _ = ParseHex("6ba7b814-9dad-11d1-80b4-00c04fd430c8") -) - -// Pattern used to parse hex string representation of the UUID. -// FIXME: do something to consider both brackets at one time, -// current one allows to parse string with only one opening -// or closing bracket. -const hexPattern = "^(urn\\:uuid\\:)?\\{?([a-z0-9]{8})-([a-z0-9]{4})-" + - "([1-5][a-z0-9]{3})-([a-z0-9]{4})-([a-z0-9]{12})\\}?$" - -var re = regexp.MustCompile(hexPattern) - -// A UUID representation compliant with specification in -// RFC 4122 document. -type UUID [16]byte - -// ParseHex creates a UUID object from given hex string -// representation. Function accepts UUID string in following -// formats: -// -// uuid.ParseHex("6ba7b814-9dad-11d1-80b4-00c04fd430c8") -// uuid.ParseHex("{6ba7b814-9dad-11d1-80b4-00c04fd430c8}") -// uuid.ParseHex("urn:uuid:6ba7b814-9dad-11d1-80b4-00c04fd430c8") -// -func ParseHex(s string) (u *UUID, err error) { - md := re.FindStringSubmatch(s) - if md == nil { - err = errors.New("Invalid UUID string") - return - } - hash := md[2] + md[3] + md[4] + md[5] + md[6] - b, err := hex.DecodeString(hash) - if err != nil { - return - } - u = new(UUID) - copy(u[:], b) - return -} - -// Parse creates a UUID object from given bytes slice. -func Parse(b []byte) (u *UUID, err error) { - if len(b) != 16 { - err = errors.New("Given slice is not valid UUID sequence") - return - } - u = new(UUID) - copy(u[:], b) - return -} - -// Generate a UUID based on the MD5 hash of a namespace identifier -// and a name. -func NewV3(ns *UUID, name []byte) (u *UUID, err error) { - if ns == nil { - err = errors.New("Invalid namespace UUID") - return - } - u = new(UUID) - // Set all bits to MD5 hash generated from namespace and name. - u.setBytesFromHash(md5.New(), ns[:], name) - u.setVariant(ReservedRFC4122) - u.setVersion(3) - return -} - -// Generate a random UUID. -func NewV4() (u *UUID, err error) { - u = new(UUID) - // Set all bits to randomly (or pseudo-randomly) chosen values. - _, err = rand.Read(u[:]) - if err != nil { - return - } - u.setVariant(ReservedRFC4122) - u.setVersion(4) - return -} - -// Generate a UUID based on the SHA-1 hash of a namespace identifier -// and a name. -func NewV5(ns *UUID, name []byte) (u *UUID, err error) { - u = new(UUID) - // Set all bits to truncated SHA1 hash generated from namespace - // and name. - u.setBytesFromHash(sha1.New(), ns[:], name) - u.setVariant(ReservedRFC4122) - u.setVersion(5) - return -} - -// Generate a MD5 hash of a namespace and a name, and copy it to the -// UUID slice. -func (u *UUID) setBytesFromHash(hash hash.Hash, ns, name []byte) { - hash.Write(ns[:]) - hash.Write(name) - copy(u[:], hash.Sum([]byte{})[:16]) -} - -// Set the two most significant bits (bits 6 and 7) of the -// clock_seq_hi_and_reserved to zero and one, respectively. -func (u *UUID) setVariant(v byte) { - switch v { - case ReservedNCS: - u[8] = (u[8] | ReservedNCS) & 0xBF - case ReservedRFC4122: - u[8] = (u[8] | ReservedRFC4122) & 0x7F - case ReservedMicrosoft: - u[8] = (u[8] | ReservedMicrosoft) & 0x3F - } -} - -// Variant returns the UUID Variant, which determines the internal -// layout of the UUID. This will be one of the constants: RESERVED_NCS, -// RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE. -func (u *UUID) Variant() byte { - if u[8]&ReservedNCS == ReservedNCS { - return ReservedNCS - } else if u[8]&ReservedRFC4122 == ReservedRFC4122 { - return ReservedRFC4122 - } else if u[8]&ReservedMicrosoft == ReservedMicrosoft { - return ReservedMicrosoft - } - return ReservedFuture -} - -// Set the four most significant bits (bits 12 through 15) of the -// time_hi_and_version field to the 4-bit version number. -func (u *UUID) setVersion(v byte) { - u[6] = (u[6] & 0xF) | (v << 4) -} - -// Version returns a version number of the algorithm used to -// generate the UUID sequence. -func (u *UUID) Version() uint { - return uint(u[6] >> 4) -} - -// Returns unparsed version of the generated UUID sequence. -func (u *UUID) String() string { - return fmt.Sprintf("%x-%x-%x-%x-%x", u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) -} diff --git a/vendor/github.com/pmezard/go-difflib/LICENSE b/vendor/github.com/pmezard/go-difflib/LICENSE deleted file mode 100644 index c67dad6..0000000 --- a/vendor/github.com/pmezard/go-difflib/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2013, Patrick Mezard -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright -notice, this list of conditions and the following disclaimer in the -documentation and/or other materials provided with the distribution. - The names of its contributors may not be used to endorse or promote -products derived from this software without specific prior written -permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS -IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pmezard/go-difflib/difflib/difflib.go b/vendor/github.com/pmezard/go-difflib/difflib/difflib.go deleted file mode 100644 index 003e99f..0000000 --- a/vendor/github.com/pmezard/go-difflib/difflib/difflib.go +++ /dev/null @@ -1,772 +0,0 @@ -// Package difflib is a partial port of Python difflib module. -// -// It provides tools to compare sequences of strings and generate textual diffs. -// -// The following class and functions have been ported: -// -// - SequenceMatcher -// -// - unified_diff -// -// - context_diff -// -// Getting unified diffs was the main goal of the port. Keep in mind this code -// is mostly suitable to output text differences in a human friendly way, there -// are no guarantees generated diffs are consumable by patch(1). -package difflib - -import ( - "bufio" - "bytes" - "fmt" - "io" - "strings" -) - -func min(a, b int) int { - if a < b { - return a - } - return b -} - -func max(a, b int) int { - if a > b { - return a - } - return b -} - -func calculateRatio(matches, length int) float64 { - if length > 0 { - return 2.0 * float64(matches) / float64(length) - } - return 1.0 -} - -type Match struct { - A int - B int - Size int -} - -type OpCode struct { - Tag byte - I1 int - I2 int - J1 int - J2 int -} - -// SequenceMatcher compares sequence of strings. The basic -// algorithm predates, and is a little fancier than, an algorithm -// published in the late 1980's by Ratcliff and Obershelp under the -// hyperbolic name "gestalt pattern matching". The basic idea is to find -// the longest contiguous matching subsequence that contains no "junk" -// elements (R-O doesn't address junk). The same idea is then applied -// recursively to the pieces of the sequences to the left and to the right -// of the matching subsequence. This does not yield minimal edit -// sequences, but does tend to yield matches that "look right" to people. -// -// SequenceMatcher tries to compute a "human-friendly diff" between two -// sequences. Unlike e.g. UNIX(tm) diff, the fundamental notion is the -// longest *contiguous* & junk-free matching subsequence. That's what -// catches peoples' eyes. The Windows(tm) windiff has another interesting -// notion, pairing up elements that appear uniquely in each sequence. -// That, and the method here, appear to yield more intuitive difference -// reports than does diff. This method appears to be the least vulnerable -// to synching up on blocks of "junk lines", though (like blank lines in -// ordinary text files, or maybe "

" lines in HTML files). That may be -// because this is the only method of the 3 that has a *concept* of -// "junk" . -// -// Timing: Basic R-O is cubic time worst case and quadratic time expected -// case. SequenceMatcher is quadratic time for the worst case and has -// expected-case behavior dependent in a complicated way on how many -// elements the sequences have in common; best case time is linear. -type SequenceMatcher struct { - a []string - b []string - b2j map[string][]int - IsJunk func(string) bool - autoJunk bool - bJunk map[string]struct{} - matchingBlocks []Match - fullBCount map[string]int - bPopular map[string]struct{} - opCodes []OpCode -} - -func NewMatcher(a, b []string) *SequenceMatcher { - m := SequenceMatcher{autoJunk: true} - m.SetSeqs(a, b) - return &m -} - -func NewMatcherWithJunk(a, b []string, autoJunk bool, - isJunk func(string) bool) *SequenceMatcher { - - m := SequenceMatcher{IsJunk: isJunk, autoJunk: autoJunk} - m.SetSeqs(a, b) - return &m -} - -// Set two sequences to be compared. -func (m *SequenceMatcher) SetSeqs(a, b []string) { - m.SetSeq1(a) - m.SetSeq2(b) -} - -// Set the first sequence to be compared. The second sequence to be compared is -// not changed. -// -// SequenceMatcher computes and caches detailed information about the second -// sequence, so if you want to compare one sequence S against many sequences, -// use .SetSeq2(s) once and call .SetSeq1(x) repeatedly for each of the other -// sequences. -// -// See also SetSeqs() and SetSeq2(). -func (m *SequenceMatcher) SetSeq1(a []string) { - if &a == &m.a { - return - } - m.a = a - m.matchingBlocks = nil - m.opCodes = nil -} - -// Set the second sequence to be compared. The first sequence to be compared is -// not changed. -func (m *SequenceMatcher) SetSeq2(b []string) { - if &b == &m.b { - return - } - m.b = b - m.matchingBlocks = nil - m.opCodes = nil - m.fullBCount = nil - m.chainB() -} - -func (m *SequenceMatcher) chainB() { - // Populate line -> index mapping - b2j := map[string][]int{} - for i, s := range m.b { - indices := b2j[s] - indices = append(indices, i) - b2j[s] = indices - } - - // Purge junk elements - m.bJunk = map[string]struct{}{} - if m.IsJunk != nil { - junk := m.bJunk - for s, _ := range b2j { - if m.IsJunk(s) { - junk[s] = struct{}{} - } - } - for s, _ := range junk { - delete(b2j, s) - } - } - - // Purge remaining popular elements - popular := map[string]struct{}{} - n := len(m.b) - if m.autoJunk && n >= 200 { - ntest := n/100 + 1 - for s, indices := range b2j { - if len(indices) > ntest { - popular[s] = struct{}{} - } - } - for s, _ := range popular { - delete(b2j, s) - } - } - m.bPopular = popular - m.b2j = b2j -} - -func (m *SequenceMatcher) isBJunk(s string) bool { - _, ok := m.bJunk[s] - return ok -} - -// Find longest matching block in a[alo:ahi] and b[blo:bhi]. -// -// If IsJunk is not defined: -// -// Return (i,j,k) such that a[i:i+k] is equal to b[j:j+k], where -// alo <= i <= i+k <= ahi -// blo <= j <= j+k <= bhi -// and for all (i',j',k') meeting those conditions, -// k >= k' -// i <= i' -// and if i == i', j <= j' -// -// In other words, of all maximal matching blocks, return one that -// starts earliest in a, and of all those maximal matching blocks that -// start earliest in a, return the one that starts earliest in b. -// -// If IsJunk is defined, first the longest matching block is -// determined as above, but with the additional restriction that no -// junk element appears in the block. Then that block is extended as -// far as possible by matching (only) junk elements on both sides. So -// the resulting block never matches on junk except as identical junk -// happens to be adjacent to an "interesting" match. -// -// If no blocks match, return (alo, blo, 0). -func (m *SequenceMatcher) findLongestMatch(alo, ahi, blo, bhi int) Match { - // CAUTION: stripping common prefix or suffix would be incorrect. - // E.g., - // ab - // acab - // Longest matching block is "ab", but if common prefix is - // stripped, it's "a" (tied with "b"). UNIX(tm) diff does so - // strip, so ends up claiming that ab is changed to acab by - // inserting "ca" in the middle. That's minimal but unintuitive: - // "it's obvious" that someone inserted "ac" at the front. - // Windiff ends up at the same place as diff, but by pairing up - // the unique 'b's and then matching the first two 'a's. - besti, bestj, bestsize := alo, blo, 0 - - // find longest junk-free match - // during an iteration of the loop, j2len[j] = length of longest - // junk-free match ending with a[i-1] and b[j] - j2len := map[int]int{} - for i := alo; i != ahi; i++ { - // look at all instances of a[i] in b; note that because - // b2j has no junk keys, the loop is skipped if a[i] is junk - newj2len := map[int]int{} - for _, j := range m.b2j[m.a[i]] { - // a[i] matches b[j] - if j < blo { - continue - } - if j >= bhi { - break - } - k := j2len[j-1] + 1 - newj2len[j] = k - if k > bestsize { - besti, bestj, bestsize = i-k+1, j-k+1, k - } - } - j2len = newj2len - } - - // Extend the best by non-junk elements on each end. In particular, - // "popular" non-junk elements aren't in b2j, which greatly speeds - // the inner loop above, but also means "the best" match so far - // doesn't contain any junk *or* popular non-junk elements. - for besti > alo && bestj > blo && !m.isBJunk(m.b[bestj-1]) && - m.a[besti-1] == m.b[bestj-1] { - besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 - } - for besti+bestsize < ahi && bestj+bestsize < bhi && - !m.isBJunk(m.b[bestj+bestsize]) && - m.a[besti+bestsize] == m.b[bestj+bestsize] { - bestsize += 1 - } - - // Now that we have a wholly interesting match (albeit possibly - // empty!), we may as well suck up the matching junk on each - // side of it too. Can't think of a good reason not to, and it - // saves post-processing the (possibly considerable) expense of - // figuring out what to do with it. In the case of an empty - // interesting match, this is clearly the right thing to do, - // because no other kind of match is possible in the regions. - for besti > alo && bestj > blo && m.isBJunk(m.b[bestj-1]) && - m.a[besti-1] == m.b[bestj-1] { - besti, bestj, bestsize = besti-1, bestj-1, bestsize+1 - } - for besti+bestsize < ahi && bestj+bestsize < bhi && - m.isBJunk(m.b[bestj+bestsize]) && - m.a[besti+bestsize] == m.b[bestj+bestsize] { - bestsize += 1 - } - - return Match{A: besti, B: bestj, Size: bestsize} -} - -// Return list of triples describing matching subsequences. -// -// Each triple is of the form (i, j, n), and means that -// a[i:i+n] == b[j:j+n]. The triples are monotonically increasing in -// i and in j. It's also guaranteed that if (i, j, n) and (i', j', n') are -// adjacent triples in the list, and the second is not the last triple in the -// list, then i+n != i' or j+n != j'. IOW, adjacent triples never describe -// adjacent equal blocks. -// -// The last triple is a dummy, (len(a), len(b), 0), and is the only -// triple with n==0. -func (m *SequenceMatcher) GetMatchingBlocks() []Match { - if m.matchingBlocks != nil { - return m.matchingBlocks - } - - var matchBlocks func(alo, ahi, blo, bhi int, matched []Match) []Match - matchBlocks = func(alo, ahi, blo, bhi int, matched []Match) []Match { - match := m.findLongestMatch(alo, ahi, blo, bhi) - i, j, k := match.A, match.B, match.Size - if match.Size > 0 { - if alo < i && blo < j { - matched = matchBlocks(alo, i, blo, j, matched) - } - matched = append(matched, match) - if i+k < ahi && j+k < bhi { - matched = matchBlocks(i+k, ahi, j+k, bhi, matched) - } - } - return matched - } - matched := matchBlocks(0, len(m.a), 0, len(m.b), nil) - - // It's possible that we have adjacent equal blocks in the - // matching_blocks list now. - nonAdjacent := []Match{} - i1, j1, k1 := 0, 0, 0 - for _, b := range matched { - // Is this block adjacent to i1, j1, k1? - i2, j2, k2 := b.A, b.B, b.Size - if i1+k1 == i2 && j1+k1 == j2 { - // Yes, so collapse them -- this just increases the length of - // the first block by the length of the second, and the first - // block so lengthened remains the block to compare against. - k1 += k2 - } else { - // Not adjacent. Remember the first block (k1==0 means it's - // the dummy we started with), and make the second block the - // new block to compare against. - if k1 > 0 { - nonAdjacent = append(nonAdjacent, Match{i1, j1, k1}) - } - i1, j1, k1 = i2, j2, k2 - } - } - if k1 > 0 { - nonAdjacent = append(nonAdjacent, Match{i1, j1, k1}) - } - - nonAdjacent = append(nonAdjacent, Match{len(m.a), len(m.b), 0}) - m.matchingBlocks = nonAdjacent - return m.matchingBlocks -} - -// Return list of 5-tuples describing how to turn a into b. -// -// Each tuple is of the form (tag, i1, i2, j1, j2). The first tuple -// has i1 == j1 == 0, and remaining tuples have i1 == the i2 from the -// tuple preceding it, and likewise for j1 == the previous j2. -// -// The tags are characters, with these meanings: -// -// 'r' (replace): a[i1:i2] should be replaced by b[j1:j2] -// -// 'd' (delete): a[i1:i2] should be deleted, j1==j2 in this case. -// -// 'i' (insert): b[j1:j2] should be inserted at a[i1:i1], i1==i2 in this case. -// -// 'e' (equal): a[i1:i2] == b[j1:j2] -func (m *SequenceMatcher) GetOpCodes() []OpCode { - if m.opCodes != nil { - return m.opCodes - } - i, j := 0, 0 - matching := m.GetMatchingBlocks() - opCodes := make([]OpCode, 0, len(matching)) - for _, m := range matching { - // invariant: we've pumped out correct diffs to change - // a[:i] into b[:j], and the next matching block is - // a[ai:ai+size] == b[bj:bj+size]. So we need to pump - // out a diff to change a[i:ai] into b[j:bj], pump out - // the matching block, and move (i,j) beyond the match - ai, bj, size := m.A, m.B, m.Size - tag := byte(0) - if i < ai && j < bj { - tag = 'r' - } else if i < ai { - tag = 'd' - } else if j < bj { - tag = 'i' - } - if tag > 0 { - opCodes = append(opCodes, OpCode{tag, i, ai, j, bj}) - } - i, j = ai+size, bj+size - // the list of matching blocks is terminated by a - // sentinel with size 0 - if size > 0 { - opCodes = append(opCodes, OpCode{'e', ai, i, bj, j}) - } - } - m.opCodes = opCodes - return m.opCodes -} - -// Isolate change clusters by eliminating ranges with no changes. -// -// Return a generator of groups with up to n lines of context. -// Each group is in the same format as returned by GetOpCodes(). -func (m *SequenceMatcher) GetGroupedOpCodes(n int) [][]OpCode { - if n < 0 { - n = 3 - } - codes := m.GetOpCodes() - if len(codes) == 0 { - codes = []OpCode{OpCode{'e', 0, 1, 0, 1}} - } - // Fixup leading and trailing groups if they show no changes. - if codes[0].Tag == 'e' { - c := codes[0] - i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 - codes[0] = OpCode{c.Tag, max(i1, i2-n), i2, max(j1, j2-n), j2} - } - if codes[len(codes)-1].Tag == 'e' { - c := codes[len(codes)-1] - i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 - codes[len(codes)-1] = OpCode{c.Tag, i1, min(i2, i1+n), j1, min(j2, j1+n)} - } - nn := n + n - groups := [][]OpCode{} - group := []OpCode{} - for _, c := range codes { - i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 - // End the current group and start a new one whenever - // there is a large range with no changes. - if c.Tag == 'e' && i2-i1 > nn { - group = append(group, OpCode{c.Tag, i1, min(i2, i1+n), - j1, min(j2, j1+n)}) - groups = append(groups, group) - group = []OpCode{} - i1, j1 = max(i1, i2-n), max(j1, j2-n) - } - group = append(group, OpCode{c.Tag, i1, i2, j1, j2}) - } - if len(group) > 0 && !(len(group) == 1 && group[0].Tag == 'e') { - groups = append(groups, group) - } - return groups -} - -// Return a measure of the sequences' similarity (float in [0,1]). -// -// Where T is the total number of elements in both sequences, and -// M is the number of matches, this is 2.0*M / T. -// Note that this is 1 if the sequences are identical, and 0 if -// they have nothing in common. -// -// .Ratio() is expensive to compute if you haven't already computed -// .GetMatchingBlocks() or .GetOpCodes(), in which case you may -// want to try .QuickRatio() or .RealQuickRation() first to get an -// upper bound. -func (m *SequenceMatcher) Ratio() float64 { - matches := 0 - for _, m := range m.GetMatchingBlocks() { - matches += m.Size - } - return calculateRatio(matches, len(m.a)+len(m.b)) -} - -// Return an upper bound on ratio() relatively quickly. -// -// This isn't defined beyond that it is an upper bound on .Ratio(), and -// is faster to compute. -func (m *SequenceMatcher) QuickRatio() float64 { - // viewing a and b as multisets, set matches to the cardinality - // of their intersection; this counts the number of matches - // without regard to order, so is clearly an upper bound - if m.fullBCount == nil { - m.fullBCount = map[string]int{} - for _, s := range m.b { - m.fullBCount[s] = m.fullBCount[s] + 1 - } - } - - // avail[x] is the number of times x appears in 'b' less the - // number of times we've seen it in 'a' so far ... kinda - avail := map[string]int{} - matches := 0 - for _, s := range m.a { - n, ok := avail[s] - if !ok { - n = m.fullBCount[s] - } - avail[s] = n - 1 - if n > 0 { - matches += 1 - } - } - return calculateRatio(matches, len(m.a)+len(m.b)) -} - -// Return an upper bound on ratio() very quickly. -// -// This isn't defined beyond that it is an upper bound on .Ratio(), and -// is faster to compute than either .Ratio() or .QuickRatio(). -func (m *SequenceMatcher) RealQuickRatio() float64 { - la, lb := len(m.a), len(m.b) - return calculateRatio(min(la, lb), la+lb) -} - -// Convert range to the "ed" format -func formatRangeUnified(start, stop int) string { - // Per the diff spec at http://www.unix.org/single_unix_specification/ - beginning := start + 1 // lines start numbering with one - length := stop - start - if length == 1 { - return fmt.Sprintf("%d", beginning) - } - if length == 0 { - beginning -= 1 // empty ranges begin at line just before the range - } - return fmt.Sprintf("%d,%d", beginning, length) -} - -// Unified diff parameters -type UnifiedDiff struct { - A []string // First sequence lines - FromFile string // First file name - FromDate string // First file time - B []string // Second sequence lines - ToFile string // Second file name - ToDate string // Second file time - Eol string // Headers end of line, defaults to LF - Context int // Number of context lines -} - -// Compare two sequences of lines; generate the delta as a unified diff. -// -// Unified diffs are a compact way of showing line changes and a few -// lines of context. The number of context lines is set by 'n' which -// defaults to three. -// -// By default, the diff control lines (those with ---, +++, or @@) are -// created with a trailing newline. This is helpful so that inputs -// created from file.readlines() result in diffs that are suitable for -// file.writelines() since both the inputs and outputs have trailing -// newlines. -// -// For inputs that do not have trailing newlines, set the lineterm -// argument to "" so that the output will be uniformly newline free. -// -// The unidiff format normally has a header for filenames and modification -// times. Any or all of these may be specified using strings for -// 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'. -// The modification times are normally expressed in the ISO 8601 format. -func WriteUnifiedDiff(writer io.Writer, diff UnifiedDiff) error { - buf := bufio.NewWriter(writer) - defer buf.Flush() - wf := func(format string, args ...interface{}) error { - _, err := buf.WriteString(fmt.Sprintf(format, args...)) - return err - } - ws := func(s string) error { - _, err := buf.WriteString(s) - return err - } - - if len(diff.Eol) == 0 { - diff.Eol = "\n" - } - - started := false - m := NewMatcher(diff.A, diff.B) - for _, g := range m.GetGroupedOpCodes(diff.Context) { - if !started { - started = true - fromDate := "" - if len(diff.FromDate) > 0 { - fromDate = "\t" + diff.FromDate - } - toDate := "" - if len(diff.ToDate) > 0 { - toDate = "\t" + diff.ToDate - } - if diff.FromFile != "" || diff.ToFile != "" { - err := wf("--- %s%s%s", diff.FromFile, fromDate, diff.Eol) - if err != nil { - return err - } - err = wf("+++ %s%s%s", diff.ToFile, toDate, diff.Eol) - if err != nil { - return err - } - } - } - first, last := g[0], g[len(g)-1] - range1 := formatRangeUnified(first.I1, last.I2) - range2 := formatRangeUnified(first.J1, last.J2) - if err := wf("@@ -%s +%s @@%s", range1, range2, diff.Eol); err != nil { - return err - } - for _, c := range g { - i1, i2, j1, j2 := c.I1, c.I2, c.J1, c.J2 - if c.Tag == 'e' { - for _, line := range diff.A[i1:i2] { - if err := ws(" " + line); err != nil { - return err - } - } - continue - } - if c.Tag == 'r' || c.Tag == 'd' { - for _, line := range diff.A[i1:i2] { - if err := ws("-" + line); err != nil { - return err - } - } - } - if c.Tag == 'r' || c.Tag == 'i' { - for _, line := range diff.B[j1:j2] { - if err := ws("+" + line); err != nil { - return err - } - } - } - } - } - return nil -} - -// Like WriteUnifiedDiff but returns the diff a string. -func GetUnifiedDiffString(diff UnifiedDiff) (string, error) { - w := &bytes.Buffer{} - err := WriteUnifiedDiff(w, diff) - return string(w.Bytes()), err -} - -// Convert range to the "ed" format. -func formatRangeContext(start, stop int) string { - // Per the diff spec at http://www.unix.org/single_unix_specification/ - beginning := start + 1 // lines start numbering with one - length := stop - start - if length == 0 { - beginning -= 1 // empty ranges begin at line just before the range - } - if length <= 1 { - return fmt.Sprintf("%d", beginning) - } - return fmt.Sprintf("%d,%d", beginning, beginning+length-1) -} - -type ContextDiff UnifiedDiff - -// Compare two sequences of lines; generate the delta as a context diff. -// -// Context diffs are a compact way of showing line changes and a few -// lines of context. The number of context lines is set by diff.Context -// which defaults to three. -// -// By default, the diff control lines (those with *** or ---) are -// created with a trailing newline. -// -// For inputs that do not have trailing newlines, set the diff.Eol -// argument to "" so that the output will be uniformly newline free. -// -// The context diff format normally has a header for filenames and -// modification times. Any or all of these may be specified using -// strings for diff.FromFile, diff.ToFile, diff.FromDate, diff.ToDate. -// The modification times are normally expressed in the ISO 8601 format. -// If not specified, the strings default to blanks. -func WriteContextDiff(writer io.Writer, diff ContextDiff) error { - buf := bufio.NewWriter(writer) - defer buf.Flush() - var diffErr error - wf := func(format string, args ...interface{}) { - _, err := buf.WriteString(fmt.Sprintf(format, args...)) - if diffErr == nil && err != nil { - diffErr = err - } - } - ws := func(s string) { - _, err := buf.WriteString(s) - if diffErr == nil && err != nil { - diffErr = err - } - } - - if len(diff.Eol) == 0 { - diff.Eol = "\n" - } - - prefix := map[byte]string{ - 'i': "+ ", - 'd': "- ", - 'r': "! ", - 'e': " ", - } - - started := false - m := NewMatcher(diff.A, diff.B) - for _, g := range m.GetGroupedOpCodes(diff.Context) { - if !started { - started = true - fromDate := "" - if len(diff.FromDate) > 0 { - fromDate = "\t" + diff.FromDate - } - toDate := "" - if len(diff.ToDate) > 0 { - toDate = "\t" + diff.ToDate - } - if diff.FromFile != "" || diff.ToFile != "" { - wf("*** %s%s%s", diff.FromFile, fromDate, diff.Eol) - wf("--- %s%s%s", diff.ToFile, toDate, diff.Eol) - } - } - - first, last := g[0], g[len(g)-1] - ws("***************" + diff.Eol) - - range1 := formatRangeContext(first.I1, last.I2) - wf("*** %s ****%s", range1, diff.Eol) - for _, c := range g { - if c.Tag == 'r' || c.Tag == 'd' { - for _, cc := range g { - if cc.Tag == 'i' { - continue - } - for _, line := range diff.A[cc.I1:cc.I2] { - ws(prefix[cc.Tag] + line) - } - } - break - } - } - - range2 := formatRangeContext(first.J1, last.J2) - wf("--- %s ----%s", range2, diff.Eol) - for _, c := range g { - if c.Tag == 'r' || c.Tag == 'i' { - for _, cc := range g { - if cc.Tag == 'd' { - continue - } - for _, line := range diff.B[cc.J1:cc.J2] { - ws(prefix[cc.Tag] + line) - } - } - break - } - } - } - return diffErr -} - -// Like WriteContextDiff but returns the diff a string. -func GetContextDiffString(diff ContextDiff) (string, error) { - w := &bytes.Buffer{} - err := WriteContextDiff(w, diff) - return string(w.Bytes()), err -} - -// Split a string on "\n" while preserving them. The output can be used -// as input for UnifiedDiff and ContextDiff structures. -func SplitLines(s string) []string { - lines := strings.SplitAfter(s, "\n") - lines[len(lines)-1] += "\n" - return lines -} diff --git a/vendor/github.com/stretchr/testify/LICENCE.txt b/vendor/github.com/stretchr/testify/LICENCE.txt deleted file mode 100644 index 473b670..0000000 --- a/vendor/github.com/stretchr/testify/LICENCE.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 - 2013 Mat Ryer and Tyler Bunnell - -Please consider promoting this project if you find it useful. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/stretchr/testify/LICENSE b/vendor/github.com/stretchr/testify/LICENSE deleted file mode 100644 index 473b670..0000000 --- a/vendor/github.com/stretchr/testify/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2012 - 2013 Mat Ryer and Tyler Bunnell - -Please consider promoting this project if you find it useful. - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, -DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT -OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE -OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go deleted file mode 100644 index e6a7960..0000000 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go +++ /dev/null @@ -1,387 +0,0 @@ -/* -* CODE GENERATED AUTOMATICALLY WITH github.com/stretchr/testify/_codegen -* THIS FILE MUST NOT BE EDITED BY HAND -*/ - -package assert - -import ( - - http "net/http" - url "net/url" - time "time" -) - - -// Condition uses a Comparison to assert a complex condition. -func (a *Assertions) Condition(comp Comparison, msgAndArgs ...interface{}) bool { - return Condition(a.t, comp, msgAndArgs...) -} - - -// Contains asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// a.Contains("Hello World", "World", "But 'Hello World' does contain 'World'") -// a.Contains(["Hello", "World"], "World", "But ["Hello", "World"] does contain 'World'") -// a.Contains({"Hello": "World"}, "Hello", "But {'Hello': 'World'} does contain 'Hello'") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) Contains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool { - return Contains(a.t, s, contains, msgAndArgs...) -} - - -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// a.Empty(obj) -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { - return Empty(a.t, object, msgAndArgs...) -} - - -// Equal asserts that two objects are equal. -// -// a.Equal(123, 123, "123 and 123 should be equal") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) Equal(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - return Equal(a.t, expected, actual, msgAndArgs...) -} - - -// EqualError asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// if assert.Error(t, err, "An error was expected") { -// assert.Equal(t, err, expectedError) -// } -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) EqualError(theError error, errString string, msgAndArgs ...interface{}) bool { - return EqualError(a.t, theError, errString, msgAndArgs...) -} - - -// EqualValues asserts that two objects are equal or convertable to the same types -// and equal. -// -// a.EqualValues(uint32(123), int32(123), "123 and 123 should be equal") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - return EqualValues(a.t, expected, actual, msgAndArgs...) -} - - -// Error asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if a.Error(err, "An error was expected") { -// assert.Equal(t, err, expectedError) -// } -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool { - return Error(a.t, err, msgAndArgs...) -} - - -// Exactly asserts that two objects are equal is value and type. -// -// a.Exactly(int32(123), int64(123), "123 and 123 should NOT be equal") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) Exactly(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - return Exactly(a.t, expected, actual, msgAndArgs...) -} - - -// Fail reports a failure through -func (a *Assertions) Fail(failureMessage string, msgAndArgs ...interface{}) bool { - return Fail(a.t, failureMessage, msgAndArgs...) -} - - -// FailNow fails test -func (a *Assertions) FailNow(failureMessage string, msgAndArgs ...interface{}) bool { - return FailNow(a.t, failureMessage, msgAndArgs...) -} - - -// False asserts that the specified value is false. -// -// a.False(myBool, "myBool should be false") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) False(value bool, msgAndArgs ...interface{}) bool { - return False(a.t, value, msgAndArgs...) -} - - -// HTTPBodyContains asserts that a specified handler returns a -// body that contains a string. -// -// a.HTTPBodyContains(myHandler, "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}) bool { - return HTTPBodyContains(a.t, handler, method, url, values, str) -} - - -// HTTPBodyNotContains asserts that a specified handler returns a -// body that does not contain a string. -// -// a.HTTPBodyNotContains(myHandler, "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPBodyNotContains(handler http.HandlerFunc, method string, url string, values url.Values, str interface{}) bool { - return HTTPBodyNotContains(a.t, handler, method, url, values, str) -} - - -// HTTPError asserts that a specified handler returns an error status code. -// -// a.HTTPError(myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPError(handler http.HandlerFunc, method string, url string, values url.Values) bool { - return HTTPError(a.t, handler, method, url, values) -} - - -// HTTPRedirect asserts that a specified handler returns a redirect status code. -// -// a.HTTPRedirect(myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPRedirect(handler http.HandlerFunc, method string, url string, values url.Values) bool { - return HTTPRedirect(a.t, handler, method, url, values) -} - - -// HTTPSuccess asserts that a specified handler returns a success status code. -// -// a.HTTPSuccess(myHandler, "POST", "http://www.google.com", nil) -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) HTTPSuccess(handler http.HandlerFunc, method string, url string, values url.Values) bool { - return HTTPSuccess(a.t, handler, method, url, values) -} - - -// Implements asserts that an object is implemented by the specified interface. -// -// a.Implements((*MyInterface)(nil), new(MyObject), "MyObject") -func (a *Assertions) Implements(interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool { - return Implements(a.t, interfaceObject, object, msgAndArgs...) -} - - -// InDelta asserts that the two numerals are within delta of each other. -// -// a.InDelta(math.Pi, (22 / 7.0), 0.01) -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) InDelta(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - return InDelta(a.t, expected, actual, delta, msgAndArgs...) -} - - -// InDeltaSlice is the same as InDelta, except it compares two slices. -func (a *Assertions) InDeltaSlice(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - return InDeltaSlice(a.t, expected, actual, delta, msgAndArgs...) -} - - -// InEpsilon asserts that expected and actual have a relative error less than epsilon -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) InEpsilon(expected interface{}, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool { - return InEpsilon(a.t, expected, actual, epsilon, msgAndArgs...) -} - - -// InEpsilonSlice is the same as InEpsilon, except it compares two slices. -func (a *Assertions) InEpsilonSlice(expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - return InEpsilonSlice(a.t, expected, actual, delta, msgAndArgs...) -} - - -// IsType asserts that the specified objects are of the same type. -func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool { - return IsType(a.t, expectedType, object, msgAndArgs...) -} - - -// JSONEq asserts that two JSON strings are equivalent. -// -// a.JSONEq(`{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) JSONEq(expected string, actual string, msgAndArgs ...interface{}) bool { - return JSONEq(a.t, expected, actual, msgAndArgs...) -} - - -// Len asserts that the specified object has specific length. -// Len also fails if the object has a type that len() not accept. -// -// a.Len(mySlice, 3, "The size of slice is not 3") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) Len(object interface{}, length int, msgAndArgs ...interface{}) bool { - return Len(a.t, object, length, msgAndArgs...) -} - - -// Nil asserts that the specified object is nil. -// -// a.Nil(err, "err should be nothing") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) Nil(object interface{}, msgAndArgs ...interface{}) bool { - return Nil(a.t, object, msgAndArgs...) -} - - -// NoError asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if a.NoError(err) { -// assert.Equal(t, actualObj, expectedObj) -// } -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) NoError(err error, msgAndArgs ...interface{}) bool { - return NoError(a.t, err, msgAndArgs...) -} - - -// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// a.NotContains("Hello World", "Earth", "But 'Hello World' does NOT contain 'Earth'") -// a.NotContains(["Hello", "World"], "Earth", "But ['Hello', 'World'] does NOT contain 'Earth'") -// a.NotContains({"Hello": "World"}, "Earth", "But {'Hello': 'World'} does NOT contain 'Earth'") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) NotContains(s interface{}, contains interface{}, msgAndArgs ...interface{}) bool { - return NotContains(a.t, s, contains, msgAndArgs...) -} - - -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if a.NotEmpty(obj) { -// assert.Equal(t, "two", obj[1]) -// } -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) bool { - return NotEmpty(a.t, object, msgAndArgs...) -} - - -// NotEqual asserts that the specified values are NOT equal. -// -// a.NotEqual(obj1, obj2, "two objects shouldn't be equal") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) NotEqual(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { - return NotEqual(a.t, expected, actual, msgAndArgs...) -} - - -// NotNil asserts that the specified object is not nil. -// -// a.NotNil(err, "err should be something") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) NotNil(object interface{}, msgAndArgs ...interface{}) bool { - return NotNil(a.t, object, msgAndArgs...) -} - - -// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// a.NotPanics(func(){ -// RemainCalm() -// }, "Calling RemainCalm() should NOT panic") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) NotPanics(f PanicTestFunc, msgAndArgs ...interface{}) bool { - return NotPanics(a.t, f, msgAndArgs...) -} - - -// NotRegexp asserts that a specified regexp does not match a string. -// -// a.NotRegexp(regexp.MustCompile("starts"), "it's starting") -// a.NotRegexp("^start", "it's not starting") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) NotRegexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { - return NotRegexp(a.t, rx, str, msgAndArgs...) -} - - -// NotZero asserts that i is not the zero value for its type and returns the truth. -func (a *Assertions) NotZero(i interface{}, msgAndArgs ...interface{}) bool { - return NotZero(a.t, i, msgAndArgs...) -} - - -// Panics asserts that the code inside the specified PanicTestFunc panics. -// -// a.Panics(func(){ -// GoCrazy() -// }, "Calling GoCrazy() should panic") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) Panics(f PanicTestFunc, msgAndArgs ...interface{}) bool { - return Panics(a.t, f, msgAndArgs...) -} - - -// Regexp asserts that a specified regexp matches a string. -// -// a.Regexp(regexp.MustCompile("start"), "it's starting") -// a.Regexp("start...$", "it's not starting") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) Regexp(rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { - return Regexp(a.t, rx, str, msgAndArgs...) -} - - -// True asserts that the specified value is true. -// -// a.True(myBool, "myBool should be true") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) True(value bool, msgAndArgs ...interface{}) bool { - return True(a.t, value, msgAndArgs...) -} - - -// WithinDuration asserts that the two times are within duration delta of each other. -// -// a.WithinDuration(time.Now(), time.Now(), 10*time.Second, "The difference should not be more than 10s") -// -// Returns whether the assertion was successful (true) or not (false). -func (a *Assertions) WithinDuration(expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool { - return WithinDuration(a.t, expected, actual, delta, msgAndArgs...) -} - - -// Zero asserts that i is the zero value for its type and returns the truth. -func (a *Assertions) Zero(i interface{}, msgAndArgs ...interface{}) bool { - return Zero(a.t, i, msgAndArgs...) -} diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl b/vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl deleted file mode 100644 index 99f9acf..0000000 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go.tmpl +++ /dev/null @@ -1,4 +0,0 @@ -{{.CommentWithoutT "a"}} -func (a *Assertions) {{.DocInfo.Name}}({{.Params}}) bool { - return {{.DocInfo.Name}}(a.t, {{.ForwardedParams}}) -} diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go deleted file mode 100644 index d7c16c5..0000000 --- a/vendor/github.com/stretchr/testify/assert/assertions.go +++ /dev/null @@ -1,1004 +0,0 @@ -package assert - -import ( - "bufio" - "bytes" - "encoding/json" - "fmt" - "math" - "reflect" - "regexp" - "runtime" - "strings" - "time" - "unicode" - "unicode/utf8" - - "github.com/davecgh/go-spew/spew" - "github.com/pmezard/go-difflib/difflib" -) - -// TestingT is an interface wrapper around *testing.T -type TestingT interface { - Errorf(format string, args ...interface{}) -} - -// Comparison a custom function that returns true on success and false on failure -type Comparison func() (success bool) - -/* - Helper functions -*/ - -// ObjectsAreEqual determines if two objects are considered equal. -// -// This function does no assertion of any kind. -func ObjectsAreEqual(expected, actual interface{}) bool { - - if expected == nil || actual == nil { - return expected == actual - } - - return reflect.DeepEqual(expected, actual) - -} - -// ObjectsAreEqualValues gets whether two objects are equal, or if their -// values are equal. -func ObjectsAreEqualValues(expected, actual interface{}) bool { - if ObjectsAreEqual(expected, actual) { - return true - } - - actualType := reflect.TypeOf(actual) - if actualType == nil { - return false - } - expectedValue := reflect.ValueOf(expected) - if expectedValue.IsValid() && expectedValue.Type().ConvertibleTo(actualType) { - // Attempt comparison after type conversion - return reflect.DeepEqual(expectedValue.Convert(actualType).Interface(), actual) - } - - return false -} - -/* CallerInfo is necessary because the assert functions use the testing object -internally, causing it to print the file:line of the assert method, rather than where -the problem actually occured in calling code.*/ - -// CallerInfo returns an array of strings containing the file and line number -// of each stack frame leading from the current test to the assert call that -// failed. -func CallerInfo() []string { - - pc := uintptr(0) - file := "" - line := 0 - ok := false - name := "" - - callers := []string{} - for i := 0; ; i++ { - pc, file, line, ok = runtime.Caller(i) - if !ok { - return nil - } - - // This is a huge edge case, but it will panic if this is the case, see #180 - if file == "" { - break - } - - parts := strings.Split(file, "/") - dir := parts[len(parts)-2] - file = parts[len(parts)-1] - if (dir != "assert" && dir != "mock" && dir != "require") || file == "mock_test.go" { - callers = append(callers, fmt.Sprintf("%s:%d", file, line)) - } - - f := runtime.FuncForPC(pc) - if f == nil { - break - } - name = f.Name() - // Drop the package - segments := strings.Split(name, ".") - name = segments[len(segments)-1] - if isTest(name, "Test") || - isTest(name, "Benchmark") || - isTest(name, "Example") { - break - } - } - - return callers -} - -// Stolen from the `go test` tool. -// isTest tells whether name looks like a test (or benchmark, according to prefix). -// It is a Test (say) if there is a character after Test that is not a lower-case letter. -// We don't want TesticularCancer. -func isTest(name, prefix string) bool { - if !strings.HasPrefix(name, prefix) { - return false - } - if len(name) == len(prefix) { // "Test" is ok - return true - } - rune, _ := utf8.DecodeRuneInString(name[len(prefix):]) - return !unicode.IsLower(rune) -} - -// getWhitespaceString returns a string that is long enough to overwrite the default -// output from the go testing framework. -func getWhitespaceString() string { - - _, file, line, ok := runtime.Caller(1) - if !ok { - return "" - } - parts := strings.Split(file, "/") - file = parts[len(parts)-1] - - return strings.Repeat(" ", len(fmt.Sprintf("%s:%d: ", file, line))) - -} - -func messageFromMsgAndArgs(msgAndArgs ...interface{}) string { - if len(msgAndArgs) == 0 || msgAndArgs == nil { - return "" - } - if len(msgAndArgs) == 1 { - return msgAndArgs[0].(string) - } - if len(msgAndArgs) > 1 { - return fmt.Sprintf(msgAndArgs[0].(string), msgAndArgs[1:]...) - } - return "" -} - -// Indents all lines of the message by appending a number of tabs to each line, in an output format compatible with Go's -// test printing (see inner comment for specifics) -func indentMessageLines(message string, tabs int) string { - outBuf := new(bytes.Buffer) - - for i, scanner := 0, bufio.NewScanner(strings.NewReader(message)); scanner.Scan(); i++ { - if i != 0 { - outBuf.WriteRune('\n') - } - for ii := 0; ii < tabs; ii++ { - outBuf.WriteRune('\t') - // Bizarrely, all lines except the first need one fewer tabs prepended, so deliberately advance the counter - // by 1 prematurely. - if ii == 0 && i > 0 { - ii++ - } - } - outBuf.WriteString(scanner.Text()) - } - - return outBuf.String() -} - -type failNower interface { - FailNow() -} - -// FailNow fails test -func FailNow(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool { - Fail(t, failureMessage, msgAndArgs...) - - // We cannot extend TestingT with FailNow() and - // maintain backwards compatibility, so we fallback - // to panicking when FailNow is not available in - // TestingT. - // See issue #263 - - if t, ok := t.(failNower); ok { - t.FailNow() - } else { - panic("test failed and t is missing `FailNow()`") - } - return false -} - -// Fail reports a failure through -func Fail(t TestingT, failureMessage string, msgAndArgs ...interface{}) bool { - - message := messageFromMsgAndArgs(msgAndArgs...) - - errorTrace := strings.Join(CallerInfo(), "\n\r\t\t\t") - if len(message) > 0 { - t.Errorf("\r%s\r\tError Trace:\t%s\n"+ - "\r\tError:%s\n"+ - "\r\tMessages:\t%s\n\r", - getWhitespaceString(), - errorTrace, - indentMessageLines(failureMessage, 2), - message) - } else { - t.Errorf("\r%s\r\tError Trace:\t%s\n"+ - "\r\tError:%s\n\r", - getWhitespaceString(), - errorTrace, - indentMessageLines(failureMessage, 2)) - } - - return false -} - -// Implements asserts that an object is implemented by the specified interface. -// -// assert.Implements(t, (*MyInterface)(nil), new(MyObject), "MyObject") -func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) bool { - - interfaceType := reflect.TypeOf(interfaceObject).Elem() - - if !reflect.TypeOf(object).Implements(interfaceType) { - return Fail(t, fmt.Sprintf("%T must implement %v", object, interfaceType), msgAndArgs...) - } - - return true - -} - -// IsType asserts that the specified objects are of the same type. -func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool { - - if !ObjectsAreEqual(reflect.TypeOf(object), reflect.TypeOf(expectedType)) { - return Fail(t, fmt.Sprintf("Object expected to be of type %v, but was %v", reflect.TypeOf(expectedType), reflect.TypeOf(object)), msgAndArgs...) - } - - return true -} - -// Equal asserts that two objects are equal. -// -// assert.Equal(t, 123, 123, "123 and 123 should be equal") -// -// Returns whether the assertion was successful (true) or not (false). -func Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - - if !ObjectsAreEqual(expected, actual) { - diff := diff(expected, actual) - return Fail(t, fmt.Sprintf("Not equal: %#v (expected)\n"+ - " != %#v (actual)%s", expected, actual, diff), msgAndArgs...) - } - - return true - -} - -// EqualValues asserts that two objects are equal or convertable to the same types -// and equal. -// -// assert.EqualValues(t, uint32(123), int32(123), "123 and 123 should be equal") -// -// Returns whether the assertion was successful (true) or not (false). -func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - - if !ObjectsAreEqualValues(expected, actual) { - return Fail(t, fmt.Sprintf("Not equal: %#v (expected)\n"+ - " != %#v (actual)", expected, actual), msgAndArgs...) - } - - return true - -} - -// Exactly asserts that two objects are equal is value and type. -// -// assert.Exactly(t, int32(123), int64(123), "123 and 123 should NOT be equal") -// -// Returns whether the assertion was successful (true) or not (false). -func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - - aType := reflect.TypeOf(expected) - bType := reflect.TypeOf(actual) - - if aType != bType { - return Fail(t, fmt.Sprintf("Types expected to match exactly\n\r\t%v != %v", aType, bType), msgAndArgs...) - } - - return Equal(t, expected, actual, msgAndArgs...) - -} - -// NotNil asserts that the specified object is not nil. -// -// assert.NotNil(t, err, "err should be something") -// -// Returns whether the assertion was successful (true) or not (false). -func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - if !isNil(object) { - return true - } - return Fail(t, "Expected value not to be nil.", msgAndArgs...) -} - -// isNil checks if a specified object is nil or not, without Failing. -func isNil(object interface{}) bool { - if object == nil { - return true - } - - value := reflect.ValueOf(object) - kind := value.Kind() - if kind >= reflect.Chan && kind <= reflect.Slice && value.IsNil() { - return true - } - - return false -} - -// Nil asserts that the specified object is nil. -// -// assert.Nil(t, err, "err should be nothing") -// -// Returns whether the assertion was successful (true) or not (false). -func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - if isNil(object) { - return true - } - return Fail(t, fmt.Sprintf("Expected nil, but got: %#v", object), msgAndArgs...) -} - -var numericZeros = []interface{}{ - int(0), - int8(0), - int16(0), - int32(0), - int64(0), - uint(0), - uint8(0), - uint16(0), - uint32(0), - uint64(0), - float32(0), - float64(0), -} - -// isEmpty gets whether the specified object is considered empty or not. -func isEmpty(object interface{}) bool { - - if object == nil { - return true - } else if object == "" { - return true - } else if object == false { - return true - } - - for _, v := range numericZeros { - if object == v { - return true - } - } - - objValue := reflect.ValueOf(object) - - switch objValue.Kind() { - case reflect.Map: - fallthrough - case reflect.Slice, reflect.Chan: - { - return (objValue.Len() == 0) - } - case reflect.Struct: - switch object.(type) { - case time.Time: - return object.(time.Time).IsZero() - } - case reflect.Ptr: - { - if objValue.IsNil() { - return true - } - switch object.(type) { - case *time.Time: - return object.(*time.Time).IsZero() - default: - return false - } - } - } - return false -} - -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// assert.Empty(t, obj) -// -// Returns whether the assertion was successful (true) or not (false). -func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - - pass := isEmpty(object) - if !pass { - Fail(t, fmt.Sprintf("Should be empty, but was %v", object), msgAndArgs...) - } - - return pass - -} - -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. -// -// if assert.NotEmpty(t, obj) { -// assert.Equal(t, "two", obj[1]) -// } -// -// Returns whether the assertion was successful (true) or not (false). -func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - - pass := !isEmpty(object) - if !pass { - Fail(t, fmt.Sprintf("Should NOT be empty, but was %v", object), msgAndArgs...) - } - - return pass - -} - -// getLen try to get length of object. -// return (false, 0) if impossible. -func getLen(x interface{}) (ok bool, length int) { - v := reflect.ValueOf(x) - defer func() { - if e := recover(); e != nil { - ok = false - } - }() - return true, v.Len() -} - -// Len asserts that the specified object has specific length. -// Len also fails if the object has a type that len() not accept. -// -// assert.Len(t, mySlice, 3, "The size of slice is not 3") -// -// Returns whether the assertion was successful (true) or not (false). -func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) bool { - ok, l := getLen(object) - if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", object), msgAndArgs...) - } - - if l != length { - return Fail(t, fmt.Sprintf("\"%s\" should have %d item(s), but has %d", object, length, l), msgAndArgs...) - } - return true -} - -// True asserts that the specified value is true. -// -// assert.True(t, myBool, "myBool should be true") -// -// Returns whether the assertion was successful (true) or not (false). -func True(t TestingT, value bool, msgAndArgs ...interface{}) bool { - - if value != true { - return Fail(t, "Should be true", msgAndArgs...) - } - - return true - -} - -// False asserts that the specified value is false. -// -// assert.False(t, myBool, "myBool should be false") -// -// Returns whether the assertion was successful (true) or not (false). -func False(t TestingT, value bool, msgAndArgs ...interface{}) bool { - - if value != false { - return Fail(t, "Should be false", msgAndArgs...) - } - - return true - -} - -// NotEqual asserts that the specified values are NOT equal. -// -// assert.NotEqual(t, obj1, obj2, "two objects shouldn't be equal") -// -// Returns whether the assertion was successful (true) or not (false). -func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { - - if ObjectsAreEqual(expected, actual) { - return Fail(t, fmt.Sprintf("Should not be: %#v\n", actual), msgAndArgs...) - } - - return true - -} - -// containsElement try loop over the list check if the list includes the element. -// return (false, false) if impossible. -// return (true, false) if element was not found. -// return (true, true) if element was found. -func includeElement(list interface{}, element interface{}) (ok, found bool) { - - listValue := reflect.ValueOf(list) - elementValue := reflect.ValueOf(element) - defer func() { - if e := recover(); e != nil { - ok = false - found = false - } - }() - - if reflect.TypeOf(list).Kind() == reflect.String { - return true, strings.Contains(listValue.String(), elementValue.String()) - } - - if reflect.TypeOf(list).Kind() == reflect.Map { - mapKeys := listValue.MapKeys() - for i := 0; i < len(mapKeys); i++ { - if ObjectsAreEqual(mapKeys[i].Interface(), element) { - return true, true - } - } - return true, false - } - - for i := 0; i < listValue.Len(); i++ { - if ObjectsAreEqual(listValue.Index(i).Interface(), element) { - return true, true - } - } - return true, false - -} - -// Contains asserts that the specified string, list(array, slice...) or map contains the -// specified substring or element. -// -// assert.Contains(t, "Hello World", "World", "But 'Hello World' does contain 'World'") -// assert.Contains(t, ["Hello", "World"], "World", "But ["Hello", "World"] does contain 'World'") -// assert.Contains(t, {"Hello": "World"}, "Hello", "But {'Hello': 'World'} does contain 'Hello'") -// -// Returns whether the assertion was successful (true) or not (false). -func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool { - - ok, found := includeElement(s, contains) - if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", s), msgAndArgs...) - } - if !found { - return Fail(t, fmt.Sprintf("\"%s\" does not contain \"%s\"", s, contains), msgAndArgs...) - } - - return true - -} - -// NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the -// specified substring or element. -// -// assert.NotContains(t, "Hello World", "Earth", "But 'Hello World' does NOT contain 'Earth'") -// assert.NotContains(t, ["Hello", "World"], "Earth", "But ['Hello', 'World'] does NOT contain 'Earth'") -// assert.NotContains(t, {"Hello": "World"}, "Earth", "But {'Hello': 'World'} does NOT contain 'Earth'") -// -// Returns whether the assertion was successful (true) or not (false). -func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bool { - - ok, found := includeElement(s, contains) - if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", s), msgAndArgs...) - } - if found { - return Fail(t, fmt.Sprintf("\"%s\" should not contain \"%s\"", s, contains), msgAndArgs...) - } - - return true - -} - -// Condition uses a Comparison to assert a complex condition. -func Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool { - result := comp() - if !result { - Fail(t, "Condition failed!", msgAndArgs...) - } - return result -} - -// PanicTestFunc defines a func that should be passed to the assert.Panics and assert.NotPanics -// methods, and represents a simple func that takes no arguments, and returns nothing. -type PanicTestFunc func() - -// didPanic returns true if the function passed to it panics. Otherwise, it returns false. -func didPanic(f PanicTestFunc) (bool, interface{}) { - - didPanic := false - var message interface{} - func() { - - defer func() { - if message = recover(); message != nil { - didPanic = true - } - }() - - // call the target function - f() - - }() - - return didPanic, message - -} - -// Panics asserts that the code inside the specified PanicTestFunc panics. -// -// assert.Panics(t, func(){ -// GoCrazy() -// }, "Calling GoCrazy() should panic") -// -// Returns whether the assertion was successful (true) or not (false). -func Panics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool { - - if funcDidPanic, panicValue := didPanic(f); !funcDidPanic { - return Fail(t, fmt.Sprintf("func %#v should panic\n\r\tPanic value:\t%v", f, panicValue), msgAndArgs...) - } - - return true -} - -// NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. -// -// assert.NotPanics(t, func(){ -// RemainCalm() -// }, "Calling RemainCalm() should NOT panic") -// -// Returns whether the assertion was successful (true) or not (false). -func NotPanics(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool { - - if funcDidPanic, panicValue := didPanic(f); funcDidPanic { - return Fail(t, fmt.Sprintf("func %#v should not panic\n\r\tPanic value:\t%v", f, panicValue), msgAndArgs...) - } - - return true -} - -// WithinDuration asserts that the two times are within duration delta of each other. -// -// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second, "The difference should not be more than 10s") -// -// Returns whether the assertion was successful (true) or not (false). -func WithinDuration(t TestingT, expected, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) bool { - - dt := expected.Sub(actual) - if dt < -delta || dt > delta { - return Fail(t, fmt.Sprintf("Max difference between %v and %v allowed is %v, but difference was %v", expected, actual, delta, dt), msgAndArgs...) - } - - return true -} - -func toFloat(x interface{}) (float64, bool) { - var xf float64 - xok := true - - switch xn := x.(type) { - case uint8: - xf = float64(xn) - case uint16: - xf = float64(xn) - case uint32: - xf = float64(xn) - case uint64: - xf = float64(xn) - case int: - xf = float64(xn) - case int8: - xf = float64(xn) - case int16: - xf = float64(xn) - case int32: - xf = float64(xn) - case int64: - xf = float64(xn) - case float32: - xf = float64(xn) - case float64: - xf = float64(xn) - default: - xok = false - } - - return xf, xok -} - -// InDelta asserts that the two numerals are within delta of each other. -// -// assert.InDelta(t, math.Pi, (22 / 7.0), 0.01) -// -// Returns whether the assertion was successful (true) or not (false). -func InDelta(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - - af, aok := toFloat(expected) - bf, bok := toFloat(actual) - - if !aok || !bok { - return Fail(t, fmt.Sprintf("Parameters must be numerical"), msgAndArgs...) - } - - if math.IsNaN(af) { - return Fail(t, fmt.Sprintf("Actual must not be NaN"), msgAndArgs...) - } - - if math.IsNaN(bf) { - return Fail(t, fmt.Sprintf("Expected %v with delta %v, but was NaN", expected, delta), msgAndArgs...) - } - - dt := af - bf - if dt < -delta || dt > delta { - return Fail(t, fmt.Sprintf("Max difference between %v and %v allowed is %v, but difference was %v", expected, actual, delta, dt), msgAndArgs...) - } - - return true -} - -// InDeltaSlice is the same as InDelta, except it compares two slices. -func InDeltaSlice(t TestingT, expected, actual interface{}, delta float64, msgAndArgs ...interface{}) bool { - if expected == nil || actual == nil || - reflect.TypeOf(actual).Kind() != reflect.Slice || - reflect.TypeOf(expected).Kind() != reflect.Slice { - return Fail(t, fmt.Sprintf("Parameters must be slice"), msgAndArgs...) - } - - actualSlice := reflect.ValueOf(actual) - expectedSlice := reflect.ValueOf(expected) - - for i := 0; i < actualSlice.Len(); i++ { - result := InDelta(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), delta) - if !result { - return result - } - } - - return true -} - -func calcRelativeError(expected, actual interface{}) (float64, error) { - af, aok := toFloat(expected) - if !aok { - return 0, fmt.Errorf("expected value %q cannot be converted to float", expected) - } - if af == 0 { - return 0, fmt.Errorf("expected value must have a value other than zero to calculate the relative error") - } - bf, bok := toFloat(actual) - if !bok { - return 0, fmt.Errorf("expected value %q cannot be converted to float", actual) - } - - return math.Abs(af-bf) / math.Abs(af), nil -} - -// InEpsilon asserts that expected and actual have a relative error less than epsilon -// -// Returns whether the assertion was successful (true) or not (false). -func InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool { - actualEpsilon, err := calcRelativeError(expected, actual) - if err != nil { - return Fail(t, err.Error(), msgAndArgs...) - } - if actualEpsilon > epsilon { - return Fail(t, fmt.Sprintf("Relative error is too high: %#v (expected)\n"+ - " < %#v (actual)", actualEpsilon, epsilon), msgAndArgs...) - } - - return true -} - -// InEpsilonSlice is the same as InEpsilon, except it compares each value from two slices. -func InEpsilonSlice(t TestingT, expected, actual interface{}, epsilon float64, msgAndArgs ...interface{}) bool { - if expected == nil || actual == nil || - reflect.TypeOf(actual).Kind() != reflect.Slice || - reflect.TypeOf(expected).Kind() != reflect.Slice { - return Fail(t, fmt.Sprintf("Parameters must be slice"), msgAndArgs...) - } - - actualSlice := reflect.ValueOf(actual) - expectedSlice := reflect.ValueOf(expected) - - for i := 0; i < actualSlice.Len(); i++ { - result := InEpsilon(t, actualSlice.Index(i).Interface(), expectedSlice.Index(i).Interface(), epsilon) - if !result { - return result - } - } - - return true -} - -/* - Errors -*/ - -// NoError asserts that a function returned no error (i.e. `nil`). -// -// actualObj, err := SomeFunction() -// if assert.NoError(t, err) { -// assert.Equal(t, actualObj, expectedObj) -// } -// -// Returns whether the assertion was successful (true) or not (false). -func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool { - if isNil(err) { - return true - } - - return Fail(t, fmt.Sprintf("Received unexpected error %q", err), msgAndArgs...) -} - -// Error asserts that a function returned an error (i.e. not `nil`). -// -// actualObj, err := SomeFunction() -// if assert.Error(t, err, "An error was expected") { -// assert.Equal(t, err, expectedError) -// } -// -// Returns whether the assertion was successful (true) or not (false). -func Error(t TestingT, err error, msgAndArgs ...interface{}) bool { - - message := messageFromMsgAndArgs(msgAndArgs...) - return NotNil(t, err, "An error is expected but got nil. %s", message) - -} - -// EqualError asserts that a function returned an error (i.e. not `nil`) -// and that it is equal to the provided error. -// -// actualObj, err := SomeFunction() -// if assert.Error(t, err, "An error was expected") { -// assert.Equal(t, err, expectedError) -// } -// -// Returns whether the assertion was successful (true) or not (false). -func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) bool { - - message := messageFromMsgAndArgs(msgAndArgs...) - if !NotNil(t, theError, "An error is expected but got nil. %s", message) { - return false - } - s := "An error with value \"%s\" is expected but got \"%s\". %s" - return Equal(t, errString, theError.Error(), - s, errString, theError.Error(), message) -} - -// matchRegexp return true if a specified regexp matches a string. -func matchRegexp(rx interface{}, str interface{}) bool { - - var r *regexp.Regexp - if rr, ok := rx.(*regexp.Regexp); ok { - r = rr - } else { - r = regexp.MustCompile(fmt.Sprint(rx)) - } - - return (r.FindStringIndex(fmt.Sprint(str)) != nil) - -} - -// Regexp asserts that a specified regexp matches a string. -// -// assert.Regexp(t, regexp.MustCompile("start"), "it's starting") -// assert.Regexp(t, "start...$", "it's not starting") -// -// Returns whether the assertion was successful (true) or not (false). -func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { - - match := matchRegexp(rx, str) - - if !match { - Fail(t, fmt.Sprintf("Expect \"%v\" to match \"%v\"", str, rx), msgAndArgs...) - } - - return match -} - -// NotRegexp asserts that a specified regexp does not match a string. -// -// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") -// assert.NotRegexp(t, "^start", "it's not starting") -// -// Returns whether the assertion was successful (true) or not (false). -func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) bool { - match := matchRegexp(rx, str) - - if match { - Fail(t, fmt.Sprintf("Expect \"%v\" to NOT match \"%v\"", str, rx), msgAndArgs...) - } - - return !match - -} - -// Zero asserts that i is the zero value for its type and returns the truth. -func Zero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool { - if i != nil && !reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) { - return Fail(t, fmt.Sprintf("Should be zero, but was %v", i), msgAndArgs...) - } - return true -} - -// NotZero asserts that i is not the zero value for its type and returns the truth. -func NotZero(t TestingT, i interface{}, msgAndArgs ...interface{}) bool { - if i == nil || reflect.DeepEqual(i, reflect.Zero(reflect.TypeOf(i)).Interface()) { - return Fail(t, fmt.Sprintf("Should not be zero, but was %v", i), msgAndArgs...) - } - return true -} - -// JSONEq asserts that two JSON strings are equivalent. -// -// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) -// -// Returns whether the assertion was successful (true) or not (false). -func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) bool { - var expectedJSONAsInterface, actualJSONAsInterface interface{} - - if err := json.Unmarshal([]byte(expected), &expectedJSONAsInterface); err != nil { - return Fail(t, fmt.Sprintf("Expected value ('%s') is not valid json.\nJSON parsing error: '%s'", expected, err.Error()), msgAndArgs...) - } - - if err := json.Unmarshal([]byte(actual), &actualJSONAsInterface); err != nil { - return Fail(t, fmt.Sprintf("Input ('%s') needs to be valid json.\nJSON parsing error: '%s'", actual, err.Error()), msgAndArgs...) - } - - return Equal(t, expectedJSONAsInterface, actualJSONAsInterface, msgAndArgs...) -} - -func typeAndKind(v interface{}) (reflect.Type, reflect.Kind) { - t := reflect.TypeOf(v) - k := t.Kind() - - if k == reflect.Ptr { - t = t.Elem() - k = t.Kind() - } - return t, k -} - -// diff returns a diff of both values as long as both are of the same type and -// are a struct, map, slice or array. Otherwise it returns an empty string. -func diff(expected interface{}, actual interface{}) string { - if expected == nil || actual == nil { - return "" - } - - et, ek := typeAndKind(expected) - at, _ := typeAndKind(actual) - - if et != at { - return "" - } - - if ek != reflect.Struct && ek != reflect.Map && ek != reflect.Slice && ek != reflect.Array { - return "" - } - - spew.Config.SortKeys = true - e := spew.Sdump(expected) - a := spew.Sdump(actual) - - diff, _ := difflib.GetUnifiedDiffString(difflib.UnifiedDiff{ - A: difflib.SplitLines(e), - B: difflib.SplitLines(a), - FromFile: "Expected", - FromDate: "", - ToFile: "Actual", - ToDate: "", - Context: 1, - }) - - return "\n\nDiff:\n" + diff -} diff --git a/vendor/github.com/stretchr/testify/assert/doc.go b/vendor/github.com/stretchr/testify/assert/doc.go deleted file mode 100644 index c9dccc4..0000000 --- a/vendor/github.com/stretchr/testify/assert/doc.go +++ /dev/null @@ -1,45 +0,0 @@ -// Package assert provides a set of comprehensive testing tools for use with the normal Go testing system. -// -// Example Usage -// -// The following is a complete example using assert in a standard test function: -// import ( -// "testing" -// "github.com/stretchr/testify/assert" -// ) -// -// func TestSomething(t *testing.T) { -// -// var a string = "Hello" -// var b string = "Hello" -// -// assert.Equal(t, a, b, "The two words should be the same.") -// -// } -// -// if you assert many times, use the format below: -// -// import ( -// "testing" -// "github.com/stretchr/testify/assert" -// ) -// -// func TestSomething(t *testing.T) { -// assert := assert.New(t) -// -// var a string = "Hello" -// var b string = "Hello" -// -// assert.Equal(a, b, "The two words should be the same.") -// } -// -// Assertions -// -// Assertions allow you to easily write test code, and are global funcs in the `assert` package. -// All assertion functions take, as the first argument, the `*testing.T` object provided by the -// testing framework. This allows the assertion funcs to write the failings and other details to -// the correct place. -// -// Every assertion function also takes an optional string message as the final argument, -// allowing custom error messages to be appended to the message the assertion method outputs. -package assert diff --git a/vendor/github.com/stretchr/testify/assert/errors.go b/vendor/github.com/stretchr/testify/assert/errors.go deleted file mode 100644 index ac9dc9d..0000000 --- a/vendor/github.com/stretchr/testify/assert/errors.go +++ /dev/null @@ -1,10 +0,0 @@ -package assert - -import ( - "errors" -) - -// AnError is an error instance useful for testing. If the code does not care -// about error specifics, and only needs to return the error for example, this -// error should be used to make the test code more readable. -var AnError = errors.New("assert.AnError general error for testing") diff --git a/vendor/github.com/stretchr/testify/assert/forward_assertions.go b/vendor/github.com/stretchr/testify/assert/forward_assertions.go deleted file mode 100644 index b867e95..0000000 --- a/vendor/github.com/stretchr/testify/assert/forward_assertions.go +++ /dev/null @@ -1,16 +0,0 @@ -package assert - -// Assertions provides assertion methods around the -// TestingT interface. -type Assertions struct { - t TestingT -} - -// New makes a new Assertions object for the specified TestingT. -func New(t TestingT) *Assertions { - return &Assertions{ - t: t, - } -} - -//go:generate go run ../_codegen/main.go -output-package=assert -template=assertion_forward.go.tmpl diff --git a/vendor/github.com/stretchr/testify/assert/http_assertions.go b/vendor/github.com/stretchr/testify/assert/http_assertions.go deleted file mode 100644 index e1b9442..0000000 --- a/vendor/github.com/stretchr/testify/assert/http_assertions.go +++ /dev/null @@ -1,106 +0,0 @@ -package assert - -import ( - "fmt" - "net/http" - "net/http/httptest" - "net/url" - "strings" -) - -// httpCode is a helper that returns HTTP code of the response. It returns -1 -// if building a new request fails. -func httpCode(handler http.HandlerFunc, method, url string, values url.Values) int { - w := httptest.NewRecorder() - req, err := http.NewRequest(method, url+"?"+values.Encode(), nil) - if err != nil { - return -1 - } - handler(w, req) - return w.Code -} - -// HTTPSuccess asserts that a specified handler returns a success status code. -// -// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPSuccess(t TestingT, handler http.HandlerFunc, method, url string, values url.Values) bool { - code := httpCode(handler, method, url, values) - if code == -1 { - return false - } - return code >= http.StatusOK && code <= http.StatusPartialContent -} - -// HTTPRedirect asserts that a specified handler returns a redirect status code. -// -// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPRedirect(t TestingT, handler http.HandlerFunc, method, url string, values url.Values) bool { - code := httpCode(handler, method, url, values) - if code == -1 { - return false - } - return code >= http.StatusMultipleChoices && code <= http.StatusTemporaryRedirect -} - -// HTTPError asserts that a specified handler returns an error status code. -// -// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPError(t TestingT, handler http.HandlerFunc, method, url string, values url.Values) bool { - code := httpCode(handler, method, url, values) - if code == -1 { - return false - } - return code >= http.StatusBadRequest -} - -// HTTPBody is a helper that returns HTTP body of the response. It returns -// empty string if building a new request fails. -func HTTPBody(handler http.HandlerFunc, method, url string, values url.Values) string { - w := httptest.NewRecorder() - req, err := http.NewRequest(method, url+"?"+values.Encode(), nil) - if err != nil { - return "" - } - handler(w, req) - return w.Body.String() -} - -// HTTPBodyContains asserts that a specified handler returns a -// body that contains a string. -// -// assert.HTTPBodyContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}) bool { - body := HTTPBody(handler, method, url, values) - - contains := strings.Contains(body, fmt.Sprint(str)) - if !contains { - Fail(t, fmt.Sprintf("Expected response body for \"%s\" to contain \"%s\" but found \"%s\"", url+"?"+values.Encode(), str, body)) - } - - return contains -} - -// HTTPBodyNotContains asserts that a specified handler returns a -// body that does not contain a string. -// -// assert.HTTPBodyNotContains(t, myHandler, "www.google.com", nil, "I'm Feeling Lucky") -// -// Returns whether the assertion was successful (true) or not (false). -func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url string, values url.Values, str interface{}) bool { - body := HTTPBody(handler, method, url, values) - - contains := strings.Contains(body, fmt.Sprint(str)) - if contains { - Fail(t, "Expected response body for %s to NOT contain \"%s\" but found \"%s\"", url+"?"+values.Encode(), str, body) - } - - return !contains -} diff --git a/vendor/golang.org/x/tools/LICENSE b/vendor/golang.org/x/tools/LICENSE deleted file mode 100644 index 6a66aea..0000000 --- a/vendor/golang.org/x/tools/LICENSE +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of Google Inc. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/tools/PATENTS b/vendor/golang.org/x/tools/PATENTS deleted file mode 100644 index 7330990..0000000 --- a/vendor/golang.org/x/tools/PATENTS +++ /dev/null @@ -1,22 +0,0 @@ -Additional IP Rights Grant (Patents) - -"This implementation" means the copyrightable works distributed by -Google as part of the Go project. - -Google hereby grants to You a perpetual, worldwide, non-exclusive, -no-charge, royalty-free, irrevocable (except as stated in this section) -patent license to make, have made, use, offer to sell, sell, import, -transfer and otherwise run, modify and propagate the contents of this -implementation of Go, where such license applies only to those patent -claims, both currently owned or controlled by Google and acquired in -the future, licensable by Google that are necessarily infringed by this -implementation of Go. This grant does not include claims that would be -infringed only as a consequence of further modification of this -implementation. If you or your agent or exclusive licensee institute or -order or agree to the institution of patent litigation against any -entity (including a cross-claim or counterclaim in a lawsuit) alleging -that this implementation of Go or any code incorporated within this -implementation of Go constitutes direct or contributory patent -infringement, or inducement of patent infringement, then any patent -rights granted to you under this License for this implementation of Go -shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go b/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go deleted file mode 100644 index 6b7052b..0000000 --- a/vendor/golang.org/x/tools/go/ast/astutil/enclosing.go +++ /dev/null @@ -1,627 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package astutil - -// This file defines utilities for working with source positions. - -import ( - "fmt" - "go/ast" - "go/token" - "sort" -) - -// PathEnclosingInterval returns the node that encloses the source -// interval [start, end), and all its ancestors up to the AST root. -// -// The definition of "enclosing" used by this function considers -// additional whitespace abutting a node to be enclosed by it. -// In this example: -// -// z := x + y // add them -// <-A-> -// <----B-----> -// -// the ast.BinaryExpr(+) node is considered to enclose interval B -// even though its [Pos()..End()) is actually only interval A. -// This behaviour makes user interfaces more tolerant of imperfect -// input. -// -// This function treats tokens as nodes, though they are not included -// in the result. e.g. PathEnclosingInterval("+") returns the -// enclosing ast.BinaryExpr("x + y"). -// -// If start==end, the 1-char interval following start is used instead. -// -// The 'exact' result is true if the interval contains only path[0] -// and perhaps some adjacent whitespace. It is false if the interval -// overlaps multiple children of path[0], or if it contains only -// interior whitespace of path[0]. -// In this example: -// -// z := x + y // add them -// <--C--> <---E--> -// ^ -// D -// -// intervals C, D and E are inexact. C is contained by the -// z-assignment statement, because it spans three of its children (:=, -// x, +). So too is the 1-char interval D, because it contains only -// interior whitespace of the assignment. E is considered interior -// whitespace of the BlockStmt containing the assignment. -// -// Precondition: [start, end) both lie within the same file as root. -// TODO(adonovan): return (nil, false) in this case and remove precond. -// Requires FileSet; see loader.tokenFileContainsPos. -// -// Postcondition: path is never nil; it always contains at least 'root'. -// -func PathEnclosingInterval(root *ast.File, start, end token.Pos) (path []ast.Node, exact bool) { - // fmt.Printf("EnclosingInterval %d %d\n", start, end) // debugging - - // Precondition: node.[Pos..End) and adjoining whitespace contain [start, end). - var visit func(node ast.Node) bool - visit = func(node ast.Node) bool { - path = append(path, node) - - nodePos := node.Pos() - nodeEnd := node.End() - - // fmt.Printf("visit(%T, %d, %d)\n", node, nodePos, nodeEnd) // debugging - - // Intersect [start, end) with interval of node. - if start < nodePos { - start = nodePos - } - if end > nodeEnd { - end = nodeEnd - } - - // Find sole child that contains [start, end). - children := childrenOf(node) - l := len(children) - for i, child := range children { - // [childPos, childEnd) is unaugmented interval of child. - childPos := child.Pos() - childEnd := child.End() - - // [augPos, augEnd) is whitespace-augmented interval of child. - augPos := childPos - augEnd := childEnd - if i > 0 { - augPos = children[i-1].End() // start of preceding whitespace - } - if i < l-1 { - nextChildPos := children[i+1].Pos() - // Does [start, end) lie between child and next child? - if start >= augEnd && end <= nextChildPos { - return false // inexact match - } - augEnd = nextChildPos // end of following whitespace - } - - // fmt.Printf("\tchild %d: [%d..%d)\tcontains interval [%d..%d)?\n", - // i, augPos, augEnd, start, end) // debugging - - // Does augmented child strictly contain [start, end)? - if augPos <= start && end <= augEnd { - _, isToken := child.(tokenNode) - return isToken || visit(child) - } - - // Does [start, end) overlap multiple children? - // i.e. left-augmented child contains start - // but LR-augmented child does not contain end. - if start < childEnd && end > augEnd { - break - } - } - - // No single child contained [start, end), - // so node is the result. Is it exact? - - // (It's tempting to put this condition before the - // child loop, but it gives the wrong result in the - // case where a node (e.g. ExprStmt) and its sole - // child have equal intervals.) - if start == nodePos && end == nodeEnd { - return true // exact match - } - - return false // inexact: overlaps multiple children - } - - if start > end { - start, end = end, start - } - - if start < root.End() && end > root.Pos() { - if start == end { - end = start + 1 // empty interval => interval of size 1 - } - exact = visit(root) - - // Reverse the path: - for i, l := 0, len(path); i < l/2; i++ { - path[i], path[l-1-i] = path[l-1-i], path[i] - } - } else { - // Selection lies within whitespace preceding the - // first (or following the last) declaration in the file. - // The result nonetheless always includes the ast.File. - path = append(path, root) - } - - return -} - -// tokenNode is a dummy implementation of ast.Node for a single token. -// They are used transiently by PathEnclosingInterval but never escape -// this package. -// -type tokenNode struct { - pos token.Pos - end token.Pos -} - -func (n tokenNode) Pos() token.Pos { - return n.pos -} - -func (n tokenNode) End() token.Pos { - return n.end -} - -func tok(pos token.Pos, len int) ast.Node { - return tokenNode{pos, pos + token.Pos(len)} -} - -// childrenOf returns the direct non-nil children of ast.Node n. -// It may include fake ast.Node implementations for bare tokens. -// it is not safe to call (e.g.) ast.Walk on such nodes. -// -func childrenOf(n ast.Node) []ast.Node { - var children []ast.Node - - // First add nodes for all true subtrees. - ast.Inspect(n, func(node ast.Node) bool { - if node == n { // push n - return true // recur - } - if node != nil { // push child - children = append(children, node) - } - return false // no recursion - }) - - // Then add fake Nodes for bare tokens. - switch n := n.(type) { - case *ast.ArrayType: - children = append(children, - tok(n.Lbrack, len("[")), - tok(n.Elt.End(), len("]"))) - - case *ast.AssignStmt: - children = append(children, - tok(n.TokPos, len(n.Tok.String()))) - - case *ast.BasicLit: - children = append(children, - tok(n.ValuePos, len(n.Value))) - - case *ast.BinaryExpr: - children = append(children, tok(n.OpPos, len(n.Op.String()))) - - case *ast.BlockStmt: - children = append(children, - tok(n.Lbrace, len("{")), - tok(n.Rbrace, len("}"))) - - case *ast.BranchStmt: - children = append(children, - tok(n.TokPos, len(n.Tok.String()))) - - case *ast.CallExpr: - children = append(children, - tok(n.Lparen, len("(")), - tok(n.Rparen, len(")"))) - if n.Ellipsis != 0 { - children = append(children, tok(n.Ellipsis, len("..."))) - } - - case *ast.CaseClause: - if n.List == nil { - children = append(children, - tok(n.Case, len("default"))) - } else { - children = append(children, - tok(n.Case, len("case"))) - } - children = append(children, tok(n.Colon, len(":"))) - - case *ast.ChanType: - switch n.Dir { - case ast.RECV: - children = append(children, tok(n.Begin, len("<-chan"))) - case ast.SEND: - children = append(children, tok(n.Begin, len("chan<-"))) - case ast.RECV | ast.SEND: - children = append(children, tok(n.Begin, len("chan"))) - } - - case *ast.CommClause: - if n.Comm == nil { - children = append(children, - tok(n.Case, len("default"))) - } else { - children = append(children, - tok(n.Case, len("case"))) - } - children = append(children, tok(n.Colon, len(":"))) - - case *ast.Comment: - // nop - - case *ast.CommentGroup: - // nop - - case *ast.CompositeLit: - children = append(children, - tok(n.Lbrace, len("{")), - tok(n.Rbrace, len("{"))) - - case *ast.DeclStmt: - // nop - - case *ast.DeferStmt: - children = append(children, - tok(n.Defer, len("defer"))) - - case *ast.Ellipsis: - children = append(children, - tok(n.Ellipsis, len("..."))) - - case *ast.EmptyStmt: - // nop - - case *ast.ExprStmt: - // nop - - case *ast.Field: - // TODO(adonovan): Field.{Doc,Comment,Tag}? - - case *ast.FieldList: - children = append(children, - tok(n.Opening, len("(")), - tok(n.Closing, len(")"))) - - case *ast.File: - // TODO test: Doc - children = append(children, - tok(n.Package, len("package"))) - - case *ast.ForStmt: - children = append(children, - tok(n.For, len("for"))) - - case *ast.FuncDecl: - // TODO(adonovan): FuncDecl.Comment? - - // Uniquely, FuncDecl breaks the invariant that - // preorder traversal yields tokens in lexical order: - // in fact, FuncDecl.Recv precedes FuncDecl.Type.Func. - // - // As a workaround, we inline the case for FuncType - // here and order things correctly. - // - children = nil // discard ast.Walk(FuncDecl) info subtrees - children = append(children, tok(n.Type.Func, len("func"))) - if n.Recv != nil { - children = append(children, n.Recv) - } - children = append(children, n.Name) - if n.Type.Params != nil { - children = append(children, n.Type.Params) - } - if n.Type.Results != nil { - children = append(children, n.Type.Results) - } - if n.Body != nil { - children = append(children, n.Body) - } - - case *ast.FuncLit: - // nop - - case *ast.FuncType: - if n.Func != 0 { - children = append(children, - tok(n.Func, len("func"))) - } - - case *ast.GenDecl: - children = append(children, - tok(n.TokPos, len(n.Tok.String()))) - if n.Lparen != 0 { - children = append(children, - tok(n.Lparen, len("(")), - tok(n.Rparen, len(")"))) - } - - case *ast.GoStmt: - children = append(children, - tok(n.Go, len("go"))) - - case *ast.Ident: - children = append(children, - tok(n.NamePos, len(n.Name))) - - case *ast.IfStmt: - children = append(children, - tok(n.If, len("if"))) - - case *ast.ImportSpec: - // TODO(adonovan): ImportSpec.{Doc,EndPos}? - - case *ast.IncDecStmt: - children = append(children, - tok(n.TokPos, len(n.Tok.String()))) - - case *ast.IndexExpr: - children = append(children, - tok(n.Lbrack, len("{")), - tok(n.Rbrack, len("}"))) - - case *ast.InterfaceType: - children = append(children, - tok(n.Interface, len("interface"))) - - case *ast.KeyValueExpr: - children = append(children, - tok(n.Colon, len(":"))) - - case *ast.LabeledStmt: - children = append(children, - tok(n.Colon, len(":"))) - - case *ast.MapType: - children = append(children, - tok(n.Map, len("map"))) - - case *ast.ParenExpr: - children = append(children, - tok(n.Lparen, len("(")), - tok(n.Rparen, len(")"))) - - case *ast.RangeStmt: - children = append(children, - tok(n.For, len("for")), - tok(n.TokPos, len(n.Tok.String()))) - - case *ast.ReturnStmt: - children = append(children, - tok(n.Return, len("return"))) - - case *ast.SelectStmt: - children = append(children, - tok(n.Select, len("select"))) - - case *ast.SelectorExpr: - // nop - - case *ast.SendStmt: - children = append(children, - tok(n.Arrow, len("<-"))) - - case *ast.SliceExpr: - children = append(children, - tok(n.Lbrack, len("[")), - tok(n.Rbrack, len("]"))) - - case *ast.StarExpr: - children = append(children, tok(n.Star, len("*"))) - - case *ast.StructType: - children = append(children, tok(n.Struct, len("struct"))) - - case *ast.SwitchStmt: - children = append(children, tok(n.Switch, len("switch"))) - - case *ast.TypeAssertExpr: - children = append(children, - tok(n.Lparen-1, len(".")), - tok(n.Lparen, len("(")), - tok(n.Rparen, len(")"))) - - case *ast.TypeSpec: - // TODO(adonovan): TypeSpec.{Doc,Comment}? - - case *ast.TypeSwitchStmt: - children = append(children, tok(n.Switch, len("switch"))) - - case *ast.UnaryExpr: - children = append(children, tok(n.OpPos, len(n.Op.String()))) - - case *ast.ValueSpec: - // TODO(adonovan): ValueSpec.{Doc,Comment}? - - case *ast.BadDecl, *ast.BadExpr, *ast.BadStmt: - // nop - } - - // TODO(adonovan): opt: merge the logic of ast.Inspect() into - // the switch above so we can make interleaved callbacks for - // both Nodes and Tokens in the right order and avoid the need - // to sort. - sort.Sort(byPos(children)) - - return children -} - -type byPos []ast.Node - -func (sl byPos) Len() int { - return len(sl) -} -func (sl byPos) Less(i, j int) bool { - return sl[i].Pos() < sl[j].Pos() -} -func (sl byPos) Swap(i, j int) { - sl[i], sl[j] = sl[j], sl[i] -} - -// NodeDescription returns a description of the concrete type of n suitable -// for a user interface. -// -// TODO(adonovan): in some cases (e.g. Field, FieldList, Ident, -// StarExpr) we could be much more specific given the path to the AST -// root. Perhaps we should do that. -// -func NodeDescription(n ast.Node) string { - switch n := n.(type) { - case *ast.ArrayType: - return "array type" - case *ast.AssignStmt: - return "assignment" - case *ast.BadDecl: - return "bad declaration" - case *ast.BadExpr: - return "bad expression" - case *ast.BadStmt: - return "bad statement" - case *ast.BasicLit: - return "basic literal" - case *ast.BinaryExpr: - return fmt.Sprintf("binary %s operation", n.Op) - case *ast.BlockStmt: - return "block" - case *ast.BranchStmt: - switch n.Tok { - case token.BREAK: - return "break statement" - case token.CONTINUE: - return "continue statement" - case token.GOTO: - return "goto statement" - case token.FALLTHROUGH: - return "fall-through statement" - } - case *ast.CallExpr: - if len(n.Args) == 1 && !n.Ellipsis.IsValid() { - return "function call (or conversion)" - } - return "function call" - case *ast.CaseClause: - return "case clause" - case *ast.ChanType: - return "channel type" - case *ast.CommClause: - return "communication clause" - case *ast.Comment: - return "comment" - case *ast.CommentGroup: - return "comment group" - case *ast.CompositeLit: - return "composite literal" - case *ast.DeclStmt: - return NodeDescription(n.Decl) + " statement" - case *ast.DeferStmt: - return "defer statement" - case *ast.Ellipsis: - return "ellipsis" - case *ast.EmptyStmt: - return "empty statement" - case *ast.ExprStmt: - return "expression statement" - case *ast.Field: - // Can be any of these: - // struct {x, y int} -- struct field(s) - // struct {T} -- anon struct field - // interface {I} -- interface embedding - // interface {f()} -- interface method - // func (A) func(B) C -- receiver, param(s), result(s) - return "field/method/parameter" - case *ast.FieldList: - return "field/method/parameter list" - case *ast.File: - return "source file" - case *ast.ForStmt: - return "for loop" - case *ast.FuncDecl: - return "function declaration" - case *ast.FuncLit: - return "function literal" - case *ast.FuncType: - return "function type" - case *ast.GenDecl: - switch n.Tok { - case token.IMPORT: - return "import declaration" - case token.CONST: - return "constant declaration" - case token.TYPE: - return "type declaration" - case token.VAR: - return "variable declaration" - } - case *ast.GoStmt: - return "go statement" - case *ast.Ident: - return "identifier" - case *ast.IfStmt: - return "if statement" - case *ast.ImportSpec: - return "import specification" - case *ast.IncDecStmt: - if n.Tok == token.INC { - return "increment statement" - } - return "decrement statement" - case *ast.IndexExpr: - return "index expression" - case *ast.InterfaceType: - return "interface type" - case *ast.KeyValueExpr: - return "key/value association" - case *ast.LabeledStmt: - return "statement label" - case *ast.MapType: - return "map type" - case *ast.Package: - return "package" - case *ast.ParenExpr: - return "parenthesized " + NodeDescription(n.X) - case *ast.RangeStmt: - return "range loop" - case *ast.ReturnStmt: - return "return statement" - case *ast.SelectStmt: - return "select statement" - case *ast.SelectorExpr: - return "selector" - case *ast.SendStmt: - return "channel send" - case *ast.SliceExpr: - return "slice expression" - case *ast.StarExpr: - return "*-operation" // load/store expr or pointer type - case *ast.StructType: - return "struct type" - case *ast.SwitchStmt: - return "switch statement" - case *ast.TypeAssertExpr: - return "type assertion" - case *ast.TypeSpec: - return "type specification" - case *ast.TypeSwitchStmt: - return "type switch" - case *ast.UnaryExpr: - return fmt.Sprintf("unary %s operation", n.Op) - case *ast.ValueSpec: - return "value specification" - - } - panic(fmt.Sprintf("unexpected node type: %T", n)) -} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/imports.go b/vendor/golang.org/x/tools/go/ast/astutil/imports.go deleted file mode 100644 index a47bcfa..0000000 --- a/vendor/golang.org/x/tools/go/ast/astutil/imports.go +++ /dev/null @@ -1,400 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package astutil contains common utilities for working with the Go AST. -package astutil - -import ( - "fmt" - "go/ast" - "go/token" - "strconv" - "strings" -) - -// AddImport adds the import path to the file f, if absent. -func AddImport(fset *token.FileSet, f *ast.File, ipath string) (added bool) { - return AddNamedImport(fset, f, "", ipath) -} - -// AddNamedImport adds the import path to the file f, if absent. -// If name is not empty, it is used to rename the import. -// -// For example, calling -// AddNamedImport(fset, f, "pathpkg", "path") -// adds -// import pathpkg "path" -func AddNamedImport(fset *token.FileSet, f *ast.File, name, ipath string) (added bool) { - if imports(f, ipath) { - return false - } - - newImport := &ast.ImportSpec{ - Path: &ast.BasicLit{ - Kind: token.STRING, - Value: strconv.Quote(ipath), - }, - } - if name != "" { - newImport.Name = &ast.Ident{Name: name} - } - - // Find an import decl to add to. - // The goal is to find an existing import - // whose import path has the longest shared - // prefix with ipath. - var ( - bestMatch = -1 // length of longest shared prefix - lastImport = -1 // index in f.Decls of the file's final import decl - impDecl *ast.GenDecl // import decl containing the best match - impIndex = -1 // spec index in impDecl containing the best match - ) - for i, decl := range f.Decls { - gen, ok := decl.(*ast.GenDecl) - if ok && gen.Tok == token.IMPORT { - lastImport = i - // Do not add to import "C", to avoid disrupting the - // association with its doc comment, breaking cgo. - if declImports(gen, "C") { - continue - } - - // Match an empty import decl if that's all that is available. - if len(gen.Specs) == 0 && bestMatch == -1 { - impDecl = gen - } - - // Compute longest shared prefix with imports in this group. - for j, spec := range gen.Specs { - impspec := spec.(*ast.ImportSpec) - n := matchLen(importPath(impspec), ipath) - if n > bestMatch { - bestMatch = n - impDecl = gen - impIndex = j - } - } - } - } - - // If no import decl found, add one after the last import. - if impDecl == nil { - impDecl = &ast.GenDecl{ - Tok: token.IMPORT, - } - if lastImport >= 0 { - impDecl.TokPos = f.Decls[lastImport].End() - } else { - // There are no existing imports. - // Our new import goes after the package declaration and after - // the comment, if any, that starts on the same line as the - // package declaration. - impDecl.TokPos = f.Package - - file := fset.File(f.Package) - pkgLine := file.Line(f.Package) - for _, c := range f.Comments { - if file.Line(c.Pos()) > pkgLine { - break - } - impDecl.TokPos = c.End() - } - } - f.Decls = append(f.Decls, nil) - copy(f.Decls[lastImport+2:], f.Decls[lastImport+1:]) - f.Decls[lastImport+1] = impDecl - } - - // Insert new import at insertAt. - insertAt := 0 - if impIndex >= 0 { - // insert after the found import - insertAt = impIndex + 1 - } - impDecl.Specs = append(impDecl.Specs, nil) - copy(impDecl.Specs[insertAt+1:], impDecl.Specs[insertAt:]) - impDecl.Specs[insertAt] = newImport - pos := impDecl.Pos() - if insertAt > 0 { - // If there is a comment after an existing import, preserve the comment - // position by adding the new import after the comment. - if spec, ok := impDecl.Specs[insertAt-1].(*ast.ImportSpec); ok && spec.Comment != nil { - pos = spec.Comment.End() - } else { - // Assign same position as the previous import, - // so that the sorter sees it as being in the same block. - pos = impDecl.Specs[insertAt-1].Pos() - } - } - if newImport.Name != nil { - newImport.Name.NamePos = pos - } - newImport.Path.ValuePos = pos - newImport.EndPos = pos - - // Clean up parens. impDecl contains at least one spec. - if len(impDecl.Specs) == 1 { - // Remove unneeded parens. - impDecl.Lparen = token.NoPos - } else if !impDecl.Lparen.IsValid() { - // impDecl needs parens added. - impDecl.Lparen = impDecl.Specs[0].Pos() - } - - f.Imports = append(f.Imports, newImport) - - if len(f.Decls) <= 1 { - return true - } - - // Merge all the import declarations into the first one. - var first *ast.GenDecl - for i, decl := range f.Decls { - gen, ok := decl.(*ast.GenDecl) - if !ok || gen.Tok != token.IMPORT || declImports(gen, "C") { - continue - } - if first == nil { - first = gen - continue // Don't touch the first one. - } - // Move the imports of the other import declaration to the first one. - for _, spec := range gen.Specs { - spec.(*ast.ImportSpec).Path.ValuePos = first.Pos() - first.Specs = append(first.Specs, spec) - } - f.Decls = append(f.Decls[:i], f.Decls[i+1:]...) - } - - return true -} - -// DeleteImport deletes the import path from the file f, if present. -func DeleteImport(fset *token.FileSet, f *ast.File, path string) (deleted bool) { - return DeleteNamedImport(fset, f, "", path) -} - -// DeleteNamedImport deletes the import with the given name and path from the file f, if present. -func DeleteNamedImport(fset *token.FileSet, f *ast.File, name, path string) (deleted bool) { - var delspecs []*ast.ImportSpec - - // Find the import nodes that import path, if any. - for i := 0; i < len(f.Decls); i++ { - decl := f.Decls[i] - gen, ok := decl.(*ast.GenDecl) - if !ok || gen.Tok != token.IMPORT { - continue - } - for j := 0; j < len(gen.Specs); j++ { - spec := gen.Specs[j] - impspec := spec.(*ast.ImportSpec) - if impspec.Name == nil && name != "" { - continue - } - if impspec.Name != nil && impspec.Name.Name != name { - continue - } - if importPath(impspec) != path { - continue - } - - // We found an import spec that imports path. - // Delete it. - delspecs = append(delspecs, impspec) - deleted = true - copy(gen.Specs[j:], gen.Specs[j+1:]) - gen.Specs = gen.Specs[:len(gen.Specs)-1] - - // If this was the last import spec in this decl, - // delete the decl, too. - if len(gen.Specs) == 0 { - copy(f.Decls[i:], f.Decls[i+1:]) - f.Decls = f.Decls[:len(f.Decls)-1] - i-- - break - } else if len(gen.Specs) == 1 { - gen.Lparen = token.NoPos // drop parens - } - if j > 0 { - lastImpspec := gen.Specs[j-1].(*ast.ImportSpec) - lastLine := fset.Position(lastImpspec.Path.ValuePos).Line - line := fset.Position(impspec.Path.ValuePos).Line - - // We deleted an entry but now there may be - // a blank line-sized hole where the import was. - if line-lastLine > 1 { - // There was a blank line immediately preceding the deleted import, - // so there's no need to close the hole. - // Do nothing. - } else { - // There was no blank line. Close the hole. - fset.File(gen.Rparen).MergeLine(line) - } - } - j-- - } - } - - // Delete them from f.Imports. - for i := 0; i < len(f.Imports); i++ { - imp := f.Imports[i] - for j, del := range delspecs { - if imp == del { - copy(f.Imports[i:], f.Imports[i+1:]) - f.Imports = f.Imports[:len(f.Imports)-1] - copy(delspecs[j:], delspecs[j+1:]) - delspecs = delspecs[:len(delspecs)-1] - i-- - break - } - } - } - - if len(delspecs) > 0 { - panic(fmt.Sprintf("deleted specs from Decls but not Imports: %v", delspecs)) - } - - return -} - -// RewriteImport rewrites any import of path oldPath to path newPath. -func RewriteImport(fset *token.FileSet, f *ast.File, oldPath, newPath string) (rewrote bool) { - for _, imp := range f.Imports { - if importPath(imp) == oldPath { - rewrote = true - // record old End, because the default is to compute - // it using the length of imp.Path.Value. - imp.EndPos = imp.End() - imp.Path.Value = strconv.Quote(newPath) - } - } - return -} - -// UsesImport reports whether a given import is used. -func UsesImport(f *ast.File, path string) (used bool) { - spec := importSpec(f, path) - if spec == nil { - return - } - - name := spec.Name.String() - switch name { - case "": - // If the package name is not explicitly specified, - // make an educated guess. This is not guaranteed to be correct. - lastSlash := strings.LastIndex(path, "/") - if lastSlash == -1 { - name = path - } else { - name = path[lastSlash+1:] - } - case "_", ".": - // Not sure if this import is used - err on the side of caution. - return true - } - - ast.Walk(visitFn(func(n ast.Node) { - sel, ok := n.(*ast.SelectorExpr) - if ok && isTopName(sel.X, name) { - used = true - } - }), f) - - return -} - -type visitFn func(node ast.Node) - -func (fn visitFn) Visit(node ast.Node) ast.Visitor { - fn(node) - return fn -} - -// imports returns true if f imports path. -func imports(f *ast.File, path string) bool { - return importSpec(f, path) != nil -} - -// importSpec returns the import spec if f imports path, -// or nil otherwise. -func importSpec(f *ast.File, path string) *ast.ImportSpec { - for _, s := range f.Imports { - if importPath(s) == path { - return s - } - } - return nil -} - -// importPath returns the unquoted import path of s, -// or "" if the path is not properly quoted. -func importPath(s *ast.ImportSpec) string { - t, err := strconv.Unquote(s.Path.Value) - if err == nil { - return t - } - return "" -} - -// declImports reports whether gen contains an import of path. -func declImports(gen *ast.GenDecl, path string) bool { - if gen.Tok != token.IMPORT { - return false - } - for _, spec := range gen.Specs { - impspec := spec.(*ast.ImportSpec) - if importPath(impspec) == path { - return true - } - } - return false -} - -// matchLen returns the length of the longest path segment prefix shared by x and y. -func matchLen(x, y string) int { - n := 0 - for i := 0; i < len(x) && i < len(y) && x[i] == y[i]; i++ { - if x[i] == '/' { - n++ - } - } - return n -} - -// isTopName returns true if n is a top-level unresolved identifier with the given name. -func isTopName(n ast.Expr, name string) bool { - id, ok := n.(*ast.Ident) - return ok && id.Name == name && id.Obj == nil -} - -// Imports returns the file imports grouped by paragraph. -func Imports(fset *token.FileSet, f *ast.File) [][]*ast.ImportSpec { - var groups [][]*ast.ImportSpec - - for _, decl := range f.Decls { - genDecl, ok := decl.(*ast.GenDecl) - if !ok || genDecl.Tok != token.IMPORT { - break - } - - group := []*ast.ImportSpec{} - - var lastLine int - for _, spec := range genDecl.Specs { - importSpec := spec.(*ast.ImportSpec) - pos := importSpec.Path.ValuePos - line := fset.Position(pos).Line - if lastLine > 0 && pos > 0 && line-lastLine > 1 { - groups = append(groups, group) - group = []*ast.ImportSpec{} - } - group = append(group, importSpec) - lastLine = line - } - groups = append(groups, group) - } - - return groups -} diff --git a/vendor/golang.org/x/tools/go/ast/astutil/util.go b/vendor/golang.org/x/tools/go/ast/astutil/util.go deleted file mode 100644 index 7630629..0000000 --- a/vendor/golang.org/x/tools/go/ast/astutil/util.go +++ /dev/null @@ -1,14 +0,0 @@ -package astutil - -import "go/ast" - -// Unparen returns e with any enclosing parentheses stripped. -func Unparen(e ast.Expr) ast.Expr { - for { - p, ok := e.(*ast.ParenExpr) - if !ok { - return e - } - e = p.X - } -} diff --git a/vendor/golang.org/x/tools/imports/fastwalk.go b/vendor/golang.org/x/tools/imports/fastwalk.go deleted file mode 100644 index 157c792..0000000 --- a/vendor/golang.org/x/tools/imports/fastwalk.go +++ /dev/null @@ -1,172 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// A faster implementation of filepath.Walk. -// -// filepath.Walk's design necessarily calls os.Lstat on each file, -// even if the caller needs less info. And goimports only need to know -// the type of each file. The kernel interface provides the type in -// the Readdir call but the standard library ignored it. -// fastwalk_unix.go contains a fork of the syscall routines. -// -// See golang.org/issue/16399 - -package imports - -import ( - "errors" - "os" - "path/filepath" - "runtime" -) - -// traverseLink is a sentinel error for fastWalk, similar to filepath.SkipDir. -var traverseLink = errors.New("traverse symlink, assuming target is a directory") - -// fastWalk walks the file tree rooted at root, calling walkFn for -// each file or directory in the tree, including root. -// -// If fastWalk returns filepath.SkipDir, the directory is skipped. -// -// Unlike filepath.Walk: -// * file stat calls must be done by the user. -// The only provided metadata is the file type, which does not include -// any permission bits. -// * multiple goroutines stat the filesystem concurrently. The provided -// walkFn must be safe for concurrent use. -// * fastWalk can follow symlinks if walkFn returns the traverseLink -// sentinel error. It is the walkFn's responsibility to prevent -// fastWalk from going into symlink cycles. -func fastWalk(root string, walkFn func(path string, typ os.FileMode) error) error { - // TODO(bradfitz): make numWorkers configurable? We used a - // minimum of 4 to give the kernel more info about multiple - // things we want, in hopes its I/O scheduling can take - // advantage of that. Hopefully most are in cache. Maybe 4 is - // even too low of a minimum. Profile more. - numWorkers := 4 - if n := runtime.NumCPU(); n > numWorkers { - numWorkers = n - } - w := &walker{ - fn: walkFn, - enqueuec: make(chan walkItem, numWorkers), // buffered for performance - workc: make(chan walkItem, numWorkers), // buffered for performance - donec: make(chan struct{}), - - // buffered for correctness & not leaking goroutines: - resc: make(chan error, numWorkers), - } - defer close(w.donec) - // TODO(bradfitz): start the workers as needed? maybe not worth it. - for i := 0; i < numWorkers; i++ { - go w.doWork() - } - todo := []walkItem{{dir: root}} - out := 0 - for { - workc := w.workc - var workItem walkItem - if len(todo) == 0 { - workc = nil - } else { - workItem = todo[len(todo)-1] - } - select { - case workc <- workItem: - todo = todo[:len(todo)-1] - out++ - case it := <-w.enqueuec: - todo = append(todo, it) - case err := <-w.resc: - out-- - if err != nil { - return err - } - if out == 0 && len(todo) == 0 { - // It's safe to quit here, as long as the buffered - // enqueue channel isn't also readable, which might - // happen if the worker sends both another unit of - // work and its result before the other select was - // scheduled and both w.resc and w.enqueuec were - // readable. - select { - case it := <-w.enqueuec: - todo = append(todo, it) - default: - return nil - } - } - } - } -} - -// doWork reads directories as instructed (via workc) and runs the -// user's callback function. -func (w *walker) doWork() { - for { - select { - case <-w.donec: - return - case it := <-w.workc: - w.resc <- w.walk(it.dir, !it.callbackDone) - } - } -} - -type walker struct { - fn func(path string, typ os.FileMode) error - - donec chan struct{} // closed on fastWalk's return - workc chan walkItem // to workers - enqueuec chan walkItem // from workers - resc chan error // from workers -} - -type walkItem struct { - dir string - callbackDone bool // callback already called; don't do it again -} - -func (w *walker) enqueue(it walkItem) { - select { - case w.enqueuec <- it: - case <-w.donec: - } -} - -func (w *walker) onDirEnt(dirName, baseName string, typ os.FileMode) error { - joined := dirName + string(os.PathSeparator) + baseName - if typ == os.ModeDir { - w.enqueue(walkItem{dir: joined}) - return nil - } - - err := w.fn(joined, typ) - if typ == os.ModeSymlink { - if err == traverseLink { - // Set callbackDone so we don't call it twice for both the - // symlink-as-symlink and the symlink-as-directory later: - w.enqueue(walkItem{dir: joined, callbackDone: true}) - return nil - } - if err == filepath.SkipDir { - // Permit SkipDir on symlinks too. - return nil - } - } - return err -} -func (w *walker) walk(root string, runUserCallback bool) error { - if runUserCallback { - err := w.fn(root, os.ModeDir) - if err == filepath.SkipDir { - return nil - } - if err != nil { - return err - } - } - - return readDir(root, w.onDirEnt) -} diff --git a/vendor/golang.org/x/tools/imports/fastwalk_dirent_fileno.go b/vendor/golang.org/x/tools/imports/fastwalk_dirent_fileno.go deleted file mode 100644 index f1fd649..0000000 --- a/vendor/golang.org/x/tools/imports/fastwalk_dirent_fileno.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build freebsd openbsd netbsd - -package imports - -import "syscall" - -func direntInode(dirent *syscall.Dirent) uint64 { - return uint64(dirent.Fileno) -} diff --git a/vendor/golang.org/x/tools/imports/fastwalk_dirent_ino.go b/vendor/golang.org/x/tools/imports/fastwalk_dirent_ino.go deleted file mode 100644 index 32fe71b..0000000 --- a/vendor/golang.org/x/tools/imports/fastwalk_dirent_ino.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux darwin - -package imports - -import "syscall" - -func direntInode(dirent *syscall.Dirent) uint64 { - return uint64(dirent.Ino) -} diff --git a/vendor/golang.org/x/tools/imports/fastwalk_portable.go b/vendor/golang.org/x/tools/imports/fastwalk_portable.go deleted file mode 100644 index 996c2c2..0000000 --- a/vendor/golang.org/x/tools/imports/fastwalk_portable.go +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !linux,!darwin,!freebsd,!openbsd,!netbsd - -package imports - -import ( - "io/ioutil" - "os" -) - -// readDir calls fn for each directory entry in dirName. -// It does not descend into directories or follow symlinks. -// If fn returns a non-nil error, readDir returns with that error -// immediately. -func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) error) error { - fis, err := ioutil.ReadDir(dirName) - if err != nil { - return err - } - for _, fi := range fis { - if err := fn(dirName, fi.Name(), fi.Mode()&os.ModeType); err != nil { - return err - } - } - return nil -} diff --git a/vendor/golang.org/x/tools/imports/fastwalk_unix.go b/vendor/golang.org/x/tools/imports/fastwalk_unix.go deleted file mode 100644 index 2449523..0000000 --- a/vendor/golang.org/x/tools/imports/fastwalk_unix.go +++ /dev/null @@ -1,122 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build linux darwin freebsd openbsd netbsd - -package imports - -import ( - "bytes" - "fmt" - "os" - "syscall" - "unsafe" -) - -const blockSize = 8 << 10 - -// unknownFileMode is a sentinel (and bogus) os.FileMode -// value used to represent a syscall.DT_UNKNOWN Dirent.Type. -const unknownFileMode os.FileMode = os.ModeNamedPipe | os.ModeSocket | os.ModeDevice - -func readDir(dirName string, fn func(dirName, entName string, typ os.FileMode) error) error { - fd, err := syscall.Open(dirName, 0, 0) - if err != nil { - return err - } - defer syscall.Close(fd) - - // The buffer must be at least a block long. - buf := make([]byte, blockSize) // stack-allocated; doesn't escape - bufp := 0 // starting read position in buf - nbuf := 0 // end valid data in buf - for { - if bufp >= nbuf { - bufp = 0 - nbuf, err = syscall.ReadDirent(fd, buf) - if err != nil { - return os.NewSyscallError("readdirent", err) - } - if nbuf <= 0 { - return nil - } - } - consumed, name, typ := parseDirEnt(buf[bufp:nbuf]) - bufp += consumed - if name == "" || name == "." || name == ".." { - continue - } - // Fallback for filesystems (like old XFS) that don't - // support Dirent.Type and have DT_UNKNOWN (0) there - // instead. - if typ == unknownFileMode { - fi, err := os.Lstat(dirName + "/" + name) - if err != nil { - // It got deleted in the meantime. - if os.IsNotExist(err) { - continue - } - return err - } - typ = fi.Mode() & os.ModeType - } - if err := fn(dirName, name, typ); err != nil { - return err - } - } -} - -func parseDirEnt(buf []byte) (consumed int, name string, typ os.FileMode) { - // golang.org/issue/15653 - dirent := (*syscall.Dirent)(unsafe.Pointer(&buf[0])) - if v := unsafe.Offsetof(dirent.Reclen) + unsafe.Sizeof(dirent.Reclen); uintptr(len(buf)) < v { - panic(fmt.Sprintf("buf size of %d smaller than dirent header size %d", len(buf), v)) - } - if len(buf) < int(dirent.Reclen) { - panic(fmt.Sprintf("buf size %d < record length %d", len(buf), dirent.Reclen)) - } - consumed = int(dirent.Reclen) - if direntInode(dirent) == 0 { // File absent in directory. - return - } - switch dirent.Type { - case syscall.DT_REG: - typ = 0 - case syscall.DT_DIR: - typ = os.ModeDir - case syscall.DT_LNK: - typ = os.ModeSymlink - case syscall.DT_BLK: - typ = os.ModeDevice - case syscall.DT_FIFO: - typ = os.ModeNamedPipe - case syscall.DT_SOCK: - typ = os.ModeSocket - case syscall.DT_UNKNOWN: - typ = unknownFileMode - default: - // Skip weird things. - // It's probably a DT_WHT (http://lwn.net/Articles/325369/) - // or something. Revisit if/when this package is moved outside - // of goimports. goimports only cares about regular files, - // symlinks, and directories. - return - } - - nameBuf := (*[unsafe.Sizeof(dirent.Name)]byte)(unsafe.Pointer(&dirent.Name[0])) - nameLen := bytes.IndexByte(nameBuf[:], 0) - if nameLen < 0 { - panic("failed to find terminating 0 byte in dirent") - } - - // Special cases for common things: - if nameLen == 1 && nameBuf[0] == '.' { - name = "." - } else if nameLen == 2 && nameBuf[0] == '.' && nameBuf[1] == '.' { - name = ".." - } else { - name = string(nameBuf[:nameLen]) - } - return -} diff --git a/vendor/golang.org/x/tools/imports/fix.go b/vendor/golang.org/x/tools/imports/fix.go deleted file mode 100644 index 4d7dfeb..0000000 --- a/vendor/golang.org/x/tools/imports/fix.go +++ /dev/null @@ -1,900 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package imports - -import ( - "bufio" - "bytes" - "fmt" - "go/ast" - "go/build" - "go/parser" - "go/token" - "io/ioutil" - "log" - "os" - "path" - "path/filepath" - "sort" - "strings" - "sync" - - "golang.org/x/tools/go/ast/astutil" -) - -// Debug controls verbose logging. -var Debug = false - -var ( - inTests = false // set true by fix_test.go; if false, no need to use testMu - testMu sync.RWMutex // guards globals reset by tests; used only if inTests -) - -// If set, LocalPrefix instructs Process to sort import paths with the given -// prefix into another group after 3rd-party packages. -var LocalPrefix string - -// importToGroup is a list of functions which map from an import path to -// a group number. -var importToGroup = []func(importPath string) (num int, ok bool){ - func(importPath string) (num int, ok bool) { - if LocalPrefix != "" && strings.HasPrefix(importPath, LocalPrefix) { - return 3, true - } - return - }, - func(importPath string) (num int, ok bool) { - if strings.HasPrefix(importPath, "appengine") { - return 2, true - } - return - }, - func(importPath string) (num int, ok bool) { - if strings.Contains(importPath, ".") { - return 1, true - } - return - }, -} - -func importGroup(importPath string) int { - for _, fn := range importToGroup { - if n, ok := fn(importPath); ok { - return n - } - } - return 0 -} - -func fixImports(fset *token.FileSet, f *ast.File, filename string) (added []string, err error) { - // refs are a set of possible package references currently unsatisfied by imports. - // first key: either base package (e.g. "fmt") or renamed package - // second key: referenced package symbol (e.g. "Println") - refs := make(map[string]map[string]bool) - - // decls are the current package imports. key is base package or renamed package. - decls := make(map[string]*ast.ImportSpec) - - abs, err := filepath.Abs(filename) - if err != nil { - return nil, err - } - srcDir := filepath.Dir(abs) - if Debug { - log.Printf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir) - } - - // collect potential uses of packages. - var visitor visitFn - visitor = visitFn(func(node ast.Node) ast.Visitor { - if node == nil { - return visitor - } - switch v := node.(type) { - case *ast.ImportSpec: - if v.Name != nil { - decls[v.Name.Name] = v - break - } - ipath := strings.Trim(v.Path.Value, `"`) - if ipath == "C" { - break - } - local := importPathToName(ipath, srcDir) - decls[local] = v - case *ast.SelectorExpr: - xident, ok := v.X.(*ast.Ident) - if !ok { - break - } - if xident.Obj != nil { - // if the parser can resolve it, it's not a package ref - break - } - pkgName := xident.Name - if refs[pkgName] == nil { - refs[pkgName] = make(map[string]bool) - } - if decls[pkgName] == nil { - refs[pkgName][v.Sel.Name] = true - } - } - return visitor - }) - ast.Walk(visitor, f) - - // Nil out any unused ImportSpecs, to be removed in following passes - unusedImport := map[string]string{} - for pkg, is := range decls { - if refs[pkg] == nil && pkg != "_" && pkg != "." { - name := "" - if is.Name != nil { - name = is.Name.Name - } - unusedImport[strings.Trim(is.Path.Value, `"`)] = name - } - } - for ipath, name := range unusedImport { - if ipath == "C" { - // Don't remove cgo stuff. - continue - } - astutil.DeleteNamedImport(fset, f, name, ipath) - } - - for pkgName, symbols := range refs { - if len(symbols) == 0 { - // skip over packages already imported - delete(refs, pkgName) - } - } - - // Search for imports matching potential package references. - searches := 0 - type result struct { - ipath string // import path (if err == nil) - name string // optional name to rename import as - err error - } - results := make(chan result) - for pkgName, symbols := range refs { - go func(pkgName string, symbols map[string]bool) { - ipath, rename, err := findImport(pkgName, symbols, filename) - r := result{ipath: ipath, err: err} - if rename { - r.name = pkgName - } - results <- r - }(pkgName, symbols) - searches++ - } - for i := 0; i < searches; i++ { - result := <-results - if result.err != nil { - return nil, result.err - } - if result.ipath != "" { - if result.name != "" { - astutil.AddNamedImport(fset, f, result.name, result.ipath) - } else { - astutil.AddImport(fset, f, result.ipath) - } - added = append(added, result.ipath) - } - } - - return added, nil -} - -// importPathToName returns the package name for the given import path. -var importPathToName func(importPath, srcDir string) (packageName string) = importPathToNameGoPath - -// importPathToNameBasic assumes the package name is the base of import path. -func importPathToNameBasic(importPath, srcDir string) (packageName string) { - return path.Base(importPath) -} - -// importPathToNameGoPath finds out the actual package name, as declared in its .go files. -// If there's a problem, it falls back to using importPathToNameBasic. -func importPathToNameGoPath(importPath, srcDir string) (packageName string) { - // Fast path for standard library without going to disk. - if pkg, ok := stdImportPackage[importPath]; ok { - return pkg - } - - pkgName, err := importPathToNameGoPathParse(importPath, srcDir) - if Debug { - log.Printf("importPathToNameGoPathParse(%q, srcDir=%q) = %q, %v", importPath, srcDir, pkgName, err) - } - if err == nil { - return pkgName - } - return importPathToNameBasic(importPath, srcDir) -} - -// importPathToNameGoPathParse is a faster version of build.Import if -// the only thing desired is the package name. It uses build.FindOnly -// to find the directory and then only parses one file in the package, -// trusting that the files in the directory are consistent. -func importPathToNameGoPathParse(importPath, srcDir string) (packageName string, err error) { - buildPkg, err := build.Import(importPath, srcDir, build.FindOnly) - if err != nil { - return "", err - } - d, err := os.Open(buildPkg.Dir) - if err != nil { - return "", err - } - names, err := d.Readdirnames(-1) - d.Close() - if err != nil { - return "", err - } - sort.Strings(names) // to have predictable behavior - var lastErr error - var nfile int - for _, name := range names { - if !strings.HasSuffix(name, ".go") { - continue - } - if strings.HasSuffix(name, "_test.go") { - continue - } - nfile++ - fullFile := filepath.Join(buildPkg.Dir, name) - - fset := token.NewFileSet() - f, err := parser.ParseFile(fset, fullFile, nil, parser.PackageClauseOnly) - if err != nil { - lastErr = err - continue - } - pkgName := f.Name.Name - if pkgName == "documentation" { - // Special case from go/build.ImportDir, not - // handled by ctx.MatchFile. - continue - } - if pkgName == "main" { - // Also skip package main, assuming it's a +build ignore generator or example. - // Since you can't import a package main anyway, there's no harm here. - continue - } - return pkgName, nil - } - if lastErr != nil { - return "", lastErr - } - return "", fmt.Errorf("no importable package found in %d Go files", nfile) -} - -var stdImportPackage = map[string]string{} // "net/http" => "http" - -func init() { - // Nothing in the standard library has a package name not - // matching its import base name. - for _, pkg := range stdlib { - if _, ok := stdImportPackage[pkg]; !ok { - stdImportPackage[pkg] = path.Base(pkg) - } - } -} - -// Directory-scanning state. -var ( - // scanGoRootOnce guards calling scanGoRoot (for $GOROOT) - scanGoRootOnce sync.Once - // scanGoPathOnce guards calling scanGoPath (for $GOPATH) - scanGoPathOnce sync.Once - - // populateIgnoreOnce guards calling populateIgnore - populateIgnoreOnce sync.Once - ignoredDirs []os.FileInfo - - dirScanMu sync.RWMutex - dirScan map[string]*pkg // abs dir path => *pkg -) - -type pkg struct { - dir string // absolute file path to pkg directory ("/usr/lib/go/src/net/http") - importPath string // full pkg import path ("net/http", "foo/bar/vendor/a/b") - importPathShort string // vendorless import path ("net/http", "a/b") -} - -// byImportPathShortLength sorts by the short import path length, breaking ties on the -// import string itself. -type byImportPathShortLength []*pkg - -func (s byImportPathShortLength) Len() int { return len(s) } -func (s byImportPathShortLength) Less(i, j int) bool { - vi, vj := s[i].importPathShort, s[j].importPathShort - return len(vi) < len(vj) || (len(vi) == len(vj) && vi < vj) - -} -func (s byImportPathShortLength) Swap(i, j int) { s[i], s[j] = s[j], s[i] } - -// gate is a semaphore for limiting concurrency. -type gate chan struct{} - -func (g gate) enter() { g <- struct{}{} } -func (g gate) leave() { <-g } - -var visitedSymlinks struct { - sync.Mutex - m map[string]struct{} -} - -// guarded by populateIgnoreOnce; populates ignoredDirs. -func populateIgnore() { - for _, srcDir := range build.Default.SrcDirs() { - if srcDir == filepath.Join(build.Default.GOROOT, "src") { - continue - } - populateIgnoredDirs(srcDir) - } -} - -// populateIgnoredDirs reads an optional config file at /.goimportsignore -// of relative directories to ignore when scanning for go files. -// The provided path is one of the $GOPATH entries with "src" appended. -func populateIgnoredDirs(path string) { - file := filepath.Join(path, ".goimportsignore") - slurp, err := ioutil.ReadFile(file) - if Debug { - if err != nil { - log.Print(err) - } else { - log.Printf("Read %s", file) - } - } - if err != nil { - return - } - bs := bufio.NewScanner(bytes.NewReader(slurp)) - for bs.Scan() { - line := strings.TrimSpace(bs.Text()) - if line == "" || strings.HasPrefix(line, "#") { - continue - } - full := filepath.Join(path, line) - if fi, err := os.Stat(full); err == nil { - ignoredDirs = append(ignoredDirs, fi) - if Debug { - log.Printf("Directory added to ignore list: %s", full) - } - } else if Debug { - log.Printf("Error statting entry in .goimportsignore: %v", err) - } - } -} - -func skipDir(fi os.FileInfo) bool { - for _, ignoredDir := range ignoredDirs { - if os.SameFile(fi, ignoredDir) { - return true - } - } - return false -} - -// shouldTraverse reports whether the symlink fi should, found in dir, -// should be followed. It makes sure symlinks were never visited -// before to avoid symlink loops. -func shouldTraverse(dir string, fi os.FileInfo) bool { - path := filepath.Join(dir, fi.Name()) - target, err := filepath.EvalSymlinks(path) - if err != nil { - if !os.IsNotExist(err) { - fmt.Fprintln(os.Stderr, err) - } - return false - } - ts, err := os.Stat(target) - if err != nil { - fmt.Fprintln(os.Stderr, err) - return false - } - if !ts.IsDir() { - return false - } - - realParent, err := filepath.EvalSymlinks(dir) - if err != nil { - fmt.Fprint(os.Stderr, err) - return false - } - realPath := filepath.Join(realParent, fi.Name()) - visitedSymlinks.Lock() - defer visitedSymlinks.Unlock() - if visitedSymlinks.m == nil { - visitedSymlinks.m = make(map[string]struct{}) - } - if _, ok := visitedSymlinks.m[realPath]; ok { - return false - } - visitedSymlinks.m[realPath] = struct{}{} - return true -} - -var testHookScanDir = func(dir string) {} - -var scanGoRootDone = make(chan struct{}) // closed when scanGoRoot is done - -func scanGoRoot() { - go func() { - scanGoDirs(true) - close(scanGoRootDone) - }() -} - -func scanGoPath() { scanGoDirs(false) } - -func scanGoDirs(goRoot bool) { - if Debug { - which := "$GOROOT" - if !goRoot { - which = "$GOPATH" - } - log.Printf("scanning " + which) - defer log.Printf("scanned " + which) - } - dirScanMu.Lock() - if dirScan == nil { - dirScan = make(map[string]*pkg) - } - dirScanMu.Unlock() - - for _, srcDir := range build.Default.SrcDirs() { - isGoroot := srcDir == filepath.Join(build.Default.GOROOT, "src") - if isGoroot != goRoot { - continue - } - testHookScanDir(srcDir) - walkFn := func(path string, typ os.FileMode) error { - dir := filepath.Dir(path) - if typ.IsRegular() { - if dir == srcDir { - // Doesn't make sense to have regular files - // directly in your $GOPATH/src or $GOROOT/src. - return nil - } - if !strings.HasSuffix(path, ".go") { - return nil - } - dirScanMu.Lock() - if _, dup := dirScan[dir]; !dup { - importpath := filepath.ToSlash(dir[len(srcDir)+len("/"):]) - dirScan[dir] = &pkg{ - importPath: importpath, - importPathShort: vendorlessImportPath(importpath), - dir: dir, - } - } - dirScanMu.Unlock() - return nil - } - if typ == os.ModeDir { - base := filepath.Base(path) - if base == "" || base[0] == '.' || base[0] == '_' || - base == "testdata" || base == "node_modules" { - return filepath.SkipDir - } - fi, err := os.Lstat(path) - if err == nil && skipDir(fi) { - if Debug { - log.Printf("skipping directory %q under %s", fi.Name(), dir) - } - return filepath.SkipDir - } - return nil - } - if typ == os.ModeSymlink { - base := filepath.Base(path) - if strings.HasPrefix(base, ".#") { - // Emacs noise. - return nil - } - fi, err := os.Lstat(path) - if err != nil { - // Just ignore it. - return nil - } - if shouldTraverse(dir, fi) { - return traverseLink - } - } - return nil - } - if err := fastWalk(srcDir, walkFn); err != nil { - log.Printf("goimports: scanning directory %v: %v", srcDir, err) - } - } -} - -// vendorlessImportPath returns the devendorized version of the provided import path. -// e.g. "foo/bar/vendor/a/b" => "a/b" -func vendorlessImportPath(ipath string) string { - // Devendorize for use in import statement. - if i := strings.LastIndex(ipath, "/vendor/"); i >= 0 { - return ipath[i+len("/vendor/"):] - } - if strings.HasPrefix(ipath, "vendor/") { - return ipath[len("vendor/"):] - } - return ipath -} - -// loadExports returns the set of exported symbols in the package at dir. -// It returns nil on error or if the package name in dir does not match expectPackage. -var loadExports func(expectPackage, dir string) map[string]bool = loadExportsGoPath - -func loadExportsGoPath(expectPackage, dir string) map[string]bool { - if Debug { - log.Printf("loading exports in dir %s (seeking package %s)", dir, expectPackage) - } - exports := make(map[string]bool) - - ctx := build.Default - - // ReadDir is like ioutil.ReadDir, but only returns *.go files - // and filters out _test.go files since they're not relevant - // and only slow things down. - ctx.ReadDir = func(dir string) (notTests []os.FileInfo, err error) { - all, err := ioutil.ReadDir(dir) - if err != nil { - return nil, err - } - notTests = all[:0] - for _, fi := range all { - name := fi.Name() - if strings.HasSuffix(name, ".go") && !strings.HasSuffix(name, "_test.go") { - notTests = append(notTests, fi) - } - } - return notTests, nil - } - - files, err := ctx.ReadDir(dir) - if err != nil { - log.Print(err) - return nil - } - - fset := token.NewFileSet() - - for _, fi := range files { - match, err := ctx.MatchFile(dir, fi.Name()) - if err != nil || !match { - continue - } - fullFile := filepath.Join(dir, fi.Name()) - f, err := parser.ParseFile(fset, fullFile, nil, 0) - if err != nil { - if Debug { - log.Printf("Parsing %s: %v", fullFile, err) - } - return nil - } - pkgName := f.Name.Name - if pkgName == "documentation" { - // Special case from go/build.ImportDir, not - // handled by ctx.MatchFile. - continue - } - if pkgName != expectPackage { - if Debug { - log.Printf("scan of dir %v is not expected package %v (actually %v)", dir, expectPackage, pkgName) - } - return nil - } - for name := range f.Scope.Objects { - if ast.IsExported(name) { - exports[name] = true - } - } - } - - if Debug { - exportList := make([]string, 0, len(exports)) - for k := range exports { - exportList = append(exportList, k) - } - sort.Strings(exportList) - log.Printf("loaded exports in dir %v (package %v): %v", dir, expectPackage, strings.Join(exportList, ", ")) - } - return exports -} - -// findImport searches for a package with the given symbols. -// If no package is found, findImport returns ("", false, nil) -// -// This is declared as a variable rather than a function so goimports -// can be easily extended by adding a file with an init function. -// -// The rename value tells goimports whether to use the package name as -// a local qualifier in an import. For example, if findImports("pkg", -// "X") returns ("foo/bar", rename=true), then goimports adds the -// import line: -// import pkg "foo/bar" -// to satisfy uses of pkg.X in the file. -var findImport func(pkgName string, symbols map[string]bool, filename string) (foundPkg string, rename bool, err error) = findImportGoPath - -// findImportGoPath is the normal implementation of findImport. -// (Some companies have their own internally.) -func findImportGoPath(pkgName string, symbols map[string]bool, filename string) (foundPkg string, rename bool, err error) { - if inTests { - testMu.RLock() - defer testMu.RUnlock() - } - - // Fast path for the standard library. - // In the common case we hopefully never have to scan the GOPATH, which can - // be slow with moving disks. - if pkg, rename, ok := findImportStdlib(pkgName, symbols); ok { - return pkg, rename, nil - } - if pkgName == "rand" && symbols["Read"] { - // Special-case rand.Read. - // - // If findImportStdlib didn't find it above, don't go - // searching for it, lest it find and pick math/rand - // in GOROOT (new as of Go 1.6) - // - // crypto/rand is the safer choice. - return "", false, nil - } - - // TODO(sameer): look at the import lines for other Go files in the - // local directory, since the user is likely to import the same packages - // in the current Go file. Return rename=true when the other Go files - // use a renamed package that's also used in the current file. - - // Read all the $GOPATH/src/.goimportsignore files before scanning directories. - populateIgnoreOnce.Do(populateIgnore) - - // Start scanning the $GOROOT asynchronously, then run the - // GOPATH scan synchronously if needed, and then wait for the - // $GOROOT to finish. - // - // TODO(bradfitz): run each $GOPATH entry async. But nobody - // really has more than one anyway, so low priority. - scanGoRootOnce.Do(scanGoRoot) // async - if !strings.HasPrefix(filename, build.Default.GOROOT) { - scanGoPathOnce.Do(scanGoPath) // blocking - } - <-scanGoRootDone - - // Find candidate packages, looking only at their directory names first. - var candidates []*pkg - for _, pkg := range dirScan { - if pkgIsCandidate(filename, pkgName, pkg) { - candidates = append(candidates, pkg) - } - } - - // Sort the candidates by their import package length, - // assuming that shorter package names are better than long - // ones. Note that this sorts by the de-vendored name, so - // there's no "penalty" for vendoring. - sort.Sort(byImportPathShortLength(candidates)) - if Debug { - for i, pkg := range candidates { - log.Printf("%s candidate %d/%d: %v", pkgName, i+1, len(candidates), pkg.importPathShort) - } - } - - // Collect exports for packages with matching names. - - done := make(chan struct{}) // closed when we find the answer - defer close(done) - - rescv := make([]chan *pkg, len(candidates)) - for i := range candidates { - rescv[i] = make(chan *pkg) - } - const maxConcurrentPackageImport = 4 - loadExportsSem := make(chan struct{}, maxConcurrentPackageImport) - - go func() { - for i, pkg := range candidates { - select { - case loadExportsSem <- struct{}{}: - select { - case <-done: - default: - } - case <-done: - return - } - pkg := pkg - resc := rescv[i] - go func() { - if inTests { - testMu.RLock() - defer testMu.RUnlock() - } - defer func() { <-loadExportsSem }() - exports := loadExports(pkgName, pkg.dir) - - // If it doesn't have the right - // symbols, send nil to mean no match. - for symbol := range symbols { - if !exports[symbol] { - pkg = nil - break - } - } - select { - case resc <- pkg: - case <-done: - } - }() - } - }() - for _, resc := range rescv { - pkg := <-resc - if pkg == nil { - continue - } - // If the package name in the source doesn't match the import path's base, - // return true so the rewriter adds a name (import foo "github.com/bar/go-foo") - needsRename := path.Base(pkg.importPath) != pkgName - return pkg.importPathShort, needsRename, nil - } - return "", false, nil -} - -// pkgIsCandidate reports whether pkg is a candidate for satisfying the -// finding which package pkgIdent in the file named by filename is trying -// to refer to. -// -// This check is purely lexical and is meant to be as fast as possible -// because it's run over all $GOPATH directories to filter out poor -// candidates in order to limit the CPU and I/O later parsing the -// exports in candidate packages. -// -// filename is the file being formatted. -// pkgIdent is the package being searched for, like "client" (if -// searching for "client.New") -func pkgIsCandidate(filename, pkgIdent string, pkg *pkg) bool { - // Check "internal" and "vendor" visibility: - if !canUse(filename, pkg.dir) { - return false - } - - // Speed optimization to minimize disk I/O: - // the last two components on disk must contain the - // package name somewhere. - // - // This permits mismatch naming like directory - // "go-foo" being package "foo", or "pkg.v3" being "pkg", - // or directory "google.golang.org/api/cloudbilling/v1" - // being package "cloudbilling", but doesn't - // permit a directory "foo" to be package - // "bar", which is strongly discouraged - // anyway. There's no reason goimports needs - // to be slow just to accomodate that. - lastTwo := lastTwoComponents(pkg.importPathShort) - if strings.Contains(lastTwo, pkgIdent) { - return true - } - if hasHyphenOrUpperASCII(lastTwo) && !hasHyphenOrUpperASCII(pkgIdent) { - lastTwo = lowerASCIIAndRemoveHyphen(lastTwo) - if strings.Contains(lastTwo, pkgIdent) { - return true - } - } - - return false -} - -func hasHyphenOrUpperASCII(s string) bool { - for i := 0; i < len(s); i++ { - b := s[i] - if b == '-' || ('A' <= b && b <= 'Z') { - return true - } - } - return false -} - -func lowerASCIIAndRemoveHyphen(s string) (ret string) { - buf := make([]byte, 0, len(s)) - for i := 0; i < len(s); i++ { - b := s[i] - switch { - case b == '-': - continue - case 'A' <= b && b <= 'Z': - buf = append(buf, b+('a'-'A')) - default: - buf = append(buf, b) - } - } - return string(buf) -} - -// canUse reports whether the package in dir is usable from filename, -// respecting the Go "internal" and "vendor" visibility rules. -func canUse(filename, dir string) bool { - // Fast path check, before any allocations. If it doesn't contain vendor - // or internal, it's not tricky: - // Note that this can false-negative on directories like "notinternal", - // but we check it correctly below. This is just a fast path. - if !strings.Contains(dir, "vendor") && !strings.Contains(dir, "internal") { - return true - } - - dirSlash := filepath.ToSlash(dir) - if !strings.Contains(dirSlash, "/vendor/") && !strings.Contains(dirSlash, "/internal/") && !strings.HasSuffix(dirSlash, "/internal") { - return true - } - // Vendor or internal directory only visible from children of parent. - // That means the path from the current directory to the target directory - // can contain ../vendor or ../internal but not ../foo/vendor or ../foo/internal - // or bar/vendor or bar/internal. - // After stripping all the leading ../, the only okay place to see vendor or internal - // is at the very beginning of the path. - absfile, err := filepath.Abs(filename) - if err != nil { - return false - } - absdir, err := filepath.Abs(dir) - if err != nil { - return false - } - rel, err := filepath.Rel(absfile, absdir) - if err != nil { - return false - } - relSlash := filepath.ToSlash(rel) - if i := strings.LastIndex(relSlash, "../"); i >= 0 { - relSlash = relSlash[i+len("../"):] - } - return !strings.Contains(relSlash, "/vendor/") && !strings.Contains(relSlash, "/internal/") && !strings.HasSuffix(relSlash, "/internal") -} - -// lastTwoComponents returns at most the last two path components -// of v, using either / or \ as the path separator. -func lastTwoComponents(v string) string { - nslash := 0 - for i := len(v) - 1; i >= 0; i-- { - if v[i] == '/' || v[i] == '\\' { - nslash++ - if nslash == 2 { - return v[i:] - } - } - } - return v -} - -type visitFn func(node ast.Node) ast.Visitor - -func (fn visitFn) Visit(node ast.Node) ast.Visitor { - return fn(node) -} - -func findImportStdlib(shortPkg string, symbols map[string]bool) (importPath string, rename, ok bool) { - for symbol := range symbols { - key := shortPkg + "." + symbol - path := stdlib[key] - if path == "" { - if key == "rand.Read" { - continue - } - return "", false, false - } - if importPath != "" && importPath != path { - // Ambiguous. Symbols pointed to different things. - return "", false, false - } - importPath = path - } - if importPath == "" && shortPkg == "rand" && symbols["Read"] { - return "crypto/rand", false, true - } - return importPath, false, importPath != "" -} diff --git a/vendor/golang.org/x/tools/imports/imports.go b/vendor/golang.org/x/tools/imports/imports.go deleted file mode 100644 index 7c6c1b6..0000000 --- a/vendor/golang.org/x/tools/imports/imports.go +++ /dev/null @@ -1,289 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:generate go run mkstdlib.go - -// Package imports implements a Go pretty-printer (like package "go/format") -// that also adds or removes import statements as necessary. -package imports - -import ( - "bufio" - "bytes" - "fmt" - "go/ast" - "go/format" - "go/parser" - "go/printer" - "go/token" - "io" - "regexp" - "strconv" - "strings" - - "golang.org/x/tools/go/ast/astutil" -) - -// Options specifies options for processing files. -type Options struct { - Fragment bool // Accept fragment of a source file (no package statement) - AllErrors bool // Report all errors (not just the first 10 on different lines) - - Comments bool // Print comments (true if nil *Options provided) - TabIndent bool // Use tabs for indent (true if nil *Options provided) - TabWidth int // Tab width (8 if nil *Options provided) - - FormatOnly bool // Disable the insertion and deletion of imports -} - -// Process formats and adjusts imports for the provided file. -// If opt is nil the defaults are used. -// -// Note that filename's directory influences which imports can be chosen, -// so it is important that filename be accurate. -// To process data ``as if'' it were in filename, pass the data as a non-nil src. -func Process(filename string, src []byte, opt *Options) ([]byte, error) { - if opt == nil { - opt = &Options{Comments: true, TabIndent: true, TabWidth: 8} - } - - fileSet := token.NewFileSet() - file, adjust, err := parse(fileSet, filename, src, opt) - if err != nil { - return nil, err - } - - if !opt.FormatOnly { - _, err = fixImports(fileSet, file, filename) - if err != nil { - return nil, err - } - } - - sortImports(fileSet, file) - imps := astutil.Imports(fileSet, file) - - var spacesBefore []string // import paths we need spaces before - for _, impSection := range imps { - // Within each block of contiguous imports, see if any - // import lines are in different group numbers. If so, - // we'll need to put a space between them so it's - // compatible with gofmt. - lastGroup := -1 - for _, importSpec := range impSection { - importPath, _ := strconv.Unquote(importSpec.Path.Value) - groupNum := importGroup(importPath) - if groupNum != lastGroup && lastGroup != -1 { - spacesBefore = append(spacesBefore, importPath) - } - lastGroup = groupNum - } - - } - - printerMode := printer.UseSpaces - if opt.TabIndent { - printerMode |= printer.TabIndent - } - printConfig := &printer.Config{Mode: printerMode, Tabwidth: opt.TabWidth} - - var buf bytes.Buffer - err = printConfig.Fprint(&buf, fileSet, file) - if err != nil { - return nil, err - } - out := buf.Bytes() - if adjust != nil { - out = adjust(src, out) - } - if len(spacesBefore) > 0 { - out = addImportSpaces(bytes.NewReader(out), spacesBefore) - } - - out, err = format.Source(out) - if err != nil { - return nil, err - } - return out, nil -} - -// parse parses src, which was read from filename, -// as a Go source file or statement list. -func parse(fset *token.FileSet, filename string, src []byte, opt *Options) (*ast.File, func(orig, src []byte) []byte, error) { - parserMode := parser.Mode(0) - if opt.Comments { - parserMode |= parser.ParseComments - } - if opt.AllErrors { - parserMode |= parser.AllErrors - } - - // Try as whole source file. - file, err := parser.ParseFile(fset, filename, src, parserMode) - if err == nil { - return file, nil, nil - } - // If the error is that the source file didn't begin with a - // package line and we accept fragmented input, fall through to - // try as a source fragment. Stop and return on any other error. - if !opt.Fragment || !strings.Contains(err.Error(), "expected 'package'") { - return nil, nil, err - } - - // If this is a declaration list, make it a source file - // by inserting a package clause. - // Insert using a ;, not a newline, so that the line numbers - // in psrc match the ones in src. - psrc := append([]byte("package main;"), src...) - file, err = parser.ParseFile(fset, filename, psrc, parserMode) - if err == nil { - // If a main function exists, we will assume this is a main - // package and leave the file. - if containsMainFunc(file) { - return file, nil, nil - } - - adjust := func(orig, src []byte) []byte { - // Remove the package clause. - // Gofmt has turned the ; into a \n. - src = src[len("package main\n"):] - return matchSpace(orig, src) - } - return file, adjust, nil - } - // If the error is that the source file didn't begin with a - // declaration, fall through to try as a statement list. - // Stop and return on any other error. - if !strings.Contains(err.Error(), "expected declaration") { - return nil, nil, err - } - - // If this is a statement list, make it a source file - // by inserting a package clause and turning the list - // into a function body. This handles expressions too. - // Insert using a ;, not a newline, so that the line numbers - // in fsrc match the ones in src. - fsrc := append(append([]byte("package p; func _() {"), src...), '}') - file, err = parser.ParseFile(fset, filename, fsrc, parserMode) - if err == nil { - adjust := func(orig, src []byte) []byte { - // Remove the wrapping. - // Gofmt has turned the ; into a \n\n. - src = src[len("package p\n\nfunc _() {"):] - src = src[:len(src)-len("}\n")] - // Gofmt has also indented the function body one level. - // Remove that indent. - src = bytes.Replace(src, []byte("\n\t"), []byte("\n"), -1) - return matchSpace(orig, src) - } - return file, adjust, nil - } - - // Failed, and out of options. - return nil, nil, err -} - -// containsMainFunc checks if a file contains a function declaration with the -// function signature 'func main()' -func containsMainFunc(file *ast.File) bool { - for _, decl := range file.Decls { - if f, ok := decl.(*ast.FuncDecl); ok { - if f.Name.Name != "main" { - continue - } - - if len(f.Type.Params.List) != 0 { - continue - } - - if f.Type.Results != nil && len(f.Type.Results.List) != 0 { - continue - } - - return true - } - } - - return false -} - -func cutSpace(b []byte) (before, middle, after []byte) { - i := 0 - for i < len(b) && (b[i] == ' ' || b[i] == '\t' || b[i] == '\n') { - i++ - } - j := len(b) - for j > 0 && (b[j-1] == ' ' || b[j-1] == '\t' || b[j-1] == '\n') { - j-- - } - if i <= j { - return b[:i], b[i:j], b[j:] - } - return nil, nil, b[j:] -} - -// matchSpace reformats src to use the same space context as orig. -// 1) If orig begins with blank lines, matchSpace inserts them at the beginning of src. -// 2) matchSpace copies the indentation of the first non-blank line in orig -// to every non-blank line in src. -// 3) matchSpace copies the trailing space from orig and uses it in place -// of src's trailing space. -func matchSpace(orig []byte, src []byte) []byte { - before, _, after := cutSpace(orig) - i := bytes.LastIndex(before, []byte{'\n'}) - before, indent := before[:i+1], before[i+1:] - - _, src, _ = cutSpace(src) - - var b bytes.Buffer - b.Write(before) - for len(src) > 0 { - line := src - if i := bytes.IndexByte(line, '\n'); i >= 0 { - line, src = line[:i+1], line[i+1:] - } else { - src = nil - } - if len(line) > 0 && line[0] != '\n' { // not blank - b.Write(indent) - } - b.Write(line) - } - b.Write(after) - return b.Bytes() -} - -var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+)"`) - -func addImportSpaces(r io.Reader, breaks []string) []byte { - var out bytes.Buffer - sc := bufio.NewScanner(r) - inImports := false - done := false - for sc.Scan() { - s := sc.Text() - - if !inImports && !done && strings.HasPrefix(s, "import") { - inImports = true - } - if inImports && (strings.HasPrefix(s, "var") || - strings.HasPrefix(s, "func") || - strings.HasPrefix(s, "const") || - strings.HasPrefix(s, "type")) { - done = true - inImports = false - } - if inImports && len(breaks) > 0 { - if m := impLine.FindStringSubmatch(s); m != nil { - if m[1] == string(breaks[0]) { - out.WriteByte('\n') - breaks = breaks[1:] - } - } - } - - fmt.Fprintln(&out, s) - } - return out.Bytes() -} diff --git a/vendor/golang.org/x/tools/imports/mkindex.go b/vendor/golang.org/x/tools/imports/mkindex.go deleted file mode 100644 index 755e239..0000000 --- a/vendor/golang.org/x/tools/imports/mkindex.go +++ /dev/null @@ -1,173 +0,0 @@ -// +build ignore - -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Command mkindex creates the file "pkgindex.go" containing an index of the Go -// standard library. The file is intended to be built as part of the imports -// package, so that the package may be used in environments where a GOROOT is -// not available (such as App Engine). -package main - -import ( - "bytes" - "fmt" - "go/ast" - "go/build" - "go/format" - "go/parser" - "go/token" - "io/ioutil" - "log" - "os" - "path" - "path/filepath" - "strings" -) - -var ( - pkgIndex = make(map[string][]pkg) - exports = make(map[string]map[string]bool) -) - -func main() { - // Don't use GOPATH. - ctx := build.Default - ctx.GOPATH = "" - - // Populate pkgIndex global from GOROOT. - for _, path := range ctx.SrcDirs() { - f, err := os.Open(path) - if err != nil { - log.Print(err) - continue - } - children, err := f.Readdir(-1) - f.Close() - if err != nil { - log.Print(err) - continue - } - for _, child := range children { - if child.IsDir() { - loadPkg(path, child.Name()) - } - } - } - // Populate exports global. - for _, ps := range pkgIndex { - for _, p := range ps { - e := loadExports(p.dir) - if e != nil { - exports[p.dir] = e - } - } - } - - // Construct source file. - var buf bytes.Buffer - fmt.Fprint(&buf, pkgIndexHead) - fmt.Fprintf(&buf, "var pkgIndexMaster = %#v\n", pkgIndex) - fmt.Fprintf(&buf, "var exportsMaster = %#v\n", exports) - src := buf.Bytes() - - // Replace main.pkg type name with pkg. - src = bytes.Replace(src, []byte("main.pkg"), []byte("pkg"), -1) - // Replace actual GOROOT with "/go". - src = bytes.Replace(src, []byte(ctx.GOROOT), []byte("/go"), -1) - // Add some line wrapping. - src = bytes.Replace(src, []byte("}, "), []byte("},\n"), -1) - src = bytes.Replace(src, []byte("true, "), []byte("true,\n"), -1) - - var err error - src, err = format.Source(src) - if err != nil { - log.Fatal(err) - } - - // Write out source file. - err = ioutil.WriteFile("pkgindex.go", src, 0644) - if err != nil { - log.Fatal(err) - } -} - -const pkgIndexHead = `package imports - -func init() { - pkgIndexOnce.Do(func() { - pkgIndex.m = pkgIndexMaster - }) - loadExports = func(dir string) map[string]bool { - return exportsMaster[dir] - } -} -` - -type pkg struct { - importpath string // full pkg import path, e.g. "net/http" - dir string // absolute file path to pkg directory e.g. "/usr/lib/go/src/fmt" -} - -var fset = token.NewFileSet() - -func loadPkg(root, importpath string) { - shortName := path.Base(importpath) - if shortName == "testdata" { - return - } - - dir := filepath.Join(root, importpath) - pkgIndex[shortName] = append(pkgIndex[shortName], pkg{ - importpath: importpath, - dir: dir, - }) - - pkgDir, err := os.Open(dir) - if err != nil { - return - } - children, err := pkgDir.Readdir(-1) - pkgDir.Close() - if err != nil { - return - } - for _, child := range children { - name := child.Name() - if name == "" { - continue - } - if c := name[0]; c == '.' || ('0' <= c && c <= '9') { - continue - } - if child.IsDir() { - loadPkg(root, filepath.Join(importpath, name)) - } - } -} - -func loadExports(dir string) map[string]bool { - exports := make(map[string]bool) - buildPkg, err := build.ImportDir(dir, 0) - if err != nil { - if strings.Contains(err.Error(), "no buildable Go source files in") { - return nil - } - log.Printf("could not import %q: %v", dir, err) - return nil - } - for _, file := range buildPkg.GoFiles { - f, err := parser.ParseFile(fset, filepath.Join(dir, file), nil, 0) - if err != nil { - log.Printf("could not parse %q: %v", file, err) - continue - } - for name := range f.Scope.Objects { - if ast.IsExported(name) { - exports[name] = true - } - } - } - return exports -} diff --git a/vendor/golang.org/x/tools/imports/mkstdlib.go b/vendor/golang.org/x/tools/imports/mkstdlib.go deleted file mode 100644 index 62f3321..0000000 --- a/vendor/golang.org/x/tools/imports/mkstdlib.go +++ /dev/null @@ -1,102 +0,0 @@ -// +build ignore - -// mkstdlib generates the zstdlib.go file, containing the Go standard -// library API symbols. It's baked into the binary to avoid scanning -// GOPATH in the common case. -package main - -import ( - "bufio" - "bytes" - "fmt" - "go/format" - "io" - "io/ioutil" - "log" - "os" - "path" - "path/filepath" - "regexp" - "sort" - "strings" -) - -func mustOpen(name string) io.Reader { - f, err := os.Open(name) - if err != nil { - log.Fatal(err) - } - return f -} - -func api(base string) string { - return filepath.Join(os.Getenv("GOROOT"), "api", base) -} - -var sym = regexp.MustCompile(`^pkg (\S+).*?, (?:var|func|type|const) ([A-Z]\w*)`) - -func main() { - var buf bytes.Buffer - outf := func(format string, args ...interface{}) { - fmt.Fprintf(&buf, format, args...) - } - outf("// AUTO-GENERATED BY mkstdlib.go\n\n") - outf("package imports\n") - outf("var stdlib = map[string]string{\n") - f := io.MultiReader( - mustOpen(api("go1.txt")), - mustOpen(api("go1.1.txt")), - mustOpen(api("go1.2.txt")), - mustOpen(api("go1.3.txt")), - mustOpen(api("go1.4.txt")), - mustOpen(api("go1.5.txt")), - mustOpen(api("go1.6.txt")), - ) - sc := bufio.NewScanner(f) - fullImport := map[string]string{} // "zip.NewReader" => "archive/zip" - ambiguous := map[string]bool{} - var keys []string - for sc.Scan() { - l := sc.Text() - has := func(v string) bool { return strings.Contains(l, v) } - if has("struct, ") || has("interface, ") || has(", method (") { - continue - } - if m := sym.FindStringSubmatch(l); m != nil { - full := m[1] - key := path.Base(full) + "." + m[2] - if exist, ok := fullImport[key]; ok { - if exist != full { - ambiguous[key] = true - } - } else { - fullImport[key] = full - keys = append(keys, key) - } - } - } - if err := sc.Err(); err != nil { - log.Fatal(err) - } - sort.Strings(keys) - for _, key := range keys { - if ambiguous[key] { - outf("\t// %q is ambiguous\n", key) - } else { - outf("\t%q: %q,\n", key, fullImport[key]) - } - } - outf("\n") - for _, sym := range [...]string{"Alignof", "ArbitraryType", "Offsetof", "Pointer", "Sizeof"} { - outf("\t%q: %q,\n", "unsafe."+sym, "unsafe") - } - outf("}\n") - fmtbuf, err := format.Source(buf.Bytes()) - if err != nil { - log.Fatal(err) - } - err = ioutil.WriteFile("zstdlib.go", fmtbuf, 0666) - if err != nil { - log.Fatal(err) - } -} diff --git a/vendor/golang.org/x/tools/imports/sortimports.go b/vendor/golang.org/x/tools/imports/sortimports.go deleted file mode 100644 index 653afc5..0000000 --- a/vendor/golang.org/x/tools/imports/sortimports.go +++ /dev/null @@ -1,212 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Hacked up copy of go/ast/import.go - -package imports - -import ( - "go/ast" - "go/token" - "sort" - "strconv" -) - -// sortImports sorts runs of consecutive import lines in import blocks in f. -// It also removes duplicate imports when it is possible to do so without data loss. -func sortImports(fset *token.FileSet, f *ast.File) { - for i, d := range f.Decls { - d, ok := d.(*ast.GenDecl) - if !ok || d.Tok != token.IMPORT { - // Not an import declaration, so we're done. - // Imports are always first. - break - } - - if len(d.Specs) == 0 { - // Empty import block, remove it. - f.Decls = append(f.Decls[:i], f.Decls[i+1:]...) - } - - if !d.Lparen.IsValid() { - // Not a block: sorted by default. - continue - } - - // Identify and sort runs of specs on successive lines. - i := 0 - specs := d.Specs[:0] - for j, s := range d.Specs { - if j > i && fset.Position(s.Pos()).Line > 1+fset.Position(d.Specs[j-1].End()).Line { - // j begins a new run. End this one. - specs = append(specs, sortSpecs(fset, f, d.Specs[i:j])...) - i = j - } - } - specs = append(specs, sortSpecs(fset, f, d.Specs[i:])...) - d.Specs = specs - - // Deduping can leave a blank line before the rparen; clean that up. - if len(d.Specs) > 0 { - lastSpec := d.Specs[len(d.Specs)-1] - lastLine := fset.Position(lastSpec.Pos()).Line - if rParenLine := fset.Position(d.Rparen).Line; rParenLine > lastLine+1 { - fset.File(d.Rparen).MergeLine(rParenLine - 1) - } - } - } -} - -func importPath(s ast.Spec) string { - t, err := strconv.Unquote(s.(*ast.ImportSpec).Path.Value) - if err == nil { - return t - } - return "" -} - -func importName(s ast.Spec) string { - n := s.(*ast.ImportSpec).Name - if n == nil { - return "" - } - return n.Name -} - -func importComment(s ast.Spec) string { - c := s.(*ast.ImportSpec).Comment - if c == nil { - return "" - } - return c.Text() -} - -// collapse indicates whether prev may be removed, leaving only next. -func collapse(prev, next ast.Spec) bool { - if importPath(next) != importPath(prev) || importName(next) != importName(prev) { - return false - } - return prev.(*ast.ImportSpec).Comment == nil -} - -type posSpan struct { - Start token.Pos - End token.Pos -} - -func sortSpecs(fset *token.FileSet, f *ast.File, specs []ast.Spec) []ast.Spec { - // Can't short-circuit here even if specs are already sorted, - // since they might yet need deduplication. - // A lone import, however, may be safely ignored. - if len(specs) <= 1 { - return specs - } - - // Record positions for specs. - pos := make([]posSpan, len(specs)) - for i, s := range specs { - pos[i] = posSpan{s.Pos(), s.End()} - } - - // Identify comments in this range. - // Any comment from pos[0].Start to the final line counts. - lastLine := fset.Position(pos[len(pos)-1].End).Line - cstart := len(f.Comments) - cend := len(f.Comments) - for i, g := range f.Comments { - if g.Pos() < pos[0].Start { - continue - } - if i < cstart { - cstart = i - } - if fset.Position(g.End()).Line > lastLine { - cend = i - break - } - } - comments := f.Comments[cstart:cend] - - // Assign each comment to the import spec preceding it. - importComment := map[*ast.ImportSpec][]*ast.CommentGroup{} - specIndex := 0 - for _, g := range comments { - for specIndex+1 < len(specs) && pos[specIndex+1].Start <= g.Pos() { - specIndex++ - } - s := specs[specIndex].(*ast.ImportSpec) - importComment[s] = append(importComment[s], g) - } - - // Sort the import specs by import path. - // Remove duplicates, when possible without data loss. - // Reassign the import paths to have the same position sequence. - // Reassign each comment to abut the end of its spec. - // Sort the comments by new position. - sort.Sort(byImportSpec(specs)) - - // Dedup. Thanks to our sorting, we can just consider - // adjacent pairs of imports. - deduped := specs[:0] - for i, s := range specs { - if i == len(specs)-1 || !collapse(s, specs[i+1]) { - deduped = append(deduped, s) - } else { - p := s.Pos() - fset.File(p).MergeLine(fset.Position(p).Line) - } - } - specs = deduped - - // Fix up comment positions - for i, s := range specs { - s := s.(*ast.ImportSpec) - if s.Name != nil { - s.Name.NamePos = pos[i].Start - } - s.Path.ValuePos = pos[i].Start - s.EndPos = pos[i].End - for _, g := range importComment[s] { - for _, c := range g.List { - c.Slash = pos[i].End - } - } - } - - sort.Sort(byCommentPos(comments)) - - return specs -} - -type byImportSpec []ast.Spec // slice of *ast.ImportSpec - -func (x byImportSpec) Len() int { return len(x) } -func (x byImportSpec) Swap(i, j int) { x[i], x[j] = x[j], x[i] } -func (x byImportSpec) Less(i, j int) bool { - ipath := importPath(x[i]) - jpath := importPath(x[j]) - - igroup := importGroup(ipath) - jgroup := importGroup(jpath) - if igroup != jgroup { - return igroup < jgroup - } - - if ipath != jpath { - return ipath < jpath - } - iname := importName(x[i]) - jname := importName(x[j]) - - if iname != jname { - return iname < jname - } - return importComment(x[i]) < importComment(x[j]) -} - -type byCommentPos []*ast.CommentGroup - -func (x byCommentPos) Len() int { return len(x) } -func (x byCommentPos) Swap(i, j int) { x[i], x[j] = x[j], x[i] } -func (x byCommentPos) Less(i, j int) bool { return x[i].Pos() < x[j].Pos() } diff --git a/vendor/golang.org/x/tools/imports/zstdlib.go b/vendor/golang.org/x/tools/imports/zstdlib.go deleted file mode 100644 index eb89b2d..0000000 --- a/vendor/golang.org/x/tools/imports/zstdlib.go +++ /dev/null @@ -1,9162 +0,0 @@ -// AUTO-GENERATED BY mkstdlib.go - -package imports - -var stdlib = map[string]string{ - "adler32.Checksum": "hash/adler32", - "adler32.New": "hash/adler32", - "adler32.Size": "hash/adler32", - "aes.BlockSize": "crypto/aes", - "aes.KeySizeError": "crypto/aes", - "aes.NewCipher": "crypto/aes", - "ascii85.CorruptInputError": "encoding/ascii85", - "ascii85.Decode": "encoding/ascii85", - "ascii85.Encode": "encoding/ascii85", - "ascii85.MaxEncodedLen": "encoding/ascii85", - "ascii85.NewDecoder": "encoding/ascii85", - "ascii85.NewEncoder": "encoding/ascii85", - "asn1.BitString": "encoding/asn1", - "asn1.ClassApplication": "encoding/asn1", - "asn1.ClassContextSpecific": "encoding/asn1", - "asn1.ClassPrivate": "encoding/asn1", - "asn1.ClassUniversal": "encoding/asn1", - "asn1.Enumerated": "encoding/asn1", - "asn1.Flag": "encoding/asn1", - "asn1.Marshal": "encoding/asn1", - "asn1.ObjectIdentifier": "encoding/asn1", - "asn1.RawContent": "encoding/asn1", - "asn1.RawValue": "encoding/asn1", - "asn1.StructuralError": "encoding/asn1", - "asn1.SyntaxError": "encoding/asn1", - "asn1.TagBitString": "encoding/asn1", - "asn1.TagBoolean": "encoding/asn1", - "asn1.TagEnum": "encoding/asn1", - "asn1.TagGeneralString": "encoding/asn1", - "asn1.TagGeneralizedTime": "encoding/asn1", - "asn1.TagIA5String": "encoding/asn1", - "asn1.TagInteger": "encoding/asn1", - "asn1.TagOID": "encoding/asn1", - "asn1.TagOctetString": "encoding/asn1", - "asn1.TagPrintableString": "encoding/asn1", - "asn1.TagSequence": "encoding/asn1", - "asn1.TagSet": "encoding/asn1", - "asn1.TagT61String": "encoding/asn1", - "asn1.TagUTCTime": "encoding/asn1", - "asn1.TagUTF8String": "encoding/asn1", - "asn1.Unmarshal": "encoding/asn1", - "asn1.UnmarshalWithParams": "encoding/asn1", - "ast.ArrayType": "go/ast", - "ast.AssignStmt": "go/ast", - "ast.Bad": "go/ast", - "ast.BadDecl": "go/ast", - "ast.BadExpr": "go/ast", - "ast.BadStmt": "go/ast", - "ast.BasicLit": "go/ast", - "ast.BinaryExpr": "go/ast", - "ast.BlockStmt": "go/ast", - "ast.BranchStmt": "go/ast", - "ast.CallExpr": "go/ast", - "ast.CaseClause": "go/ast", - "ast.ChanDir": "go/ast", - "ast.ChanType": "go/ast", - "ast.CommClause": "go/ast", - "ast.Comment": "go/ast", - "ast.CommentGroup": "go/ast", - "ast.CommentMap": "go/ast", - "ast.CompositeLit": "go/ast", - "ast.Con": "go/ast", - "ast.DeclStmt": "go/ast", - "ast.DeferStmt": "go/ast", - "ast.Ellipsis": "go/ast", - "ast.EmptyStmt": "go/ast", - "ast.ExprStmt": "go/ast", - "ast.Field": "go/ast", - "ast.FieldFilter": "go/ast", - "ast.FieldList": "go/ast", - "ast.File": "go/ast", - "ast.FileExports": "go/ast", - "ast.Filter": "go/ast", - "ast.FilterDecl": "go/ast", - "ast.FilterFile": "go/ast", - "ast.FilterFuncDuplicates": "go/ast", - "ast.FilterImportDuplicates": "go/ast", - "ast.FilterPackage": "go/ast", - "ast.FilterUnassociatedComments": "go/ast", - "ast.ForStmt": "go/ast", - "ast.Fprint": "go/ast", - "ast.Fun": "go/ast", - "ast.FuncDecl": "go/ast", - "ast.FuncLit": "go/ast", - "ast.FuncType": "go/ast", - "ast.GenDecl": "go/ast", - "ast.GoStmt": "go/ast", - "ast.Ident": "go/ast", - "ast.IfStmt": "go/ast", - "ast.ImportSpec": "go/ast", - "ast.Importer": "go/ast", - "ast.IncDecStmt": "go/ast", - "ast.IndexExpr": "go/ast", - "ast.Inspect": "go/ast", - "ast.InterfaceType": "go/ast", - "ast.IsExported": "go/ast", - "ast.KeyValueExpr": "go/ast", - "ast.LabeledStmt": "go/ast", - "ast.Lbl": "go/ast", - "ast.MapType": "go/ast", - "ast.MergeMode": "go/ast", - "ast.MergePackageFiles": "go/ast", - "ast.NewCommentMap": "go/ast", - "ast.NewIdent": "go/ast", - "ast.NewObj": "go/ast", - "ast.NewPackage": "go/ast", - "ast.NewScope": "go/ast", - "ast.Node": "go/ast", - "ast.NotNilFilter": "go/ast", - "ast.ObjKind": "go/ast", - "ast.Object": "go/ast", - "ast.Package": "go/ast", - "ast.PackageExports": "go/ast", - "ast.ParenExpr": "go/ast", - "ast.Pkg": "go/ast", - "ast.Print": "go/ast", - "ast.RECV": "go/ast", - "ast.RangeStmt": "go/ast", - "ast.ReturnStmt": "go/ast", - "ast.SEND": "go/ast", - "ast.Scope": "go/ast", - "ast.SelectStmt": "go/ast", - "ast.SelectorExpr": "go/ast", - "ast.SendStmt": "go/ast", - "ast.SliceExpr": "go/ast", - "ast.SortImports": "go/ast", - "ast.StarExpr": "go/ast", - "ast.StructType": "go/ast", - "ast.SwitchStmt": "go/ast", - "ast.Typ": "go/ast", - "ast.TypeAssertExpr": "go/ast", - "ast.TypeSpec": "go/ast", - "ast.TypeSwitchStmt": "go/ast", - "ast.UnaryExpr": "go/ast", - "ast.ValueSpec": "go/ast", - "ast.Var": "go/ast", - "ast.Visitor": "go/ast", - "ast.Walk": "go/ast", - "atomic.AddInt32": "sync/atomic", - "atomic.AddInt64": "sync/atomic", - "atomic.AddUint32": "sync/atomic", - "atomic.AddUint64": "sync/atomic", - "atomic.AddUintptr": "sync/atomic", - "atomic.CompareAndSwapInt32": "sync/atomic", - "atomic.CompareAndSwapInt64": "sync/atomic", - "atomic.CompareAndSwapPointer": "sync/atomic", - "atomic.CompareAndSwapUint32": "sync/atomic", - "atomic.CompareAndSwapUint64": "sync/atomic", - "atomic.CompareAndSwapUintptr": "sync/atomic", - "atomic.LoadInt32": "sync/atomic", - "atomic.LoadInt64": "sync/atomic", - "atomic.LoadPointer": "sync/atomic", - "atomic.LoadUint32": "sync/atomic", - "atomic.LoadUint64": "sync/atomic", - "atomic.LoadUintptr": "sync/atomic", - "atomic.StoreInt32": "sync/atomic", - "atomic.StoreInt64": "sync/atomic", - "atomic.StorePointer": "sync/atomic", - "atomic.StoreUint32": "sync/atomic", - "atomic.StoreUint64": "sync/atomic", - "atomic.StoreUintptr": "sync/atomic", - "atomic.SwapInt32": "sync/atomic", - "atomic.SwapInt64": "sync/atomic", - "atomic.SwapPointer": "sync/atomic", - "atomic.SwapUint32": "sync/atomic", - "atomic.SwapUint64": "sync/atomic", - "atomic.SwapUintptr": "sync/atomic", - "atomic.Value": "sync/atomic", - "base32.CorruptInputError": "encoding/base32", - "base32.Encoding": "encoding/base32", - "base32.HexEncoding": "encoding/base32", - "base32.NewDecoder": "encoding/base32", - "base32.NewEncoder": "encoding/base32", - "base32.NewEncoding": "encoding/base32", - "base32.StdEncoding": "encoding/base32", - "base64.CorruptInputError": "encoding/base64", - "base64.Encoding": "encoding/base64", - "base64.NewDecoder": "encoding/base64", - "base64.NewEncoder": "encoding/base64", - "base64.NewEncoding": "encoding/base64", - "base64.NoPadding": "encoding/base64", - "base64.RawStdEncoding": "encoding/base64", - "base64.RawURLEncoding": "encoding/base64", - "base64.StdEncoding": "encoding/base64", - "base64.StdPadding": "encoding/base64", - "base64.URLEncoding": "encoding/base64", - "big.Above": "math/big", - "big.Accuracy": "math/big", - "big.AwayFromZero": "math/big", - "big.Below": "math/big", - "big.ErrNaN": "math/big", - "big.Exact": "math/big", - "big.Float": "math/big", - "big.Int": "math/big", - "big.Jacobi": "math/big", - "big.MaxBase": "math/big", - "big.MaxExp": "math/big", - "big.MaxPrec": "math/big", - "big.MinExp": "math/big", - "big.NewFloat": "math/big", - "big.NewInt": "math/big", - "big.NewRat": "math/big", - "big.ParseFloat": "math/big", - "big.Rat": "math/big", - "big.RoundingMode": "math/big", - "big.ToNearestAway": "math/big", - "big.ToNearestEven": "math/big", - "big.ToNegativeInf": "math/big", - "big.ToPositiveInf": "math/big", - "big.ToZero": "math/big", - "big.Word": "math/big", - "binary.BigEndian": "encoding/binary", - "binary.ByteOrder": "encoding/binary", - "binary.LittleEndian": "encoding/binary", - "binary.MaxVarintLen16": "encoding/binary", - "binary.MaxVarintLen32": "encoding/binary", - "binary.MaxVarintLen64": "encoding/binary", - "binary.PutUvarint": "encoding/binary", - "binary.PutVarint": "encoding/binary", - "binary.Read": "encoding/binary", - "binary.ReadUvarint": "encoding/binary", - "binary.ReadVarint": "encoding/binary", - "binary.Size": "encoding/binary", - "binary.Uvarint": "encoding/binary", - "binary.Varint": "encoding/binary", - "binary.Write": "encoding/binary", - "bufio.ErrAdvanceTooFar": "bufio", - "bufio.ErrBufferFull": "bufio", - "bufio.ErrFinalToken": "bufio", - "bufio.ErrInvalidUnreadByte": "bufio", - "bufio.ErrInvalidUnreadRune": "bufio", - "bufio.ErrNegativeAdvance": "bufio", - "bufio.ErrNegativeCount": "bufio", - "bufio.ErrTooLong": "bufio", - "bufio.MaxScanTokenSize": "bufio", - "bufio.NewReadWriter": "bufio", - "bufio.NewReader": "bufio", - "bufio.NewReaderSize": "bufio", - "bufio.NewScanner": "bufio", - "bufio.NewWriter": "bufio", - "bufio.NewWriterSize": "bufio", - "bufio.ReadWriter": "bufio", - "bufio.Reader": "bufio", - "bufio.ScanBytes": "bufio", - "bufio.ScanLines": "bufio", - "bufio.ScanRunes": "bufio", - "bufio.ScanWords": "bufio", - "bufio.Scanner": "bufio", - "bufio.SplitFunc": "bufio", - "bufio.Writer": "bufio", - "build.AllowBinary": "go/build", - "build.ArchChar": "go/build", - "build.Context": "go/build", - "build.Default": "go/build", - "build.FindOnly": "go/build", - "build.IgnoreVendor": "go/build", - "build.Import": "go/build", - "build.ImportComment": "go/build", - "build.ImportDir": "go/build", - "build.ImportMode": "go/build", - "build.IsLocalImport": "go/build", - "build.MultiplePackageError": "go/build", - "build.NoGoError": "go/build", - "build.Package": "go/build", - "build.ToolDir": "go/build", - "bytes.Buffer": "bytes", - "bytes.Compare": "bytes", - "bytes.Contains": "bytes", - "bytes.Count": "bytes", - "bytes.Equal": "bytes", - "bytes.EqualFold": "bytes", - "bytes.ErrTooLarge": "bytes", - "bytes.Fields": "bytes", - "bytes.FieldsFunc": "bytes", - "bytes.HasPrefix": "bytes", - "bytes.HasSuffix": "bytes", - "bytes.Index": "bytes", - "bytes.IndexAny": "bytes", - "bytes.IndexByte": "bytes", - "bytes.IndexFunc": "bytes", - "bytes.IndexRune": "bytes", - "bytes.Join": "bytes", - "bytes.LastIndex": "bytes", - "bytes.LastIndexAny": "bytes", - "bytes.LastIndexByte": "bytes", - "bytes.LastIndexFunc": "bytes", - "bytes.Map": "bytes", - "bytes.MinRead": "bytes", - "bytes.NewBuffer": "bytes", - "bytes.NewBufferString": "bytes", - "bytes.NewReader": "bytes", - "bytes.Reader": "bytes", - "bytes.Repeat": "bytes", - "bytes.Replace": "bytes", - "bytes.Runes": "bytes", - "bytes.Split": "bytes", - "bytes.SplitAfter": "bytes", - "bytes.SplitAfterN": "bytes", - "bytes.SplitN": "bytes", - "bytes.Title": "bytes", - "bytes.ToLower": "bytes", - "bytes.ToLowerSpecial": "bytes", - "bytes.ToTitle": "bytes", - "bytes.ToTitleSpecial": "bytes", - "bytes.ToUpper": "bytes", - "bytes.ToUpperSpecial": "bytes", - "bytes.Trim": "bytes", - "bytes.TrimFunc": "bytes", - "bytes.TrimLeft": "bytes", - "bytes.TrimLeftFunc": "bytes", - "bytes.TrimPrefix": "bytes", - "bytes.TrimRight": "bytes", - "bytes.TrimRightFunc": "bytes", - "bytes.TrimSpace": "bytes", - "bytes.TrimSuffix": "bytes", - "bzip2.NewReader": "compress/bzip2", - "bzip2.StructuralError": "compress/bzip2", - "cgi.Handler": "net/http/cgi", - "cgi.Request": "net/http/cgi", - "cgi.RequestFromMap": "net/http/cgi", - "cgi.Serve": "net/http/cgi", - "cipher.AEAD": "crypto/cipher", - "cipher.Block": "crypto/cipher", - "cipher.BlockMode": "crypto/cipher", - "cipher.NewCBCDecrypter": "crypto/cipher", - "cipher.NewCBCEncrypter": "crypto/cipher", - "cipher.NewCFBDecrypter": "crypto/cipher", - "cipher.NewCFBEncrypter": "crypto/cipher", - "cipher.NewCTR": "crypto/cipher", - "cipher.NewGCM": "crypto/cipher", - "cipher.NewGCMWithNonceSize": "crypto/cipher", - "cipher.NewOFB": "crypto/cipher", - "cipher.Stream": "crypto/cipher", - "cipher.StreamReader": "crypto/cipher", - "cipher.StreamWriter": "crypto/cipher", - "cmplx.Abs": "math/cmplx", - "cmplx.Acos": "math/cmplx", - "cmplx.Acosh": "math/cmplx", - "cmplx.Asin": "math/cmplx", - "cmplx.Asinh": "math/cmplx", - "cmplx.Atan": "math/cmplx", - "cmplx.Atanh": "math/cmplx", - "cmplx.Conj": "math/cmplx", - "cmplx.Cos": "math/cmplx", - "cmplx.Cosh": "math/cmplx", - "cmplx.Cot": "math/cmplx", - "cmplx.Exp": "math/cmplx", - "cmplx.Inf": "math/cmplx", - "cmplx.IsInf": "math/cmplx", - "cmplx.IsNaN": "math/cmplx", - "cmplx.Log": "math/cmplx", - "cmplx.Log10": "math/cmplx", - "cmplx.NaN": "math/cmplx", - "cmplx.Phase": "math/cmplx", - "cmplx.Polar": "math/cmplx", - "cmplx.Pow": "math/cmplx", - "cmplx.Rect": "math/cmplx", - "cmplx.Sin": "math/cmplx", - "cmplx.Sinh": "math/cmplx", - "cmplx.Sqrt": "math/cmplx", - "cmplx.Tan": "math/cmplx", - "cmplx.Tanh": "math/cmplx", - "color.Alpha": "image/color", - "color.Alpha16": "image/color", - "color.Alpha16Model": "image/color", - "color.AlphaModel": "image/color", - "color.Black": "image/color", - "color.CMYK": "image/color", - "color.CMYKModel": "image/color", - "color.CMYKToRGB": "image/color", - "color.Color": "image/color", - "color.Gray": "image/color", - "color.Gray16": "image/color", - "color.Gray16Model": "image/color", - "color.GrayModel": "image/color", - "color.Model": "image/color", - "color.ModelFunc": "image/color", - "color.NRGBA": "image/color", - "color.NRGBA64": "image/color", - "color.NRGBA64Model": "image/color", - "color.NRGBAModel": "image/color", - "color.NYCbCrA": "image/color", - "color.NYCbCrAModel": "image/color", - "color.Opaque": "image/color", - "color.Palette": "image/color", - "color.RGBA": "image/color", - "color.RGBA64": "image/color", - "color.RGBA64Model": "image/color", - "color.RGBAModel": "image/color", - "color.RGBToCMYK": "image/color", - "color.RGBToYCbCr": "image/color", - "color.Transparent": "image/color", - "color.White": "image/color", - "color.YCbCr": "image/color", - "color.YCbCrModel": "image/color", - "color.YCbCrToRGB": "image/color", - "constant.BinaryOp": "go/constant", - "constant.BitLen": "go/constant", - "constant.Bool": "go/constant", - "constant.BoolVal": "go/constant", - "constant.Bytes": "go/constant", - "constant.Compare": "go/constant", - "constant.Complex": "go/constant", - "constant.Denom": "go/constant", - "constant.Float": "go/constant", - "constant.Float32Val": "go/constant", - "constant.Float64Val": "go/constant", - "constant.Imag": "go/constant", - "constant.Int": "go/constant", - "constant.Int64Val": "go/constant", - "constant.Kind": "go/constant", - "constant.MakeBool": "go/constant", - "constant.MakeFloat64": "go/constant", - "constant.MakeFromBytes": "go/constant", - "constant.MakeFromLiteral": "go/constant", - "constant.MakeImag": "go/constant", - "constant.MakeInt64": "go/constant", - "constant.MakeString": "go/constant", - "constant.MakeUint64": "go/constant", - "constant.MakeUnknown": "go/constant", - "constant.Num": "go/constant", - "constant.Real": "go/constant", - "constant.Shift": "go/constant", - "constant.Sign": "go/constant", - "constant.String": "go/constant", - "constant.StringVal": "go/constant", - "constant.ToComplex": "go/constant", - "constant.ToFloat": "go/constant", - "constant.ToInt": "go/constant", - "constant.Uint64Val": "go/constant", - "constant.UnaryOp": "go/constant", - "constant.Unknown": "go/constant", - "cookiejar.Jar": "net/http/cookiejar", - "cookiejar.New": "net/http/cookiejar", - "cookiejar.Options": "net/http/cookiejar", - "cookiejar.PublicSuffixList": "net/http/cookiejar", - "crc32.Castagnoli": "hash/crc32", - "crc32.Checksum": "hash/crc32", - "crc32.ChecksumIEEE": "hash/crc32", - "crc32.IEEE": "hash/crc32", - "crc32.IEEETable": "hash/crc32", - "crc32.Koopman": "hash/crc32", - "crc32.MakeTable": "hash/crc32", - "crc32.New": "hash/crc32", - "crc32.NewIEEE": "hash/crc32", - "crc32.Size": "hash/crc32", - "crc32.Table": "hash/crc32", - "crc32.Update": "hash/crc32", - "crc64.Checksum": "hash/crc64", - "crc64.ECMA": "hash/crc64", - "crc64.ISO": "hash/crc64", - "crc64.MakeTable": "hash/crc64", - "crc64.New": "hash/crc64", - "crc64.Size": "hash/crc64", - "crc64.Table": "hash/crc64", - "crc64.Update": "hash/crc64", - "crypto.Decrypter": "crypto", - "crypto.DecrypterOpts": "crypto", - "crypto.Hash": "crypto", - "crypto.MD4": "crypto", - "crypto.MD5": "crypto", - "crypto.MD5SHA1": "crypto", - "crypto.PrivateKey": "crypto", - "crypto.PublicKey": "crypto", - "crypto.RIPEMD160": "crypto", - "crypto.RegisterHash": "crypto", - "crypto.SHA1": "crypto", - "crypto.SHA224": "crypto", - "crypto.SHA256": "crypto", - "crypto.SHA384": "crypto", - "crypto.SHA3_224": "crypto", - "crypto.SHA3_256": "crypto", - "crypto.SHA3_384": "crypto", - "crypto.SHA3_512": "crypto", - "crypto.SHA512": "crypto", - "crypto.SHA512_224": "crypto", - "crypto.SHA512_256": "crypto", - "crypto.Signer": "crypto", - "crypto.SignerOpts": "crypto", - "csv.ErrBareQuote": "encoding/csv", - "csv.ErrFieldCount": "encoding/csv", - "csv.ErrQuote": "encoding/csv", - "csv.ErrTrailingComma": "encoding/csv", - "csv.NewReader": "encoding/csv", - "csv.NewWriter": "encoding/csv", - "csv.ParseError": "encoding/csv", - "csv.Reader": "encoding/csv", - "csv.Writer": "encoding/csv", - "debug.FreeOSMemory": "runtime/debug", - "debug.GCStats": "runtime/debug", - "debug.PrintStack": "runtime/debug", - "debug.ReadGCStats": "runtime/debug", - "debug.SetGCPercent": "runtime/debug", - "debug.SetMaxStack": "runtime/debug", - "debug.SetMaxThreads": "runtime/debug", - "debug.SetPanicOnFault": "runtime/debug", - "debug.SetTraceback": "runtime/debug", - "debug.Stack": "runtime/debug", - "debug.WriteHeapDump": "runtime/debug", - "des.BlockSize": "crypto/des", - "des.KeySizeError": "crypto/des", - "des.NewCipher": "crypto/des", - "des.NewTripleDESCipher": "crypto/des", - "doc.AllDecls": "go/doc", - "doc.AllMethods": "go/doc", - "doc.Example": "go/doc", - "doc.Examples": "go/doc", - "doc.Filter": "go/doc", - "doc.Func": "go/doc", - "doc.IllegalPrefixes": "go/doc", - "doc.Mode": "go/doc", - "doc.New": "go/doc", - "doc.Note": "go/doc", - "doc.Package": "go/doc", - "doc.Synopsis": "go/doc", - "doc.ToHTML": "go/doc", - "doc.ToText": "go/doc", - "doc.Type": "go/doc", - "doc.Value": "go/doc", - "draw.Draw": "image/draw", - "draw.DrawMask": "image/draw", - "draw.Drawer": "image/draw", - "draw.FloydSteinberg": "image/draw", - "draw.Image": "image/draw", - "draw.Op": "image/draw", - "draw.Over": "image/draw", - "draw.Quantizer": "image/draw", - "draw.Src": "image/draw", - "driver.Bool": "database/sql/driver", - "driver.ColumnConverter": "database/sql/driver", - "driver.Conn": "database/sql/driver", - "driver.DefaultParameterConverter": "database/sql/driver", - "driver.Driver": "database/sql/driver", - "driver.ErrBadConn": "database/sql/driver", - "driver.ErrSkip": "database/sql/driver", - "driver.Execer": "database/sql/driver", - "driver.Int32": "database/sql/driver", - "driver.IsScanValue": "database/sql/driver", - "driver.IsValue": "database/sql/driver", - "driver.NotNull": "database/sql/driver", - "driver.Null": "database/sql/driver", - "driver.Queryer": "database/sql/driver", - "driver.Result": "database/sql/driver", - "driver.ResultNoRows": "database/sql/driver", - "driver.Rows": "database/sql/driver", - "driver.RowsAffected": "database/sql/driver", - "driver.Stmt": "database/sql/driver", - "driver.String": "database/sql/driver", - "driver.Tx": "database/sql/driver", - "driver.Value": "database/sql/driver", - "driver.ValueConverter": "database/sql/driver", - "driver.Valuer": "database/sql/driver", - "dsa.ErrInvalidPublicKey": "crypto/dsa", - "dsa.GenerateKey": "crypto/dsa", - "dsa.GenerateParameters": "crypto/dsa", - "dsa.L1024N160": "crypto/dsa", - "dsa.L2048N224": "crypto/dsa", - "dsa.L2048N256": "crypto/dsa", - "dsa.L3072N256": "crypto/dsa", - "dsa.ParameterSizes": "crypto/dsa", - "dsa.Parameters": "crypto/dsa", - "dsa.PrivateKey": "crypto/dsa", - "dsa.PublicKey": "crypto/dsa", - "dsa.Sign": "crypto/dsa", - "dsa.Verify": "crypto/dsa", - "dwarf.AddrType": "debug/dwarf", - "dwarf.ArrayType": "debug/dwarf", - "dwarf.Attr": "debug/dwarf", - "dwarf.AttrAbstractOrigin": "debug/dwarf", - "dwarf.AttrAccessibility": "debug/dwarf", - "dwarf.AttrAddrClass": "debug/dwarf", - "dwarf.AttrAllocated": "debug/dwarf", - "dwarf.AttrArtificial": "debug/dwarf", - "dwarf.AttrAssociated": "debug/dwarf", - "dwarf.AttrBaseTypes": "debug/dwarf", - "dwarf.AttrBitOffset": "debug/dwarf", - "dwarf.AttrBitSize": "debug/dwarf", - "dwarf.AttrByteSize": "debug/dwarf", - "dwarf.AttrCallColumn": "debug/dwarf", - "dwarf.AttrCallFile": "debug/dwarf", - "dwarf.AttrCallLine": "debug/dwarf", - "dwarf.AttrCalling": "debug/dwarf", - "dwarf.AttrCommonRef": "debug/dwarf", - "dwarf.AttrCompDir": "debug/dwarf", - "dwarf.AttrConstValue": "debug/dwarf", - "dwarf.AttrContainingType": "debug/dwarf", - "dwarf.AttrCount": "debug/dwarf", - "dwarf.AttrDataLocation": "debug/dwarf", - "dwarf.AttrDataMemberLoc": "debug/dwarf", - "dwarf.AttrDeclColumn": "debug/dwarf", - "dwarf.AttrDeclFile": "debug/dwarf", - "dwarf.AttrDeclLine": "debug/dwarf", - "dwarf.AttrDeclaration": "debug/dwarf", - "dwarf.AttrDefaultValue": "debug/dwarf", - "dwarf.AttrDescription": "debug/dwarf", - "dwarf.AttrDiscr": "debug/dwarf", - "dwarf.AttrDiscrList": "debug/dwarf", - "dwarf.AttrDiscrValue": "debug/dwarf", - "dwarf.AttrEncoding": "debug/dwarf", - "dwarf.AttrEntrypc": "debug/dwarf", - "dwarf.AttrExtension": "debug/dwarf", - "dwarf.AttrExternal": "debug/dwarf", - "dwarf.AttrFrameBase": "debug/dwarf", - "dwarf.AttrFriend": "debug/dwarf", - "dwarf.AttrHighpc": "debug/dwarf", - "dwarf.AttrIdentifierCase": "debug/dwarf", - "dwarf.AttrImport": "debug/dwarf", - "dwarf.AttrInline": "debug/dwarf", - "dwarf.AttrIsOptional": "debug/dwarf", - "dwarf.AttrLanguage": "debug/dwarf", - "dwarf.AttrLocation": "debug/dwarf", - "dwarf.AttrLowerBound": "debug/dwarf", - "dwarf.AttrLowpc": "debug/dwarf", - "dwarf.AttrMacroInfo": "debug/dwarf", - "dwarf.AttrName": "debug/dwarf", - "dwarf.AttrNamelistItem": "debug/dwarf", - "dwarf.AttrOrdering": "debug/dwarf", - "dwarf.AttrPriority": "debug/dwarf", - "dwarf.AttrProducer": "debug/dwarf", - "dwarf.AttrPrototyped": "debug/dwarf", - "dwarf.AttrRanges": "debug/dwarf", - "dwarf.AttrReturnAddr": "debug/dwarf", - "dwarf.AttrSegment": "debug/dwarf", - "dwarf.AttrSibling": "debug/dwarf", - "dwarf.AttrSpecification": "debug/dwarf", - "dwarf.AttrStartScope": "debug/dwarf", - "dwarf.AttrStaticLink": "debug/dwarf", - "dwarf.AttrStmtList": "debug/dwarf", - "dwarf.AttrStride": "debug/dwarf", - "dwarf.AttrStrideSize": "debug/dwarf", - "dwarf.AttrStringLength": "debug/dwarf", - "dwarf.AttrTrampoline": "debug/dwarf", - "dwarf.AttrType": "debug/dwarf", - "dwarf.AttrUpperBound": "debug/dwarf", - "dwarf.AttrUseLocation": "debug/dwarf", - "dwarf.AttrUseUTF8": "debug/dwarf", - "dwarf.AttrVarParam": "debug/dwarf", - "dwarf.AttrVirtuality": "debug/dwarf", - "dwarf.AttrVisibility": "debug/dwarf", - "dwarf.AttrVtableElemLoc": "debug/dwarf", - "dwarf.BasicType": "debug/dwarf", - "dwarf.BoolType": "debug/dwarf", - "dwarf.CharType": "debug/dwarf", - "dwarf.Class": "debug/dwarf", - "dwarf.ClassAddress": "debug/dwarf", - "dwarf.ClassBlock": "debug/dwarf", - "dwarf.ClassConstant": "debug/dwarf", - "dwarf.ClassExprLoc": "debug/dwarf", - "dwarf.ClassFlag": "debug/dwarf", - "dwarf.ClassLinePtr": "debug/dwarf", - "dwarf.ClassLocListPtr": "debug/dwarf", - "dwarf.ClassMacPtr": "debug/dwarf", - "dwarf.ClassRangeListPtr": "debug/dwarf", - "dwarf.ClassReference": "debug/dwarf", - "dwarf.ClassReferenceAlt": "debug/dwarf", - "dwarf.ClassReferenceSig": "debug/dwarf", - "dwarf.ClassString": "debug/dwarf", - "dwarf.ClassStringAlt": "debug/dwarf", - "dwarf.ClassUnknown": "debug/dwarf", - "dwarf.CommonType": "debug/dwarf", - "dwarf.ComplexType": "debug/dwarf", - "dwarf.Data": "debug/dwarf", - "dwarf.DecodeError": "debug/dwarf", - "dwarf.DotDotDotType": "debug/dwarf", - "dwarf.Entry": "debug/dwarf", - "dwarf.EnumType": "debug/dwarf", - "dwarf.EnumValue": "debug/dwarf", - "dwarf.ErrUnknownPC": "debug/dwarf", - "dwarf.Field": "debug/dwarf", - "dwarf.FloatType": "debug/dwarf", - "dwarf.FuncType": "debug/dwarf", - "dwarf.IntType": "debug/dwarf", - "dwarf.LineEntry": "debug/dwarf", - "dwarf.LineFile": "debug/dwarf", - "dwarf.LineReader": "debug/dwarf", - "dwarf.LineReaderPos": "debug/dwarf", - "dwarf.New": "debug/dwarf", - "dwarf.Offset": "debug/dwarf", - "dwarf.PtrType": "debug/dwarf", - "dwarf.QualType": "debug/dwarf", - "dwarf.Reader": "debug/dwarf", - "dwarf.StructField": "debug/dwarf", - "dwarf.StructType": "debug/dwarf", - "dwarf.Tag": "debug/dwarf", - "dwarf.TagAccessDeclaration": "debug/dwarf", - "dwarf.TagArrayType": "debug/dwarf", - "dwarf.TagBaseType": "debug/dwarf", - "dwarf.TagCatchDwarfBlock": "debug/dwarf", - "dwarf.TagClassType": "debug/dwarf", - "dwarf.TagCommonDwarfBlock": "debug/dwarf", - "dwarf.TagCommonInclusion": "debug/dwarf", - "dwarf.TagCompileUnit": "debug/dwarf", - "dwarf.TagCondition": "debug/dwarf", - "dwarf.TagConstType": "debug/dwarf", - "dwarf.TagConstant": "debug/dwarf", - "dwarf.TagDwarfProcedure": "debug/dwarf", - "dwarf.TagEntryPoint": "debug/dwarf", - "dwarf.TagEnumerationType": "debug/dwarf", - "dwarf.TagEnumerator": "debug/dwarf", - "dwarf.TagFileType": "debug/dwarf", - "dwarf.TagFormalParameter": "debug/dwarf", - "dwarf.TagFriend": "debug/dwarf", - "dwarf.TagImportedDeclaration": "debug/dwarf", - "dwarf.TagImportedModule": "debug/dwarf", - "dwarf.TagImportedUnit": "debug/dwarf", - "dwarf.TagInheritance": "debug/dwarf", - "dwarf.TagInlinedSubroutine": "debug/dwarf", - "dwarf.TagInterfaceType": "debug/dwarf", - "dwarf.TagLabel": "debug/dwarf", - "dwarf.TagLexDwarfBlock": "debug/dwarf", - "dwarf.TagMember": "debug/dwarf", - "dwarf.TagModule": "debug/dwarf", - "dwarf.TagMutableType": "debug/dwarf", - "dwarf.TagNamelist": "debug/dwarf", - "dwarf.TagNamelistItem": "debug/dwarf", - "dwarf.TagNamespace": "debug/dwarf", - "dwarf.TagPackedType": "debug/dwarf", - "dwarf.TagPartialUnit": "debug/dwarf", - "dwarf.TagPointerType": "debug/dwarf", - "dwarf.TagPtrToMemberType": "debug/dwarf", - "dwarf.TagReferenceType": "debug/dwarf", - "dwarf.TagRestrictType": "debug/dwarf", - "dwarf.TagRvalueReferenceType": "debug/dwarf", - "dwarf.TagSetType": "debug/dwarf", - "dwarf.TagSharedType": "debug/dwarf", - "dwarf.TagStringType": "debug/dwarf", - "dwarf.TagStructType": "debug/dwarf", - "dwarf.TagSubprogram": "debug/dwarf", - "dwarf.TagSubrangeType": "debug/dwarf", - "dwarf.TagSubroutineType": "debug/dwarf", - "dwarf.TagTemplateAlias": "debug/dwarf", - "dwarf.TagTemplateTypeParameter": "debug/dwarf", - "dwarf.TagTemplateValueParameter": "debug/dwarf", - "dwarf.TagThrownType": "debug/dwarf", - "dwarf.TagTryDwarfBlock": "debug/dwarf", - "dwarf.TagTypeUnit": "debug/dwarf", - "dwarf.TagTypedef": "debug/dwarf", - "dwarf.TagUnionType": "debug/dwarf", - "dwarf.TagUnspecifiedParameters": "debug/dwarf", - "dwarf.TagUnspecifiedType": "debug/dwarf", - "dwarf.TagVariable": "debug/dwarf", - "dwarf.TagVariant": "debug/dwarf", - "dwarf.TagVariantPart": "debug/dwarf", - "dwarf.TagVolatileType": "debug/dwarf", - "dwarf.TagWithStmt": "debug/dwarf", - "dwarf.Type": "debug/dwarf", - "dwarf.TypedefType": "debug/dwarf", - "dwarf.UcharType": "debug/dwarf", - "dwarf.UintType": "debug/dwarf", - "dwarf.UnspecifiedType": "debug/dwarf", - "dwarf.VoidType": "debug/dwarf", - "ecdsa.GenerateKey": "crypto/ecdsa", - "ecdsa.PrivateKey": "crypto/ecdsa", - "ecdsa.PublicKey": "crypto/ecdsa", - "ecdsa.Sign": "crypto/ecdsa", - "ecdsa.Verify": "crypto/ecdsa", - "elf.ARM_MAGIC_TRAMP_NUMBER": "debug/elf", - "elf.COMPRESS_HIOS": "debug/elf", - "elf.COMPRESS_HIPROC": "debug/elf", - "elf.COMPRESS_LOOS": "debug/elf", - "elf.COMPRESS_LOPROC": "debug/elf", - "elf.COMPRESS_ZLIB": "debug/elf", - "elf.Chdr32": "debug/elf", - "elf.Chdr64": "debug/elf", - "elf.Class": "debug/elf", - "elf.CompressionType": "debug/elf", - "elf.DF_BIND_NOW": "debug/elf", - "elf.DF_ORIGIN": "debug/elf", - "elf.DF_STATIC_TLS": "debug/elf", - "elf.DF_SYMBOLIC": "debug/elf", - "elf.DF_TEXTREL": "debug/elf", - "elf.DT_BIND_NOW": "debug/elf", - "elf.DT_DEBUG": "debug/elf", - "elf.DT_ENCODING": "debug/elf", - "elf.DT_FINI": "debug/elf", - "elf.DT_FINI_ARRAY": "debug/elf", - "elf.DT_FINI_ARRAYSZ": "debug/elf", - "elf.DT_FLAGS": "debug/elf", - "elf.DT_HASH": "debug/elf", - "elf.DT_HIOS": "debug/elf", - "elf.DT_HIPROC": "debug/elf", - "elf.DT_INIT": "debug/elf", - "elf.DT_INIT_ARRAY": "debug/elf", - "elf.DT_INIT_ARRAYSZ": "debug/elf", - "elf.DT_JMPREL": "debug/elf", - "elf.DT_LOOS": "debug/elf", - "elf.DT_LOPROC": "debug/elf", - "elf.DT_NEEDED": "debug/elf", - "elf.DT_NULL": "debug/elf", - "elf.DT_PLTGOT": "debug/elf", - "elf.DT_PLTREL": "debug/elf", - "elf.DT_PLTRELSZ": "debug/elf", - "elf.DT_PREINIT_ARRAY": "debug/elf", - "elf.DT_PREINIT_ARRAYSZ": "debug/elf", - "elf.DT_REL": "debug/elf", - "elf.DT_RELA": "debug/elf", - "elf.DT_RELAENT": "debug/elf", - "elf.DT_RELASZ": "debug/elf", - "elf.DT_RELENT": "debug/elf", - "elf.DT_RELSZ": "debug/elf", - "elf.DT_RPATH": "debug/elf", - "elf.DT_RUNPATH": "debug/elf", - "elf.DT_SONAME": "debug/elf", - "elf.DT_STRSZ": "debug/elf", - "elf.DT_STRTAB": "debug/elf", - "elf.DT_SYMBOLIC": "debug/elf", - "elf.DT_SYMENT": "debug/elf", - "elf.DT_SYMTAB": "debug/elf", - "elf.DT_TEXTREL": "debug/elf", - "elf.DT_VERNEED": "debug/elf", - "elf.DT_VERNEEDNUM": "debug/elf", - "elf.DT_VERSYM": "debug/elf", - "elf.Data": "debug/elf", - "elf.Dyn32": "debug/elf", - "elf.Dyn64": "debug/elf", - "elf.DynFlag": "debug/elf", - "elf.DynTag": "debug/elf", - "elf.EI_ABIVERSION": "debug/elf", - "elf.EI_CLASS": "debug/elf", - "elf.EI_DATA": "debug/elf", - "elf.EI_NIDENT": "debug/elf", - "elf.EI_OSABI": "debug/elf", - "elf.EI_PAD": "debug/elf", - "elf.EI_VERSION": "debug/elf", - "elf.ELFCLASS32": "debug/elf", - "elf.ELFCLASS64": "debug/elf", - "elf.ELFCLASSNONE": "debug/elf", - "elf.ELFDATA2LSB": "debug/elf", - "elf.ELFDATA2MSB": "debug/elf", - "elf.ELFDATANONE": "debug/elf", - "elf.ELFMAG": "debug/elf", - "elf.ELFOSABI_86OPEN": "debug/elf", - "elf.ELFOSABI_AIX": "debug/elf", - "elf.ELFOSABI_ARM": "debug/elf", - "elf.ELFOSABI_FREEBSD": "debug/elf", - "elf.ELFOSABI_HPUX": "debug/elf", - "elf.ELFOSABI_HURD": "debug/elf", - "elf.ELFOSABI_IRIX": "debug/elf", - "elf.ELFOSABI_LINUX": "debug/elf", - "elf.ELFOSABI_MODESTO": "debug/elf", - "elf.ELFOSABI_NETBSD": "debug/elf", - "elf.ELFOSABI_NONE": "debug/elf", - "elf.ELFOSABI_NSK": "debug/elf", - "elf.ELFOSABI_OPENBSD": "debug/elf", - "elf.ELFOSABI_OPENVMS": "debug/elf", - "elf.ELFOSABI_SOLARIS": "debug/elf", - "elf.ELFOSABI_STANDALONE": "debug/elf", - "elf.ELFOSABI_TRU64": "debug/elf", - "elf.EM_386": "debug/elf", - "elf.EM_486": "debug/elf", - "elf.EM_68HC12": "debug/elf", - "elf.EM_68K": "debug/elf", - "elf.EM_860": "debug/elf", - "elf.EM_88K": "debug/elf", - "elf.EM_960": "debug/elf", - "elf.EM_AARCH64": "debug/elf", - "elf.EM_ALPHA": "debug/elf", - "elf.EM_ALPHA_STD": "debug/elf", - "elf.EM_ARC": "debug/elf", - "elf.EM_ARM": "debug/elf", - "elf.EM_COLDFIRE": "debug/elf", - "elf.EM_FR20": "debug/elf", - "elf.EM_H8S": "debug/elf", - "elf.EM_H8_300": "debug/elf", - "elf.EM_H8_300H": "debug/elf", - "elf.EM_H8_500": "debug/elf", - "elf.EM_IA_64": "debug/elf", - "elf.EM_M32": "debug/elf", - "elf.EM_ME16": "debug/elf", - "elf.EM_MIPS": "debug/elf", - "elf.EM_MIPS_RS3_LE": "debug/elf", - "elf.EM_MIPS_RS4_BE": "debug/elf", - "elf.EM_MIPS_X": "debug/elf", - "elf.EM_MMA": "debug/elf", - "elf.EM_NCPU": "debug/elf", - "elf.EM_NDR1": "debug/elf", - "elf.EM_NONE": "debug/elf", - "elf.EM_PARISC": "debug/elf", - "elf.EM_PCP": "debug/elf", - "elf.EM_PPC": "debug/elf", - "elf.EM_PPC64": "debug/elf", - "elf.EM_RCE": "debug/elf", - "elf.EM_RH32": "debug/elf", - "elf.EM_S370": "debug/elf", - "elf.EM_S390": "debug/elf", - "elf.EM_SH": "debug/elf", - "elf.EM_SPARC": "debug/elf", - "elf.EM_SPARC32PLUS": "debug/elf", - "elf.EM_SPARCV9": "debug/elf", - "elf.EM_ST100": "debug/elf", - "elf.EM_STARCORE": "debug/elf", - "elf.EM_TINYJ": "debug/elf", - "elf.EM_TRICORE": "debug/elf", - "elf.EM_V800": "debug/elf", - "elf.EM_VPP500": "debug/elf", - "elf.EM_X86_64": "debug/elf", - "elf.ET_CORE": "debug/elf", - "elf.ET_DYN": "debug/elf", - "elf.ET_EXEC": "debug/elf", - "elf.ET_HIOS": "debug/elf", - "elf.ET_HIPROC": "debug/elf", - "elf.ET_LOOS": "debug/elf", - "elf.ET_LOPROC": "debug/elf", - "elf.ET_NONE": "debug/elf", - "elf.ET_REL": "debug/elf", - "elf.EV_CURRENT": "debug/elf", - "elf.EV_NONE": "debug/elf", - "elf.ErrNoSymbols": "debug/elf", - "elf.File": "debug/elf", - "elf.FileHeader": "debug/elf", - "elf.FormatError": "debug/elf", - "elf.Header32": "debug/elf", - "elf.Header64": "debug/elf", - "elf.ImportedSymbol": "debug/elf", - "elf.Machine": "debug/elf", - "elf.NT_FPREGSET": "debug/elf", - "elf.NT_PRPSINFO": "debug/elf", - "elf.NT_PRSTATUS": "debug/elf", - "elf.NType": "debug/elf", - "elf.NewFile": "debug/elf", - "elf.OSABI": "debug/elf", - "elf.Open": "debug/elf", - "elf.PF_MASKOS": "debug/elf", - "elf.PF_MASKPROC": "debug/elf", - "elf.PF_R": "debug/elf", - "elf.PF_W": "debug/elf", - "elf.PF_X": "debug/elf", - "elf.PT_DYNAMIC": "debug/elf", - "elf.PT_HIOS": "debug/elf", - "elf.PT_HIPROC": "debug/elf", - "elf.PT_INTERP": "debug/elf", - "elf.PT_LOAD": "debug/elf", - "elf.PT_LOOS": "debug/elf", - "elf.PT_LOPROC": "debug/elf", - "elf.PT_NOTE": "debug/elf", - "elf.PT_NULL": "debug/elf", - "elf.PT_PHDR": "debug/elf", - "elf.PT_SHLIB": "debug/elf", - "elf.PT_TLS": "debug/elf", - "elf.Prog": "debug/elf", - "elf.Prog32": "debug/elf", - "elf.Prog64": "debug/elf", - "elf.ProgFlag": "debug/elf", - "elf.ProgHeader": "debug/elf", - "elf.ProgType": "debug/elf", - "elf.R_386": "debug/elf", - "elf.R_386_32": "debug/elf", - "elf.R_386_COPY": "debug/elf", - "elf.R_386_GLOB_DAT": "debug/elf", - "elf.R_386_GOT32": "debug/elf", - "elf.R_386_GOTOFF": "debug/elf", - "elf.R_386_GOTPC": "debug/elf", - "elf.R_386_JMP_SLOT": "debug/elf", - "elf.R_386_NONE": "debug/elf", - "elf.R_386_PC32": "debug/elf", - "elf.R_386_PLT32": "debug/elf", - "elf.R_386_RELATIVE": "debug/elf", - "elf.R_386_TLS_DTPMOD32": "debug/elf", - "elf.R_386_TLS_DTPOFF32": "debug/elf", - "elf.R_386_TLS_GD": "debug/elf", - "elf.R_386_TLS_GD_32": "debug/elf", - "elf.R_386_TLS_GD_CALL": "debug/elf", - "elf.R_386_TLS_GD_POP": "debug/elf", - "elf.R_386_TLS_GD_PUSH": "debug/elf", - "elf.R_386_TLS_GOTIE": "debug/elf", - "elf.R_386_TLS_IE": "debug/elf", - "elf.R_386_TLS_IE_32": "debug/elf", - "elf.R_386_TLS_LDM": "debug/elf", - "elf.R_386_TLS_LDM_32": "debug/elf", - "elf.R_386_TLS_LDM_CALL": "debug/elf", - "elf.R_386_TLS_LDM_POP": "debug/elf", - "elf.R_386_TLS_LDM_PUSH": "debug/elf", - "elf.R_386_TLS_LDO_32": "debug/elf", - "elf.R_386_TLS_LE": "debug/elf", - "elf.R_386_TLS_LE_32": "debug/elf", - "elf.R_386_TLS_TPOFF": "debug/elf", - "elf.R_386_TLS_TPOFF32": "debug/elf", - "elf.R_AARCH64": "debug/elf", - "elf.R_AARCH64_ABS16": "debug/elf", - "elf.R_AARCH64_ABS32": "debug/elf", - "elf.R_AARCH64_ABS64": "debug/elf", - "elf.R_AARCH64_ADD_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_ADR_GOT_PAGE": "debug/elf", - "elf.R_AARCH64_ADR_PREL_LO21": "debug/elf", - "elf.R_AARCH64_ADR_PREL_PG_HI21": "debug/elf", - "elf.R_AARCH64_ADR_PREL_PG_HI21_NC": "debug/elf", - "elf.R_AARCH64_CALL26": "debug/elf", - "elf.R_AARCH64_CONDBR19": "debug/elf", - "elf.R_AARCH64_COPY": "debug/elf", - "elf.R_AARCH64_GLOB_DAT": "debug/elf", - "elf.R_AARCH64_GOT_LD_PREL19": "debug/elf", - "elf.R_AARCH64_IRELATIVE": "debug/elf", - "elf.R_AARCH64_JUMP26": "debug/elf", - "elf.R_AARCH64_JUMP_SLOT": "debug/elf", - "elf.R_AARCH64_LD64_GOT_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST128_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST16_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST32_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST64_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LDST8_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_LD_PREL_LO19": "debug/elf", - "elf.R_AARCH64_MOVW_SABS_G0": "debug/elf", - "elf.R_AARCH64_MOVW_SABS_G1": "debug/elf", - "elf.R_AARCH64_MOVW_SABS_G2": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G0": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G0_NC": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G1": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G1_NC": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G2": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G2_NC": "debug/elf", - "elf.R_AARCH64_MOVW_UABS_G3": "debug/elf", - "elf.R_AARCH64_NONE": "debug/elf", - "elf.R_AARCH64_NULL": "debug/elf", - "elf.R_AARCH64_P32_ABS16": "debug/elf", - "elf.R_AARCH64_P32_ABS32": "debug/elf", - "elf.R_AARCH64_P32_ADD_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_ADR_GOT_PAGE": "debug/elf", - "elf.R_AARCH64_P32_ADR_PREL_LO21": "debug/elf", - "elf.R_AARCH64_P32_ADR_PREL_PG_HI21": "debug/elf", - "elf.R_AARCH64_P32_CALL26": "debug/elf", - "elf.R_AARCH64_P32_CONDBR19": "debug/elf", - "elf.R_AARCH64_P32_COPY": "debug/elf", - "elf.R_AARCH64_P32_GLOB_DAT": "debug/elf", - "elf.R_AARCH64_P32_GOT_LD_PREL19": "debug/elf", - "elf.R_AARCH64_P32_IRELATIVE": "debug/elf", - "elf.R_AARCH64_P32_JUMP26": "debug/elf", - "elf.R_AARCH64_P32_JUMP_SLOT": "debug/elf", - "elf.R_AARCH64_P32_LD32_GOT_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST128_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST16_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST32_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST64_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LDST8_ABS_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_LD_PREL_LO19": "debug/elf", - "elf.R_AARCH64_P32_MOVW_SABS_G0": "debug/elf", - "elf.R_AARCH64_P32_MOVW_UABS_G0": "debug/elf", - "elf.R_AARCH64_P32_MOVW_UABS_G0_NC": "debug/elf", - "elf.R_AARCH64_P32_MOVW_UABS_G1": "debug/elf", - "elf.R_AARCH64_P32_PREL16": "debug/elf", - "elf.R_AARCH64_P32_PREL32": "debug/elf", - "elf.R_AARCH64_P32_RELATIVE": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_ADD_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_ADR_PAGE21": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_ADR_PREL21": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_CALL": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_LD32_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSDESC_LD_PREL19": "debug/elf", - "elf.R_AARCH64_P32_TLSGD_ADD_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSGD_ADR_PAGE21": "debug/elf", - "elf.R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21": "debug/elf", - "elf.R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_ADD_TPREL_HI12": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_ADD_TPREL_LO12": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_MOVW_TPREL_G0": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC": "debug/elf", - "elf.R_AARCH64_P32_TLSLE_MOVW_TPREL_G1": "debug/elf", - "elf.R_AARCH64_P32_TLS_DTPMOD": "debug/elf", - "elf.R_AARCH64_P32_TLS_DTPREL": "debug/elf", - "elf.R_AARCH64_P32_TLS_TPREL": "debug/elf", - "elf.R_AARCH64_P32_TSTBR14": "debug/elf", - "elf.R_AARCH64_PREL16": "debug/elf", - "elf.R_AARCH64_PREL32": "debug/elf", - "elf.R_AARCH64_PREL64": "debug/elf", - "elf.R_AARCH64_RELATIVE": "debug/elf", - "elf.R_AARCH64_TLSDESC": "debug/elf", - "elf.R_AARCH64_TLSDESC_ADD": "debug/elf", - "elf.R_AARCH64_TLSDESC_ADD_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSDESC_ADR_PAGE21": "debug/elf", - "elf.R_AARCH64_TLSDESC_ADR_PREL21": "debug/elf", - "elf.R_AARCH64_TLSDESC_CALL": "debug/elf", - "elf.R_AARCH64_TLSDESC_LD64_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSDESC_LDR": "debug/elf", - "elf.R_AARCH64_TLSDESC_LD_PREL19": "debug/elf", - "elf.R_AARCH64_TLSDESC_OFF_G0_NC": "debug/elf", - "elf.R_AARCH64_TLSDESC_OFF_G1": "debug/elf", - "elf.R_AARCH64_TLSGD_ADD_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSGD_ADR_PAGE21": "debug/elf", - "elf.R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21": "debug/elf", - "elf.R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSIE_LD_GOTTPREL_PREL19": "debug/elf", - "elf.R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC": "debug/elf", - "elf.R_AARCH64_TLSIE_MOVW_GOTTPREL_G1": "debug/elf", - "elf.R_AARCH64_TLSLE_ADD_TPREL_HI12": "debug/elf", - "elf.R_AARCH64_TLSLE_ADD_TPREL_LO12": "debug/elf", - "elf.R_AARCH64_TLSLE_ADD_TPREL_LO12_NC": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G0": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G0_NC": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G1": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G1_NC": "debug/elf", - "elf.R_AARCH64_TLSLE_MOVW_TPREL_G2": "debug/elf", - "elf.R_AARCH64_TLS_DTPMOD64": "debug/elf", - "elf.R_AARCH64_TLS_DTPREL64": "debug/elf", - "elf.R_AARCH64_TLS_TPREL64": "debug/elf", - "elf.R_AARCH64_TSTBR14": "debug/elf", - "elf.R_ALPHA": "debug/elf", - "elf.R_ALPHA_BRADDR": "debug/elf", - "elf.R_ALPHA_COPY": "debug/elf", - "elf.R_ALPHA_GLOB_DAT": "debug/elf", - "elf.R_ALPHA_GPDISP": "debug/elf", - "elf.R_ALPHA_GPREL32": "debug/elf", - "elf.R_ALPHA_GPRELHIGH": "debug/elf", - "elf.R_ALPHA_GPRELLOW": "debug/elf", - "elf.R_ALPHA_GPVALUE": "debug/elf", - "elf.R_ALPHA_HINT": "debug/elf", - "elf.R_ALPHA_IMMED_BR_HI32": "debug/elf", - "elf.R_ALPHA_IMMED_GP_16": "debug/elf", - "elf.R_ALPHA_IMMED_GP_HI32": "debug/elf", - "elf.R_ALPHA_IMMED_LO32": "debug/elf", - "elf.R_ALPHA_IMMED_SCN_HI32": "debug/elf", - "elf.R_ALPHA_JMP_SLOT": "debug/elf", - "elf.R_ALPHA_LITERAL": "debug/elf", - "elf.R_ALPHA_LITUSE": "debug/elf", - "elf.R_ALPHA_NONE": "debug/elf", - "elf.R_ALPHA_OP_PRSHIFT": "debug/elf", - "elf.R_ALPHA_OP_PSUB": "debug/elf", - "elf.R_ALPHA_OP_PUSH": "debug/elf", - "elf.R_ALPHA_OP_STORE": "debug/elf", - "elf.R_ALPHA_REFLONG": "debug/elf", - "elf.R_ALPHA_REFQUAD": "debug/elf", - "elf.R_ALPHA_RELATIVE": "debug/elf", - "elf.R_ALPHA_SREL16": "debug/elf", - "elf.R_ALPHA_SREL32": "debug/elf", - "elf.R_ALPHA_SREL64": "debug/elf", - "elf.R_ARM": "debug/elf", - "elf.R_ARM_ABS12": "debug/elf", - "elf.R_ARM_ABS16": "debug/elf", - "elf.R_ARM_ABS32": "debug/elf", - "elf.R_ARM_ABS8": "debug/elf", - "elf.R_ARM_AMP_VCALL9": "debug/elf", - "elf.R_ARM_COPY": "debug/elf", - "elf.R_ARM_GLOB_DAT": "debug/elf", - "elf.R_ARM_GNU_VTENTRY": "debug/elf", - "elf.R_ARM_GNU_VTINHERIT": "debug/elf", - "elf.R_ARM_GOT32": "debug/elf", - "elf.R_ARM_GOTOFF": "debug/elf", - "elf.R_ARM_GOTPC": "debug/elf", - "elf.R_ARM_JUMP_SLOT": "debug/elf", - "elf.R_ARM_NONE": "debug/elf", - "elf.R_ARM_PC13": "debug/elf", - "elf.R_ARM_PC24": "debug/elf", - "elf.R_ARM_PLT32": "debug/elf", - "elf.R_ARM_RABS32": "debug/elf", - "elf.R_ARM_RBASE": "debug/elf", - "elf.R_ARM_REL32": "debug/elf", - "elf.R_ARM_RELATIVE": "debug/elf", - "elf.R_ARM_RPC24": "debug/elf", - "elf.R_ARM_RREL32": "debug/elf", - "elf.R_ARM_RSBREL32": "debug/elf", - "elf.R_ARM_SBREL32": "debug/elf", - "elf.R_ARM_SWI24": "debug/elf", - "elf.R_ARM_THM_ABS5": "debug/elf", - "elf.R_ARM_THM_PC22": "debug/elf", - "elf.R_ARM_THM_PC8": "debug/elf", - "elf.R_ARM_THM_RPC22": "debug/elf", - "elf.R_ARM_THM_SWI8": "debug/elf", - "elf.R_ARM_THM_XPC22": "debug/elf", - "elf.R_ARM_XPC25": "debug/elf", - "elf.R_INFO": "debug/elf", - "elf.R_INFO32": "debug/elf", - "elf.R_MIPS": "debug/elf", - "elf.R_MIPS_16": "debug/elf", - "elf.R_MIPS_26": "debug/elf", - "elf.R_MIPS_32": "debug/elf", - "elf.R_MIPS_64": "debug/elf", - "elf.R_MIPS_ADD_IMMEDIATE": "debug/elf", - "elf.R_MIPS_CALL16": "debug/elf", - "elf.R_MIPS_CALL_HI16": "debug/elf", - "elf.R_MIPS_CALL_LO16": "debug/elf", - "elf.R_MIPS_DELETE": "debug/elf", - "elf.R_MIPS_GOT16": "debug/elf", - "elf.R_MIPS_GOT_DISP": "debug/elf", - "elf.R_MIPS_GOT_HI16": "debug/elf", - "elf.R_MIPS_GOT_LO16": "debug/elf", - "elf.R_MIPS_GOT_OFST": "debug/elf", - "elf.R_MIPS_GOT_PAGE": "debug/elf", - "elf.R_MIPS_GPREL16": "debug/elf", - "elf.R_MIPS_GPREL32": "debug/elf", - "elf.R_MIPS_HI16": "debug/elf", - "elf.R_MIPS_HIGHER": "debug/elf", - "elf.R_MIPS_HIGHEST": "debug/elf", - "elf.R_MIPS_INSERT_A": "debug/elf", - "elf.R_MIPS_INSERT_B": "debug/elf", - "elf.R_MIPS_JALR": "debug/elf", - "elf.R_MIPS_LITERAL": "debug/elf", - "elf.R_MIPS_LO16": "debug/elf", - "elf.R_MIPS_NONE": "debug/elf", - "elf.R_MIPS_PC16": "debug/elf", - "elf.R_MIPS_PJUMP": "debug/elf", - "elf.R_MIPS_REL16": "debug/elf", - "elf.R_MIPS_REL32": "debug/elf", - "elf.R_MIPS_RELGOT": "debug/elf", - "elf.R_MIPS_SCN_DISP": "debug/elf", - "elf.R_MIPS_SHIFT5": "debug/elf", - "elf.R_MIPS_SHIFT6": "debug/elf", - "elf.R_MIPS_SUB": "debug/elf", - "elf.R_MIPS_TLS_DTPMOD32": "debug/elf", - "elf.R_MIPS_TLS_DTPMOD64": "debug/elf", - "elf.R_MIPS_TLS_DTPREL32": "debug/elf", - "elf.R_MIPS_TLS_DTPREL64": "debug/elf", - "elf.R_MIPS_TLS_DTPREL_HI16": "debug/elf", - "elf.R_MIPS_TLS_DTPREL_LO16": "debug/elf", - "elf.R_MIPS_TLS_GD": "debug/elf", - "elf.R_MIPS_TLS_GOTTPREL": "debug/elf", - "elf.R_MIPS_TLS_LDM": "debug/elf", - "elf.R_MIPS_TLS_TPREL32": "debug/elf", - "elf.R_MIPS_TLS_TPREL64": "debug/elf", - "elf.R_MIPS_TLS_TPREL_HI16": "debug/elf", - "elf.R_MIPS_TLS_TPREL_LO16": "debug/elf", - "elf.R_PPC": "debug/elf", - "elf.R_PPC64": "debug/elf", - "elf.R_PPC64_ADDR14": "debug/elf", - "elf.R_PPC64_ADDR14_BRNTAKEN": "debug/elf", - "elf.R_PPC64_ADDR14_BRTAKEN": "debug/elf", - "elf.R_PPC64_ADDR16": "debug/elf", - "elf.R_PPC64_ADDR16_DS": "debug/elf", - "elf.R_PPC64_ADDR16_HA": "debug/elf", - "elf.R_PPC64_ADDR16_HI": "debug/elf", - "elf.R_PPC64_ADDR16_HIGHER": "debug/elf", - "elf.R_PPC64_ADDR16_HIGHERA": "debug/elf", - "elf.R_PPC64_ADDR16_HIGHEST": "debug/elf", - "elf.R_PPC64_ADDR16_HIGHESTA": "debug/elf", - "elf.R_PPC64_ADDR16_LO": "debug/elf", - "elf.R_PPC64_ADDR16_LO_DS": "debug/elf", - "elf.R_PPC64_ADDR24": "debug/elf", - "elf.R_PPC64_ADDR32": "debug/elf", - "elf.R_PPC64_ADDR64": "debug/elf", - "elf.R_PPC64_DTPMOD64": "debug/elf", - "elf.R_PPC64_DTPREL16": "debug/elf", - "elf.R_PPC64_DTPREL16_DS": "debug/elf", - "elf.R_PPC64_DTPREL16_HA": "debug/elf", - "elf.R_PPC64_DTPREL16_HI": "debug/elf", - "elf.R_PPC64_DTPREL16_HIGHER": "debug/elf", - "elf.R_PPC64_DTPREL16_HIGHERA": "debug/elf", - "elf.R_PPC64_DTPREL16_HIGHEST": "debug/elf", - "elf.R_PPC64_DTPREL16_HIGHESTA": "debug/elf", - "elf.R_PPC64_DTPREL16_LO": "debug/elf", - "elf.R_PPC64_DTPREL16_LO_DS": "debug/elf", - "elf.R_PPC64_DTPREL64": "debug/elf", - "elf.R_PPC64_GOT16": "debug/elf", - "elf.R_PPC64_GOT16_DS": "debug/elf", - "elf.R_PPC64_GOT16_HA": "debug/elf", - "elf.R_PPC64_GOT16_HI": "debug/elf", - "elf.R_PPC64_GOT16_LO": "debug/elf", - "elf.R_PPC64_GOT16_LO_DS": "debug/elf", - "elf.R_PPC64_GOT_DTPREL16_DS": "debug/elf", - "elf.R_PPC64_GOT_DTPREL16_HA": "debug/elf", - "elf.R_PPC64_GOT_DTPREL16_HI": "debug/elf", - "elf.R_PPC64_GOT_DTPREL16_LO_DS": "debug/elf", - "elf.R_PPC64_GOT_TLSGD16": "debug/elf", - "elf.R_PPC64_GOT_TLSGD16_HA": "debug/elf", - "elf.R_PPC64_GOT_TLSGD16_HI": "debug/elf", - "elf.R_PPC64_GOT_TLSGD16_LO": "debug/elf", - "elf.R_PPC64_GOT_TLSLD16": "debug/elf", - "elf.R_PPC64_GOT_TLSLD16_HA": "debug/elf", - "elf.R_PPC64_GOT_TLSLD16_HI": "debug/elf", - "elf.R_PPC64_GOT_TLSLD16_LO": "debug/elf", - "elf.R_PPC64_GOT_TPREL16_DS": "debug/elf", - "elf.R_PPC64_GOT_TPREL16_HA": "debug/elf", - "elf.R_PPC64_GOT_TPREL16_HI": "debug/elf", - "elf.R_PPC64_GOT_TPREL16_LO_DS": "debug/elf", - "elf.R_PPC64_JMP_SLOT": "debug/elf", - "elf.R_PPC64_NONE": "debug/elf", - "elf.R_PPC64_REL14": "debug/elf", - "elf.R_PPC64_REL14_BRNTAKEN": "debug/elf", - "elf.R_PPC64_REL14_BRTAKEN": "debug/elf", - "elf.R_PPC64_REL16": "debug/elf", - "elf.R_PPC64_REL16_HA": "debug/elf", - "elf.R_PPC64_REL16_HI": "debug/elf", - "elf.R_PPC64_REL16_LO": "debug/elf", - "elf.R_PPC64_REL24": "debug/elf", - "elf.R_PPC64_REL32": "debug/elf", - "elf.R_PPC64_REL64": "debug/elf", - "elf.R_PPC64_TLS": "debug/elf", - "elf.R_PPC64_TLSGD": "debug/elf", - "elf.R_PPC64_TLSLD": "debug/elf", - "elf.R_PPC64_TOC": "debug/elf", - "elf.R_PPC64_TOC16": "debug/elf", - "elf.R_PPC64_TOC16_DS": "debug/elf", - "elf.R_PPC64_TOC16_HA": "debug/elf", - "elf.R_PPC64_TOC16_HI": "debug/elf", - "elf.R_PPC64_TOC16_LO": "debug/elf", - "elf.R_PPC64_TOC16_LO_DS": "debug/elf", - "elf.R_PPC64_TPREL16": "debug/elf", - "elf.R_PPC64_TPREL16_DS": "debug/elf", - "elf.R_PPC64_TPREL16_HA": "debug/elf", - "elf.R_PPC64_TPREL16_HI": "debug/elf", - "elf.R_PPC64_TPREL16_HIGHER": "debug/elf", - "elf.R_PPC64_TPREL16_HIGHERA": "debug/elf", - "elf.R_PPC64_TPREL16_HIGHEST": "debug/elf", - "elf.R_PPC64_TPREL16_HIGHESTA": "debug/elf", - "elf.R_PPC64_TPREL16_LO": "debug/elf", - "elf.R_PPC64_TPREL16_LO_DS": "debug/elf", - "elf.R_PPC64_TPREL64": "debug/elf", - "elf.R_PPC_ADDR14": "debug/elf", - "elf.R_PPC_ADDR14_BRNTAKEN": "debug/elf", - "elf.R_PPC_ADDR14_BRTAKEN": "debug/elf", - "elf.R_PPC_ADDR16": "debug/elf", - "elf.R_PPC_ADDR16_HA": "debug/elf", - "elf.R_PPC_ADDR16_HI": "debug/elf", - "elf.R_PPC_ADDR16_LO": "debug/elf", - "elf.R_PPC_ADDR24": "debug/elf", - "elf.R_PPC_ADDR32": "debug/elf", - "elf.R_PPC_COPY": "debug/elf", - "elf.R_PPC_DTPMOD32": "debug/elf", - "elf.R_PPC_DTPREL16": "debug/elf", - "elf.R_PPC_DTPREL16_HA": "debug/elf", - "elf.R_PPC_DTPREL16_HI": "debug/elf", - "elf.R_PPC_DTPREL16_LO": "debug/elf", - "elf.R_PPC_DTPREL32": "debug/elf", - "elf.R_PPC_EMB_BIT_FLD": "debug/elf", - "elf.R_PPC_EMB_MRKREF": "debug/elf", - "elf.R_PPC_EMB_NADDR16": "debug/elf", - "elf.R_PPC_EMB_NADDR16_HA": "debug/elf", - "elf.R_PPC_EMB_NADDR16_HI": "debug/elf", - "elf.R_PPC_EMB_NADDR16_LO": "debug/elf", - "elf.R_PPC_EMB_NADDR32": "debug/elf", - "elf.R_PPC_EMB_RELSDA": "debug/elf", - "elf.R_PPC_EMB_RELSEC16": "debug/elf", - "elf.R_PPC_EMB_RELST_HA": "debug/elf", - "elf.R_PPC_EMB_RELST_HI": "debug/elf", - "elf.R_PPC_EMB_RELST_LO": "debug/elf", - "elf.R_PPC_EMB_SDA21": "debug/elf", - "elf.R_PPC_EMB_SDA2I16": "debug/elf", - "elf.R_PPC_EMB_SDA2REL": "debug/elf", - "elf.R_PPC_EMB_SDAI16": "debug/elf", - "elf.R_PPC_GLOB_DAT": "debug/elf", - "elf.R_PPC_GOT16": "debug/elf", - "elf.R_PPC_GOT16_HA": "debug/elf", - "elf.R_PPC_GOT16_HI": "debug/elf", - "elf.R_PPC_GOT16_LO": "debug/elf", - "elf.R_PPC_GOT_TLSGD16": "debug/elf", - "elf.R_PPC_GOT_TLSGD16_HA": "debug/elf", - "elf.R_PPC_GOT_TLSGD16_HI": "debug/elf", - "elf.R_PPC_GOT_TLSGD16_LO": "debug/elf", - "elf.R_PPC_GOT_TLSLD16": "debug/elf", - "elf.R_PPC_GOT_TLSLD16_HA": "debug/elf", - "elf.R_PPC_GOT_TLSLD16_HI": "debug/elf", - "elf.R_PPC_GOT_TLSLD16_LO": "debug/elf", - "elf.R_PPC_GOT_TPREL16": "debug/elf", - "elf.R_PPC_GOT_TPREL16_HA": "debug/elf", - "elf.R_PPC_GOT_TPREL16_HI": "debug/elf", - "elf.R_PPC_GOT_TPREL16_LO": "debug/elf", - "elf.R_PPC_JMP_SLOT": "debug/elf", - "elf.R_PPC_LOCAL24PC": "debug/elf", - "elf.R_PPC_NONE": "debug/elf", - "elf.R_PPC_PLT16_HA": "debug/elf", - "elf.R_PPC_PLT16_HI": "debug/elf", - "elf.R_PPC_PLT16_LO": "debug/elf", - "elf.R_PPC_PLT32": "debug/elf", - "elf.R_PPC_PLTREL24": "debug/elf", - "elf.R_PPC_PLTREL32": "debug/elf", - "elf.R_PPC_REL14": "debug/elf", - "elf.R_PPC_REL14_BRNTAKEN": "debug/elf", - "elf.R_PPC_REL14_BRTAKEN": "debug/elf", - "elf.R_PPC_REL24": "debug/elf", - "elf.R_PPC_REL32": "debug/elf", - "elf.R_PPC_RELATIVE": "debug/elf", - "elf.R_PPC_SDAREL16": "debug/elf", - "elf.R_PPC_SECTOFF": "debug/elf", - "elf.R_PPC_SECTOFF_HA": "debug/elf", - "elf.R_PPC_SECTOFF_HI": "debug/elf", - "elf.R_PPC_SECTOFF_LO": "debug/elf", - "elf.R_PPC_TLS": "debug/elf", - "elf.R_PPC_TPREL16": "debug/elf", - "elf.R_PPC_TPREL16_HA": "debug/elf", - "elf.R_PPC_TPREL16_HI": "debug/elf", - "elf.R_PPC_TPREL16_LO": "debug/elf", - "elf.R_PPC_TPREL32": "debug/elf", - "elf.R_PPC_UADDR16": "debug/elf", - "elf.R_PPC_UADDR32": "debug/elf", - "elf.R_SPARC": "debug/elf", - "elf.R_SPARC_10": "debug/elf", - "elf.R_SPARC_11": "debug/elf", - "elf.R_SPARC_13": "debug/elf", - "elf.R_SPARC_16": "debug/elf", - "elf.R_SPARC_22": "debug/elf", - "elf.R_SPARC_32": "debug/elf", - "elf.R_SPARC_5": "debug/elf", - "elf.R_SPARC_6": "debug/elf", - "elf.R_SPARC_64": "debug/elf", - "elf.R_SPARC_7": "debug/elf", - "elf.R_SPARC_8": "debug/elf", - "elf.R_SPARC_COPY": "debug/elf", - "elf.R_SPARC_DISP16": "debug/elf", - "elf.R_SPARC_DISP32": "debug/elf", - "elf.R_SPARC_DISP64": "debug/elf", - "elf.R_SPARC_DISP8": "debug/elf", - "elf.R_SPARC_GLOB_DAT": "debug/elf", - "elf.R_SPARC_GLOB_JMP": "debug/elf", - "elf.R_SPARC_GOT10": "debug/elf", - "elf.R_SPARC_GOT13": "debug/elf", - "elf.R_SPARC_GOT22": "debug/elf", - "elf.R_SPARC_H44": "debug/elf", - "elf.R_SPARC_HH22": "debug/elf", - "elf.R_SPARC_HI22": "debug/elf", - "elf.R_SPARC_HIPLT22": "debug/elf", - "elf.R_SPARC_HIX22": "debug/elf", - "elf.R_SPARC_HM10": "debug/elf", - "elf.R_SPARC_JMP_SLOT": "debug/elf", - "elf.R_SPARC_L44": "debug/elf", - "elf.R_SPARC_LM22": "debug/elf", - "elf.R_SPARC_LO10": "debug/elf", - "elf.R_SPARC_LOPLT10": "debug/elf", - "elf.R_SPARC_LOX10": "debug/elf", - "elf.R_SPARC_M44": "debug/elf", - "elf.R_SPARC_NONE": "debug/elf", - "elf.R_SPARC_OLO10": "debug/elf", - "elf.R_SPARC_PC10": "debug/elf", - "elf.R_SPARC_PC22": "debug/elf", - "elf.R_SPARC_PCPLT10": "debug/elf", - "elf.R_SPARC_PCPLT22": "debug/elf", - "elf.R_SPARC_PCPLT32": "debug/elf", - "elf.R_SPARC_PC_HH22": "debug/elf", - "elf.R_SPARC_PC_HM10": "debug/elf", - "elf.R_SPARC_PC_LM22": "debug/elf", - "elf.R_SPARC_PLT32": "debug/elf", - "elf.R_SPARC_PLT64": "debug/elf", - "elf.R_SPARC_REGISTER": "debug/elf", - "elf.R_SPARC_RELATIVE": "debug/elf", - "elf.R_SPARC_UA16": "debug/elf", - "elf.R_SPARC_UA32": "debug/elf", - "elf.R_SPARC_UA64": "debug/elf", - "elf.R_SPARC_WDISP16": "debug/elf", - "elf.R_SPARC_WDISP19": "debug/elf", - "elf.R_SPARC_WDISP22": "debug/elf", - "elf.R_SPARC_WDISP30": "debug/elf", - "elf.R_SPARC_WPLT30": "debug/elf", - "elf.R_SYM32": "debug/elf", - "elf.R_SYM64": "debug/elf", - "elf.R_TYPE32": "debug/elf", - "elf.R_TYPE64": "debug/elf", - "elf.R_X86_64": "debug/elf", - "elf.R_X86_64_16": "debug/elf", - "elf.R_X86_64_32": "debug/elf", - "elf.R_X86_64_32S": "debug/elf", - "elf.R_X86_64_64": "debug/elf", - "elf.R_X86_64_8": "debug/elf", - "elf.R_X86_64_COPY": "debug/elf", - "elf.R_X86_64_DTPMOD64": "debug/elf", - "elf.R_X86_64_DTPOFF32": "debug/elf", - "elf.R_X86_64_DTPOFF64": "debug/elf", - "elf.R_X86_64_GLOB_DAT": "debug/elf", - "elf.R_X86_64_GOT32": "debug/elf", - "elf.R_X86_64_GOTPCREL": "debug/elf", - "elf.R_X86_64_GOTTPOFF": "debug/elf", - "elf.R_X86_64_JMP_SLOT": "debug/elf", - "elf.R_X86_64_NONE": "debug/elf", - "elf.R_X86_64_PC16": "debug/elf", - "elf.R_X86_64_PC32": "debug/elf", - "elf.R_X86_64_PC8": "debug/elf", - "elf.R_X86_64_PLT32": "debug/elf", - "elf.R_X86_64_RELATIVE": "debug/elf", - "elf.R_X86_64_TLSGD": "debug/elf", - "elf.R_X86_64_TLSLD": "debug/elf", - "elf.R_X86_64_TPOFF32": "debug/elf", - "elf.R_X86_64_TPOFF64": "debug/elf", - "elf.Rel32": "debug/elf", - "elf.Rel64": "debug/elf", - "elf.Rela32": "debug/elf", - "elf.Rela64": "debug/elf", - "elf.SHF_ALLOC": "debug/elf", - "elf.SHF_COMPRESSED": "debug/elf", - "elf.SHF_EXECINSTR": "debug/elf", - "elf.SHF_GROUP": "debug/elf", - "elf.SHF_INFO_LINK": "debug/elf", - "elf.SHF_LINK_ORDER": "debug/elf", - "elf.SHF_MASKOS": "debug/elf", - "elf.SHF_MASKPROC": "debug/elf", - "elf.SHF_MERGE": "debug/elf", - "elf.SHF_OS_NONCONFORMING": "debug/elf", - "elf.SHF_STRINGS": "debug/elf", - "elf.SHF_TLS": "debug/elf", - "elf.SHF_WRITE": "debug/elf", - "elf.SHN_ABS": "debug/elf", - "elf.SHN_COMMON": "debug/elf", - "elf.SHN_HIOS": "debug/elf", - "elf.SHN_HIPROC": "debug/elf", - "elf.SHN_HIRESERVE": "debug/elf", - "elf.SHN_LOOS": "debug/elf", - "elf.SHN_LOPROC": "debug/elf", - "elf.SHN_LORESERVE": "debug/elf", - "elf.SHN_UNDEF": "debug/elf", - "elf.SHN_XINDEX": "debug/elf", - "elf.SHT_DYNAMIC": "debug/elf", - "elf.SHT_DYNSYM": "debug/elf", - "elf.SHT_FINI_ARRAY": "debug/elf", - "elf.SHT_GNU_ATTRIBUTES": "debug/elf", - "elf.SHT_GNU_HASH": "debug/elf", - "elf.SHT_GNU_LIBLIST": "debug/elf", - "elf.SHT_GNU_VERDEF": "debug/elf", - "elf.SHT_GNU_VERNEED": "debug/elf", - "elf.SHT_GNU_VERSYM": "debug/elf", - "elf.SHT_GROUP": "debug/elf", - "elf.SHT_HASH": "debug/elf", - "elf.SHT_HIOS": "debug/elf", - "elf.SHT_HIPROC": "debug/elf", - "elf.SHT_HIUSER": "debug/elf", - "elf.SHT_INIT_ARRAY": "debug/elf", - "elf.SHT_LOOS": "debug/elf", - "elf.SHT_LOPROC": "debug/elf", - "elf.SHT_LOUSER": "debug/elf", - "elf.SHT_NOBITS": "debug/elf", - "elf.SHT_NOTE": "debug/elf", - "elf.SHT_NULL": "debug/elf", - "elf.SHT_PREINIT_ARRAY": "debug/elf", - "elf.SHT_PROGBITS": "debug/elf", - "elf.SHT_REL": "debug/elf", - "elf.SHT_RELA": "debug/elf", - "elf.SHT_SHLIB": "debug/elf", - "elf.SHT_STRTAB": "debug/elf", - "elf.SHT_SYMTAB": "debug/elf", - "elf.SHT_SYMTAB_SHNDX": "debug/elf", - "elf.STB_GLOBAL": "debug/elf", - "elf.STB_HIOS": "debug/elf", - "elf.STB_HIPROC": "debug/elf", - "elf.STB_LOCAL": "debug/elf", - "elf.STB_LOOS": "debug/elf", - "elf.STB_LOPROC": "debug/elf", - "elf.STB_WEAK": "debug/elf", - "elf.STT_COMMON": "debug/elf", - "elf.STT_FILE": "debug/elf", - "elf.STT_FUNC": "debug/elf", - "elf.STT_HIOS": "debug/elf", - "elf.STT_HIPROC": "debug/elf", - "elf.STT_LOOS": "debug/elf", - "elf.STT_LOPROC": "debug/elf", - "elf.STT_NOTYPE": "debug/elf", - "elf.STT_OBJECT": "debug/elf", - "elf.STT_SECTION": "debug/elf", - "elf.STT_TLS": "debug/elf", - "elf.STV_DEFAULT": "debug/elf", - "elf.STV_HIDDEN": "debug/elf", - "elf.STV_INTERNAL": "debug/elf", - "elf.STV_PROTECTED": "debug/elf", - "elf.ST_BIND": "debug/elf", - "elf.ST_INFO": "debug/elf", - "elf.ST_TYPE": "debug/elf", - "elf.ST_VISIBILITY": "debug/elf", - "elf.Section": "debug/elf", - "elf.Section32": "debug/elf", - "elf.Section64": "debug/elf", - "elf.SectionFlag": "debug/elf", - "elf.SectionHeader": "debug/elf", - "elf.SectionIndex": "debug/elf", - "elf.SectionType": "debug/elf", - "elf.Sym32": "debug/elf", - "elf.Sym32Size": "debug/elf", - "elf.Sym64": "debug/elf", - "elf.Sym64Size": "debug/elf", - "elf.SymBind": "debug/elf", - "elf.SymType": "debug/elf", - "elf.SymVis": "debug/elf", - "elf.Symbol": "debug/elf", - "elf.Type": "debug/elf", - "elf.Version": "debug/elf", - "elliptic.Curve": "crypto/elliptic", - "elliptic.CurveParams": "crypto/elliptic", - "elliptic.GenerateKey": "crypto/elliptic", - "elliptic.Marshal": "crypto/elliptic", - "elliptic.P224": "crypto/elliptic", - "elliptic.P256": "crypto/elliptic", - "elliptic.P384": "crypto/elliptic", - "elliptic.P521": "crypto/elliptic", - "elliptic.Unmarshal": "crypto/elliptic", - "encoding.BinaryMarshaler": "encoding", - "encoding.BinaryUnmarshaler": "encoding", - "encoding.TextMarshaler": "encoding", - "encoding.TextUnmarshaler": "encoding", - "errors.New": "errors", - "exec.Cmd": "os/exec", - "exec.Command": "os/exec", - "exec.ErrNotFound": "os/exec", - "exec.Error": "os/exec", - "exec.ExitError": "os/exec", - "exec.LookPath": "os/exec", - "expvar.Do": "expvar", - "expvar.Float": "expvar", - "expvar.Func": "expvar", - "expvar.Get": "expvar", - "expvar.Int": "expvar", - "expvar.KeyValue": "expvar", - "expvar.Map": "expvar", - "expvar.NewFloat": "expvar", - "expvar.NewInt": "expvar", - "expvar.NewMap": "expvar", - "expvar.NewString": "expvar", - "expvar.Publish": "expvar", - "expvar.String": "expvar", - "expvar.Var": "expvar", - "fcgi.ErrConnClosed": "net/http/fcgi", - "fcgi.ErrRequestAborted": "net/http/fcgi", - "fcgi.Serve": "net/http/fcgi", - "filepath.Abs": "path/filepath", - "filepath.Base": "path/filepath", - "filepath.Clean": "path/filepath", - "filepath.Dir": "path/filepath", - "filepath.ErrBadPattern": "path/filepath", - "filepath.EvalSymlinks": "path/filepath", - "filepath.Ext": "path/filepath", - "filepath.FromSlash": "path/filepath", - "filepath.Glob": "path/filepath", - "filepath.HasPrefix": "path/filepath", - "filepath.IsAbs": "path/filepath", - "filepath.Join": "path/filepath", - "filepath.ListSeparator": "path/filepath", - "filepath.Match": "path/filepath", - "filepath.Rel": "path/filepath", - "filepath.Separator": "path/filepath", - "filepath.SkipDir": "path/filepath", - "filepath.Split": "path/filepath", - "filepath.SplitList": "path/filepath", - "filepath.ToSlash": "path/filepath", - "filepath.VolumeName": "path/filepath", - "filepath.Walk": "path/filepath", - "filepath.WalkFunc": "path/filepath", - "flag.Arg": "flag", - "flag.Args": "flag", - "flag.Bool": "flag", - "flag.BoolVar": "flag", - "flag.CommandLine": "flag", - "flag.ContinueOnError": "flag", - "flag.Duration": "flag", - "flag.DurationVar": "flag", - "flag.ErrHelp": "flag", - "flag.ErrorHandling": "flag", - "flag.ExitOnError": "flag", - "flag.Flag": "flag", - "flag.FlagSet": "flag", - "flag.Float64": "flag", - "flag.Float64Var": "flag", - "flag.Getter": "flag", - "flag.Int": "flag", - "flag.Int64": "flag", - "flag.Int64Var": "flag", - "flag.IntVar": "flag", - "flag.Lookup": "flag", - "flag.NArg": "flag", - "flag.NFlag": "flag", - "flag.NewFlagSet": "flag", - "flag.PanicOnError": "flag", - "flag.Parse": "flag", - "flag.Parsed": "flag", - "flag.PrintDefaults": "flag", - "flag.Set": "flag", - "flag.String": "flag", - "flag.StringVar": "flag", - "flag.Uint": "flag", - "flag.Uint64": "flag", - "flag.Uint64Var": "flag", - "flag.UintVar": "flag", - "flag.UnquoteUsage": "flag", - "flag.Usage": "flag", - "flag.Value": "flag", - "flag.Var": "flag", - "flag.Visit": "flag", - "flag.VisitAll": "flag", - "flate.BestCompression": "compress/flate", - "flate.BestSpeed": "compress/flate", - "flate.CorruptInputError": "compress/flate", - "flate.DefaultCompression": "compress/flate", - "flate.InternalError": "compress/flate", - "flate.NewReader": "compress/flate", - "flate.NewReaderDict": "compress/flate", - "flate.NewWriter": "compress/flate", - "flate.NewWriterDict": "compress/flate", - "flate.NoCompression": "compress/flate", - "flate.ReadError": "compress/flate", - "flate.Reader": "compress/flate", - "flate.Resetter": "compress/flate", - "flate.WriteError": "compress/flate", - "flate.Writer": "compress/flate", - "fmt.Errorf": "fmt", - "fmt.Formatter": "fmt", - "fmt.Fprint": "fmt", - "fmt.Fprintf": "fmt", - "fmt.Fprintln": "fmt", - "fmt.Fscan": "fmt", - "fmt.Fscanf": "fmt", - "fmt.Fscanln": "fmt", - "fmt.GoStringer": "fmt", - "fmt.Print": "fmt", - "fmt.Printf": "fmt", - "fmt.Println": "fmt", - "fmt.Scan": "fmt", - "fmt.ScanState": "fmt", - "fmt.Scanf": "fmt", - "fmt.Scanln": "fmt", - "fmt.Scanner": "fmt", - "fmt.Sprint": "fmt", - "fmt.Sprintf": "fmt", - "fmt.Sprintln": "fmt", - "fmt.Sscan": "fmt", - "fmt.Sscanf": "fmt", - "fmt.Sscanln": "fmt", - "fmt.State": "fmt", - "fmt.Stringer": "fmt", - "fnv.New32": "hash/fnv", - "fnv.New32a": "hash/fnv", - "fnv.New64": "hash/fnv", - "fnv.New64a": "hash/fnv", - "format.Node": "go/format", - "format.Source": "go/format", - "gif.Decode": "image/gif", - "gif.DecodeAll": "image/gif", - "gif.DecodeConfig": "image/gif", - "gif.DisposalBackground": "image/gif", - "gif.DisposalNone": "image/gif", - "gif.DisposalPrevious": "image/gif", - "gif.Encode": "image/gif", - "gif.EncodeAll": "image/gif", - "gif.GIF": "image/gif", - "gif.Options": "image/gif", - "gob.CommonType": "encoding/gob", - "gob.Decoder": "encoding/gob", - "gob.Encoder": "encoding/gob", - "gob.GobDecoder": "encoding/gob", - "gob.GobEncoder": "encoding/gob", - "gob.NewDecoder": "encoding/gob", - "gob.NewEncoder": "encoding/gob", - "gob.Register": "encoding/gob", - "gob.RegisterName": "encoding/gob", - "gosym.DecodingError": "debug/gosym", - "gosym.Func": "debug/gosym", - "gosym.LineTable": "debug/gosym", - "gosym.NewLineTable": "debug/gosym", - "gosym.NewTable": "debug/gosym", - "gosym.Obj": "debug/gosym", - "gosym.Sym": "debug/gosym", - "gosym.Table": "debug/gosym", - "gosym.UnknownFileError": "debug/gosym", - "gosym.UnknownLineError": "debug/gosym", - "gzip.BestCompression": "compress/gzip", - "gzip.BestSpeed": "compress/gzip", - "gzip.DefaultCompression": "compress/gzip", - "gzip.ErrChecksum": "compress/gzip", - "gzip.ErrHeader": "compress/gzip", - "gzip.Header": "compress/gzip", - "gzip.NewReader": "compress/gzip", - "gzip.NewWriter": "compress/gzip", - "gzip.NewWriterLevel": "compress/gzip", - "gzip.NoCompression": "compress/gzip", - "gzip.Reader": "compress/gzip", - "gzip.Writer": "compress/gzip", - "hash.Hash": "hash", - "hash.Hash32": "hash", - "hash.Hash64": "hash", - "heap.Fix": "container/heap", - "heap.Init": "container/heap", - "heap.Interface": "container/heap", - "heap.Pop": "container/heap", - "heap.Push": "container/heap", - "heap.Remove": "container/heap", - "hex.Decode": "encoding/hex", - "hex.DecodeString": "encoding/hex", - "hex.DecodedLen": "encoding/hex", - "hex.Dump": "encoding/hex", - "hex.Dumper": "encoding/hex", - "hex.Encode": "encoding/hex", - "hex.EncodeToString": "encoding/hex", - "hex.EncodedLen": "encoding/hex", - "hex.ErrLength": "encoding/hex", - "hex.InvalidByteError": "encoding/hex", - "hmac.Equal": "crypto/hmac", - "hmac.New": "crypto/hmac", - "html.EscapeString": "html", - "html.UnescapeString": "html", - "http.CanonicalHeaderKey": "net/http", - "http.Client": "net/http", - "http.CloseNotifier": "net/http", - "http.ConnState": "net/http", - "http.Cookie": "net/http", - "http.CookieJar": "net/http", - "http.DefaultClient": "net/http", - "http.DefaultMaxHeaderBytes": "net/http", - "http.DefaultMaxIdleConnsPerHost": "net/http", - "http.DefaultServeMux": "net/http", - "http.DefaultTransport": "net/http", - "http.DetectContentType": "net/http", - "http.Dir": "net/http", - "http.ErrBodyNotAllowed": "net/http", - "http.ErrBodyReadAfterClose": "net/http", - "http.ErrContentLength": "net/http", - "http.ErrHandlerTimeout": "net/http", - "http.ErrHeaderTooLong": "net/http", - "http.ErrHijacked": "net/http", - "http.ErrLineTooLong": "net/http", - "http.ErrMissingBoundary": "net/http", - "http.ErrMissingContentLength": "net/http", - "http.ErrMissingFile": "net/http", - "http.ErrNoCookie": "net/http", - "http.ErrNoLocation": "net/http", - "http.ErrNotMultipart": "net/http", - "http.ErrNotSupported": "net/http", - "http.ErrShortBody": "net/http", - "http.ErrSkipAltProtocol": "net/http", - "http.ErrUnexpectedTrailer": "net/http", - "http.ErrWriteAfterFlush": "net/http", - "http.Error": "net/http", - "http.File": "net/http", - "http.FileServer": "net/http", - "http.FileSystem": "net/http", - "http.Flusher": "net/http", - "http.Get": "net/http", - "http.Handle": "net/http", - "http.HandleFunc": "net/http", - "http.Handler": "net/http", - "http.HandlerFunc": "net/http", - "http.Head": "net/http", - "http.Header": "net/http", - "http.Hijacker": "net/http", - "http.ListenAndServe": "net/http", - "http.ListenAndServeTLS": "net/http", - "http.MaxBytesReader": "net/http", - "http.MethodConnect": "net/http", - "http.MethodDelete": "net/http", - "http.MethodGet": "net/http", - "http.MethodHead": "net/http", - "http.MethodOptions": "net/http", - "http.MethodPatch": "net/http", - "http.MethodPost": "net/http", - "http.MethodPut": "net/http", - "http.MethodTrace": "net/http", - "http.NewFileTransport": "net/http", - "http.NewRequest": "net/http", - "http.NewServeMux": "net/http", - "http.NotFound": "net/http", - "http.NotFoundHandler": "net/http", - "http.ParseHTTPVersion": "net/http", - "http.ParseTime": "net/http", - "http.Post": "net/http", - "http.PostForm": "net/http", - "http.ProtocolError": "net/http", - "http.ProxyFromEnvironment": "net/http", - "http.ProxyURL": "net/http", - "http.ReadRequest": "net/http", - "http.ReadResponse": "net/http", - "http.Redirect": "net/http", - "http.RedirectHandler": "net/http", - "http.Request": "net/http", - "http.Response": "net/http", - "http.ResponseWriter": "net/http", - "http.RoundTripper": "net/http", - "http.Serve": "net/http", - "http.ServeContent": "net/http", - "http.ServeFile": "net/http", - "http.ServeMux": "net/http", - "http.Server": "net/http", - "http.SetCookie": "net/http", - "http.StateActive": "net/http", - "http.StateClosed": "net/http", - "http.StateHijacked": "net/http", - "http.StateIdle": "net/http", - "http.StateNew": "net/http", - "http.StatusAccepted": "net/http", - "http.StatusBadGateway": "net/http", - "http.StatusBadRequest": "net/http", - "http.StatusConflict": "net/http", - "http.StatusContinue": "net/http", - "http.StatusCreated": "net/http", - "http.StatusExpectationFailed": "net/http", - "http.StatusForbidden": "net/http", - "http.StatusFound": "net/http", - "http.StatusGatewayTimeout": "net/http", - "http.StatusGone": "net/http", - "http.StatusHTTPVersionNotSupported": "net/http", - "http.StatusInternalServerError": "net/http", - "http.StatusLengthRequired": "net/http", - "http.StatusMethodNotAllowed": "net/http", - "http.StatusMovedPermanently": "net/http", - "http.StatusMultipleChoices": "net/http", - "http.StatusNetworkAuthenticationRequired": "net/http", - "http.StatusNoContent": "net/http", - "http.StatusNonAuthoritativeInfo": "net/http", - "http.StatusNotAcceptable": "net/http", - "http.StatusNotFound": "net/http", - "http.StatusNotImplemented": "net/http", - "http.StatusNotModified": "net/http", - "http.StatusOK": "net/http", - "http.StatusPartialContent": "net/http", - "http.StatusPaymentRequired": "net/http", - "http.StatusPreconditionFailed": "net/http", - "http.StatusPreconditionRequired": "net/http", - "http.StatusProxyAuthRequired": "net/http", - "http.StatusRequestEntityTooLarge": "net/http", - "http.StatusRequestHeaderFieldsTooLarge": "net/http", - "http.StatusRequestTimeout": "net/http", - "http.StatusRequestURITooLong": "net/http", - "http.StatusRequestedRangeNotSatisfiable": "net/http", - "http.StatusResetContent": "net/http", - "http.StatusSeeOther": "net/http", - "http.StatusServiceUnavailable": "net/http", - "http.StatusSwitchingProtocols": "net/http", - "http.StatusTeapot": "net/http", - "http.StatusTemporaryRedirect": "net/http", - "http.StatusText": "net/http", - "http.StatusTooManyRequests": "net/http", - "http.StatusUnauthorized": "net/http", - "http.StatusUnavailableForLegalReasons": "net/http", - "http.StatusUnsupportedMediaType": "net/http", - "http.StatusUseProxy": "net/http", - "http.StripPrefix": "net/http", - "http.TimeFormat": "net/http", - "http.TimeoutHandler": "net/http", - "http.Transport": "net/http", - "httptest.DefaultRemoteAddr": "net/http/httptest", - "httptest.NewRecorder": "net/http/httptest", - "httptest.NewServer": "net/http/httptest", - "httptest.NewTLSServer": "net/http/httptest", - "httptest.NewUnstartedServer": "net/http/httptest", - "httptest.ResponseRecorder": "net/http/httptest", - "httptest.Server": "net/http/httptest", - "httputil.BufferPool": "net/http/httputil", - "httputil.ClientConn": "net/http/httputil", - "httputil.DumpRequest": "net/http/httputil", - "httputil.DumpRequestOut": "net/http/httputil", - "httputil.DumpResponse": "net/http/httputil", - "httputil.ErrClosed": "net/http/httputil", - "httputil.ErrLineTooLong": "net/http/httputil", - "httputil.ErrPersistEOF": "net/http/httputil", - "httputil.ErrPipeline": "net/http/httputil", - "httputil.NewChunkedReader": "net/http/httputil", - "httputil.NewChunkedWriter": "net/http/httputil", - "httputil.NewClientConn": "net/http/httputil", - "httputil.NewProxyClientConn": "net/http/httputil", - "httputil.NewServerConn": "net/http/httputil", - "httputil.NewSingleHostReverseProxy": "net/http/httputil", - "httputil.ReverseProxy": "net/http/httputil", - "httputil.ServerConn": "net/http/httputil", - "image.Alpha": "image", - "image.Alpha16": "image", - "image.Black": "image", - "image.CMYK": "image", - "image.Config": "image", - "image.Decode": "image", - "image.DecodeConfig": "image", - "image.ErrFormat": "image", - "image.Gray": "image", - "image.Gray16": "image", - "image.Image": "image", - "image.NRGBA": "image", - "image.NRGBA64": "image", - "image.NYCbCrA": "image", - "image.NewAlpha": "image", - "image.NewAlpha16": "image", - "image.NewCMYK": "image", - "image.NewGray": "image", - "image.NewGray16": "image", - "image.NewNRGBA": "image", - "image.NewNRGBA64": "image", - "image.NewNYCbCrA": "image", - "image.NewPaletted": "image", - "image.NewRGBA": "image", - "image.NewRGBA64": "image", - "image.NewUniform": "image", - "image.NewYCbCr": "image", - "image.Opaque": "image", - "image.Paletted": "image", - "image.PalettedImage": "image", - "image.Point": "image", - "image.Pt": "image", - "image.RGBA": "image", - "image.RGBA64": "image", - "image.Rect": "image", - "image.Rectangle": "image", - "image.RegisterFormat": "image", - "image.Transparent": "image", - "image.Uniform": "image", - "image.White": "image", - "image.YCbCr": "image", - "image.YCbCrSubsampleRatio": "image", - "image.YCbCrSubsampleRatio410": "image", - "image.YCbCrSubsampleRatio411": "image", - "image.YCbCrSubsampleRatio420": "image", - "image.YCbCrSubsampleRatio422": "image", - "image.YCbCrSubsampleRatio440": "image", - "image.YCbCrSubsampleRatio444": "image", - "image.ZP": "image", - "image.ZR": "image", - "importer.Default": "go/importer", - "importer.For": "go/importer", - "importer.Lookup": "go/importer", - "io.ByteReader": "io", - "io.ByteScanner": "io", - "io.ByteWriter": "io", - "io.Closer": "io", - "io.Copy": "io", - "io.CopyBuffer": "io", - "io.CopyN": "io", - "io.EOF": "io", - "io.ErrClosedPipe": "io", - "io.ErrNoProgress": "io", - "io.ErrShortBuffer": "io", - "io.ErrShortWrite": "io", - "io.ErrUnexpectedEOF": "io", - "io.LimitReader": "io", - "io.LimitedReader": "io", - "io.MultiReader": "io", - "io.MultiWriter": "io", - "io.NewSectionReader": "io", - "io.Pipe": "io", - "io.PipeReader": "io", - "io.PipeWriter": "io", - "io.ReadAtLeast": "io", - "io.ReadCloser": "io", - "io.ReadFull": "io", - "io.ReadSeeker": "io", - "io.ReadWriteCloser": "io", - "io.ReadWriteSeeker": "io", - "io.ReadWriter": "io", - "io.Reader": "io", - "io.ReaderAt": "io", - "io.ReaderFrom": "io", - "io.RuneReader": "io", - "io.RuneScanner": "io", - "io.SectionReader": "io", - "io.Seeker": "io", - "io.TeeReader": "io", - "io.WriteCloser": "io", - "io.WriteSeeker": "io", - "io.WriteString": "io", - "io.Writer": "io", - "io.WriterAt": "io", - "io.WriterTo": "io", - "iotest.DataErrReader": "testing/iotest", - "iotest.ErrTimeout": "testing/iotest", - "iotest.HalfReader": "testing/iotest", - "iotest.NewReadLogger": "testing/iotest", - "iotest.NewWriteLogger": "testing/iotest", - "iotest.OneByteReader": "testing/iotest", - "iotest.TimeoutReader": "testing/iotest", - "iotest.TruncateWriter": "testing/iotest", - "ioutil.Discard": "io/ioutil", - "ioutil.NopCloser": "io/ioutil", - "ioutil.ReadAll": "io/ioutil", - "ioutil.ReadDir": "io/ioutil", - "ioutil.ReadFile": "io/ioutil", - "ioutil.TempDir": "io/ioutil", - "ioutil.TempFile": "io/ioutil", - "ioutil.WriteFile": "io/ioutil", - "jpeg.Decode": "image/jpeg", - "jpeg.DecodeConfig": "image/jpeg", - "jpeg.DefaultQuality": "image/jpeg", - "jpeg.Encode": "image/jpeg", - "jpeg.FormatError": "image/jpeg", - "jpeg.Options": "image/jpeg", - "jpeg.Reader": "image/jpeg", - "jpeg.UnsupportedError": "image/jpeg", - "json.Compact": "encoding/json", - "json.Decoder": "encoding/json", - "json.Delim": "encoding/json", - "json.Encoder": "encoding/json", - "json.HTMLEscape": "encoding/json", - "json.Indent": "encoding/json", - "json.InvalidUTF8Error": "encoding/json", - "json.InvalidUnmarshalError": "encoding/json", - "json.Marshal": "encoding/json", - "json.MarshalIndent": "encoding/json", - "json.Marshaler": "encoding/json", - "json.MarshalerError": "encoding/json", - "json.NewDecoder": "encoding/json", - "json.NewEncoder": "encoding/json", - "json.Number": "encoding/json", - "json.RawMessage": "encoding/json", - "json.SyntaxError": "encoding/json", - "json.Token": "encoding/json", - "json.Unmarshal": "encoding/json", - "json.UnmarshalFieldError": "encoding/json", - "json.UnmarshalTypeError": "encoding/json", - "json.Unmarshaler": "encoding/json", - "json.UnsupportedTypeError": "encoding/json", - "json.UnsupportedValueError": "encoding/json", - "jsonrpc.Dial": "net/rpc/jsonrpc", - "jsonrpc.NewClient": "net/rpc/jsonrpc", - "jsonrpc.NewClientCodec": "net/rpc/jsonrpc", - "jsonrpc.NewServerCodec": "net/rpc/jsonrpc", - "jsonrpc.ServeConn": "net/rpc/jsonrpc", - "list.Element": "container/list", - "list.List": "container/list", - "list.New": "container/list", - "log.Fatal": "log", - "log.Fatalf": "log", - "log.Fatalln": "log", - "log.Flags": "log", - "log.LUTC": "log", - "log.Ldate": "log", - "log.Llongfile": "log", - "log.Lmicroseconds": "log", - "log.Logger": "log", - "log.Lshortfile": "log", - "log.LstdFlags": "log", - "log.Ltime": "log", - "log.New": "log", - "log.Output": "log", - "log.Panic": "log", - "log.Panicf": "log", - "log.Panicln": "log", - "log.Prefix": "log", - "log.Print": "log", - "log.Printf": "log", - "log.Println": "log", - "log.SetFlags": "log", - "log.SetOutput": "log", - "log.SetPrefix": "log", - "lzw.LSB": "compress/lzw", - "lzw.MSB": "compress/lzw", - "lzw.NewReader": "compress/lzw", - "lzw.NewWriter": "compress/lzw", - "lzw.Order": "compress/lzw", - "macho.Cpu": "debug/macho", - "macho.Cpu386": "debug/macho", - "macho.CpuAmd64": "debug/macho", - "macho.CpuArm": "debug/macho", - "macho.CpuPpc": "debug/macho", - "macho.CpuPpc64": "debug/macho", - "macho.Dylib": "debug/macho", - "macho.DylibCmd": "debug/macho", - "macho.Dysymtab": "debug/macho", - "macho.DysymtabCmd": "debug/macho", - "macho.ErrNotFat": "debug/macho", - "macho.FatArch": "debug/macho", - "macho.FatArchHeader": "debug/macho", - "macho.FatFile": "debug/macho", - "macho.File": "debug/macho", - "macho.FileHeader": "debug/macho", - "macho.FormatError": "debug/macho", - "macho.Load": "debug/macho", - "macho.LoadBytes": "debug/macho", - "macho.LoadCmd": "debug/macho", - "macho.LoadCmdDylib": "debug/macho", - "macho.LoadCmdDylinker": "debug/macho", - "macho.LoadCmdDysymtab": "debug/macho", - "macho.LoadCmdSegment": "debug/macho", - "macho.LoadCmdSegment64": "debug/macho", - "macho.LoadCmdSymtab": "debug/macho", - "macho.LoadCmdThread": "debug/macho", - "macho.LoadCmdUnixThread": "debug/macho", - "macho.Magic32": "debug/macho", - "macho.Magic64": "debug/macho", - "macho.MagicFat": "debug/macho", - "macho.NewFatFile": "debug/macho", - "macho.NewFile": "debug/macho", - "macho.Nlist32": "debug/macho", - "macho.Nlist64": "debug/macho", - "macho.Open": "debug/macho", - "macho.OpenFat": "debug/macho", - "macho.Regs386": "debug/macho", - "macho.RegsAMD64": "debug/macho", - "macho.Section": "debug/macho", - "macho.Section32": "debug/macho", - "macho.Section64": "debug/macho", - "macho.SectionHeader": "debug/macho", - "macho.Segment": "debug/macho", - "macho.Segment32": "debug/macho", - "macho.Segment64": "debug/macho", - "macho.SegmentHeader": "debug/macho", - "macho.Symbol": "debug/macho", - "macho.Symtab": "debug/macho", - "macho.SymtabCmd": "debug/macho", - "macho.Thread": "debug/macho", - "macho.Type": "debug/macho", - "macho.TypeBundle": "debug/macho", - "macho.TypeDylib": "debug/macho", - "macho.TypeExec": "debug/macho", - "macho.TypeObj": "debug/macho", - "mail.Address": "net/mail", - "mail.AddressParser": "net/mail", - "mail.ErrHeaderNotPresent": "net/mail", - "mail.Header": "net/mail", - "mail.Message": "net/mail", - "mail.ParseAddress": "net/mail", - "mail.ParseAddressList": "net/mail", - "mail.ReadMessage": "net/mail", - "math.Abs": "math", - "math.Acos": "math", - "math.Acosh": "math", - "math.Asin": "math", - "math.Asinh": "math", - "math.Atan": "math", - "math.Atan2": "math", - "math.Atanh": "math", - "math.Cbrt": "math", - "math.Ceil": "math", - "math.Copysign": "math", - "math.Cos": "math", - "math.Cosh": "math", - "math.Dim": "math", - "math.E": "math", - "math.Erf": "math", - "math.Erfc": "math", - "math.Exp": "math", - "math.Exp2": "math", - "math.Expm1": "math", - "math.Float32bits": "math", - "math.Float32frombits": "math", - "math.Float64bits": "math", - "math.Float64frombits": "math", - "math.Floor": "math", - "math.Frexp": "math", - "math.Gamma": "math", - "math.Hypot": "math", - "math.Ilogb": "math", - "math.Inf": "math", - "math.IsInf": "math", - "math.IsNaN": "math", - "math.J0": "math", - "math.J1": "math", - "math.Jn": "math", - "math.Ldexp": "math", - "math.Lgamma": "math", - "math.Ln10": "math", - "math.Ln2": "math", - "math.Log": "math", - "math.Log10": "math", - "math.Log10E": "math", - "math.Log1p": "math", - "math.Log2": "math", - "math.Log2E": "math", - "math.Logb": "math", - "math.Max": "math", - "math.MaxFloat32": "math", - "math.MaxFloat64": "math", - "math.MaxInt16": "math", - "math.MaxInt32": "math", - "math.MaxInt64": "math", - "math.MaxInt8": "math", - "math.MaxUint16": "math", - "math.MaxUint32": "math", - "math.MaxUint64": "math", - "math.MaxUint8": "math", - "math.Min": "math", - "math.MinInt16": "math", - "math.MinInt32": "math", - "math.MinInt64": "math", - "math.MinInt8": "math", - "math.Mod": "math", - "math.Modf": "math", - "math.NaN": "math", - "math.Nextafter": "math", - "math.Nextafter32": "math", - "math.Phi": "math", - "math.Pi": "math", - "math.Pow": "math", - "math.Pow10": "math", - "math.Remainder": "math", - "math.Signbit": "math", - "math.Sin": "math", - "math.Sincos": "math", - "math.Sinh": "math", - "math.SmallestNonzeroFloat32": "math", - "math.SmallestNonzeroFloat64": "math", - "math.Sqrt": "math", - "math.Sqrt2": "math", - "math.SqrtE": "math", - "math.SqrtPhi": "math", - "math.SqrtPi": "math", - "math.Tan": "math", - "math.Tanh": "math", - "math.Trunc": "math", - "math.Y0": "math", - "math.Y1": "math", - "math.Yn": "math", - "md5.BlockSize": "crypto/md5", - "md5.New": "crypto/md5", - "md5.Size": "crypto/md5", - "md5.Sum": "crypto/md5", - "mime.AddExtensionType": "mime", - "mime.BEncoding": "mime", - "mime.ExtensionsByType": "mime", - "mime.FormatMediaType": "mime", - "mime.ParseMediaType": "mime", - "mime.QEncoding": "mime", - "mime.TypeByExtension": "mime", - "mime.WordDecoder": "mime", - "mime.WordEncoder": "mime", - "multipart.File": "mime/multipart", - "multipart.FileHeader": "mime/multipart", - "multipart.Form": "mime/multipart", - "multipart.NewReader": "mime/multipart", - "multipart.NewWriter": "mime/multipart", - "multipart.Part": "mime/multipart", - "multipart.Reader": "mime/multipart", - "multipart.Writer": "mime/multipart", - "net.Addr": "net", - "net.AddrError": "net", - "net.CIDRMask": "net", - "net.Conn": "net", - "net.DNSConfigError": "net", - "net.DNSError": "net", - "net.Dial": "net", - "net.DialIP": "net", - "net.DialTCP": "net", - "net.DialTimeout": "net", - "net.DialUDP": "net", - "net.DialUnix": "net", - "net.Dialer": "net", - "net.ErrWriteToConnected": "net", - "net.Error": "net", - "net.FileConn": "net", - "net.FileListener": "net", - "net.FilePacketConn": "net", - "net.FlagBroadcast": "net", - "net.FlagLoopback": "net", - "net.FlagMulticast": "net", - "net.FlagPointToPoint": "net", - "net.FlagUp": "net", - "net.Flags": "net", - "net.HardwareAddr": "net", - "net.IP": "net", - "net.IPAddr": "net", - "net.IPConn": "net", - "net.IPMask": "net", - "net.IPNet": "net", - "net.IPv4": "net", - "net.IPv4Mask": "net", - "net.IPv4allrouter": "net", - "net.IPv4allsys": "net", - "net.IPv4bcast": "net", - "net.IPv4len": "net", - "net.IPv4zero": "net", - "net.IPv6interfacelocalallnodes": "net", - "net.IPv6len": "net", - "net.IPv6linklocalallnodes": "net", - "net.IPv6linklocalallrouters": "net", - "net.IPv6loopback": "net", - "net.IPv6unspecified": "net", - "net.IPv6zero": "net", - "net.Interface": "net", - "net.InterfaceAddrs": "net", - "net.InterfaceByIndex": "net", - "net.InterfaceByName": "net", - "net.Interfaces": "net", - "net.InvalidAddrError": "net", - "net.JoinHostPort": "net", - "net.Listen": "net", - "net.ListenIP": "net", - "net.ListenMulticastUDP": "net", - "net.ListenPacket": "net", - "net.ListenTCP": "net", - "net.ListenUDP": "net", - "net.ListenUnix": "net", - "net.ListenUnixgram": "net", - "net.Listener": "net", - "net.LookupAddr": "net", - "net.LookupCNAME": "net", - "net.LookupHost": "net", - "net.LookupIP": "net", - "net.LookupMX": "net", - "net.LookupNS": "net", - "net.LookupPort": "net", - "net.LookupSRV": "net", - "net.LookupTXT": "net", - "net.MX": "net", - "net.NS": "net", - "net.OpError": "net", - "net.PacketConn": "net", - "net.ParseCIDR": "net", - "net.ParseError": "net", - "net.ParseIP": "net", - "net.ParseMAC": "net", - "net.Pipe": "net", - "net.ResolveIPAddr": "net", - "net.ResolveTCPAddr": "net", - "net.ResolveUDPAddr": "net", - "net.ResolveUnixAddr": "net", - "net.SRV": "net", - "net.SplitHostPort": "net", - "net.TCPAddr": "net", - "net.TCPConn": "net", - "net.TCPListener": "net", - "net.UDPAddr": "net", - "net.UDPConn": "net", - "net.UnixAddr": "net", - "net.UnixConn": "net", - "net.UnixListener": "net", - "net.UnknownNetworkError": "net", - "os.Args": "os", - "os.Chdir": "os", - "os.Chmod": "os", - "os.Chown": "os", - "os.Chtimes": "os", - "os.Clearenv": "os", - "os.Create": "os", - "os.DevNull": "os", - "os.Environ": "os", - "os.ErrExist": "os", - "os.ErrInvalid": "os", - "os.ErrNotExist": "os", - "os.ErrPermission": "os", - "os.Exit": "os", - "os.Expand": "os", - "os.ExpandEnv": "os", - "os.File": "os", - "os.FileInfo": "os", - "os.FileMode": "os", - "os.FindProcess": "os", - "os.Getegid": "os", - "os.Getenv": "os", - "os.Geteuid": "os", - "os.Getgid": "os", - "os.Getgroups": "os", - "os.Getpagesize": "os", - "os.Getpid": "os", - "os.Getppid": "os", - "os.Getuid": "os", - "os.Getwd": "os", - "os.Hostname": "os", - "os.Interrupt": "os", - "os.IsExist": "os", - "os.IsNotExist": "os", - "os.IsPathSeparator": "os", - "os.IsPermission": "os", - "os.Kill": "os", - "os.Lchown": "os", - "os.Link": "os", - "os.LinkError": "os", - "os.LookupEnv": "os", - "os.Lstat": "os", - "os.Mkdir": "os", - "os.MkdirAll": "os", - "os.ModeAppend": "os", - "os.ModeCharDevice": "os", - "os.ModeDevice": "os", - "os.ModeDir": "os", - "os.ModeExclusive": "os", - "os.ModeNamedPipe": "os", - "os.ModePerm": "os", - "os.ModeSetgid": "os", - "os.ModeSetuid": "os", - "os.ModeSocket": "os", - "os.ModeSticky": "os", - "os.ModeSymlink": "os", - "os.ModeTemporary": "os", - "os.ModeType": "os", - "os.NewFile": "os", - "os.NewSyscallError": "os", - "os.O_APPEND": "os", - "os.O_CREATE": "os", - "os.O_EXCL": "os", - "os.O_RDONLY": "os", - "os.O_RDWR": "os", - "os.O_SYNC": "os", - "os.O_TRUNC": "os", - "os.O_WRONLY": "os", - "os.Open": "os", - "os.OpenFile": "os", - "os.PathError": "os", - "os.PathListSeparator": "os", - "os.PathSeparator": "os", - "os.Pipe": "os", - "os.ProcAttr": "os", - "os.Process": "os", - "os.ProcessState": "os", - "os.Readlink": "os", - "os.Remove": "os", - "os.RemoveAll": "os", - "os.Rename": "os", - "os.SEEK_CUR": "os", - "os.SEEK_END": "os", - "os.SEEK_SET": "os", - "os.SameFile": "os", - "os.Setenv": "os", - "os.Signal": "os", - "os.StartProcess": "os", - "os.Stat": "os", - "os.Stderr": "os", - "os.Stdin": "os", - "os.Stdout": "os", - "os.Symlink": "os", - "os.SyscallError": "os", - "os.TempDir": "os", - "os.Truncate": "os", - "os.Unsetenv": "os", - "palette.Plan9": "image/color/palette", - "palette.WebSafe": "image/color/palette", - "parse.ActionNode": "text/template/parse", - "parse.BoolNode": "text/template/parse", - "parse.BranchNode": "text/template/parse", - "parse.ChainNode": "text/template/parse", - "parse.CommandNode": "text/template/parse", - "parse.DotNode": "text/template/parse", - "parse.FieldNode": "text/template/parse", - "parse.IdentifierNode": "text/template/parse", - "parse.IfNode": "text/template/parse", - "parse.IsEmptyTree": "text/template/parse", - "parse.ListNode": "text/template/parse", - "parse.New": "text/template/parse", - "parse.NewIdentifier": "text/template/parse", - "parse.NilNode": "text/template/parse", - "parse.Node": "text/template/parse", - "parse.NodeAction": "text/template/parse", - "parse.NodeBool": "text/template/parse", - "parse.NodeChain": "text/template/parse", - "parse.NodeCommand": "text/template/parse", - "parse.NodeDot": "text/template/parse", - "parse.NodeField": "text/template/parse", - "parse.NodeIdentifier": "text/template/parse", - "parse.NodeIf": "text/template/parse", - "parse.NodeList": "text/template/parse", - "parse.NodeNil": "text/template/parse", - "parse.NodeNumber": "text/template/parse", - "parse.NodePipe": "text/template/parse", - "parse.NodeRange": "text/template/parse", - "parse.NodeString": "text/template/parse", - "parse.NodeTemplate": "text/template/parse", - "parse.NodeText": "text/template/parse", - "parse.NodeType": "text/template/parse", - "parse.NodeVariable": "text/template/parse", - "parse.NodeWith": "text/template/parse", - "parse.NumberNode": "text/template/parse", - "parse.Parse": "text/template/parse", - "parse.PipeNode": "text/template/parse", - "parse.Pos": "text/template/parse", - "parse.RangeNode": "text/template/parse", - "parse.StringNode": "text/template/parse", - "parse.TemplateNode": "text/template/parse", - "parse.TextNode": "text/template/parse", - "parse.Tree": "text/template/parse", - "parse.VariableNode": "text/template/parse", - "parse.WithNode": "text/template/parse", - "parser.AllErrors": "go/parser", - "parser.DeclarationErrors": "go/parser", - "parser.ImportsOnly": "go/parser", - "parser.Mode": "go/parser", - "parser.PackageClauseOnly": "go/parser", - "parser.ParseComments": "go/parser", - "parser.ParseDir": "go/parser", - "parser.ParseExpr": "go/parser", - "parser.ParseExprFrom": "go/parser", - "parser.ParseFile": "go/parser", - "parser.SpuriousErrors": "go/parser", - "parser.Trace": "go/parser", - "path.Base": "path", - "path.Clean": "path", - "path.Dir": "path", - "path.ErrBadPattern": "path", - "path.Ext": "path", - "path.IsAbs": "path", - "path.Join": "path", - "path.Match": "path", - "path.Split": "path", - "pe.COFFSymbol": "debug/pe", - "pe.COFFSymbolSize": "debug/pe", - "pe.DataDirectory": "debug/pe", - "pe.File": "debug/pe", - "pe.FileHeader": "debug/pe", - "pe.FormatError": "debug/pe", - "pe.IMAGE_FILE_MACHINE_AM33": "debug/pe", - "pe.IMAGE_FILE_MACHINE_AMD64": "debug/pe", - "pe.IMAGE_FILE_MACHINE_ARM": "debug/pe", - "pe.IMAGE_FILE_MACHINE_EBC": "debug/pe", - "pe.IMAGE_FILE_MACHINE_I386": "debug/pe", - "pe.IMAGE_FILE_MACHINE_IA64": "debug/pe", - "pe.IMAGE_FILE_MACHINE_M32R": "debug/pe", - "pe.IMAGE_FILE_MACHINE_MIPS16": "debug/pe", - "pe.IMAGE_FILE_MACHINE_MIPSFPU": "debug/pe", - "pe.IMAGE_FILE_MACHINE_MIPSFPU16": "debug/pe", - "pe.IMAGE_FILE_MACHINE_POWERPC": "debug/pe", - "pe.IMAGE_FILE_MACHINE_POWERPCFP": "debug/pe", - "pe.IMAGE_FILE_MACHINE_R4000": "debug/pe", - "pe.IMAGE_FILE_MACHINE_SH3": "debug/pe", - "pe.IMAGE_FILE_MACHINE_SH3DSP": "debug/pe", - "pe.IMAGE_FILE_MACHINE_SH4": "debug/pe", - "pe.IMAGE_FILE_MACHINE_SH5": "debug/pe", - "pe.IMAGE_FILE_MACHINE_THUMB": "debug/pe", - "pe.IMAGE_FILE_MACHINE_UNKNOWN": "debug/pe", - "pe.IMAGE_FILE_MACHINE_WCEMIPSV2": "debug/pe", - "pe.ImportDirectory": "debug/pe", - "pe.NewFile": "debug/pe", - "pe.Open": "debug/pe", - "pe.OptionalHeader32": "debug/pe", - "pe.OptionalHeader64": "debug/pe", - "pe.Section": "debug/pe", - "pe.SectionHeader": "debug/pe", - "pe.SectionHeader32": "debug/pe", - "pe.Symbol": "debug/pe", - "pem.Block": "encoding/pem", - "pem.Decode": "encoding/pem", - "pem.Encode": "encoding/pem", - "pem.EncodeToMemory": "encoding/pem", - "pkix.AlgorithmIdentifier": "crypto/x509/pkix", - "pkix.AttributeTypeAndValue": "crypto/x509/pkix", - "pkix.AttributeTypeAndValueSET": "crypto/x509/pkix", - "pkix.CertificateList": "crypto/x509/pkix", - "pkix.Extension": "crypto/x509/pkix", - "pkix.Name": "crypto/x509/pkix", - "pkix.RDNSequence": "crypto/x509/pkix", - "pkix.RelativeDistinguishedNameSET": "crypto/x509/pkix", - "pkix.RevokedCertificate": "crypto/x509/pkix", - "pkix.TBSCertificateList": "crypto/x509/pkix", - "plan9obj.File": "debug/plan9obj", - "plan9obj.FileHeader": "debug/plan9obj", - "plan9obj.Magic386": "debug/plan9obj", - "plan9obj.Magic64": "debug/plan9obj", - "plan9obj.MagicAMD64": "debug/plan9obj", - "plan9obj.MagicARM": "debug/plan9obj", - "plan9obj.NewFile": "debug/plan9obj", - "plan9obj.Open": "debug/plan9obj", - "plan9obj.Section": "debug/plan9obj", - "plan9obj.SectionHeader": "debug/plan9obj", - "plan9obj.Sym": "debug/plan9obj", - "png.BestCompression": "image/png", - "png.BestSpeed": "image/png", - "png.CompressionLevel": "image/png", - "png.Decode": "image/png", - "png.DecodeConfig": "image/png", - "png.DefaultCompression": "image/png", - "png.Encode": "image/png", - "png.Encoder": "image/png", - "png.FormatError": "image/png", - "png.NoCompression": "image/png", - "png.UnsupportedError": "image/png", - "pprof.Cmdline": "net/http/pprof", - "pprof.Handler": "net/http/pprof", - "pprof.Index": "net/http/pprof", - "pprof.Lookup": "runtime/pprof", - "pprof.NewProfile": "runtime/pprof", - // "pprof.Profile" is ambiguous - "pprof.Profiles": "runtime/pprof", - "pprof.StartCPUProfile": "runtime/pprof", - "pprof.StopCPUProfile": "runtime/pprof", - "pprof.Symbol": "net/http/pprof", - "pprof.Trace": "net/http/pprof", - "pprof.WriteHeapProfile": "runtime/pprof", - "printer.CommentedNode": "go/printer", - "printer.Config": "go/printer", - "printer.Fprint": "go/printer", - "printer.Mode": "go/printer", - "printer.RawFormat": "go/printer", - "printer.SourcePos": "go/printer", - "printer.TabIndent": "go/printer", - "printer.UseSpaces": "go/printer", - "quick.Check": "testing/quick", - "quick.CheckEqual": "testing/quick", - "quick.CheckEqualError": "testing/quick", - "quick.CheckError": "testing/quick", - "quick.Config": "testing/quick", - "quick.Generator": "testing/quick", - "quick.SetupError": "testing/quick", - "quick.Value": "testing/quick", - "quotedprintable.NewReader": "mime/quotedprintable", - "quotedprintable.NewWriter": "mime/quotedprintable", - "quotedprintable.Reader": "mime/quotedprintable", - "quotedprintable.Writer": "mime/quotedprintable", - "rand.ExpFloat64": "math/rand", - "rand.Float32": "math/rand", - "rand.Float64": "math/rand", - // "rand.Int" is ambiguous - "rand.Int31": "math/rand", - "rand.Int31n": "math/rand", - "rand.Int63": "math/rand", - "rand.Int63n": "math/rand", - "rand.Intn": "math/rand", - "rand.New": "math/rand", - "rand.NewSource": "math/rand", - "rand.NewZipf": "math/rand", - "rand.NormFloat64": "math/rand", - "rand.Perm": "math/rand", - "rand.Prime": "crypto/rand", - "rand.Rand": "math/rand", - // "rand.Read" is ambiguous - "rand.Reader": "crypto/rand", - "rand.Seed": "math/rand", - "rand.Source": "math/rand", - "rand.Uint32": "math/rand", - "rand.Zipf": "math/rand", - "rc4.Cipher": "crypto/rc4", - "rc4.KeySizeError": "crypto/rc4", - "rc4.NewCipher": "crypto/rc4", - "reflect.Append": "reflect", - "reflect.AppendSlice": "reflect", - "reflect.Array": "reflect", - "reflect.ArrayOf": "reflect", - "reflect.Bool": "reflect", - "reflect.BothDir": "reflect", - "reflect.Chan": "reflect", - "reflect.ChanDir": "reflect", - "reflect.ChanOf": "reflect", - "reflect.Complex128": "reflect", - "reflect.Complex64": "reflect", - "reflect.Copy": "reflect", - "reflect.DeepEqual": "reflect", - "reflect.Float32": "reflect", - "reflect.Float64": "reflect", - "reflect.Func": "reflect", - "reflect.FuncOf": "reflect", - "reflect.Indirect": "reflect", - "reflect.Int": "reflect", - "reflect.Int16": "reflect", - "reflect.Int32": "reflect", - "reflect.Int64": "reflect", - "reflect.Int8": "reflect", - "reflect.Interface": "reflect", - "reflect.Invalid": "reflect", - "reflect.Kind": "reflect", - "reflect.MakeChan": "reflect", - "reflect.MakeFunc": "reflect", - "reflect.MakeMap": "reflect", - "reflect.MakeSlice": "reflect", - "reflect.Map": "reflect", - "reflect.MapOf": "reflect", - "reflect.Method": "reflect", - "reflect.New": "reflect", - "reflect.NewAt": "reflect", - "reflect.Ptr": "reflect", - "reflect.PtrTo": "reflect", - "reflect.RecvDir": "reflect", - "reflect.Select": "reflect", - "reflect.SelectCase": "reflect", - "reflect.SelectDefault": "reflect", - "reflect.SelectDir": "reflect", - "reflect.SelectRecv": "reflect", - "reflect.SelectSend": "reflect", - "reflect.SendDir": "reflect", - "reflect.Slice": "reflect", - "reflect.SliceHeader": "reflect", - "reflect.SliceOf": "reflect", - "reflect.String": "reflect", - "reflect.StringHeader": "reflect", - "reflect.Struct": "reflect", - "reflect.StructField": "reflect", - "reflect.StructTag": "reflect", - "reflect.TypeOf": "reflect", - "reflect.Uint": "reflect", - "reflect.Uint16": "reflect", - "reflect.Uint32": "reflect", - "reflect.Uint64": "reflect", - "reflect.Uint8": "reflect", - "reflect.Uintptr": "reflect", - "reflect.UnsafePointer": "reflect", - "reflect.Value": "reflect", - "reflect.ValueError": "reflect", - "reflect.ValueOf": "reflect", - "reflect.Zero": "reflect", - "regexp.Compile": "regexp", - "regexp.CompilePOSIX": "regexp", - "regexp.Match": "regexp", - "regexp.MatchReader": "regexp", - "regexp.MatchString": "regexp", - "regexp.MustCompile": "regexp", - "regexp.MustCompilePOSIX": "regexp", - "regexp.QuoteMeta": "regexp", - "regexp.Regexp": "regexp", - "ring.New": "container/ring", - "ring.Ring": "container/ring", - "rpc.Accept": "net/rpc", - "rpc.Call": "net/rpc", - "rpc.Client": "net/rpc", - "rpc.ClientCodec": "net/rpc", - "rpc.DefaultDebugPath": "net/rpc", - "rpc.DefaultRPCPath": "net/rpc", - "rpc.DefaultServer": "net/rpc", - "rpc.Dial": "net/rpc", - "rpc.DialHTTP": "net/rpc", - "rpc.DialHTTPPath": "net/rpc", - "rpc.ErrShutdown": "net/rpc", - "rpc.HandleHTTP": "net/rpc", - "rpc.NewClient": "net/rpc", - "rpc.NewClientWithCodec": "net/rpc", - "rpc.NewServer": "net/rpc", - "rpc.Register": "net/rpc", - "rpc.RegisterName": "net/rpc", - "rpc.Request": "net/rpc", - "rpc.Response": "net/rpc", - "rpc.ServeCodec": "net/rpc", - "rpc.ServeConn": "net/rpc", - "rpc.ServeRequest": "net/rpc", - "rpc.Server": "net/rpc", - "rpc.ServerCodec": "net/rpc", - "rpc.ServerError": "net/rpc", - "rsa.CRTValue": "crypto/rsa", - "rsa.DecryptOAEP": "crypto/rsa", - "rsa.DecryptPKCS1v15": "crypto/rsa", - "rsa.DecryptPKCS1v15SessionKey": "crypto/rsa", - "rsa.EncryptOAEP": "crypto/rsa", - "rsa.EncryptPKCS1v15": "crypto/rsa", - "rsa.ErrDecryption": "crypto/rsa", - "rsa.ErrMessageTooLong": "crypto/rsa", - "rsa.ErrVerification": "crypto/rsa", - "rsa.GenerateKey": "crypto/rsa", - "rsa.GenerateMultiPrimeKey": "crypto/rsa", - "rsa.OAEPOptions": "crypto/rsa", - "rsa.PKCS1v15DecryptOptions": "crypto/rsa", - "rsa.PSSOptions": "crypto/rsa", - "rsa.PSSSaltLengthAuto": "crypto/rsa", - "rsa.PSSSaltLengthEqualsHash": "crypto/rsa", - "rsa.PrecomputedValues": "crypto/rsa", - "rsa.PrivateKey": "crypto/rsa", - "rsa.PublicKey": "crypto/rsa", - "rsa.SignPKCS1v15": "crypto/rsa", - "rsa.SignPSS": "crypto/rsa", - "rsa.VerifyPKCS1v15": "crypto/rsa", - "rsa.VerifyPSS": "crypto/rsa", - "runtime.BlockProfile": "runtime", - "runtime.BlockProfileRecord": "runtime", - "runtime.Breakpoint": "runtime", - "runtime.CPUProfile": "runtime", - "runtime.Caller": "runtime", - "runtime.Callers": "runtime", - "runtime.Compiler": "runtime", - "runtime.Error": "runtime", - "runtime.Func": "runtime", - "runtime.FuncForPC": "runtime", - "runtime.GC": "runtime", - "runtime.GOARCH": "runtime", - "runtime.GOMAXPROCS": "runtime", - "runtime.GOOS": "runtime", - "runtime.GOROOT": "runtime", - "runtime.Goexit": "runtime", - "runtime.GoroutineProfile": "runtime", - "runtime.Gosched": "runtime", - "runtime.LockOSThread": "runtime", - "runtime.MemProfile": "runtime", - "runtime.MemProfileRate": "runtime", - "runtime.MemProfileRecord": "runtime", - "runtime.MemStats": "runtime", - "runtime.NumCPU": "runtime", - "runtime.NumCgoCall": "runtime", - "runtime.NumGoroutine": "runtime", - "runtime.ReadMemStats": "runtime", - "runtime.ReadTrace": "runtime", - "runtime.SetBlockProfileRate": "runtime", - "runtime.SetCPUProfileRate": "runtime", - "runtime.SetFinalizer": "runtime", - "runtime.Stack": "runtime", - "runtime.StackRecord": "runtime", - "runtime.StartTrace": "runtime", - "runtime.StopTrace": "runtime", - "runtime.ThreadCreateProfile": "runtime", - "runtime.TypeAssertionError": "runtime", - "runtime.UnlockOSThread": "runtime", - "runtime.Version": "runtime", - "scanner.Char": "text/scanner", - "scanner.Comment": "text/scanner", - "scanner.EOF": "text/scanner", - "scanner.Error": "go/scanner", - "scanner.ErrorHandler": "go/scanner", - "scanner.ErrorList": "go/scanner", - "scanner.Float": "text/scanner", - "scanner.GoTokens": "text/scanner", - "scanner.GoWhitespace": "text/scanner", - "scanner.Ident": "text/scanner", - "scanner.Int": "text/scanner", - "scanner.Mode": "go/scanner", - "scanner.Position": "text/scanner", - "scanner.PrintError": "go/scanner", - "scanner.RawString": "text/scanner", - "scanner.ScanChars": "text/scanner", - // "scanner.ScanComments" is ambiguous - "scanner.ScanFloats": "text/scanner", - "scanner.ScanIdents": "text/scanner", - "scanner.ScanInts": "text/scanner", - "scanner.ScanRawStrings": "text/scanner", - "scanner.ScanStrings": "text/scanner", - // "scanner.Scanner" is ambiguous - "scanner.SkipComments": "text/scanner", - "scanner.String": "text/scanner", - "scanner.TokenString": "text/scanner", - "sha1.BlockSize": "crypto/sha1", - "sha1.New": "crypto/sha1", - "sha1.Size": "crypto/sha1", - "sha1.Sum": "crypto/sha1", - "sha256.BlockSize": "crypto/sha256", - "sha256.New": "crypto/sha256", - "sha256.New224": "crypto/sha256", - "sha256.Size": "crypto/sha256", - "sha256.Size224": "crypto/sha256", - "sha256.Sum224": "crypto/sha256", - "sha256.Sum256": "crypto/sha256", - "sha512.BlockSize": "crypto/sha512", - "sha512.New": "crypto/sha512", - "sha512.New384": "crypto/sha512", - "sha512.New512_224": "crypto/sha512", - "sha512.New512_256": "crypto/sha512", - "sha512.Size": "crypto/sha512", - "sha512.Size224": "crypto/sha512", - "sha512.Size256": "crypto/sha512", - "sha512.Size384": "crypto/sha512", - "sha512.Sum384": "crypto/sha512", - "sha512.Sum512": "crypto/sha512", - "sha512.Sum512_224": "crypto/sha512", - "sha512.Sum512_256": "crypto/sha512", - "signal.Ignore": "os/signal", - "signal.Notify": "os/signal", - "signal.Reset": "os/signal", - "signal.Stop": "os/signal", - "smtp.Auth": "net/smtp", - "smtp.CRAMMD5Auth": "net/smtp", - "smtp.Client": "net/smtp", - "smtp.Dial": "net/smtp", - "smtp.NewClient": "net/smtp", - "smtp.PlainAuth": "net/smtp", - "smtp.SendMail": "net/smtp", - "smtp.ServerInfo": "net/smtp", - "sort.Float64Slice": "sort", - "sort.Float64s": "sort", - "sort.Float64sAreSorted": "sort", - "sort.IntSlice": "sort", - "sort.Interface": "sort", - "sort.Ints": "sort", - "sort.IntsAreSorted": "sort", - "sort.IsSorted": "sort", - "sort.Reverse": "sort", - "sort.Search": "sort", - "sort.SearchFloat64s": "sort", - "sort.SearchInts": "sort", - "sort.SearchStrings": "sort", - "sort.Sort": "sort", - "sort.Stable": "sort", - "sort.StringSlice": "sort", - "sort.Strings": "sort", - "sort.StringsAreSorted": "sort", - "sql.DB": "database/sql", - "sql.DBStats": "database/sql", - "sql.Drivers": "database/sql", - "sql.ErrNoRows": "database/sql", - "sql.ErrTxDone": "database/sql", - "sql.NullBool": "database/sql", - "sql.NullFloat64": "database/sql", - "sql.NullInt64": "database/sql", - "sql.NullString": "database/sql", - "sql.Open": "database/sql", - "sql.RawBytes": "database/sql", - "sql.Register": "database/sql", - "sql.Result": "database/sql", - "sql.Row": "database/sql", - "sql.Rows": "database/sql", - "sql.Scanner": "database/sql", - "sql.Stmt": "database/sql", - "sql.Tx": "database/sql", - "strconv.AppendBool": "strconv", - "strconv.AppendFloat": "strconv", - "strconv.AppendInt": "strconv", - "strconv.AppendQuote": "strconv", - "strconv.AppendQuoteRune": "strconv", - "strconv.AppendQuoteRuneToASCII": "strconv", - "strconv.AppendQuoteRuneToGraphic": "strconv", - "strconv.AppendQuoteToASCII": "strconv", - "strconv.AppendQuoteToGraphic": "strconv", - "strconv.AppendUint": "strconv", - "strconv.Atoi": "strconv", - "strconv.CanBackquote": "strconv", - "strconv.ErrRange": "strconv", - "strconv.ErrSyntax": "strconv", - "strconv.FormatBool": "strconv", - "strconv.FormatFloat": "strconv", - "strconv.FormatInt": "strconv", - "strconv.FormatUint": "strconv", - "strconv.IntSize": "strconv", - "strconv.IsGraphic": "strconv", - "strconv.IsPrint": "strconv", - "strconv.Itoa": "strconv", - "strconv.NumError": "strconv", - "strconv.ParseBool": "strconv", - "strconv.ParseFloat": "strconv", - "strconv.ParseInt": "strconv", - "strconv.ParseUint": "strconv", - "strconv.Quote": "strconv", - "strconv.QuoteRune": "strconv", - "strconv.QuoteRuneToASCII": "strconv", - "strconv.QuoteRuneToGraphic": "strconv", - "strconv.QuoteToASCII": "strconv", - "strconv.QuoteToGraphic": "strconv", - "strconv.Unquote": "strconv", - "strconv.UnquoteChar": "strconv", - "strings.Compare": "strings", - "strings.Contains": "strings", - "strings.ContainsAny": "strings", - "strings.ContainsRune": "strings", - "strings.Count": "strings", - "strings.EqualFold": "strings", - "strings.Fields": "strings", - "strings.FieldsFunc": "strings", - "strings.HasPrefix": "strings", - "strings.HasSuffix": "strings", - "strings.Index": "strings", - "strings.IndexAny": "strings", - "strings.IndexByte": "strings", - "strings.IndexFunc": "strings", - "strings.IndexRune": "strings", - "strings.Join": "strings", - "strings.LastIndex": "strings", - "strings.LastIndexAny": "strings", - "strings.LastIndexByte": "strings", - "strings.LastIndexFunc": "strings", - "strings.Map": "strings", - "strings.NewReader": "strings", - "strings.NewReplacer": "strings", - "strings.Reader": "strings", - "strings.Repeat": "strings", - "strings.Replace": "strings", - "strings.Replacer": "strings", - "strings.Split": "strings", - "strings.SplitAfter": "strings", - "strings.SplitAfterN": "strings", - "strings.SplitN": "strings", - "strings.Title": "strings", - "strings.ToLower": "strings", - "strings.ToLowerSpecial": "strings", - "strings.ToTitle": "strings", - "strings.ToTitleSpecial": "strings", - "strings.ToUpper": "strings", - "strings.ToUpperSpecial": "strings", - "strings.Trim": "strings", - "strings.TrimFunc": "strings", - "strings.TrimLeft": "strings", - "strings.TrimLeftFunc": "strings", - "strings.TrimPrefix": "strings", - "strings.TrimRight": "strings", - "strings.TrimRightFunc": "strings", - "strings.TrimSpace": "strings", - "strings.TrimSuffix": "strings", - "subtle.ConstantTimeByteEq": "crypto/subtle", - "subtle.ConstantTimeCompare": "crypto/subtle", - "subtle.ConstantTimeCopy": "crypto/subtle", - "subtle.ConstantTimeEq": "crypto/subtle", - "subtle.ConstantTimeLessOrEq": "crypto/subtle", - "subtle.ConstantTimeSelect": "crypto/subtle", - "suffixarray.Index": "index/suffixarray", - "suffixarray.New": "index/suffixarray", - "sync.Cond": "sync", - "sync.Locker": "sync", - "sync.Mutex": "sync", - "sync.NewCond": "sync", - "sync.Once": "sync", - "sync.Pool": "sync", - "sync.RWMutex": "sync", - "sync.WaitGroup": "sync", - "syntax.ClassNL": "regexp/syntax", - "syntax.Compile": "regexp/syntax", - "syntax.DotNL": "regexp/syntax", - "syntax.EmptyBeginLine": "regexp/syntax", - "syntax.EmptyBeginText": "regexp/syntax", - "syntax.EmptyEndLine": "regexp/syntax", - "syntax.EmptyEndText": "regexp/syntax", - "syntax.EmptyNoWordBoundary": "regexp/syntax", - "syntax.EmptyOp": "regexp/syntax", - "syntax.EmptyOpContext": "regexp/syntax", - "syntax.EmptyWordBoundary": "regexp/syntax", - "syntax.ErrInternalError": "regexp/syntax", - "syntax.ErrInvalidCharClass": "regexp/syntax", - "syntax.ErrInvalidCharRange": "regexp/syntax", - "syntax.ErrInvalidEscape": "regexp/syntax", - "syntax.ErrInvalidNamedCapture": "regexp/syntax", - "syntax.ErrInvalidPerlOp": "regexp/syntax", - "syntax.ErrInvalidRepeatOp": "regexp/syntax", - "syntax.ErrInvalidRepeatSize": "regexp/syntax", - "syntax.ErrInvalidUTF8": "regexp/syntax", - "syntax.ErrMissingBracket": "regexp/syntax", - "syntax.ErrMissingParen": "regexp/syntax", - "syntax.ErrMissingRepeatArgument": "regexp/syntax", - "syntax.ErrTrailingBackslash": "regexp/syntax", - "syntax.ErrUnexpectedParen": "regexp/syntax", - "syntax.Error": "regexp/syntax", - "syntax.ErrorCode": "regexp/syntax", - "syntax.Flags": "regexp/syntax", - "syntax.FoldCase": "regexp/syntax", - "syntax.Inst": "regexp/syntax", - "syntax.InstAlt": "regexp/syntax", - "syntax.InstAltMatch": "regexp/syntax", - "syntax.InstCapture": "regexp/syntax", - "syntax.InstEmptyWidth": "regexp/syntax", - "syntax.InstFail": "regexp/syntax", - "syntax.InstMatch": "regexp/syntax", - "syntax.InstNop": "regexp/syntax", - "syntax.InstOp": "regexp/syntax", - "syntax.InstRune": "regexp/syntax", - "syntax.InstRune1": "regexp/syntax", - "syntax.InstRuneAny": "regexp/syntax", - "syntax.InstRuneAnyNotNL": "regexp/syntax", - "syntax.IsWordChar": "regexp/syntax", - "syntax.Literal": "regexp/syntax", - "syntax.MatchNL": "regexp/syntax", - "syntax.NonGreedy": "regexp/syntax", - "syntax.OneLine": "regexp/syntax", - "syntax.Op": "regexp/syntax", - "syntax.OpAlternate": "regexp/syntax", - "syntax.OpAnyChar": "regexp/syntax", - "syntax.OpAnyCharNotNL": "regexp/syntax", - "syntax.OpBeginLine": "regexp/syntax", - "syntax.OpBeginText": "regexp/syntax", - "syntax.OpCapture": "regexp/syntax", - "syntax.OpCharClass": "regexp/syntax", - "syntax.OpConcat": "regexp/syntax", - "syntax.OpEmptyMatch": "regexp/syntax", - "syntax.OpEndLine": "regexp/syntax", - "syntax.OpEndText": "regexp/syntax", - "syntax.OpLiteral": "regexp/syntax", - "syntax.OpNoMatch": "regexp/syntax", - "syntax.OpNoWordBoundary": "regexp/syntax", - "syntax.OpPlus": "regexp/syntax", - "syntax.OpQuest": "regexp/syntax", - "syntax.OpRepeat": "regexp/syntax", - "syntax.OpStar": "regexp/syntax", - "syntax.OpWordBoundary": "regexp/syntax", - "syntax.POSIX": "regexp/syntax", - "syntax.Parse": "regexp/syntax", - "syntax.Perl": "regexp/syntax", - "syntax.PerlX": "regexp/syntax", - "syntax.Prog": "regexp/syntax", - "syntax.Regexp": "regexp/syntax", - "syntax.Simple": "regexp/syntax", - "syntax.UnicodeGroups": "regexp/syntax", - "syntax.WasDollar": "regexp/syntax", - "syscall.AF_ALG": "syscall", - "syscall.AF_APPLETALK": "syscall", - "syscall.AF_ARP": "syscall", - "syscall.AF_ASH": "syscall", - "syscall.AF_ATM": "syscall", - "syscall.AF_ATMPVC": "syscall", - "syscall.AF_ATMSVC": "syscall", - "syscall.AF_AX25": "syscall", - "syscall.AF_BLUETOOTH": "syscall", - "syscall.AF_BRIDGE": "syscall", - "syscall.AF_CAIF": "syscall", - "syscall.AF_CAN": "syscall", - "syscall.AF_CCITT": "syscall", - "syscall.AF_CHAOS": "syscall", - "syscall.AF_CNT": "syscall", - "syscall.AF_COIP": "syscall", - "syscall.AF_DATAKIT": "syscall", - "syscall.AF_DECnet": "syscall", - "syscall.AF_DLI": "syscall", - "syscall.AF_E164": "syscall", - "syscall.AF_ECMA": "syscall", - "syscall.AF_ECONET": "syscall", - "syscall.AF_ENCAP": "syscall", - "syscall.AF_FILE": "syscall", - "syscall.AF_HYLINK": "syscall", - "syscall.AF_IEEE80211": "syscall", - "syscall.AF_IEEE802154": "syscall", - "syscall.AF_IMPLINK": "syscall", - "syscall.AF_INET": "syscall", - "syscall.AF_INET6": "syscall", - "syscall.AF_INET6_SDP": "syscall", - "syscall.AF_INET_SDP": "syscall", - "syscall.AF_IPX": "syscall", - "syscall.AF_IRDA": "syscall", - "syscall.AF_ISDN": "syscall", - "syscall.AF_ISO": "syscall", - "syscall.AF_IUCV": "syscall", - "syscall.AF_KEY": "syscall", - "syscall.AF_LAT": "syscall", - "syscall.AF_LINK": "syscall", - "syscall.AF_LLC": "syscall", - "syscall.AF_LOCAL": "syscall", - "syscall.AF_MAX": "syscall", - "syscall.AF_MPLS": "syscall", - "syscall.AF_NATM": "syscall", - "syscall.AF_NDRV": "syscall", - "syscall.AF_NETBEUI": "syscall", - "syscall.AF_NETBIOS": "syscall", - "syscall.AF_NETGRAPH": "syscall", - "syscall.AF_NETLINK": "syscall", - "syscall.AF_NETROM": "syscall", - "syscall.AF_NS": "syscall", - "syscall.AF_OROUTE": "syscall", - "syscall.AF_OSI": "syscall", - "syscall.AF_PACKET": "syscall", - "syscall.AF_PHONET": "syscall", - "syscall.AF_PPP": "syscall", - "syscall.AF_PPPOX": "syscall", - "syscall.AF_PUP": "syscall", - "syscall.AF_RDS": "syscall", - "syscall.AF_RESERVED_36": "syscall", - "syscall.AF_ROSE": "syscall", - "syscall.AF_ROUTE": "syscall", - "syscall.AF_RXRPC": "syscall", - "syscall.AF_SCLUSTER": "syscall", - "syscall.AF_SECURITY": "syscall", - "syscall.AF_SIP": "syscall", - "syscall.AF_SLOW": "syscall", - "syscall.AF_SNA": "syscall", - "syscall.AF_SYSTEM": "syscall", - "syscall.AF_TIPC": "syscall", - "syscall.AF_UNIX": "syscall", - "syscall.AF_UNSPEC": "syscall", - "syscall.AF_VENDOR00": "syscall", - "syscall.AF_VENDOR01": "syscall", - "syscall.AF_VENDOR02": "syscall", - "syscall.AF_VENDOR03": "syscall", - "syscall.AF_VENDOR04": "syscall", - "syscall.AF_VENDOR05": "syscall", - "syscall.AF_VENDOR06": "syscall", - "syscall.AF_VENDOR07": "syscall", - "syscall.AF_VENDOR08": "syscall", - "syscall.AF_VENDOR09": "syscall", - "syscall.AF_VENDOR10": "syscall", - "syscall.AF_VENDOR11": "syscall", - "syscall.AF_VENDOR12": "syscall", - "syscall.AF_VENDOR13": "syscall", - "syscall.AF_VENDOR14": "syscall", - "syscall.AF_VENDOR15": "syscall", - "syscall.AF_VENDOR16": "syscall", - "syscall.AF_VENDOR17": "syscall", - "syscall.AF_VENDOR18": "syscall", - "syscall.AF_VENDOR19": "syscall", - "syscall.AF_VENDOR20": "syscall", - "syscall.AF_VENDOR21": "syscall", - "syscall.AF_VENDOR22": "syscall", - "syscall.AF_VENDOR23": "syscall", - "syscall.AF_VENDOR24": "syscall", - "syscall.AF_VENDOR25": "syscall", - "syscall.AF_VENDOR26": "syscall", - "syscall.AF_VENDOR27": "syscall", - "syscall.AF_VENDOR28": "syscall", - "syscall.AF_VENDOR29": "syscall", - "syscall.AF_VENDOR30": "syscall", - "syscall.AF_VENDOR31": "syscall", - "syscall.AF_VENDOR32": "syscall", - "syscall.AF_VENDOR33": "syscall", - "syscall.AF_VENDOR34": "syscall", - "syscall.AF_VENDOR35": "syscall", - "syscall.AF_VENDOR36": "syscall", - "syscall.AF_VENDOR37": "syscall", - "syscall.AF_VENDOR38": "syscall", - "syscall.AF_VENDOR39": "syscall", - "syscall.AF_VENDOR40": "syscall", - "syscall.AF_VENDOR41": "syscall", - "syscall.AF_VENDOR42": "syscall", - "syscall.AF_VENDOR43": "syscall", - "syscall.AF_VENDOR44": "syscall", - "syscall.AF_VENDOR45": "syscall", - "syscall.AF_VENDOR46": "syscall", - "syscall.AF_VENDOR47": "syscall", - "syscall.AF_WANPIPE": "syscall", - "syscall.AF_X25": "syscall", - "syscall.AI_CANONNAME": "syscall", - "syscall.AI_NUMERICHOST": "syscall", - "syscall.AI_PASSIVE": "syscall", - "syscall.APPLICATION_ERROR": "syscall", - "syscall.ARPHRD_ADAPT": "syscall", - "syscall.ARPHRD_APPLETLK": "syscall", - "syscall.ARPHRD_ARCNET": "syscall", - "syscall.ARPHRD_ASH": "syscall", - "syscall.ARPHRD_ATM": "syscall", - "syscall.ARPHRD_AX25": "syscall", - "syscall.ARPHRD_BIF": "syscall", - "syscall.ARPHRD_CHAOS": "syscall", - "syscall.ARPHRD_CISCO": "syscall", - "syscall.ARPHRD_CSLIP": "syscall", - "syscall.ARPHRD_CSLIP6": "syscall", - "syscall.ARPHRD_DDCMP": "syscall", - "syscall.ARPHRD_DLCI": "syscall", - "syscall.ARPHRD_ECONET": "syscall", - "syscall.ARPHRD_EETHER": "syscall", - "syscall.ARPHRD_ETHER": "syscall", - "syscall.ARPHRD_EUI64": "syscall", - "syscall.ARPHRD_FCAL": "syscall", - "syscall.ARPHRD_FCFABRIC": "syscall", - "syscall.ARPHRD_FCPL": "syscall", - "syscall.ARPHRD_FCPP": "syscall", - "syscall.ARPHRD_FDDI": "syscall", - "syscall.ARPHRD_FRAD": "syscall", - "syscall.ARPHRD_FRELAY": "syscall", - "syscall.ARPHRD_HDLC": "syscall", - "syscall.ARPHRD_HIPPI": "syscall", - "syscall.ARPHRD_HWX25": "syscall", - "syscall.ARPHRD_IEEE1394": "syscall", - "syscall.ARPHRD_IEEE802": "syscall", - "syscall.ARPHRD_IEEE80211": "syscall", - "syscall.ARPHRD_IEEE80211_PRISM": "syscall", - "syscall.ARPHRD_IEEE80211_RADIOTAP": "syscall", - "syscall.ARPHRD_IEEE802154": "syscall", - "syscall.ARPHRD_IEEE802154_PHY": "syscall", - "syscall.ARPHRD_IEEE802_TR": "syscall", - "syscall.ARPHRD_INFINIBAND": "syscall", - "syscall.ARPHRD_IPDDP": "syscall", - "syscall.ARPHRD_IPGRE": "syscall", - "syscall.ARPHRD_IRDA": "syscall", - "syscall.ARPHRD_LAPB": "syscall", - "syscall.ARPHRD_LOCALTLK": "syscall", - "syscall.ARPHRD_LOOPBACK": "syscall", - "syscall.ARPHRD_METRICOM": "syscall", - "syscall.ARPHRD_NETROM": "syscall", - "syscall.ARPHRD_NONE": "syscall", - "syscall.ARPHRD_PIMREG": "syscall", - "syscall.ARPHRD_PPP": "syscall", - "syscall.ARPHRD_PRONET": "syscall", - "syscall.ARPHRD_RAWHDLC": "syscall", - "syscall.ARPHRD_ROSE": "syscall", - "syscall.ARPHRD_RSRVD": "syscall", - "syscall.ARPHRD_SIT": "syscall", - "syscall.ARPHRD_SKIP": "syscall", - "syscall.ARPHRD_SLIP": "syscall", - "syscall.ARPHRD_SLIP6": "syscall", - "syscall.ARPHRD_STRIP": "syscall", - "syscall.ARPHRD_TUNNEL": "syscall", - "syscall.ARPHRD_TUNNEL6": "syscall", - "syscall.ARPHRD_VOID": "syscall", - "syscall.ARPHRD_X25": "syscall", - "syscall.AUTHTYPE_CLIENT": "syscall", - "syscall.AUTHTYPE_SERVER": "syscall", - "syscall.Accept": "syscall", - "syscall.Accept4": "syscall", - "syscall.AcceptEx": "syscall", - "syscall.Access": "syscall", - "syscall.Acct": "syscall", - "syscall.AddrinfoW": "syscall", - "syscall.Adjtime": "syscall", - "syscall.Adjtimex": "syscall", - "syscall.AttachLsf": "syscall", - "syscall.B0": "syscall", - "syscall.B1000000": "syscall", - "syscall.B110": "syscall", - "syscall.B115200": "syscall", - "syscall.B1152000": "syscall", - "syscall.B1200": "syscall", - "syscall.B134": "syscall", - "syscall.B14400": "syscall", - "syscall.B150": "syscall", - "syscall.B1500000": "syscall", - "syscall.B1800": "syscall", - "syscall.B19200": "syscall", - "syscall.B200": "syscall", - "syscall.B2000000": "syscall", - "syscall.B230400": "syscall", - "syscall.B2400": "syscall", - "syscall.B2500000": "syscall", - "syscall.B28800": "syscall", - "syscall.B300": "syscall", - "syscall.B3000000": "syscall", - "syscall.B3500000": "syscall", - "syscall.B38400": "syscall", - "syscall.B4000000": "syscall", - "syscall.B460800": "syscall", - "syscall.B4800": "syscall", - "syscall.B50": "syscall", - "syscall.B500000": "syscall", - "syscall.B57600": "syscall", - "syscall.B576000": "syscall", - "syscall.B600": "syscall", - "syscall.B7200": "syscall", - "syscall.B75": "syscall", - "syscall.B76800": "syscall", - "syscall.B921600": "syscall", - "syscall.B9600": "syscall", - "syscall.BASE_PROTOCOL": "syscall", - "syscall.BIOCFEEDBACK": "syscall", - "syscall.BIOCFLUSH": "syscall", - "syscall.BIOCGBLEN": "syscall", - "syscall.BIOCGDIRECTION": "syscall", - "syscall.BIOCGDIRFILT": "syscall", - "syscall.BIOCGDLT": "syscall", - "syscall.BIOCGDLTLIST": "syscall", - "syscall.BIOCGETBUFMODE": "syscall", - "syscall.BIOCGETIF": "syscall", - "syscall.BIOCGETZMAX": "syscall", - "syscall.BIOCGFEEDBACK": "syscall", - "syscall.BIOCGFILDROP": "syscall", - "syscall.BIOCGHDRCMPLT": "syscall", - "syscall.BIOCGRSIG": "syscall", - "syscall.BIOCGRTIMEOUT": "syscall", - "syscall.BIOCGSEESENT": "syscall", - "syscall.BIOCGSTATS": "syscall", - "syscall.BIOCGSTATSOLD": "syscall", - "syscall.BIOCGTSTAMP": "syscall", - "syscall.BIOCIMMEDIATE": "syscall", - "syscall.BIOCLOCK": "syscall", - "syscall.BIOCPROMISC": "syscall", - "syscall.BIOCROTZBUF": "syscall", - "syscall.BIOCSBLEN": "syscall", - "syscall.BIOCSDIRECTION": "syscall", - "syscall.BIOCSDIRFILT": "syscall", - "syscall.BIOCSDLT": "syscall", - "syscall.BIOCSETBUFMODE": "syscall", - "syscall.BIOCSETF": "syscall", - "syscall.BIOCSETFNR": "syscall", - "syscall.BIOCSETIF": "syscall", - "syscall.BIOCSETWF": "syscall", - "syscall.BIOCSETZBUF": "syscall", - "syscall.BIOCSFEEDBACK": "syscall", - "syscall.BIOCSFILDROP": "syscall", - "syscall.BIOCSHDRCMPLT": "syscall", - "syscall.BIOCSRSIG": "syscall", - "syscall.BIOCSRTIMEOUT": "syscall", - "syscall.BIOCSSEESENT": "syscall", - "syscall.BIOCSTCPF": "syscall", - "syscall.BIOCSTSTAMP": "syscall", - "syscall.BIOCSUDPF": "syscall", - "syscall.BIOCVERSION": "syscall", - "syscall.BPF_A": "syscall", - "syscall.BPF_ABS": "syscall", - "syscall.BPF_ADD": "syscall", - "syscall.BPF_ALIGNMENT": "syscall", - "syscall.BPF_ALIGNMENT32": "syscall", - "syscall.BPF_ALU": "syscall", - "syscall.BPF_AND": "syscall", - "syscall.BPF_B": "syscall", - "syscall.BPF_BUFMODE_BUFFER": "syscall", - "syscall.BPF_BUFMODE_ZBUF": "syscall", - "syscall.BPF_DFLTBUFSIZE": "syscall", - "syscall.BPF_DIRECTION_IN": "syscall", - "syscall.BPF_DIRECTION_OUT": "syscall", - "syscall.BPF_DIV": "syscall", - "syscall.BPF_H": "syscall", - "syscall.BPF_IMM": "syscall", - "syscall.BPF_IND": "syscall", - "syscall.BPF_JA": "syscall", - "syscall.BPF_JEQ": "syscall", - "syscall.BPF_JGE": "syscall", - "syscall.BPF_JGT": "syscall", - "syscall.BPF_JMP": "syscall", - "syscall.BPF_JSET": "syscall", - "syscall.BPF_K": "syscall", - "syscall.BPF_LD": "syscall", - "syscall.BPF_LDX": "syscall", - "syscall.BPF_LEN": "syscall", - "syscall.BPF_LSH": "syscall", - "syscall.BPF_MAJOR_VERSION": "syscall", - "syscall.BPF_MAXBUFSIZE": "syscall", - "syscall.BPF_MAXINSNS": "syscall", - "syscall.BPF_MEM": "syscall", - "syscall.BPF_MEMWORDS": "syscall", - "syscall.BPF_MINBUFSIZE": "syscall", - "syscall.BPF_MINOR_VERSION": "syscall", - "syscall.BPF_MISC": "syscall", - "syscall.BPF_MSH": "syscall", - "syscall.BPF_MUL": "syscall", - "syscall.BPF_NEG": "syscall", - "syscall.BPF_OR": "syscall", - "syscall.BPF_RELEASE": "syscall", - "syscall.BPF_RET": "syscall", - "syscall.BPF_RSH": "syscall", - "syscall.BPF_ST": "syscall", - "syscall.BPF_STX": "syscall", - "syscall.BPF_SUB": "syscall", - "syscall.BPF_TAX": "syscall", - "syscall.BPF_TXA": "syscall", - "syscall.BPF_T_BINTIME": "syscall", - "syscall.BPF_T_BINTIME_FAST": "syscall", - "syscall.BPF_T_BINTIME_MONOTONIC": "syscall", - "syscall.BPF_T_BINTIME_MONOTONIC_FAST": "syscall", - "syscall.BPF_T_FAST": "syscall", - "syscall.BPF_T_FLAG_MASK": "syscall", - "syscall.BPF_T_FORMAT_MASK": "syscall", - "syscall.BPF_T_MICROTIME": "syscall", - "syscall.BPF_T_MICROTIME_FAST": "syscall", - "syscall.BPF_T_MICROTIME_MONOTONIC": "syscall", - "syscall.BPF_T_MICROTIME_MONOTONIC_FAST": "syscall", - "syscall.BPF_T_MONOTONIC": "syscall", - "syscall.BPF_T_MONOTONIC_FAST": "syscall", - "syscall.BPF_T_NANOTIME": "syscall", - "syscall.BPF_T_NANOTIME_FAST": "syscall", - "syscall.BPF_T_NANOTIME_MONOTONIC": "syscall", - "syscall.BPF_T_NANOTIME_MONOTONIC_FAST": "syscall", - "syscall.BPF_T_NONE": "syscall", - "syscall.BPF_T_NORMAL": "syscall", - "syscall.BPF_W": "syscall", - "syscall.BPF_X": "syscall", - "syscall.BRKINT": "syscall", - "syscall.Bind": "syscall", - "syscall.BindToDevice": "syscall", - "syscall.BpfBuflen": "syscall", - "syscall.BpfDatalink": "syscall", - "syscall.BpfHdr": "syscall", - "syscall.BpfHeadercmpl": "syscall", - "syscall.BpfInsn": "syscall", - "syscall.BpfInterface": "syscall", - "syscall.BpfJump": "syscall", - "syscall.BpfProgram": "syscall", - "syscall.BpfStat": "syscall", - "syscall.BpfStats": "syscall", - "syscall.BpfStmt": "syscall", - "syscall.BpfTimeout": "syscall", - "syscall.BpfTimeval": "syscall", - "syscall.BpfVersion": "syscall", - "syscall.BpfZbuf": "syscall", - "syscall.BpfZbufHeader": "syscall", - "syscall.ByHandleFileInformation": "syscall", - "syscall.BytePtrFromString": "syscall", - "syscall.ByteSliceFromString": "syscall", - "syscall.CCR0_FLUSH": "syscall", - "syscall.CERT_CHAIN_POLICY_AUTHENTICODE": "syscall", - "syscall.CERT_CHAIN_POLICY_AUTHENTICODE_TS": "syscall", - "syscall.CERT_CHAIN_POLICY_BASE": "syscall", - "syscall.CERT_CHAIN_POLICY_BASIC_CONSTRAINTS": "syscall", - "syscall.CERT_CHAIN_POLICY_EV": "syscall", - "syscall.CERT_CHAIN_POLICY_MICROSOFT_ROOT": "syscall", - "syscall.CERT_CHAIN_POLICY_NT_AUTH": "syscall", - "syscall.CERT_CHAIN_POLICY_SSL": "syscall", - "syscall.CERT_E_CN_NO_MATCH": "syscall", - "syscall.CERT_E_EXPIRED": "syscall", - "syscall.CERT_E_PURPOSE": "syscall", - "syscall.CERT_E_ROLE": "syscall", - "syscall.CERT_E_UNTRUSTEDROOT": "syscall", - "syscall.CERT_STORE_ADD_ALWAYS": "syscall", - "syscall.CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG": "syscall", - "syscall.CERT_STORE_PROV_MEMORY": "syscall", - "syscall.CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT": "syscall", - "syscall.CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT": "syscall", - "syscall.CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT": "syscall", - "syscall.CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT": "syscall", - "syscall.CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT": "syscall", - "syscall.CERT_TRUST_INVALID_BASIC_CONSTRAINTS": "syscall", - "syscall.CERT_TRUST_INVALID_EXTENSION": "syscall", - "syscall.CERT_TRUST_INVALID_NAME_CONSTRAINTS": "syscall", - "syscall.CERT_TRUST_INVALID_POLICY_CONSTRAINTS": "syscall", - "syscall.CERT_TRUST_IS_CYCLIC": "syscall", - "syscall.CERT_TRUST_IS_EXPLICIT_DISTRUST": "syscall", - "syscall.CERT_TRUST_IS_NOT_SIGNATURE_VALID": "syscall", - "syscall.CERT_TRUST_IS_NOT_TIME_VALID": "syscall", - "syscall.CERT_TRUST_IS_NOT_VALID_FOR_USAGE": "syscall", - "syscall.CERT_TRUST_IS_OFFLINE_REVOCATION": "syscall", - "syscall.CERT_TRUST_IS_REVOKED": "syscall", - "syscall.CERT_TRUST_IS_UNTRUSTED_ROOT": "syscall", - "syscall.CERT_TRUST_NO_ERROR": "syscall", - "syscall.CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY": "syscall", - "syscall.CERT_TRUST_REVOCATION_STATUS_UNKNOWN": "syscall", - "syscall.CFLUSH": "syscall", - "syscall.CLOCAL": "syscall", - "syscall.CLONE_CHILD_CLEARTID": "syscall", - "syscall.CLONE_CHILD_SETTID": "syscall", - "syscall.CLONE_CSIGNAL": "syscall", - "syscall.CLONE_DETACHED": "syscall", - "syscall.CLONE_FILES": "syscall", - "syscall.CLONE_FS": "syscall", - "syscall.CLONE_IO": "syscall", - "syscall.CLONE_NEWIPC": "syscall", - "syscall.CLONE_NEWNET": "syscall", - "syscall.CLONE_NEWNS": "syscall", - "syscall.CLONE_NEWPID": "syscall", - "syscall.CLONE_NEWUSER": "syscall", - "syscall.CLONE_NEWUTS": "syscall", - "syscall.CLONE_PARENT": "syscall", - "syscall.CLONE_PARENT_SETTID": "syscall", - "syscall.CLONE_PID": "syscall", - "syscall.CLONE_PTRACE": "syscall", - "syscall.CLONE_SETTLS": "syscall", - "syscall.CLONE_SIGHAND": "syscall", - "syscall.CLONE_SYSVSEM": "syscall", - "syscall.CLONE_THREAD": "syscall", - "syscall.CLONE_UNTRACED": "syscall", - "syscall.CLONE_VFORK": "syscall", - "syscall.CLONE_VM": "syscall", - "syscall.CPUID_CFLUSH": "syscall", - "syscall.CREAD": "syscall", - "syscall.CREATE_ALWAYS": "syscall", - "syscall.CREATE_NEW": "syscall", - "syscall.CREATE_NEW_PROCESS_GROUP": "syscall", - "syscall.CREATE_UNICODE_ENVIRONMENT": "syscall", - "syscall.CRYPT_DEFAULT_CONTAINER_OPTIONAL": "syscall", - "syscall.CRYPT_DELETEKEYSET": "syscall", - "syscall.CRYPT_MACHINE_KEYSET": "syscall", - "syscall.CRYPT_NEWKEYSET": "syscall", - "syscall.CRYPT_SILENT": "syscall", - "syscall.CRYPT_VERIFYCONTEXT": "syscall", - "syscall.CS5": "syscall", - "syscall.CS6": "syscall", - "syscall.CS7": "syscall", - "syscall.CS8": "syscall", - "syscall.CSIZE": "syscall", - "syscall.CSTART": "syscall", - "syscall.CSTATUS": "syscall", - "syscall.CSTOP": "syscall", - "syscall.CSTOPB": "syscall", - "syscall.CSUSP": "syscall", - "syscall.CTL_MAXNAME": "syscall", - "syscall.CTL_NET": "syscall", - "syscall.CTL_QUERY": "syscall", - "syscall.CTRL_BREAK_EVENT": "syscall", - "syscall.CTRL_C_EVENT": "syscall", - "syscall.CancelIo": "syscall", - "syscall.CancelIoEx": "syscall", - "syscall.CertAddCertificateContextToStore": "syscall", - "syscall.CertChainContext": "syscall", - "syscall.CertChainElement": "syscall", - "syscall.CertChainPara": "syscall", - "syscall.CertChainPolicyPara": "syscall", - "syscall.CertChainPolicyStatus": "syscall", - "syscall.CertCloseStore": "syscall", - "syscall.CertContext": "syscall", - "syscall.CertCreateCertificateContext": "syscall", - "syscall.CertEnhKeyUsage": "syscall", - "syscall.CertEnumCertificatesInStore": "syscall", - "syscall.CertFreeCertificateChain": "syscall", - "syscall.CertFreeCertificateContext": "syscall", - "syscall.CertGetCertificateChain": "syscall", - "syscall.CertOpenStore": "syscall", - "syscall.CertOpenSystemStore": "syscall", - "syscall.CertRevocationInfo": "syscall", - "syscall.CertSimpleChain": "syscall", - "syscall.CertTrustStatus": "syscall", - "syscall.CertUsageMatch": "syscall", - "syscall.CertVerifyCertificateChainPolicy": "syscall", - "syscall.Chdir": "syscall", - "syscall.CheckBpfVersion": "syscall", - "syscall.Chflags": "syscall", - "syscall.Chmod": "syscall", - "syscall.Chown": "syscall", - "syscall.Chroot": "syscall", - "syscall.Clearenv": "syscall", - "syscall.Close": "syscall", - "syscall.CloseHandle": "syscall", - "syscall.CloseOnExec": "syscall", - "syscall.Closesocket": "syscall", - "syscall.CmsgLen": "syscall", - "syscall.CmsgSpace": "syscall", - "syscall.Cmsghdr": "syscall", - "syscall.CommandLineToArgv": "syscall", - "syscall.ComputerName": "syscall", - "syscall.Connect": "syscall", - "syscall.ConnectEx": "syscall", - "syscall.ConvertSidToStringSid": "syscall", - "syscall.ConvertStringSidToSid": "syscall", - "syscall.CopySid": "syscall", - "syscall.Creat": "syscall", - "syscall.CreateDirectory": "syscall", - "syscall.CreateFile": "syscall", - "syscall.CreateFileMapping": "syscall", - "syscall.CreateHardLink": "syscall", - "syscall.CreateIoCompletionPort": "syscall", - "syscall.CreatePipe": "syscall", - "syscall.CreateProcess": "syscall", - "syscall.CreateSymbolicLink": "syscall", - "syscall.CreateToolhelp32Snapshot": "syscall", - "syscall.Credential": "syscall", - "syscall.CryptAcquireContext": "syscall", - "syscall.CryptGenRandom": "syscall", - "syscall.CryptReleaseContext": "syscall", - "syscall.DIOCBSFLUSH": "syscall", - "syscall.DIOCOSFPFLUSH": "syscall", - "syscall.DLL": "syscall", - "syscall.DLLError": "syscall", - "syscall.DLT_A429": "syscall", - "syscall.DLT_A653_ICM": "syscall", - "syscall.DLT_AIRONET_HEADER": "syscall", - "syscall.DLT_AOS": "syscall", - "syscall.DLT_APPLE_IP_OVER_IEEE1394": "syscall", - "syscall.DLT_ARCNET": "syscall", - "syscall.DLT_ARCNET_LINUX": "syscall", - "syscall.DLT_ATM_CLIP": "syscall", - "syscall.DLT_ATM_RFC1483": "syscall", - "syscall.DLT_AURORA": "syscall", - "syscall.DLT_AX25": "syscall", - "syscall.DLT_AX25_KISS": "syscall", - "syscall.DLT_BACNET_MS_TP": "syscall", - "syscall.DLT_BLUETOOTH_HCI_H4": "syscall", - "syscall.DLT_BLUETOOTH_HCI_H4_WITH_PHDR": "syscall", - "syscall.DLT_CAN20B": "syscall", - "syscall.DLT_CAN_SOCKETCAN": "syscall", - "syscall.DLT_CHAOS": "syscall", - "syscall.DLT_CHDLC": "syscall", - "syscall.DLT_CISCO_IOS": "syscall", - "syscall.DLT_C_HDLC": "syscall", - "syscall.DLT_C_HDLC_WITH_DIR": "syscall", - "syscall.DLT_DBUS": "syscall", - "syscall.DLT_DECT": "syscall", - "syscall.DLT_DOCSIS": "syscall", - "syscall.DLT_DVB_CI": "syscall", - "syscall.DLT_ECONET": "syscall", - "syscall.DLT_EN10MB": "syscall", - "syscall.DLT_EN3MB": "syscall", - "syscall.DLT_ENC": "syscall", - "syscall.DLT_ERF": "syscall", - "syscall.DLT_ERF_ETH": "syscall", - "syscall.DLT_ERF_POS": "syscall", - "syscall.DLT_FC_2": "syscall", - "syscall.DLT_FC_2_WITH_FRAME_DELIMS": "syscall", - "syscall.DLT_FDDI": "syscall", - "syscall.DLT_FLEXRAY": "syscall", - "syscall.DLT_FRELAY": "syscall", - "syscall.DLT_FRELAY_WITH_DIR": "syscall", - "syscall.DLT_GCOM_SERIAL": "syscall", - "syscall.DLT_GCOM_T1E1": "syscall", - "syscall.DLT_GPF_F": "syscall", - "syscall.DLT_GPF_T": "syscall", - "syscall.DLT_GPRS_LLC": "syscall", - "syscall.DLT_GSMTAP_ABIS": "syscall", - "syscall.DLT_GSMTAP_UM": "syscall", - "syscall.DLT_HDLC": "syscall", - "syscall.DLT_HHDLC": "syscall", - "syscall.DLT_HIPPI": "syscall", - "syscall.DLT_IBM_SN": "syscall", - "syscall.DLT_IBM_SP": "syscall", - "syscall.DLT_IEEE802": "syscall", - "syscall.DLT_IEEE802_11": "syscall", - "syscall.DLT_IEEE802_11_RADIO": "syscall", - "syscall.DLT_IEEE802_11_RADIO_AVS": "syscall", - "syscall.DLT_IEEE802_15_4": "syscall", - "syscall.DLT_IEEE802_15_4_LINUX": "syscall", - "syscall.DLT_IEEE802_15_4_NOFCS": "syscall", - "syscall.DLT_IEEE802_15_4_NONASK_PHY": "syscall", - "syscall.DLT_IEEE802_16_MAC_CPS": "syscall", - "syscall.DLT_IEEE802_16_MAC_CPS_RADIO": "syscall", - "syscall.DLT_IPFILTER": "syscall", - "syscall.DLT_IPMB": "syscall", - "syscall.DLT_IPMB_LINUX": "syscall", - "syscall.DLT_IPNET": "syscall", - "syscall.DLT_IPOIB": "syscall", - "syscall.DLT_IPV4": "syscall", - "syscall.DLT_IPV6": "syscall", - "syscall.DLT_IP_OVER_FC": "syscall", - "syscall.DLT_JUNIPER_ATM1": "syscall", - "syscall.DLT_JUNIPER_ATM2": "syscall", - "syscall.DLT_JUNIPER_ATM_CEMIC": "syscall", - "syscall.DLT_JUNIPER_CHDLC": "syscall", - "syscall.DLT_JUNIPER_ES": "syscall", - "syscall.DLT_JUNIPER_ETHER": "syscall", - "syscall.DLT_JUNIPER_FIBRECHANNEL": "syscall", - "syscall.DLT_JUNIPER_FRELAY": "syscall", - "syscall.DLT_JUNIPER_GGSN": "syscall", - "syscall.DLT_JUNIPER_ISM": "syscall", - "syscall.DLT_JUNIPER_MFR": "syscall", - "syscall.DLT_JUNIPER_MLFR": "syscall", - "syscall.DLT_JUNIPER_MLPPP": "syscall", - "syscall.DLT_JUNIPER_MONITOR": "syscall", - "syscall.DLT_JUNIPER_PIC_PEER": "syscall", - "syscall.DLT_JUNIPER_PPP": "syscall", - "syscall.DLT_JUNIPER_PPPOE": "syscall", - "syscall.DLT_JUNIPER_PPPOE_ATM": "syscall", - "syscall.DLT_JUNIPER_SERVICES": "syscall", - "syscall.DLT_JUNIPER_SRX_E2E": "syscall", - "syscall.DLT_JUNIPER_ST": "syscall", - "syscall.DLT_JUNIPER_VP": "syscall", - "syscall.DLT_JUNIPER_VS": "syscall", - "syscall.DLT_LAPB_WITH_DIR": "syscall", - "syscall.DLT_LAPD": "syscall", - "syscall.DLT_LIN": "syscall", - "syscall.DLT_LINUX_EVDEV": "syscall", - "syscall.DLT_LINUX_IRDA": "syscall", - "syscall.DLT_LINUX_LAPD": "syscall", - "syscall.DLT_LINUX_PPP_WITHDIRECTION": "syscall", - "syscall.DLT_LINUX_SLL": "syscall", - "syscall.DLT_LOOP": "syscall", - "syscall.DLT_LTALK": "syscall", - "syscall.DLT_MATCHING_MAX": "syscall", - "syscall.DLT_MATCHING_MIN": "syscall", - "syscall.DLT_MFR": "syscall", - "syscall.DLT_MOST": "syscall", - "syscall.DLT_MPEG_2_TS": "syscall", - "syscall.DLT_MPLS": "syscall", - "syscall.DLT_MTP2": "syscall", - "syscall.DLT_MTP2_WITH_PHDR": "syscall", - "syscall.DLT_MTP3": "syscall", - "syscall.DLT_MUX27010": "syscall", - "syscall.DLT_NETANALYZER": "syscall", - "syscall.DLT_NETANALYZER_TRANSPARENT": "syscall", - "syscall.DLT_NFC_LLCP": "syscall", - "syscall.DLT_NFLOG": "syscall", - "syscall.DLT_NG40": "syscall", - "syscall.DLT_NULL": "syscall", - "syscall.DLT_PCI_EXP": "syscall", - "syscall.DLT_PFLOG": "syscall", - "syscall.DLT_PFSYNC": "syscall", - "syscall.DLT_PPI": "syscall", - "syscall.DLT_PPP": "syscall", - "syscall.DLT_PPP_BSDOS": "syscall", - "syscall.DLT_PPP_ETHER": "syscall", - "syscall.DLT_PPP_PPPD": "syscall", - "syscall.DLT_PPP_SERIAL": "syscall", - "syscall.DLT_PPP_WITH_DIR": "syscall", - "syscall.DLT_PPP_WITH_DIRECTION": "syscall", - "syscall.DLT_PRISM_HEADER": "syscall", - "syscall.DLT_PRONET": "syscall", - "syscall.DLT_RAIF1": "syscall", - "syscall.DLT_RAW": "syscall", - "syscall.DLT_RAWAF_MASK": "syscall", - "syscall.DLT_RIO": "syscall", - "syscall.DLT_SCCP": "syscall", - "syscall.DLT_SITA": "syscall", - "syscall.DLT_SLIP": "syscall", - "syscall.DLT_SLIP_BSDOS": "syscall", - "syscall.DLT_STANAG_5066_D_PDU": "syscall", - "syscall.DLT_SUNATM": "syscall", - "syscall.DLT_SYMANTEC_FIREWALL": "syscall", - "syscall.DLT_TZSP": "syscall", - "syscall.DLT_USB": "syscall", - "syscall.DLT_USB_LINUX": "syscall", - "syscall.DLT_USB_LINUX_MMAPPED": "syscall", - "syscall.DLT_USER0": "syscall", - "syscall.DLT_USER1": "syscall", - "syscall.DLT_USER10": "syscall", - "syscall.DLT_USER11": "syscall", - "syscall.DLT_USER12": "syscall", - "syscall.DLT_USER13": "syscall", - "syscall.DLT_USER14": "syscall", - "syscall.DLT_USER15": "syscall", - "syscall.DLT_USER2": "syscall", - "syscall.DLT_USER3": "syscall", - "syscall.DLT_USER4": "syscall", - "syscall.DLT_USER5": "syscall", - "syscall.DLT_USER6": "syscall", - "syscall.DLT_USER7": "syscall", - "syscall.DLT_USER8": "syscall", - "syscall.DLT_USER9": "syscall", - "syscall.DLT_WIHART": "syscall", - "syscall.DLT_X2E_SERIAL": "syscall", - "syscall.DLT_X2E_XORAYA": "syscall", - "syscall.DNSMXData": "syscall", - "syscall.DNSPTRData": "syscall", - "syscall.DNSRecord": "syscall", - "syscall.DNSSRVData": "syscall", - "syscall.DNSTXTData": "syscall", - "syscall.DNS_INFO_NO_RECORDS": "syscall", - "syscall.DNS_TYPE_A": "syscall", - "syscall.DNS_TYPE_A6": "syscall", - "syscall.DNS_TYPE_AAAA": "syscall", - "syscall.DNS_TYPE_ADDRS": "syscall", - "syscall.DNS_TYPE_AFSDB": "syscall", - "syscall.DNS_TYPE_ALL": "syscall", - "syscall.DNS_TYPE_ANY": "syscall", - "syscall.DNS_TYPE_ATMA": "syscall", - "syscall.DNS_TYPE_AXFR": "syscall", - "syscall.DNS_TYPE_CERT": "syscall", - "syscall.DNS_TYPE_CNAME": "syscall", - "syscall.DNS_TYPE_DHCID": "syscall", - "syscall.DNS_TYPE_DNAME": "syscall", - "syscall.DNS_TYPE_DNSKEY": "syscall", - "syscall.DNS_TYPE_DS": "syscall", - "syscall.DNS_TYPE_EID": "syscall", - "syscall.DNS_TYPE_GID": "syscall", - "syscall.DNS_TYPE_GPOS": "syscall", - "syscall.DNS_TYPE_HINFO": "syscall", - "syscall.DNS_TYPE_ISDN": "syscall", - "syscall.DNS_TYPE_IXFR": "syscall", - "syscall.DNS_TYPE_KEY": "syscall", - "syscall.DNS_TYPE_KX": "syscall", - "syscall.DNS_TYPE_LOC": "syscall", - "syscall.DNS_TYPE_MAILA": "syscall", - "syscall.DNS_TYPE_MAILB": "syscall", - "syscall.DNS_TYPE_MB": "syscall", - "syscall.DNS_TYPE_MD": "syscall", - "syscall.DNS_TYPE_MF": "syscall", - "syscall.DNS_TYPE_MG": "syscall", - "syscall.DNS_TYPE_MINFO": "syscall", - "syscall.DNS_TYPE_MR": "syscall", - "syscall.DNS_TYPE_MX": "syscall", - "syscall.DNS_TYPE_NAPTR": "syscall", - "syscall.DNS_TYPE_NBSTAT": "syscall", - "syscall.DNS_TYPE_NIMLOC": "syscall", - "syscall.DNS_TYPE_NS": "syscall", - "syscall.DNS_TYPE_NSAP": "syscall", - "syscall.DNS_TYPE_NSAPPTR": "syscall", - "syscall.DNS_TYPE_NSEC": "syscall", - "syscall.DNS_TYPE_NULL": "syscall", - "syscall.DNS_TYPE_NXT": "syscall", - "syscall.DNS_TYPE_OPT": "syscall", - "syscall.DNS_TYPE_PTR": "syscall", - "syscall.DNS_TYPE_PX": "syscall", - "syscall.DNS_TYPE_RP": "syscall", - "syscall.DNS_TYPE_RRSIG": "syscall", - "syscall.DNS_TYPE_RT": "syscall", - "syscall.DNS_TYPE_SIG": "syscall", - "syscall.DNS_TYPE_SINK": "syscall", - "syscall.DNS_TYPE_SOA": "syscall", - "syscall.DNS_TYPE_SRV": "syscall", - "syscall.DNS_TYPE_TEXT": "syscall", - "syscall.DNS_TYPE_TKEY": "syscall", - "syscall.DNS_TYPE_TSIG": "syscall", - "syscall.DNS_TYPE_UID": "syscall", - "syscall.DNS_TYPE_UINFO": "syscall", - "syscall.DNS_TYPE_UNSPEC": "syscall", - "syscall.DNS_TYPE_WINS": "syscall", - "syscall.DNS_TYPE_WINSR": "syscall", - "syscall.DNS_TYPE_WKS": "syscall", - "syscall.DNS_TYPE_X25": "syscall", - "syscall.DT_BLK": "syscall", - "syscall.DT_CHR": "syscall", - "syscall.DT_DIR": "syscall", - "syscall.DT_FIFO": "syscall", - "syscall.DT_LNK": "syscall", - "syscall.DT_REG": "syscall", - "syscall.DT_SOCK": "syscall", - "syscall.DT_UNKNOWN": "syscall", - "syscall.DT_WHT": "syscall", - "syscall.DUPLICATE_CLOSE_SOURCE": "syscall", - "syscall.DUPLICATE_SAME_ACCESS": "syscall", - "syscall.DeleteFile": "syscall", - "syscall.DetachLsf": "syscall", - "syscall.DeviceIoControl": "syscall", - "syscall.Dirent": "syscall", - "syscall.DnsNameCompare": "syscall", - "syscall.DnsQuery": "syscall", - "syscall.DnsRecordListFree": "syscall", - "syscall.DnsSectionAdditional": "syscall", - "syscall.DnsSectionAnswer": "syscall", - "syscall.DnsSectionAuthority": "syscall", - "syscall.DnsSectionQuestion": "syscall", - "syscall.Dup": "syscall", - "syscall.Dup2": "syscall", - "syscall.Dup3": "syscall", - "syscall.DuplicateHandle": "syscall", - "syscall.E2BIG": "syscall", - "syscall.EACCES": "syscall", - "syscall.EADDRINUSE": "syscall", - "syscall.EADDRNOTAVAIL": "syscall", - "syscall.EADV": "syscall", - "syscall.EAFNOSUPPORT": "syscall", - "syscall.EAGAIN": "syscall", - "syscall.EALREADY": "syscall", - "syscall.EAUTH": "syscall", - "syscall.EBADARCH": "syscall", - "syscall.EBADE": "syscall", - "syscall.EBADEXEC": "syscall", - "syscall.EBADF": "syscall", - "syscall.EBADFD": "syscall", - "syscall.EBADMACHO": "syscall", - "syscall.EBADMSG": "syscall", - "syscall.EBADR": "syscall", - "syscall.EBADRPC": "syscall", - "syscall.EBADRQC": "syscall", - "syscall.EBADSLT": "syscall", - "syscall.EBFONT": "syscall", - "syscall.EBUSY": "syscall", - "syscall.ECANCELED": "syscall", - "syscall.ECAPMODE": "syscall", - "syscall.ECHILD": "syscall", - "syscall.ECHO": "syscall", - "syscall.ECHOCTL": "syscall", - "syscall.ECHOE": "syscall", - "syscall.ECHOK": "syscall", - "syscall.ECHOKE": "syscall", - "syscall.ECHONL": "syscall", - "syscall.ECHOPRT": "syscall", - "syscall.ECHRNG": "syscall", - "syscall.ECOMM": "syscall", - "syscall.ECONNABORTED": "syscall", - "syscall.ECONNREFUSED": "syscall", - "syscall.ECONNRESET": "syscall", - "syscall.EDEADLK": "syscall", - "syscall.EDEADLOCK": "syscall", - "syscall.EDESTADDRREQ": "syscall", - "syscall.EDEVERR": "syscall", - "syscall.EDOM": "syscall", - "syscall.EDOOFUS": "syscall", - "syscall.EDOTDOT": "syscall", - "syscall.EDQUOT": "syscall", - "syscall.EEXIST": "syscall", - "syscall.EFAULT": "syscall", - "syscall.EFBIG": "syscall", - "syscall.EFER_LMA": "syscall", - "syscall.EFER_LME": "syscall", - "syscall.EFER_NXE": "syscall", - "syscall.EFER_SCE": "syscall", - "syscall.EFTYPE": "syscall", - "syscall.EHOSTDOWN": "syscall", - "syscall.EHOSTUNREACH": "syscall", - "syscall.EHWPOISON": "syscall", - "syscall.EIDRM": "syscall", - "syscall.EILSEQ": "syscall", - "syscall.EINPROGRESS": "syscall", - "syscall.EINTR": "syscall", - "syscall.EINVAL": "syscall", - "syscall.EIO": "syscall", - "syscall.EIPSEC": "syscall", - "syscall.EISCONN": "syscall", - "syscall.EISDIR": "syscall", - "syscall.EISNAM": "syscall", - "syscall.EKEYEXPIRED": "syscall", - "syscall.EKEYREJECTED": "syscall", - "syscall.EKEYREVOKED": "syscall", - "syscall.EL2HLT": "syscall", - "syscall.EL2NSYNC": "syscall", - "syscall.EL3HLT": "syscall", - "syscall.EL3RST": "syscall", - "syscall.ELAST": "syscall", - "syscall.ELF_NGREG": "syscall", - "syscall.ELF_PRARGSZ": "syscall", - "syscall.ELIBACC": "syscall", - "syscall.ELIBBAD": "syscall", - "syscall.ELIBEXEC": "syscall", - "syscall.ELIBMAX": "syscall", - "syscall.ELIBSCN": "syscall", - "syscall.ELNRNG": "syscall", - "syscall.ELOOP": "syscall", - "syscall.EMEDIUMTYPE": "syscall", - "syscall.EMFILE": "syscall", - "syscall.EMLINK": "syscall", - "syscall.EMSGSIZE": "syscall", - "syscall.EMT_TAGOVF": "syscall", - "syscall.EMULTIHOP": "syscall", - "syscall.EMUL_ENABLED": "syscall", - "syscall.EMUL_LINUX": "syscall", - "syscall.EMUL_LINUX32": "syscall", - "syscall.EMUL_MAXID": "syscall", - "syscall.EMUL_NATIVE": "syscall", - "syscall.ENAMETOOLONG": "syscall", - "syscall.ENAVAIL": "syscall", - "syscall.ENDRUNDISC": "syscall", - "syscall.ENEEDAUTH": "syscall", - "syscall.ENETDOWN": "syscall", - "syscall.ENETRESET": "syscall", - "syscall.ENETUNREACH": "syscall", - "syscall.ENFILE": "syscall", - "syscall.ENOANO": "syscall", - "syscall.ENOATTR": "syscall", - "syscall.ENOBUFS": "syscall", - "syscall.ENOCSI": "syscall", - "syscall.ENODATA": "syscall", - "syscall.ENODEV": "syscall", - "syscall.ENOENT": "syscall", - "syscall.ENOEXEC": "syscall", - "syscall.ENOKEY": "syscall", - "syscall.ENOLCK": "syscall", - "syscall.ENOLINK": "syscall", - "syscall.ENOMEDIUM": "syscall", - "syscall.ENOMEM": "syscall", - "syscall.ENOMSG": "syscall", - "syscall.ENONET": "syscall", - "syscall.ENOPKG": "syscall", - "syscall.ENOPOLICY": "syscall", - "syscall.ENOPROTOOPT": "syscall", - "syscall.ENOSPC": "syscall", - "syscall.ENOSR": "syscall", - "syscall.ENOSTR": "syscall", - "syscall.ENOSYS": "syscall", - "syscall.ENOTBLK": "syscall", - "syscall.ENOTCAPABLE": "syscall", - "syscall.ENOTCONN": "syscall", - "syscall.ENOTDIR": "syscall", - "syscall.ENOTEMPTY": "syscall", - "syscall.ENOTNAM": "syscall", - "syscall.ENOTRECOVERABLE": "syscall", - "syscall.ENOTSOCK": "syscall", - "syscall.ENOTSUP": "syscall", - "syscall.ENOTTY": "syscall", - "syscall.ENOTUNIQ": "syscall", - "syscall.ENXIO": "syscall", - "syscall.EN_SW_CTL_INF": "syscall", - "syscall.EN_SW_CTL_PREC": "syscall", - "syscall.EN_SW_CTL_ROUND": "syscall", - "syscall.EN_SW_DATACHAIN": "syscall", - "syscall.EN_SW_DENORM": "syscall", - "syscall.EN_SW_INVOP": "syscall", - "syscall.EN_SW_OVERFLOW": "syscall", - "syscall.EN_SW_PRECLOSS": "syscall", - "syscall.EN_SW_UNDERFLOW": "syscall", - "syscall.EN_SW_ZERODIV": "syscall", - "syscall.EOPNOTSUPP": "syscall", - "syscall.EOVERFLOW": "syscall", - "syscall.EOWNERDEAD": "syscall", - "syscall.EPERM": "syscall", - "syscall.EPFNOSUPPORT": "syscall", - "syscall.EPIPE": "syscall", - "syscall.EPOLLERR": "syscall", - "syscall.EPOLLET": "syscall", - "syscall.EPOLLHUP": "syscall", - "syscall.EPOLLIN": "syscall", - "syscall.EPOLLMSG": "syscall", - "syscall.EPOLLONESHOT": "syscall", - "syscall.EPOLLOUT": "syscall", - "syscall.EPOLLPRI": "syscall", - "syscall.EPOLLRDBAND": "syscall", - "syscall.EPOLLRDHUP": "syscall", - "syscall.EPOLLRDNORM": "syscall", - "syscall.EPOLLWRBAND": "syscall", - "syscall.EPOLLWRNORM": "syscall", - "syscall.EPOLL_CLOEXEC": "syscall", - "syscall.EPOLL_CTL_ADD": "syscall", - "syscall.EPOLL_CTL_DEL": "syscall", - "syscall.EPOLL_CTL_MOD": "syscall", - "syscall.EPOLL_NONBLOCK": "syscall", - "syscall.EPROCLIM": "syscall", - "syscall.EPROCUNAVAIL": "syscall", - "syscall.EPROGMISMATCH": "syscall", - "syscall.EPROGUNAVAIL": "syscall", - "syscall.EPROTO": "syscall", - "syscall.EPROTONOSUPPORT": "syscall", - "syscall.EPROTOTYPE": "syscall", - "syscall.EPWROFF": "syscall", - "syscall.ERANGE": "syscall", - "syscall.EREMCHG": "syscall", - "syscall.EREMOTE": "syscall", - "syscall.EREMOTEIO": "syscall", - "syscall.ERESTART": "syscall", - "syscall.ERFKILL": "syscall", - "syscall.EROFS": "syscall", - "syscall.ERPCMISMATCH": "syscall", - "syscall.ERROR_ACCESS_DENIED": "syscall", - "syscall.ERROR_ALREADY_EXISTS": "syscall", - "syscall.ERROR_BROKEN_PIPE": "syscall", - "syscall.ERROR_BUFFER_OVERFLOW": "syscall", - "syscall.ERROR_ENVVAR_NOT_FOUND": "syscall", - "syscall.ERROR_FILE_EXISTS": "syscall", - "syscall.ERROR_FILE_NOT_FOUND": "syscall", - "syscall.ERROR_HANDLE_EOF": "syscall", - "syscall.ERROR_INSUFFICIENT_BUFFER": "syscall", - "syscall.ERROR_IO_PENDING": "syscall", - "syscall.ERROR_MOD_NOT_FOUND": "syscall", - "syscall.ERROR_MORE_DATA": "syscall", - "syscall.ERROR_NETNAME_DELETED": "syscall", - "syscall.ERROR_NOT_FOUND": "syscall", - "syscall.ERROR_NO_MORE_FILES": "syscall", - "syscall.ERROR_OPERATION_ABORTED": "syscall", - "syscall.ERROR_PATH_NOT_FOUND": "syscall", - "syscall.ERROR_PRIVILEGE_NOT_HELD": "syscall", - "syscall.ERROR_PROC_NOT_FOUND": "syscall", - "syscall.ESHLIBVERS": "syscall", - "syscall.ESHUTDOWN": "syscall", - "syscall.ESOCKTNOSUPPORT": "syscall", - "syscall.ESPIPE": "syscall", - "syscall.ESRCH": "syscall", - "syscall.ESRMNT": "syscall", - "syscall.ESTALE": "syscall", - "syscall.ESTRPIPE": "syscall", - "syscall.ETHERCAP_JUMBO_MTU": "syscall", - "syscall.ETHERCAP_VLAN_HWTAGGING": "syscall", - "syscall.ETHERCAP_VLAN_MTU": "syscall", - "syscall.ETHERMIN": "syscall", - "syscall.ETHERMTU": "syscall", - "syscall.ETHERMTU_JUMBO": "syscall", - "syscall.ETHERTYPE_8023": "syscall", - "syscall.ETHERTYPE_AARP": "syscall", - "syscall.ETHERTYPE_ACCTON": "syscall", - "syscall.ETHERTYPE_AEONIC": "syscall", - "syscall.ETHERTYPE_ALPHA": "syscall", - "syscall.ETHERTYPE_AMBER": "syscall", - "syscall.ETHERTYPE_AMOEBA": "syscall", - "syscall.ETHERTYPE_AOE": "syscall", - "syscall.ETHERTYPE_APOLLO": "syscall", - "syscall.ETHERTYPE_APOLLODOMAIN": "syscall", - "syscall.ETHERTYPE_APPLETALK": "syscall", - "syscall.ETHERTYPE_APPLITEK": "syscall", - "syscall.ETHERTYPE_ARGONAUT": "syscall", - "syscall.ETHERTYPE_ARP": "syscall", - "syscall.ETHERTYPE_AT": "syscall", - "syscall.ETHERTYPE_ATALK": "syscall", - "syscall.ETHERTYPE_ATOMIC": "syscall", - "syscall.ETHERTYPE_ATT": "syscall", - "syscall.ETHERTYPE_ATTSTANFORD": "syscall", - "syscall.ETHERTYPE_AUTOPHON": "syscall", - "syscall.ETHERTYPE_AXIS": "syscall", - "syscall.ETHERTYPE_BCLOOP": "syscall", - "syscall.ETHERTYPE_BOFL": "syscall", - "syscall.ETHERTYPE_CABLETRON": "syscall", - "syscall.ETHERTYPE_CHAOS": "syscall", - "syscall.ETHERTYPE_COMDESIGN": "syscall", - "syscall.ETHERTYPE_COMPUGRAPHIC": "syscall", - "syscall.ETHERTYPE_COUNTERPOINT": "syscall", - "syscall.ETHERTYPE_CRONUS": "syscall", - "syscall.ETHERTYPE_CRONUSVLN": "syscall", - "syscall.ETHERTYPE_DCA": "syscall", - "syscall.ETHERTYPE_DDE": "syscall", - "syscall.ETHERTYPE_DEBNI": "syscall", - "syscall.ETHERTYPE_DECAM": "syscall", - "syscall.ETHERTYPE_DECCUST": "syscall", - "syscall.ETHERTYPE_DECDIAG": "syscall", - "syscall.ETHERTYPE_DECDNS": "syscall", - "syscall.ETHERTYPE_DECDTS": "syscall", - "syscall.ETHERTYPE_DECEXPER": "syscall", - "syscall.ETHERTYPE_DECLAST": "syscall", - "syscall.ETHERTYPE_DECLTM": "syscall", - "syscall.ETHERTYPE_DECMUMPS": "syscall", - "syscall.ETHERTYPE_DECNETBIOS": "syscall", - "syscall.ETHERTYPE_DELTACON": "syscall", - "syscall.ETHERTYPE_DIDDLE": "syscall", - "syscall.ETHERTYPE_DLOG1": "syscall", - "syscall.ETHERTYPE_DLOG2": "syscall", - "syscall.ETHERTYPE_DN": "syscall", - "syscall.ETHERTYPE_DOGFIGHT": "syscall", - "syscall.ETHERTYPE_DSMD": "syscall", - "syscall.ETHERTYPE_ECMA": "syscall", - "syscall.ETHERTYPE_ENCRYPT": "syscall", - "syscall.ETHERTYPE_ES": "syscall", - "syscall.ETHERTYPE_EXCELAN": "syscall", - "syscall.ETHERTYPE_EXPERDATA": "syscall", - "syscall.ETHERTYPE_FLIP": "syscall", - "syscall.ETHERTYPE_FLOWCONTROL": "syscall", - "syscall.ETHERTYPE_FRARP": "syscall", - "syscall.ETHERTYPE_GENDYN": "syscall", - "syscall.ETHERTYPE_HAYES": "syscall", - "syscall.ETHERTYPE_HIPPI_FP": "syscall", - "syscall.ETHERTYPE_HITACHI": "syscall", - "syscall.ETHERTYPE_HP": "syscall", - "syscall.ETHERTYPE_IEEEPUP": "syscall", - "syscall.ETHERTYPE_IEEEPUPAT": "syscall", - "syscall.ETHERTYPE_IMLBL": "syscall", - "syscall.ETHERTYPE_IMLBLDIAG": "syscall", - "syscall.ETHERTYPE_IP": "syscall", - "syscall.ETHERTYPE_IPAS": "syscall", - "syscall.ETHERTYPE_IPV6": "syscall", - "syscall.ETHERTYPE_IPX": "syscall", - "syscall.ETHERTYPE_IPXNEW": "syscall", - "syscall.ETHERTYPE_KALPANA": "syscall", - "syscall.ETHERTYPE_LANBRIDGE": "syscall", - "syscall.ETHERTYPE_LANPROBE": "syscall", - "syscall.ETHERTYPE_LAT": "syscall", - "syscall.ETHERTYPE_LBACK": "syscall", - "syscall.ETHERTYPE_LITTLE": "syscall", - "syscall.ETHERTYPE_LLDP": "syscall", - "syscall.ETHERTYPE_LOGICRAFT": "syscall", - "syscall.ETHERTYPE_LOOPBACK": "syscall", - "syscall.ETHERTYPE_MATRA": "syscall", - "syscall.ETHERTYPE_MAX": "syscall", - "syscall.ETHERTYPE_MERIT": "syscall", - "syscall.ETHERTYPE_MICP": "syscall", - "syscall.ETHERTYPE_MOPDL": "syscall", - "syscall.ETHERTYPE_MOPRC": "syscall", - "syscall.ETHERTYPE_MOTOROLA": "syscall", - "syscall.ETHERTYPE_MPLS": "syscall", - "syscall.ETHERTYPE_MPLS_MCAST": "syscall", - "syscall.ETHERTYPE_MUMPS": "syscall", - "syscall.ETHERTYPE_NBPCC": "syscall", - "syscall.ETHERTYPE_NBPCLAIM": "syscall", - "syscall.ETHERTYPE_NBPCLREQ": "syscall", - "syscall.ETHERTYPE_NBPCLRSP": "syscall", - "syscall.ETHERTYPE_NBPCREQ": "syscall", - "syscall.ETHERTYPE_NBPCRSP": "syscall", - "syscall.ETHERTYPE_NBPDG": "syscall", - "syscall.ETHERTYPE_NBPDGB": "syscall", - "syscall.ETHERTYPE_NBPDLTE": "syscall", - "syscall.ETHERTYPE_NBPRAR": "syscall", - "syscall.ETHERTYPE_NBPRAS": "syscall", - "syscall.ETHERTYPE_NBPRST": "syscall", - "syscall.ETHERTYPE_NBPSCD": "syscall", - "syscall.ETHERTYPE_NBPVCD": "syscall", - "syscall.ETHERTYPE_NBS": "syscall", - "syscall.ETHERTYPE_NCD": "syscall", - "syscall.ETHERTYPE_NESTAR": "syscall", - "syscall.ETHERTYPE_NETBEUI": "syscall", - "syscall.ETHERTYPE_NOVELL": "syscall", - "syscall.ETHERTYPE_NS": "syscall", - "syscall.ETHERTYPE_NSAT": "syscall", - "syscall.ETHERTYPE_NSCOMPAT": "syscall", - "syscall.ETHERTYPE_NTRAILER": "syscall", - "syscall.ETHERTYPE_OS9": "syscall", - "syscall.ETHERTYPE_OS9NET": "syscall", - "syscall.ETHERTYPE_PACER": "syscall", - "syscall.ETHERTYPE_PAE": "syscall", - "syscall.ETHERTYPE_PCS": "syscall", - "syscall.ETHERTYPE_PLANNING": "syscall", - "syscall.ETHERTYPE_PPP": "syscall", - "syscall.ETHERTYPE_PPPOE": "syscall", - "syscall.ETHERTYPE_PPPOEDISC": "syscall", - "syscall.ETHERTYPE_PRIMENTS": "syscall", - "syscall.ETHERTYPE_PUP": "syscall", - "syscall.ETHERTYPE_PUPAT": "syscall", - "syscall.ETHERTYPE_QINQ": "syscall", - "syscall.ETHERTYPE_RACAL": "syscall", - "syscall.ETHERTYPE_RATIONAL": "syscall", - "syscall.ETHERTYPE_RAWFR": "syscall", - "syscall.ETHERTYPE_RCL": "syscall", - "syscall.ETHERTYPE_RDP": "syscall", - "syscall.ETHERTYPE_RETIX": "syscall", - "syscall.ETHERTYPE_REVARP": "syscall", - "syscall.ETHERTYPE_SCA": "syscall", - "syscall.ETHERTYPE_SECTRA": "syscall", - "syscall.ETHERTYPE_SECUREDATA": "syscall", - "syscall.ETHERTYPE_SGITW": "syscall", - "syscall.ETHERTYPE_SG_BOUNCE": "syscall", - "syscall.ETHERTYPE_SG_DIAG": "syscall", - "syscall.ETHERTYPE_SG_NETGAMES": "syscall", - "syscall.ETHERTYPE_SG_RESV": "syscall", - "syscall.ETHERTYPE_SIMNET": "syscall", - "syscall.ETHERTYPE_SLOW": "syscall", - "syscall.ETHERTYPE_SLOWPROTOCOLS": "syscall", - "syscall.ETHERTYPE_SNA": "syscall", - "syscall.ETHERTYPE_SNMP": "syscall", - "syscall.ETHERTYPE_SONIX": "syscall", - "syscall.ETHERTYPE_SPIDER": "syscall", - "syscall.ETHERTYPE_SPRITE": "syscall", - "syscall.ETHERTYPE_STP": "syscall", - "syscall.ETHERTYPE_TALARIS": "syscall", - "syscall.ETHERTYPE_TALARISMC": "syscall", - "syscall.ETHERTYPE_TCPCOMP": "syscall", - "syscall.ETHERTYPE_TCPSM": "syscall", - "syscall.ETHERTYPE_TEC": "syscall", - "syscall.ETHERTYPE_TIGAN": "syscall", - "syscall.ETHERTYPE_TRAIL": "syscall", - "syscall.ETHERTYPE_TRANSETHER": "syscall", - "syscall.ETHERTYPE_TYMSHARE": "syscall", - "syscall.ETHERTYPE_UBBST": "syscall", - "syscall.ETHERTYPE_UBDEBUG": "syscall", - "syscall.ETHERTYPE_UBDIAGLOOP": "syscall", - "syscall.ETHERTYPE_UBDL": "syscall", - "syscall.ETHERTYPE_UBNIU": "syscall", - "syscall.ETHERTYPE_UBNMC": "syscall", - "syscall.ETHERTYPE_VALID": "syscall", - "syscall.ETHERTYPE_VARIAN": "syscall", - "syscall.ETHERTYPE_VAXELN": "syscall", - "syscall.ETHERTYPE_VEECO": "syscall", - "syscall.ETHERTYPE_VEXP": "syscall", - "syscall.ETHERTYPE_VGLAB": "syscall", - "syscall.ETHERTYPE_VINES": "syscall", - "syscall.ETHERTYPE_VINESECHO": "syscall", - "syscall.ETHERTYPE_VINESLOOP": "syscall", - "syscall.ETHERTYPE_VITAL": "syscall", - "syscall.ETHERTYPE_VLAN": "syscall", - "syscall.ETHERTYPE_VLTLMAN": "syscall", - "syscall.ETHERTYPE_VPROD": "syscall", - "syscall.ETHERTYPE_VURESERVED": "syscall", - "syscall.ETHERTYPE_WATERLOO": "syscall", - "syscall.ETHERTYPE_WELLFLEET": "syscall", - "syscall.ETHERTYPE_X25": "syscall", - "syscall.ETHERTYPE_X75": "syscall", - "syscall.ETHERTYPE_XNSSM": "syscall", - "syscall.ETHERTYPE_XTP": "syscall", - "syscall.ETHER_ADDR_LEN": "syscall", - "syscall.ETHER_ALIGN": "syscall", - "syscall.ETHER_CRC_LEN": "syscall", - "syscall.ETHER_CRC_POLY_BE": "syscall", - "syscall.ETHER_CRC_POLY_LE": "syscall", - "syscall.ETHER_HDR_LEN": "syscall", - "syscall.ETHER_MAX_DIX_LEN": "syscall", - "syscall.ETHER_MAX_LEN": "syscall", - "syscall.ETHER_MAX_LEN_JUMBO": "syscall", - "syscall.ETHER_MIN_LEN": "syscall", - "syscall.ETHER_PPPOE_ENCAP_LEN": "syscall", - "syscall.ETHER_TYPE_LEN": "syscall", - "syscall.ETHER_VLAN_ENCAP_LEN": "syscall", - "syscall.ETH_P_1588": "syscall", - "syscall.ETH_P_8021Q": "syscall", - "syscall.ETH_P_802_2": "syscall", - "syscall.ETH_P_802_3": "syscall", - "syscall.ETH_P_AARP": "syscall", - "syscall.ETH_P_ALL": "syscall", - "syscall.ETH_P_AOE": "syscall", - "syscall.ETH_P_ARCNET": "syscall", - "syscall.ETH_P_ARP": "syscall", - "syscall.ETH_P_ATALK": "syscall", - "syscall.ETH_P_ATMFATE": "syscall", - "syscall.ETH_P_ATMMPOA": "syscall", - "syscall.ETH_P_AX25": "syscall", - "syscall.ETH_P_BPQ": "syscall", - "syscall.ETH_P_CAIF": "syscall", - "syscall.ETH_P_CAN": "syscall", - "syscall.ETH_P_CONTROL": "syscall", - "syscall.ETH_P_CUST": "syscall", - "syscall.ETH_P_DDCMP": "syscall", - "syscall.ETH_P_DEC": "syscall", - "syscall.ETH_P_DIAG": "syscall", - "syscall.ETH_P_DNA_DL": "syscall", - "syscall.ETH_P_DNA_RC": "syscall", - "syscall.ETH_P_DNA_RT": "syscall", - "syscall.ETH_P_DSA": "syscall", - "syscall.ETH_P_ECONET": "syscall", - "syscall.ETH_P_EDSA": "syscall", - "syscall.ETH_P_FCOE": "syscall", - "syscall.ETH_P_FIP": "syscall", - "syscall.ETH_P_HDLC": "syscall", - "syscall.ETH_P_IEEE802154": "syscall", - "syscall.ETH_P_IEEEPUP": "syscall", - "syscall.ETH_P_IEEEPUPAT": "syscall", - "syscall.ETH_P_IP": "syscall", - "syscall.ETH_P_IPV6": "syscall", - "syscall.ETH_P_IPX": "syscall", - "syscall.ETH_P_IRDA": "syscall", - "syscall.ETH_P_LAT": "syscall", - "syscall.ETH_P_LINK_CTL": "syscall", - "syscall.ETH_P_LOCALTALK": "syscall", - "syscall.ETH_P_LOOP": "syscall", - "syscall.ETH_P_MOBITEX": "syscall", - "syscall.ETH_P_MPLS_MC": "syscall", - "syscall.ETH_P_MPLS_UC": "syscall", - "syscall.ETH_P_PAE": "syscall", - "syscall.ETH_P_PAUSE": "syscall", - "syscall.ETH_P_PHONET": "syscall", - "syscall.ETH_P_PPPTALK": "syscall", - "syscall.ETH_P_PPP_DISC": "syscall", - "syscall.ETH_P_PPP_MP": "syscall", - "syscall.ETH_P_PPP_SES": "syscall", - "syscall.ETH_P_PUP": "syscall", - "syscall.ETH_P_PUPAT": "syscall", - "syscall.ETH_P_RARP": "syscall", - "syscall.ETH_P_SCA": "syscall", - "syscall.ETH_P_SLOW": "syscall", - "syscall.ETH_P_SNAP": "syscall", - "syscall.ETH_P_TEB": "syscall", - "syscall.ETH_P_TIPC": "syscall", - "syscall.ETH_P_TRAILER": "syscall", - "syscall.ETH_P_TR_802_2": "syscall", - "syscall.ETH_P_WAN_PPP": "syscall", - "syscall.ETH_P_WCCP": "syscall", - "syscall.ETH_P_X25": "syscall", - "syscall.ETIME": "syscall", - "syscall.ETIMEDOUT": "syscall", - "syscall.ETOOMANYREFS": "syscall", - "syscall.ETXTBSY": "syscall", - "syscall.EUCLEAN": "syscall", - "syscall.EUNATCH": "syscall", - "syscall.EUSERS": "syscall", - "syscall.EVFILT_AIO": "syscall", - "syscall.EVFILT_FS": "syscall", - "syscall.EVFILT_LIO": "syscall", - "syscall.EVFILT_MACHPORT": "syscall", - "syscall.EVFILT_PROC": "syscall", - "syscall.EVFILT_READ": "syscall", - "syscall.EVFILT_SIGNAL": "syscall", - "syscall.EVFILT_SYSCOUNT": "syscall", - "syscall.EVFILT_THREADMARKER": "syscall", - "syscall.EVFILT_TIMER": "syscall", - "syscall.EVFILT_USER": "syscall", - "syscall.EVFILT_VM": "syscall", - "syscall.EVFILT_VNODE": "syscall", - "syscall.EVFILT_WRITE": "syscall", - "syscall.EV_ADD": "syscall", - "syscall.EV_CLEAR": "syscall", - "syscall.EV_DELETE": "syscall", - "syscall.EV_DISABLE": "syscall", - "syscall.EV_DISPATCH": "syscall", - "syscall.EV_DROP": "syscall", - "syscall.EV_ENABLE": "syscall", - "syscall.EV_EOF": "syscall", - "syscall.EV_ERROR": "syscall", - "syscall.EV_FLAG0": "syscall", - "syscall.EV_FLAG1": "syscall", - "syscall.EV_ONESHOT": "syscall", - "syscall.EV_OOBAND": "syscall", - "syscall.EV_POLL": "syscall", - "syscall.EV_RECEIPT": "syscall", - "syscall.EV_SYSFLAGS": "syscall", - "syscall.EWINDOWS": "syscall", - "syscall.EWOULDBLOCK": "syscall", - "syscall.EXDEV": "syscall", - "syscall.EXFULL": "syscall", - "syscall.EXTA": "syscall", - "syscall.EXTB": "syscall", - "syscall.EXTPROC": "syscall", - "syscall.Environ": "syscall", - "syscall.EpollCreate": "syscall", - "syscall.EpollCreate1": "syscall", - "syscall.EpollCtl": "syscall", - "syscall.EpollEvent": "syscall", - "syscall.EpollWait": "syscall", - "syscall.Errno": "syscall", - "syscall.EscapeArg": "syscall", - "syscall.Exchangedata": "syscall", - "syscall.Exec": "syscall", - "syscall.Exit": "syscall", - "syscall.ExitProcess": "syscall", - "syscall.FD_CLOEXEC": "syscall", - "syscall.FD_SETSIZE": "syscall", - "syscall.FILE_ACTION_ADDED": "syscall", - "syscall.FILE_ACTION_MODIFIED": "syscall", - "syscall.FILE_ACTION_REMOVED": "syscall", - "syscall.FILE_ACTION_RENAMED_NEW_NAME": "syscall", - "syscall.FILE_ACTION_RENAMED_OLD_NAME": "syscall", - "syscall.FILE_APPEND_DATA": "syscall", - "syscall.FILE_ATTRIBUTE_ARCHIVE": "syscall", - "syscall.FILE_ATTRIBUTE_DIRECTORY": "syscall", - "syscall.FILE_ATTRIBUTE_HIDDEN": "syscall", - "syscall.FILE_ATTRIBUTE_NORMAL": "syscall", - "syscall.FILE_ATTRIBUTE_READONLY": "syscall", - "syscall.FILE_ATTRIBUTE_REPARSE_POINT": "syscall", - "syscall.FILE_ATTRIBUTE_SYSTEM": "syscall", - "syscall.FILE_BEGIN": "syscall", - "syscall.FILE_CURRENT": "syscall", - "syscall.FILE_END": "syscall", - "syscall.FILE_FLAG_BACKUP_SEMANTICS": "syscall", - "syscall.FILE_FLAG_OPEN_REPARSE_POINT": "syscall", - "syscall.FILE_FLAG_OVERLAPPED": "syscall", - "syscall.FILE_LIST_DIRECTORY": "syscall", - "syscall.FILE_MAP_COPY": "syscall", - "syscall.FILE_MAP_EXECUTE": "syscall", - "syscall.FILE_MAP_READ": "syscall", - "syscall.FILE_MAP_WRITE": "syscall", - "syscall.FILE_NOTIFY_CHANGE_ATTRIBUTES": "syscall", - "syscall.FILE_NOTIFY_CHANGE_CREATION": "syscall", - "syscall.FILE_NOTIFY_CHANGE_DIR_NAME": "syscall", - "syscall.FILE_NOTIFY_CHANGE_FILE_NAME": "syscall", - "syscall.FILE_NOTIFY_CHANGE_LAST_ACCESS": "syscall", - "syscall.FILE_NOTIFY_CHANGE_LAST_WRITE": "syscall", - "syscall.FILE_NOTIFY_CHANGE_SIZE": "syscall", - "syscall.FILE_SHARE_DELETE": "syscall", - "syscall.FILE_SHARE_READ": "syscall", - "syscall.FILE_SHARE_WRITE": "syscall", - "syscall.FILE_SKIP_COMPLETION_PORT_ON_SUCCESS": "syscall", - "syscall.FILE_SKIP_SET_EVENT_ON_HANDLE": "syscall", - "syscall.FILE_TYPE_CHAR": "syscall", - "syscall.FILE_TYPE_DISK": "syscall", - "syscall.FILE_TYPE_PIPE": "syscall", - "syscall.FILE_TYPE_REMOTE": "syscall", - "syscall.FILE_TYPE_UNKNOWN": "syscall", - "syscall.FILE_WRITE_ATTRIBUTES": "syscall", - "syscall.FLUSHO": "syscall", - "syscall.FORMAT_MESSAGE_ALLOCATE_BUFFER": "syscall", - "syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY": "syscall", - "syscall.FORMAT_MESSAGE_FROM_HMODULE": "syscall", - "syscall.FORMAT_MESSAGE_FROM_STRING": "syscall", - "syscall.FORMAT_MESSAGE_FROM_SYSTEM": "syscall", - "syscall.FORMAT_MESSAGE_IGNORE_INSERTS": "syscall", - "syscall.FORMAT_MESSAGE_MAX_WIDTH_MASK": "syscall", - "syscall.FSCTL_GET_REPARSE_POINT": "syscall", - "syscall.F_ADDFILESIGS": "syscall", - "syscall.F_ADDSIGS": "syscall", - "syscall.F_ALLOCATEALL": "syscall", - "syscall.F_ALLOCATECONTIG": "syscall", - "syscall.F_CANCEL": "syscall", - "syscall.F_CHKCLEAN": "syscall", - "syscall.F_CLOSEM": "syscall", - "syscall.F_DUP2FD": "syscall", - "syscall.F_DUP2FD_CLOEXEC": "syscall", - "syscall.F_DUPFD": "syscall", - "syscall.F_DUPFD_CLOEXEC": "syscall", - "syscall.F_EXLCK": "syscall", - "syscall.F_FLUSH_DATA": "syscall", - "syscall.F_FREEZE_FS": "syscall", - "syscall.F_FSCTL": "syscall", - "syscall.F_FSDIRMASK": "syscall", - "syscall.F_FSIN": "syscall", - "syscall.F_FSINOUT": "syscall", - "syscall.F_FSOUT": "syscall", - "syscall.F_FSPRIV": "syscall", - "syscall.F_FSVOID": "syscall", - "syscall.F_FULLFSYNC": "syscall", - "syscall.F_GETFD": "syscall", - "syscall.F_GETFL": "syscall", - "syscall.F_GETLEASE": "syscall", - "syscall.F_GETLK": "syscall", - "syscall.F_GETLK64": "syscall", - "syscall.F_GETLKPID": "syscall", - "syscall.F_GETNOSIGPIPE": "syscall", - "syscall.F_GETOWN": "syscall", - "syscall.F_GETOWN_EX": "syscall", - "syscall.F_GETPATH": "syscall", - "syscall.F_GETPATH_MTMINFO": "syscall", - "syscall.F_GETPIPE_SZ": "syscall", - "syscall.F_GETPROTECTIONCLASS": "syscall", - "syscall.F_GETSIG": "syscall", - "syscall.F_GLOBAL_NOCACHE": "syscall", - "syscall.F_LOCK": "syscall", - "syscall.F_LOG2PHYS": "syscall", - "syscall.F_LOG2PHYS_EXT": "syscall", - "syscall.F_MARKDEPENDENCY": "syscall", - "syscall.F_MAXFD": "syscall", - "syscall.F_NOCACHE": "syscall", - "syscall.F_NODIRECT": "syscall", - "syscall.F_NOTIFY": "syscall", - "syscall.F_OGETLK": "syscall", - "syscall.F_OK": "syscall", - "syscall.F_OSETLK": "syscall", - "syscall.F_OSETLKW": "syscall", - "syscall.F_PARAM_MASK": "syscall", - "syscall.F_PARAM_MAX": "syscall", - "syscall.F_PATHPKG_CHECK": "syscall", - "syscall.F_PEOFPOSMODE": "syscall", - "syscall.F_PREALLOCATE": "syscall", - "syscall.F_RDADVISE": "syscall", - "syscall.F_RDAHEAD": "syscall", - "syscall.F_RDLCK": "syscall", - "syscall.F_READAHEAD": "syscall", - "syscall.F_READBOOTSTRAP": "syscall", - "syscall.F_SETBACKINGSTORE": "syscall", - "syscall.F_SETFD": "syscall", - "syscall.F_SETFL": "syscall", - "syscall.F_SETLEASE": "syscall", - "syscall.F_SETLK": "syscall", - "syscall.F_SETLK64": "syscall", - "syscall.F_SETLKW": "syscall", - "syscall.F_SETLKW64": "syscall", - "syscall.F_SETLK_REMOTE": "syscall", - "syscall.F_SETNOSIGPIPE": "syscall", - "syscall.F_SETOWN": "syscall", - "syscall.F_SETOWN_EX": "syscall", - "syscall.F_SETPIPE_SZ": "syscall", - "syscall.F_SETPROTECTIONCLASS": "syscall", - "syscall.F_SETSIG": "syscall", - "syscall.F_SETSIZE": "syscall", - "syscall.F_SHLCK": "syscall", - "syscall.F_TEST": "syscall", - "syscall.F_THAW_FS": "syscall", - "syscall.F_TLOCK": "syscall", - "syscall.F_ULOCK": "syscall", - "syscall.F_UNLCK": "syscall", - "syscall.F_UNLCKSYS": "syscall", - "syscall.F_VOLPOSMODE": "syscall", - "syscall.F_WRITEBOOTSTRAP": "syscall", - "syscall.F_WRLCK": "syscall", - "syscall.Faccessat": "syscall", - "syscall.Fallocate": "syscall", - "syscall.Fbootstraptransfer_t": "syscall", - "syscall.Fchdir": "syscall", - "syscall.Fchflags": "syscall", - "syscall.Fchmod": "syscall", - "syscall.Fchmodat": "syscall", - "syscall.Fchown": "syscall", - "syscall.Fchownat": "syscall", - "syscall.FcntlFlock": "syscall", - "syscall.FdSet": "syscall", - "syscall.Fdatasync": "syscall", - "syscall.FileNotifyInformation": "syscall", - "syscall.Filetime": "syscall", - "syscall.FindClose": "syscall", - "syscall.FindFirstFile": "syscall", - "syscall.FindNextFile": "syscall", - "syscall.Flock": "syscall", - "syscall.Flock_t": "syscall", - "syscall.FlushBpf": "syscall", - "syscall.FlushFileBuffers": "syscall", - "syscall.FlushViewOfFile": "syscall", - "syscall.ForkExec": "syscall", - "syscall.ForkLock": "syscall", - "syscall.FormatMessage": "syscall", - "syscall.Fpathconf": "syscall", - "syscall.FreeAddrInfoW": "syscall", - "syscall.FreeEnvironmentStrings": "syscall", - "syscall.FreeLibrary": "syscall", - "syscall.Fsid": "syscall", - "syscall.Fstat": "syscall", - "syscall.Fstatfs": "syscall", - "syscall.Fstore_t": "syscall", - "syscall.Fsync": "syscall", - "syscall.Ftruncate": "syscall", - "syscall.FullPath": "syscall", - "syscall.Futimes": "syscall", - "syscall.Futimesat": "syscall", - "syscall.GENERIC_ALL": "syscall", - "syscall.GENERIC_EXECUTE": "syscall", - "syscall.GENERIC_READ": "syscall", - "syscall.GENERIC_WRITE": "syscall", - "syscall.GUID": "syscall", - "syscall.GetAcceptExSockaddrs": "syscall", - "syscall.GetAdaptersInfo": "syscall", - "syscall.GetAddrInfoW": "syscall", - "syscall.GetCommandLine": "syscall", - "syscall.GetComputerName": "syscall", - "syscall.GetConsoleMode": "syscall", - "syscall.GetCurrentDirectory": "syscall", - "syscall.GetCurrentProcess": "syscall", - "syscall.GetEnvironmentStrings": "syscall", - "syscall.GetEnvironmentVariable": "syscall", - "syscall.GetExitCodeProcess": "syscall", - "syscall.GetFileAttributes": "syscall", - "syscall.GetFileAttributesEx": "syscall", - "syscall.GetFileExInfoStandard": "syscall", - "syscall.GetFileExMaxInfoLevel": "syscall", - "syscall.GetFileInformationByHandle": "syscall", - "syscall.GetFileType": "syscall", - "syscall.GetFullPathName": "syscall", - "syscall.GetHostByName": "syscall", - "syscall.GetIfEntry": "syscall", - "syscall.GetLastError": "syscall", - "syscall.GetLengthSid": "syscall", - "syscall.GetLongPathName": "syscall", - "syscall.GetProcAddress": "syscall", - "syscall.GetProcessTimes": "syscall", - "syscall.GetProtoByName": "syscall", - "syscall.GetQueuedCompletionStatus": "syscall", - "syscall.GetServByName": "syscall", - "syscall.GetShortPathName": "syscall", - "syscall.GetStartupInfo": "syscall", - "syscall.GetStdHandle": "syscall", - "syscall.GetSystemTimeAsFileTime": "syscall", - "syscall.GetTempPath": "syscall", - "syscall.GetTimeZoneInformation": "syscall", - "syscall.GetTokenInformation": "syscall", - "syscall.GetUserNameEx": "syscall", - "syscall.GetUserProfileDirectory": "syscall", - "syscall.GetVersion": "syscall", - "syscall.Getcwd": "syscall", - "syscall.Getdents": "syscall", - "syscall.Getdirentries": "syscall", - "syscall.Getdtablesize": "syscall", - "syscall.Getegid": "syscall", - "syscall.Getenv": "syscall", - "syscall.Geteuid": "syscall", - "syscall.Getfsstat": "syscall", - "syscall.Getgid": "syscall", - "syscall.Getgroups": "syscall", - "syscall.Getpagesize": "syscall", - "syscall.Getpeername": "syscall", - "syscall.Getpgid": "syscall", - "syscall.Getpgrp": "syscall", - "syscall.Getpid": "syscall", - "syscall.Getppid": "syscall", - "syscall.Getpriority": "syscall", - "syscall.Getrlimit": "syscall", - "syscall.Getrusage": "syscall", - "syscall.Getsid": "syscall", - "syscall.Getsockname": "syscall", - "syscall.Getsockopt": "syscall", - "syscall.GetsockoptByte": "syscall", - "syscall.GetsockoptICMPv6Filter": "syscall", - "syscall.GetsockoptIPMreq": "syscall", - "syscall.GetsockoptIPMreqn": "syscall", - "syscall.GetsockoptIPv6MTUInfo": "syscall", - "syscall.GetsockoptIPv6Mreq": "syscall", - "syscall.GetsockoptInet4Addr": "syscall", - "syscall.GetsockoptInt": "syscall", - "syscall.GetsockoptUcred": "syscall", - "syscall.Gettid": "syscall", - "syscall.Gettimeofday": "syscall", - "syscall.Getuid": "syscall", - "syscall.Getwd": "syscall", - "syscall.Getxattr": "syscall", - "syscall.HANDLE_FLAG_INHERIT": "syscall", - "syscall.HKEY_CLASSES_ROOT": "syscall", - "syscall.HKEY_CURRENT_CONFIG": "syscall", - "syscall.HKEY_CURRENT_USER": "syscall", - "syscall.HKEY_DYN_DATA": "syscall", - "syscall.HKEY_LOCAL_MACHINE": "syscall", - "syscall.HKEY_PERFORMANCE_DATA": "syscall", - "syscall.HKEY_USERS": "syscall", - "syscall.HUPCL": "syscall", - "syscall.Handle": "syscall", - "syscall.Hostent": "syscall", - "syscall.ICANON": "syscall", - "syscall.ICMP6_FILTER": "syscall", - "syscall.ICMPV6_FILTER": "syscall", - "syscall.ICMPv6Filter": "syscall", - "syscall.ICRNL": "syscall", - "syscall.IEXTEN": "syscall", - "syscall.IFAN_ARRIVAL": "syscall", - "syscall.IFAN_DEPARTURE": "syscall", - "syscall.IFA_ADDRESS": "syscall", - "syscall.IFA_ANYCAST": "syscall", - "syscall.IFA_BROADCAST": "syscall", - "syscall.IFA_CACHEINFO": "syscall", - "syscall.IFA_F_DADFAILED": "syscall", - "syscall.IFA_F_DEPRECATED": "syscall", - "syscall.IFA_F_HOMEADDRESS": "syscall", - "syscall.IFA_F_NODAD": "syscall", - "syscall.IFA_F_OPTIMISTIC": "syscall", - "syscall.IFA_F_PERMANENT": "syscall", - "syscall.IFA_F_SECONDARY": "syscall", - "syscall.IFA_F_TEMPORARY": "syscall", - "syscall.IFA_F_TENTATIVE": "syscall", - "syscall.IFA_LABEL": "syscall", - "syscall.IFA_LOCAL": "syscall", - "syscall.IFA_MAX": "syscall", - "syscall.IFA_MULTICAST": "syscall", - "syscall.IFA_ROUTE": "syscall", - "syscall.IFA_UNSPEC": "syscall", - "syscall.IFF_ALLMULTI": "syscall", - "syscall.IFF_ALTPHYS": "syscall", - "syscall.IFF_AUTOMEDIA": "syscall", - "syscall.IFF_BROADCAST": "syscall", - "syscall.IFF_CANTCHANGE": "syscall", - "syscall.IFF_CANTCONFIG": "syscall", - "syscall.IFF_DEBUG": "syscall", - "syscall.IFF_DRV_OACTIVE": "syscall", - "syscall.IFF_DRV_RUNNING": "syscall", - "syscall.IFF_DYING": "syscall", - "syscall.IFF_DYNAMIC": "syscall", - "syscall.IFF_LINK0": "syscall", - "syscall.IFF_LINK1": "syscall", - "syscall.IFF_LINK2": "syscall", - "syscall.IFF_LOOPBACK": "syscall", - "syscall.IFF_MASTER": "syscall", - "syscall.IFF_MONITOR": "syscall", - "syscall.IFF_MULTICAST": "syscall", - "syscall.IFF_NOARP": "syscall", - "syscall.IFF_NOTRAILERS": "syscall", - "syscall.IFF_NO_PI": "syscall", - "syscall.IFF_OACTIVE": "syscall", - "syscall.IFF_ONE_QUEUE": "syscall", - "syscall.IFF_POINTOPOINT": "syscall", - "syscall.IFF_POINTTOPOINT": "syscall", - "syscall.IFF_PORTSEL": "syscall", - "syscall.IFF_PPROMISC": "syscall", - "syscall.IFF_PROMISC": "syscall", - "syscall.IFF_RENAMING": "syscall", - "syscall.IFF_RUNNING": "syscall", - "syscall.IFF_SIMPLEX": "syscall", - "syscall.IFF_SLAVE": "syscall", - "syscall.IFF_SMART": "syscall", - "syscall.IFF_STATICARP": "syscall", - "syscall.IFF_TAP": "syscall", - "syscall.IFF_TUN": "syscall", - "syscall.IFF_TUN_EXCL": "syscall", - "syscall.IFF_UP": "syscall", - "syscall.IFF_VNET_HDR": "syscall", - "syscall.IFLA_ADDRESS": "syscall", - "syscall.IFLA_BROADCAST": "syscall", - "syscall.IFLA_COST": "syscall", - "syscall.IFLA_IFALIAS": "syscall", - "syscall.IFLA_IFNAME": "syscall", - "syscall.IFLA_LINK": "syscall", - "syscall.IFLA_LINKINFO": "syscall", - "syscall.IFLA_LINKMODE": "syscall", - "syscall.IFLA_MAP": "syscall", - "syscall.IFLA_MASTER": "syscall", - "syscall.IFLA_MAX": "syscall", - "syscall.IFLA_MTU": "syscall", - "syscall.IFLA_NET_NS_PID": "syscall", - "syscall.IFLA_OPERSTATE": "syscall", - "syscall.IFLA_PRIORITY": "syscall", - "syscall.IFLA_PROTINFO": "syscall", - "syscall.IFLA_QDISC": "syscall", - "syscall.IFLA_STATS": "syscall", - "syscall.IFLA_TXQLEN": "syscall", - "syscall.IFLA_UNSPEC": "syscall", - "syscall.IFLA_WEIGHT": "syscall", - "syscall.IFLA_WIRELESS": "syscall", - "syscall.IFNAMSIZ": "syscall", - "syscall.IFT_1822": "syscall", - "syscall.IFT_A12MPPSWITCH": "syscall", - "syscall.IFT_AAL2": "syscall", - "syscall.IFT_AAL5": "syscall", - "syscall.IFT_ADSL": "syscall", - "syscall.IFT_AFLANE8023": "syscall", - "syscall.IFT_AFLANE8025": "syscall", - "syscall.IFT_ARAP": "syscall", - "syscall.IFT_ARCNET": "syscall", - "syscall.IFT_ARCNETPLUS": "syscall", - "syscall.IFT_ASYNC": "syscall", - "syscall.IFT_ATM": "syscall", - "syscall.IFT_ATMDXI": "syscall", - "syscall.IFT_ATMFUNI": "syscall", - "syscall.IFT_ATMIMA": "syscall", - "syscall.IFT_ATMLOGICAL": "syscall", - "syscall.IFT_ATMRADIO": "syscall", - "syscall.IFT_ATMSUBINTERFACE": "syscall", - "syscall.IFT_ATMVCIENDPT": "syscall", - "syscall.IFT_ATMVIRTUAL": "syscall", - "syscall.IFT_BGPPOLICYACCOUNTING": "syscall", - "syscall.IFT_BLUETOOTH": "syscall", - "syscall.IFT_BRIDGE": "syscall", - "syscall.IFT_BSC": "syscall", - "syscall.IFT_CARP": "syscall", - "syscall.IFT_CCTEMUL": "syscall", - "syscall.IFT_CELLULAR": "syscall", - "syscall.IFT_CEPT": "syscall", - "syscall.IFT_CES": "syscall", - "syscall.IFT_CHANNEL": "syscall", - "syscall.IFT_CNR": "syscall", - "syscall.IFT_COFFEE": "syscall", - "syscall.IFT_COMPOSITELINK": "syscall", - "syscall.IFT_DCN": "syscall", - "syscall.IFT_DIGITALPOWERLINE": "syscall", - "syscall.IFT_DIGITALWRAPPEROVERHEADCHANNEL": "syscall", - "syscall.IFT_DLSW": "syscall", - "syscall.IFT_DOCSCABLEDOWNSTREAM": "syscall", - "syscall.IFT_DOCSCABLEMACLAYER": "syscall", - "syscall.IFT_DOCSCABLEUPSTREAM": "syscall", - "syscall.IFT_DOCSCABLEUPSTREAMCHANNEL": "syscall", - "syscall.IFT_DS0": "syscall", - "syscall.IFT_DS0BUNDLE": "syscall", - "syscall.IFT_DS1FDL": "syscall", - "syscall.IFT_DS3": "syscall", - "syscall.IFT_DTM": "syscall", - "syscall.IFT_DUMMY": "syscall", - "syscall.IFT_DVBASILN": "syscall", - "syscall.IFT_DVBASIOUT": "syscall", - "syscall.IFT_DVBRCCDOWNSTREAM": "syscall", - "syscall.IFT_DVBRCCMACLAYER": "syscall", - "syscall.IFT_DVBRCCUPSTREAM": "syscall", - "syscall.IFT_ECONET": "syscall", - "syscall.IFT_ENC": "syscall", - "syscall.IFT_EON": "syscall", - "syscall.IFT_EPLRS": "syscall", - "syscall.IFT_ESCON": "syscall", - "syscall.IFT_ETHER": "syscall", - "syscall.IFT_FAITH": "syscall", - "syscall.IFT_FAST": "syscall", - "syscall.IFT_FASTETHER": "syscall", - "syscall.IFT_FASTETHERFX": "syscall", - "syscall.IFT_FDDI": "syscall", - "syscall.IFT_FIBRECHANNEL": "syscall", - "syscall.IFT_FRAMERELAYINTERCONNECT": "syscall", - "syscall.IFT_FRAMERELAYMPI": "syscall", - "syscall.IFT_FRDLCIENDPT": "syscall", - "syscall.IFT_FRELAY": "syscall", - "syscall.IFT_FRELAYDCE": "syscall", - "syscall.IFT_FRF16MFRBUNDLE": "syscall", - "syscall.IFT_FRFORWARD": "syscall", - "syscall.IFT_G703AT2MB": "syscall", - "syscall.IFT_G703AT64K": "syscall", - "syscall.IFT_GIF": "syscall", - "syscall.IFT_GIGABITETHERNET": "syscall", - "syscall.IFT_GR303IDT": "syscall", - "syscall.IFT_GR303RDT": "syscall", - "syscall.IFT_H323GATEKEEPER": "syscall", - "syscall.IFT_H323PROXY": "syscall", - "syscall.IFT_HDH1822": "syscall", - "syscall.IFT_HDLC": "syscall", - "syscall.IFT_HDSL2": "syscall", - "syscall.IFT_HIPERLAN2": "syscall", - "syscall.IFT_HIPPI": "syscall", - "syscall.IFT_HIPPIINTERFACE": "syscall", - "syscall.IFT_HOSTPAD": "syscall", - "syscall.IFT_HSSI": "syscall", - "syscall.IFT_HY": "syscall", - "syscall.IFT_IBM370PARCHAN": "syscall", - "syscall.IFT_IDSL": "syscall", - "syscall.IFT_IEEE1394": "syscall", - "syscall.IFT_IEEE80211": "syscall", - "syscall.IFT_IEEE80212": "syscall", - "syscall.IFT_IEEE8023ADLAG": "syscall", - "syscall.IFT_IFGSN": "syscall", - "syscall.IFT_IMT": "syscall", - "syscall.IFT_INFINIBAND": "syscall", - "syscall.IFT_INTERLEAVE": "syscall", - "syscall.IFT_IP": "syscall", - "syscall.IFT_IPFORWARD": "syscall", - "syscall.IFT_IPOVERATM": "syscall", - "syscall.IFT_IPOVERCDLC": "syscall", - "syscall.IFT_IPOVERCLAW": "syscall", - "syscall.IFT_IPSWITCH": "syscall", - "syscall.IFT_IPXIP": "syscall", - "syscall.IFT_ISDN": "syscall", - "syscall.IFT_ISDNBASIC": "syscall", - "syscall.IFT_ISDNPRIMARY": "syscall", - "syscall.IFT_ISDNS": "syscall", - "syscall.IFT_ISDNU": "syscall", - "syscall.IFT_ISO88022LLC": "syscall", - "syscall.IFT_ISO88023": "syscall", - "syscall.IFT_ISO88024": "syscall", - "syscall.IFT_ISO88025": "syscall", - "syscall.IFT_ISO88025CRFPINT": "syscall", - "syscall.IFT_ISO88025DTR": "syscall", - "syscall.IFT_ISO88025FIBER": "syscall", - "syscall.IFT_ISO88026": "syscall", - "syscall.IFT_ISUP": "syscall", - "syscall.IFT_L2VLAN": "syscall", - "syscall.IFT_L3IPVLAN": "syscall", - "syscall.IFT_L3IPXVLAN": "syscall", - "syscall.IFT_LAPB": "syscall", - "syscall.IFT_LAPD": "syscall", - "syscall.IFT_LAPF": "syscall", - "syscall.IFT_LINEGROUP": "syscall", - "syscall.IFT_LOCALTALK": "syscall", - "syscall.IFT_LOOP": "syscall", - "syscall.IFT_MEDIAMAILOVERIP": "syscall", - "syscall.IFT_MFSIGLINK": "syscall", - "syscall.IFT_MIOX25": "syscall", - "syscall.IFT_MODEM": "syscall", - "syscall.IFT_MPC": "syscall", - "syscall.IFT_MPLS": "syscall", - "syscall.IFT_MPLSTUNNEL": "syscall", - "syscall.IFT_MSDSL": "syscall", - "syscall.IFT_MVL": "syscall", - "syscall.IFT_MYRINET": "syscall", - "syscall.IFT_NFAS": "syscall", - "syscall.IFT_NSIP": "syscall", - "syscall.IFT_OPTICALCHANNEL": "syscall", - "syscall.IFT_OPTICALTRANSPORT": "syscall", - "syscall.IFT_OTHER": "syscall", - "syscall.IFT_P10": "syscall", - "syscall.IFT_P80": "syscall", - "syscall.IFT_PARA": "syscall", - "syscall.IFT_PDP": "syscall", - "syscall.IFT_PFLOG": "syscall", - "syscall.IFT_PFLOW": "syscall", - "syscall.IFT_PFSYNC": "syscall", - "syscall.IFT_PLC": "syscall", - "syscall.IFT_PON155": "syscall", - "syscall.IFT_PON622": "syscall", - "syscall.IFT_POS": "syscall", - "syscall.IFT_PPP": "syscall", - "syscall.IFT_PPPMULTILINKBUNDLE": "syscall", - "syscall.IFT_PROPATM": "syscall", - "syscall.IFT_PROPBWAP2MP": "syscall", - "syscall.IFT_PROPCNLS": "syscall", - "syscall.IFT_PROPDOCSWIRELESSDOWNSTREAM": "syscall", - "syscall.IFT_PROPDOCSWIRELESSMACLAYER": "syscall", - "syscall.IFT_PROPDOCSWIRELESSUPSTREAM": "syscall", - "syscall.IFT_PROPMUX": "syscall", - "syscall.IFT_PROPVIRTUAL": "syscall", - "syscall.IFT_PROPWIRELESSP2P": "syscall", - "syscall.IFT_PTPSERIAL": "syscall", - "syscall.IFT_PVC": "syscall", - "syscall.IFT_Q2931": "syscall", - "syscall.IFT_QLLC": "syscall", - "syscall.IFT_RADIOMAC": "syscall", - "syscall.IFT_RADSL": "syscall", - "syscall.IFT_REACHDSL": "syscall", - "syscall.IFT_RFC1483": "syscall", - "syscall.IFT_RS232": "syscall", - "syscall.IFT_RSRB": "syscall", - "syscall.IFT_SDLC": "syscall", - "syscall.IFT_SDSL": "syscall", - "syscall.IFT_SHDSL": "syscall", - "syscall.IFT_SIP": "syscall", - "syscall.IFT_SIPSIG": "syscall", - "syscall.IFT_SIPTG": "syscall", - "syscall.IFT_SLIP": "syscall", - "syscall.IFT_SMDSDXI": "syscall", - "syscall.IFT_SMDSICIP": "syscall", - "syscall.IFT_SONET": "syscall", - "syscall.IFT_SONETOVERHEADCHANNEL": "syscall", - "syscall.IFT_SONETPATH": "syscall", - "syscall.IFT_SONETVT": "syscall", - "syscall.IFT_SRP": "syscall", - "syscall.IFT_SS7SIGLINK": "syscall", - "syscall.IFT_STACKTOSTACK": "syscall", - "syscall.IFT_STARLAN": "syscall", - "syscall.IFT_STF": "syscall", - "syscall.IFT_T1": "syscall", - "syscall.IFT_TDLC": "syscall", - "syscall.IFT_TELINK": "syscall", - "syscall.IFT_TERMPAD": "syscall", - "syscall.IFT_TR008": "syscall", - "syscall.IFT_TRANSPHDLC": "syscall", - "syscall.IFT_TUNNEL": "syscall", - "syscall.IFT_ULTRA": "syscall", - "syscall.IFT_USB": "syscall", - "syscall.IFT_V11": "syscall", - "syscall.IFT_V35": "syscall", - "syscall.IFT_V36": "syscall", - "syscall.IFT_V37": "syscall", - "syscall.IFT_VDSL": "syscall", - "syscall.IFT_VIRTUALIPADDRESS": "syscall", - "syscall.IFT_VIRTUALTG": "syscall", - "syscall.IFT_VOICEDID": "syscall", - "syscall.IFT_VOICEEM": "syscall", - "syscall.IFT_VOICEEMFGD": "syscall", - "syscall.IFT_VOICEENCAP": "syscall", - "syscall.IFT_VOICEFGDEANA": "syscall", - "syscall.IFT_VOICEFXO": "syscall", - "syscall.IFT_VOICEFXS": "syscall", - "syscall.IFT_VOICEOVERATM": "syscall", - "syscall.IFT_VOICEOVERCABLE": "syscall", - "syscall.IFT_VOICEOVERFRAMERELAY": "syscall", - "syscall.IFT_VOICEOVERIP": "syscall", - "syscall.IFT_X213": "syscall", - "syscall.IFT_X25": "syscall", - "syscall.IFT_X25DDN": "syscall", - "syscall.IFT_X25HUNTGROUP": "syscall", - "syscall.IFT_X25MLP": "syscall", - "syscall.IFT_X25PLE": "syscall", - "syscall.IFT_XETHER": "syscall", - "syscall.IGNBRK": "syscall", - "syscall.IGNCR": "syscall", - "syscall.IGNORE": "syscall", - "syscall.IGNPAR": "syscall", - "syscall.IMAXBEL": "syscall", - "syscall.INFINITE": "syscall", - "syscall.INLCR": "syscall", - "syscall.INPCK": "syscall", - "syscall.INVALID_FILE_ATTRIBUTES": "syscall", - "syscall.IN_ACCESS": "syscall", - "syscall.IN_ALL_EVENTS": "syscall", - "syscall.IN_ATTRIB": "syscall", - "syscall.IN_CLASSA_HOST": "syscall", - "syscall.IN_CLASSA_MAX": "syscall", - "syscall.IN_CLASSA_NET": "syscall", - "syscall.IN_CLASSA_NSHIFT": "syscall", - "syscall.IN_CLASSB_HOST": "syscall", - "syscall.IN_CLASSB_MAX": "syscall", - "syscall.IN_CLASSB_NET": "syscall", - "syscall.IN_CLASSB_NSHIFT": "syscall", - "syscall.IN_CLASSC_HOST": "syscall", - "syscall.IN_CLASSC_NET": "syscall", - "syscall.IN_CLASSC_NSHIFT": "syscall", - "syscall.IN_CLASSD_HOST": "syscall", - "syscall.IN_CLASSD_NET": "syscall", - "syscall.IN_CLASSD_NSHIFT": "syscall", - "syscall.IN_CLOEXEC": "syscall", - "syscall.IN_CLOSE": "syscall", - "syscall.IN_CLOSE_NOWRITE": "syscall", - "syscall.IN_CLOSE_WRITE": "syscall", - "syscall.IN_CREATE": "syscall", - "syscall.IN_DELETE": "syscall", - "syscall.IN_DELETE_SELF": "syscall", - "syscall.IN_DONT_FOLLOW": "syscall", - "syscall.IN_EXCL_UNLINK": "syscall", - "syscall.IN_IGNORED": "syscall", - "syscall.IN_ISDIR": "syscall", - "syscall.IN_LINKLOCALNETNUM": "syscall", - "syscall.IN_LOOPBACKNET": "syscall", - "syscall.IN_MASK_ADD": "syscall", - "syscall.IN_MODIFY": "syscall", - "syscall.IN_MOVE": "syscall", - "syscall.IN_MOVED_FROM": "syscall", - "syscall.IN_MOVED_TO": "syscall", - "syscall.IN_MOVE_SELF": "syscall", - "syscall.IN_NONBLOCK": "syscall", - "syscall.IN_ONESHOT": "syscall", - "syscall.IN_ONLYDIR": "syscall", - "syscall.IN_OPEN": "syscall", - "syscall.IN_Q_OVERFLOW": "syscall", - "syscall.IN_RFC3021_HOST": "syscall", - "syscall.IN_RFC3021_MASK": "syscall", - "syscall.IN_RFC3021_NET": "syscall", - "syscall.IN_RFC3021_NSHIFT": "syscall", - "syscall.IN_UNMOUNT": "syscall", - "syscall.IOC_IN": "syscall", - "syscall.IOC_INOUT": "syscall", - "syscall.IOC_OUT": "syscall", - "syscall.IOC_VENDOR": "syscall", - "syscall.IOC_WS2": "syscall", - "syscall.IO_REPARSE_TAG_SYMLINK": "syscall", - "syscall.IPMreq": "syscall", - "syscall.IPMreqn": "syscall", - "syscall.IPPROTO_3PC": "syscall", - "syscall.IPPROTO_ADFS": "syscall", - "syscall.IPPROTO_AH": "syscall", - "syscall.IPPROTO_AHIP": "syscall", - "syscall.IPPROTO_APES": "syscall", - "syscall.IPPROTO_ARGUS": "syscall", - "syscall.IPPROTO_AX25": "syscall", - "syscall.IPPROTO_BHA": "syscall", - "syscall.IPPROTO_BLT": "syscall", - "syscall.IPPROTO_BRSATMON": "syscall", - "syscall.IPPROTO_CARP": "syscall", - "syscall.IPPROTO_CFTP": "syscall", - "syscall.IPPROTO_CHAOS": "syscall", - "syscall.IPPROTO_CMTP": "syscall", - "syscall.IPPROTO_COMP": "syscall", - "syscall.IPPROTO_CPHB": "syscall", - "syscall.IPPROTO_CPNX": "syscall", - "syscall.IPPROTO_DCCP": "syscall", - "syscall.IPPROTO_DDP": "syscall", - "syscall.IPPROTO_DGP": "syscall", - "syscall.IPPROTO_DIVERT": "syscall", - "syscall.IPPROTO_DIVERT_INIT": "syscall", - "syscall.IPPROTO_DIVERT_RESP": "syscall", - "syscall.IPPROTO_DONE": "syscall", - "syscall.IPPROTO_DSTOPTS": "syscall", - "syscall.IPPROTO_EGP": "syscall", - "syscall.IPPROTO_EMCON": "syscall", - "syscall.IPPROTO_ENCAP": "syscall", - "syscall.IPPROTO_EON": "syscall", - "syscall.IPPROTO_ESP": "syscall", - "syscall.IPPROTO_ETHERIP": "syscall", - "syscall.IPPROTO_FRAGMENT": "syscall", - "syscall.IPPROTO_GGP": "syscall", - "syscall.IPPROTO_GMTP": "syscall", - "syscall.IPPROTO_GRE": "syscall", - "syscall.IPPROTO_HELLO": "syscall", - "syscall.IPPROTO_HMP": "syscall", - "syscall.IPPROTO_HOPOPTS": "syscall", - "syscall.IPPROTO_ICMP": "syscall", - "syscall.IPPROTO_ICMPV6": "syscall", - "syscall.IPPROTO_IDP": "syscall", - "syscall.IPPROTO_IDPR": "syscall", - "syscall.IPPROTO_IDRP": "syscall", - "syscall.IPPROTO_IGMP": "syscall", - "syscall.IPPROTO_IGP": "syscall", - "syscall.IPPROTO_IGRP": "syscall", - "syscall.IPPROTO_IL": "syscall", - "syscall.IPPROTO_INLSP": "syscall", - "syscall.IPPROTO_INP": "syscall", - "syscall.IPPROTO_IP": "syscall", - "syscall.IPPROTO_IPCOMP": "syscall", - "syscall.IPPROTO_IPCV": "syscall", - "syscall.IPPROTO_IPEIP": "syscall", - "syscall.IPPROTO_IPIP": "syscall", - "syscall.IPPROTO_IPPC": "syscall", - "syscall.IPPROTO_IPV4": "syscall", - "syscall.IPPROTO_IPV6": "syscall", - "syscall.IPPROTO_IPV6_ICMP": "syscall", - "syscall.IPPROTO_IRTP": "syscall", - "syscall.IPPROTO_KRYPTOLAN": "syscall", - "syscall.IPPROTO_LARP": "syscall", - "syscall.IPPROTO_LEAF1": "syscall", - "syscall.IPPROTO_LEAF2": "syscall", - "syscall.IPPROTO_MAX": "syscall", - "syscall.IPPROTO_MAXID": "syscall", - "syscall.IPPROTO_MEAS": "syscall", - "syscall.IPPROTO_MH": "syscall", - "syscall.IPPROTO_MHRP": "syscall", - "syscall.IPPROTO_MICP": "syscall", - "syscall.IPPROTO_MOBILE": "syscall", - "syscall.IPPROTO_MPLS": "syscall", - "syscall.IPPROTO_MTP": "syscall", - "syscall.IPPROTO_MUX": "syscall", - "syscall.IPPROTO_ND": "syscall", - "syscall.IPPROTO_NHRP": "syscall", - "syscall.IPPROTO_NONE": "syscall", - "syscall.IPPROTO_NSP": "syscall", - "syscall.IPPROTO_NVPII": "syscall", - "syscall.IPPROTO_OLD_DIVERT": "syscall", - "syscall.IPPROTO_OSPFIGP": "syscall", - "syscall.IPPROTO_PFSYNC": "syscall", - "syscall.IPPROTO_PGM": "syscall", - "syscall.IPPROTO_PIGP": "syscall", - "syscall.IPPROTO_PIM": "syscall", - "syscall.IPPROTO_PRM": "syscall", - "syscall.IPPROTO_PUP": "syscall", - "syscall.IPPROTO_PVP": "syscall", - "syscall.IPPROTO_RAW": "syscall", - "syscall.IPPROTO_RCCMON": "syscall", - "syscall.IPPROTO_RDP": "syscall", - "syscall.IPPROTO_ROUTING": "syscall", - "syscall.IPPROTO_RSVP": "syscall", - "syscall.IPPROTO_RVD": "syscall", - "syscall.IPPROTO_SATEXPAK": "syscall", - "syscall.IPPROTO_SATMON": "syscall", - "syscall.IPPROTO_SCCSP": "syscall", - "syscall.IPPROTO_SCTP": "syscall", - "syscall.IPPROTO_SDRP": "syscall", - "syscall.IPPROTO_SEND": "syscall", - "syscall.IPPROTO_SEP": "syscall", - "syscall.IPPROTO_SKIP": "syscall", - "syscall.IPPROTO_SPACER": "syscall", - "syscall.IPPROTO_SRPC": "syscall", - "syscall.IPPROTO_ST": "syscall", - "syscall.IPPROTO_SVMTP": "syscall", - "syscall.IPPROTO_SWIPE": "syscall", - "syscall.IPPROTO_TCF": "syscall", - "syscall.IPPROTO_TCP": "syscall", - "syscall.IPPROTO_TLSP": "syscall", - "syscall.IPPROTO_TP": "syscall", - "syscall.IPPROTO_TPXX": "syscall", - "syscall.IPPROTO_TRUNK1": "syscall", - "syscall.IPPROTO_TRUNK2": "syscall", - "syscall.IPPROTO_TTP": "syscall", - "syscall.IPPROTO_UDP": "syscall", - "syscall.IPPROTO_UDPLITE": "syscall", - "syscall.IPPROTO_VINES": "syscall", - "syscall.IPPROTO_VISA": "syscall", - "syscall.IPPROTO_VMTP": "syscall", - "syscall.IPPROTO_VRRP": "syscall", - "syscall.IPPROTO_WBEXPAK": "syscall", - "syscall.IPPROTO_WBMON": "syscall", - "syscall.IPPROTO_WSN": "syscall", - "syscall.IPPROTO_XNET": "syscall", - "syscall.IPPROTO_XTP": "syscall", - "syscall.IPV6_2292DSTOPTS": "syscall", - "syscall.IPV6_2292HOPLIMIT": "syscall", - "syscall.IPV6_2292HOPOPTS": "syscall", - "syscall.IPV6_2292NEXTHOP": "syscall", - "syscall.IPV6_2292PKTINFO": "syscall", - "syscall.IPV6_2292PKTOPTIONS": "syscall", - "syscall.IPV6_2292RTHDR": "syscall", - "syscall.IPV6_ADDRFORM": "syscall", - "syscall.IPV6_ADD_MEMBERSHIP": "syscall", - "syscall.IPV6_AUTHHDR": "syscall", - "syscall.IPV6_AUTH_LEVEL": "syscall", - "syscall.IPV6_AUTOFLOWLABEL": "syscall", - "syscall.IPV6_BINDANY": "syscall", - "syscall.IPV6_BINDV6ONLY": "syscall", - "syscall.IPV6_BOUND_IF": "syscall", - "syscall.IPV6_CHECKSUM": "syscall", - "syscall.IPV6_DEFAULT_MULTICAST_HOPS": "syscall", - "syscall.IPV6_DEFAULT_MULTICAST_LOOP": "syscall", - "syscall.IPV6_DEFHLIM": "syscall", - "syscall.IPV6_DONTFRAG": "syscall", - "syscall.IPV6_DROP_MEMBERSHIP": "syscall", - "syscall.IPV6_DSTOPTS": "syscall", - "syscall.IPV6_ESP_NETWORK_LEVEL": "syscall", - "syscall.IPV6_ESP_TRANS_LEVEL": "syscall", - "syscall.IPV6_FAITH": "syscall", - "syscall.IPV6_FLOWINFO_MASK": "syscall", - "syscall.IPV6_FLOWLABEL_MASK": "syscall", - "syscall.IPV6_FRAGTTL": "syscall", - "syscall.IPV6_FW_ADD": "syscall", - "syscall.IPV6_FW_DEL": "syscall", - "syscall.IPV6_FW_FLUSH": "syscall", - "syscall.IPV6_FW_GET": "syscall", - "syscall.IPV6_FW_ZERO": "syscall", - "syscall.IPV6_HLIMDEC": "syscall", - "syscall.IPV6_HOPLIMIT": "syscall", - "syscall.IPV6_HOPOPTS": "syscall", - "syscall.IPV6_IPCOMP_LEVEL": "syscall", - "syscall.IPV6_IPSEC_POLICY": "syscall", - "syscall.IPV6_JOIN_ANYCAST": "syscall", - "syscall.IPV6_JOIN_GROUP": "syscall", - "syscall.IPV6_LEAVE_ANYCAST": "syscall", - "syscall.IPV6_LEAVE_GROUP": "syscall", - "syscall.IPV6_MAXHLIM": "syscall", - "syscall.IPV6_MAXOPTHDR": "syscall", - "syscall.IPV6_MAXPACKET": "syscall", - "syscall.IPV6_MAX_GROUP_SRC_FILTER": "syscall", - "syscall.IPV6_MAX_MEMBERSHIPS": "syscall", - "syscall.IPV6_MAX_SOCK_SRC_FILTER": "syscall", - "syscall.IPV6_MIN_MEMBERSHIPS": "syscall", - "syscall.IPV6_MMTU": "syscall", - "syscall.IPV6_MSFILTER": "syscall", - "syscall.IPV6_MTU": "syscall", - "syscall.IPV6_MTU_DISCOVER": "syscall", - "syscall.IPV6_MULTICAST_HOPS": "syscall", - "syscall.IPV6_MULTICAST_IF": "syscall", - "syscall.IPV6_MULTICAST_LOOP": "syscall", - "syscall.IPV6_NEXTHOP": "syscall", - "syscall.IPV6_OPTIONS": "syscall", - "syscall.IPV6_PATHMTU": "syscall", - "syscall.IPV6_PIPEX": "syscall", - "syscall.IPV6_PKTINFO": "syscall", - "syscall.IPV6_PMTUDISC_DO": "syscall", - "syscall.IPV6_PMTUDISC_DONT": "syscall", - "syscall.IPV6_PMTUDISC_PROBE": "syscall", - "syscall.IPV6_PMTUDISC_WANT": "syscall", - "syscall.IPV6_PORTRANGE": "syscall", - "syscall.IPV6_PORTRANGE_DEFAULT": "syscall", - "syscall.IPV6_PORTRANGE_HIGH": "syscall", - "syscall.IPV6_PORTRANGE_LOW": "syscall", - "syscall.IPV6_PREFER_TEMPADDR": "syscall", - "syscall.IPV6_RECVDSTOPTS": "syscall", - "syscall.IPV6_RECVDSTPORT": "syscall", - "syscall.IPV6_RECVERR": "syscall", - "syscall.IPV6_RECVHOPLIMIT": "syscall", - "syscall.IPV6_RECVHOPOPTS": "syscall", - "syscall.IPV6_RECVPATHMTU": "syscall", - "syscall.IPV6_RECVPKTINFO": "syscall", - "syscall.IPV6_RECVRTHDR": "syscall", - "syscall.IPV6_RECVTCLASS": "syscall", - "syscall.IPV6_ROUTER_ALERT": "syscall", - "syscall.IPV6_RTABLE": "syscall", - "syscall.IPV6_RTHDR": "syscall", - "syscall.IPV6_RTHDRDSTOPTS": "syscall", - "syscall.IPV6_RTHDR_LOOSE": "syscall", - "syscall.IPV6_RTHDR_STRICT": "syscall", - "syscall.IPV6_RTHDR_TYPE_0": "syscall", - "syscall.IPV6_RXDSTOPTS": "syscall", - "syscall.IPV6_RXHOPOPTS": "syscall", - "syscall.IPV6_SOCKOPT_RESERVED1": "syscall", - "syscall.IPV6_TCLASS": "syscall", - "syscall.IPV6_UNICAST_HOPS": "syscall", - "syscall.IPV6_USE_MIN_MTU": "syscall", - "syscall.IPV6_V6ONLY": "syscall", - "syscall.IPV6_VERSION": "syscall", - "syscall.IPV6_VERSION_MASK": "syscall", - "syscall.IPV6_XFRM_POLICY": "syscall", - "syscall.IP_ADD_MEMBERSHIP": "syscall", - "syscall.IP_ADD_SOURCE_MEMBERSHIP": "syscall", - "syscall.IP_AUTH_LEVEL": "syscall", - "syscall.IP_BINDANY": "syscall", - "syscall.IP_BLOCK_SOURCE": "syscall", - "syscall.IP_BOUND_IF": "syscall", - "syscall.IP_DEFAULT_MULTICAST_LOOP": "syscall", - "syscall.IP_DEFAULT_MULTICAST_TTL": "syscall", - "syscall.IP_DF": "syscall", - "syscall.IP_DIVERTFL": "syscall", - "syscall.IP_DONTFRAG": "syscall", - "syscall.IP_DROP_MEMBERSHIP": "syscall", - "syscall.IP_DROP_SOURCE_MEMBERSHIP": "syscall", - "syscall.IP_DUMMYNET3": "syscall", - "syscall.IP_DUMMYNET_CONFIGURE": "syscall", - "syscall.IP_DUMMYNET_DEL": "syscall", - "syscall.IP_DUMMYNET_FLUSH": "syscall", - "syscall.IP_DUMMYNET_GET": "syscall", - "syscall.IP_EF": "syscall", - "syscall.IP_ERRORMTU": "syscall", - "syscall.IP_ESP_NETWORK_LEVEL": "syscall", - "syscall.IP_ESP_TRANS_LEVEL": "syscall", - "syscall.IP_FAITH": "syscall", - "syscall.IP_FREEBIND": "syscall", - "syscall.IP_FW3": "syscall", - "syscall.IP_FW_ADD": "syscall", - "syscall.IP_FW_DEL": "syscall", - "syscall.IP_FW_FLUSH": "syscall", - "syscall.IP_FW_GET": "syscall", - "syscall.IP_FW_NAT_CFG": "syscall", - "syscall.IP_FW_NAT_DEL": "syscall", - "syscall.IP_FW_NAT_GET_CONFIG": "syscall", - "syscall.IP_FW_NAT_GET_LOG": "syscall", - "syscall.IP_FW_RESETLOG": "syscall", - "syscall.IP_FW_TABLE_ADD": "syscall", - "syscall.IP_FW_TABLE_DEL": "syscall", - "syscall.IP_FW_TABLE_FLUSH": "syscall", - "syscall.IP_FW_TABLE_GETSIZE": "syscall", - "syscall.IP_FW_TABLE_LIST": "syscall", - "syscall.IP_FW_ZERO": "syscall", - "syscall.IP_HDRINCL": "syscall", - "syscall.IP_IPCOMP_LEVEL": "syscall", - "syscall.IP_IPSECFLOWINFO": "syscall", - "syscall.IP_IPSEC_LOCAL_AUTH": "syscall", - "syscall.IP_IPSEC_LOCAL_CRED": "syscall", - "syscall.IP_IPSEC_LOCAL_ID": "syscall", - "syscall.IP_IPSEC_POLICY": "syscall", - "syscall.IP_IPSEC_REMOTE_AUTH": "syscall", - "syscall.IP_IPSEC_REMOTE_CRED": "syscall", - "syscall.IP_IPSEC_REMOTE_ID": "syscall", - "syscall.IP_MAXPACKET": "syscall", - "syscall.IP_MAX_GROUP_SRC_FILTER": "syscall", - "syscall.IP_MAX_MEMBERSHIPS": "syscall", - "syscall.IP_MAX_SOCK_MUTE_FILTER": "syscall", - "syscall.IP_MAX_SOCK_SRC_FILTER": "syscall", - "syscall.IP_MAX_SOURCE_FILTER": "syscall", - "syscall.IP_MF": "syscall", - "syscall.IP_MINFRAGSIZE": "syscall", - "syscall.IP_MINTTL": "syscall", - "syscall.IP_MIN_MEMBERSHIPS": "syscall", - "syscall.IP_MSFILTER": "syscall", - "syscall.IP_MSS": "syscall", - "syscall.IP_MTU": "syscall", - "syscall.IP_MTU_DISCOVER": "syscall", - "syscall.IP_MULTICAST_IF": "syscall", - "syscall.IP_MULTICAST_IFINDEX": "syscall", - "syscall.IP_MULTICAST_LOOP": "syscall", - "syscall.IP_MULTICAST_TTL": "syscall", - "syscall.IP_MULTICAST_VIF": "syscall", - "syscall.IP_NAT__XXX": "syscall", - "syscall.IP_OFFMASK": "syscall", - "syscall.IP_OLD_FW_ADD": "syscall", - "syscall.IP_OLD_FW_DEL": "syscall", - "syscall.IP_OLD_FW_FLUSH": "syscall", - "syscall.IP_OLD_FW_GET": "syscall", - "syscall.IP_OLD_FW_RESETLOG": "syscall", - "syscall.IP_OLD_FW_ZERO": "syscall", - "syscall.IP_ONESBCAST": "syscall", - "syscall.IP_OPTIONS": "syscall", - "syscall.IP_ORIGDSTADDR": "syscall", - "syscall.IP_PASSSEC": "syscall", - "syscall.IP_PIPEX": "syscall", - "syscall.IP_PKTINFO": "syscall", - "syscall.IP_PKTOPTIONS": "syscall", - "syscall.IP_PMTUDISC": "syscall", - "syscall.IP_PMTUDISC_DO": "syscall", - "syscall.IP_PMTUDISC_DONT": "syscall", - "syscall.IP_PMTUDISC_PROBE": "syscall", - "syscall.IP_PMTUDISC_WANT": "syscall", - "syscall.IP_PORTRANGE": "syscall", - "syscall.IP_PORTRANGE_DEFAULT": "syscall", - "syscall.IP_PORTRANGE_HIGH": "syscall", - "syscall.IP_PORTRANGE_LOW": "syscall", - "syscall.IP_RECVDSTADDR": "syscall", - "syscall.IP_RECVDSTPORT": "syscall", - "syscall.IP_RECVERR": "syscall", - "syscall.IP_RECVIF": "syscall", - "syscall.IP_RECVOPTS": "syscall", - "syscall.IP_RECVORIGDSTADDR": "syscall", - "syscall.IP_RECVPKTINFO": "syscall", - "syscall.IP_RECVRETOPTS": "syscall", - "syscall.IP_RECVRTABLE": "syscall", - "syscall.IP_RECVTOS": "syscall", - "syscall.IP_RECVTTL": "syscall", - "syscall.IP_RETOPTS": "syscall", - "syscall.IP_RF": "syscall", - "syscall.IP_ROUTER_ALERT": "syscall", - "syscall.IP_RSVP_OFF": "syscall", - "syscall.IP_RSVP_ON": "syscall", - "syscall.IP_RSVP_VIF_OFF": "syscall", - "syscall.IP_RSVP_VIF_ON": "syscall", - "syscall.IP_RTABLE": "syscall", - "syscall.IP_SENDSRCADDR": "syscall", - "syscall.IP_STRIPHDR": "syscall", - "syscall.IP_TOS": "syscall", - "syscall.IP_TRAFFIC_MGT_BACKGROUND": "syscall", - "syscall.IP_TRANSPARENT": "syscall", - "syscall.IP_TTL": "syscall", - "syscall.IP_UNBLOCK_SOURCE": "syscall", - "syscall.IP_XFRM_POLICY": "syscall", - "syscall.IPv6MTUInfo": "syscall", - "syscall.IPv6Mreq": "syscall", - "syscall.ISIG": "syscall", - "syscall.ISTRIP": "syscall", - "syscall.IUCLC": "syscall", - "syscall.IUTF8": "syscall", - "syscall.IXANY": "syscall", - "syscall.IXOFF": "syscall", - "syscall.IXON": "syscall", - "syscall.IfAddrmsg": "syscall", - "syscall.IfAnnounceMsghdr": "syscall", - "syscall.IfData": "syscall", - "syscall.IfInfomsg": "syscall", - "syscall.IfMsghdr": "syscall", - "syscall.IfaMsghdr": "syscall", - "syscall.IfmaMsghdr": "syscall", - "syscall.IfmaMsghdr2": "syscall", - "syscall.ImplementsGetwd": "syscall", - "syscall.Inet4Pktinfo": "syscall", - "syscall.Inet6Pktinfo": "syscall", - "syscall.InotifyAddWatch": "syscall", - "syscall.InotifyEvent": "syscall", - "syscall.InotifyInit": "syscall", - "syscall.InotifyInit1": "syscall", - "syscall.InotifyRmWatch": "syscall", - "syscall.InterfaceAddrMessage": "syscall", - "syscall.InterfaceAnnounceMessage": "syscall", - "syscall.InterfaceInfo": "syscall", - "syscall.InterfaceMessage": "syscall", - "syscall.InterfaceMulticastAddrMessage": "syscall", - "syscall.InvalidHandle": "syscall", - "syscall.Ioperm": "syscall", - "syscall.Iopl": "syscall", - "syscall.Iovec": "syscall", - "syscall.IpAdapterInfo": "syscall", - "syscall.IpAddrString": "syscall", - "syscall.IpAddressString": "syscall", - "syscall.IpMaskString": "syscall", - "syscall.Issetugid": "syscall", - "syscall.KEY_ALL_ACCESS": "syscall", - "syscall.KEY_CREATE_LINK": "syscall", - "syscall.KEY_CREATE_SUB_KEY": "syscall", - "syscall.KEY_ENUMERATE_SUB_KEYS": "syscall", - "syscall.KEY_EXECUTE": "syscall", - "syscall.KEY_NOTIFY": "syscall", - "syscall.KEY_QUERY_VALUE": "syscall", - "syscall.KEY_READ": "syscall", - "syscall.KEY_SET_VALUE": "syscall", - "syscall.KEY_WOW64_32KEY": "syscall", - "syscall.KEY_WOW64_64KEY": "syscall", - "syscall.KEY_WRITE": "syscall", - "syscall.Kevent": "syscall", - "syscall.Kevent_t": "syscall", - "syscall.Kill": "syscall", - "syscall.Klogctl": "syscall", - "syscall.Kqueue": "syscall", - "syscall.LANG_ENGLISH": "syscall", - "syscall.LAYERED_PROTOCOL": "syscall", - "syscall.LCNT_OVERLOAD_FLUSH": "syscall", - "syscall.LINUX_REBOOT_CMD_CAD_OFF": "syscall", - "syscall.LINUX_REBOOT_CMD_CAD_ON": "syscall", - "syscall.LINUX_REBOOT_CMD_HALT": "syscall", - "syscall.LINUX_REBOOT_CMD_KEXEC": "syscall", - "syscall.LINUX_REBOOT_CMD_POWER_OFF": "syscall", - "syscall.LINUX_REBOOT_CMD_RESTART": "syscall", - "syscall.LINUX_REBOOT_CMD_RESTART2": "syscall", - "syscall.LINUX_REBOOT_CMD_SW_SUSPEND": "syscall", - "syscall.LINUX_REBOOT_MAGIC1": "syscall", - "syscall.LINUX_REBOOT_MAGIC2": "syscall", - "syscall.LOCK_EX": "syscall", - "syscall.LOCK_NB": "syscall", - "syscall.LOCK_SH": "syscall", - "syscall.LOCK_UN": "syscall", - "syscall.LazyDLL": "syscall", - "syscall.LazyProc": "syscall", - "syscall.Lchown": "syscall", - "syscall.Linger": "syscall", - "syscall.Link": "syscall", - "syscall.Listen": "syscall", - "syscall.Listxattr": "syscall", - "syscall.LoadCancelIoEx": "syscall", - "syscall.LoadConnectEx": "syscall", - "syscall.LoadCreateSymbolicLink": "syscall", - "syscall.LoadDLL": "syscall", - "syscall.LoadGetAddrInfo": "syscall", - "syscall.LoadLibrary": "syscall", - "syscall.LoadSetFileCompletionNotificationModes": "syscall", - "syscall.LocalFree": "syscall", - "syscall.Log2phys_t": "syscall", - "syscall.LookupAccountName": "syscall", - "syscall.LookupAccountSid": "syscall", - "syscall.LookupSID": "syscall", - "syscall.LsfJump": "syscall", - "syscall.LsfSocket": "syscall", - "syscall.LsfStmt": "syscall", - "syscall.Lstat": "syscall", - "syscall.MADV_AUTOSYNC": "syscall", - "syscall.MADV_CAN_REUSE": "syscall", - "syscall.MADV_CORE": "syscall", - "syscall.MADV_DOFORK": "syscall", - "syscall.MADV_DONTFORK": "syscall", - "syscall.MADV_DONTNEED": "syscall", - "syscall.MADV_FREE": "syscall", - "syscall.MADV_FREE_REUSABLE": "syscall", - "syscall.MADV_FREE_REUSE": "syscall", - "syscall.MADV_HUGEPAGE": "syscall", - "syscall.MADV_HWPOISON": "syscall", - "syscall.MADV_MERGEABLE": "syscall", - "syscall.MADV_NOCORE": "syscall", - "syscall.MADV_NOHUGEPAGE": "syscall", - "syscall.MADV_NORMAL": "syscall", - "syscall.MADV_NOSYNC": "syscall", - "syscall.MADV_PROTECT": "syscall", - "syscall.MADV_RANDOM": "syscall", - "syscall.MADV_REMOVE": "syscall", - "syscall.MADV_SEQUENTIAL": "syscall", - "syscall.MADV_SPACEAVAIL": "syscall", - "syscall.MADV_UNMERGEABLE": "syscall", - "syscall.MADV_WILLNEED": "syscall", - "syscall.MADV_ZERO_WIRED_PAGES": "syscall", - "syscall.MAP_32BIT": "syscall", - "syscall.MAP_ALIGNED_SUPER": "syscall", - "syscall.MAP_ALIGNMENT_16MB": "syscall", - "syscall.MAP_ALIGNMENT_1TB": "syscall", - "syscall.MAP_ALIGNMENT_256TB": "syscall", - "syscall.MAP_ALIGNMENT_4GB": "syscall", - "syscall.MAP_ALIGNMENT_64KB": "syscall", - "syscall.MAP_ALIGNMENT_64PB": "syscall", - "syscall.MAP_ALIGNMENT_MASK": "syscall", - "syscall.MAP_ALIGNMENT_SHIFT": "syscall", - "syscall.MAP_ANON": "syscall", - "syscall.MAP_ANONYMOUS": "syscall", - "syscall.MAP_COPY": "syscall", - "syscall.MAP_DENYWRITE": "syscall", - "syscall.MAP_EXECUTABLE": "syscall", - "syscall.MAP_FILE": "syscall", - "syscall.MAP_FIXED": "syscall", - "syscall.MAP_FLAGMASK": "syscall", - "syscall.MAP_GROWSDOWN": "syscall", - "syscall.MAP_HASSEMAPHORE": "syscall", - "syscall.MAP_HUGETLB": "syscall", - "syscall.MAP_INHERIT": "syscall", - "syscall.MAP_INHERIT_COPY": "syscall", - "syscall.MAP_INHERIT_DEFAULT": "syscall", - "syscall.MAP_INHERIT_DONATE_COPY": "syscall", - "syscall.MAP_INHERIT_NONE": "syscall", - "syscall.MAP_INHERIT_SHARE": "syscall", - "syscall.MAP_JIT": "syscall", - "syscall.MAP_LOCKED": "syscall", - "syscall.MAP_NOCACHE": "syscall", - "syscall.MAP_NOCORE": "syscall", - "syscall.MAP_NOEXTEND": "syscall", - "syscall.MAP_NONBLOCK": "syscall", - "syscall.MAP_NORESERVE": "syscall", - "syscall.MAP_NOSYNC": "syscall", - "syscall.MAP_POPULATE": "syscall", - "syscall.MAP_PREFAULT_READ": "syscall", - "syscall.MAP_PRIVATE": "syscall", - "syscall.MAP_RENAME": "syscall", - "syscall.MAP_RESERVED0080": "syscall", - "syscall.MAP_RESERVED0100": "syscall", - "syscall.MAP_SHARED": "syscall", - "syscall.MAP_STACK": "syscall", - "syscall.MAP_TRYFIXED": "syscall", - "syscall.MAP_TYPE": "syscall", - "syscall.MAP_WIRED": "syscall", - "syscall.MAXIMUM_REPARSE_DATA_BUFFER_SIZE": "syscall", - "syscall.MAXLEN_IFDESCR": "syscall", - "syscall.MAXLEN_PHYSADDR": "syscall", - "syscall.MAX_ADAPTER_ADDRESS_LENGTH": "syscall", - "syscall.MAX_ADAPTER_DESCRIPTION_LENGTH": "syscall", - "syscall.MAX_ADAPTER_NAME_LENGTH": "syscall", - "syscall.MAX_COMPUTERNAME_LENGTH": "syscall", - "syscall.MAX_INTERFACE_NAME_LEN": "syscall", - "syscall.MAX_LONG_PATH": "syscall", - "syscall.MAX_PATH": "syscall", - "syscall.MAX_PROTOCOL_CHAIN": "syscall", - "syscall.MCL_CURRENT": "syscall", - "syscall.MCL_FUTURE": "syscall", - "syscall.MNT_DETACH": "syscall", - "syscall.MNT_EXPIRE": "syscall", - "syscall.MNT_FORCE": "syscall", - "syscall.MSG_BCAST": "syscall", - "syscall.MSG_CMSG_CLOEXEC": "syscall", - "syscall.MSG_COMPAT": "syscall", - "syscall.MSG_CONFIRM": "syscall", - "syscall.MSG_CONTROLMBUF": "syscall", - "syscall.MSG_CTRUNC": "syscall", - "syscall.MSG_DONTROUTE": "syscall", - "syscall.MSG_DONTWAIT": "syscall", - "syscall.MSG_EOF": "syscall", - "syscall.MSG_EOR": "syscall", - "syscall.MSG_ERRQUEUE": "syscall", - "syscall.MSG_FASTOPEN": "syscall", - "syscall.MSG_FIN": "syscall", - "syscall.MSG_FLUSH": "syscall", - "syscall.MSG_HAVEMORE": "syscall", - "syscall.MSG_HOLD": "syscall", - "syscall.MSG_IOVUSRSPACE": "syscall", - "syscall.MSG_LENUSRSPACE": "syscall", - "syscall.MSG_MCAST": "syscall", - "syscall.MSG_MORE": "syscall", - "syscall.MSG_NAMEMBUF": "syscall", - "syscall.MSG_NBIO": "syscall", - "syscall.MSG_NEEDSA": "syscall", - "syscall.MSG_NOSIGNAL": "syscall", - "syscall.MSG_NOTIFICATION": "syscall", - "syscall.MSG_OOB": "syscall", - "syscall.MSG_PEEK": "syscall", - "syscall.MSG_PROXY": "syscall", - "syscall.MSG_RCVMORE": "syscall", - "syscall.MSG_RST": "syscall", - "syscall.MSG_SEND": "syscall", - "syscall.MSG_SYN": "syscall", - "syscall.MSG_TRUNC": "syscall", - "syscall.MSG_TRYHARD": "syscall", - "syscall.MSG_USERFLAGS": "syscall", - "syscall.MSG_WAITALL": "syscall", - "syscall.MSG_WAITFORONE": "syscall", - "syscall.MSG_WAITSTREAM": "syscall", - "syscall.MS_ACTIVE": "syscall", - "syscall.MS_ASYNC": "syscall", - "syscall.MS_BIND": "syscall", - "syscall.MS_DEACTIVATE": "syscall", - "syscall.MS_DIRSYNC": "syscall", - "syscall.MS_INVALIDATE": "syscall", - "syscall.MS_I_VERSION": "syscall", - "syscall.MS_KERNMOUNT": "syscall", - "syscall.MS_KILLPAGES": "syscall", - "syscall.MS_MANDLOCK": "syscall", - "syscall.MS_MGC_MSK": "syscall", - "syscall.MS_MGC_VAL": "syscall", - "syscall.MS_MOVE": "syscall", - "syscall.MS_NOATIME": "syscall", - "syscall.MS_NODEV": "syscall", - "syscall.MS_NODIRATIME": "syscall", - "syscall.MS_NOEXEC": "syscall", - "syscall.MS_NOSUID": "syscall", - "syscall.MS_NOUSER": "syscall", - "syscall.MS_POSIXACL": "syscall", - "syscall.MS_PRIVATE": "syscall", - "syscall.MS_RDONLY": "syscall", - "syscall.MS_REC": "syscall", - "syscall.MS_RELATIME": "syscall", - "syscall.MS_REMOUNT": "syscall", - "syscall.MS_RMT_MASK": "syscall", - "syscall.MS_SHARED": "syscall", - "syscall.MS_SILENT": "syscall", - "syscall.MS_SLAVE": "syscall", - "syscall.MS_STRICTATIME": "syscall", - "syscall.MS_SYNC": "syscall", - "syscall.MS_SYNCHRONOUS": "syscall", - "syscall.MS_UNBINDABLE": "syscall", - "syscall.Madvise": "syscall", - "syscall.MapViewOfFile": "syscall", - "syscall.MaxTokenInfoClass": "syscall", - "syscall.Mclpool": "syscall", - "syscall.MibIfRow": "syscall", - "syscall.Mkdir": "syscall", - "syscall.Mkdirat": "syscall", - "syscall.Mkfifo": "syscall", - "syscall.Mknod": "syscall", - "syscall.Mknodat": "syscall", - "syscall.Mlock": "syscall", - "syscall.Mlockall": "syscall", - "syscall.Mmap": "syscall", - "syscall.Mount": "syscall", - "syscall.MoveFile": "syscall", - "syscall.Mprotect": "syscall", - "syscall.Msghdr": "syscall", - "syscall.Munlock": "syscall", - "syscall.Munlockall": "syscall", - "syscall.Munmap": "syscall", - "syscall.MustLoadDLL": "syscall", - "syscall.NAME_MAX": "syscall", - "syscall.NETLINK_ADD_MEMBERSHIP": "syscall", - "syscall.NETLINK_AUDIT": "syscall", - "syscall.NETLINK_BROADCAST_ERROR": "syscall", - "syscall.NETLINK_CONNECTOR": "syscall", - "syscall.NETLINK_DNRTMSG": "syscall", - "syscall.NETLINK_DROP_MEMBERSHIP": "syscall", - "syscall.NETLINK_ECRYPTFS": "syscall", - "syscall.NETLINK_FIB_LOOKUP": "syscall", - "syscall.NETLINK_FIREWALL": "syscall", - "syscall.NETLINK_GENERIC": "syscall", - "syscall.NETLINK_INET_DIAG": "syscall", - "syscall.NETLINK_IP6_FW": "syscall", - "syscall.NETLINK_ISCSI": "syscall", - "syscall.NETLINK_KOBJECT_UEVENT": "syscall", - "syscall.NETLINK_NETFILTER": "syscall", - "syscall.NETLINK_NFLOG": "syscall", - "syscall.NETLINK_NO_ENOBUFS": "syscall", - "syscall.NETLINK_PKTINFO": "syscall", - "syscall.NETLINK_RDMA": "syscall", - "syscall.NETLINK_ROUTE": "syscall", - "syscall.NETLINK_SCSITRANSPORT": "syscall", - "syscall.NETLINK_SELINUX": "syscall", - "syscall.NETLINK_UNUSED": "syscall", - "syscall.NETLINK_USERSOCK": "syscall", - "syscall.NETLINK_XFRM": "syscall", - "syscall.NET_RT_DUMP": "syscall", - "syscall.NET_RT_DUMP2": "syscall", - "syscall.NET_RT_FLAGS": "syscall", - "syscall.NET_RT_IFLIST": "syscall", - "syscall.NET_RT_IFLIST2": "syscall", - "syscall.NET_RT_IFLISTL": "syscall", - "syscall.NET_RT_IFMALIST": "syscall", - "syscall.NET_RT_MAXID": "syscall", - "syscall.NET_RT_OIFLIST": "syscall", - "syscall.NET_RT_OOIFLIST": "syscall", - "syscall.NET_RT_STAT": "syscall", - "syscall.NET_RT_STATS": "syscall", - "syscall.NET_RT_TABLE": "syscall", - "syscall.NET_RT_TRASH": "syscall", - "syscall.NLA_ALIGNTO": "syscall", - "syscall.NLA_F_NESTED": "syscall", - "syscall.NLA_F_NET_BYTEORDER": "syscall", - "syscall.NLA_HDRLEN": "syscall", - "syscall.NLMSG_ALIGNTO": "syscall", - "syscall.NLMSG_DONE": "syscall", - "syscall.NLMSG_ERROR": "syscall", - "syscall.NLMSG_HDRLEN": "syscall", - "syscall.NLMSG_MIN_TYPE": "syscall", - "syscall.NLMSG_NOOP": "syscall", - "syscall.NLMSG_OVERRUN": "syscall", - "syscall.NLM_F_ACK": "syscall", - "syscall.NLM_F_APPEND": "syscall", - "syscall.NLM_F_ATOMIC": "syscall", - "syscall.NLM_F_CREATE": "syscall", - "syscall.NLM_F_DUMP": "syscall", - "syscall.NLM_F_ECHO": "syscall", - "syscall.NLM_F_EXCL": "syscall", - "syscall.NLM_F_MATCH": "syscall", - "syscall.NLM_F_MULTI": "syscall", - "syscall.NLM_F_REPLACE": "syscall", - "syscall.NLM_F_REQUEST": "syscall", - "syscall.NLM_F_ROOT": "syscall", - "syscall.NOFLSH": "syscall", - "syscall.NOTE_ABSOLUTE": "syscall", - "syscall.NOTE_ATTRIB": "syscall", - "syscall.NOTE_CHILD": "syscall", - "syscall.NOTE_DELETE": "syscall", - "syscall.NOTE_EOF": "syscall", - "syscall.NOTE_EXEC": "syscall", - "syscall.NOTE_EXIT": "syscall", - "syscall.NOTE_EXITSTATUS": "syscall", - "syscall.NOTE_EXTEND": "syscall", - "syscall.NOTE_FFAND": "syscall", - "syscall.NOTE_FFCOPY": "syscall", - "syscall.NOTE_FFCTRLMASK": "syscall", - "syscall.NOTE_FFLAGSMASK": "syscall", - "syscall.NOTE_FFNOP": "syscall", - "syscall.NOTE_FFOR": "syscall", - "syscall.NOTE_FORK": "syscall", - "syscall.NOTE_LINK": "syscall", - "syscall.NOTE_LOWAT": "syscall", - "syscall.NOTE_NONE": "syscall", - "syscall.NOTE_NSECONDS": "syscall", - "syscall.NOTE_PCTRLMASK": "syscall", - "syscall.NOTE_PDATAMASK": "syscall", - "syscall.NOTE_REAP": "syscall", - "syscall.NOTE_RENAME": "syscall", - "syscall.NOTE_RESOURCEEND": "syscall", - "syscall.NOTE_REVOKE": "syscall", - "syscall.NOTE_SECONDS": "syscall", - "syscall.NOTE_SIGNAL": "syscall", - "syscall.NOTE_TRACK": "syscall", - "syscall.NOTE_TRACKERR": "syscall", - "syscall.NOTE_TRIGGER": "syscall", - "syscall.NOTE_TRUNCATE": "syscall", - "syscall.NOTE_USECONDS": "syscall", - "syscall.NOTE_VM_ERROR": "syscall", - "syscall.NOTE_VM_PRESSURE": "syscall", - "syscall.NOTE_VM_PRESSURE_SUDDEN_TERMINATE": "syscall", - "syscall.NOTE_VM_PRESSURE_TERMINATE": "syscall", - "syscall.NOTE_WRITE": "syscall", - "syscall.NameCanonical": "syscall", - "syscall.NameCanonicalEx": "syscall", - "syscall.NameDisplay": "syscall", - "syscall.NameDnsDomain": "syscall", - "syscall.NameFullyQualifiedDN": "syscall", - "syscall.NameSamCompatible": "syscall", - "syscall.NameServicePrincipal": "syscall", - "syscall.NameUniqueId": "syscall", - "syscall.NameUnknown": "syscall", - "syscall.NameUserPrincipal": "syscall", - "syscall.Nanosleep": "syscall", - "syscall.NetApiBufferFree": "syscall", - "syscall.NetGetJoinInformation": "syscall", - "syscall.NetSetupDomainName": "syscall", - "syscall.NetSetupUnjoined": "syscall", - "syscall.NetSetupUnknownStatus": "syscall", - "syscall.NetSetupWorkgroupName": "syscall", - "syscall.NetUserGetInfo": "syscall", - "syscall.NetlinkMessage": "syscall", - "syscall.NetlinkRIB": "syscall", - "syscall.NetlinkRouteAttr": "syscall", - "syscall.NetlinkRouteRequest": "syscall", - "syscall.NewCallback": "syscall", - "syscall.NewCallbackCDecl": "syscall", - "syscall.NewLazyDLL": "syscall", - "syscall.NlAttr": "syscall", - "syscall.NlMsgerr": "syscall", - "syscall.NlMsghdr": "syscall", - "syscall.NsecToFiletime": "syscall", - "syscall.NsecToTimespec": "syscall", - "syscall.NsecToTimeval": "syscall", - "syscall.Ntohs": "syscall", - "syscall.OCRNL": "syscall", - "syscall.OFDEL": "syscall", - "syscall.OFILL": "syscall", - "syscall.OFIOGETBMAP": "syscall", - "syscall.OID_PKIX_KP_SERVER_AUTH": "syscall", - "syscall.OID_SERVER_GATED_CRYPTO": "syscall", - "syscall.OID_SGC_NETSCAPE": "syscall", - "syscall.OLCUC": "syscall", - "syscall.ONLCR": "syscall", - "syscall.ONLRET": "syscall", - "syscall.ONOCR": "syscall", - "syscall.ONOEOT": "syscall", - "syscall.OPEN_ALWAYS": "syscall", - "syscall.OPEN_EXISTING": "syscall", - "syscall.OPOST": "syscall", - "syscall.O_ACCMODE": "syscall", - "syscall.O_ALERT": "syscall", - "syscall.O_ALT_IO": "syscall", - "syscall.O_APPEND": "syscall", - "syscall.O_ASYNC": "syscall", - "syscall.O_CLOEXEC": "syscall", - "syscall.O_CREAT": "syscall", - "syscall.O_DIRECT": "syscall", - "syscall.O_DIRECTORY": "syscall", - "syscall.O_DSYNC": "syscall", - "syscall.O_EVTONLY": "syscall", - "syscall.O_EXCL": "syscall", - "syscall.O_EXEC": "syscall", - "syscall.O_EXLOCK": "syscall", - "syscall.O_FSYNC": "syscall", - "syscall.O_LARGEFILE": "syscall", - "syscall.O_NDELAY": "syscall", - "syscall.O_NOATIME": "syscall", - "syscall.O_NOCTTY": "syscall", - "syscall.O_NOFOLLOW": "syscall", - "syscall.O_NONBLOCK": "syscall", - "syscall.O_NOSIGPIPE": "syscall", - "syscall.O_POPUP": "syscall", - "syscall.O_RDONLY": "syscall", - "syscall.O_RDWR": "syscall", - "syscall.O_RSYNC": "syscall", - "syscall.O_SHLOCK": "syscall", - "syscall.O_SYMLINK": "syscall", - "syscall.O_SYNC": "syscall", - "syscall.O_TRUNC": "syscall", - "syscall.O_TTY_INIT": "syscall", - "syscall.O_WRONLY": "syscall", - "syscall.Open": "syscall", - "syscall.OpenCurrentProcessToken": "syscall", - "syscall.OpenProcess": "syscall", - "syscall.OpenProcessToken": "syscall", - "syscall.Openat": "syscall", - "syscall.Overlapped": "syscall", - "syscall.PACKET_ADD_MEMBERSHIP": "syscall", - "syscall.PACKET_BROADCAST": "syscall", - "syscall.PACKET_DROP_MEMBERSHIP": "syscall", - "syscall.PACKET_FASTROUTE": "syscall", - "syscall.PACKET_HOST": "syscall", - "syscall.PACKET_LOOPBACK": "syscall", - "syscall.PACKET_MR_ALLMULTI": "syscall", - "syscall.PACKET_MR_MULTICAST": "syscall", - "syscall.PACKET_MR_PROMISC": "syscall", - "syscall.PACKET_MULTICAST": "syscall", - "syscall.PACKET_OTHERHOST": "syscall", - "syscall.PACKET_OUTGOING": "syscall", - "syscall.PACKET_RECV_OUTPUT": "syscall", - "syscall.PACKET_RX_RING": "syscall", - "syscall.PACKET_STATISTICS": "syscall", - "syscall.PAGE_EXECUTE_READ": "syscall", - "syscall.PAGE_EXECUTE_READWRITE": "syscall", - "syscall.PAGE_EXECUTE_WRITECOPY": "syscall", - "syscall.PAGE_READONLY": "syscall", - "syscall.PAGE_READWRITE": "syscall", - "syscall.PAGE_WRITECOPY": "syscall", - "syscall.PARENB": "syscall", - "syscall.PARMRK": "syscall", - "syscall.PARODD": "syscall", - "syscall.PENDIN": "syscall", - "syscall.PFL_HIDDEN": "syscall", - "syscall.PFL_MATCHES_PROTOCOL_ZERO": "syscall", - "syscall.PFL_MULTIPLE_PROTO_ENTRIES": "syscall", - "syscall.PFL_NETWORKDIRECT_PROVIDER": "syscall", - "syscall.PFL_RECOMMENDED_PROTO_ENTRY": "syscall", - "syscall.PF_FLUSH": "syscall", - "syscall.PKCS_7_ASN_ENCODING": "syscall", - "syscall.PMC5_PIPELINE_FLUSH": "syscall", - "syscall.PRIO_PGRP": "syscall", - "syscall.PRIO_PROCESS": "syscall", - "syscall.PRIO_USER": "syscall", - "syscall.PRI_IOFLUSH": "syscall", - "syscall.PROCESS_QUERY_INFORMATION": "syscall", - "syscall.PROCESS_TERMINATE": "syscall", - "syscall.PROT_EXEC": "syscall", - "syscall.PROT_GROWSDOWN": "syscall", - "syscall.PROT_GROWSUP": "syscall", - "syscall.PROT_NONE": "syscall", - "syscall.PROT_READ": "syscall", - "syscall.PROT_WRITE": "syscall", - "syscall.PROV_DH_SCHANNEL": "syscall", - "syscall.PROV_DSS": "syscall", - "syscall.PROV_DSS_DH": "syscall", - "syscall.PROV_EC_ECDSA_FULL": "syscall", - "syscall.PROV_EC_ECDSA_SIG": "syscall", - "syscall.PROV_EC_ECNRA_FULL": "syscall", - "syscall.PROV_EC_ECNRA_SIG": "syscall", - "syscall.PROV_FORTEZZA": "syscall", - "syscall.PROV_INTEL_SEC": "syscall", - "syscall.PROV_MS_EXCHANGE": "syscall", - "syscall.PROV_REPLACE_OWF": "syscall", - "syscall.PROV_RNG": "syscall", - "syscall.PROV_RSA_AES": "syscall", - "syscall.PROV_RSA_FULL": "syscall", - "syscall.PROV_RSA_SCHANNEL": "syscall", - "syscall.PROV_RSA_SIG": "syscall", - "syscall.PROV_SPYRUS_LYNKS": "syscall", - "syscall.PROV_SSL": "syscall", - "syscall.PR_CAPBSET_DROP": "syscall", - "syscall.PR_CAPBSET_READ": "syscall", - "syscall.PR_CLEAR_SECCOMP_FILTER": "syscall", - "syscall.PR_ENDIAN_BIG": "syscall", - "syscall.PR_ENDIAN_LITTLE": "syscall", - "syscall.PR_ENDIAN_PPC_LITTLE": "syscall", - "syscall.PR_FPEMU_NOPRINT": "syscall", - "syscall.PR_FPEMU_SIGFPE": "syscall", - "syscall.PR_FP_EXC_ASYNC": "syscall", - "syscall.PR_FP_EXC_DISABLED": "syscall", - "syscall.PR_FP_EXC_DIV": "syscall", - "syscall.PR_FP_EXC_INV": "syscall", - "syscall.PR_FP_EXC_NONRECOV": "syscall", - "syscall.PR_FP_EXC_OVF": "syscall", - "syscall.PR_FP_EXC_PRECISE": "syscall", - "syscall.PR_FP_EXC_RES": "syscall", - "syscall.PR_FP_EXC_SW_ENABLE": "syscall", - "syscall.PR_FP_EXC_UND": "syscall", - "syscall.PR_GET_DUMPABLE": "syscall", - "syscall.PR_GET_ENDIAN": "syscall", - "syscall.PR_GET_FPEMU": "syscall", - "syscall.PR_GET_FPEXC": "syscall", - "syscall.PR_GET_KEEPCAPS": "syscall", - "syscall.PR_GET_NAME": "syscall", - "syscall.PR_GET_PDEATHSIG": "syscall", - "syscall.PR_GET_SECCOMP": "syscall", - "syscall.PR_GET_SECCOMP_FILTER": "syscall", - "syscall.PR_GET_SECUREBITS": "syscall", - "syscall.PR_GET_TIMERSLACK": "syscall", - "syscall.PR_GET_TIMING": "syscall", - "syscall.PR_GET_TSC": "syscall", - "syscall.PR_GET_UNALIGN": "syscall", - "syscall.PR_MCE_KILL": "syscall", - "syscall.PR_MCE_KILL_CLEAR": "syscall", - "syscall.PR_MCE_KILL_DEFAULT": "syscall", - "syscall.PR_MCE_KILL_EARLY": "syscall", - "syscall.PR_MCE_KILL_GET": "syscall", - "syscall.PR_MCE_KILL_LATE": "syscall", - "syscall.PR_MCE_KILL_SET": "syscall", - "syscall.PR_SECCOMP_FILTER_EVENT": "syscall", - "syscall.PR_SECCOMP_FILTER_SYSCALL": "syscall", - "syscall.PR_SET_DUMPABLE": "syscall", - "syscall.PR_SET_ENDIAN": "syscall", - "syscall.PR_SET_FPEMU": "syscall", - "syscall.PR_SET_FPEXC": "syscall", - "syscall.PR_SET_KEEPCAPS": "syscall", - "syscall.PR_SET_NAME": "syscall", - "syscall.PR_SET_PDEATHSIG": "syscall", - "syscall.PR_SET_PTRACER": "syscall", - "syscall.PR_SET_SECCOMP": "syscall", - "syscall.PR_SET_SECCOMP_FILTER": "syscall", - "syscall.PR_SET_SECUREBITS": "syscall", - "syscall.PR_SET_TIMERSLACK": "syscall", - "syscall.PR_SET_TIMING": "syscall", - "syscall.PR_SET_TSC": "syscall", - "syscall.PR_SET_UNALIGN": "syscall", - "syscall.PR_TASK_PERF_EVENTS_DISABLE": "syscall", - "syscall.PR_TASK_PERF_EVENTS_ENABLE": "syscall", - "syscall.PR_TIMING_STATISTICAL": "syscall", - "syscall.PR_TIMING_TIMESTAMP": "syscall", - "syscall.PR_TSC_ENABLE": "syscall", - "syscall.PR_TSC_SIGSEGV": "syscall", - "syscall.PR_UNALIGN_NOPRINT": "syscall", - "syscall.PR_UNALIGN_SIGBUS": "syscall", - "syscall.PTRACE_ARCH_PRCTL": "syscall", - "syscall.PTRACE_ATTACH": "syscall", - "syscall.PTRACE_CONT": "syscall", - "syscall.PTRACE_DETACH": "syscall", - "syscall.PTRACE_EVENT_CLONE": "syscall", - "syscall.PTRACE_EVENT_EXEC": "syscall", - "syscall.PTRACE_EVENT_EXIT": "syscall", - "syscall.PTRACE_EVENT_FORK": "syscall", - "syscall.PTRACE_EVENT_VFORK": "syscall", - "syscall.PTRACE_EVENT_VFORK_DONE": "syscall", - "syscall.PTRACE_GETCRUNCHREGS": "syscall", - "syscall.PTRACE_GETEVENTMSG": "syscall", - "syscall.PTRACE_GETFPREGS": "syscall", - "syscall.PTRACE_GETFPXREGS": "syscall", - "syscall.PTRACE_GETHBPREGS": "syscall", - "syscall.PTRACE_GETREGS": "syscall", - "syscall.PTRACE_GETREGSET": "syscall", - "syscall.PTRACE_GETSIGINFO": "syscall", - "syscall.PTRACE_GETVFPREGS": "syscall", - "syscall.PTRACE_GETWMMXREGS": "syscall", - "syscall.PTRACE_GET_THREAD_AREA": "syscall", - "syscall.PTRACE_KILL": "syscall", - "syscall.PTRACE_OLDSETOPTIONS": "syscall", - "syscall.PTRACE_O_MASK": "syscall", - "syscall.PTRACE_O_TRACECLONE": "syscall", - "syscall.PTRACE_O_TRACEEXEC": "syscall", - "syscall.PTRACE_O_TRACEEXIT": "syscall", - "syscall.PTRACE_O_TRACEFORK": "syscall", - "syscall.PTRACE_O_TRACESYSGOOD": "syscall", - "syscall.PTRACE_O_TRACEVFORK": "syscall", - "syscall.PTRACE_O_TRACEVFORKDONE": "syscall", - "syscall.PTRACE_PEEKDATA": "syscall", - "syscall.PTRACE_PEEKTEXT": "syscall", - "syscall.PTRACE_PEEKUSR": "syscall", - "syscall.PTRACE_POKEDATA": "syscall", - "syscall.PTRACE_POKETEXT": "syscall", - "syscall.PTRACE_POKEUSR": "syscall", - "syscall.PTRACE_SETCRUNCHREGS": "syscall", - "syscall.PTRACE_SETFPREGS": "syscall", - "syscall.PTRACE_SETFPXREGS": "syscall", - "syscall.PTRACE_SETHBPREGS": "syscall", - "syscall.PTRACE_SETOPTIONS": "syscall", - "syscall.PTRACE_SETREGS": "syscall", - "syscall.PTRACE_SETREGSET": "syscall", - "syscall.PTRACE_SETSIGINFO": "syscall", - "syscall.PTRACE_SETVFPREGS": "syscall", - "syscall.PTRACE_SETWMMXREGS": "syscall", - "syscall.PTRACE_SET_SYSCALL": "syscall", - "syscall.PTRACE_SET_THREAD_AREA": "syscall", - "syscall.PTRACE_SINGLEBLOCK": "syscall", - "syscall.PTRACE_SINGLESTEP": "syscall", - "syscall.PTRACE_SYSCALL": "syscall", - "syscall.PTRACE_SYSEMU": "syscall", - "syscall.PTRACE_SYSEMU_SINGLESTEP": "syscall", - "syscall.PTRACE_TRACEME": "syscall", - "syscall.PT_ATTACH": "syscall", - "syscall.PT_ATTACHEXC": "syscall", - "syscall.PT_CONTINUE": "syscall", - "syscall.PT_DATA_ADDR": "syscall", - "syscall.PT_DENY_ATTACH": "syscall", - "syscall.PT_DETACH": "syscall", - "syscall.PT_FIRSTMACH": "syscall", - "syscall.PT_FORCEQUOTA": "syscall", - "syscall.PT_KILL": "syscall", - "syscall.PT_MASK": "syscall", - "syscall.PT_READ_D": "syscall", - "syscall.PT_READ_I": "syscall", - "syscall.PT_READ_U": "syscall", - "syscall.PT_SIGEXC": "syscall", - "syscall.PT_STEP": "syscall", - "syscall.PT_TEXT_ADDR": "syscall", - "syscall.PT_TEXT_END_ADDR": "syscall", - "syscall.PT_THUPDATE": "syscall", - "syscall.PT_TRACE_ME": "syscall", - "syscall.PT_WRITE_D": "syscall", - "syscall.PT_WRITE_I": "syscall", - "syscall.PT_WRITE_U": "syscall", - "syscall.ParseDirent": "syscall", - "syscall.ParseNetlinkMessage": "syscall", - "syscall.ParseNetlinkRouteAttr": "syscall", - "syscall.ParseRoutingMessage": "syscall", - "syscall.ParseRoutingSockaddr": "syscall", - "syscall.ParseSocketControlMessage": "syscall", - "syscall.ParseUnixCredentials": "syscall", - "syscall.ParseUnixRights": "syscall", - "syscall.PathMax": "syscall", - "syscall.Pathconf": "syscall", - "syscall.Pause": "syscall", - "syscall.Pipe": "syscall", - "syscall.Pipe2": "syscall", - "syscall.PivotRoot": "syscall", - "syscall.PostQueuedCompletionStatus": "syscall", - "syscall.Pread": "syscall", - "syscall.Proc": "syscall", - "syscall.ProcAttr": "syscall", - "syscall.Process32First": "syscall", - "syscall.Process32Next": "syscall", - "syscall.ProcessEntry32": "syscall", - "syscall.ProcessInformation": "syscall", - "syscall.Protoent": "syscall", - "syscall.PtraceAttach": "syscall", - "syscall.PtraceCont": "syscall", - "syscall.PtraceDetach": "syscall", - "syscall.PtraceGetEventMsg": "syscall", - "syscall.PtraceGetRegs": "syscall", - "syscall.PtracePeekData": "syscall", - "syscall.PtracePeekText": "syscall", - "syscall.PtracePokeData": "syscall", - "syscall.PtracePokeText": "syscall", - "syscall.PtraceRegs": "syscall", - "syscall.PtraceSetOptions": "syscall", - "syscall.PtraceSetRegs": "syscall", - "syscall.PtraceSingleStep": "syscall", - "syscall.PtraceSyscall": "syscall", - "syscall.Pwrite": "syscall", - "syscall.REG_BINARY": "syscall", - "syscall.REG_DWORD": "syscall", - "syscall.REG_DWORD_BIG_ENDIAN": "syscall", - "syscall.REG_DWORD_LITTLE_ENDIAN": "syscall", - "syscall.REG_EXPAND_SZ": "syscall", - "syscall.REG_FULL_RESOURCE_DESCRIPTOR": "syscall", - "syscall.REG_LINK": "syscall", - "syscall.REG_MULTI_SZ": "syscall", - "syscall.REG_NONE": "syscall", - "syscall.REG_QWORD": "syscall", - "syscall.REG_QWORD_LITTLE_ENDIAN": "syscall", - "syscall.REG_RESOURCE_LIST": "syscall", - "syscall.REG_RESOURCE_REQUIREMENTS_LIST": "syscall", - "syscall.REG_SZ": "syscall", - "syscall.RLIMIT_AS": "syscall", - "syscall.RLIMIT_CORE": "syscall", - "syscall.RLIMIT_CPU": "syscall", - "syscall.RLIMIT_DATA": "syscall", - "syscall.RLIMIT_FSIZE": "syscall", - "syscall.RLIMIT_NOFILE": "syscall", - "syscall.RLIMIT_STACK": "syscall", - "syscall.RLIM_INFINITY": "syscall", - "syscall.RTAX_ADVMSS": "syscall", - "syscall.RTAX_AUTHOR": "syscall", - "syscall.RTAX_BRD": "syscall", - "syscall.RTAX_CWND": "syscall", - "syscall.RTAX_DST": "syscall", - "syscall.RTAX_FEATURES": "syscall", - "syscall.RTAX_FEATURE_ALLFRAG": "syscall", - "syscall.RTAX_FEATURE_ECN": "syscall", - "syscall.RTAX_FEATURE_SACK": "syscall", - "syscall.RTAX_FEATURE_TIMESTAMP": "syscall", - "syscall.RTAX_GATEWAY": "syscall", - "syscall.RTAX_GENMASK": "syscall", - "syscall.RTAX_HOPLIMIT": "syscall", - "syscall.RTAX_IFA": "syscall", - "syscall.RTAX_IFP": "syscall", - "syscall.RTAX_INITCWND": "syscall", - "syscall.RTAX_INITRWND": "syscall", - "syscall.RTAX_LABEL": "syscall", - "syscall.RTAX_LOCK": "syscall", - "syscall.RTAX_MAX": "syscall", - "syscall.RTAX_MTU": "syscall", - "syscall.RTAX_NETMASK": "syscall", - "syscall.RTAX_REORDERING": "syscall", - "syscall.RTAX_RTO_MIN": "syscall", - "syscall.RTAX_RTT": "syscall", - "syscall.RTAX_RTTVAR": "syscall", - "syscall.RTAX_SRC": "syscall", - "syscall.RTAX_SRCMASK": "syscall", - "syscall.RTAX_SSTHRESH": "syscall", - "syscall.RTAX_TAG": "syscall", - "syscall.RTAX_UNSPEC": "syscall", - "syscall.RTAX_WINDOW": "syscall", - "syscall.RTA_ALIGNTO": "syscall", - "syscall.RTA_AUTHOR": "syscall", - "syscall.RTA_BRD": "syscall", - "syscall.RTA_CACHEINFO": "syscall", - "syscall.RTA_DST": "syscall", - "syscall.RTA_FLOW": "syscall", - "syscall.RTA_GATEWAY": "syscall", - "syscall.RTA_GENMASK": "syscall", - "syscall.RTA_IFA": "syscall", - "syscall.RTA_IFP": "syscall", - "syscall.RTA_IIF": "syscall", - "syscall.RTA_LABEL": "syscall", - "syscall.RTA_MAX": "syscall", - "syscall.RTA_METRICS": "syscall", - "syscall.RTA_MULTIPATH": "syscall", - "syscall.RTA_NETMASK": "syscall", - "syscall.RTA_OIF": "syscall", - "syscall.RTA_PREFSRC": "syscall", - "syscall.RTA_PRIORITY": "syscall", - "syscall.RTA_SRC": "syscall", - "syscall.RTA_SRCMASK": "syscall", - "syscall.RTA_TABLE": "syscall", - "syscall.RTA_TAG": "syscall", - "syscall.RTA_UNSPEC": "syscall", - "syscall.RTCF_DIRECTSRC": "syscall", - "syscall.RTCF_DOREDIRECT": "syscall", - "syscall.RTCF_LOG": "syscall", - "syscall.RTCF_MASQ": "syscall", - "syscall.RTCF_NAT": "syscall", - "syscall.RTCF_VALVE": "syscall", - "syscall.RTF_ADDRCLASSMASK": "syscall", - "syscall.RTF_ADDRCONF": "syscall", - "syscall.RTF_ALLONLINK": "syscall", - "syscall.RTF_ANNOUNCE": "syscall", - "syscall.RTF_BLACKHOLE": "syscall", - "syscall.RTF_BROADCAST": "syscall", - "syscall.RTF_CACHE": "syscall", - "syscall.RTF_CLONED": "syscall", - "syscall.RTF_CLONING": "syscall", - "syscall.RTF_CONDEMNED": "syscall", - "syscall.RTF_DEFAULT": "syscall", - "syscall.RTF_DELCLONE": "syscall", - "syscall.RTF_DONE": "syscall", - "syscall.RTF_DYNAMIC": "syscall", - "syscall.RTF_FLOW": "syscall", - "syscall.RTF_FMASK": "syscall", - "syscall.RTF_GATEWAY": "syscall", - "syscall.RTF_GWFLAG_COMPAT": "syscall", - "syscall.RTF_HOST": "syscall", - "syscall.RTF_IFREF": "syscall", - "syscall.RTF_IFSCOPE": "syscall", - "syscall.RTF_INTERFACE": "syscall", - "syscall.RTF_IRTT": "syscall", - "syscall.RTF_LINKRT": "syscall", - "syscall.RTF_LLDATA": "syscall", - "syscall.RTF_LLINFO": "syscall", - "syscall.RTF_LOCAL": "syscall", - "syscall.RTF_MASK": "syscall", - "syscall.RTF_MODIFIED": "syscall", - "syscall.RTF_MPATH": "syscall", - "syscall.RTF_MPLS": "syscall", - "syscall.RTF_MSS": "syscall", - "syscall.RTF_MTU": "syscall", - "syscall.RTF_MULTICAST": "syscall", - "syscall.RTF_NAT": "syscall", - "syscall.RTF_NOFORWARD": "syscall", - "syscall.RTF_NONEXTHOP": "syscall", - "syscall.RTF_NOPMTUDISC": "syscall", - "syscall.RTF_PERMANENT_ARP": "syscall", - "syscall.RTF_PINNED": "syscall", - "syscall.RTF_POLICY": "syscall", - "syscall.RTF_PRCLONING": "syscall", - "syscall.RTF_PROTO1": "syscall", - "syscall.RTF_PROTO2": "syscall", - "syscall.RTF_PROTO3": "syscall", - "syscall.RTF_REINSTATE": "syscall", - "syscall.RTF_REJECT": "syscall", - "syscall.RTF_RNH_LOCKED": "syscall", - "syscall.RTF_SOURCE": "syscall", - "syscall.RTF_SRC": "syscall", - "syscall.RTF_STATIC": "syscall", - "syscall.RTF_STICKY": "syscall", - "syscall.RTF_THROW": "syscall", - "syscall.RTF_TUNNEL": "syscall", - "syscall.RTF_UP": "syscall", - "syscall.RTF_USETRAILERS": "syscall", - "syscall.RTF_WASCLONED": "syscall", - "syscall.RTF_WINDOW": "syscall", - "syscall.RTF_XRESOLVE": "syscall", - "syscall.RTM_ADD": "syscall", - "syscall.RTM_BASE": "syscall", - "syscall.RTM_CHANGE": "syscall", - "syscall.RTM_CHGADDR": "syscall", - "syscall.RTM_DELACTION": "syscall", - "syscall.RTM_DELADDR": "syscall", - "syscall.RTM_DELADDRLABEL": "syscall", - "syscall.RTM_DELETE": "syscall", - "syscall.RTM_DELLINK": "syscall", - "syscall.RTM_DELMADDR": "syscall", - "syscall.RTM_DELNEIGH": "syscall", - "syscall.RTM_DELQDISC": "syscall", - "syscall.RTM_DELROUTE": "syscall", - "syscall.RTM_DELRULE": "syscall", - "syscall.RTM_DELTCLASS": "syscall", - "syscall.RTM_DELTFILTER": "syscall", - "syscall.RTM_DESYNC": "syscall", - "syscall.RTM_F_CLONED": "syscall", - "syscall.RTM_F_EQUALIZE": "syscall", - "syscall.RTM_F_NOTIFY": "syscall", - "syscall.RTM_F_PREFIX": "syscall", - "syscall.RTM_GET": "syscall", - "syscall.RTM_GET2": "syscall", - "syscall.RTM_GETACTION": "syscall", - "syscall.RTM_GETADDR": "syscall", - "syscall.RTM_GETADDRLABEL": "syscall", - "syscall.RTM_GETANYCAST": "syscall", - "syscall.RTM_GETDCB": "syscall", - "syscall.RTM_GETLINK": "syscall", - "syscall.RTM_GETMULTICAST": "syscall", - "syscall.RTM_GETNEIGH": "syscall", - "syscall.RTM_GETNEIGHTBL": "syscall", - "syscall.RTM_GETQDISC": "syscall", - "syscall.RTM_GETROUTE": "syscall", - "syscall.RTM_GETRULE": "syscall", - "syscall.RTM_GETTCLASS": "syscall", - "syscall.RTM_GETTFILTER": "syscall", - "syscall.RTM_IEEE80211": "syscall", - "syscall.RTM_IFANNOUNCE": "syscall", - "syscall.RTM_IFINFO": "syscall", - "syscall.RTM_IFINFO2": "syscall", - "syscall.RTM_LLINFO_UPD": "syscall", - "syscall.RTM_LOCK": "syscall", - "syscall.RTM_LOSING": "syscall", - "syscall.RTM_MAX": "syscall", - "syscall.RTM_MAXSIZE": "syscall", - "syscall.RTM_MISS": "syscall", - "syscall.RTM_NEWACTION": "syscall", - "syscall.RTM_NEWADDR": "syscall", - "syscall.RTM_NEWADDRLABEL": "syscall", - "syscall.RTM_NEWLINK": "syscall", - "syscall.RTM_NEWMADDR": "syscall", - "syscall.RTM_NEWMADDR2": "syscall", - "syscall.RTM_NEWNDUSEROPT": "syscall", - "syscall.RTM_NEWNEIGH": "syscall", - "syscall.RTM_NEWNEIGHTBL": "syscall", - "syscall.RTM_NEWPREFIX": "syscall", - "syscall.RTM_NEWQDISC": "syscall", - "syscall.RTM_NEWROUTE": "syscall", - "syscall.RTM_NEWRULE": "syscall", - "syscall.RTM_NEWTCLASS": "syscall", - "syscall.RTM_NEWTFILTER": "syscall", - "syscall.RTM_NR_FAMILIES": "syscall", - "syscall.RTM_NR_MSGTYPES": "syscall", - "syscall.RTM_OIFINFO": "syscall", - "syscall.RTM_OLDADD": "syscall", - "syscall.RTM_OLDDEL": "syscall", - "syscall.RTM_OOIFINFO": "syscall", - "syscall.RTM_REDIRECT": "syscall", - "syscall.RTM_RESOLVE": "syscall", - "syscall.RTM_RTTUNIT": "syscall", - "syscall.RTM_SETDCB": "syscall", - "syscall.RTM_SETGATE": "syscall", - "syscall.RTM_SETLINK": "syscall", - "syscall.RTM_SETNEIGHTBL": "syscall", - "syscall.RTM_VERSION": "syscall", - "syscall.RTNH_ALIGNTO": "syscall", - "syscall.RTNH_F_DEAD": "syscall", - "syscall.RTNH_F_ONLINK": "syscall", - "syscall.RTNH_F_PERVASIVE": "syscall", - "syscall.RTNLGRP_IPV4_IFADDR": "syscall", - "syscall.RTNLGRP_IPV4_MROUTE": "syscall", - "syscall.RTNLGRP_IPV4_ROUTE": "syscall", - "syscall.RTNLGRP_IPV4_RULE": "syscall", - "syscall.RTNLGRP_IPV6_IFADDR": "syscall", - "syscall.RTNLGRP_IPV6_IFINFO": "syscall", - "syscall.RTNLGRP_IPV6_MROUTE": "syscall", - "syscall.RTNLGRP_IPV6_PREFIX": "syscall", - "syscall.RTNLGRP_IPV6_ROUTE": "syscall", - "syscall.RTNLGRP_IPV6_RULE": "syscall", - "syscall.RTNLGRP_LINK": "syscall", - "syscall.RTNLGRP_ND_USEROPT": "syscall", - "syscall.RTNLGRP_NEIGH": "syscall", - "syscall.RTNLGRP_NONE": "syscall", - "syscall.RTNLGRP_NOTIFY": "syscall", - "syscall.RTNLGRP_TC": "syscall", - "syscall.RTN_ANYCAST": "syscall", - "syscall.RTN_BLACKHOLE": "syscall", - "syscall.RTN_BROADCAST": "syscall", - "syscall.RTN_LOCAL": "syscall", - "syscall.RTN_MAX": "syscall", - "syscall.RTN_MULTICAST": "syscall", - "syscall.RTN_NAT": "syscall", - "syscall.RTN_PROHIBIT": "syscall", - "syscall.RTN_THROW": "syscall", - "syscall.RTN_UNICAST": "syscall", - "syscall.RTN_UNREACHABLE": "syscall", - "syscall.RTN_UNSPEC": "syscall", - "syscall.RTN_XRESOLVE": "syscall", - "syscall.RTPROT_BIRD": "syscall", - "syscall.RTPROT_BOOT": "syscall", - "syscall.RTPROT_DHCP": "syscall", - "syscall.RTPROT_DNROUTED": "syscall", - "syscall.RTPROT_GATED": "syscall", - "syscall.RTPROT_KERNEL": "syscall", - "syscall.RTPROT_MRT": "syscall", - "syscall.RTPROT_NTK": "syscall", - "syscall.RTPROT_RA": "syscall", - "syscall.RTPROT_REDIRECT": "syscall", - "syscall.RTPROT_STATIC": "syscall", - "syscall.RTPROT_UNSPEC": "syscall", - "syscall.RTPROT_XORP": "syscall", - "syscall.RTPROT_ZEBRA": "syscall", - "syscall.RTV_EXPIRE": "syscall", - "syscall.RTV_HOPCOUNT": "syscall", - "syscall.RTV_MTU": "syscall", - "syscall.RTV_RPIPE": "syscall", - "syscall.RTV_RTT": "syscall", - "syscall.RTV_RTTVAR": "syscall", - "syscall.RTV_SPIPE": "syscall", - "syscall.RTV_SSTHRESH": "syscall", - "syscall.RTV_WEIGHT": "syscall", - "syscall.RT_CACHING_CONTEXT": "syscall", - "syscall.RT_CLASS_DEFAULT": "syscall", - "syscall.RT_CLASS_LOCAL": "syscall", - "syscall.RT_CLASS_MAIN": "syscall", - "syscall.RT_CLASS_MAX": "syscall", - "syscall.RT_CLASS_UNSPEC": "syscall", - "syscall.RT_DEFAULT_FIB": "syscall", - "syscall.RT_NORTREF": "syscall", - "syscall.RT_SCOPE_HOST": "syscall", - "syscall.RT_SCOPE_LINK": "syscall", - "syscall.RT_SCOPE_NOWHERE": "syscall", - "syscall.RT_SCOPE_SITE": "syscall", - "syscall.RT_SCOPE_UNIVERSE": "syscall", - "syscall.RT_TABLEID_MAX": "syscall", - "syscall.RT_TABLE_COMPAT": "syscall", - "syscall.RT_TABLE_DEFAULT": "syscall", - "syscall.RT_TABLE_LOCAL": "syscall", - "syscall.RT_TABLE_MAIN": "syscall", - "syscall.RT_TABLE_MAX": "syscall", - "syscall.RT_TABLE_UNSPEC": "syscall", - "syscall.RUSAGE_CHILDREN": "syscall", - "syscall.RUSAGE_SELF": "syscall", - "syscall.RUSAGE_THREAD": "syscall", - "syscall.Radvisory_t": "syscall", - "syscall.RawSockaddr": "syscall", - "syscall.RawSockaddrAny": "syscall", - "syscall.RawSockaddrDatalink": "syscall", - "syscall.RawSockaddrInet4": "syscall", - "syscall.RawSockaddrInet6": "syscall", - "syscall.RawSockaddrLinklayer": "syscall", - "syscall.RawSockaddrNetlink": "syscall", - "syscall.RawSockaddrUnix": "syscall", - "syscall.RawSyscall": "syscall", - "syscall.RawSyscall6": "syscall", - "syscall.Read": "syscall", - "syscall.ReadConsole": "syscall", - "syscall.ReadDirectoryChanges": "syscall", - "syscall.ReadDirent": "syscall", - "syscall.ReadFile": "syscall", - "syscall.Readlink": "syscall", - "syscall.Reboot": "syscall", - "syscall.Recvfrom": "syscall", - "syscall.Recvmsg": "syscall", - "syscall.RegCloseKey": "syscall", - "syscall.RegEnumKeyEx": "syscall", - "syscall.RegOpenKeyEx": "syscall", - "syscall.RegQueryInfoKey": "syscall", - "syscall.RegQueryValueEx": "syscall", - "syscall.RemoveDirectory": "syscall", - "syscall.Removexattr": "syscall", - "syscall.Rename": "syscall", - "syscall.Renameat": "syscall", - "syscall.Revoke": "syscall", - "syscall.Rlimit": "syscall", - "syscall.Rmdir": "syscall", - "syscall.RouteMessage": "syscall", - "syscall.RouteRIB": "syscall", - "syscall.RtAttr": "syscall", - "syscall.RtGenmsg": "syscall", - "syscall.RtMetrics": "syscall", - "syscall.RtMsg": "syscall", - "syscall.RtMsghdr": "syscall", - "syscall.RtNexthop": "syscall", - "syscall.Rusage": "syscall", - "syscall.SCM_BINTIME": "syscall", - "syscall.SCM_CREDENTIALS": "syscall", - "syscall.SCM_CREDS": "syscall", - "syscall.SCM_RIGHTS": "syscall", - "syscall.SCM_TIMESTAMP": "syscall", - "syscall.SCM_TIMESTAMPING": "syscall", - "syscall.SCM_TIMESTAMPNS": "syscall", - "syscall.SCM_TIMESTAMP_MONOTONIC": "syscall", - "syscall.SHUT_RD": "syscall", - "syscall.SHUT_RDWR": "syscall", - "syscall.SHUT_WR": "syscall", - "syscall.SID": "syscall", - "syscall.SIDAndAttributes": "syscall", - "syscall.SIGABRT": "syscall", - "syscall.SIGALRM": "syscall", - "syscall.SIGBUS": "syscall", - "syscall.SIGCHLD": "syscall", - "syscall.SIGCLD": "syscall", - "syscall.SIGCONT": "syscall", - "syscall.SIGEMT": "syscall", - "syscall.SIGFPE": "syscall", - "syscall.SIGHUP": "syscall", - "syscall.SIGILL": "syscall", - "syscall.SIGINFO": "syscall", - "syscall.SIGINT": "syscall", - "syscall.SIGIO": "syscall", - "syscall.SIGIOT": "syscall", - "syscall.SIGKILL": "syscall", - "syscall.SIGLIBRT": "syscall", - "syscall.SIGLWP": "syscall", - "syscall.SIGPIPE": "syscall", - "syscall.SIGPOLL": "syscall", - "syscall.SIGPROF": "syscall", - "syscall.SIGPWR": "syscall", - "syscall.SIGQUIT": "syscall", - "syscall.SIGSEGV": "syscall", - "syscall.SIGSTKFLT": "syscall", - "syscall.SIGSTOP": "syscall", - "syscall.SIGSYS": "syscall", - "syscall.SIGTERM": "syscall", - "syscall.SIGTHR": "syscall", - "syscall.SIGTRAP": "syscall", - "syscall.SIGTSTP": "syscall", - "syscall.SIGTTIN": "syscall", - "syscall.SIGTTOU": "syscall", - "syscall.SIGUNUSED": "syscall", - "syscall.SIGURG": "syscall", - "syscall.SIGUSR1": "syscall", - "syscall.SIGUSR2": "syscall", - "syscall.SIGVTALRM": "syscall", - "syscall.SIGWINCH": "syscall", - "syscall.SIGXCPU": "syscall", - "syscall.SIGXFSZ": "syscall", - "syscall.SIOCADDDLCI": "syscall", - "syscall.SIOCADDMULTI": "syscall", - "syscall.SIOCADDRT": "syscall", - "syscall.SIOCAIFADDR": "syscall", - "syscall.SIOCAIFGROUP": "syscall", - "syscall.SIOCALIFADDR": "syscall", - "syscall.SIOCARPIPLL": "syscall", - "syscall.SIOCATMARK": "syscall", - "syscall.SIOCAUTOADDR": "syscall", - "syscall.SIOCAUTONETMASK": "syscall", - "syscall.SIOCBRDGADD": "syscall", - "syscall.SIOCBRDGADDS": "syscall", - "syscall.SIOCBRDGARL": "syscall", - "syscall.SIOCBRDGDADDR": "syscall", - "syscall.SIOCBRDGDEL": "syscall", - "syscall.SIOCBRDGDELS": "syscall", - "syscall.SIOCBRDGFLUSH": "syscall", - "syscall.SIOCBRDGFRL": "syscall", - "syscall.SIOCBRDGGCACHE": "syscall", - "syscall.SIOCBRDGGFD": "syscall", - "syscall.SIOCBRDGGHT": "syscall", - "syscall.SIOCBRDGGIFFLGS": "syscall", - "syscall.SIOCBRDGGMA": "syscall", - "syscall.SIOCBRDGGPARAM": "syscall", - "syscall.SIOCBRDGGPRI": "syscall", - "syscall.SIOCBRDGGRL": "syscall", - "syscall.SIOCBRDGGSIFS": "syscall", - "syscall.SIOCBRDGGTO": "syscall", - "syscall.SIOCBRDGIFS": "syscall", - "syscall.SIOCBRDGRTS": "syscall", - "syscall.SIOCBRDGSADDR": "syscall", - "syscall.SIOCBRDGSCACHE": "syscall", - "syscall.SIOCBRDGSFD": "syscall", - "syscall.SIOCBRDGSHT": "syscall", - "syscall.SIOCBRDGSIFCOST": "syscall", - "syscall.SIOCBRDGSIFFLGS": "syscall", - "syscall.SIOCBRDGSIFPRIO": "syscall", - "syscall.SIOCBRDGSMA": "syscall", - "syscall.SIOCBRDGSPRI": "syscall", - "syscall.SIOCBRDGSPROTO": "syscall", - "syscall.SIOCBRDGSTO": "syscall", - "syscall.SIOCBRDGSTXHC": "syscall", - "syscall.SIOCDARP": "syscall", - "syscall.SIOCDELDLCI": "syscall", - "syscall.SIOCDELMULTI": "syscall", - "syscall.SIOCDELRT": "syscall", - "syscall.SIOCDEVPRIVATE": "syscall", - "syscall.SIOCDIFADDR": "syscall", - "syscall.SIOCDIFGROUP": "syscall", - "syscall.SIOCDIFPHYADDR": "syscall", - "syscall.SIOCDLIFADDR": "syscall", - "syscall.SIOCDRARP": "syscall", - "syscall.SIOCGARP": "syscall", - "syscall.SIOCGDRVSPEC": "syscall", - "syscall.SIOCGETKALIVE": "syscall", - "syscall.SIOCGETLABEL": "syscall", - "syscall.SIOCGETPFLOW": "syscall", - "syscall.SIOCGETPFSYNC": "syscall", - "syscall.SIOCGETSGCNT": "syscall", - "syscall.SIOCGETVIFCNT": "syscall", - "syscall.SIOCGETVLAN": "syscall", - "syscall.SIOCGHIWAT": "syscall", - "syscall.SIOCGIFADDR": "syscall", - "syscall.SIOCGIFADDRPREF": "syscall", - "syscall.SIOCGIFALIAS": "syscall", - "syscall.SIOCGIFALTMTU": "syscall", - "syscall.SIOCGIFASYNCMAP": "syscall", - "syscall.SIOCGIFBOND": "syscall", - "syscall.SIOCGIFBR": "syscall", - "syscall.SIOCGIFBRDADDR": "syscall", - "syscall.SIOCGIFCAP": "syscall", - "syscall.SIOCGIFCONF": "syscall", - "syscall.SIOCGIFCOUNT": "syscall", - "syscall.SIOCGIFDATA": "syscall", - "syscall.SIOCGIFDESCR": "syscall", - "syscall.SIOCGIFDEVMTU": "syscall", - "syscall.SIOCGIFDLT": "syscall", - "syscall.SIOCGIFDSTADDR": "syscall", - "syscall.SIOCGIFENCAP": "syscall", - "syscall.SIOCGIFFIB": "syscall", - "syscall.SIOCGIFFLAGS": "syscall", - "syscall.SIOCGIFGATTR": "syscall", - "syscall.SIOCGIFGENERIC": "syscall", - "syscall.SIOCGIFGMEMB": "syscall", - "syscall.SIOCGIFGROUP": "syscall", - "syscall.SIOCGIFHARDMTU": "syscall", - "syscall.SIOCGIFHWADDR": "syscall", - "syscall.SIOCGIFINDEX": "syscall", - "syscall.SIOCGIFKPI": "syscall", - "syscall.SIOCGIFMAC": "syscall", - "syscall.SIOCGIFMAP": "syscall", - "syscall.SIOCGIFMEDIA": "syscall", - "syscall.SIOCGIFMEM": "syscall", - "syscall.SIOCGIFMETRIC": "syscall", - "syscall.SIOCGIFMTU": "syscall", - "syscall.SIOCGIFNAME": "syscall", - "syscall.SIOCGIFNETMASK": "syscall", - "syscall.SIOCGIFPDSTADDR": "syscall", - "syscall.SIOCGIFPFLAGS": "syscall", - "syscall.SIOCGIFPHYS": "syscall", - "syscall.SIOCGIFPRIORITY": "syscall", - "syscall.SIOCGIFPSRCADDR": "syscall", - "syscall.SIOCGIFRDOMAIN": "syscall", - "syscall.SIOCGIFRTLABEL": "syscall", - "syscall.SIOCGIFSLAVE": "syscall", - "syscall.SIOCGIFSTATUS": "syscall", - "syscall.SIOCGIFTIMESLOT": "syscall", - "syscall.SIOCGIFTXQLEN": "syscall", - "syscall.SIOCGIFVLAN": "syscall", - "syscall.SIOCGIFWAKEFLAGS": "syscall", - "syscall.SIOCGIFXFLAGS": "syscall", - "syscall.SIOCGLIFADDR": "syscall", - "syscall.SIOCGLIFPHYADDR": "syscall", - "syscall.SIOCGLIFPHYRTABLE": "syscall", - "syscall.SIOCGLIFPHYTTL": "syscall", - "syscall.SIOCGLINKSTR": "syscall", - "syscall.SIOCGLOWAT": "syscall", - "syscall.SIOCGPGRP": "syscall", - "syscall.SIOCGPRIVATE_0": "syscall", - "syscall.SIOCGPRIVATE_1": "syscall", - "syscall.SIOCGRARP": "syscall", - "syscall.SIOCGSPPPPARAMS": "syscall", - "syscall.SIOCGSTAMP": "syscall", - "syscall.SIOCGSTAMPNS": "syscall", - "syscall.SIOCGVH": "syscall", - "syscall.SIOCGVNETID": "syscall", - "syscall.SIOCIFCREATE": "syscall", - "syscall.SIOCIFCREATE2": "syscall", - "syscall.SIOCIFDESTROY": "syscall", - "syscall.SIOCIFGCLONERS": "syscall", - "syscall.SIOCINITIFADDR": "syscall", - "syscall.SIOCPROTOPRIVATE": "syscall", - "syscall.SIOCRSLVMULTI": "syscall", - "syscall.SIOCRTMSG": "syscall", - "syscall.SIOCSARP": "syscall", - "syscall.SIOCSDRVSPEC": "syscall", - "syscall.SIOCSETKALIVE": "syscall", - "syscall.SIOCSETLABEL": "syscall", - "syscall.SIOCSETPFLOW": "syscall", - "syscall.SIOCSETPFSYNC": "syscall", - "syscall.SIOCSETVLAN": "syscall", - "syscall.SIOCSHIWAT": "syscall", - "syscall.SIOCSIFADDR": "syscall", - "syscall.SIOCSIFADDRPREF": "syscall", - "syscall.SIOCSIFALTMTU": "syscall", - "syscall.SIOCSIFASYNCMAP": "syscall", - "syscall.SIOCSIFBOND": "syscall", - "syscall.SIOCSIFBR": "syscall", - "syscall.SIOCSIFBRDADDR": "syscall", - "syscall.SIOCSIFCAP": "syscall", - "syscall.SIOCSIFDESCR": "syscall", - "syscall.SIOCSIFDSTADDR": "syscall", - "syscall.SIOCSIFENCAP": "syscall", - "syscall.SIOCSIFFIB": "syscall", - "syscall.SIOCSIFFLAGS": "syscall", - "syscall.SIOCSIFGATTR": "syscall", - "syscall.SIOCSIFGENERIC": "syscall", - "syscall.SIOCSIFHWADDR": "syscall", - "syscall.SIOCSIFHWBROADCAST": "syscall", - "syscall.SIOCSIFKPI": "syscall", - "syscall.SIOCSIFLINK": "syscall", - "syscall.SIOCSIFLLADDR": "syscall", - "syscall.SIOCSIFMAC": "syscall", - "syscall.SIOCSIFMAP": "syscall", - "syscall.SIOCSIFMEDIA": "syscall", - "syscall.SIOCSIFMEM": "syscall", - "syscall.SIOCSIFMETRIC": "syscall", - "syscall.SIOCSIFMTU": "syscall", - "syscall.SIOCSIFNAME": "syscall", - "syscall.SIOCSIFNETMASK": "syscall", - "syscall.SIOCSIFPFLAGS": "syscall", - "syscall.SIOCSIFPHYADDR": "syscall", - "syscall.SIOCSIFPHYS": "syscall", - "syscall.SIOCSIFPRIORITY": "syscall", - "syscall.SIOCSIFRDOMAIN": "syscall", - "syscall.SIOCSIFRTLABEL": "syscall", - "syscall.SIOCSIFRVNET": "syscall", - "syscall.SIOCSIFSLAVE": "syscall", - "syscall.SIOCSIFTIMESLOT": "syscall", - "syscall.SIOCSIFTXQLEN": "syscall", - "syscall.SIOCSIFVLAN": "syscall", - "syscall.SIOCSIFVNET": "syscall", - "syscall.SIOCSIFXFLAGS": "syscall", - "syscall.SIOCSLIFPHYADDR": "syscall", - "syscall.SIOCSLIFPHYRTABLE": "syscall", - "syscall.SIOCSLIFPHYTTL": "syscall", - "syscall.SIOCSLINKSTR": "syscall", - "syscall.SIOCSLOWAT": "syscall", - "syscall.SIOCSPGRP": "syscall", - "syscall.SIOCSRARP": "syscall", - "syscall.SIOCSSPPPPARAMS": "syscall", - "syscall.SIOCSVH": "syscall", - "syscall.SIOCSVNETID": "syscall", - "syscall.SIOCZIFDATA": "syscall", - "syscall.SIO_GET_EXTENSION_FUNCTION_POINTER": "syscall", - "syscall.SIO_GET_INTERFACE_LIST": "syscall", - "syscall.SIO_KEEPALIVE_VALS": "syscall", - "syscall.SIO_UDP_CONNRESET": "syscall", - "syscall.SOCK_CLOEXEC": "syscall", - "syscall.SOCK_DCCP": "syscall", - "syscall.SOCK_DGRAM": "syscall", - "syscall.SOCK_FLAGS_MASK": "syscall", - "syscall.SOCK_MAXADDRLEN": "syscall", - "syscall.SOCK_NONBLOCK": "syscall", - "syscall.SOCK_NOSIGPIPE": "syscall", - "syscall.SOCK_PACKET": "syscall", - "syscall.SOCK_RAW": "syscall", - "syscall.SOCK_RDM": "syscall", - "syscall.SOCK_SEQPACKET": "syscall", - "syscall.SOCK_STREAM": "syscall", - "syscall.SOL_AAL": "syscall", - "syscall.SOL_ATM": "syscall", - "syscall.SOL_DECNET": "syscall", - "syscall.SOL_ICMPV6": "syscall", - "syscall.SOL_IP": "syscall", - "syscall.SOL_IPV6": "syscall", - "syscall.SOL_IRDA": "syscall", - "syscall.SOL_PACKET": "syscall", - "syscall.SOL_RAW": "syscall", - "syscall.SOL_SOCKET": "syscall", - "syscall.SOL_TCP": "syscall", - "syscall.SOL_X25": "syscall", - "syscall.SOMAXCONN": "syscall", - "syscall.SO_ACCEPTCONN": "syscall", - "syscall.SO_ACCEPTFILTER": "syscall", - "syscall.SO_ATTACH_FILTER": "syscall", - "syscall.SO_BINDANY": "syscall", - "syscall.SO_BINDTODEVICE": "syscall", - "syscall.SO_BINTIME": "syscall", - "syscall.SO_BROADCAST": "syscall", - "syscall.SO_BSDCOMPAT": "syscall", - "syscall.SO_DEBUG": "syscall", - "syscall.SO_DETACH_FILTER": "syscall", - "syscall.SO_DOMAIN": "syscall", - "syscall.SO_DONTROUTE": "syscall", - "syscall.SO_DONTTRUNC": "syscall", - "syscall.SO_ERROR": "syscall", - "syscall.SO_KEEPALIVE": "syscall", - "syscall.SO_LABEL": "syscall", - "syscall.SO_LINGER": "syscall", - "syscall.SO_LINGER_SEC": "syscall", - "syscall.SO_LISTENINCQLEN": "syscall", - "syscall.SO_LISTENQLEN": "syscall", - "syscall.SO_LISTENQLIMIT": "syscall", - "syscall.SO_MARK": "syscall", - "syscall.SO_NETPROC": "syscall", - "syscall.SO_NKE": "syscall", - "syscall.SO_NOADDRERR": "syscall", - "syscall.SO_NOHEADER": "syscall", - "syscall.SO_NOSIGPIPE": "syscall", - "syscall.SO_NOTIFYCONFLICT": "syscall", - "syscall.SO_NO_CHECK": "syscall", - "syscall.SO_NO_DDP": "syscall", - "syscall.SO_NO_OFFLOAD": "syscall", - "syscall.SO_NP_EXTENSIONS": "syscall", - "syscall.SO_NREAD": "syscall", - "syscall.SO_NWRITE": "syscall", - "syscall.SO_OOBINLINE": "syscall", - "syscall.SO_OVERFLOWED": "syscall", - "syscall.SO_PASSCRED": "syscall", - "syscall.SO_PASSSEC": "syscall", - "syscall.SO_PEERCRED": "syscall", - "syscall.SO_PEERLABEL": "syscall", - "syscall.SO_PEERNAME": "syscall", - "syscall.SO_PEERSEC": "syscall", - "syscall.SO_PRIORITY": "syscall", - "syscall.SO_PROTOCOL": "syscall", - "syscall.SO_PROTOTYPE": "syscall", - "syscall.SO_RANDOMPORT": "syscall", - "syscall.SO_RCVBUF": "syscall", - "syscall.SO_RCVBUFFORCE": "syscall", - "syscall.SO_RCVLOWAT": "syscall", - "syscall.SO_RCVTIMEO": "syscall", - "syscall.SO_RESTRICTIONS": "syscall", - "syscall.SO_RESTRICT_DENYIN": "syscall", - "syscall.SO_RESTRICT_DENYOUT": "syscall", - "syscall.SO_RESTRICT_DENYSET": "syscall", - "syscall.SO_REUSEADDR": "syscall", - "syscall.SO_REUSEPORT": "syscall", - "syscall.SO_REUSESHAREUID": "syscall", - "syscall.SO_RTABLE": "syscall", - "syscall.SO_RXQ_OVFL": "syscall", - "syscall.SO_SECURITY_AUTHENTICATION": "syscall", - "syscall.SO_SECURITY_ENCRYPTION_NETWORK": "syscall", - "syscall.SO_SECURITY_ENCRYPTION_TRANSPORT": "syscall", - "syscall.SO_SETFIB": "syscall", - "syscall.SO_SNDBUF": "syscall", - "syscall.SO_SNDBUFFORCE": "syscall", - "syscall.SO_SNDLOWAT": "syscall", - "syscall.SO_SNDTIMEO": "syscall", - "syscall.SO_SPLICE": "syscall", - "syscall.SO_TIMESTAMP": "syscall", - "syscall.SO_TIMESTAMPING": "syscall", - "syscall.SO_TIMESTAMPNS": "syscall", - "syscall.SO_TIMESTAMP_MONOTONIC": "syscall", - "syscall.SO_TYPE": "syscall", - "syscall.SO_UPCALLCLOSEWAIT": "syscall", - "syscall.SO_UPDATE_ACCEPT_CONTEXT": "syscall", - "syscall.SO_UPDATE_CONNECT_CONTEXT": "syscall", - "syscall.SO_USELOOPBACK": "syscall", - "syscall.SO_USER_COOKIE": "syscall", - "syscall.SO_VENDOR": "syscall", - "syscall.SO_WANTMORE": "syscall", - "syscall.SO_WANTOOBFLAG": "syscall", - "syscall.SSLExtraCertChainPolicyPara": "syscall", - "syscall.STANDARD_RIGHTS_ALL": "syscall", - "syscall.STANDARD_RIGHTS_EXECUTE": "syscall", - "syscall.STANDARD_RIGHTS_READ": "syscall", - "syscall.STANDARD_RIGHTS_REQUIRED": "syscall", - "syscall.STANDARD_RIGHTS_WRITE": "syscall", - "syscall.STARTF_USESHOWWINDOW": "syscall", - "syscall.STARTF_USESTDHANDLES": "syscall", - "syscall.STD_ERROR_HANDLE": "syscall", - "syscall.STD_INPUT_HANDLE": "syscall", - "syscall.STD_OUTPUT_HANDLE": "syscall", - "syscall.SUBLANG_ENGLISH_US": "syscall", - "syscall.SW_FORCEMINIMIZE": "syscall", - "syscall.SW_HIDE": "syscall", - "syscall.SW_MAXIMIZE": "syscall", - "syscall.SW_MINIMIZE": "syscall", - "syscall.SW_NORMAL": "syscall", - "syscall.SW_RESTORE": "syscall", - "syscall.SW_SHOW": "syscall", - "syscall.SW_SHOWDEFAULT": "syscall", - "syscall.SW_SHOWMAXIMIZED": "syscall", - "syscall.SW_SHOWMINIMIZED": "syscall", - "syscall.SW_SHOWMINNOACTIVE": "syscall", - "syscall.SW_SHOWNA": "syscall", - "syscall.SW_SHOWNOACTIVATE": "syscall", - "syscall.SW_SHOWNORMAL": "syscall", - "syscall.SYMBOLIC_LINK_FLAG_DIRECTORY": "syscall", - "syscall.SYNCHRONIZE": "syscall", - "syscall.SYSCTL_VERSION": "syscall", - "syscall.SYSCTL_VERS_0": "syscall", - "syscall.SYSCTL_VERS_1": "syscall", - "syscall.SYSCTL_VERS_MASK": "syscall", - "syscall.SYS_ABORT2": "syscall", - "syscall.SYS_ACCEPT": "syscall", - "syscall.SYS_ACCEPT4": "syscall", - "syscall.SYS_ACCEPT_NOCANCEL": "syscall", - "syscall.SYS_ACCESS": "syscall", - "syscall.SYS_ACCESS_EXTENDED": "syscall", - "syscall.SYS_ACCT": "syscall", - "syscall.SYS_ADD_KEY": "syscall", - "syscall.SYS_ADD_PROFIL": "syscall", - "syscall.SYS_ADJFREQ": "syscall", - "syscall.SYS_ADJTIME": "syscall", - "syscall.SYS_ADJTIMEX": "syscall", - "syscall.SYS_AFS_SYSCALL": "syscall", - "syscall.SYS_AIO_CANCEL": "syscall", - "syscall.SYS_AIO_ERROR": "syscall", - "syscall.SYS_AIO_FSYNC": "syscall", - "syscall.SYS_AIO_READ": "syscall", - "syscall.SYS_AIO_RETURN": "syscall", - "syscall.SYS_AIO_SUSPEND": "syscall", - "syscall.SYS_AIO_SUSPEND_NOCANCEL": "syscall", - "syscall.SYS_AIO_WRITE": "syscall", - "syscall.SYS_ALARM": "syscall", - "syscall.SYS_ARCH_PRCTL": "syscall", - "syscall.SYS_ARM_FADVISE64_64": "syscall", - "syscall.SYS_ARM_SYNC_FILE_RANGE": "syscall", - "syscall.SYS_ATGETMSG": "syscall", - "syscall.SYS_ATPGETREQ": "syscall", - "syscall.SYS_ATPGETRSP": "syscall", - "syscall.SYS_ATPSNDREQ": "syscall", - "syscall.SYS_ATPSNDRSP": "syscall", - "syscall.SYS_ATPUTMSG": "syscall", - "syscall.SYS_ATSOCKET": "syscall", - "syscall.SYS_AUDIT": "syscall", - "syscall.SYS_AUDITCTL": "syscall", - "syscall.SYS_AUDITON": "syscall", - "syscall.SYS_AUDIT_SESSION_JOIN": "syscall", - "syscall.SYS_AUDIT_SESSION_PORT": "syscall", - "syscall.SYS_AUDIT_SESSION_SELF": "syscall", - "syscall.SYS_BDFLUSH": "syscall", - "syscall.SYS_BIND": "syscall", - "syscall.SYS_BINDAT": "syscall", - "syscall.SYS_BREAK": "syscall", - "syscall.SYS_BRK": "syscall", - "syscall.SYS_BSDTHREAD_CREATE": "syscall", - "syscall.SYS_BSDTHREAD_REGISTER": "syscall", - "syscall.SYS_BSDTHREAD_TERMINATE": "syscall", - "syscall.SYS_CAPGET": "syscall", - "syscall.SYS_CAPSET": "syscall", - "syscall.SYS_CAP_ENTER": "syscall", - "syscall.SYS_CAP_FCNTLS_GET": "syscall", - "syscall.SYS_CAP_FCNTLS_LIMIT": "syscall", - "syscall.SYS_CAP_GETMODE": "syscall", - "syscall.SYS_CAP_GETRIGHTS": "syscall", - "syscall.SYS_CAP_IOCTLS_GET": "syscall", - "syscall.SYS_CAP_IOCTLS_LIMIT": "syscall", - "syscall.SYS_CAP_NEW": "syscall", - "syscall.SYS_CAP_RIGHTS_GET": "syscall", - "syscall.SYS_CAP_RIGHTS_LIMIT": "syscall", - "syscall.SYS_CHDIR": "syscall", - "syscall.SYS_CHFLAGS": "syscall", - "syscall.SYS_CHFLAGSAT": "syscall", - "syscall.SYS_CHMOD": "syscall", - "syscall.SYS_CHMOD_EXTENDED": "syscall", - "syscall.SYS_CHOWN": "syscall", - "syscall.SYS_CHOWN32": "syscall", - "syscall.SYS_CHROOT": "syscall", - "syscall.SYS_CHUD": "syscall", - "syscall.SYS_CLOCK_ADJTIME": "syscall", - "syscall.SYS_CLOCK_GETCPUCLOCKID2": "syscall", - "syscall.SYS_CLOCK_GETRES": "syscall", - "syscall.SYS_CLOCK_GETTIME": "syscall", - "syscall.SYS_CLOCK_NANOSLEEP": "syscall", - "syscall.SYS_CLOCK_SETTIME": "syscall", - "syscall.SYS_CLONE": "syscall", - "syscall.SYS_CLOSE": "syscall", - "syscall.SYS_CLOSEFROM": "syscall", - "syscall.SYS_CLOSE_NOCANCEL": "syscall", - "syscall.SYS_CONNECT": "syscall", - "syscall.SYS_CONNECTAT": "syscall", - "syscall.SYS_CONNECT_NOCANCEL": "syscall", - "syscall.SYS_COPYFILE": "syscall", - "syscall.SYS_CPUSET": "syscall", - "syscall.SYS_CPUSET_GETAFFINITY": "syscall", - "syscall.SYS_CPUSET_GETID": "syscall", - "syscall.SYS_CPUSET_SETAFFINITY": "syscall", - "syscall.SYS_CPUSET_SETID": "syscall", - "syscall.SYS_CREAT": "syscall", - "syscall.SYS_CREATE_MODULE": "syscall", - "syscall.SYS_CSOPS": "syscall", - "syscall.SYS_DELETE": "syscall", - "syscall.SYS_DELETE_MODULE": "syscall", - "syscall.SYS_DUP": "syscall", - "syscall.SYS_DUP2": "syscall", - "syscall.SYS_DUP3": "syscall", - "syscall.SYS_EACCESS": "syscall", - "syscall.SYS_EPOLL_CREATE": "syscall", - "syscall.SYS_EPOLL_CREATE1": "syscall", - "syscall.SYS_EPOLL_CTL": "syscall", - "syscall.SYS_EPOLL_CTL_OLD": "syscall", - "syscall.SYS_EPOLL_PWAIT": "syscall", - "syscall.SYS_EPOLL_WAIT": "syscall", - "syscall.SYS_EPOLL_WAIT_OLD": "syscall", - "syscall.SYS_EVENTFD": "syscall", - "syscall.SYS_EVENTFD2": "syscall", - "syscall.SYS_EXCHANGEDATA": "syscall", - "syscall.SYS_EXECVE": "syscall", - "syscall.SYS_EXIT": "syscall", - "syscall.SYS_EXIT_GROUP": "syscall", - "syscall.SYS_EXTATTRCTL": "syscall", - "syscall.SYS_EXTATTR_DELETE_FD": "syscall", - "syscall.SYS_EXTATTR_DELETE_FILE": "syscall", - "syscall.SYS_EXTATTR_DELETE_LINK": "syscall", - "syscall.SYS_EXTATTR_GET_FD": "syscall", - "syscall.SYS_EXTATTR_GET_FILE": "syscall", - "syscall.SYS_EXTATTR_GET_LINK": "syscall", - "syscall.SYS_EXTATTR_LIST_FD": "syscall", - "syscall.SYS_EXTATTR_LIST_FILE": "syscall", - "syscall.SYS_EXTATTR_LIST_LINK": "syscall", - "syscall.SYS_EXTATTR_SET_FD": "syscall", - "syscall.SYS_EXTATTR_SET_FILE": "syscall", - "syscall.SYS_EXTATTR_SET_LINK": "syscall", - "syscall.SYS_FACCESSAT": "syscall", - "syscall.SYS_FADVISE64": "syscall", - "syscall.SYS_FADVISE64_64": "syscall", - "syscall.SYS_FALLOCATE": "syscall", - "syscall.SYS_FANOTIFY_INIT": "syscall", - "syscall.SYS_FANOTIFY_MARK": "syscall", - "syscall.SYS_FCHDIR": "syscall", - "syscall.SYS_FCHFLAGS": "syscall", - "syscall.SYS_FCHMOD": "syscall", - "syscall.SYS_FCHMODAT": "syscall", - "syscall.SYS_FCHMOD_EXTENDED": "syscall", - "syscall.SYS_FCHOWN": "syscall", - "syscall.SYS_FCHOWN32": "syscall", - "syscall.SYS_FCHOWNAT": "syscall", - "syscall.SYS_FCHROOT": "syscall", - "syscall.SYS_FCNTL": "syscall", - "syscall.SYS_FCNTL64": "syscall", - "syscall.SYS_FCNTL_NOCANCEL": "syscall", - "syscall.SYS_FDATASYNC": "syscall", - "syscall.SYS_FEXECVE": "syscall", - "syscall.SYS_FFCLOCK_GETCOUNTER": "syscall", - "syscall.SYS_FFCLOCK_GETESTIMATE": "syscall", - "syscall.SYS_FFCLOCK_SETESTIMATE": "syscall", - "syscall.SYS_FFSCTL": "syscall", - "syscall.SYS_FGETATTRLIST": "syscall", - "syscall.SYS_FGETXATTR": "syscall", - "syscall.SYS_FHOPEN": "syscall", - "syscall.SYS_FHSTAT": "syscall", - "syscall.SYS_FHSTATFS": "syscall", - "syscall.SYS_FILEPORT_MAKEFD": "syscall", - "syscall.SYS_FILEPORT_MAKEPORT": "syscall", - "syscall.SYS_FKTRACE": "syscall", - "syscall.SYS_FLISTXATTR": "syscall", - "syscall.SYS_FLOCK": "syscall", - "syscall.SYS_FORK": "syscall", - "syscall.SYS_FPATHCONF": "syscall", - "syscall.SYS_FREEBSD6_FTRUNCATE": "syscall", - "syscall.SYS_FREEBSD6_LSEEK": "syscall", - "syscall.SYS_FREEBSD6_MMAP": "syscall", - "syscall.SYS_FREEBSD6_PREAD": "syscall", - "syscall.SYS_FREEBSD6_PWRITE": "syscall", - "syscall.SYS_FREEBSD6_TRUNCATE": "syscall", - "syscall.SYS_FREMOVEXATTR": "syscall", - "syscall.SYS_FSCTL": "syscall", - "syscall.SYS_FSETATTRLIST": "syscall", - "syscall.SYS_FSETXATTR": "syscall", - "syscall.SYS_FSGETPATH": "syscall", - "syscall.SYS_FSTAT": "syscall", - "syscall.SYS_FSTAT64": "syscall", - "syscall.SYS_FSTAT64_EXTENDED": "syscall", - "syscall.SYS_FSTATAT": "syscall", - "syscall.SYS_FSTATAT64": "syscall", - "syscall.SYS_FSTATFS": "syscall", - "syscall.SYS_FSTATFS64": "syscall", - "syscall.SYS_FSTATV": "syscall", - "syscall.SYS_FSTATVFS1": "syscall", - "syscall.SYS_FSTAT_EXTENDED": "syscall", - "syscall.SYS_FSYNC": "syscall", - "syscall.SYS_FSYNC_NOCANCEL": "syscall", - "syscall.SYS_FSYNC_RANGE": "syscall", - "syscall.SYS_FTIME": "syscall", - "syscall.SYS_FTRUNCATE": "syscall", - "syscall.SYS_FTRUNCATE64": "syscall", - "syscall.SYS_FUTEX": "syscall", - "syscall.SYS_FUTIMENS": "syscall", - "syscall.SYS_FUTIMES": "syscall", - "syscall.SYS_FUTIMESAT": "syscall", - "syscall.SYS_GETATTRLIST": "syscall", - "syscall.SYS_GETAUDIT": "syscall", - "syscall.SYS_GETAUDIT_ADDR": "syscall", - "syscall.SYS_GETAUID": "syscall", - "syscall.SYS_GETCONTEXT": "syscall", - "syscall.SYS_GETCPU": "syscall", - "syscall.SYS_GETCWD": "syscall", - "syscall.SYS_GETDENTS": "syscall", - "syscall.SYS_GETDENTS64": "syscall", - "syscall.SYS_GETDIRENTRIES": "syscall", - "syscall.SYS_GETDIRENTRIES64": "syscall", - "syscall.SYS_GETDIRENTRIESATTR": "syscall", - "syscall.SYS_GETDTABLECOUNT": "syscall", - "syscall.SYS_GETDTABLESIZE": "syscall", - "syscall.SYS_GETEGID": "syscall", - "syscall.SYS_GETEGID32": "syscall", - "syscall.SYS_GETEUID": "syscall", - "syscall.SYS_GETEUID32": "syscall", - "syscall.SYS_GETFH": "syscall", - "syscall.SYS_GETFSSTAT": "syscall", - "syscall.SYS_GETFSSTAT64": "syscall", - "syscall.SYS_GETGID": "syscall", - "syscall.SYS_GETGID32": "syscall", - "syscall.SYS_GETGROUPS": "syscall", - "syscall.SYS_GETGROUPS32": "syscall", - "syscall.SYS_GETHOSTUUID": "syscall", - "syscall.SYS_GETITIMER": "syscall", - "syscall.SYS_GETLCID": "syscall", - "syscall.SYS_GETLOGIN": "syscall", - "syscall.SYS_GETLOGINCLASS": "syscall", - "syscall.SYS_GETPEERNAME": "syscall", - "syscall.SYS_GETPGID": "syscall", - "syscall.SYS_GETPGRP": "syscall", - "syscall.SYS_GETPID": "syscall", - "syscall.SYS_GETPMSG": "syscall", - "syscall.SYS_GETPPID": "syscall", - "syscall.SYS_GETPRIORITY": "syscall", - "syscall.SYS_GETRESGID": "syscall", - "syscall.SYS_GETRESGID32": "syscall", - "syscall.SYS_GETRESUID": "syscall", - "syscall.SYS_GETRESUID32": "syscall", - "syscall.SYS_GETRLIMIT": "syscall", - "syscall.SYS_GETRTABLE": "syscall", - "syscall.SYS_GETRUSAGE": "syscall", - "syscall.SYS_GETSGROUPS": "syscall", - "syscall.SYS_GETSID": "syscall", - "syscall.SYS_GETSOCKNAME": "syscall", - "syscall.SYS_GETSOCKOPT": "syscall", - "syscall.SYS_GETTHRID": "syscall", - "syscall.SYS_GETTID": "syscall", - "syscall.SYS_GETTIMEOFDAY": "syscall", - "syscall.SYS_GETUID": "syscall", - "syscall.SYS_GETUID32": "syscall", - "syscall.SYS_GETVFSSTAT": "syscall", - "syscall.SYS_GETWGROUPS": "syscall", - "syscall.SYS_GETXATTR": "syscall", - "syscall.SYS_GET_KERNEL_SYMS": "syscall", - "syscall.SYS_GET_MEMPOLICY": "syscall", - "syscall.SYS_GET_ROBUST_LIST": "syscall", - "syscall.SYS_GET_THREAD_AREA": "syscall", - "syscall.SYS_GTTY": "syscall", - "syscall.SYS_IDENTITYSVC": "syscall", - "syscall.SYS_IDLE": "syscall", - "syscall.SYS_INITGROUPS": "syscall", - "syscall.SYS_INIT_MODULE": "syscall", - "syscall.SYS_INOTIFY_ADD_WATCH": "syscall", - "syscall.SYS_INOTIFY_INIT": "syscall", - "syscall.SYS_INOTIFY_INIT1": "syscall", - "syscall.SYS_INOTIFY_RM_WATCH": "syscall", - "syscall.SYS_IOCTL": "syscall", - "syscall.SYS_IOPERM": "syscall", - "syscall.SYS_IOPL": "syscall", - "syscall.SYS_IOPOLICYSYS": "syscall", - "syscall.SYS_IOPRIO_GET": "syscall", - "syscall.SYS_IOPRIO_SET": "syscall", - "syscall.SYS_IO_CANCEL": "syscall", - "syscall.SYS_IO_DESTROY": "syscall", - "syscall.SYS_IO_GETEVENTS": "syscall", - "syscall.SYS_IO_SETUP": "syscall", - "syscall.SYS_IO_SUBMIT": "syscall", - "syscall.SYS_IPC": "syscall", - "syscall.SYS_ISSETUGID": "syscall", - "syscall.SYS_JAIL": "syscall", - "syscall.SYS_JAIL_ATTACH": "syscall", - "syscall.SYS_JAIL_GET": "syscall", - "syscall.SYS_JAIL_REMOVE": "syscall", - "syscall.SYS_JAIL_SET": "syscall", - "syscall.SYS_KDEBUG_TRACE": "syscall", - "syscall.SYS_KENV": "syscall", - "syscall.SYS_KEVENT": "syscall", - "syscall.SYS_KEVENT64": "syscall", - "syscall.SYS_KEXEC_LOAD": "syscall", - "syscall.SYS_KEYCTL": "syscall", - "syscall.SYS_KILL": "syscall", - "syscall.SYS_KLDFIND": "syscall", - "syscall.SYS_KLDFIRSTMOD": "syscall", - "syscall.SYS_KLDLOAD": "syscall", - "syscall.SYS_KLDNEXT": "syscall", - "syscall.SYS_KLDSTAT": "syscall", - "syscall.SYS_KLDSYM": "syscall", - "syscall.SYS_KLDUNLOAD": "syscall", - "syscall.SYS_KLDUNLOADF": "syscall", - "syscall.SYS_KQUEUE": "syscall", - "syscall.SYS_KQUEUE1": "syscall", - "syscall.SYS_KTIMER_CREATE": "syscall", - "syscall.SYS_KTIMER_DELETE": "syscall", - "syscall.SYS_KTIMER_GETOVERRUN": "syscall", - "syscall.SYS_KTIMER_GETTIME": "syscall", - "syscall.SYS_KTIMER_SETTIME": "syscall", - "syscall.SYS_KTRACE": "syscall", - "syscall.SYS_LCHFLAGS": "syscall", - "syscall.SYS_LCHMOD": "syscall", - "syscall.SYS_LCHOWN": "syscall", - "syscall.SYS_LCHOWN32": "syscall", - "syscall.SYS_LGETFH": "syscall", - "syscall.SYS_LGETXATTR": "syscall", - "syscall.SYS_LINK": "syscall", - "syscall.SYS_LINKAT": "syscall", - "syscall.SYS_LIO_LISTIO": "syscall", - "syscall.SYS_LISTEN": "syscall", - "syscall.SYS_LISTXATTR": "syscall", - "syscall.SYS_LLISTXATTR": "syscall", - "syscall.SYS_LOCK": "syscall", - "syscall.SYS_LOOKUP_DCOOKIE": "syscall", - "syscall.SYS_LPATHCONF": "syscall", - "syscall.SYS_LREMOVEXATTR": "syscall", - "syscall.SYS_LSEEK": "syscall", - "syscall.SYS_LSETXATTR": "syscall", - "syscall.SYS_LSTAT": "syscall", - "syscall.SYS_LSTAT64": "syscall", - "syscall.SYS_LSTAT64_EXTENDED": "syscall", - "syscall.SYS_LSTATV": "syscall", - "syscall.SYS_LSTAT_EXTENDED": "syscall", - "syscall.SYS_LUTIMES": "syscall", - "syscall.SYS_MAC_SYSCALL": "syscall", - "syscall.SYS_MADVISE": "syscall", - "syscall.SYS_MADVISE1": "syscall", - "syscall.SYS_MAXSYSCALL": "syscall", - "syscall.SYS_MBIND": "syscall", - "syscall.SYS_MIGRATE_PAGES": "syscall", - "syscall.SYS_MINCORE": "syscall", - "syscall.SYS_MINHERIT": "syscall", - "syscall.SYS_MKCOMPLEX": "syscall", - "syscall.SYS_MKDIR": "syscall", - "syscall.SYS_MKDIRAT": "syscall", - "syscall.SYS_MKDIR_EXTENDED": "syscall", - "syscall.SYS_MKFIFO": "syscall", - "syscall.SYS_MKFIFOAT": "syscall", - "syscall.SYS_MKFIFO_EXTENDED": "syscall", - "syscall.SYS_MKNOD": "syscall", - "syscall.SYS_MKNODAT": "syscall", - "syscall.SYS_MLOCK": "syscall", - "syscall.SYS_MLOCKALL": "syscall", - "syscall.SYS_MMAP": "syscall", - "syscall.SYS_MMAP2": "syscall", - "syscall.SYS_MODCTL": "syscall", - "syscall.SYS_MODFIND": "syscall", - "syscall.SYS_MODFNEXT": "syscall", - "syscall.SYS_MODIFY_LDT": "syscall", - "syscall.SYS_MODNEXT": "syscall", - "syscall.SYS_MODSTAT": "syscall", - "syscall.SYS_MODWATCH": "syscall", - "syscall.SYS_MOUNT": "syscall", - "syscall.SYS_MOVE_PAGES": "syscall", - "syscall.SYS_MPROTECT": "syscall", - "syscall.SYS_MPX": "syscall", - "syscall.SYS_MQUERY": "syscall", - "syscall.SYS_MQ_GETSETATTR": "syscall", - "syscall.SYS_MQ_NOTIFY": "syscall", - "syscall.SYS_MQ_OPEN": "syscall", - "syscall.SYS_MQ_TIMEDRECEIVE": "syscall", - "syscall.SYS_MQ_TIMEDSEND": "syscall", - "syscall.SYS_MQ_UNLINK": "syscall", - "syscall.SYS_MREMAP": "syscall", - "syscall.SYS_MSGCTL": "syscall", - "syscall.SYS_MSGGET": "syscall", - "syscall.SYS_MSGRCV": "syscall", - "syscall.SYS_MSGRCV_NOCANCEL": "syscall", - "syscall.SYS_MSGSND": "syscall", - "syscall.SYS_MSGSND_NOCANCEL": "syscall", - "syscall.SYS_MSGSYS": "syscall", - "syscall.SYS_MSYNC": "syscall", - "syscall.SYS_MSYNC_NOCANCEL": "syscall", - "syscall.SYS_MUNLOCK": "syscall", - "syscall.SYS_MUNLOCKALL": "syscall", - "syscall.SYS_MUNMAP": "syscall", - "syscall.SYS_NAME_TO_HANDLE_AT": "syscall", - "syscall.SYS_NANOSLEEP": "syscall", - "syscall.SYS_NEWFSTATAT": "syscall", - "syscall.SYS_NFSCLNT": "syscall", - "syscall.SYS_NFSSERVCTL": "syscall", - "syscall.SYS_NFSSVC": "syscall", - "syscall.SYS_NFSTAT": "syscall", - "syscall.SYS_NICE": "syscall", - "syscall.SYS_NLSTAT": "syscall", - "syscall.SYS_NMOUNT": "syscall", - "syscall.SYS_NSTAT": "syscall", - "syscall.SYS_NTP_ADJTIME": "syscall", - "syscall.SYS_NTP_GETTIME": "syscall", - "syscall.SYS_OABI_SYSCALL_BASE": "syscall", - "syscall.SYS_OBREAK": "syscall", - "syscall.SYS_OLDFSTAT": "syscall", - "syscall.SYS_OLDLSTAT": "syscall", - "syscall.SYS_OLDOLDUNAME": "syscall", - "syscall.SYS_OLDSTAT": "syscall", - "syscall.SYS_OLDUNAME": "syscall", - "syscall.SYS_OPEN": "syscall", - "syscall.SYS_OPENAT": "syscall", - "syscall.SYS_OPENBSD_POLL": "syscall", - "syscall.SYS_OPEN_BY_HANDLE_AT": "syscall", - "syscall.SYS_OPEN_EXTENDED": "syscall", - "syscall.SYS_OPEN_NOCANCEL": "syscall", - "syscall.SYS_OVADVISE": "syscall", - "syscall.SYS_PACCEPT": "syscall", - "syscall.SYS_PATHCONF": "syscall", - "syscall.SYS_PAUSE": "syscall", - "syscall.SYS_PCICONFIG_IOBASE": "syscall", - "syscall.SYS_PCICONFIG_READ": "syscall", - "syscall.SYS_PCICONFIG_WRITE": "syscall", - "syscall.SYS_PDFORK": "syscall", - "syscall.SYS_PDGETPID": "syscall", - "syscall.SYS_PDKILL": "syscall", - "syscall.SYS_PERF_EVENT_OPEN": "syscall", - "syscall.SYS_PERSONALITY": "syscall", - "syscall.SYS_PID_HIBERNATE": "syscall", - "syscall.SYS_PID_RESUME": "syscall", - "syscall.SYS_PID_SHUTDOWN_SOCKETS": "syscall", - "syscall.SYS_PID_SUSPEND": "syscall", - "syscall.SYS_PIPE": "syscall", - "syscall.SYS_PIPE2": "syscall", - "syscall.SYS_PIVOT_ROOT": "syscall", - "syscall.SYS_PMC_CONTROL": "syscall", - "syscall.SYS_PMC_GET_INFO": "syscall", - "syscall.SYS_POLL": "syscall", - "syscall.SYS_POLLTS": "syscall", - "syscall.SYS_POLL_NOCANCEL": "syscall", - "syscall.SYS_POSIX_FADVISE": "syscall", - "syscall.SYS_POSIX_FALLOCATE": "syscall", - "syscall.SYS_POSIX_OPENPT": "syscall", - "syscall.SYS_POSIX_SPAWN": "syscall", - "syscall.SYS_PPOLL": "syscall", - "syscall.SYS_PRCTL": "syscall", - "syscall.SYS_PREAD": "syscall", - "syscall.SYS_PREAD64": "syscall", - "syscall.SYS_PREADV": "syscall", - "syscall.SYS_PREAD_NOCANCEL": "syscall", - "syscall.SYS_PRLIMIT64": "syscall", - "syscall.SYS_PROCCTL": "syscall", - "syscall.SYS_PROCESS_POLICY": "syscall", - "syscall.SYS_PROCESS_VM_READV": "syscall", - "syscall.SYS_PROCESS_VM_WRITEV": "syscall", - "syscall.SYS_PROC_INFO": "syscall", - "syscall.SYS_PROF": "syscall", - "syscall.SYS_PROFIL": "syscall", - "syscall.SYS_PSELECT": "syscall", - "syscall.SYS_PSELECT6": "syscall", - "syscall.SYS_PSET_ASSIGN": "syscall", - "syscall.SYS_PSET_CREATE": "syscall", - "syscall.SYS_PSET_DESTROY": "syscall", - "syscall.SYS_PSYNCH_CVBROAD": "syscall", - "syscall.SYS_PSYNCH_CVCLRPREPOST": "syscall", - "syscall.SYS_PSYNCH_CVSIGNAL": "syscall", - "syscall.SYS_PSYNCH_CVWAIT": "syscall", - "syscall.SYS_PSYNCH_MUTEXDROP": "syscall", - "syscall.SYS_PSYNCH_MUTEXWAIT": "syscall", - "syscall.SYS_PSYNCH_RW_DOWNGRADE": "syscall", - "syscall.SYS_PSYNCH_RW_LONGRDLOCK": "syscall", - "syscall.SYS_PSYNCH_RW_RDLOCK": "syscall", - "syscall.SYS_PSYNCH_RW_UNLOCK": "syscall", - "syscall.SYS_PSYNCH_RW_UNLOCK2": "syscall", - "syscall.SYS_PSYNCH_RW_UPGRADE": "syscall", - "syscall.SYS_PSYNCH_RW_WRLOCK": "syscall", - "syscall.SYS_PSYNCH_RW_YIELDWRLOCK": "syscall", - "syscall.SYS_PTRACE": "syscall", - "syscall.SYS_PUTPMSG": "syscall", - "syscall.SYS_PWRITE": "syscall", - "syscall.SYS_PWRITE64": "syscall", - "syscall.SYS_PWRITEV": "syscall", - "syscall.SYS_PWRITE_NOCANCEL": "syscall", - "syscall.SYS_QUERY_MODULE": "syscall", - "syscall.SYS_QUOTACTL": "syscall", - "syscall.SYS_RASCTL": "syscall", - "syscall.SYS_RCTL_ADD_RULE": "syscall", - "syscall.SYS_RCTL_GET_LIMITS": "syscall", - "syscall.SYS_RCTL_GET_RACCT": "syscall", - "syscall.SYS_RCTL_GET_RULES": "syscall", - "syscall.SYS_RCTL_REMOVE_RULE": "syscall", - "syscall.SYS_READ": "syscall", - "syscall.SYS_READAHEAD": "syscall", - "syscall.SYS_READDIR": "syscall", - "syscall.SYS_READLINK": "syscall", - "syscall.SYS_READLINKAT": "syscall", - "syscall.SYS_READV": "syscall", - "syscall.SYS_READV_NOCANCEL": "syscall", - "syscall.SYS_READ_NOCANCEL": "syscall", - "syscall.SYS_REBOOT": "syscall", - "syscall.SYS_RECV": "syscall", - "syscall.SYS_RECVFROM": "syscall", - "syscall.SYS_RECVFROM_NOCANCEL": "syscall", - "syscall.SYS_RECVMMSG": "syscall", - "syscall.SYS_RECVMSG": "syscall", - "syscall.SYS_RECVMSG_NOCANCEL": "syscall", - "syscall.SYS_REMAP_FILE_PAGES": "syscall", - "syscall.SYS_REMOVEXATTR": "syscall", - "syscall.SYS_RENAME": "syscall", - "syscall.SYS_RENAMEAT": "syscall", - "syscall.SYS_REQUEST_KEY": "syscall", - "syscall.SYS_RESTART_SYSCALL": "syscall", - "syscall.SYS_REVOKE": "syscall", - "syscall.SYS_RFORK": "syscall", - "syscall.SYS_RMDIR": "syscall", - "syscall.SYS_RTPRIO": "syscall", - "syscall.SYS_RTPRIO_THREAD": "syscall", - "syscall.SYS_RT_SIGACTION": "syscall", - "syscall.SYS_RT_SIGPENDING": "syscall", - "syscall.SYS_RT_SIGPROCMASK": "syscall", - "syscall.SYS_RT_SIGQUEUEINFO": "syscall", - "syscall.SYS_RT_SIGRETURN": "syscall", - "syscall.SYS_RT_SIGSUSPEND": "syscall", - "syscall.SYS_RT_SIGTIMEDWAIT": "syscall", - "syscall.SYS_RT_TGSIGQUEUEINFO": "syscall", - "syscall.SYS_SBRK": "syscall", - "syscall.SYS_SCHED_GETAFFINITY": "syscall", - "syscall.SYS_SCHED_GETPARAM": "syscall", - "syscall.SYS_SCHED_GETSCHEDULER": "syscall", - "syscall.SYS_SCHED_GET_PRIORITY_MAX": "syscall", - "syscall.SYS_SCHED_GET_PRIORITY_MIN": "syscall", - "syscall.SYS_SCHED_RR_GET_INTERVAL": "syscall", - "syscall.SYS_SCHED_SETAFFINITY": "syscall", - "syscall.SYS_SCHED_SETPARAM": "syscall", - "syscall.SYS_SCHED_SETSCHEDULER": "syscall", - "syscall.SYS_SCHED_YIELD": "syscall", - "syscall.SYS_SCTP_GENERIC_RECVMSG": "syscall", - "syscall.SYS_SCTP_GENERIC_SENDMSG": "syscall", - "syscall.SYS_SCTP_GENERIC_SENDMSG_IOV": "syscall", - "syscall.SYS_SCTP_PEELOFF": "syscall", - "syscall.SYS_SEARCHFS": "syscall", - "syscall.SYS_SECURITY": "syscall", - "syscall.SYS_SELECT": "syscall", - "syscall.SYS_SELECT_NOCANCEL": "syscall", - "syscall.SYS_SEMCONFIG": "syscall", - "syscall.SYS_SEMCTL": "syscall", - "syscall.SYS_SEMGET": "syscall", - "syscall.SYS_SEMOP": "syscall", - "syscall.SYS_SEMSYS": "syscall", - "syscall.SYS_SEMTIMEDOP": "syscall", - "syscall.SYS_SEM_CLOSE": "syscall", - "syscall.SYS_SEM_DESTROY": "syscall", - "syscall.SYS_SEM_GETVALUE": "syscall", - "syscall.SYS_SEM_INIT": "syscall", - "syscall.SYS_SEM_OPEN": "syscall", - "syscall.SYS_SEM_POST": "syscall", - "syscall.SYS_SEM_TRYWAIT": "syscall", - "syscall.SYS_SEM_UNLINK": "syscall", - "syscall.SYS_SEM_WAIT": "syscall", - "syscall.SYS_SEM_WAIT_NOCANCEL": "syscall", - "syscall.SYS_SEND": "syscall", - "syscall.SYS_SENDFILE": "syscall", - "syscall.SYS_SENDFILE64": "syscall", - "syscall.SYS_SENDMMSG": "syscall", - "syscall.SYS_SENDMSG": "syscall", - "syscall.SYS_SENDMSG_NOCANCEL": "syscall", - "syscall.SYS_SENDTO": "syscall", - "syscall.SYS_SENDTO_NOCANCEL": "syscall", - "syscall.SYS_SETATTRLIST": "syscall", - "syscall.SYS_SETAUDIT": "syscall", - "syscall.SYS_SETAUDIT_ADDR": "syscall", - "syscall.SYS_SETAUID": "syscall", - "syscall.SYS_SETCONTEXT": "syscall", - "syscall.SYS_SETDOMAINNAME": "syscall", - "syscall.SYS_SETEGID": "syscall", - "syscall.SYS_SETEUID": "syscall", - "syscall.SYS_SETFIB": "syscall", - "syscall.SYS_SETFSGID": "syscall", - "syscall.SYS_SETFSGID32": "syscall", - "syscall.SYS_SETFSUID": "syscall", - "syscall.SYS_SETFSUID32": "syscall", - "syscall.SYS_SETGID": "syscall", - "syscall.SYS_SETGID32": "syscall", - "syscall.SYS_SETGROUPS": "syscall", - "syscall.SYS_SETGROUPS32": "syscall", - "syscall.SYS_SETHOSTNAME": "syscall", - "syscall.SYS_SETITIMER": "syscall", - "syscall.SYS_SETLCID": "syscall", - "syscall.SYS_SETLOGIN": "syscall", - "syscall.SYS_SETLOGINCLASS": "syscall", - "syscall.SYS_SETNS": "syscall", - "syscall.SYS_SETPGID": "syscall", - "syscall.SYS_SETPRIORITY": "syscall", - "syscall.SYS_SETPRIVEXEC": "syscall", - "syscall.SYS_SETREGID": "syscall", - "syscall.SYS_SETREGID32": "syscall", - "syscall.SYS_SETRESGID": "syscall", - "syscall.SYS_SETRESGID32": "syscall", - "syscall.SYS_SETRESUID": "syscall", - "syscall.SYS_SETRESUID32": "syscall", - "syscall.SYS_SETREUID": "syscall", - "syscall.SYS_SETREUID32": "syscall", - "syscall.SYS_SETRLIMIT": "syscall", - "syscall.SYS_SETRTABLE": "syscall", - "syscall.SYS_SETSGROUPS": "syscall", - "syscall.SYS_SETSID": "syscall", - "syscall.SYS_SETSOCKOPT": "syscall", - "syscall.SYS_SETTID": "syscall", - "syscall.SYS_SETTID_WITH_PID": "syscall", - "syscall.SYS_SETTIMEOFDAY": "syscall", - "syscall.SYS_SETUID": "syscall", - "syscall.SYS_SETUID32": "syscall", - "syscall.SYS_SETWGROUPS": "syscall", - "syscall.SYS_SETXATTR": "syscall", - "syscall.SYS_SET_MEMPOLICY": "syscall", - "syscall.SYS_SET_ROBUST_LIST": "syscall", - "syscall.SYS_SET_THREAD_AREA": "syscall", - "syscall.SYS_SET_TID_ADDRESS": "syscall", - "syscall.SYS_SGETMASK": "syscall", - "syscall.SYS_SHARED_REGION_CHECK_NP": "syscall", - "syscall.SYS_SHARED_REGION_MAP_AND_SLIDE_NP": "syscall", - "syscall.SYS_SHMAT": "syscall", - "syscall.SYS_SHMCTL": "syscall", - "syscall.SYS_SHMDT": "syscall", - "syscall.SYS_SHMGET": "syscall", - "syscall.SYS_SHMSYS": "syscall", - "syscall.SYS_SHM_OPEN": "syscall", - "syscall.SYS_SHM_UNLINK": "syscall", - "syscall.SYS_SHUTDOWN": "syscall", - "syscall.SYS_SIGACTION": "syscall", - "syscall.SYS_SIGALTSTACK": "syscall", - "syscall.SYS_SIGNAL": "syscall", - "syscall.SYS_SIGNALFD": "syscall", - "syscall.SYS_SIGNALFD4": "syscall", - "syscall.SYS_SIGPENDING": "syscall", - "syscall.SYS_SIGPROCMASK": "syscall", - "syscall.SYS_SIGQUEUE": "syscall", - "syscall.SYS_SIGQUEUEINFO": "syscall", - "syscall.SYS_SIGRETURN": "syscall", - "syscall.SYS_SIGSUSPEND": "syscall", - "syscall.SYS_SIGSUSPEND_NOCANCEL": "syscall", - "syscall.SYS_SIGTIMEDWAIT": "syscall", - "syscall.SYS_SIGWAIT": "syscall", - "syscall.SYS_SIGWAITINFO": "syscall", - "syscall.SYS_SOCKET": "syscall", - "syscall.SYS_SOCKETCALL": "syscall", - "syscall.SYS_SOCKETPAIR": "syscall", - "syscall.SYS_SPLICE": "syscall", - "syscall.SYS_SSETMASK": "syscall", - "syscall.SYS_SSTK": "syscall", - "syscall.SYS_STACK_SNAPSHOT": "syscall", - "syscall.SYS_STAT": "syscall", - "syscall.SYS_STAT64": "syscall", - "syscall.SYS_STAT64_EXTENDED": "syscall", - "syscall.SYS_STATFS": "syscall", - "syscall.SYS_STATFS64": "syscall", - "syscall.SYS_STATV": "syscall", - "syscall.SYS_STATVFS1": "syscall", - "syscall.SYS_STAT_EXTENDED": "syscall", - "syscall.SYS_STIME": "syscall", - "syscall.SYS_STTY": "syscall", - "syscall.SYS_SWAPCONTEXT": "syscall", - "syscall.SYS_SWAPCTL": "syscall", - "syscall.SYS_SWAPOFF": "syscall", - "syscall.SYS_SWAPON": "syscall", - "syscall.SYS_SYMLINK": "syscall", - "syscall.SYS_SYMLINKAT": "syscall", - "syscall.SYS_SYNC": "syscall", - "syscall.SYS_SYNCFS": "syscall", - "syscall.SYS_SYNC_FILE_RANGE": "syscall", - "syscall.SYS_SYSARCH": "syscall", - "syscall.SYS_SYSCALL": "syscall", - "syscall.SYS_SYSCALL_BASE": "syscall", - "syscall.SYS_SYSFS": "syscall", - "syscall.SYS_SYSINFO": "syscall", - "syscall.SYS_SYSLOG": "syscall", - "syscall.SYS_TEE": "syscall", - "syscall.SYS_TGKILL": "syscall", - "syscall.SYS_THREAD_SELFID": "syscall", - "syscall.SYS_THR_CREATE": "syscall", - "syscall.SYS_THR_EXIT": "syscall", - "syscall.SYS_THR_KILL": "syscall", - "syscall.SYS_THR_KILL2": "syscall", - "syscall.SYS_THR_NEW": "syscall", - "syscall.SYS_THR_SELF": "syscall", - "syscall.SYS_THR_SET_NAME": "syscall", - "syscall.SYS_THR_SUSPEND": "syscall", - "syscall.SYS_THR_WAKE": "syscall", - "syscall.SYS_TIME": "syscall", - "syscall.SYS_TIMERFD_CREATE": "syscall", - "syscall.SYS_TIMERFD_GETTIME": "syscall", - "syscall.SYS_TIMERFD_SETTIME": "syscall", - "syscall.SYS_TIMER_CREATE": "syscall", - "syscall.SYS_TIMER_DELETE": "syscall", - "syscall.SYS_TIMER_GETOVERRUN": "syscall", - "syscall.SYS_TIMER_GETTIME": "syscall", - "syscall.SYS_TIMER_SETTIME": "syscall", - "syscall.SYS_TIMES": "syscall", - "syscall.SYS_TKILL": "syscall", - "syscall.SYS_TRUNCATE": "syscall", - "syscall.SYS_TRUNCATE64": "syscall", - "syscall.SYS_TUXCALL": "syscall", - "syscall.SYS_UGETRLIMIT": "syscall", - "syscall.SYS_ULIMIT": "syscall", - "syscall.SYS_UMASK": "syscall", - "syscall.SYS_UMASK_EXTENDED": "syscall", - "syscall.SYS_UMOUNT": "syscall", - "syscall.SYS_UMOUNT2": "syscall", - "syscall.SYS_UNAME": "syscall", - "syscall.SYS_UNDELETE": "syscall", - "syscall.SYS_UNLINK": "syscall", - "syscall.SYS_UNLINKAT": "syscall", - "syscall.SYS_UNMOUNT": "syscall", - "syscall.SYS_UNSHARE": "syscall", - "syscall.SYS_USELIB": "syscall", - "syscall.SYS_USTAT": "syscall", - "syscall.SYS_UTIME": "syscall", - "syscall.SYS_UTIMENSAT": "syscall", - "syscall.SYS_UTIMES": "syscall", - "syscall.SYS_UTRACE": "syscall", - "syscall.SYS_UUIDGEN": "syscall", - "syscall.SYS_VADVISE": "syscall", - "syscall.SYS_VFORK": "syscall", - "syscall.SYS_VHANGUP": "syscall", - "syscall.SYS_VM86": "syscall", - "syscall.SYS_VM86OLD": "syscall", - "syscall.SYS_VMSPLICE": "syscall", - "syscall.SYS_VM_PRESSURE_MONITOR": "syscall", - "syscall.SYS_VSERVER": "syscall", - "syscall.SYS_WAIT4": "syscall", - "syscall.SYS_WAIT4_NOCANCEL": "syscall", - "syscall.SYS_WAIT6": "syscall", - "syscall.SYS_WAITEVENT": "syscall", - "syscall.SYS_WAITID": "syscall", - "syscall.SYS_WAITID_NOCANCEL": "syscall", - "syscall.SYS_WAITPID": "syscall", - "syscall.SYS_WATCHEVENT": "syscall", - "syscall.SYS_WORKQ_KERNRETURN": "syscall", - "syscall.SYS_WORKQ_OPEN": "syscall", - "syscall.SYS_WRITE": "syscall", - "syscall.SYS_WRITEV": "syscall", - "syscall.SYS_WRITEV_NOCANCEL": "syscall", - "syscall.SYS_WRITE_NOCANCEL": "syscall", - "syscall.SYS_YIELD": "syscall", - "syscall.SYS__LLSEEK": "syscall", - "syscall.SYS__LWP_CONTINUE": "syscall", - "syscall.SYS__LWP_CREATE": "syscall", - "syscall.SYS__LWP_CTL": "syscall", - "syscall.SYS__LWP_DETACH": "syscall", - "syscall.SYS__LWP_EXIT": "syscall", - "syscall.SYS__LWP_GETNAME": "syscall", - "syscall.SYS__LWP_GETPRIVATE": "syscall", - "syscall.SYS__LWP_KILL": "syscall", - "syscall.SYS__LWP_PARK": "syscall", - "syscall.SYS__LWP_SELF": "syscall", - "syscall.SYS__LWP_SETNAME": "syscall", - "syscall.SYS__LWP_SETPRIVATE": "syscall", - "syscall.SYS__LWP_SUSPEND": "syscall", - "syscall.SYS__LWP_UNPARK": "syscall", - "syscall.SYS__LWP_UNPARK_ALL": "syscall", - "syscall.SYS__LWP_WAIT": "syscall", - "syscall.SYS__LWP_WAKEUP": "syscall", - "syscall.SYS__NEWSELECT": "syscall", - "syscall.SYS__PSET_BIND": "syscall", - "syscall.SYS__SCHED_GETAFFINITY": "syscall", - "syscall.SYS__SCHED_GETPARAM": "syscall", - "syscall.SYS__SCHED_SETAFFINITY": "syscall", - "syscall.SYS__SCHED_SETPARAM": "syscall", - "syscall.SYS__SYSCTL": "syscall", - "syscall.SYS__UMTX_LOCK": "syscall", - "syscall.SYS__UMTX_OP": "syscall", - "syscall.SYS__UMTX_UNLOCK": "syscall", - "syscall.SYS___ACL_ACLCHECK_FD": "syscall", - "syscall.SYS___ACL_ACLCHECK_FILE": "syscall", - "syscall.SYS___ACL_ACLCHECK_LINK": "syscall", - "syscall.SYS___ACL_DELETE_FD": "syscall", - "syscall.SYS___ACL_DELETE_FILE": "syscall", - "syscall.SYS___ACL_DELETE_LINK": "syscall", - "syscall.SYS___ACL_GET_FD": "syscall", - "syscall.SYS___ACL_GET_FILE": "syscall", - "syscall.SYS___ACL_GET_LINK": "syscall", - "syscall.SYS___ACL_SET_FD": "syscall", - "syscall.SYS___ACL_SET_FILE": "syscall", - "syscall.SYS___ACL_SET_LINK": "syscall", - "syscall.SYS___CLONE": "syscall", - "syscall.SYS___DISABLE_THREADSIGNAL": "syscall", - "syscall.SYS___GETCWD": "syscall", - "syscall.SYS___GETLOGIN": "syscall", - "syscall.SYS___GET_TCB": "syscall", - "syscall.SYS___MAC_EXECVE": "syscall", - "syscall.SYS___MAC_GETFSSTAT": "syscall", - "syscall.SYS___MAC_GET_FD": "syscall", - "syscall.SYS___MAC_GET_FILE": "syscall", - "syscall.SYS___MAC_GET_LCID": "syscall", - "syscall.SYS___MAC_GET_LCTX": "syscall", - "syscall.SYS___MAC_GET_LINK": "syscall", - "syscall.SYS___MAC_GET_MOUNT": "syscall", - "syscall.SYS___MAC_GET_PID": "syscall", - "syscall.SYS___MAC_GET_PROC": "syscall", - "syscall.SYS___MAC_MOUNT": "syscall", - "syscall.SYS___MAC_SET_FD": "syscall", - "syscall.SYS___MAC_SET_FILE": "syscall", - "syscall.SYS___MAC_SET_LCTX": "syscall", - "syscall.SYS___MAC_SET_LINK": "syscall", - "syscall.SYS___MAC_SET_PROC": "syscall", - "syscall.SYS___MAC_SYSCALL": "syscall", - "syscall.SYS___OLD_SEMWAIT_SIGNAL": "syscall", - "syscall.SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL": "syscall", - "syscall.SYS___POSIX_CHOWN": "syscall", - "syscall.SYS___POSIX_FCHOWN": "syscall", - "syscall.SYS___POSIX_LCHOWN": "syscall", - "syscall.SYS___POSIX_RENAME": "syscall", - "syscall.SYS___PTHREAD_CANCELED": "syscall", - "syscall.SYS___PTHREAD_CHDIR": "syscall", - "syscall.SYS___PTHREAD_FCHDIR": "syscall", - "syscall.SYS___PTHREAD_KILL": "syscall", - "syscall.SYS___PTHREAD_MARKCANCEL": "syscall", - "syscall.SYS___PTHREAD_SIGMASK": "syscall", - "syscall.SYS___QUOTACTL": "syscall", - "syscall.SYS___SEMCTL": "syscall", - "syscall.SYS___SEMWAIT_SIGNAL": "syscall", - "syscall.SYS___SEMWAIT_SIGNAL_NOCANCEL": "syscall", - "syscall.SYS___SETLOGIN": "syscall", - "syscall.SYS___SETUGID": "syscall", - "syscall.SYS___SET_TCB": "syscall", - "syscall.SYS___SIGACTION_SIGTRAMP": "syscall", - "syscall.SYS___SIGTIMEDWAIT": "syscall", - "syscall.SYS___SIGWAIT": "syscall", - "syscall.SYS___SIGWAIT_NOCANCEL": "syscall", - "syscall.SYS___SYSCTL": "syscall", - "syscall.SYS___TFORK": "syscall", - "syscall.SYS___THREXIT": "syscall", - "syscall.SYS___THRSIGDIVERT": "syscall", - "syscall.SYS___THRSLEEP": "syscall", - "syscall.SYS___THRWAKEUP": "syscall", - "syscall.S_ARCH1": "syscall", - "syscall.S_ARCH2": "syscall", - "syscall.S_BLKSIZE": "syscall", - "syscall.S_IEXEC": "syscall", - "syscall.S_IFBLK": "syscall", - "syscall.S_IFCHR": "syscall", - "syscall.S_IFDIR": "syscall", - "syscall.S_IFIFO": "syscall", - "syscall.S_IFLNK": "syscall", - "syscall.S_IFMT": "syscall", - "syscall.S_IFREG": "syscall", - "syscall.S_IFSOCK": "syscall", - "syscall.S_IFWHT": "syscall", - "syscall.S_IREAD": "syscall", - "syscall.S_IRGRP": "syscall", - "syscall.S_IROTH": "syscall", - "syscall.S_IRUSR": "syscall", - "syscall.S_IRWXG": "syscall", - "syscall.S_IRWXO": "syscall", - "syscall.S_IRWXU": "syscall", - "syscall.S_ISGID": "syscall", - "syscall.S_ISTXT": "syscall", - "syscall.S_ISUID": "syscall", - "syscall.S_ISVTX": "syscall", - "syscall.S_IWGRP": "syscall", - "syscall.S_IWOTH": "syscall", - "syscall.S_IWRITE": "syscall", - "syscall.S_IWUSR": "syscall", - "syscall.S_IXGRP": "syscall", - "syscall.S_IXOTH": "syscall", - "syscall.S_IXUSR": "syscall", - "syscall.S_LOGIN_SET": "syscall", - "syscall.SecurityAttributes": "syscall", - "syscall.Seek": "syscall", - "syscall.Select": "syscall", - "syscall.Sendfile": "syscall", - "syscall.Sendmsg": "syscall", - "syscall.SendmsgN": "syscall", - "syscall.Sendto": "syscall", - "syscall.Servent": "syscall", - "syscall.SetBpf": "syscall", - "syscall.SetBpfBuflen": "syscall", - "syscall.SetBpfDatalink": "syscall", - "syscall.SetBpfHeadercmpl": "syscall", - "syscall.SetBpfImmediate": "syscall", - "syscall.SetBpfInterface": "syscall", - "syscall.SetBpfPromisc": "syscall", - "syscall.SetBpfTimeout": "syscall", - "syscall.SetCurrentDirectory": "syscall", - "syscall.SetEndOfFile": "syscall", - "syscall.SetEnvironmentVariable": "syscall", - "syscall.SetFileAttributes": "syscall", - "syscall.SetFileCompletionNotificationModes": "syscall", - "syscall.SetFilePointer": "syscall", - "syscall.SetFileTime": "syscall", - "syscall.SetHandleInformation": "syscall", - "syscall.SetKevent": "syscall", - "syscall.SetLsfPromisc": "syscall", - "syscall.SetNonblock": "syscall", - "syscall.Setdomainname": "syscall", - "syscall.Setegid": "syscall", - "syscall.Setenv": "syscall", - "syscall.Seteuid": "syscall", - "syscall.Setfsgid": "syscall", - "syscall.Setfsuid": "syscall", - "syscall.Setgid": "syscall", - "syscall.Setgroups": "syscall", - "syscall.Sethostname": "syscall", - "syscall.Setlogin": "syscall", - "syscall.Setpgid": "syscall", - "syscall.Setpriority": "syscall", - "syscall.Setprivexec": "syscall", - "syscall.Setregid": "syscall", - "syscall.Setresgid": "syscall", - "syscall.Setresuid": "syscall", - "syscall.Setreuid": "syscall", - "syscall.Setrlimit": "syscall", - "syscall.Setsid": "syscall", - "syscall.Setsockopt": "syscall", - "syscall.SetsockoptByte": "syscall", - "syscall.SetsockoptICMPv6Filter": "syscall", - "syscall.SetsockoptIPMreq": "syscall", - "syscall.SetsockoptIPMreqn": "syscall", - "syscall.SetsockoptIPv6Mreq": "syscall", - "syscall.SetsockoptInet4Addr": "syscall", - "syscall.SetsockoptInt": "syscall", - "syscall.SetsockoptLinger": "syscall", - "syscall.SetsockoptString": "syscall", - "syscall.SetsockoptTimeval": "syscall", - "syscall.Settimeofday": "syscall", - "syscall.Setuid": "syscall", - "syscall.Setxattr": "syscall", - "syscall.Shutdown": "syscall", - "syscall.SidTypeAlias": "syscall", - "syscall.SidTypeComputer": "syscall", - "syscall.SidTypeDeletedAccount": "syscall", - "syscall.SidTypeDomain": "syscall", - "syscall.SidTypeGroup": "syscall", - "syscall.SidTypeInvalid": "syscall", - "syscall.SidTypeLabel": "syscall", - "syscall.SidTypeUnknown": "syscall", - "syscall.SidTypeUser": "syscall", - "syscall.SidTypeWellKnownGroup": "syscall", - "syscall.Signal": "syscall", - "syscall.SizeofBpfHdr": "syscall", - "syscall.SizeofBpfInsn": "syscall", - "syscall.SizeofBpfProgram": "syscall", - "syscall.SizeofBpfStat": "syscall", - "syscall.SizeofBpfVersion": "syscall", - "syscall.SizeofBpfZbuf": "syscall", - "syscall.SizeofBpfZbufHeader": "syscall", - "syscall.SizeofCmsghdr": "syscall", - "syscall.SizeofICMPv6Filter": "syscall", - "syscall.SizeofIPMreq": "syscall", - "syscall.SizeofIPMreqn": "syscall", - "syscall.SizeofIPv6MTUInfo": "syscall", - "syscall.SizeofIPv6Mreq": "syscall", - "syscall.SizeofIfAddrmsg": "syscall", - "syscall.SizeofIfAnnounceMsghdr": "syscall", - "syscall.SizeofIfData": "syscall", - "syscall.SizeofIfInfomsg": "syscall", - "syscall.SizeofIfMsghdr": "syscall", - "syscall.SizeofIfaMsghdr": "syscall", - "syscall.SizeofIfmaMsghdr": "syscall", - "syscall.SizeofIfmaMsghdr2": "syscall", - "syscall.SizeofInet4Pktinfo": "syscall", - "syscall.SizeofInet6Pktinfo": "syscall", - "syscall.SizeofInotifyEvent": "syscall", - "syscall.SizeofLinger": "syscall", - "syscall.SizeofMsghdr": "syscall", - "syscall.SizeofNlAttr": "syscall", - "syscall.SizeofNlMsgerr": "syscall", - "syscall.SizeofNlMsghdr": "syscall", - "syscall.SizeofRtAttr": "syscall", - "syscall.SizeofRtGenmsg": "syscall", - "syscall.SizeofRtMetrics": "syscall", - "syscall.SizeofRtMsg": "syscall", - "syscall.SizeofRtMsghdr": "syscall", - "syscall.SizeofRtNexthop": "syscall", - "syscall.SizeofSockFilter": "syscall", - "syscall.SizeofSockFprog": "syscall", - "syscall.SizeofSockaddrAny": "syscall", - "syscall.SizeofSockaddrDatalink": "syscall", - "syscall.SizeofSockaddrInet4": "syscall", - "syscall.SizeofSockaddrInet6": "syscall", - "syscall.SizeofSockaddrLinklayer": "syscall", - "syscall.SizeofSockaddrNetlink": "syscall", - "syscall.SizeofSockaddrUnix": "syscall", - "syscall.SizeofTCPInfo": "syscall", - "syscall.SizeofUcred": "syscall", - "syscall.SlicePtrFromStrings": "syscall", - "syscall.SockFilter": "syscall", - "syscall.SockFprog": "syscall", - "syscall.SockaddrDatalink": "syscall", - "syscall.SockaddrGen": "syscall", - "syscall.SockaddrInet4": "syscall", - "syscall.SockaddrInet6": "syscall", - "syscall.SockaddrLinklayer": "syscall", - "syscall.SockaddrNetlink": "syscall", - "syscall.SockaddrUnix": "syscall", - "syscall.Socket": "syscall", - "syscall.SocketControlMessage": "syscall", - "syscall.SocketDisableIPv6": "syscall", - "syscall.Socketpair": "syscall", - "syscall.Splice": "syscall", - "syscall.StartProcess": "syscall", - "syscall.StartupInfo": "syscall", - "syscall.Stat": "syscall", - "syscall.Stat_t": "syscall", - "syscall.Statfs": "syscall", - "syscall.Statfs_t": "syscall", - "syscall.Stderr": "syscall", - "syscall.Stdin": "syscall", - "syscall.Stdout": "syscall", - "syscall.StringBytePtr": "syscall", - "syscall.StringByteSlice": "syscall", - "syscall.StringSlicePtr": "syscall", - "syscall.StringToSid": "syscall", - "syscall.StringToUTF16": "syscall", - "syscall.StringToUTF16Ptr": "syscall", - "syscall.Symlink": "syscall", - "syscall.Sync": "syscall", - "syscall.SyncFileRange": "syscall", - "syscall.SysProcAttr": "syscall", - "syscall.SysProcIDMap": "syscall", - "syscall.Syscall": "syscall", - "syscall.Syscall12": "syscall", - "syscall.Syscall15": "syscall", - "syscall.Syscall6": "syscall", - "syscall.Syscall9": "syscall", - "syscall.Sysctl": "syscall", - "syscall.SysctlUint32": "syscall", - "syscall.Sysctlnode": "syscall", - "syscall.Sysinfo": "syscall", - "syscall.Sysinfo_t": "syscall", - "syscall.Systemtime": "syscall", - "syscall.TCGETS": "syscall", - "syscall.TCIFLUSH": "syscall", - "syscall.TCIOFLUSH": "syscall", - "syscall.TCOFLUSH": "syscall", - "syscall.TCPInfo": "syscall", - "syscall.TCPKeepalive": "syscall", - "syscall.TCP_CA_NAME_MAX": "syscall", - "syscall.TCP_CONGCTL": "syscall", - "syscall.TCP_CONGESTION": "syscall", - "syscall.TCP_CONNECTIONTIMEOUT": "syscall", - "syscall.TCP_CORK": "syscall", - "syscall.TCP_DEFER_ACCEPT": "syscall", - "syscall.TCP_INFO": "syscall", - "syscall.TCP_KEEPALIVE": "syscall", - "syscall.TCP_KEEPCNT": "syscall", - "syscall.TCP_KEEPIDLE": "syscall", - "syscall.TCP_KEEPINIT": "syscall", - "syscall.TCP_KEEPINTVL": "syscall", - "syscall.TCP_LINGER2": "syscall", - "syscall.TCP_MAXBURST": "syscall", - "syscall.TCP_MAXHLEN": "syscall", - "syscall.TCP_MAXOLEN": "syscall", - "syscall.TCP_MAXSEG": "syscall", - "syscall.TCP_MAXWIN": "syscall", - "syscall.TCP_MAX_SACK": "syscall", - "syscall.TCP_MAX_WINSHIFT": "syscall", - "syscall.TCP_MD5SIG": "syscall", - "syscall.TCP_MD5SIG_MAXKEYLEN": "syscall", - "syscall.TCP_MINMSS": "syscall", - "syscall.TCP_MINMSSOVERLOAD": "syscall", - "syscall.TCP_MSS": "syscall", - "syscall.TCP_NODELAY": "syscall", - "syscall.TCP_NOOPT": "syscall", - "syscall.TCP_NOPUSH": "syscall", - "syscall.TCP_NSTATES": "syscall", - "syscall.TCP_QUICKACK": "syscall", - "syscall.TCP_RXT_CONNDROPTIME": "syscall", - "syscall.TCP_RXT_FINDROP": "syscall", - "syscall.TCP_SACK_ENABLE": "syscall", - "syscall.TCP_SYNCNT": "syscall", - "syscall.TCP_VENDOR": "syscall", - "syscall.TCP_WINDOW_CLAMP": "syscall", - "syscall.TCSAFLUSH": "syscall", - "syscall.TCSETS": "syscall", - "syscall.TF_DISCONNECT": "syscall", - "syscall.TF_REUSE_SOCKET": "syscall", - "syscall.TF_USE_DEFAULT_WORKER": "syscall", - "syscall.TF_USE_KERNEL_APC": "syscall", - "syscall.TF_USE_SYSTEM_THREAD": "syscall", - "syscall.TF_WRITE_BEHIND": "syscall", - "syscall.TH32CS_INHERIT": "syscall", - "syscall.TH32CS_SNAPALL": "syscall", - "syscall.TH32CS_SNAPHEAPLIST": "syscall", - "syscall.TH32CS_SNAPMODULE": "syscall", - "syscall.TH32CS_SNAPMODULE32": "syscall", - "syscall.TH32CS_SNAPPROCESS": "syscall", - "syscall.TH32CS_SNAPTHREAD": "syscall", - "syscall.TIME_ZONE_ID_DAYLIGHT": "syscall", - "syscall.TIME_ZONE_ID_STANDARD": "syscall", - "syscall.TIME_ZONE_ID_UNKNOWN": "syscall", - "syscall.TIOCCBRK": "syscall", - "syscall.TIOCCDTR": "syscall", - "syscall.TIOCCONS": "syscall", - "syscall.TIOCDCDTIMESTAMP": "syscall", - "syscall.TIOCDRAIN": "syscall", - "syscall.TIOCDSIMICROCODE": "syscall", - "syscall.TIOCEXCL": "syscall", - "syscall.TIOCEXT": "syscall", - "syscall.TIOCFLAG_CDTRCTS": "syscall", - "syscall.TIOCFLAG_CLOCAL": "syscall", - "syscall.TIOCFLAG_CRTSCTS": "syscall", - "syscall.TIOCFLAG_MDMBUF": "syscall", - "syscall.TIOCFLAG_PPS": "syscall", - "syscall.TIOCFLAG_SOFTCAR": "syscall", - "syscall.TIOCFLUSH": "syscall", - "syscall.TIOCGDEV": "syscall", - "syscall.TIOCGDRAINWAIT": "syscall", - "syscall.TIOCGETA": "syscall", - "syscall.TIOCGETD": "syscall", - "syscall.TIOCGFLAGS": "syscall", - "syscall.TIOCGICOUNT": "syscall", - "syscall.TIOCGLCKTRMIOS": "syscall", - "syscall.TIOCGLINED": "syscall", - "syscall.TIOCGPGRP": "syscall", - "syscall.TIOCGPTN": "syscall", - "syscall.TIOCGQSIZE": "syscall", - "syscall.TIOCGRANTPT": "syscall", - "syscall.TIOCGRS485": "syscall", - "syscall.TIOCGSERIAL": "syscall", - "syscall.TIOCGSID": "syscall", - "syscall.TIOCGSIZE": "syscall", - "syscall.TIOCGSOFTCAR": "syscall", - "syscall.TIOCGTSTAMP": "syscall", - "syscall.TIOCGWINSZ": "syscall", - "syscall.TIOCINQ": "syscall", - "syscall.TIOCIXOFF": "syscall", - "syscall.TIOCIXON": "syscall", - "syscall.TIOCLINUX": "syscall", - "syscall.TIOCMBIC": "syscall", - "syscall.TIOCMBIS": "syscall", - "syscall.TIOCMGDTRWAIT": "syscall", - "syscall.TIOCMGET": "syscall", - "syscall.TIOCMIWAIT": "syscall", - "syscall.TIOCMODG": "syscall", - "syscall.TIOCMODS": "syscall", - "syscall.TIOCMSDTRWAIT": "syscall", - "syscall.TIOCMSET": "syscall", - "syscall.TIOCM_CAR": "syscall", - "syscall.TIOCM_CD": "syscall", - "syscall.TIOCM_CTS": "syscall", - "syscall.TIOCM_DCD": "syscall", - "syscall.TIOCM_DSR": "syscall", - "syscall.TIOCM_DTR": "syscall", - "syscall.TIOCM_LE": "syscall", - "syscall.TIOCM_RI": "syscall", - "syscall.TIOCM_RNG": "syscall", - "syscall.TIOCM_RTS": "syscall", - "syscall.TIOCM_SR": "syscall", - "syscall.TIOCM_ST": "syscall", - "syscall.TIOCNOTTY": "syscall", - "syscall.TIOCNXCL": "syscall", - "syscall.TIOCOUTQ": "syscall", - "syscall.TIOCPKT": "syscall", - "syscall.TIOCPKT_DATA": "syscall", - "syscall.TIOCPKT_DOSTOP": "syscall", - "syscall.TIOCPKT_FLUSHREAD": "syscall", - "syscall.TIOCPKT_FLUSHWRITE": "syscall", - "syscall.TIOCPKT_IOCTL": "syscall", - "syscall.TIOCPKT_NOSTOP": "syscall", - "syscall.TIOCPKT_START": "syscall", - "syscall.TIOCPKT_STOP": "syscall", - "syscall.TIOCPTMASTER": "syscall", - "syscall.TIOCPTMGET": "syscall", - "syscall.TIOCPTSNAME": "syscall", - "syscall.TIOCPTYGNAME": "syscall", - "syscall.TIOCPTYGRANT": "syscall", - "syscall.TIOCPTYUNLK": "syscall", - "syscall.TIOCRCVFRAME": "syscall", - "syscall.TIOCREMOTE": "syscall", - "syscall.TIOCSBRK": "syscall", - "syscall.TIOCSCONS": "syscall", - "syscall.TIOCSCTTY": "syscall", - "syscall.TIOCSDRAINWAIT": "syscall", - "syscall.TIOCSDTR": "syscall", - "syscall.TIOCSERCONFIG": "syscall", - "syscall.TIOCSERGETLSR": "syscall", - "syscall.TIOCSERGETMULTI": "syscall", - "syscall.TIOCSERGSTRUCT": "syscall", - "syscall.TIOCSERGWILD": "syscall", - "syscall.TIOCSERSETMULTI": "syscall", - "syscall.TIOCSERSWILD": "syscall", - "syscall.TIOCSER_TEMT": "syscall", - "syscall.TIOCSETA": "syscall", - "syscall.TIOCSETAF": "syscall", - "syscall.TIOCSETAW": "syscall", - "syscall.TIOCSETD": "syscall", - "syscall.TIOCSFLAGS": "syscall", - "syscall.TIOCSIG": "syscall", - "syscall.TIOCSLCKTRMIOS": "syscall", - "syscall.TIOCSLINED": "syscall", - "syscall.TIOCSPGRP": "syscall", - "syscall.TIOCSPTLCK": "syscall", - "syscall.TIOCSQSIZE": "syscall", - "syscall.TIOCSRS485": "syscall", - "syscall.TIOCSSERIAL": "syscall", - "syscall.TIOCSSIZE": "syscall", - "syscall.TIOCSSOFTCAR": "syscall", - "syscall.TIOCSTART": "syscall", - "syscall.TIOCSTAT": "syscall", - "syscall.TIOCSTI": "syscall", - "syscall.TIOCSTOP": "syscall", - "syscall.TIOCSTSTAMP": "syscall", - "syscall.TIOCSWINSZ": "syscall", - "syscall.TIOCTIMESTAMP": "syscall", - "syscall.TIOCUCNTL": "syscall", - "syscall.TIOCVHANGUP": "syscall", - "syscall.TIOCXMTFRAME": "syscall", - "syscall.TOKEN_ADJUST_DEFAULT": "syscall", - "syscall.TOKEN_ADJUST_GROUPS": "syscall", - "syscall.TOKEN_ADJUST_PRIVILEGES": "syscall", - "syscall.TOKEN_ALL_ACCESS": "syscall", - "syscall.TOKEN_ASSIGN_PRIMARY": "syscall", - "syscall.TOKEN_DUPLICATE": "syscall", - "syscall.TOKEN_EXECUTE": "syscall", - "syscall.TOKEN_IMPERSONATE": "syscall", - "syscall.TOKEN_QUERY": "syscall", - "syscall.TOKEN_QUERY_SOURCE": "syscall", - "syscall.TOKEN_READ": "syscall", - "syscall.TOKEN_WRITE": "syscall", - "syscall.TOSTOP": "syscall", - "syscall.TRUNCATE_EXISTING": "syscall", - "syscall.TUNATTACHFILTER": "syscall", - "syscall.TUNDETACHFILTER": "syscall", - "syscall.TUNGETFEATURES": "syscall", - "syscall.TUNGETIFF": "syscall", - "syscall.TUNGETSNDBUF": "syscall", - "syscall.TUNGETVNETHDRSZ": "syscall", - "syscall.TUNSETDEBUG": "syscall", - "syscall.TUNSETGROUP": "syscall", - "syscall.TUNSETIFF": "syscall", - "syscall.TUNSETLINK": "syscall", - "syscall.TUNSETNOCSUM": "syscall", - "syscall.TUNSETOFFLOAD": "syscall", - "syscall.TUNSETOWNER": "syscall", - "syscall.TUNSETPERSIST": "syscall", - "syscall.TUNSETSNDBUF": "syscall", - "syscall.TUNSETTXFILTER": "syscall", - "syscall.TUNSETVNETHDRSZ": "syscall", - "syscall.Tee": "syscall", - "syscall.TerminateProcess": "syscall", - "syscall.Termios": "syscall", - "syscall.Tgkill": "syscall", - "syscall.Time": "syscall", - "syscall.Time_t": "syscall", - "syscall.Times": "syscall", - "syscall.Timespec": "syscall", - "syscall.TimespecToNsec": "syscall", - "syscall.Timeval": "syscall", - "syscall.Timeval32": "syscall", - "syscall.TimevalToNsec": "syscall", - "syscall.Timex": "syscall", - "syscall.Timezoneinformation": "syscall", - "syscall.Tms": "syscall", - "syscall.Token": "syscall", - "syscall.TokenAccessInformation": "syscall", - "syscall.TokenAuditPolicy": "syscall", - "syscall.TokenDefaultDacl": "syscall", - "syscall.TokenElevation": "syscall", - "syscall.TokenElevationType": "syscall", - "syscall.TokenGroups": "syscall", - "syscall.TokenGroupsAndPrivileges": "syscall", - "syscall.TokenHasRestrictions": "syscall", - "syscall.TokenImpersonationLevel": "syscall", - "syscall.TokenIntegrityLevel": "syscall", - "syscall.TokenLinkedToken": "syscall", - "syscall.TokenLogonSid": "syscall", - "syscall.TokenMandatoryPolicy": "syscall", - "syscall.TokenOrigin": "syscall", - "syscall.TokenOwner": "syscall", - "syscall.TokenPrimaryGroup": "syscall", - "syscall.TokenPrivileges": "syscall", - "syscall.TokenRestrictedSids": "syscall", - "syscall.TokenSandBoxInert": "syscall", - "syscall.TokenSessionId": "syscall", - "syscall.TokenSessionReference": "syscall", - "syscall.TokenSource": "syscall", - "syscall.TokenStatistics": "syscall", - "syscall.TokenType": "syscall", - "syscall.TokenUIAccess": "syscall", - "syscall.TokenUser": "syscall", - "syscall.TokenVirtualizationAllowed": "syscall", - "syscall.TokenVirtualizationEnabled": "syscall", - "syscall.Tokenprimarygroup": "syscall", - "syscall.Tokenuser": "syscall", - "syscall.TranslateAccountName": "syscall", - "syscall.TranslateName": "syscall", - "syscall.TransmitFile": "syscall", - "syscall.TransmitFileBuffers": "syscall", - "syscall.Truncate": "syscall", - "syscall.USAGE_MATCH_TYPE_AND": "syscall", - "syscall.USAGE_MATCH_TYPE_OR": "syscall", - "syscall.UTF16FromString": "syscall", - "syscall.UTF16PtrFromString": "syscall", - "syscall.UTF16ToString": "syscall", - "syscall.Ucred": "syscall", - "syscall.Umask": "syscall", - "syscall.Uname": "syscall", - "syscall.Undelete": "syscall", - "syscall.UnixCredentials": "syscall", - "syscall.UnixRights": "syscall", - "syscall.Unlink": "syscall", - "syscall.Unlinkat": "syscall", - "syscall.UnmapViewOfFile": "syscall", - "syscall.Unmount": "syscall", - "syscall.Unsetenv": "syscall", - "syscall.Unshare": "syscall", - "syscall.UserInfo10": "syscall", - "syscall.Ustat": "syscall", - "syscall.Ustat_t": "syscall", - "syscall.Utimbuf": "syscall", - "syscall.Utime": "syscall", - "syscall.Utimes": "syscall", - "syscall.UtimesNano": "syscall", - "syscall.Utsname": "syscall", - "syscall.VDISCARD": "syscall", - "syscall.VDSUSP": "syscall", - "syscall.VEOF": "syscall", - "syscall.VEOL": "syscall", - "syscall.VEOL2": "syscall", - "syscall.VERASE": "syscall", - "syscall.VERASE2": "syscall", - "syscall.VINTR": "syscall", - "syscall.VKILL": "syscall", - "syscall.VLNEXT": "syscall", - "syscall.VMIN": "syscall", - "syscall.VQUIT": "syscall", - "syscall.VREPRINT": "syscall", - "syscall.VSTART": "syscall", - "syscall.VSTATUS": "syscall", - "syscall.VSTOP": "syscall", - "syscall.VSUSP": "syscall", - "syscall.VSWTC": "syscall", - "syscall.VT0": "syscall", - "syscall.VT1": "syscall", - "syscall.VTDLY": "syscall", - "syscall.VTIME": "syscall", - "syscall.VWERASE": "syscall", - "syscall.VirtualLock": "syscall", - "syscall.VirtualUnlock": "syscall", - "syscall.WAIT_ABANDONED": "syscall", - "syscall.WAIT_FAILED": "syscall", - "syscall.WAIT_OBJECT_0": "syscall", - "syscall.WAIT_TIMEOUT": "syscall", - "syscall.WALL": "syscall", - "syscall.WALLSIG": "syscall", - "syscall.WALTSIG": "syscall", - "syscall.WCLONE": "syscall", - "syscall.WCONTINUED": "syscall", - "syscall.WCOREFLAG": "syscall", - "syscall.WEXITED": "syscall", - "syscall.WLINUXCLONE": "syscall", - "syscall.WNOHANG": "syscall", - "syscall.WNOTHREAD": "syscall", - "syscall.WNOWAIT": "syscall", - "syscall.WNOZOMBIE": "syscall", - "syscall.WOPTSCHECKED": "syscall", - "syscall.WORDSIZE": "syscall", - "syscall.WSABuf": "syscall", - "syscall.WSACleanup": "syscall", - "syscall.WSADESCRIPTION_LEN": "syscall", - "syscall.WSAData": "syscall", - "syscall.WSAEACCES": "syscall", - "syscall.WSAECONNRESET": "syscall", - "syscall.WSAEnumProtocols": "syscall", - "syscall.WSAID_CONNECTEX": "syscall", - "syscall.WSAIoctl": "syscall", - "syscall.WSAPROTOCOL_LEN": "syscall", - "syscall.WSAProtocolChain": "syscall", - "syscall.WSAProtocolInfo": "syscall", - "syscall.WSARecv": "syscall", - "syscall.WSARecvFrom": "syscall", - "syscall.WSASYS_STATUS_LEN": "syscall", - "syscall.WSASend": "syscall", - "syscall.WSASendTo": "syscall", - "syscall.WSASendto": "syscall", - "syscall.WSAStartup": "syscall", - "syscall.WSTOPPED": "syscall", - "syscall.WTRAPPED": "syscall", - "syscall.WUNTRACED": "syscall", - "syscall.Wait4": "syscall", - "syscall.WaitForSingleObject": "syscall", - "syscall.WaitStatus": "syscall", - "syscall.Win32FileAttributeData": "syscall", - "syscall.Win32finddata": "syscall", - "syscall.Write": "syscall", - "syscall.WriteConsole": "syscall", - "syscall.WriteFile": "syscall", - "syscall.X509_ASN_ENCODING": "syscall", - "syscall.XCASE": "syscall", - "syscall.XP1_CONNECTIONLESS": "syscall", - "syscall.XP1_CONNECT_DATA": "syscall", - "syscall.XP1_DISCONNECT_DATA": "syscall", - "syscall.XP1_EXPEDITED_DATA": "syscall", - "syscall.XP1_GRACEFUL_CLOSE": "syscall", - "syscall.XP1_GUARANTEED_DELIVERY": "syscall", - "syscall.XP1_GUARANTEED_ORDER": "syscall", - "syscall.XP1_IFS_HANDLES": "syscall", - "syscall.XP1_MESSAGE_ORIENTED": "syscall", - "syscall.XP1_MULTIPOINT_CONTROL_PLANE": "syscall", - "syscall.XP1_MULTIPOINT_DATA_PLANE": "syscall", - "syscall.XP1_PARTIAL_MESSAGE": "syscall", - "syscall.XP1_PSEUDO_STREAM": "syscall", - "syscall.XP1_QOS_SUPPORTED": "syscall", - "syscall.XP1_SAN_SUPPORT_SDP": "syscall", - "syscall.XP1_SUPPORT_BROADCAST": "syscall", - "syscall.XP1_SUPPORT_MULTIPOINT": "syscall", - "syscall.XP1_UNI_RECV": "syscall", - "syscall.XP1_UNI_SEND": "syscall", - "syslog.Dial": "log/syslog", - "syslog.LOG_ALERT": "log/syslog", - "syslog.LOG_AUTH": "log/syslog", - "syslog.LOG_AUTHPRIV": "log/syslog", - "syslog.LOG_CRIT": "log/syslog", - "syslog.LOG_CRON": "log/syslog", - "syslog.LOG_DAEMON": "log/syslog", - "syslog.LOG_DEBUG": "log/syslog", - "syslog.LOG_EMERG": "log/syslog", - "syslog.LOG_ERR": "log/syslog", - "syslog.LOG_FTP": "log/syslog", - "syslog.LOG_INFO": "log/syslog", - "syslog.LOG_KERN": "log/syslog", - "syslog.LOG_LOCAL0": "log/syslog", - "syslog.LOG_LOCAL1": "log/syslog", - "syslog.LOG_LOCAL2": "log/syslog", - "syslog.LOG_LOCAL3": "log/syslog", - "syslog.LOG_LOCAL4": "log/syslog", - "syslog.LOG_LOCAL5": "log/syslog", - "syslog.LOG_LOCAL6": "log/syslog", - "syslog.LOG_LOCAL7": "log/syslog", - "syslog.LOG_LPR": "log/syslog", - "syslog.LOG_MAIL": "log/syslog", - "syslog.LOG_NEWS": "log/syslog", - "syslog.LOG_NOTICE": "log/syslog", - "syslog.LOG_SYSLOG": "log/syslog", - "syslog.LOG_USER": "log/syslog", - "syslog.LOG_UUCP": "log/syslog", - "syslog.LOG_WARNING": "log/syslog", - "syslog.New": "log/syslog", - "syslog.NewLogger": "log/syslog", - "syslog.Priority": "log/syslog", - "syslog.Writer": "log/syslog", - "tabwriter.AlignRight": "text/tabwriter", - "tabwriter.Debug": "text/tabwriter", - "tabwriter.DiscardEmptyColumns": "text/tabwriter", - "tabwriter.Escape": "text/tabwriter", - "tabwriter.FilterHTML": "text/tabwriter", - "tabwriter.NewWriter": "text/tabwriter", - "tabwriter.StripEscape": "text/tabwriter", - "tabwriter.TabIndent": "text/tabwriter", - "tabwriter.Writer": "text/tabwriter", - "tar.ErrFieldTooLong": "archive/tar", - "tar.ErrHeader": "archive/tar", - "tar.ErrWriteAfterClose": "archive/tar", - "tar.ErrWriteTooLong": "archive/tar", - "tar.FileInfoHeader": "archive/tar", - "tar.Header": "archive/tar", - "tar.NewReader": "archive/tar", - "tar.NewWriter": "archive/tar", - "tar.Reader": "archive/tar", - "tar.TypeBlock": "archive/tar", - "tar.TypeChar": "archive/tar", - "tar.TypeCont": "archive/tar", - "tar.TypeDir": "archive/tar", - "tar.TypeFifo": "archive/tar", - "tar.TypeGNULongLink": "archive/tar", - "tar.TypeGNULongName": "archive/tar", - "tar.TypeGNUSparse": "archive/tar", - "tar.TypeLink": "archive/tar", - "tar.TypeReg": "archive/tar", - "tar.TypeRegA": "archive/tar", - "tar.TypeSymlink": "archive/tar", - "tar.TypeXGlobalHeader": "archive/tar", - "tar.TypeXHeader": "archive/tar", - "tar.Writer": "archive/tar", - "template.CSS": "html/template", - "template.ErrAmbigContext": "html/template", - "template.ErrBadHTML": "html/template", - "template.ErrBranchEnd": "html/template", - "template.ErrEndContext": "html/template", - "template.ErrNoSuchTemplate": "html/template", - "template.ErrOutputContext": "html/template", - "template.ErrPartialCharset": "html/template", - "template.ErrPartialEscape": "html/template", - "template.ErrRangeLoopReentry": "html/template", - "template.ErrSlashAmbig": "html/template", - "template.Error": "html/template", - "template.ErrorCode": "html/template", - "template.ExecError": "text/template", - // "template.FuncMap" is ambiguous - "template.HTML": "html/template", - "template.HTMLAttr": "html/template", - // "template.HTMLEscape" is ambiguous - // "template.HTMLEscapeString" is ambiguous - // "template.HTMLEscaper" is ambiguous - // "template.IsTrue" is ambiguous - "template.JS": "html/template", - // "template.JSEscape" is ambiguous - // "template.JSEscapeString" is ambiguous - // "template.JSEscaper" is ambiguous - "template.JSStr": "html/template", - // "template.Must" is ambiguous - // "template.New" is ambiguous - "template.OK": "html/template", - // "template.ParseFiles" is ambiguous - // "template.ParseGlob" is ambiguous - // "template.Template" is ambiguous - "template.URL": "html/template", - // "template.URLQueryEscaper" is ambiguous - "testing.AllocsPerRun": "testing", - "testing.B": "testing", - "testing.Benchmark": "testing", - "testing.BenchmarkResult": "testing", - "testing.Cover": "testing", - "testing.CoverBlock": "testing", - "testing.Coverage": "testing", - "testing.InternalBenchmark": "testing", - "testing.InternalExample": "testing", - "testing.InternalTest": "testing", - "testing.M": "testing", - "testing.Main": "testing", - "testing.MainStart": "testing", - "testing.PB": "testing", - "testing.RegisterCover": "testing", - "testing.RunBenchmarks": "testing", - "testing.RunExamples": "testing", - "testing.RunTests": "testing", - "testing.Short": "testing", - "testing.T": "testing", - "testing.Verbose": "testing", - "textproto.CanonicalMIMEHeaderKey": "net/textproto", - "textproto.Conn": "net/textproto", - "textproto.Dial": "net/textproto", - "textproto.Error": "net/textproto", - "textproto.MIMEHeader": "net/textproto", - "textproto.NewConn": "net/textproto", - "textproto.NewReader": "net/textproto", - "textproto.NewWriter": "net/textproto", - "textproto.Pipeline": "net/textproto", - "textproto.ProtocolError": "net/textproto", - "textproto.Reader": "net/textproto", - "textproto.TrimBytes": "net/textproto", - "textproto.TrimString": "net/textproto", - "textproto.Writer": "net/textproto", - "time.ANSIC": "time", - "time.After": "time", - "time.AfterFunc": "time", - "time.April": "time", - "time.August": "time", - "time.Date": "time", - "time.December": "time", - "time.Duration": "time", - "time.February": "time", - "time.FixedZone": "time", - "time.Friday": "time", - "time.Hour": "time", - "time.January": "time", - "time.July": "time", - "time.June": "time", - "time.Kitchen": "time", - "time.LoadLocation": "time", - "time.Local": "time", - "time.Location": "time", - "time.March": "time", - "time.May": "time", - "time.Microsecond": "time", - "time.Millisecond": "time", - "time.Minute": "time", - "time.Monday": "time", - "time.Month": "time", - "time.Nanosecond": "time", - "time.NewTicker": "time", - "time.NewTimer": "time", - "time.November": "time", - "time.Now": "time", - "time.October": "time", - "time.Parse": "time", - "time.ParseDuration": "time", - "time.ParseError": "time", - "time.ParseInLocation": "time", - "time.RFC1123": "time", - "time.RFC1123Z": "time", - "time.RFC3339": "time", - "time.RFC3339Nano": "time", - "time.RFC822": "time", - "time.RFC822Z": "time", - "time.RFC850": "time", - "time.RubyDate": "time", - "time.Saturday": "time", - "time.Second": "time", - "time.September": "time", - "time.Since": "time", - "time.Sleep": "time", - "time.Stamp": "time", - "time.StampMicro": "time", - "time.StampMilli": "time", - "time.StampNano": "time", - "time.Sunday": "time", - "time.Thursday": "time", - "time.Tick": "time", - "time.Ticker": "time", - "time.Time": "time", - "time.Timer": "time", - "time.Tuesday": "time", - "time.UTC": "time", - "time.Unix": "time", - "time.UnixDate": "time", - "time.Wednesday": "time", - "time.Weekday": "time", - "tls.Certificate": "crypto/tls", - "tls.Client": "crypto/tls", - "tls.ClientAuthType": "crypto/tls", - "tls.ClientHelloInfo": "crypto/tls", - "tls.ClientSessionCache": "crypto/tls", - "tls.ClientSessionState": "crypto/tls", - "tls.Config": "crypto/tls", - "tls.Conn": "crypto/tls", - "tls.ConnectionState": "crypto/tls", - "tls.CurveID": "crypto/tls", - "tls.CurveP256": "crypto/tls", - "tls.CurveP384": "crypto/tls", - "tls.CurveP521": "crypto/tls", - "tls.Dial": "crypto/tls", - "tls.DialWithDialer": "crypto/tls", - "tls.Listen": "crypto/tls", - "tls.LoadX509KeyPair": "crypto/tls", - "tls.NewLRUClientSessionCache": "crypto/tls", - "tls.NewListener": "crypto/tls", - "tls.NoClientCert": "crypto/tls", - "tls.RecordHeaderError": "crypto/tls", - "tls.RequestClientCert": "crypto/tls", - "tls.RequireAndVerifyClientCert": "crypto/tls", - "tls.RequireAnyClientCert": "crypto/tls", - "tls.Server": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384": "crypto/tls", - "tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384": "crypto/tls", - "tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA": "crypto/tls", - "tls.TLS_FALLBACK_SCSV": "crypto/tls", - "tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA": "crypto/tls", - "tls.TLS_RSA_WITH_AES_128_CBC_SHA": "crypto/tls", - "tls.TLS_RSA_WITH_AES_128_GCM_SHA256": "crypto/tls", - "tls.TLS_RSA_WITH_AES_256_CBC_SHA": "crypto/tls", - "tls.TLS_RSA_WITH_AES_256_GCM_SHA384": "crypto/tls", - "tls.TLS_RSA_WITH_RC4_128_SHA": "crypto/tls", - "tls.VerifyClientCertIfGiven": "crypto/tls", - "tls.VersionSSL30": "crypto/tls", - "tls.VersionTLS10": "crypto/tls", - "tls.VersionTLS11": "crypto/tls", - "tls.VersionTLS12": "crypto/tls", - "tls.X509KeyPair": "crypto/tls", - "token.ADD": "go/token", - "token.ADD_ASSIGN": "go/token", - "token.AND": "go/token", - "token.AND_ASSIGN": "go/token", - "token.AND_NOT": "go/token", - "token.AND_NOT_ASSIGN": "go/token", - "token.ARROW": "go/token", - "token.ASSIGN": "go/token", - "token.BREAK": "go/token", - "token.CASE": "go/token", - "token.CHAN": "go/token", - "token.CHAR": "go/token", - "token.COLON": "go/token", - "token.COMMA": "go/token", - "token.COMMENT": "go/token", - "token.CONST": "go/token", - "token.CONTINUE": "go/token", - "token.DEC": "go/token", - "token.DEFAULT": "go/token", - "token.DEFER": "go/token", - "token.DEFINE": "go/token", - "token.ELLIPSIS": "go/token", - "token.ELSE": "go/token", - "token.EOF": "go/token", - "token.EQL": "go/token", - "token.FALLTHROUGH": "go/token", - "token.FLOAT": "go/token", - "token.FOR": "go/token", - "token.FUNC": "go/token", - "token.File": "go/token", - "token.FileSet": "go/token", - "token.GEQ": "go/token", - "token.GO": "go/token", - "token.GOTO": "go/token", - "token.GTR": "go/token", - "token.HighestPrec": "go/token", - "token.IDENT": "go/token", - "token.IF": "go/token", - "token.ILLEGAL": "go/token", - "token.IMAG": "go/token", - "token.IMPORT": "go/token", - "token.INC": "go/token", - "token.INT": "go/token", - "token.INTERFACE": "go/token", - "token.LAND": "go/token", - "token.LBRACE": "go/token", - "token.LBRACK": "go/token", - "token.LEQ": "go/token", - "token.LOR": "go/token", - "token.LPAREN": "go/token", - "token.LSS": "go/token", - "token.Lookup": "go/token", - "token.LowestPrec": "go/token", - "token.MAP": "go/token", - "token.MUL": "go/token", - "token.MUL_ASSIGN": "go/token", - "token.NEQ": "go/token", - "token.NOT": "go/token", - "token.NewFileSet": "go/token", - "token.NoPos": "go/token", - "token.OR": "go/token", - "token.OR_ASSIGN": "go/token", - "token.PACKAGE": "go/token", - "token.PERIOD": "go/token", - "token.Pos": "go/token", - "token.Position": "go/token", - "token.QUO": "go/token", - "token.QUO_ASSIGN": "go/token", - "token.RANGE": "go/token", - "token.RBRACE": "go/token", - "token.RBRACK": "go/token", - "token.REM": "go/token", - "token.REM_ASSIGN": "go/token", - "token.RETURN": "go/token", - "token.RPAREN": "go/token", - "token.SELECT": "go/token", - "token.SEMICOLON": "go/token", - "token.SHL": "go/token", - "token.SHL_ASSIGN": "go/token", - "token.SHR": "go/token", - "token.SHR_ASSIGN": "go/token", - "token.STRING": "go/token", - "token.STRUCT": "go/token", - "token.SUB": "go/token", - "token.SUB_ASSIGN": "go/token", - "token.SWITCH": "go/token", - "token.TYPE": "go/token", - "token.Token": "go/token", - "token.UnaryPrec": "go/token", - "token.VAR": "go/token", - "token.XOR": "go/token", - "token.XOR_ASSIGN": "go/token", - "trace.Start": "runtime/trace", - "trace.Stop": "runtime/trace", - "types.Array": "go/types", - "types.AssertableTo": "go/types", - "types.AssignableTo": "go/types", - "types.Basic": "go/types", - "types.BasicInfo": "go/types", - "types.BasicKind": "go/types", - "types.Bool": "go/types", - "types.Builtin": "go/types", - "types.Byte": "go/types", - "types.Chan": "go/types", - "types.ChanDir": "go/types", - "types.Checker": "go/types", - "types.Comparable": "go/types", - "types.Complex128": "go/types", - "types.Complex64": "go/types", - "types.Config": "go/types", - "types.Const": "go/types", - "types.ConvertibleTo": "go/types", - "types.DefPredeclaredTestFuncs": "go/types", - "types.Error": "go/types", - "types.Eval": "go/types", - "types.ExprString": "go/types", - "types.FieldVal": "go/types", - "types.Float32": "go/types", - "types.Float64": "go/types", - "types.Func": "go/types", - "types.Id": "go/types", - "types.Identical": "go/types", - "types.Implements": "go/types", - "types.ImportMode": "go/types", - "types.Importer": "go/types", - "types.ImporterFrom": "go/types", - "types.Info": "go/types", - "types.Initializer": "go/types", - "types.Int": "go/types", - "types.Int16": "go/types", - "types.Int32": "go/types", - "types.Int64": "go/types", - "types.Int8": "go/types", - "types.Interface": "go/types", - "types.Invalid": "go/types", - "types.IsBoolean": "go/types", - "types.IsComplex": "go/types", - "types.IsConstType": "go/types", - "types.IsFloat": "go/types", - "types.IsInteger": "go/types", - "types.IsInterface": "go/types", - "types.IsNumeric": "go/types", - "types.IsOrdered": "go/types", - "types.IsString": "go/types", - "types.IsUnsigned": "go/types", - "types.IsUntyped": "go/types", - "types.Label": "go/types", - "types.LookupFieldOrMethod": "go/types", - "types.Map": "go/types", - "types.MethodExpr": "go/types", - "types.MethodSet": "go/types", - "types.MethodVal": "go/types", - "types.MissingMethod": "go/types", - "types.Named": "go/types", - "types.NewArray": "go/types", - "types.NewChan": "go/types", - "types.NewChecker": "go/types", - "types.NewConst": "go/types", - "types.NewField": "go/types", - "types.NewFunc": "go/types", - "types.NewInterface": "go/types", - "types.NewLabel": "go/types", - "types.NewMap": "go/types", - "types.NewMethodSet": "go/types", - "types.NewNamed": "go/types", - "types.NewPackage": "go/types", - "types.NewParam": "go/types", - "types.NewPkgName": "go/types", - "types.NewPointer": "go/types", - "types.NewScope": "go/types", - "types.NewSignature": "go/types", - "types.NewSlice": "go/types", - "types.NewStruct": "go/types", - "types.NewTuple": "go/types", - "types.NewTypeName": "go/types", - "types.NewVar": "go/types", - "types.Nil": "go/types", - "types.ObjectString": "go/types", - "types.Package": "go/types", - "types.PkgName": "go/types", - "types.Pointer": "go/types", - "types.Qualifier": "go/types", - "types.RecvOnly": "go/types", - "types.RelativeTo": "go/types", - "types.Rune": "go/types", - "types.Scope": "go/types", - "types.Selection": "go/types", - "types.SelectionKind": "go/types", - "types.SelectionString": "go/types", - "types.SendOnly": "go/types", - "types.SendRecv": "go/types", - "types.Signature": "go/types", - "types.Sizes": "go/types", - "types.Slice": "go/types", - "types.StdSizes": "go/types", - "types.String": "go/types", - "types.Struct": "go/types", - "types.Tuple": "go/types", - "types.Typ": "go/types", - "types.Type": "go/types", - "types.TypeAndValue": "go/types", - "types.TypeName": "go/types", - "types.TypeString": "go/types", - "types.Uint": "go/types", - "types.Uint16": "go/types", - "types.Uint32": "go/types", - "types.Uint64": "go/types", - "types.Uint8": "go/types", - "types.Uintptr": "go/types", - "types.Universe": "go/types", - "types.Unsafe": "go/types", - "types.UnsafePointer": "go/types", - "types.UntypedBool": "go/types", - "types.UntypedComplex": "go/types", - "types.UntypedFloat": "go/types", - "types.UntypedInt": "go/types", - "types.UntypedNil": "go/types", - "types.UntypedRune": "go/types", - "types.UntypedString": "go/types", - "types.Var": "go/types", - "types.WriteExpr": "go/types", - "types.WriteSignature": "go/types", - "types.WriteType": "go/types", - "unicode.ASCII_Hex_Digit": "unicode", - "unicode.Ahom": "unicode", - "unicode.Anatolian_Hieroglyphs": "unicode", - "unicode.Arabic": "unicode", - "unicode.Armenian": "unicode", - "unicode.Avestan": "unicode", - "unicode.AzeriCase": "unicode", - "unicode.Balinese": "unicode", - "unicode.Bamum": "unicode", - "unicode.Bassa_Vah": "unicode", - "unicode.Batak": "unicode", - "unicode.Bengali": "unicode", - "unicode.Bidi_Control": "unicode", - "unicode.Bopomofo": "unicode", - "unicode.Brahmi": "unicode", - "unicode.Braille": "unicode", - "unicode.Buginese": "unicode", - "unicode.Buhid": "unicode", - "unicode.C": "unicode", - "unicode.Canadian_Aboriginal": "unicode", - "unicode.Carian": "unicode", - "unicode.CaseRange": "unicode", - "unicode.CaseRanges": "unicode", - "unicode.Categories": "unicode", - "unicode.Caucasian_Albanian": "unicode", - "unicode.Cc": "unicode", - "unicode.Cf": "unicode", - "unicode.Chakma": "unicode", - "unicode.Cham": "unicode", - "unicode.Cherokee": "unicode", - "unicode.Co": "unicode", - "unicode.Common": "unicode", - "unicode.Coptic": "unicode", - "unicode.Cs": "unicode", - "unicode.Cuneiform": "unicode", - "unicode.Cypriot": "unicode", - "unicode.Cyrillic": "unicode", - "unicode.Dash": "unicode", - "unicode.Deprecated": "unicode", - "unicode.Deseret": "unicode", - "unicode.Devanagari": "unicode", - "unicode.Diacritic": "unicode", - "unicode.Digit": "unicode", - "unicode.Duployan": "unicode", - "unicode.Egyptian_Hieroglyphs": "unicode", - "unicode.Elbasan": "unicode", - "unicode.Ethiopic": "unicode", - "unicode.Extender": "unicode", - "unicode.FoldCategory": "unicode", - "unicode.FoldScript": "unicode", - "unicode.Georgian": "unicode", - "unicode.Glagolitic": "unicode", - "unicode.Gothic": "unicode", - "unicode.Grantha": "unicode", - "unicode.GraphicRanges": "unicode", - "unicode.Greek": "unicode", - "unicode.Gujarati": "unicode", - "unicode.Gurmukhi": "unicode", - "unicode.Han": "unicode", - "unicode.Hangul": "unicode", - "unicode.Hanunoo": "unicode", - "unicode.Hatran": "unicode", - "unicode.Hebrew": "unicode", - "unicode.Hex_Digit": "unicode", - "unicode.Hiragana": "unicode", - "unicode.Hyphen": "unicode", - "unicode.IDS_Binary_Operator": "unicode", - "unicode.IDS_Trinary_Operator": "unicode", - "unicode.Ideographic": "unicode", - "unicode.Imperial_Aramaic": "unicode", - "unicode.In": "unicode", - "unicode.Inherited": "unicode", - "unicode.Inscriptional_Pahlavi": "unicode", - "unicode.Inscriptional_Parthian": "unicode", - "unicode.Is": "unicode", - "unicode.IsControl": "unicode", - "unicode.IsDigit": "unicode", - "unicode.IsGraphic": "unicode", - "unicode.IsLetter": "unicode", - "unicode.IsLower": "unicode", - "unicode.IsMark": "unicode", - "unicode.IsNumber": "unicode", - "unicode.IsOneOf": "unicode", - "unicode.IsPrint": "unicode", - "unicode.IsPunct": "unicode", - "unicode.IsSpace": "unicode", - "unicode.IsSymbol": "unicode", - "unicode.IsTitle": "unicode", - "unicode.IsUpper": "unicode", - "unicode.Javanese": "unicode", - "unicode.Join_Control": "unicode", - "unicode.Kaithi": "unicode", - "unicode.Kannada": "unicode", - "unicode.Katakana": "unicode", - "unicode.Kayah_Li": "unicode", - "unicode.Kharoshthi": "unicode", - "unicode.Khmer": "unicode", - "unicode.Khojki": "unicode", - "unicode.Khudawadi": "unicode", - "unicode.L": "unicode", - "unicode.Lao": "unicode", - "unicode.Latin": "unicode", - "unicode.Lepcha": "unicode", - "unicode.Letter": "unicode", - "unicode.Limbu": "unicode", - "unicode.Linear_A": "unicode", - "unicode.Linear_B": "unicode", - "unicode.Lisu": "unicode", - "unicode.Ll": "unicode", - "unicode.Lm": "unicode", - "unicode.Lo": "unicode", - "unicode.Logical_Order_Exception": "unicode", - "unicode.Lower": "unicode", - "unicode.LowerCase": "unicode", - "unicode.Lt": "unicode", - "unicode.Lu": "unicode", - "unicode.Lycian": "unicode", - "unicode.Lydian": "unicode", - "unicode.M": "unicode", - "unicode.Mahajani": "unicode", - "unicode.Malayalam": "unicode", - "unicode.Mandaic": "unicode", - "unicode.Manichaean": "unicode", - "unicode.Mark": "unicode", - "unicode.MaxASCII": "unicode", - "unicode.MaxCase": "unicode", - "unicode.MaxLatin1": "unicode", - "unicode.MaxRune": "unicode", - "unicode.Mc": "unicode", - "unicode.Me": "unicode", - "unicode.Meetei_Mayek": "unicode", - "unicode.Mende_Kikakui": "unicode", - "unicode.Meroitic_Cursive": "unicode", - "unicode.Meroitic_Hieroglyphs": "unicode", - "unicode.Miao": "unicode", - "unicode.Mn": "unicode", - "unicode.Modi": "unicode", - "unicode.Mongolian": "unicode", - "unicode.Mro": "unicode", - "unicode.Multani": "unicode", - "unicode.Myanmar": "unicode", - "unicode.N": "unicode", - "unicode.Nabataean": "unicode", - "unicode.Nd": "unicode", - "unicode.New_Tai_Lue": "unicode", - "unicode.Nko": "unicode", - "unicode.Nl": "unicode", - "unicode.No": "unicode", - "unicode.Noncharacter_Code_Point": "unicode", - "unicode.Number": "unicode", - "unicode.Ogham": "unicode", - "unicode.Ol_Chiki": "unicode", - "unicode.Old_Hungarian": "unicode", - "unicode.Old_Italic": "unicode", - "unicode.Old_North_Arabian": "unicode", - "unicode.Old_Permic": "unicode", - "unicode.Old_Persian": "unicode", - "unicode.Old_South_Arabian": "unicode", - "unicode.Old_Turkic": "unicode", - "unicode.Oriya": "unicode", - "unicode.Osmanya": "unicode", - "unicode.Other": "unicode", - "unicode.Other_Alphabetic": "unicode", - "unicode.Other_Default_Ignorable_Code_Point": "unicode", - "unicode.Other_Grapheme_Extend": "unicode", - "unicode.Other_ID_Continue": "unicode", - "unicode.Other_ID_Start": "unicode", - "unicode.Other_Lowercase": "unicode", - "unicode.Other_Math": "unicode", - "unicode.Other_Uppercase": "unicode", - "unicode.P": "unicode", - "unicode.Pahawh_Hmong": "unicode", - "unicode.Palmyrene": "unicode", - "unicode.Pattern_Syntax": "unicode", - "unicode.Pattern_White_Space": "unicode", - "unicode.Pau_Cin_Hau": "unicode", - "unicode.Pc": "unicode", - "unicode.Pd": "unicode", - "unicode.Pe": "unicode", - "unicode.Pf": "unicode", - "unicode.Phags_Pa": "unicode", - "unicode.Phoenician": "unicode", - "unicode.Pi": "unicode", - "unicode.Po": "unicode", - "unicode.PrintRanges": "unicode", - "unicode.Properties": "unicode", - "unicode.Ps": "unicode", - "unicode.Psalter_Pahlavi": "unicode", - "unicode.Punct": "unicode", - "unicode.Quotation_Mark": "unicode", - "unicode.Radical": "unicode", - "unicode.Range16": "unicode", - "unicode.Range32": "unicode", - "unicode.RangeTable": "unicode", - "unicode.Rejang": "unicode", - "unicode.ReplacementChar": "unicode", - "unicode.Runic": "unicode", - "unicode.S": "unicode", - "unicode.STerm": "unicode", - "unicode.Samaritan": "unicode", - "unicode.Saurashtra": "unicode", - "unicode.Sc": "unicode", - "unicode.Scripts": "unicode", - "unicode.Sharada": "unicode", - "unicode.Shavian": "unicode", - "unicode.Siddham": "unicode", - "unicode.SignWriting": "unicode", - "unicode.SimpleFold": "unicode", - "unicode.Sinhala": "unicode", - "unicode.Sk": "unicode", - "unicode.Sm": "unicode", - "unicode.So": "unicode", - "unicode.Soft_Dotted": "unicode", - "unicode.Sora_Sompeng": "unicode", - "unicode.Space": "unicode", - "unicode.SpecialCase": "unicode", - "unicode.Sundanese": "unicode", - "unicode.Syloti_Nagri": "unicode", - "unicode.Symbol": "unicode", - "unicode.Syriac": "unicode", - "unicode.Tagalog": "unicode", - "unicode.Tagbanwa": "unicode", - "unicode.Tai_Le": "unicode", - "unicode.Tai_Tham": "unicode", - "unicode.Tai_Viet": "unicode", - "unicode.Takri": "unicode", - "unicode.Tamil": "unicode", - "unicode.Telugu": "unicode", - "unicode.Terminal_Punctuation": "unicode", - "unicode.Thaana": "unicode", - "unicode.Thai": "unicode", - "unicode.Tibetan": "unicode", - "unicode.Tifinagh": "unicode", - "unicode.Tirhuta": "unicode", - "unicode.Title": "unicode", - "unicode.TitleCase": "unicode", - "unicode.To": "unicode", - "unicode.ToLower": "unicode", - "unicode.ToTitle": "unicode", - "unicode.ToUpper": "unicode", - "unicode.TurkishCase": "unicode", - "unicode.Ugaritic": "unicode", - "unicode.Unified_Ideograph": "unicode", - "unicode.Upper": "unicode", - "unicode.UpperCase": "unicode", - "unicode.UpperLower": "unicode", - "unicode.Vai": "unicode", - "unicode.Variation_Selector": "unicode", - "unicode.Version": "unicode", - "unicode.Warang_Citi": "unicode", - "unicode.White_Space": "unicode", - "unicode.Yi": "unicode", - "unicode.Z": "unicode", - "unicode.Zl": "unicode", - "unicode.Zp": "unicode", - "unicode.Zs": "unicode", - "url.Error": "net/url", - "url.EscapeError": "net/url", - "url.InvalidHostError": "net/url", - "url.Parse": "net/url", - "url.ParseQuery": "net/url", - "url.ParseRequestURI": "net/url", - "url.QueryEscape": "net/url", - "url.QueryUnescape": "net/url", - "url.URL": "net/url", - "url.User": "net/url", - "url.UserPassword": "net/url", - "url.Userinfo": "net/url", - "url.Values": "net/url", - "user.Current": "os/user", - "user.Lookup": "os/user", - "user.LookupId": "os/user", - "user.UnknownUserError": "os/user", - "user.UnknownUserIdError": "os/user", - "user.User": "os/user", - "utf16.Decode": "unicode/utf16", - "utf16.DecodeRune": "unicode/utf16", - "utf16.Encode": "unicode/utf16", - "utf16.EncodeRune": "unicode/utf16", - "utf16.IsSurrogate": "unicode/utf16", - "utf8.DecodeLastRune": "unicode/utf8", - "utf8.DecodeLastRuneInString": "unicode/utf8", - "utf8.DecodeRune": "unicode/utf8", - "utf8.DecodeRuneInString": "unicode/utf8", - "utf8.EncodeRune": "unicode/utf8", - "utf8.FullRune": "unicode/utf8", - "utf8.FullRuneInString": "unicode/utf8", - "utf8.MaxRune": "unicode/utf8", - "utf8.RuneCount": "unicode/utf8", - "utf8.RuneCountInString": "unicode/utf8", - "utf8.RuneError": "unicode/utf8", - "utf8.RuneLen": "unicode/utf8", - "utf8.RuneSelf": "unicode/utf8", - "utf8.RuneStart": "unicode/utf8", - "utf8.UTFMax": "unicode/utf8", - "utf8.Valid": "unicode/utf8", - "utf8.ValidRune": "unicode/utf8", - "utf8.ValidString": "unicode/utf8", - "x509.CANotAuthorizedForThisName": "crypto/x509", - "x509.CertPool": "crypto/x509", - "x509.Certificate": "crypto/x509", - "x509.CertificateInvalidError": "crypto/x509", - "x509.CertificateRequest": "crypto/x509", - "x509.ConstraintViolationError": "crypto/x509", - "x509.CreateCertificate": "crypto/x509", - "x509.CreateCertificateRequest": "crypto/x509", - "x509.DSA": "crypto/x509", - "x509.DSAWithSHA1": "crypto/x509", - "x509.DSAWithSHA256": "crypto/x509", - "x509.DecryptPEMBlock": "crypto/x509", - "x509.ECDSA": "crypto/x509", - "x509.ECDSAWithSHA1": "crypto/x509", - "x509.ECDSAWithSHA256": "crypto/x509", - "x509.ECDSAWithSHA384": "crypto/x509", - "x509.ECDSAWithSHA512": "crypto/x509", - "x509.EncryptPEMBlock": "crypto/x509", - "x509.ErrUnsupportedAlgorithm": "crypto/x509", - "x509.Expired": "crypto/x509", - "x509.ExtKeyUsage": "crypto/x509", - "x509.ExtKeyUsageAny": "crypto/x509", - "x509.ExtKeyUsageClientAuth": "crypto/x509", - "x509.ExtKeyUsageCodeSigning": "crypto/x509", - "x509.ExtKeyUsageEmailProtection": "crypto/x509", - "x509.ExtKeyUsageIPSECEndSystem": "crypto/x509", - "x509.ExtKeyUsageIPSECTunnel": "crypto/x509", - "x509.ExtKeyUsageIPSECUser": "crypto/x509", - "x509.ExtKeyUsageMicrosoftServerGatedCrypto": "crypto/x509", - "x509.ExtKeyUsageNetscapeServerGatedCrypto": "crypto/x509", - "x509.ExtKeyUsageOCSPSigning": "crypto/x509", - "x509.ExtKeyUsageServerAuth": "crypto/x509", - "x509.ExtKeyUsageTimeStamping": "crypto/x509", - "x509.HostnameError": "crypto/x509", - "x509.IncompatibleUsage": "crypto/x509", - "x509.IncorrectPasswordError": "crypto/x509", - "x509.InsecureAlgorithmError": "crypto/x509", - "x509.InvalidReason": "crypto/x509", - "x509.IsEncryptedPEMBlock": "crypto/x509", - "x509.KeyUsage": "crypto/x509", - "x509.KeyUsageCRLSign": "crypto/x509", - "x509.KeyUsageCertSign": "crypto/x509", - "x509.KeyUsageContentCommitment": "crypto/x509", - "x509.KeyUsageDataEncipherment": "crypto/x509", - "x509.KeyUsageDecipherOnly": "crypto/x509", - "x509.KeyUsageDigitalSignature": "crypto/x509", - "x509.KeyUsageEncipherOnly": "crypto/x509", - "x509.KeyUsageKeyAgreement": "crypto/x509", - "x509.KeyUsageKeyEncipherment": "crypto/x509", - "x509.MD2WithRSA": "crypto/x509", - "x509.MD5WithRSA": "crypto/x509", - "x509.MarshalECPrivateKey": "crypto/x509", - "x509.MarshalPKCS1PrivateKey": "crypto/x509", - "x509.MarshalPKIXPublicKey": "crypto/x509", - "x509.NewCertPool": "crypto/x509", - "x509.NotAuthorizedToSign": "crypto/x509", - "x509.PEMCipher": "crypto/x509", - "x509.PEMCipher3DES": "crypto/x509", - "x509.PEMCipherAES128": "crypto/x509", - "x509.PEMCipherAES192": "crypto/x509", - "x509.PEMCipherAES256": "crypto/x509", - "x509.PEMCipherDES": "crypto/x509", - "x509.ParseCRL": "crypto/x509", - "x509.ParseCertificate": "crypto/x509", - "x509.ParseCertificateRequest": "crypto/x509", - "x509.ParseCertificates": "crypto/x509", - "x509.ParseDERCRL": "crypto/x509", - "x509.ParseECPrivateKey": "crypto/x509", - "x509.ParsePKCS1PrivateKey": "crypto/x509", - "x509.ParsePKCS8PrivateKey": "crypto/x509", - "x509.ParsePKIXPublicKey": "crypto/x509", - "x509.PublicKeyAlgorithm": "crypto/x509", - "x509.RSA": "crypto/x509", - "x509.SHA1WithRSA": "crypto/x509", - "x509.SHA256WithRSA": "crypto/x509", - "x509.SHA384WithRSA": "crypto/x509", - "x509.SHA512WithRSA": "crypto/x509", - "x509.SignatureAlgorithm": "crypto/x509", - "x509.SystemRootsError": "crypto/x509", - "x509.TooManyIntermediates": "crypto/x509", - "x509.UnhandledCriticalExtension": "crypto/x509", - "x509.UnknownAuthorityError": "crypto/x509", - "x509.UnknownPublicKeyAlgorithm": "crypto/x509", - "x509.UnknownSignatureAlgorithm": "crypto/x509", - "x509.VerifyOptions": "crypto/x509", - "xml.Attr": "encoding/xml", - "xml.CharData": "encoding/xml", - "xml.Comment": "encoding/xml", - "xml.CopyToken": "encoding/xml", - "xml.Decoder": "encoding/xml", - "xml.Directive": "encoding/xml", - "xml.Encoder": "encoding/xml", - "xml.EndElement": "encoding/xml", - "xml.Escape": "encoding/xml", - "xml.EscapeText": "encoding/xml", - "xml.HTMLAutoClose": "encoding/xml", - "xml.HTMLEntity": "encoding/xml", - "xml.Header": "encoding/xml", - "xml.Marshal": "encoding/xml", - "xml.MarshalIndent": "encoding/xml", - "xml.Marshaler": "encoding/xml", - "xml.MarshalerAttr": "encoding/xml", - "xml.Name": "encoding/xml", - "xml.NewDecoder": "encoding/xml", - "xml.NewEncoder": "encoding/xml", - "xml.ProcInst": "encoding/xml", - "xml.StartElement": "encoding/xml", - "xml.SyntaxError": "encoding/xml", - "xml.TagPathError": "encoding/xml", - "xml.Token": "encoding/xml", - "xml.Unmarshal": "encoding/xml", - "xml.UnmarshalError": "encoding/xml", - "xml.Unmarshaler": "encoding/xml", - "xml.UnmarshalerAttr": "encoding/xml", - "xml.UnsupportedTypeError": "encoding/xml", - "zip.Compressor": "archive/zip", - "zip.Decompressor": "archive/zip", - "zip.Deflate": "archive/zip", - "zip.ErrAlgorithm": "archive/zip", - "zip.ErrChecksum": "archive/zip", - "zip.ErrFormat": "archive/zip", - "zip.File": "archive/zip", - "zip.FileHeader": "archive/zip", - "zip.FileInfoHeader": "archive/zip", - "zip.NewReader": "archive/zip", - "zip.NewWriter": "archive/zip", - "zip.OpenReader": "archive/zip", - "zip.ReadCloser": "archive/zip", - "zip.Reader": "archive/zip", - "zip.RegisterCompressor": "archive/zip", - "zip.RegisterDecompressor": "archive/zip", - "zip.Store": "archive/zip", - "zip.Writer": "archive/zip", - "zlib.BestCompression": "compress/zlib", - "zlib.BestSpeed": "compress/zlib", - "zlib.DefaultCompression": "compress/zlib", - "zlib.ErrChecksum": "compress/zlib", - "zlib.ErrDictionary": "compress/zlib", - "zlib.ErrHeader": "compress/zlib", - "zlib.NewReader": "compress/zlib", - "zlib.NewReaderDict": "compress/zlib", - "zlib.NewWriter": "compress/zlib", - "zlib.NewWriterLevel": "compress/zlib", - "zlib.NewWriterLevelDict": "compress/zlib", - "zlib.NoCompression": "compress/zlib", - "zlib.Resetter": "compress/zlib", - "zlib.Writer": "compress/zlib", - - "unsafe.Alignof": "unsafe", - "unsafe.ArbitraryType": "unsafe", - "unsafe.Offsetof": "unsafe", - "unsafe.Pointer": "unsafe", - "unsafe.Sizeof": "unsafe", -} From 328216c31cbeac4819e7285d94b8eaeca73f502d Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Tue, 1 Aug 2017 17:22:40 -0400 Subject: [PATCH 02/32] get v1 compiling and interacting with Jupyter --- kernel.go | 61 ++++++++++++++++++++++++++++++++++------------------- main.go | 2 +- messages.go | 10 ++++++--- 3 files changed, 47 insertions(+), 26 deletions(-) diff --git a/kernel.go b/kernel.go index 2c7ec06..345c905 100644 --- a/kernel.go +++ b/kernel.go @@ -101,12 +101,12 @@ func runKernel(connectionFile string) { // Handle shell messages. case sockets.ShellSocket: - msgparts, err := sockets.ShellSocket.RecvMessageBytes(0) + msgParts, err = sockets.ShellSocket.RecvMessageBytes(0) if err != nil { log.Println(err) } - msg, ids, err := WireMsgToComposedMsg(msgparts, sockets.Key) + msg, ids, err := WireMsgToComposedMsg(msgParts, sockets.Key) if err != nil { log.Println(err) return @@ -120,13 +120,13 @@ func runKernel(connectionFile string) { // Handle control messages. case sockets.ControlSocket: - msgparts, err := sockets.ControlSocket.RecvMessageBytes(0) + msgParts, err = sockets.ControlSocket.RecvMessageBytes(0) if err != nil { log.Println(err) return } - msg, ids, err := WireMsgToComposedMsg(msgparts, sockets.Key) + msg, ids, err := WireMsgToComposedMsg(msgParts, sockets.Key) if err != nil { log.Println(err) return @@ -196,9 +196,7 @@ func handleShellMsg(ir *classic.Interp, receipt msgReceipt) { log.Fatal(err) } case "shutdown_request": - if err := handleShutdownRequest(receipt); err != nil { - log.Fatal(err) - } + handleShutdownRequest(receipt) default: log.Println("Unhandled shell message: ", receipt.Msg.Header.MsgType) } @@ -241,20 +239,28 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { content["execution_count"] = ExecCounter // Do the compilation/execution magic. - rawVal, _ := ir.Eval(code) - val := rawVal.(string) + rawVal, rawErr := ir.Eval(code) + val := fmt.Sprintln(rawVal) + + fmt.Printf("\nThis is val: %s\n\n", val) + fmt.Printf("This is rawErr: %s\n\n", fmt.Sprintln(rawErr)) - if err == nil { + if len(val) > 0 { content["status"] = "ok" content["payload"] = make([]map[string]interface{}, 0) content["user_variables"] = make(map[string]string) content["user_expressions"] = make(map[string]string) - if len(val) > 0 && !silent { + if !silent { var outContent OutputMsg - out := NewMsg("pyout", receipt.Msg) + + out, err := NewMsg("pyout", receipt.Msg) + if err != nil { + return err + } + outContent.Execcount = ExecCounter outContent.Data = make(map[string]string) - outContent.Data["text/plain"] = fmt.Sprint(val) + outContent.Data["text/plain"] = val outContent.Metadata = make(map[string]interface{}) out.Content = outContent receipt.SendResponse(receipt.Sockets.IOPubSocket, out) @@ -262,10 +268,15 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { } else { content["status"] = "error" content["ename"] = "ERROR" - content["evalue"] = err.Error() + content["evalue"] = fmt.Sprintln(rawErr) content["traceback"] = nil - errormsg := NewMsg("pyerr", receipt.Msg) - errormsg.Content = ErrMsg{"Error", err.Error(), nil} + + errormsg, err := NewMsg("pyerr", receipt.Msg) + if err != nil { + return err + } + + errormsg.Content = ErrMsg{"Error", fmt.Sprintln(rawErr), nil} receipt.SendResponse(receipt.Sockets.IOPubSocket, errormsg) } @@ -276,27 +287,33 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { return err } - idle := NewMsg("status", receipt.Msg) - idle.Content = KernelStatus{"idle"} + idle, err := NewMsg("status", receipt.Msg) + if err != nil { + return err + } + + idle.Content = kernelStatus{"idle"} if err := receipt.SendResponse(receipt.Sockets.IOPubSocket, idle); err != nil { return err } + + return nil } // handleShutdownRequest sends a "shutdown" message -func handleShutdownRequest(receipt msgReceipt) error { +func handleShutdownRequest(receipt msgReceipt) { reply, err := NewMsg("shutdown_reply", receipt.Msg) if err != nil { - return err + log.Fatal(err) } content := receipt.Msg.Content.(map[string]interface{}) restart := content["restart"].(bool) - reply.Content = ShutdownReply{restart} + reply.Content = shutdownReply{restart} if err := receipt.SendResponse(receipt.Sockets.ShellSocket, reply); err != nil { - return err + log.Fatal(err) } log.Println("Shutting down in response to shutdown_request") diff --git a/main.go b/main.go index d0469a7..8606328 100644 --- a/main.go +++ b/main.go @@ -14,5 +14,5 @@ func main() { } // Run the kernel. - RunKernel(flag.Arg(0)) + runKernel(flag.Arg(0)) } diff --git a/messages.go b/messages.go index 51f5a33..783519e 100644 --- a/messages.go +++ b/messages.go @@ -140,18 +140,18 @@ func (msg ComposedMsg) ToWireMsg(signkey []byte) ([][]byte, error) { func (receipt *msgReceipt) SendResponse(socket *zmq.Socket, msg ComposedMsg) error { for _, idt := range receipt.Identities { - _, err := socket.Send(idt, zmq.SNDMORE) + _, err := socket.Send(string(idt), zmq.SNDMORE) if err != nil { return err } } - _, err := socket.Send([]byte(""), zmq.SNDMORE) + _, err := socket.Send("", zmq.SNDMORE) if err != nil { return err } - msgParts, err = msg.ToWireMsg(receipt.Sockets.Key) + msgParts, err := msg.ToWireMsg(receipt.Sockets.Key) if err != nil { return err } @@ -160,11 +160,15 @@ func (receipt *msgReceipt) SendResponse(socket *zmq.Socket, msg ComposedMsg) err if err != nil { return err } + + return nil } // NewMsg creates a new ComposedMsg to respond to a parent message. // This includes setting up its headers. func NewMsg(msgType string, parent ComposedMsg) (ComposedMsg, error) { + var msg ComposedMsg + msg.ParentHeader = parent.Header msg.Header.Session = parent.Header.Session msg.Header.Username = parent.Header.Username From d5844d3c4e6fa36097140803a66ba2ab6bbb8214 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 2 Aug 2017 11:39:58 -0400 Subject: [PATCH 03/32] get printing working and capture stdout --- kernel.go | 76 +++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 60 insertions(+), 16 deletions(-) diff --git a/kernel.go b/kernel.go index 345c905..5ae14c2 100644 --- a/kernel.go +++ b/kernel.go @@ -1,12 +1,17 @@ package main import ( + "bufio" + "bytes" "encoding/json" "fmt" + "io" "io/ioutil" "log" "os" + "strings" + "github.com/cosmos72/gomacro/base" "github.com/cosmos72/gomacro/classic" zmq "github.com/pebbe/zmq4" ) @@ -230,6 +235,7 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { reqcontent := receipt.Msg.Content.(map[string]interface{}) code := reqcontent["code"].(string) + in := bufio.NewReader(strings.NewReader(code)) silent := reqcontent["silent"].(bool) if !silent { @@ -238,12 +244,48 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { content["execution_count"] = ExecCounter + old := os.Stdout // keep backup of the real stdout + r, w, err := os.Pipe() + if err != nil { + return err + } + os.Stdout = w + // Do the compilation/execution magic. - rawVal, rawErr := ir.Eval(code) - val := fmt.Sprintln(rawVal) + //rawVal, rawErr := ir.Eval(code) + //val := fmt.Sprintln(rawVal) + + env := ir.Env + env.Options &^= base.OptShowPrompt + env.Line = 0 + + // Perform the first iteration manually, to collect comments + var comments string + str, firstToken := env.ReadMultiline(in, base.ReadOptCollectAllComments) + if firstToken >= 0 { + comments = str[0:firstToken] + if firstToken > 0 { + str = str[firstToken:] + env.IncLine(comments) + } + } + if ir.ParseEvalPrint(str, in) { + for ir.ReadParseEvalPrint(in) { + } + } + + outC := make(chan string) + // copy the output in a separate goroutine so printing can't block indefinitely + go func() { + var buf bytes.Buffer + io.Copy(&buf, r) + outC <- buf.String() + }() - fmt.Printf("\nThis is val: %s\n\n", val) - fmt.Printf("This is rawErr: %s\n\n", fmt.Sprintln(rawErr)) + // back to normal state + w.Close() + os.Stdout = old // restoring the real stdout + val := <-outC if len(val) > 0 { content["status"] = "ok" @@ -265,20 +307,22 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { out.Content = outContent receipt.SendResponse(receipt.Sockets.IOPubSocket, out) } - } else { - content["status"] = "error" - content["ename"] = "ERROR" - content["evalue"] = fmt.Sprintln(rawErr) - content["traceback"] = nil + } - errormsg, err := NewMsg("pyerr", receipt.Msg) - if err != nil { - return err - } + //if len(stdErr) > 0 { + // content["status"] = "error" + // content["ename"] = "ERROR" + // content["evalue"] = stdErr + // content["traceback"] = nil - errormsg.Content = ErrMsg{"Error", fmt.Sprintln(rawErr), nil} - receipt.SendResponse(receipt.Sockets.IOPubSocket, errormsg) - } + // errormsg, err := NewMsg("pyerr", receipt.Msg) + // if err != nil { + // return err + // } + + // errormsg.Content = ErrMsg{"Error", stdErr, nil} + // receipt.SendResponse(receipt.Sockets.IOPubSocket, errormsg) + //} // Send the output back to the notebook. reply.Content = content From 8b938dbeae63f27feb1cbd5a5d50e0b2e7af4ddc Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Fri, 4 Aug 2017 10:13:18 -0400 Subject: [PATCH 04/32] get error messages printing back to the notebook --- kernel.go | 64 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/kernel.go b/kernel.go index 5ae14c2..f60fad6 100644 --- a/kernel.go +++ b/kernel.go @@ -94,6 +94,7 @@ func runKernel(connectionFile string) { // Start a message receiving loop. for { + polled, err := poller.Poll(-1) if err != nil { log.Fatal(err) @@ -200,6 +201,7 @@ func handleShellMsg(ir *classic.Interp, receipt msgReceipt) { if err := handleExecuteRequest(ir, receipt); err != nil { log.Fatal(err) } + case "shutdown_request": handleShutdownRequest(receipt) default: @@ -226,6 +228,7 @@ func sendKernelInfo(receipt msgReceipt) error { // and sends the various reply messages. func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { + // Prepare the reply message. reply, err := NewMsg("execute_reply", receipt.Msg) if err != nil { return err @@ -244,17 +247,22 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { content["execution_count"] = ExecCounter - old := os.Stdout // keep backup of the real stdout + // Redirect the standard out from the REPL. + old := os.Stdout r, w, err := os.Pipe() if err != nil { return err } os.Stdout = w - // Do the compilation/execution magic. - //rawVal, rawErr := ir.Eval(code) - //val := fmt.Sprintln(rawVal) + // Redirect the standard error from the REPL. + rErr, wErr, err := os.Pipe() + if err != nil { + return err + } + ir.Stderr = wErr + // Prepare and perform the multiline evaluation. env := ir.Env env.Options &^= base.OptShowPrompt env.Line = 0 @@ -270,23 +278,37 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { } } if ir.ParseEvalPrint(str, in) { - for ir.ReadParseEvalPrint(in) { - } + ir.Repl(in) } + // Copy the output in a separate goroutine to prevent + // blocking on printing. outC := make(chan string) - // copy the output in a separate goroutine so printing can't block indefinitely go func() { var buf bytes.Buffer io.Copy(&buf, r) outC <- buf.String() }() - // back to normal state + // Return standard out back to normal state. w.Close() - os.Stdout = old // restoring the real stdout + os.Stdout = old val := <-outC + // Copy the output in a separate goroutine to prevent + // blocking on printing. + outCErr := make(chan string) + go func() { + var buf bytes.Buffer + io.Copy(&buf, rErr) + outCErr <- buf.String() + }() + + wErr.Close() + stdErr := <-outCErr + + fmt.Printf("This is stderr: %s\n", stdErr) + if len(val) > 0 { content["status"] = "ok" content["payload"] = make([]map[string]interface{}, 0) @@ -309,20 +331,20 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { } } - //if len(stdErr) > 0 { - // content["status"] = "error" - // content["ename"] = "ERROR" - // content["evalue"] = stdErr - // content["traceback"] = nil + if len(stdErr) > 0 { + content["status"] = "error" + content["ename"] = "ERROR" + content["evalue"] = stdErr + content["traceback"] = nil - // errormsg, err := NewMsg("pyerr", receipt.Msg) - // if err != nil { - // return err - // } + errormsg, err := NewMsg("pyerr", receipt.Msg) + if err != nil { + return err + } - // errormsg.Content = ErrMsg{"Error", stdErr, nil} - // receipt.SendResponse(receipt.Sockets.IOPubSocket, errormsg) - //} + errormsg.Content = ErrMsg{"Error", stdErr, []string{stdErr}} + receipt.SendResponse(receipt.Sockets.IOPubSocket, errormsg) + } // Send the output back to the notebook. reply.Content = content From 64a2d6683420108afbd2ef1f9d5496a6b6f6c86b Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Fri, 4 Aug 2017 10:30:31 -0400 Subject: [PATCH 05/32] add vendor and dep files --- Gopkg.lock | 33 + Gopkg.toml | 34 + kernel.go | 33 +- vendor/github.com/cosmos72/gomacro/.gitignore | 4 + vendor/github.com/cosmos72/gomacro/LICENSE | 165 + vendor/github.com/cosmos72/gomacro/README.md | 186 + .../github.com/cosmos72/gomacro/TrickyGo.md | 46 + .../github.com/cosmos72/gomacro/all_test.go | 786 + .../github.com/cosmos72/gomacro/ast2/ast.go | 114 + .../cosmos72/gomacro/ast2/ast_convert.go | 621 + .../cosmos72/gomacro/ast2/ast_node.go | 903 + .../cosmos72/gomacro/ast2/ast_slice.go | 183 + .../github.com/cosmos72/gomacro/ast2/error.go | 44 + .../cosmos72/gomacro/ast2/x_package.go | 218 + .../cosmos72/gomacro/base/constants.go | 115 + .../cosmos72/gomacro/base/genimport.go | 350 + .../cosmos72/gomacro/base/genimport_proxy.go | 153 + .../gomacro/base/genimport_untyped.go | 119 + .../gomacro/base/genimport_wrapper.go | 86 + .../cosmos72/gomacro/base/global.go | 279 + .../cosmos72/gomacro/base/import_scanner.go | 211 + .../cosmos72/gomacro/base/importer.go | 191 + .../cosmos72/gomacro/base/literal.go | 120 + .../cosmos72/gomacro/base/output.go | 337 + .../cosmos72/gomacro/base/plugin.go | 93 + .../cosmos72/gomacro/base/plugin_dummy.go | 51 + .../cosmos72/gomacro/base/quasiquote.go | 223 + .../github.com/cosmos72/gomacro/base/read.go | 450 + .../cosmos72/gomacro/base/string.go | 113 + .../github.com/cosmos72/gomacro/base/types.go | 141 + .../github.com/cosmos72/gomacro/base/util.go | 71 + .../cosmos72/gomacro/base/x_package.go | 155 + .../cosmos72/gomacro/benchmark_test.go | 713 + .../cosmos72/gomacro/classic/assignment.go | 204 + .../cosmos72/gomacro/classic/binaryexpr.go | 401 + .../cosmos72/gomacro/classic/builtin.go | 462 + .../cosmos72/gomacro/classic/call.go | 279 + .../cosmos72/gomacro/classic/declaration.go | 209 + .../cosmos72/gomacro/classic/env.go | 195 + .../gomacro/classic/env_multithread.go | 134 + .../gomacro/classic/env_singlethread.go | 114 + .../cosmos72/gomacro/classic/eval.go | 141 + .../cosmos72/gomacro/classic/expr.go | 345 + .../cosmos72/gomacro/classic/fast.go | 81 + .../cosmos72/gomacro/classic/file.go | 44 + .../cosmos72/gomacro/classic/for.go | 303 + .../cosmos72/gomacro/classic/function.go | 90 + .../cosmos72/gomacro/classic/global.go | 83 + .../cosmos72/gomacro/classic/identifier.go | 54 + .../cosmos72/gomacro/classic/import.go | 69 + .../cosmos72/gomacro/classic/inspect.go | 278 + .../cosmos72/gomacro/classic/interface.go | 58 + .../cosmos72/gomacro/classic/interpreter.go | 273 + .../cosmos72/gomacro/classic/literal.go | 214 + .../cosmos72/gomacro/classic/macroexpand.go | 287 + .../cosmos72/gomacro/classic/method.go | 82 + .../cosmos72/gomacro/classic/number.go | 69 + .../cosmos72/gomacro/classic/output.go | 151 + .../cosmos72/gomacro/classic/quasiquote.go | 207 + .../cosmos72/gomacro/classic/select.go | 179 + .../cosmos72/gomacro/classic/statement.go | 232 + .../cosmos72/gomacro/classic/switch.go | 138 + .../cosmos72/gomacro/classic/switch_type.go | 147 + .../cosmos72/gomacro/classic/type.go | 371 + .../cosmos72/gomacro/classic/unaryexpr.go | 267 + .../cosmos72/gomacro/classic/x_package.go | 38 + vendor/github.com/cosmos72/gomacro/cmd.go | 300 + .../cosmos72/gomacro/doc/quasiquote.md | 268 + .../cosmos72/gomacro/example/arith.gomacro | 11 + .../cosmos72/gomacro/example/bag.go.easyjson | 830 + .../cosmos72/gomacro/example/bag.go.save | 45 + .../cosmos72/gomacro/example/channel.gomacro | 8 + .../cosmos72/gomacro/example/collatz.gomacro | 16 + .../cosmos72/gomacro/example/collatz.igo | 7 + .../cosmos72/gomacro/example/collatz.py | 12 + .../cosmos72/gomacro/example/dummy.go | 44 + .../gomacro/example/embedded_field.go | 111 + .../gomacro/example/embedded_field.gomacro | 8 + .../gomacro/example/fibonacci.gomacro | 11 + .../cosmos72/gomacro/example/fibonacci.igo | 6 + .../cosmos72/gomacro/example/fibonacci.py | 6 + .../gomacro/example/for_range.gomacro | 29 + .../gomacro/example/make_fibonacci.gomacro | 21 + .../bytecode_interfaces.go | 212 + .../bytecode_values/bytecode_values.go | 161 + .../closure_interfaces/closure_interfaces.go | 362 + .../experiments/closure_maps/closure_maps.go | 417 + .../closure_values/closure_values.go | 447 + .../cosmos72/gomacro/experiments/dummy.go | 4 + .../gomacro/experiments/stmt_new_test.go | 611 + .../gomacro/experiments/stmt_old_test.go | 481 + .../cosmos72/gomacro/fast/README.md | 103 + .../cosmos72/gomacro/fast/address.go | 1008 ++ .../cosmos72/gomacro/fast/address.gomacro | 187 + .../cosmos72/gomacro/fast/assignment.go | 405 + .../cosmos72/gomacro/fast/binary.go | 397 + .../cosmos72/gomacro/fast/binary_eqlneq.go | 1185 ++ .../gomacro/fast/binary_eqlneq.gomacro | 432 + .../cosmos72/gomacro/fast/binary_ops.go | 5132 ++++++ .../cosmos72/gomacro/fast/binary_ops.gomacro | 845 + .../cosmos72/gomacro/fast/binary_relops.go | 1629 ++ .../gomacro/fast/binary_relops.gomacro | 263 + .../cosmos72/gomacro/fast/binary_shifts.go | 4117 +++++ .../gomacro/fast/binary_shifts.gomacro | 264 + .../cosmos72/gomacro/fast/builtin.go | 1173 ++ .../github.com/cosmos72/gomacro/fast/call.go | 384 + .../cosmos72/gomacro/fast/call0ret1.go | 907 + .../cosmos72/gomacro/fast/call0ret1.gomacro | 200 + .../cosmos72/gomacro/fast/call0ret1compact.go | 119 + .../cosmos72/gomacro/fast/call1ret1.go | 8977 ++++++++++ .../cosmos72/gomacro/fast/call1ret1.gomacro | 341 + .../cosmos72/gomacro/fast/call1ret1compact.go | 222 + .../cosmos72/gomacro/fast/call2ret1.go | 8828 ++++++++++ .../cosmos72/gomacro/fast/call2ret1.gomacro | 258 + .../cosmos72/gomacro/fast/call2ret1compact.go | 32 + .../cosmos72/gomacro/fast/call_ellipsis.go | 697 + .../cosmos72/gomacro/fast/call_multivalue.go | 353 + .../cosmos72/gomacro/fast/call_variadic.go | 633 + .../cosmos72/gomacro/fast/callnret0.go | 1489 ++ .../cosmos72/gomacro/fast/callnret0.gomacro | 357 + .../cosmos72/gomacro/fast/callnret0compact.go | 76 + .../cosmos72/gomacro/fast/callnret1.go | 263 + .../cosmos72/gomacro/fast/callnret1.gomacro | 133 + .../cosmos72/gomacro/fast/channel.go | 1277 ++ .../cosmos72/gomacro/fast/channel.gomacro | 407 + .../github.com/cosmos72/gomacro/fast/code.go | 313 + .../cosmos72/gomacro/fast/compile.go | 360 + .../cosmos72/gomacro/fast/compositelit.go | 339 + .../cosmos72/gomacro/fast/convert.go | 152 + .../cosmos72/gomacro/fast/declaration.go | 562 + .../github.com/cosmos72/gomacro/fast/expr.go | 168 + .../github.com/cosmos72/gomacro/fast/expr1.go | 114 + .../cosmos72/gomacro/fast/func0ret0.go | 55 + .../cosmos72/gomacro/fast/func0ret1.go | 507 + .../cosmos72/gomacro/fast/func0ret1.gomacro | 104 + .../cosmos72/gomacro/fast/func1ret0.go | 468 + .../cosmos72/gomacro/fast/func1ret0.gomacro | 180 + .../cosmos72/gomacro/fast/func1ret1.go | 8303 +++++++++ .../cosmos72/gomacro/fast/func1ret1.gomacro | 206 + .../cosmos72/gomacro/fast/func2ret0.go | 7701 +++++++++ .../cosmos72/gomacro/fast/func2ret0.gomacro | 232 + .../cosmos72/gomacro/fast/function.go | 465 + .../cosmos72/gomacro/fast/global.go | 572 + .../cosmos72/gomacro/fast/identifier.go | 504 + .../cosmos72/gomacro/fast/import.go | 252 + .../github.com/cosmos72/gomacro/fast/index.go | 998 ++ .../cosmos72/gomacro/fast/index.gomacro | 552 + .../cosmos72/gomacro/fast/interface.go | 47 + .../cosmos72/gomacro/fast/interpreter.go | 252 + .../cosmos72/gomacro/fast/literal.go | 580 + .../cosmos72/gomacro/fast/macroexpand.go | 293 + .../cosmos72/gomacro/fast/place_get.go | 194 + .../cosmos72/gomacro/fast/place_ops.go | 6004 +++++++ .../cosmos72/gomacro/fast/place_ops.gomacro | 566 + .../cosmos72/gomacro/fast/place_set.go | 439 + .../cosmos72/gomacro/fast/place_set.gomacro | 269 + .../cosmos72/gomacro/fast/place_set_value.go | 94 + .../cosmos72/gomacro/fast/place_shifts.go | 1148 ++ .../gomacro/fast/place_shifts.gomacro | 404 + .../cosmos72/gomacro/fast/quasiquote.go | 290 + .../github.com/cosmos72/gomacro/fast/range.go | 482 + .../cosmos72/gomacro/fast/select.go | 252 + .../cosmos72/gomacro/fast/selector.go | 890 + .../github.com/cosmos72/gomacro/fast/slice.go | 284 + .../cosmos72/gomacro/fast/statement.go | 702 + .../cosmos72/gomacro/fast/switch.go | 364 + .../cosmos72/gomacro/fast/switch2.go | 1045 ++ .../cosmos72/gomacro/fast/switch2.gomacro | 321 + .../cosmos72/gomacro/fast/switch_type.go | 530 + .../github.com/cosmos72/gomacro/fast/type.go | 783 + .../github.com/cosmos72/gomacro/fast/unary.go | 123 + .../cosmos72/gomacro/fast/unary_ops.go | 370 + .../github.com/cosmos72/gomacro/fast/util.go | 1732 ++ .../cosmos72/gomacro/fast/var_ops.go | 14431 ++++++++++++++++ .../cosmos72/gomacro/fast/var_ops.gomacro | 680 + .../cosmos72/gomacro/fast/var_set.go | 2718 +++ .../cosmos72/gomacro/fast/var_set.gomacro | 251 + .../cosmos72/gomacro/fast/var_set_value.go | 514 + .../cosmos72/gomacro/fast/var_shifts.go | 2506 +++ .../cosmos72/gomacro/fast/var_shifts.gomacro | 360 + .../cosmos72/gomacro/fast/x_package.go | 80 + .../cosmos72/gomacro/imports/archive_tar.go | 57 + .../cosmos72/gomacro/imports/archive_zip.go | 39 + .../cosmos72/gomacro/imports/bufio.go | 46 + .../cosmos72/gomacro/imports/bytes.go | 72 + .../gomacro/imports/compress_bzip2.go | 20 + .../gomacro/imports/compress_flate.go | 66 + .../cosmos72/gomacro/imports/compress_gzip.go | 37 + .../cosmos72/gomacro/imports/compress_lzw.go | 23 + .../cosmos72/gomacro/imports/compress_zlib.go | 51 + .../gomacro/imports/container_heap.go | 51 + .../gomacro/imports/container_list.go | 21 + .../gomacro/imports/container_ring.go | 20 + .../cosmos72/gomacro/imports/context.go | 52 + .../cosmos72/gomacro/imports/crypto.go | 99 + .../cosmos72/gomacro/imports/crypto_aes.go | 23 + .../cosmos72/gomacro/imports/crypto_cipher.go | 97 + .../cosmos72/gomacro/imports/crypto_des.go | 24 + .../cosmos72/gomacro/imports/crypto_dsa.go | 31 + .../cosmos72/gomacro/imports/crypto_ecdsa.go | 23 + .../gomacro/imports/crypto_elliptic.go | 59 + .../cosmos72/gomacro/imports/crypto_hmac.go | 19 + .../cosmos72/gomacro/imports/crypto_md5.go | 24 + .../cosmos72/gomacro/imports/crypto_rand.go | 21 + .../cosmos72/gomacro/imports/crypto_rc4.go | 21 + .../cosmos72/gomacro/imports/crypto_rsa.go | 44 + .../cosmos72/gomacro/imports/crypto_sha1.go | 24 + .../cosmos72/gomacro/imports/crypto_sha256.go | 28 + .../cosmos72/gomacro/imports/crypto_sha512.go | 36 + .../cosmos72/gomacro/imports/crypto_subtle.go | 23 + .../cosmos72/gomacro/imports/crypto_tls.go | 109 + .../cosmos72/gomacro/imports/crypto_x509.go | 108 + .../gomacro/imports/crypto_x509_pkix.go | 27 + .../cosmos72/gomacro/imports/database_sql.go | 74 + .../gomacro/imports/database_sql_driver.go | 419 + .../cosmos72/gomacro/imports/debug_dwarf.go | 243 + .../cosmos72/gomacro/imports/debug_elf.go | 894 + .../cosmos72/gomacro/imports/debug_gosym.go | 30 + .../cosmos72/gomacro/imports/debug_macho.go | 91 + .../cosmos72/gomacro/imports/debug_pe.go | 77 + .../gomacro/imports/debug_plan9obj.go | 34 + .../cosmos72/gomacro/imports/encoding.go | 62 + .../gomacro/imports/encoding_ascii85.go | 24 + .../cosmos72/gomacro/imports/encoding_asn1.go | 68 + .../gomacro/imports/encoding_base32.go | 25 + .../gomacro/imports/encoding_base64.go | 29 + .../gomacro/imports/encoding_binary.go | 72 + .../cosmos72/gomacro/imports/encoding_csv.go | 27 + .../cosmos72/gomacro/imports/encoding_gob.go | 48 + .../cosmos72/gomacro/imports/encoding_hex.go | 28 + .../cosmos72/gomacro/imports/encoding_json.go | 69 + .../cosmos72/gomacro/imports/encoding_pem.go | 22 + .../cosmos72/gomacro/imports/encoding_xml.go | 97 + .../cosmos72/gomacro/imports/errors.go | 18 + .../cosmos72/gomacro/imports/expvar.go | 44 + .../cosmos72/gomacro/imports/flag.go | 92 + .../cosmos72/gomacro/imports/fmt.go | 136 + .../cosmos72/gomacro/imports/go_ast.go | 144 + .../cosmos72/gomacro/imports/go_build.go | 33 + .../cosmos72/gomacro/imports/go_constant.go | 55 + .../cosmos72/gomacro/imports/go_doc.go | 35 + .../cosmos72/gomacro/imports/go_format.go | 19 + .../cosmos72/gomacro/imports/go_importer.go | 21 + .../cosmos72/gomacro/imports/go_parser.go | 30 + .../cosmos72/gomacro/imports/go_printer.go | 26 + .../cosmos72/gomacro/imports/go_scanner.go | 25 + .../cosmos72/gomacro/imports/go_token.go | 114 + .../cosmos72/gomacro/imports/go_types.go | 217 + .../cosmos72/gomacro/imports/hash.go | 107 + .../cosmos72/gomacro/imports/hash_adler32.go | 22 + .../cosmos72/gomacro/imports/hash_crc32.go | 35 + .../cosmos72/gomacro/imports/hash_crc64.go | 30 + .../cosmos72/gomacro/imports/hash_fnv.go | 21 + .../cosmos72/gomacro/imports/html.go | 19 + .../cosmos72/gomacro/imports/html_template.go | 51 + .../cosmos72/gomacro/imports/image.go | 112 + .../cosmos72/gomacro/imports/image_color.go | 73 + .../gomacro/imports/image_color_palette.go | 19 + .../cosmos72/gomacro/imports/image_draw.go | 72 + .../cosmos72/gomacro/imports/image_gif.go | 32 + .../cosmos72/gomacro/imports/image_jpeg.go | 43 + .../cosmos72/gomacro/imports/image_png.go | 29 + .../gomacro/imports/index_suffixarray.go | 20 + .../github.com/cosmos72/gomacro/imports/io.go | 312 + .../cosmos72/gomacro/imports/io_ioutil.go | 25 + .../cosmos72/gomacro/imports/log.go | 50 + .../cosmos72/gomacro/imports/log_syslog.go | 55 + .../cosmos72/gomacro/imports/math.go | 134 + .../cosmos72/gomacro/imports/math_big.go | 48 + .../cosmos72/gomacro/imports/math_cmplx.go | 44 + .../cosmos72/gomacro/imports/math_rand.go | 73 + .../cosmos72/gomacro/imports/mime.go | 27 + .../gomacro/imports/mime_multipart.go | 49 + .../gomacro/imports/mime_quotedprintable.go | 22 + .../cosmos72/gomacro/imports/net.go | 246 + .../cosmos72/gomacro/imports/net_http.go | 384 + .../cosmos72/gomacro/imports/net_http_cgi.go | 22 + .../gomacro/imports/net_http_cookiejar.go | 37 + .../cosmos72/gomacro/imports/net_http_fcgi.go | 20 + .../gomacro/imports/net_http_httptest.go | 28 + .../gomacro/imports/net_http_httptrace.go | 25 + .../gomacro/imports/net_http_httputil.go | 50 + .../gomacro/imports/net_http_pprof.go | 23 + .../cosmos72/gomacro/imports/net_mail.go | 27 + .../cosmos72/gomacro/imports/net_rpc.go | 91 + .../gomacro/imports/net_rpc_jsonrpc.go | 22 + .../cosmos72/gomacro/imports/net_smtp.go | 41 + .../cosmos72/gomacro/imports/net_textproto.go | 34 + .../cosmos72/gomacro/imports/net_url.go | 33 + .../github.com/cosmos72/gomacro/imports/os.go | 167 + .../cosmos72/gomacro/imports/os_exec.go | 27 + .../cosmos72/gomacro/imports/os_signal.go | 21 + .../cosmos72/gomacro/imports/os_user.go | 29 + .../cosmos72/gomacro/imports/package.go | 98 + .../cosmos72/gomacro/imports/path.go | 26 + .../cosmos72/gomacro/imports/path_filepath.go | 44 + .../cosmos72/gomacro/imports/plugin.go | 30 + .../cosmos72/gomacro/imports/reflect.go | 86 + .../cosmos72/gomacro/imports/regexp.go | 27 + .../cosmos72/gomacro/imports/regexp_syntax.go | 94 + .../cosmos72/gomacro/imports/runtime.go | 85 + .../cosmos72/gomacro/imports/runtime_debug.go | 29 + .../cosmos72/gomacro/imports/runtime_pprof.go | 25 + .../cosmos72/gomacro/imports/runtime_trace.go | 19 + .../cosmos72/gomacro/imports/sort.go | 58 + .../cosmos72/gomacro/imports/strconv.go | 55 + .../cosmos72/gomacro/imports/strings.go | 65 + .../cosmos72/gomacro/imports/sync.go | 41 + .../cosmos72/gomacro/imports/sync_atomic.go | 48 + .../gomacro/imports/syscall_darwin_386.go | 1918 ++ .../gomacro/imports/syscall_darwin_amd64.go | 1918 ++ .../gomacro/imports/syscall_freebsd_386.go | 4027 +++++ .../gomacro/imports/syscall_freebsd_amd64.go | 4029 +++++ .../gomacro/imports/syscall_linux_386.go | 3970 +++++ .../gomacro/imports/syscall_linux_amd64.go | 3902 +++++ .../gomacro/imports/syscall_linux_arm.go | 2249 +++ .../gomacro/imports/syscall_linux_arm64.go | 4213 +++++ .../gomacro/imports/syscall_windows_amd64.go | 996 ++ .../cosmos72/gomacro/imports/testing.go | 44 + .../gomacro/imports/testing_iotest.go | 25 + .../cosmos72/gomacro/imports/testing_quick.go | 39 + .../cosmos72/gomacro/imports/text_scanner.go | 60 + .../gomacro/imports/text_tabwriter.go | 29 + .../cosmos72/gomacro/imports/text_template.go | 35 + .../gomacro/imports/text_template_parse.go | 83 + .../cosmos72/gomacro/imports/time.go | 100 + .../cosmos72/gomacro/imports/unicode.go | 293 + .../cosmos72/gomacro/imports/unicode_utf16.go | 22 + .../cosmos72/gomacro/imports/unicode_utf8.go | 40 + .../cosmos72/gomacro/imports/unsafe.go | 18 + vendor/github.com/cosmos72/gomacro/main.go | 114 + .../cosmos72/gomacro/parser/LICENSE | 27 + .../cosmos72/gomacro/parser/global.go | 153 + .../cosmos72/gomacro/parser/parser.diffs | 440 + .../cosmos72/gomacro/parser/parser.go | 2639 +++ .../cosmos72/gomacro/parser/quote.go | 192 + .../cosmos72/gomacro/parser/x_package.go | 30 + .../cosmos72/gomacro/scanner/LICENSE | 27 + .../cosmos72/gomacro/scanner/errors.go | 124 + .../cosmos72/gomacro/scanner/scanner.diffs | 125 + .../cosmos72/gomacro/scanner/scanner.go | 813 + .../cosmos72/gomacro/scanner/x_package.go | 27 + .../github.com/cosmos72/gomacro/token/LICENSE | 27 + .../cosmos72/gomacro/token/fileset.go | 98 + .../cosmos72/gomacro/token/token.go | 102 + .../cosmos72/gomacro/token/x_package.go | 39 + .../cosmos72/gomacro/typeutil/LICENSE | 27 + .../cosmos72/gomacro/typeutil/README.md | 34 + .../cosmos72/gomacro/typeutil/map.go | 350 + .../cosmos72/gomacro/typeutil/predicates.go | 237 + .../cosmos72/gomacro/typeutil/x_package.go | 25 + .../cosmos72/gomacro/xreflect/README.md | 12 + .../cosmos72/gomacro/xreflect/build_easy.go | 304 + .../cosmos72/gomacro/xreflect/build_strict.go | 345 + .../cosmos72/gomacro/xreflect/composite.go | 140 + .../cosmos72/gomacro/xreflect/fromreflect.go | 487 + .../cosmos72/gomacro/xreflect/function.go | 149 + .../cosmos72/gomacro/xreflect/gensym.go | 57 + .../cosmos72/gomacro/xreflect/global.go | 121 + .../cosmos72/gomacro/xreflect/importer.go | 65 + .../cosmos72/gomacro/xreflect/init.go | 145 + .../cosmos72/gomacro/xreflect/interface.go | 129 + .../cosmos72/gomacro/xreflect/lookup.go | 304 + .../cosmos72/gomacro/xreflect/named.go | 365 + .../cosmos72/gomacro/xreflect/package.go | 82 + .../cosmos72/gomacro/xreflect/struct.go | 181 + .../cosmos72/gomacro/xreflect/type.go | 263 + .../cosmos72/gomacro/xreflect/type_test.go | 457 + .../cosmos72/gomacro/xreflect/universe.go | 174 + .../cosmos72/gomacro/xreflect/util.go | 267 + .../cosmos72/gomacro/xreflect/value.go | 63 + .../cosmos72/gomacro/xreflect/x_package.go | 72 + vendor/github.com/nu7hatch/gouuid/.gitignore | 11 + vendor/github.com/nu7hatch/gouuid/COPYING | 19 + vendor/github.com/nu7hatch/gouuid/README.md | 21 + .../nu7hatch/gouuid/example_test.go | 33 + vendor/github.com/nu7hatch/gouuid/uuid.go | 173 + .../github.com/nu7hatch/gouuid/uuid_test.go | 135 + vendor/github.com/pebbe/zmq4/LICENSE.txt | 25 + vendor/github.com/pebbe/zmq4/README.md | 69 + vendor/github.com/pebbe/zmq4/auth.go | 645 + vendor/github.com/pebbe/zmq4/auth_test.go | 144 + .../github.com/pebbe/zmq4/ctxoptions_unix.go | 56 + .../pebbe/zmq4/ctxoptions_windows.go | 44 + vendor/github.com/pebbe/zmq4/doc.go | 20 + vendor/github.com/pebbe/zmq4/dummy.c | 5 + vendor/github.com/pebbe/zmq4/errors.go | 92 + .../github.com/pebbe/zmq4/examples/Build.sh | 69 + .../github.com/pebbe/zmq4/examples/README.md | 2 + .../pebbe/zmq4/examples/asyncsrv.go | 138 + .../pebbe/zmq4/examples/bstar/bstar.go | 275 + .../pebbe/zmq4/examples/bstarcli.go | 83 + .../pebbe/zmq4/examples/bstarsrv.go | 194 + .../pebbe/zmq4/examples/bstarsrv2.go | 43 + .../pebbe/zmq4/examples/clone/clone.go | 304 + .../pebbe/zmq4/examples/clonecli1.go | 31 + .../pebbe/zmq4/examples/clonecli2.go | 70 + .../pebbe/zmq4/examples/clonecli3.go | 83 + .../pebbe/zmq4/examples/clonecli4.go | 84 + .../pebbe/zmq4/examples/clonecli5.go | 85 + .../pebbe/zmq4/examples/clonecli6.go | 41 + .../pebbe/zmq4/examples/clonesrv1.go | 38 + .../pebbe/zmq4/examples/clonesrv2.go | 119 + .../pebbe/zmq4/examples/clonesrv3.go | 84 + .../pebbe/zmq4/examples/clonesrv4.go | 91 + .../pebbe/zmq4/examples/clonesrv5.go | 152 + .../pebbe/zmq4/examples/clonesrv6.go | 336 + .../github.com/pebbe/zmq4/examples/eagain.go | 28 + .../pebbe/zmq4/examples/espresso.go | 89 + .../github.com/pebbe/zmq4/examples/fileio1.go | 98 + .../github.com/pebbe/zmq4/examples/fileio2.go | 98 + .../github.com/pebbe/zmq4/examples/fileio3.go | 111 + .../pebbe/zmq4/examples/flcliapi/flcliapi.go | 268 + .../pebbe/zmq4/examples/flclient1.go | 77 + .../pebbe/zmq4/examples/flclient2.go | 118 + .../pebbe/zmq4/examples/flclient3.go | 35 + .../pebbe/zmq4/examples/flserver1.go | 32 + .../pebbe/zmq4/examples/flserver2.go | 39 + .../pebbe/zmq4/examples/flserver3.go | 57 + .../pebbe/zmq4/examples/hwclient.go | 32 + .../pebbe/zmq4/examples/hwserver.go | 35 + .../pebbe/zmq4/examples/identity.go | 62 + .../pebbe/zmq4/examples/interrupt.go | 58 + .../pebbe/zmq4/examples/intface/intface.go | 254 + .../pebbe/zmq4/examples/kvmsg/kvmsg.go | 262 + .../pebbe/zmq4/examples/kvmsg/kvmsg_test.go | 108 + .../pebbe/zmq4/examples/kvsimple/kvsimple.go | 157 + .../zmq4/examples/kvsimple/kvsimple_test.go | 64 + .../pebbe/zmq4/examples/lbbroker.go | 188 + .../pebbe/zmq4/examples/lbbroker2.go | 147 + .../pebbe/zmq4/examples/lbbroker3.go | 157 + .../pebbe/zmq4/examples/lpclient.go | 88 + .../pebbe/zmq4/examples/lpserver.go | 42 + .../github.com/pebbe/zmq4/examples/lvcache.go | 69 + .../pebbe/zmq4/examples/mdapi/const.go | 30 + .../pebbe/zmq4/examples/mdapi/mdcliapi.go | 173 + .../pebbe/zmq4/examples/mdapi/mdcliapi2.go | 171 + .../pebbe/zmq4/examples/mdapi/mdwrkapi.go | 248 + .../pebbe/zmq4/examples/mdbroker.go | 426 + .../pebbe/zmq4/examples/mdclient.go | 32 + .../pebbe/zmq4/examples/mdclient2.go | 39 + .../pebbe/zmq4/examples/mdworker.go | 32 + .../github.com/pebbe/zmq4/examples/mmiecho.go | 32 + .../pebbe/zmq4/examples/msgqueue.go | 36 + .../pebbe/zmq4/examples/mspoller.go | 47 + .../pebbe/zmq4/examples/msreader.go | 55 + .../github.com/pebbe/zmq4/examples/mtrelay.go | 52 + .../pebbe/zmq4/examples/mtserver.go | 54 + .../pebbe/zmq4/examples/pathopub.go | 44 + .../pebbe/zmq4/examples/pathosub.go | 41 + .../pebbe/zmq4/examples/peering1.go | 66 + .../pebbe/zmq4/examples/peering2.go | 264 + .../pebbe/zmq4/examples/peering3.go | 335 + .../github.com/pebbe/zmq4/examples/ppqueue.go | 166 + .../pebbe/zmq4/examples/ppworker.go | 130 + .../pebbe/zmq4/examples/psenvpub.go | 27 + .../pebbe/zmq4/examples/psenvsub.go | 27 + .../pebbe/zmq4/examples/rrbroker.go | 53 + .../pebbe/zmq4/examples/rrclient.go | 25 + .../pebbe/zmq4/examples/rrworker.go | 33 + .../pebbe/zmq4/examples/rtdealer.go | 84 + .../github.com/pebbe/zmq4/examples/rtreq.go | 82 + .../github.com/pebbe/zmq4/examples/spqueue.go | 88 + .../pebbe/zmq4/examples/spworker.go | 55 + .../pebbe/zmq4/examples/suisnail.go | 83 + vendor/github.com/pebbe/zmq4/examples/sync.sh | 12 + .../github.com/pebbe/zmq4/examples/syncpub.go | 57 + .../github.com/pebbe/zmq4/examples/syncsub.go | 51 + .../pebbe/zmq4/examples/tasksink.go | 40 + .../pebbe/zmq4/examples/tasksink2.go | 48 + .../pebbe/zmq4/examples/taskvent.go | 51 + .../pebbe/zmq4/examples/taskwork.go | 44 + .../pebbe/zmq4/examples/taskwork2.go | 62 + .../pebbe/zmq4/examples/ticlient.go | 81 + .../github.com/pebbe/zmq4/examples/titanic.go | 235 + .../pebbe/zmq4/examples/tripping.go | 82 + .../pebbe/zmq4/examples/udpping1.go | 103 + .../pebbe/zmq4/examples/udpping2.go | 62 + .../pebbe/zmq4/examples/udpping3.go | 25 + .../github.com/pebbe/zmq4/examples/version.go | 16 + .../pebbe/zmq4/examples/wuclient.go | 46 + .../github.com/pebbe/zmq4/examples/wuproxy.go | 29 + .../pebbe/zmq4/examples/wuserver.go | 40 + .../pebbe/zmq4/examples_security/Makefile | 5 + .../pebbe/zmq4/examples_security/README.md | 10 + .../zmq4/examples_security/grasslands.go | 49 + .../pebbe/zmq4/examples_security/ironhouse.go | 69 + .../zmq4/examples_security/stonehouse.go | 70 + .../zmq4/examples_security/strawhouse.go | 65 + .../pebbe/zmq4/examples_security/woodhouse.go | 62 + vendor/github.com/pebbe/zmq4/polling.go | 187 + vendor/github.com/pebbe/zmq4/reactor.go | 194 + .../github.com/pebbe/zmq4/socketevent_test.go | 98 + vendor/github.com/pebbe/zmq4/socketget.go | 648 + .../github.com/pebbe/zmq4/socketget_unix.go | 15 + .../pebbe/zmq4/socketget_windows.go | 26 + vendor/github.com/pebbe/zmq4/socketset.go | 800 + vendor/github.com/pebbe/zmq4/utils.go | 206 + vendor/github.com/pebbe/zmq4/zmq4.go | 1335 ++ vendor/github.com/pebbe/zmq4/zmq4.h | 55 + vendor/github.com/pebbe/zmq4/zmq41_test.go | 74 + vendor/github.com/pebbe/zmq4/zmq4_test.go | 2044 +++ vendor/golang.org/x/sync/AUTHORS | 3 + vendor/golang.org/x/sync/CONTRIBUTING.md | 31 + vendor/golang.org/x/sync/CONTRIBUTORS | 3 + vendor/golang.org/x/sync/LICENSE | 27 + vendor/golang.org/x/sync/PATENTS | 22 + vendor/golang.org/x/sync/README | 2 + vendor/golang.org/x/sync/codereview.cfg | 1 + vendor/golang.org/x/sync/errgroup/errgroup.go | 67 + .../errgroup/errgroup_example_md5all_test.go | 101 + .../x/sync/errgroup/errgroup_test.go | 176 + .../golang.org/x/sync/semaphore/semaphore.go | 131 + .../x/sync/semaphore/semaphore_bench_test.go | 130 + .../x/sync/semaphore/semaphore_test.go | 170 + .../x/sync/singleflight/singleflight.go | 111 + .../x/sync/singleflight/singleflight_test.go | 87 + vendor/golang.org/x/sync/syncmap/map.go | 372 + .../x/sync/syncmap/map_bench_test.go | 216 + .../x/sync/syncmap/map_reference_test.go | 151 + vendor/golang.org/x/sync/syncmap/map_test.go | 172 + 521 files changed, 189194 insertions(+), 18 deletions(-) create mode 100644 Gopkg.lock create mode 100644 Gopkg.toml create mode 100644 vendor/github.com/cosmos72/gomacro/.gitignore create mode 100644 vendor/github.com/cosmos72/gomacro/LICENSE create mode 100644 vendor/github.com/cosmos72/gomacro/README.md create mode 100644 vendor/github.com/cosmos72/gomacro/TrickyGo.md create mode 100644 vendor/github.com/cosmos72/gomacro/all_test.go create mode 100644 vendor/github.com/cosmos72/gomacro/ast2/ast.go create mode 100644 vendor/github.com/cosmos72/gomacro/ast2/ast_convert.go create mode 100644 vendor/github.com/cosmos72/gomacro/ast2/ast_node.go create mode 100644 vendor/github.com/cosmos72/gomacro/ast2/ast_slice.go create mode 100644 vendor/github.com/cosmos72/gomacro/ast2/error.go create mode 100644 vendor/github.com/cosmos72/gomacro/ast2/x_package.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/constants.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/genimport.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/genimport_proxy.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/genimport_untyped.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/genimport_wrapper.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/global.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/import_scanner.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/importer.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/literal.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/output.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/plugin.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/plugin_dummy.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/quasiquote.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/read.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/string.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/types.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/util.go create mode 100644 vendor/github.com/cosmos72/gomacro/base/x_package.go create mode 100644 vendor/github.com/cosmos72/gomacro/benchmark_test.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/assignment.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/binaryexpr.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/builtin.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/call.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/declaration.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/env.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/env_multithread.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/env_singlethread.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/eval.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/expr.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/fast.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/file.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/for.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/function.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/global.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/identifier.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/import.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/inspect.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/interface.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/interpreter.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/literal.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/macroexpand.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/method.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/number.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/output.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/quasiquote.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/select.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/statement.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/switch.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/switch_type.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/type.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/unaryexpr.go create mode 100644 vendor/github.com/cosmos72/gomacro/classic/x_package.go create mode 100644 vendor/github.com/cosmos72/gomacro/cmd.go create mode 100644 vendor/github.com/cosmos72/gomacro/doc/quasiquote.md create mode 100755 vendor/github.com/cosmos72/gomacro/example/arith.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/example/bag.go.easyjson create mode 100644 vendor/github.com/cosmos72/gomacro/example/bag.go.save create mode 100755 vendor/github.com/cosmos72/gomacro/example/channel.gomacro create mode 100755 vendor/github.com/cosmos72/gomacro/example/collatz.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/example/collatz.igo create mode 100644 vendor/github.com/cosmos72/gomacro/example/collatz.py create mode 100644 vendor/github.com/cosmos72/gomacro/example/dummy.go create mode 100644 vendor/github.com/cosmos72/gomacro/example/embedded_field.go create mode 100755 vendor/github.com/cosmos72/gomacro/example/embedded_field.gomacro create mode 100755 vendor/github.com/cosmos72/gomacro/example/fibonacci.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/example/fibonacci.igo create mode 100644 vendor/github.com/cosmos72/gomacro/example/fibonacci.py create mode 100755 vendor/github.com/cosmos72/gomacro/example/for_range.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/example/make_fibonacci.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/experiments/bytecode_interfaces/bytecode_interfaces.go create mode 100644 vendor/github.com/cosmos72/gomacro/experiments/bytecode_values/bytecode_values.go create mode 100644 vendor/github.com/cosmos72/gomacro/experiments/closure_interfaces/closure_interfaces.go create mode 100644 vendor/github.com/cosmos72/gomacro/experiments/closure_maps/closure_maps.go create mode 100644 vendor/github.com/cosmos72/gomacro/experiments/closure_values/closure_values.go create mode 100644 vendor/github.com/cosmos72/gomacro/experiments/dummy.go create mode 100644 vendor/github.com/cosmos72/gomacro/experiments/stmt_new_test.go create mode 100644 vendor/github.com/cosmos72/gomacro/experiments/stmt_old_test.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/README.md create mode 100644 vendor/github.com/cosmos72/gomacro/fast/address.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/address.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/assignment.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/binary.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/binary_eqlneq.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/binary_eqlneq.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/binary_ops.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/binary_ops.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/binary_relops.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/binary_relops.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/binary_shifts.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/binary_shifts.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/builtin.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call0ret1.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call0ret1.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call0ret1compact.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call1ret1.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call1ret1.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call1ret1compact.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call2ret1.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call2ret1.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call2ret1compact.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call_ellipsis.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call_multivalue.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/call_variadic.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/callnret0.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/callnret0.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/callnret0compact.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/callnret1.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/callnret1.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/channel.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/channel.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/code.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/compile.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/compositelit.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/convert.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/declaration.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/expr.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/expr1.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/func0ret0.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/func0ret1.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/func0ret1.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/func1ret0.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/func1ret0.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/func1ret1.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/func1ret1.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/func2ret0.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/func2ret0.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/function.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/global.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/identifier.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/import.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/index.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/index.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/interface.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/interpreter.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/literal.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/macroexpand.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/place_get.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/place_ops.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/place_ops.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/place_set.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/place_set.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/place_set_value.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/place_shifts.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/place_shifts.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/quasiquote.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/range.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/select.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/selector.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/slice.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/statement.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/switch.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/switch2.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/switch2.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/switch_type.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/type.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/unary.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/unary_ops.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/util.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/var_ops.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/var_ops.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/var_set.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/var_set.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/var_set_value.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/var_shifts.go create mode 100644 vendor/github.com/cosmos72/gomacro/fast/var_shifts.gomacro create mode 100644 vendor/github.com/cosmos72/gomacro/fast/x_package.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/archive_tar.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/archive_zip.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/bufio.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/bytes.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/compress_bzip2.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/compress_flate.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/compress_gzip.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/compress_lzw.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/compress_zlib.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/container_heap.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/container_list.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/container_ring.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/context.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_aes.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_cipher.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_des.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_dsa.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_ecdsa.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_elliptic.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_hmac.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_md5.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_rand.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_rc4.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_rsa.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_sha1.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_sha256.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_sha512.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_subtle.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_tls.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_x509.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/crypto_x509_pkix.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/database_sql.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/database_sql_driver.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/debug_dwarf.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/debug_elf.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/debug_gosym.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/debug_macho.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/debug_pe.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/debug_plan9obj.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_ascii85.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_asn1.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_base32.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_base64.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_binary.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_csv.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_gob.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_hex.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_json.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_pem.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/encoding_xml.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/errors.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/expvar.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/flag.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/fmt.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_ast.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_build.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_constant.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_doc.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_format.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_importer.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_parser.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_printer.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_scanner.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_token.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/go_types.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/hash.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/hash_adler32.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/hash_crc32.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/hash_crc64.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/hash_fnv.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/html.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/html_template.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/image.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/image_color.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/image_color_palette.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/image_draw.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/image_gif.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/image_jpeg.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/image_png.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/index_suffixarray.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/io.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/io_ioutil.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/log.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/log_syslog.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/math.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/math_big.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/math_cmplx.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/math_rand.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/mime.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/mime_multipart.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/mime_quotedprintable.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_http.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_http_cgi.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_http_cookiejar.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_http_fcgi.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_http_httptest.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_http_httptrace.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_http_httputil.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_http_pprof.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_mail.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_rpc.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_rpc_jsonrpc.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_smtp.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_textproto.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/net_url.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/os.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/os_exec.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/os_signal.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/os_user.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/package.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/path.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/path_filepath.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/plugin.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/reflect.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/regexp.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/regexp_syntax.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/runtime.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/runtime_debug.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/runtime_pprof.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/runtime_trace.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/sort.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/strconv.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/strings.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/sync.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/sync_atomic.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/syscall_darwin_386.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/syscall_darwin_amd64.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/syscall_freebsd_386.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/syscall_freebsd_amd64.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/syscall_linux_386.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/syscall_linux_amd64.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/syscall_linux_arm.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/syscall_linux_arm64.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/syscall_windows_amd64.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/testing.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/testing_iotest.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/testing_quick.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/text_scanner.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/text_tabwriter.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/text_template.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/text_template_parse.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/time.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/unicode.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/unicode_utf16.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/unicode_utf8.go create mode 100644 vendor/github.com/cosmos72/gomacro/imports/unsafe.go create mode 100644 vendor/github.com/cosmos72/gomacro/main.go create mode 100644 vendor/github.com/cosmos72/gomacro/parser/LICENSE create mode 100644 vendor/github.com/cosmos72/gomacro/parser/global.go create mode 100644 vendor/github.com/cosmos72/gomacro/parser/parser.diffs create mode 100644 vendor/github.com/cosmos72/gomacro/parser/parser.go create mode 100644 vendor/github.com/cosmos72/gomacro/parser/quote.go create mode 100644 vendor/github.com/cosmos72/gomacro/parser/x_package.go create mode 100644 vendor/github.com/cosmos72/gomacro/scanner/LICENSE create mode 100644 vendor/github.com/cosmos72/gomacro/scanner/errors.go create mode 100644 vendor/github.com/cosmos72/gomacro/scanner/scanner.diffs create mode 100644 vendor/github.com/cosmos72/gomacro/scanner/scanner.go create mode 100644 vendor/github.com/cosmos72/gomacro/scanner/x_package.go create mode 100644 vendor/github.com/cosmos72/gomacro/token/LICENSE create mode 100644 vendor/github.com/cosmos72/gomacro/token/fileset.go create mode 100644 vendor/github.com/cosmos72/gomacro/token/token.go create mode 100644 vendor/github.com/cosmos72/gomacro/token/x_package.go create mode 100644 vendor/github.com/cosmos72/gomacro/typeutil/LICENSE create mode 100644 vendor/github.com/cosmos72/gomacro/typeutil/README.md create mode 100644 vendor/github.com/cosmos72/gomacro/typeutil/map.go create mode 100644 vendor/github.com/cosmos72/gomacro/typeutil/predicates.go create mode 100644 vendor/github.com/cosmos72/gomacro/typeutil/x_package.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/README.md create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/build_easy.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/build_strict.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/composite.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/fromreflect.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/function.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/gensym.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/global.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/importer.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/init.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/interface.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/lookup.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/named.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/package.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/struct.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/type.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/type_test.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/universe.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/util.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/value.go create mode 100644 vendor/github.com/cosmos72/gomacro/xreflect/x_package.go create mode 100644 vendor/github.com/nu7hatch/gouuid/.gitignore create mode 100644 vendor/github.com/nu7hatch/gouuid/COPYING create mode 100644 vendor/github.com/nu7hatch/gouuid/README.md create mode 100644 vendor/github.com/nu7hatch/gouuid/example_test.go create mode 100644 vendor/github.com/nu7hatch/gouuid/uuid.go create mode 100644 vendor/github.com/nu7hatch/gouuid/uuid_test.go create mode 100644 vendor/github.com/pebbe/zmq4/LICENSE.txt create mode 100644 vendor/github.com/pebbe/zmq4/README.md create mode 100644 vendor/github.com/pebbe/zmq4/auth.go create mode 100644 vendor/github.com/pebbe/zmq4/auth_test.go create mode 100644 vendor/github.com/pebbe/zmq4/ctxoptions_unix.go create mode 100644 vendor/github.com/pebbe/zmq4/ctxoptions_windows.go create mode 100644 vendor/github.com/pebbe/zmq4/doc.go create mode 100644 vendor/github.com/pebbe/zmq4/dummy.c create mode 100644 vendor/github.com/pebbe/zmq4/errors.go create mode 100755 vendor/github.com/pebbe/zmq4/examples/Build.sh create mode 100644 vendor/github.com/pebbe/zmq4/examples/README.md create mode 100644 vendor/github.com/pebbe/zmq4/examples/asyncsrv.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/bstar/bstar.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/bstarcli.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/bstarsrv.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/bstarsrv2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clone/clone.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonecli1.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonecli2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonecli3.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonecli4.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonecli5.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonecli6.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonesrv1.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonesrv2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonesrv3.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonesrv4.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonesrv5.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/clonesrv6.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/eagain.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/espresso.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/fileio1.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/fileio2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/fileio3.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/flcliapi/flcliapi.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/flclient1.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/flclient2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/flclient3.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/flserver1.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/flserver2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/flserver3.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/hwclient.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/hwserver.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/identity.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/interrupt.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/intface/intface.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/kvmsg/kvmsg.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/kvmsg/kvmsg_test.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/kvsimple/kvsimple.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/kvsimple/kvsimple_test.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/lbbroker.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/lbbroker2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/lbbroker3.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/lpclient.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/lpserver.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/lvcache.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mdapi/const.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mdapi/mdcliapi.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mdapi/mdcliapi2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mdapi/mdwrkapi.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mdbroker.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mdclient.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mdclient2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mdworker.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mmiecho.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/msgqueue.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mspoller.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/msreader.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mtrelay.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/mtserver.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/pathopub.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/pathosub.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/peering1.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/peering2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/peering3.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/ppqueue.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/ppworker.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/psenvpub.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/psenvsub.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/rrbroker.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/rrclient.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/rrworker.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/rtdealer.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/rtreq.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/spqueue.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/spworker.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/suisnail.go create mode 100755 vendor/github.com/pebbe/zmq4/examples/sync.sh create mode 100644 vendor/github.com/pebbe/zmq4/examples/syncpub.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/syncsub.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/tasksink.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/tasksink2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/taskvent.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/taskwork.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/taskwork2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/ticlient.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/titanic.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/tripping.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/udpping1.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/udpping2.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/udpping3.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/version.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/wuclient.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/wuproxy.go create mode 100644 vendor/github.com/pebbe/zmq4/examples/wuserver.go create mode 100644 vendor/github.com/pebbe/zmq4/examples_security/Makefile create mode 100644 vendor/github.com/pebbe/zmq4/examples_security/README.md create mode 100644 vendor/github.com/pebbe/zmq4/examples_security/grasslands.go create mode 100644 vendor/github.com/pebbe/zmq4/examples_security/ironhouse.go create mode 100644 vendor/github.com/pebbe/zmq4/examples_security/stonehouse.go create mode 100644 vendor/github.com/pebbe/zmq4/examples_security/strawhouse.go create mode 100644 vendor/github.com/pebbe/zmq4/examples_security/woodhouse.go create mode 100644 vendor/github.com/pebbe/zmq4/polling.go create mode 100644 vendor/github.com/pebbe/zmq4/reactor.go create mode 100644 vendor/github.com/pebbe/zmq4/socketevent_test.go create mode 100644 vendor/github.com/pebbe/zmq4/socketget.go create mode 100644 vendor/github.com/pebbe/zmq4/socketget_unix.go create mode 100644 vendor/github.com/pebbe/zmq4/socketget_windows.go create mode 100644 vendor/github.com/pebbe/zmq4/socketset.go create mode 100644 vendor/github.com/pebbe/zmq4/utils.go create mode 100644 vendor/github.com/pebbe/zmq4/zmq4.go create mode 100644 vendor/github.com/pebbe/zmq4/zmq4.h create mode 100644 vendor/github.com/pebbe/zmq4/zmq41_test.go create mode 100644 vendor/github.com/pebbe/zmq4/zmq4_test.go create mode 100644 vendor/golang.org/x/sync/AUTHORS create mode 100644 vendor/golang.org/x/sync/CONTRIBUTING.md create mode 100644 vendor/golang.org/x/sync/CONTRIBUTORS create mode 100644 vendor/golang.org/x/sync/LICENSE create mode 100644 vendor/golang.org/x/sync/PATENTS create mode 100644 vendor/golang.org/x/sync/README create mode 100644 vendor/golang.org/x/sync/codereview.cfg create mode 100644 vendor/golang.org/x/sync/errgroup/errgroup.go create mode 100644 vendor/golang.org/x/sync/errgroup/errgroup_example_md5all_test.go create mode 100644 vendor/golang.org/x/sync/errgroup/errgroup_test.go create mode 100644 vendor/golang.org/x/sync/semaphore/semaphore.go create mode 100644 vendor/golang.org/x/sync/semaphore/semaphore_bench_test.go create mode 100644 vendor/golang.org/x/sync/semaphore/semaphore_test.go create mode 100644 vendor/golang.org/x/sync/singleflight/singleflight.go create mode 100644 vendor/golang.org/x/sync/singleflight/singleflight_test.go create mode 100644 vendor/golang.org/x/sync/syncmap/map.go create mode 100644 vendor/golang.org/x/sync/syncmap/map_bench_test.go create mode 100644 vendor/golang.org/x/sync/syncmap/map_reference_test.go create mode 100644 vendor/golang.org/x/sync/syncmap/map_test.go diff --git a/Gopkg.lock b/Gopkg.lock new file mode 100644 index 0000000..27529ae --- /dev/null +++ b/Gopkg.lock @@ -0,0 +1,33 @@ +# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'. + + +[[projects]] + name = "github.com/cosmos72/gomacro" + packages = ["ast2","base","classic","fast","imports","parser","scanner","token","typeutil","xreflect"] + revision = "cb2aedf8c257af98c51e08d1aace0142954c592e" + version = "v2.0" + +[[projects]] + branch = "master" + name = "github.com/nu7hatch/gouuid" + packages = ["."] + revision = "179d4d0c4d8d407a32af483c2354df1d2c91e6c3" + +[[projects]] + branch = "master" + name = "github.com/pebbe/zmq4" + packages = ["."] + revision = "651d7b11cd31b16fb4c76741c234e258b6a8039b" + +[[projects]] + branch = "master" + name = "golang.org/x/sync" + packages = ["syncmap"] + revision = "f52d1811a62927559de87708c8913c1650ce4f26" + +[solve-meta] + analyzer-name = "dep" + analyzer-version = 1 + inputs-digest = "8e7fe89ae8ac8aaac86f7e7381a28ce0c2ad0ac61f9e4beaf35d631a9200da2f" + solver-name = "gps-cdcl" + solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml new file mode 100644 index 0000000..953dbef --- /dev/null +++ b/Gopkg.toml @@ -0,0 +1,34 @@ + +# Gopkg.toml example +# +# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md +# for detailed Gopkg.toml documentation. +# +# required = ["github.com/user/thing/cmd/thing"] +# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"] +# +# [[constraint]] +# name = "github.com/user/project" +# version = "1.0.0" +# +# [[constraint]] +# name = "github.com/user/project2" +# branch = "dev" +# source = "github.com/myfork/project2" +# +# [[override]] +# name = "github.com/x/y" +# version = "2.4.0" + + +[[constraint]] + name = "github.com/cosmos72/gomacro" + version = "2.0.0" + +[[constraint]] + branch = "master" + name = "github.com/nu7hatch/gouuid" + +[[constraint]] + branch = "master" + name = "github.com/pebbe/zmq4" diff --git a/kernel.go b/kernel.go index f60fad6..fcbb805 100644 --- a/kernel.go +++ b/kernel.go @@ -201,7 +201,6 @@ func handleShellMsg(ir *classic.Interp, receipt msgReceipt) { if err := handleExecuteRequest(ir, receipt); err != nil { log.Fatal(err) } - case "shutdown_request": handleShutdownRequest(receipt) default: @@ -248,12 +247,12 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { content["execution_count"] = ExecCounter // Redirect the standard out from the REPL. - old := os.Stdout - r, w, err := os.Pipe() + oldStdout := os.Stdout + rOut, wOut, err := os.Pipe() if err != nil { return err } - os.Stdout = w + os.Stdout = wOut // Redirect the standard error from the REPL. rErr, wErr, err := os.Pipe() @@ -281,33 +280,31 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { ir.Repl(in) } - // Copy the output in a separate goroutine to prevent + // Copy the stdout in a separate goroutine to prevent // blocking on printing. - outC := make(chan string) + outStdout := make(chan string) go func() { var buf bytes.Buffer - io.Copy(&buf, r) - outC <- buf.String() + io.Copy(&buf, rOut) + outStdout <- buf.String() }() - // Return standard out back to normal state. - w.Close() - os.Stdout = old - val := <-outC + // Return stdout back to normal state. + wOut.Close() + os.Stdout = oldStdout + val := <-outStdout - // Copy the output in a separate goroutine to prevent + // Copy the stderr in a separate goroutine to prevent // blocking on printing. - outCErr := make(chan string) + outStderr := make(chan string) go func() { var buf bytes.Buffer io.Copy(&buf, rErr) - outCErr <- buf.String() + outStderr <- buf.String() }() wErr.Close() - stdErr := <-outCErr - - fmt.Printf("This is stderr: %s\n", stdErr) + stdErr := <-outStderr if len(val) > 0 { content["status"] = "ok" diff --git a/vendor/github.com/cosmos72/gomacro/.gitignore b/vendor/github.com/cosmos72/gomacro/.gitignore new file mode 100644 index 0000000..8c3cff0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/.gitignore @@ -0,0 +1,4 @@ +gomacro +*.exe +*.test +examples/examples diff --git a/vendor/github.com/cosmos72/gomacro/LICENSE b/vendor/github.com/cosmos72/gomacro/LICENSE new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/vendor/github.com/cosmos72/gomacro/README.md b/vendor/github.com/cosmos72/gomacro/README.md new file mode 100644 index 0000000..b1fe2db --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/README.md @@ -0,0 +1,186 @@ +## gomacro - interactive Go interpreter with macros + +gomacro is a fairly complete Go interpreter, implemented in pure Go. It offers both +an interactive REPL and a scripting mode, and does not require a Go toolchain at runtime +(except in one very specific case: import of a non-standard package). + +It has very few dependencies: go/ast, go/types, reflect and, +for goroutines support, golang.org/x/sync/syncmap. + +Gomacro can be used as: +* a standalone executable with interactive Go REPL: + just run `gomacro` from your command line or, better, `rlwrap gomacro` + (rlwrap is a wrapper that adds history and line editing to terminal-based + programs - available on many platforms) + Available options: + ``` + -c, --collect collect declarations and statements, to print them later + -e, --expr EXPR evaluate expression + -f, --force-overwrite option -w will overwrite existing files + -h, --help show this help and exit + -i, --repl interactive. start a REPL after evaluating expression, files and dirs. + default: start a REPL only if no expressions, files or dirs are specified + -m, --macro-only do not execute code, only parse and macroexpand it. + useful to run gomacro as a Go preprocessor + -n, --no-trap do not trap panics in the interpreter + -t, --trap trap panics in the interpreter (default) + -s, --silent silent. do NOT show startup message, prompt, and expressions results. + default when executing files and dirs. + -v, --verbose verbose. show startup message, prompt, and expressions results. + default when executing an expression. + -vv, --very-verbose as -v, and in addition show the type of expressions results. + default when executing a REPL + -w, --write-decls write collected declarations and statements to *.go files. + implies -c + -x, --exec execute parsed code (default). disabled by -m + ``` + + Options are processed in order, except for -i that is always processed as last. + + Collected declarations and statements can be also written to standard output + or to a file with the REPL command :write + +* an interactive tool to make science more productive and more fun. + If you use compiled Go with scientific libraries (physics, bioinformatics, statistics...) + you can import the same libraries from gomacro REPL (requires Go 1.8+ and Linux), + call them interactively, inspect the results, feed them to other functions/libraries, + all in a single session. + The imported libraries will be **compiled**, not interpreted, + so they will be as fast as in compiled Go. + +* a library that adds Eval() and scripting capabilities + to your Go programs - provided you comply with its LGPL license + +* a way to execute Go source code on-the-fly without a Go compiler: + you can either run `gomacro FILENAME.go` (works on every supported platform) + + or you can insert a line `#!/usr/bin/env gomacro` at the beginning of a Go source file, + then mark the file as executable with `chmod +x FILENAME.go` and finally execute it + with `./FILENAME.go` (works only on Unix-like systems: Linux, *BSD, Mac OS X ...) + +* a Go code generation tool: + gomacro was started as an experiment to add Lisp-like macros to Go, and they are + extremely useful (in the author's opinion) to simplify code generation. + Macros are normal Go functions, they are special only in one aspect: + they are executed **before** compiling code, and their input and output **is** code + (abstract syntax trees, in the form of go/ast.Node) + + Don't confuse them with C preprocessor macros: in Lisp, Scheme and now in Go, + macros are regular functions written in the same programming language + as the rest of the source code. They can perform arbitrary computations + and call any other function or library: they can even read and write files, + open network connections, etc... as a normal Go function can do. + + Run `gomacro -m -w FILENAMES` to parse and expand macros in one or more files. + For each filename on the command line, gomacro will parse it, expand macros, + then create a corresponding FILENAME.go with the parsed and macroexpanded + imports, declarations and statements. + + To parse and macroexpand all *.gomacro files in a directory, run `gomacro -m -w DIRECTORY` + +## Current Status + +Fairly complete. + +The intepreter supports: +* multiline input +* line comments starting with #! in addition to // +* basic types: booleans, integers, floats, complex numbers, strings (and iota) +* the empty interface, i.e. interface{} - other interfaces not implemented yet +* constant, variable and type declarations (untyped constants are emulated with typed constants) +* Go 1.9 type aliases (experimental) +* unary and binary operators +* assignment, i.e. operators = += -= *= /= %= &= |= ^= &^= <<= >>= +* composite types: arrays, channels, maps, pointers, slices, strings, structs +* composite literals +* type assertions +* function declarations (including variadic functions) +* method declarations (including variadic methods and methods with pointer receiver) +* seamless invocation of compiled functions from interpreter, and vice-versa +* channel send and receive +* goroutines, i.e. go function(args) +* function and method calls, including multiple return values +* if, for, for-range, break, continue, fallthrough, return (unimplemented: goto) +* select, switch, type switch, fallthrough +* all builtins: append, cap, close, comples, defer, delete, imag, len, make, new, panic, print, println, real, recover +* imports: Go standard packages "just work", importing other packages requires the "plugin" package (available only for Go 1.8+ on Linux) +* switching to a different package +* macro declarations, for example `macro foo(a, b, c interface{}) interface{} { return b }` +* macro calls, for example `foo; x; y; z` +* macroexpansion: code walker, MacroExpand and MacroExpand1 +* ~quote and ~quasiquote. they take any number of arguments in curly braces, for example: + `~quote { x; y; z }` +* ~unquote and ~unquote_splice +* ~func, ~lambda: specializations of "func". + * ~lambda always starts a closure (lambda) or a function type + * ~func always starts a function or method declaration + useful to resolve a limitation in Go syntax that becomes significant for ~quote and ~quasiquote: + * in declarations, "func" always declares a function or method - there is no way to declare a closure (lambda) or function type + * in statements and expressions, including the body of ~quote and ~quasiquote, + "func" always declares a closure (lambda) or a function type - there is no way to declare a function or method +* nesting macros, quotes and unquotes + +Some features are still missing: +* interfaces. They can be declared, but nothing more: there is no way to implement them or call their methods +* extracting methods from types. For example `time.Duration.String` should return a `func(time.Duration) string` + but currently gives an error. + Instead extracting methods from objects is supported: `time.Duration(1s).String` correctly returns a func() string +* goto +* named return values +* history/readline (rlwrap does the job in most cases) + +Limitations: +* no distinction between named and unnamed types created by interpreted code. + For the interpreter, `struct { A, B int }` and `type Pair struct { A, B int }` + are exactly the same type. This has subtle consequences, including the risk + that two different packages define the same type and overwrite each other's methods. + + The reason for such limitation is simple: the interpreter uses `reflect.StructOf()` + to define new types, which can only create unnamed types. + The interpreter then defines named types as aliases for the underlying unnamed types. + +* cannot create recursive types, as for example `type List struct { First interface{}; Rest *List}` + The reason is the same as above: the interpreter uses `reflect.StructOf()` to define new types, + which cannot create recursive types + + +## Why it was created + +First of all, to experiment with Go :) + +Second, to simplify Go code generation tools (keep reading for the gory details) + +--- + +Problem: "go generate" and many other Go tools automatically create +Go source code from some kind of description - usually an interface +specifications as WSDL, XSD, JSON... + +Such specification may be written in Go, for example when creating JSON +marshallers/unmarshallers from Go structs, or in some other language, +for example when creating Go structs from JSON sample data. + +In both cases, a variety of external programs are needed to +generate Go source code: such programs need to be installed +separately from the code being generated and compiled. + +Also, Go is currently lacking generics (read: C++-like templates) +because of the rationale "we do not yet know how to do them right, +and once you do them wrong everybody is stuck with them" + +The purpose of Lisp-like macros is to execute arbitrary code +while compiling, **in particular** to generate source code. + +This makes them very well suited (although arguably a bit low level) +for both purposes: code generation and C++-like templates, which +are a special case of code generation - for a demonstration of how +to implement C++-like templates on top of Lisp-like macros, +see for example the project https://github.com/cosmos72/cl-parametric-types +from the same author. + +Building a Go interpreter that supports Lisp-like macros, +allows to embed all these code-generation activities +into regular Go source code, without the need for external programs +(except for the intepreter itself). + +As a free bonus, we get support for Eval() diff --git a/vendor/github.com/cosmos72/gomacro/TrickyGo.md b/vendor/github.com/cosmos72/gomacro/TrickyGo.md new file mode 100644 index 0000000..3a01cfa --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/TrickyGo.md @@ -0,0 +1,46 @@ +A collection of tricky go code + +``` +// change the meaning of true +const true = false +println(true) +``` + +``` +// change the meaning of uint +type uint int +println(uint(1)) +``` + +``` +// change the meaning of uint (again) +func uint(x int) int { return x + 7 } +println(uint(1)) +``` + +``` +// nil interface values don't implement interfaces +var x error +y := x.(error) // panic! +``` + +``` +// except that nil interface{} implements interface{} +var x interface{} +y := x.(interface{}) // works +``` + +``` +import "os" +func getGoPath() string { + dir := os.Getenv("GOPATH") + if len(dir) == 0 { + dir := os.Getenv("HOME") // shadows outer "dir", does NOT modify it + if len(dir) == 0 { + panic("cannot determine go source directory: both $GOPATH and $HOME are unset or empty") + } + dir += "/go" + } + return dir // inner "dir" is not seen -> always returns os.Getenv("GOPATH") +} +``` diff --git a/vendor/github.com/cosmos72/gomacro/all_test.go b/vendor/github.com/cosmos72/gomacro/all_test.go new file mode 100644 index 0000000..cb60b97 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/all_test.go @@ -0,0 +1,786 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * all_test.go + * + * Created on: Mar 06 2017 + * Author: Massimiliano Ghilardi + */ + +package main + +import ( + "go/ast" + "go/token" + r "reflect" + "testing" + "time" + + . "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" + "github.com/cosmos72/gomacro/classic" + "github.com/cosmos72/gomacro/fast" + xr "github.com/cosmos72/gomacro/xreflect" +) + +type TestFor int + +const ( + I TestFor = 1 << iota + F + S // set option OptDebugSleepOnSwitch + A = I | F +) + +type TestCase struct { + testfor TestFor + name string + program string + result0 interface{} + results []interface{} +} + +func TestClassic(t *testing.T) { + ir := classic.New() + // ir.Options |= OptDebugCallStack | OptDebugPanicRecover + for _, test := range testcases { + if test.testfor&I != 0 { + test := test + t.Run(test.name, func(t *testing.T) { test.classic(t, ir) }) + } + } +} + +func TestFast(t *testing.T) { + ir := fast.New() + for _, test := range testcases { + if test.testfor&F != 0 { + test := test + t.Run(test.name, func(t *testing.T) { test.fast(t, ir) }) + } + } +} + +func (test *TestCase) classic(t *testing.T, ir *classic.Interp) { + + rets := PackValues(ir.Eval(test.program)) + + test.compareResults(t, rets) +} + +func (test *TestCase) fast(t *testing.T, ir *fast.Interp) { + + if test.testfor&S != 0 { + ir.Comp.Options |= OptDebugSleepOnSwitch + } else { + ir.Comp.Options &^= OptDebugSleepOnSwitch + } + rets := PackValues(ir.Eval(test.program)) + + test.compareResults(t, rets) +} + +const sum_source_string = "func sum(n int) int { total := 0; for i := 1; i <= n; i++ { total += i }; return total }" +const fibonacci_source_string = "func fibonacci(n int) int { if n <= 2 { return 1 }; return fibonacci(n-1) + fibonacci(n-2) }" +const shellsort_source_string = ` +var shellshort_gaps = &[...]int{701, 301, 132, 57, 23, 10, 4, 1} + +func shellsort(v []int) { + var i, j, n, gi, gapn, gap, temp int + n = len(v) + gapn = len(shellshort_gaps) // fast interpreter currently lacks for-range + for gi = 0; gi < gapn; gi++ { + gap = shellshort_gaps[gi] + for i = gap; i < n; i++ { + temp = v[i] + for j = i; j >= gap && v[j-gap] > temp; j -= gap { + v[j] = v[j-gap] + } + v[j] = temp + } + } +} +` +const switch_source_string = `func bigswitch(n int) int { + for i := 0; i < 1000; i++ { + switch n&15 { + case 0: n++ + case 1: n+=2 + case 2: n+=3 + case 3: n+=4 + case 4: n+=5 + case 5: n+=6 + case 6: n+=7 + case 7: n+=8 + case 8: n+=9 + case 9: n+=10 + case 10: n+=11 + case 11: n+=12 + case 12: n+=13 + case 13: n+=14 + case 14: n+=15 + case 15: n-- + } + } + return n +}` + +var ( + cti = r.StructOf( + []r.StructField{ + r.StructField{Name: StrGensymInterface, Type: r.TypeOf((*interface{})(nil)).Elem()}, + r.StructField{Name: "String", Type: r.TypeOf((*func() string)(nil)).Elem()}, + }, + ) + fti = r.StructOf( + []r.StructField{ + r.StructField{Name: StrGensymInterface, Type: r.TypeOf((*xr.InterfaceHeader)(nil)).Elem()}, + r.StructField{Name: "String", Type: r.TypeOf((*func() string)(nil)).Elem()}, + }, + ) + + csi = r.Zero(cti).Interface() + fsi = r.Zero(r.PtrTo(fti)).Interface() + + zeroValues = []r.Value{} +) + +var nil_map_int_string map[int]string + +func for_range_string(s string) int32 { + var v0 int32 + for i, r := range s { + v0 += r << (uint8(i) * 8) + } + return v0 +} + +var testcases = []TestCase{ + TestCase{A, "1+1", "1+1", 1 + 1, nil}, + TestCase{A, "1+'A'", "1+'A'", 'B', nil}, // rune i.e. int32 should win over untyped constant (or int) + TestCase{A, "int8+1", "int8(1)+1", int8(1) + 1, nil}, + TestCase{A, "int8_overflow", "int8(64)+64", int8(-128), nil}, + TestCase{A, "string", "\"foobar\"", "foobar", nil}, + TestCase{A, "expr_and", "3 & 6", 3 & 6, nil}, + TestCase{A, "expr_or", "7 | 8", 7 | 8, nil}, + TestCase{A, "expr_xor", "0x1f ^ 0xf1", 0x1f ^ 0xf1, nil}, + TestCase{A, "expr_arith", "((1+2)*3^4|99)%112", ((1+2)*3 ^ 4 | 99) % 112, nil}, + TestCase{A, "expr_shift", "7<<(10>>1)", 7 << (10 >> 1), nil}, + + TestCase{A, "complex_1", "7i", 7i, nil}, + TestCase{A, "complex_2", "0.5+1.75i", 0.5 + 1.75i, nil}, + TestCase{A, "complex_3", "1i * 2i", 1i * 2i, nil}, + TestCase{A, "const_0", "const c0 rune = 'x'; c0", 'x', nil}, + TestCase{A, "const_1", "const c1 = 11; c1", 11, nil}, + TestCase{A, "const_2", "const c2 = 0xff&555+23/12.2; c2", 0xff&555 + 23/12.2, nil}, + + // the classic interpreter is not accurate in this cases... missing exact arithmetic on constants + TestCase{I, "const_3", "const c3 = 0.1+0.2; c3", float64(0.1) + float64(0.2), nil}, + TestCase{I, "const_4", "const c4 = c3/3; c4", (float64(0.1) + float64(0.2)) / 3, nil}, + + // the fast interpreter instead *IS* accurate, thanks to exact arithmetic on untyped constants + TestCase{F, "const_3", "const c3 = 0.1+0.2; c3", 0.1 + 0.2, nil}, + TestCase{F, "const_4", "const c4 = c3/3; c4", (0.1 + 0.2) / 3, nil}, + + TestCase{F, "untyped_1", "2.0 >> 1", 1, nil}, + TestCase{A, "untyped_2", "1/2", 0, nil}, + TestCase{A, "untyped_unary", "-+^6", -+^6, nil}, + + TestCase{A, "iota_1", "const c5 = iota^7; c5", 7, nil}, + TestCase{A, "iota_2", "const ( c6 = iota+6; c7=iota+6 ); c6", 6, nil}, + TestCase{A, "iota_3", "c7", 7, nil}, + TestCase{A, "iota_implicit_1", "const ( c8 uint = iota+8; c9 ); c8", uint(8), nil}, + TestCase{A, "iota_implicit_2", "c9", uint(9), nil}, + + TestCase{A, "var_0", "var v0 int = 11; v0", 11, nil}, + TestCase{A, "var_1", "var v1 bool; v1", false, nil}, + TestCase{A, "var_2", "var v2 uint8 = 7; v2", uint8(7), nil}, + TestCase{A, "var_3", "var v3 uint16 = 12; v3", uint16(12), nil}, + TestCase{A, "var_4", "var v uint32 = 99; v", uint32(99), nil}, + TestCase{A, "var_5", "var v5 string; v5", "", nil}, + TestCase{A, "var_6", "var v6 float32; v6", float32(0), nil}, + TestCase{A, "var_7", "var v7 complex64; v7", complex64(0), nil}, + TestCase{A, "var_8", "var err error; err", nil, nil}, + TestCase{A, "var_9", `ve, vf := "", 1.23; ve`, "", nil}, + TestCase{A, "var_pointer", "var vp *string; vp", (*string)(nil), nil}, + TestCase{A, "var_map", "var vm *map[error]bool; vm", (*map[error]bool)(nil), nil}, + TestCase{A, "var_slice", "var vs []byte; vs", ([]byte)(nil), nil}, + TestCase{A, "var_array", "var va [2]rune; va", [2]rune{}, nil}, + TestCase{A, "var_interface_1", "var vi interface{} = 1; vi", 1, nil}, + TestCase{A, "var_interface_2", "var vnil interface{}; vnil", nil, nil}, + TestCase{A, "var_shift_1", "7 << 8", 7 << 8, nil}, + TestCase{A, "var_shift_2", "-9 >> 2", -9 >> 2, nil}, + TestCase{A, "var_shift_3", "v2 << 3", uint8(7) << 3, nil}, + TestCase{A, "var_shift_4", "v2 >> 1", uint8(7) >> 1, nil}, + TestCase{A, "var_shift_5", "0xff << v2", 0xff << 7, nil}, + TestCase{A, "var_shift_6", "0x12345678 >> v2", 0x12345678 >> uint8(7), nil}, + TestCase{A, "var_shift_7", "v << v2", uint32(99) << uint8(7), nil}, + TestCase{A, "var_shift_8", "v3 << v3 >> v2", uint16(12) << 12 >> uint8(7), nil}, + TestCase{A, "var_shift_9", "v3 << 0", uint16(12), nil}, + TestCase{A, "var_shift_overflow", "v3 << 13", uint16(32768), nil}, + + // test division by constant power-of-two + TestCase{I, "var_div_1", "v3 = 11; v3 / 2", uint64(11) / 2, nil}, // classic interpreter is not type-accurate here + TestCase{I, "var_div_2", "v3 = 63; v3 / 8", uint64(63) / 8, nil}, + TestCase{F, "var_div_1", "v3 = 11; v3 / 2", uint16(11) / 2, nil}, + TestCase{F, "var_div_2", "v3 = 63; v3 / 8", uint16(63) / 8, nil}, + + TestCase{A, "var_div_3", "v3 = 11; v3 /=2; v3", uint16(11) / 2, nil}, + TestCase{A, "var_div_4", "v3 = 63; v3 /=8; v3", uint16(63) / 8, nil}, + + TestCase{A, "var_div_5", "v0 =+7; v0 /-1", -7, nil}, + TestCase{A, "var_div_6", "v0 =-7; v0 /+1", -7, nil}, + TestCase{A, "var_div_7", "v0 =-7; v0 /-1", +7, nil}, + TestCase{A, "var_div_8", "v0 =+11; v0 /-2", +11 / -2, nil}, + TestCase{A, "var_div_9", "v0 =-11; v0 /+2", -11 / +2, nil}, + TestCase{A, "var_div_10", "v0 =-11; v0 /-2", -11 / -2, nil}, + TestCase{A, "var_div_11", "v0 =+63; v0 /-8", +63 / -8, nil}, + TestCase{A, "var_div_12", "v0 =-63; v0 /+8", -63 / +8, nil}, + TestCase{A, "var_div_13", "v0 =-63; v0 /-8", -63 / -8, nil}, + + // test remainder by constant power-of-two + TestCase{I, "var_rem_1", "v3 = 17; v3 % 4", uint64(17) % 4, nil}, // classic interpreter is not type-accurate here + TestCase{I, "var_rem_2", "v3 = 61; v3 % 8", uint64(61) % 8, nil}, + TestCase{F, "var_rem_1", "v3 = 17; v3 % 4", uint16(17) % 4, nil}, + TestCase{F, "var_rem_2", "v3 = 61; v3 % 8", uint16(61) % 8, nil}, + + TestCase{A, "var_rem_3", "v0 =+17; v0 %-4", +17 % -4, nil}, + TestCase{A, "var_rem_4", "v0 =-17; v0 %+4", -17 % +4, nil}, + TestCase{A, "var_rem_5", "v0 =-17; v0 %-4", -17 % -4, nil}, + TestCase{A, "var_rem_6", "v0 =+61; v0 %-8", +61 % -8, nil}, + TestCase{A, "var_rem_7", "v0 =-61; v0 %+8", -61 % +8, nil}, + TestCase{A, "var_rem_8", "v0 =-61; v0 %-8", -61 % -8, nil}, + + TestCase{A, "eql_nil_1", "err == nil", true, nil}, + TestCase{A, "eql_nil_2", "vp == nil", true, nil}, + TestCase{A, "eql_nil_3", "vm == nil", true, nil}, + TestCase{A, "eql_nil_4", "vs == nil", true, nil}, + TestCase{A, "eql_nil_5", "vi == nil", false, nil}, + TestCase{A, "eql_nil_6", "vnil == nil", true, nil}, + TestCase{A, "eql_halfnil_1", "var vhalfnil interface{} = vm; vhalfnil == nil", false, nil}, + TestCase{A, "eql_halfnil_2", "vm = nil; vhalfnil = vm; vhalfnil == nil", false, nil}, + TestCase{A, "eql_interface", "vi == 1", true, nil}, + + TestCase{A, "typed_unary_1", "!!!v1", true, nil}, + TestCase{A, "typed_unary_2", "+-^v2", uint8(8), nil}, + TestCase{A, "typed_unary_3", "v3 = 12; +^-v3", uint16(11), nil}, + TestCase{A, "typed_unary_4", "v7 = 2.5i; -v7", complex64(-2.5i), nil}, + + TestCase{A, "type_int8", "type t8 int8; var v8 t8; v8", int8(0), nil}, + TestCase{A, "type_complicated", "type tfff func(int,int) func(error, func(bool)) string; var vfff tfff; vfff", (func(int, int) func(error, func(bool)) string)(nil), nil}, + TestCase{I, "type_interface", "type Stringer interface { String() string }; var s Stringer; s", csi, nil}, + TestCase{F, "type_interface", "type Stringer interface { String() string }; var s Stringer; s", fsi, nil}, + TestCase{A, "type_struct_1", "type Pair struct { A rune; B string }; var pair Pair; pair", struct { + A rune + B string + }{}, nil}, + TestCase{A, "type_struct_2", "type Triple struct { Pair; C float32 }; var triple Triple; triple.C", float32(0), nil}, + TestCase{A, "field_get_1", "pair.A", rune(0), nil}, + TestCase{A, "field_get_2", "pair.B", "", nil}, + TestCase{F, "field_anonymous_1", "triple.Pair", struct { + A rune + B string + }{}, nil}, + TestCase{F, "field_embedded_1", "triple.A", rune(0), nil}, + TestCase{F, "field_embedded_2", "triple.Pair.B", "", nil}, + + TestCase{A, "address_0", "var vf = 1.25; *&vf == vf", true, nil}, + TestCase{A, "address_1", "var pvf = &vf; *pvf", 1.25, nil}, + TestCase{A, "address_2", "&*pvf == *&pvf", true, nil}, + TestCase{A, "address_3", "var pvs = &vs; v1 = (*pvs == nil); v1", true, nil}, + TestCase{A, "defer_1", "v = 0; func testdefer(x uint32) { if x != 0 { defer func() { v = x }() } }; testdefer(29); v", uint32(29), nil}, + TestCase{A, "defer_2", "v = 12; testdefer(0); v", uint32(12), nil}, + TestCase{A, "make_chan", "cx := make(chan interface{}, 2); cx", make(chan interface{}, 2), nil}, + TestCase{A, "make_map", "m := make(map[int]string); m", make(map[int]string), nil}, + TestCase{A, "make_slice", "y := make([]uint8, 7); y[0] = 100; y[3] = 103; y", []uint8{100, 0, 0, 103, 0, 0, 0}, nil}, + TestCase{A, "expr_index_string_1", `"abc"[2]`, byte('c'), nil}, + TestCase{A, "expr_index_string_2", `v5 = "foo"; v0 = 0; v5[v0]`, byte('f'), nil}, + TestCase{A, "expr_index_array_1", `va[1]`, rune(0), nil}, + TestCase{A, "expr_index_array_2", `(&va)[0]`, rune(0), nil}, + TestCase{A, "expr_index_map", `var m2 map[rune]string; m2['x']`, nil, []interface{}{"", false}}, + TestCase{A, "expr_slice_0", "y[:]", []uint8{100, 0, 0, 103, 0, 0, 0}, nil}, + TestCase{A, "expr_slice_1", "y[1:]", []uint8{0, 0, 103, 0, 0, 0}, nil}, + TestCase{A, "expr_slice_2", "y[2:4]", []uint8{0, 103}, nil}, + TestCase{A, "expr_slice_3", "y[:3]", []uint8{100, 0, 0}, nil}, + TestCase{A, "expr_slice_4", "y = y[:3:7]; y", []uint8{100, 0, 0}, nil}, + TestCase{A, "expr_slice_5", `"abc"[:]`, "abc", nil}, + TestCase{A, "expr_slice_6", `"abc"[1:]`, "bc", nil}, + TestCase{A, "expr_slice_7", `"abc"[1:2]`, "b", nil}, + + TestCase{A, "set_const_1", "v1 = true; v1", true, nil}, + TestCase{A, "set_const_2", "v2 = 9; v2", uint8(9), nil}, + TestCase{A, "set_const_3", "v3 = 60000; v3", uint16(60000), nil}, + TestCase{A, "set_const_4", "v = 987; v", uint32(987), nil}, + TestCase{A, "set_const_5", `v5 = "8y57r"; v5`, "8y57r", nil}, + TestCase{A, "set_const_6", "v6 = 0.12345678901234; v6", float32(0.12345678901234), nil}, // v6 is declared float32 + TestCase{A, "set_const_7", "v7 = 0.98765432109i; v7", complex(0, float32(0.98765432109)), nil}, // v7 is declared complex64 + + TestCase{A, "set_expr_1", "v1 = v1 == v1; v1", true, nil}, + TestCase{A, "set_expr_2", "v2 -= 7; v2", uint8(2), nil}, + TestCase{A, "set_expr_3", "v3 %= 7; v3", uint16(60000) % 7, nil}, + TestCase{A, "set_expr_4", "v = v * 10; v", uint32(9870), nil}, + TestCase{A, "set_expr_5", `v5 = v5 + "iuh"; v5`, "8y57riuh", nil}, + TestCase{A, "set_expr_6", "v6 = 1/v6; v6", 1 / float32(0.12345678901234), nil}, // v6 is declared float32 + TestCase{A, "set_expr_7", "v7 = v7 * v7; v7", complex(-float32(0.98765432109)*float32(0.98765432109), 0), nil}, // v7 is declared complex64 + + TestCase{A, "add_2", "v2 += 255; v2", uint8(1), nil}, // overflow + TestCase{A, "add_3", "v3 += 536; v3", uint16(60000)%7 + 536, nil}, + TestCase{A, "add_4", "v += 111; v", uint32(9870 + 111), nil}, + TestCase{A, "add_5", `v5 += "@#$"; v5`, "8y57riuh@#$", nil}, + TestCase{A, "add_6", "v6 += 0.975319; v6", 1/float32(0.12345678901234) + float32(0.975319), nil}, // v6 is declared float32 + TestCase{A, "add_7", "v7 = 1; v7 += 0.999999i; v7", complex(float32(1), float32(0.999999)), nil}, // v7 is declared complex64 + + TestCase{A, "mul_1", "v2 = 4; v2 *= 3; v2", uint8(12), nil}, + TestCase{A, "rem_1", "v3 = 12; v3 %= 7; v3", uint16(5), nil}, + TestCase{A, "and_1", "v3 &= 9; v3", uint16(1), nil}, + + TestCase{A, "shift_1", "v3 <<= 7; v3", uint16(128), nil}, + TestCase{A, "shift_2", "v3 >>= (v3>>5); v3", uint16(128 >> (128 >> 5)), nil}, + + TestCase{A, "if_1", "v2 = 1; if v2 < 1 { v2 = v2-1 } else { v2 = v2+1 }; v2", uint8(2), nil}, + TestCase{A, "if_2", "if v2 < 5 { v2 = v2+2 } else { v2 = v2-2 }; v2", uint8(4), nil}, + TestCase{A, "for_1", "var i, j, k int; for i=1; i<=2; i=i+1 { if i<2 {j=i} else {k=i} }; i", 3, nil}, + TestCase{A, "for_2", "j", 1, nil}, + TestCase{A, "for_3", "k", 2, nil}, + TestCase{A, "continue_1", "j=0; k=0; for i:=1; i<=7; i=i+1 { if i==3 {j=i; continue}; k=k+i }; j", 3, nil}, + TestCase{A, "continue_2", "k", 25, nil}, + TestCase{A, "continue_3", "j=0; k=0; for i:=1; i<=7; i=i+1 { var ii = i; if ii==3 {j=ii; continue}; k=k+ii }; j", 3, nil}, + TestCase{A, "continue_4", "k", 25, nil}, + + TestCase{A, "for_range_array", `v0 = 0; for _, s := range [2]string{"a", "bc"} { v0 += len(s) }; v0`, 3, nil}, + TestCase{A, "for_range_chan", `v0 = 0; c := make(chan int, 2); c <- 1; c <- 2; close(c); for e := range c { v0 += e }; v0`, 3, nil}, + TestCase{A, "for_range_map", `var vrune rune; m2 = map[rune]string{'x':"x", 'y':"y", 'z':"z"}; for k,v := range m2 { vrune += k + rune(v[0]) }; vrune`, ('x' + 'y' + 'z') * 2, nil}, + TestCase{A, "for_range_slice", `v0 = 0; for _, s := range [ ]string{"a", "bc"} { v0 += len(s) }; v0`, 3, nil}, + TestCase{A, "for_range_string", `vrune = 0; for i, r := range "abc\u00ff" { vrune += r << (uint8(i)*8) }; vrune`, for_range_string("abc\u00ff"), nil}, + + TestCase{A, "function_0", "func nop() { }; nop()", nil, []interface{}{}}, + TestCase{A, "function_1", "func seven() int { return 7 }; seven()", 7, nil}, + TestCase{A, "function_2", "i=0; func seti(ii int) { i=ii }; seti(-493); i", -493, nil}, + TestCase{A, "function_3", "func ident(x uint) uint { return x }; ident(42)", uint(42), nil}, + TestCase{A, "function_4", "func equal(x, y float32) bool { return x == y }; equal(1.1, 1.1)", true, nil}, + TestCase{A, "function_5", "func swap(x, y int) (int,int) { return y, x }; swap(88,99)", nil, []interface{}{99, 88}}, + TestCase{A, "function_6", "i=0; func seti2() { i=2 }; seti2(); i", 2, nil}, + TestCase{A, "function_7", "i=0; func setiadd(x, y int) { i=x+y }; setiadd(7,8); i", 15, nil}, + + // bool is the param name, NOT its type! + TestCase{F, "function_named_return", "func add3(bool, x, y int) (z int) { z=bool+x+y; return }; add3(1,2,3)", 6, nil}, + + TestCase{A, "function_variadic_1", "func list_args(args ...interface{}) []interface{} { return args }; list_args(1,2,3)", []interface{}{1, 2, 3}, nil}, + TestCase{A, "function_variadic_2", "si := make([]interface{}, 4); si[1]=1; si[2]=2; si[3]=3; list_args(si...)", []interface{}{nil, 1, 2, 3}, nil}, + TestCase{A, "fibonacci", fibonacci_source_string + "; fibonacci(13)", 233, nil}, + TestCase{A, "function_literal", "adder := func(a,b int) int { return a+b }; adder(-7,-9)", -16, nil}, + + TestCase{A, "closure_1", ` + func test_closure_1() int { + var x int + func() { + x = 1 + }() + return x + } + test_closure_1()`, 1, nil}, + + TestCase{F, "closure_2", ` + func test_closure_2() (x int) { + func() { + x = 2 + }() + } + test_closure_2()`, 2, nil}, + + TestCase{A, "setvar_deref_1", `vstr := "foo"; pvstr := &vstr; *pvstr = "bar"; vstr`, "bar", nil}, + TestCase{A, "setvar_deref_2", `vint := 5; pvint := &vint; *pvint = 6; vint`, 6, nil}, + TestCase{A, "setplace_deref_1", `func vstr_addr() *string { return &vstr }; *vstr_addr() = "qwerty"; vstr`, "qwerty", nil}, + TestCase{A, "setplace_deref_2", `*vstr_addr() += "uiop"; vstr`, "qwertyuiop", nil}, + TestCase{A, "setplace_deref_3", `func vint_addr() *int { return &vint }; *vint_addr() = 7; vint`, 7, nil}, + TestCase{A, "setplace_deref_4", `*vint_addr() %= 4; vint`, 3, nil}, + + TestCase{A, "setmap_1", `m[1]="x"; m[2]="y"; m`, map[int]string{1: "x", 2: "y"}, nil}, + TestCase{A, "setmap_2", `m[2]+="z"; m`, map[int]string{1: "x", 2: "yz"}, nil}, + TestCase{A, "setmap_3", `mi := make(map[rune]byte); mi['@']+=2; mi`, map[rune]byte{'@': 2}, nil}, + TestCase{A, "setmap_4", `mi['a'] |= 7; mi`, map[rune]byte{'@': 2, 'a': 7}, nil}, + TestCase{A, "getmap_1", `m[1]`, nil, []interface{}{"x", true}}, + TestCase{A, "getmap_2", `m1 := m[1]; m1`, "x", nil}, + TestCase{A, "getmap_3", `mi['b']`, nil, []interface{}{byte(0), false}}, + TestCase{A, "getmap_4", `v2 = mi['@']; v2`, byte(2), nil}, + + TestCase{A, "divmap_1", "mi['@'] = 99; mi['@'] /= 3; v2 = mi['@']; v2", byte(33), nil}, + TestCase{A, "divmap_2", "mi['@'] /= 4; v2 = mi['@']; v2", byte(8), nil}, + + TestCase{A, "swap_assignment", `i=1;j=2; i,j=j,i; list_args(i, j)`, []interface{}{2, 1}, nil}, + TestCase{A, "evil_assignment_1", `i=0; si[0]=7; si[1]=8 + i, si[i] = 1, 2 + list_args(i,si[0],si[1])`, []interface{}{1, 2, 8}, nil}, + TestCase{A, "evil_assignment_2", `i=0; m=make(map[int]string); mcopy:=m; + i, m, m[i] = 1, nil, "foo" + list_args(i,m,mcopy)`, + []interface{}{1, nil_map_int_string, map[int]string{0: "foo"}}, nil}, + + TestCase{A, "field_set_1", `pair.A = 'k'; pair.B = "m"; pair`, struct { + A rune + B string + }{'k', "m"}, nil}, + TestCase{A, "field_set_2", `pair.A, pair.B = 'x', "y"; pair`, struct { + A rune + B string + }{'x', "y"}, nil}, + TestCase{F, "field_set_3", `triple.Pair.A, triple.C = 'a', 1.0; triple.Pair`, struct { + A rune + B string + }{'a', ""}, nil}, + TestCase{F, "field_set_embedded_1", `triple.A, triple.B = 'b', "xy"; triple.Pair`, struct { + A rune + B string + }{'b', "xy"}, nil}, + TestCase{F, "field_addr_1", "ppair := &triple.Pair; ppair.A", 'b', nil}, + TestCase{F, "field_addr_2", "ppair.A++; triple.Pair.A", 'c', nil}, + + TestCase{I, "import", `import ( "fmt"; "time" )`, "time", nil}, + TestCase{F, "import", `import ( "fmt"; "time" )`, nil, []interface{}{}}, + + TestCase{A, "goroutine_1", `go seti(9); time.Sleep(time.Second/50); i`, 9, nil}, + + TestCase{A, "builtin_append", "append(vs,0,1,2)", []byte{0, 1, 2}, nil}, + TestCase{A, "builtin_cap", "cap(va)", 2, nil}, + TestCase{A, "builtin_len", "len(v5)", len("8y57riuh@#$"), nil}, + TestCase{A, "builtin_new", "new(int)", new(int), nil}, + TestCase{A, "builtin_make_1", "make(map[int]int)", make(map[int]int), nil}, + TestCase{A, "builtin_make_2", "make(map[int]int, 10)", make(map[int]int), nil}, // capacity is ignored + TestCase{A, "builtin_make_4", "make([]*error, 2)", make([]*error, 2), nil}, + TestCase{A, "builtin_make_5", "make([]rune, 3, 4)", make([]rune, 3, 4), nil}, + TestCase{A, "builtin_make_6", "make(chan byte)", make(chan byte), nil}, + TestCase{A, "builtin_make_7", "make(chan byte, 2)", make(chan byte, 2), nil}, + TestCase{A, "builtin_make_8", "vs = make([]byte, 5); vs", make([]byte, 5), nil}, + TestCase{A, "builtin_copy_1", "copy(vs, v5)", 5, nil}, + TestCase{A, "builtin_copy_2", "vs", []byte("8y57r"), nil}, + TestCase{A, "builtin_delete_1", "delete(mi,64); mi", map[rune]byte{'a': 7}, nil}, + TestCase{A, "builtin_real_1", "real(0.5+1.75i)", real(0.5 + 1.75i), nil}, + TestCase{A, "builtin_real_2", "var cplx complex64 = 1.5+0.25i; real(cplx)", real(complex64(1.5 + 0.25i)), nil}, + TestCase{A, "builtin_imag_1", "imag(0.5+1.75i)", imag(0.5 + 1.75i), nil}, + TestCase{A, "builtin_imag_2", "imag(cplx)", imag(complex64(1.5 + 0.25i)), nil}, + TestCase{A, "builtin_complex_1", "complex(0,1)", complex(0, 1), nil}, + TestCase{A, "builtin_complex_2", "v6 = 0.1; complex(v6,-v6)", complex(float32(0.1), -float32(0.1)), nil}, + + TestCase{A, "time_duration_0", `var td time.Duration = 1; td`, time.Duration(1), nil}, + TestCase{A, "time_duration_1", `- td`, time.Duration(-1), nil}, + TestCase{A, "time_duration_2", `td + 1`, time.Duration(2), nil}, + TestCase{A, "time_duration_3", `4 - td`, time.Duration(3), nil}, + TestCase{A, "time_duration_4", `td * 4`, time.Duration(4), nil}, + TestCase{A, "time_duration_5", `5 / td`, time.Duration(5), nil}, + TestCase{A, "time_duration_6", `&td`, func() *time.Duration { td := time.Duration(1); return &td }(), nil}, + TestCase{A, "time_duration_method", ` td = time.Second; td.String()`, "1s", nil}, + TestCase{A, "time_duration_closure", ` tds := td.String; tds()`, "1s", nil}, + TestCase{A, "time_utc", ` utc := time.UTC; utc.String()`, "UTC", nil}, + TestCase{A, "time_utc_addr", ` utcaddr := &time.UTC; *utcaddr == utc`, true, nil}, + TestCase{A, "time_utc_set_1", ` time.UTC = nil; time.UTC == nil`, true, nil}, + TestCase{A, "time_utc_set_2", ` time.UTC = utc; time.UTC.String()`, "UTC", nil}, + + TestCase{A, "literal_array", "[3]int{1,2:3}", [3]int{1, 0, 3}, nil}, + TestCase{A, "literal_array_address", "&[...]int{3:4,5:6}", &[...]int{3: 4, 5: 6}, nil}, + TestCase{A, "literal_map", `map[int]string{1: "foo", 2: "bar"}`, map[int]string{1: "foo", 2: "bar"}, nil}, + TestCase{A, "literal_map_address", `&map[int]byte{6:7, 8:9}`, &map[int]byte{6: 7, 8: 9}, nil}, + TestCase{A, "literal_slice", "[]rune{'a','b','c'}", []rune{'a', 'b', 'c'}, nil}, + TestCase{A, "literal_slice_address", "&[]rune{'x','y'}", &[]rune{'x', 'y'}, nil}, + TestCase{A, "literal_struct", `Pair{A: 0x73, B: "\x94"}`, struct { + A rune + B string + }{A: 0x73, B: "\x94"}, nil}, + TestCase{A, "literal_struct_address", `&Pair{1,"2"}`, &struct { + A rune + B string + }{A: 1, B: "2"}, nil}, + + TestCase{A, "method_decls", "func (p *Pair) SetA(a rune) { p.A = a }; func (p Pair) SetAV(a rune) { p.A = a }; nil", nil, nil}, + TestCase{A, "method_on_ptr", "pair.SetA(8); pair.A", rune(8), nil}, + TestCase{A, "method_on_val", "pair.SetAV(11); pair.A", rune(8), nil}, // method on value gets a copy of the receiver - changes to not propagate + TestCase{F, "method_embedded_on_ptr", "triple.SetA('+'); triple.A", '+', nil}, + TestCase{F, "method_embedded_on_val", "triple.SetAV('*'); triple.A", '+', nil}, + + TestCase{A, "interface_1", "var st fmt.Stringer = time.Second; st", time.Second, nil}, + TestCase{A, "interface_method", "bind := st.String; bind()", "1s", nil}, + + TestCase{F, "concrete_method_to_func", "f1 := time.Duration.Seconds; f1(time.Hour)", 3600.0, nil}, + TestCase{F, "interface_method_to_func", "f2 := fmt.Stringer.String; f2(time.Hour)", "1h0m0s", nil}, + + TestCase{A, "multiple_values_1", "func twins(x float32) (float32,float32) { return x, x+1 }; twins(17.0)", nil, []interface{}{float32(17.0), float32(18.0)}}, + TestCase{A, "multiple_values_2", "func twins2(x float32) (float32,float32) { return twins(x) }; twins2(19.0)", nil, []interface{}{float32(19.0), float32(20.0)}}, + TestCase{A, "multiple_values_3", "f1, f2 := twins(23.0); list_args(f1, f2)", []interface{}{float32(23.0), float32(24.0)}, nil}, + TestCase{A, "multiple_values_4", "fm := make(map[int]float32); fm[1], fm[2] = twins(3.0); fm", map[int]float32{1: 3.0, 2: 4.0}, nil}, + TestCase{A, "multiple_values_5", "swap(swap(3,4))", nil, []interface{}{3, 4}}, + + TestCase{A, "pred_bool_1", "false==false && true==true && true!=false", true, nil}, + TestCase{A, "pred_bool_2", "false!=false || true!=true || true==false", false, nil}, + TestCase{A, "pred_int", "1==1 && 1<=1 && 1>=1 && 1!=2 && 1<2 && 2>1 || 0==1", true, nil}, + TestCase{A, "pred_string_1", `""=="" && "">="" && ""<="" && ""<"a" && ""<="b" && "a">"" && "b">=""`, true, nil}, + TestCase{A, "pred_string_2", `ve=="" && ve>="" && ve<="" && ve<"a" && ve<="b" && "a">ve && "b">=ve`, true, nil}, + TestCase{A, "pred_string_3", `"x"=="x" && "x"<="x" && "x">="x" && "x"!="y" && "x"<"y" && "y">"x"`, true, nil}, + TestCase{A, "pred_string_4", `"x"!="x" || "y"!="y" || "x">="y" || "y"<="x"`, false, nil}, + + TestCase{A, "defer_1", ` + vi = nil + func test_defer_1() { + defer func() { + vi = 1 + }() + } + test_defer_1(); vi`, 1, nil}, + TestCase{F, "defer_2", ` + func test_defer_2() (x int) { + defer func() { + x = 2 + }() + } + test_defer_2()`, 2, nil}, + TestCase{A, "recover_1", `var vpanic interface{} + func test_recover(rec bool, panick interface{}) { + defer func() { + if rec { + vpanic = recover() + } + }() + panic(panick) + } + test_recover(true, -1) + vpanic`, -1, nil}, + TestCase{A, "recover_2", `var vpanic2, vpanic3 interface{} + func test_nested_recover(repanic bool, panick interface{}) { + defer func() { + vpanic = recover() + }() + defer func() { + func() { + vpanic3 = recover() + }() + vpanic2 = recover() + if repanic { + panic(vpanic2) + } + }() + panic(panick) + } + test_nested_recover(false, -2) + list_args(vpanic, vpanic2, vpanic3) + `, []interface{}{nil, -2, nil}, nil}, + TestCase{A, "recover_3", `vpanic, vpanic2, vpanic3 = nil, nil, nil + test_nested_recover(true, -3) + list_args(vpanic, vpanic2, vpanic3) + `, []interface{}{-3, -3, nil}, nil}, + TestCase{A, "recover_4", `vpanic = nil + func test_defer_panic(panick interface{}) { + defer func() { + vpanic = recover() + }() + defer func() { + panic(panick) + }() + } + test_defer_panic(-4) + vpanic + `, -4, nil}, + TestCase{A, "send_recv", `cx <- "x"; <-cx`, nil, []interface{}{"x", true}}, + TestCase{A, "sum", sum_source_string + "; sum(100)", 5050, nil}, + + TestCase{A, "select_1", "vi = nil; cx <- 1; { var x interface{}; select { case x=<-cx: vi=x; default: } }; vi", 1, nil}, + TestCase{A, "select_2", "vi = nil; cx <- map[int]int{1:2}; select { case x:=<-cx: vi=x; default: }; vi", map[int]int{1: 2}, nil}, + TestCase{A, "select_3", "vi = nil; select { case cx<-1: vi=1; default: vi=0 }; vi", 1, nil}, + TestCase{A, "select_4", "vi = nil; select { case cx<-2: vi=2; default: vi=0 }; vi", 2, nil}, + TestCase{A, "select_5", "vi = nil; select { case cx<-3: vi=3; default: vi=0 }; vi", 0, nil}, + TestCase{A, "select_6", "vi = nil; select { case cx<-4: vi=4; case x:=<-cx: vi=x; default: vi=0 }; vi", 1, nil}, + + TestCase{A, "switch_1", "vi=nil; switch { case false: ; default: vi='1' }; vi", '1', nil}, + TestCase{A, "switch_2", "vi=nil; switch v:=20; v { case 20: vi='2'; vi='3' }; vi", '3', nil}, + TestCase{A, "switch_3", `v3=0; vi=nil + func inc_u16(addr *uint16, n uint16) uint16 { *addr += n; return *addr } + switch v3++; inc_u16(&v3, 2) { case 1: ; case 2: ; case 3: vi='3'; default: }; vi`, '3', nil}, + TestCase{A, "switch_4", "v0=7; switch v:=7; v { default: vi=0; case 1: vi=1; case v0: vi=7; case 7: vi=-7 }; vi", 7, nil}, + TestCase{A, "switch_fallthrough", `vi=nil; switch v:=0; v { + default: fallthrough + case 1: vi=10; fallthrough + case 2: vi=20; break + case 3: vi=30 + }; vi`, 20, nil}, + TestCase{A | S, "switch_multithread", `func doswitch(i, j int) { switch i { case 1: v0 = j; case 2: vi = j } } + v0, vi = 0, nil + go doswitch(1, 10) + doswitch(2, 20) + time.Sleep(time.Second/10) + list_args(v0, vi) + `, []interface{}{10, 20}, nil}, + + TestCase{A, "typeswitch_1", `vi = nil; var x interface{} = "abc"; switch y := x.(type) { default: vi = 0; case string: vi = len(y) }; vi`, 3, nil}, + TestCase{A, "typeswitch_2", `vi = nil; switch x.(type) { default: vi = 0; case byte, bool: vi = 1; case interface{}: vi = 2 }; vi`, 2, nil}, + TestCase{A, "typeswitch_3", `vi = nil; switch x.(type) { default: vi = 0; case int: vi = 3 }; vi`, 0, nil}, + TestCase{A, "typeswitch_4", `vi = nil; switch x.(type) { default: vi = 0; case string: vi = 4 }; vi`, 4, nil}, + TestCase{A, "typeswitch_5", `vi,x = nil,nil; switch x.(type) { default: vi=0; case nil: vi = 5 }; vi`, 5, nil}, + TestCase{A, "typeswitch_6", `var stringer fmt.Stringer = time.Minute + switch s := stringer.(type) { + case nil: vi = 0 + default: vi = 1 + case time.Duration: vi = 6 + case fmt.Stringer: vi = 7 + }; vi`, 6, nil}, + + TestCase{A, "typeassert_1", `var xi interface{} = "abc"; yi := xi.(string); yi`, "abc", nil}, + TestCase{A, "typeassert_2", `xi.(string)`, nil, []interface{}{"abc", true}}, + TestCase{A, "typeassert_3", `xi.(int)`, nil, []interface{}{0, false}}, + TestCase{A, "typeassert_4", `xi = nil; xi.(error)`, nil, []interface{}{error(nil), false}}, + + TestCase{A, "quote_1", `~quote{7}`, &ast.BasicLit{Kind: token.INT, Value: "7"}, nil}, + TestCase{A, "quote_2", `~quote{x}`, &ast.Ident{Name: "x"}, nil}, + TestCase{A, "quote_3", `var ab = ~quote{a;b}; ab`, &ast.BlockStmt{List: []ast.Stmt{ + &ast.ExprStmt{X: &ast.Ident{Name: "a"}}, + &ast.ExprStmt{X: &ast.Ident{Name: "b"}}, + }}, nil}, + TestCase{A, "quote_4", `~'{"foo"+"bar"}`, &ast.BinaryExpr{ + Op: token.ADD, + X: &ast.BasicLit{Kind: token.STRING, Value: `"foo"`}, + Y: &ast.BasicLit{Kind: token.STRING, Value: `"bar"`}, + }, nil}, + TestCase{A, "quasiquote_1", `~quasiquote{1 + ~unquote{2+3}}`, &ast.BinaryExpr{ + Op: token.ADD, + X: &ast.BasicLit{Kind: token.INT, Value: "1"}, + Y: &ast.BasicLit{Kind: token.INT, Value: "5"}, + }, nil}, + TestCase{A, "quasiquote_2", `~"{2 * ~,{3<<1}}`, &ast.BinaryExpr{ + Op: token.MUL, + X: &ast.BasicLit{Kind: token.INT, Value: "2"}, + Y: &ast.BasicLit{Kind: token.INT, Value: "6"}, + }, nil}, + TestCase{A, "quasiquote_3", `~"{func(int) {}}`, &ast.FuncLit{ + Type: &ast.FuncType{ + Params: &ast.FieldList{ + List: []*ast.Field{ + &ast.Field{ + Names: nil, + Type: &ast.Ident{ + Name: "int", + }, + }, + }, + }, + }, + Body: &ast.BlockStmt{}, + }, nil}, + TestCase{A, "quasiquote_func", `func qq_func(x interface{}) interface{} { y := ~"~,x; return y }; qq_func(123)`, + &ast.BasicLit{Kind: token.INT, Value: "123"}, nil}, + TestCase{A, "quasiquote_case", `~"{case xy: nil}`, + &ast.CaseClause{ + List: []ast.Expr{&ast.Ident{Name: "xy"}}, + Body: []ast.Stmt{&ast.ExprStmt{&ast.Ident{Name: "nil"}}}, + }, nil, + }, + + TestCase{A, "unquote_splice_1", `~quasiquote{~unquote_splice ab ; c}`, &ast.BlockStmt{List: []ast.Stmt{ + &ast.ExprStmt{X: &ast.Ident{Name: "a"}}, + &ast.ExprStmt{X: &ast.Ident{Name: "b"}}, + &ast.ExprStmt{X: &ast.Ident{Name: "c"}}, + }}, nil}, + TestCase{A, "unquote_splice_2", `~"{zero ; ~,@ab ; one}`, &ast.BlockStmt{List: []ast.Stmt{ + &ast.ExprStmt{X: &ast.Ident{Name: "zero"}}, + &ast.ExprStmt{X: &ast.Ident{Name: "a"}}, + &ast.ExprStmt{X: &ast.Ident{Name: "b"}}, + &ast.ExprStmt{X: &ast.Ident{Name: "one"}}, + }}, nil}, + TestCase{A, "macro", "~macro second_arg(a,b,c interface{}) interface{} { return b }; v = 98; v", uint32(98), nil}, + TestCase{A, "macro_call", "second_arg;1;v;3", uint32(98), nil}, + TestCase{A, "macro_nested", "second_arg;1;{second_arg;2;3;4};5", 3, nil}, + TestCase{I, "values", "Values(3,4,5)", nil, []interface{}{3, 4, 5}}, + TestCase{A, "eval", "Eval(~quote{1+2})", 3, nil}, + TestCase{I, "eval_quote", "Eval(~quote{Values(3,4,5)})", nil, []interface{}{3, 4, 5}}, +} + +func (c *TestCase) compareResults(t *testing.T, actual []r.Value) { + expected := c.results + if expected == nil { + expected = []interface{}{c.result0} + } + if len(actual) != len(expected) { + c.fail(t, actual, expected) + return + } + for i := range actual { + c.compareResult(t, actual[i], expected[i]) + } +} + +func (c *TestCase) compareResult(t *testing.T, actualv r.Value, expected interface{}) { + if actualv == Nil || actualv == None { + if expected != nil { + c.fail(t, nil, expected) + } + return + } + actual := actualv.Interface() + if !r.DeepEqual(actual, expected) { + if r.TypeOf(actual) == r.TypeOf(expected) { + if actualNode, ok := actual.(ast.Node); ok { + if expectedNode, ok := expected.(ast.Node); ok { + c.compareAst(t, ToAst(actualNode), ToAst(expectedNode)) + return + } + } else if actualv.Kind() == r.Chan { + // for channels just check the type, length and capacity + expectedv := r.ValueOf(expected) + if actualv.Len() == expectedv.Len() && actualv.Cap() == expectedv.Cap() { + return + } + } + } + c.fail(t, actual, expected) + } +} + +func (c *TestCase) compareAst(t *testing.T, actual Ast, expected Ast) { + if actual == nil || expected == nil { + if actual != nil || expected != nil { + c.fail(t, actual, expected) + } + return + } + if r.TypeOf(actual) == r.TypeOf(expected) { + switch actual := actual.(type) { + case BadDecl, BadExpr, BadStmt: + return + case Ident: + if actual.X.Name == expected.(Ident).X.Name { + return + } + case BasicLit: + actualp := actual.X + expectedp := expected.(BasicLit).X + if actualp == expectedp || (actualp != nil && expectedp != nil && actualp.Kind == expectedp.Kind && actualp.Value == expectedp.Value) { + return + } + default: + na := actual.Size() + ne := expected.Size() + if actual.Op() == expected.Op() && na == ne { + for i := 0; i < na; i++ { + c.compareAst(t, actual.Get(i), expected.Get(i)) + } + return + } + } + } + c.fail(t, actual, expected) +} + +func (c *TestCase) fail(t *testing.T, actual interface{}, expected interface{}) { + t.Errorf("expecting %v <%T>, found %v <%T>\n", expected, expected, actual, actual) +} diff --git a/vendor/github.com/cosmos72/gomacro/ast2/ast.go b/vendor/github.com/cosmos72/gomacro/ast2/ast.go new file mode 100644 index 0000000..c5abc58 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/ast2/ast.go @@ -0,0 +1,114 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * ast.go + * + * Created on Feb 24, 2017 + * Author Massimiliano Ghilardi + */ + +package ast2 + +import ( + "go/ast" + "go/token" +) + +type ( + Ast interface { + Interface() interface{} + Op() token.Token + Size() int + Get(i int) Ast + Set(i int, child Ast) + New() Ast // returns a copy of Ast. the children are not copied + } + AstWithNode interface { + Ast + Node() ast.Node + } + AstWithSlice interface { + Ast + Slice(lo, hi int) AstWithSlice + Append(child Ast) AstWithSlice + } + + AstSlice struct{ X []Ast } + NodeSlice struct{ X []ast.Node } + ExprSlice struct{ X []ast.Expr } + FieldSlice struct{ X []*ast.Field } + DeclSlice struct{ X []ast.Decl } + IdentSlice struct{ X []*ast.Ident } + StmtSlice struct{ X []ast.Stmt } + SpecSlice struct{ X []ast.Spec } + + ArrayType struct{ X *ast.ArrayType } + AssignStmt struct{ X *ast.AssignStmt } + BadDecl struct{ X *ast.BadDecl } + BadExpr struct{ X *ast.BadExpr } + BadStmt struct{ X *ast.BadStmt } + BasicLit struct{ X *ast.BasicLit } + BinaryExpr struct{ X *ast.BinaryExpr } + BlockStmt struct{ X *ast.BlockStmt } + BranchStmt struct{ X *ast.BranchStmt } + CallExpr struct{ X *ast.CallExpr } + CaseClause struct{ X *ast.CaseClause } + ChanType struct{ X *ast.ChanType } + CommClause struct{ X *ast.CommClause } + CompositeLit struct{ X *ast.CompositeLit } + DeclStmt struct{ X *ast.DeclStmt } + DeferStmt struct{ X *ast.DeferStmt } + Ellipsis struct{ X *ast.Ellipsis } + EmptyStmt struct{ X *ast.EmptyStmt } + ExprStmt struct{ X *ast.ExprStmt } + Field struct{ X *ast.Field } + FieldList struct{ X *ast.FieldList } + File struct{ X *ast.File } + ForStmt struct{ X *ast.ForStmt } + FuncDecl struct{ X *ast.FuncDecl } + FuncLit struct{ X *ast.FuncLit } + FuncType struct{ X *ast.FuncType } + GenDecl struct{ X *ast.GenDecl } + GoStmt struct{ X *ast.GoStmt } + Ident struct{ X *ast.Ident } + IfStmt struct{ X *ast.IfStmt } + ImportSpec struct{ X *ast.ImportSpec } + IncDecStmt struct{ X *ast.IncDecStmt } + IndexExpr struct{ X *ast.IndexExpr } + InterfaceType struct{ X *ast.InterfaceType } + KeyValueExpr struct{ X *ast.KeyValueExpr } + LabeledStmt struct{ X *ast.LabeledStmt } + MapType struct{ X *ast.MapType } + Package struct{ X *ast.Package } + ParenExpr struct{ X *ast.ParenExpr } + RangeStmt struct{ X *ast.RangeStmt } + ReturnStmt struct{ X *ast.ReturnStmt } + SelectStmt struct{ X *ast.SelectStmt } + SelectorExpr struct{ X *ast.SelectorExpr } + SendStmt struct{ X *ast.SendStmt } + SliceExpr struct{ X *ast.SliceExpr } + StarExpr struct{ X *ast.StarExpr } + StructType struct{ X *ast.StructType } + SwitchStmt struct{ X *ast.SwitchStmt } + TypeAssertExpr struct{ X *ast.TypeAssertExpr } + TypeSpec struct{ X *ast.TypeSpec } + TypeSwitchStmt struct{ X *ast.TypeSwitchStmt } + UnaryExpr struct{ X *ast.UnaryExpr } + ValueSpec struct{ X *ast.ValueSpec } +) diff --git a/vendor/github.com/cosmos72/gomacro/ast2/ast_convert.go b/vendor/github.com/cosmos72/gomacro/ast2/ast_convert.go new file mode 100644 index 0000000..def12e2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/ast2/ast_convert.go @@ -0,0 +1,621 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * ast_convert.go + * + * Created on: Feb 25, 2017 + * Author: Massimiliano Ghilardi + */ + +package ast2 + +import ( + "fmt" + "go/ast" + "go/token" + r "reflect" + + mt "github.com/cosmos72/gomacro/token" +) + +// unused +/* +func CloneAst(in Ast) Ast { + switch in := in.(type) { + case AstWithNode: + return CloneAstWithNode(in) + case AstWithSlice: + return CloneAstWithSlice(in) + default: + errorf("CloneAst: unsupported argument type, expecting AstWithNode or AstWithSlice: %v <%v>", in, r.TypeOf(in)) + return nil + } +} + +func CloneAstWithNode(in AstWithNode) AstWithNode { + form := in.New().(AstWithNode) + n := in.Size() + for i := 0; i < n; i++ { + form.Set(i, CloneAst(in.Get(i))) + } + return form +} + +func CloneAstWithSlice(in AstWithSlice) AstWithSlice { + form := in.New().(AstWithSlice) + n := in.Size() + for i := 0; i < n; i++ { + form = form.Append(CloneAst(in.Get(i))) + } + return form +} +*/ + +func AnyToAstWithNode(any interface{}, caller interface{}) AstWithNode { + node := AnyToAst(any, caller) + switch node := node.(type) { + case AstWithNode: + return node + default: + errorf("%s: cannot convert to ast.Node: %v <%v>", caller, any, r.TypeOf(any)) + return nil + } +} + +func AnyToAstWithSlice(any interface{}, caller interface{}) AstWithSlice { + node := AnyToAst(any, caller) + switch node := node.(type) { + case nil: + return NodeSlice{} + case AstWithSlice: + return node + default: + errorf("%s: cannot convert to slice of ast.Node: %v <%v>", caller, any, r.TypeOf(any)) + return nil + } +} + +func AnyToAst(any interface{}, caller interface{}) Ast { + var str string + var tok token.Token + switch node := any.(type) { + case nil: + return nil + case Ast: + return node + case ast.Node: + return ToAst(node) + case []Ast: + return AstSlice{X: node} + case []ast.Node: + return NodeSlice{X: node} + case []*ast.Field: + return FieldSlice{X: node} + case []ast.Decl: + return DeclSlice{X: node} + case []ast.Expr: + return ExprSlice{X: node} + case []*ast.Ident: + return IdentSlice{X: node} + case []ast.Stmt: + return StmtSlice{X: node} + case []ast.Spec: + return SpecSlice{X: node} + case bool: + if node { + str = "true" + } else { + str = "false" + } + return Ident{X: &ast.Ident{Name: str}} + /* + case rune: // Go cannot currently distinguish rune from int32 + tok = token.CHAR + str = fmt.Sprintf("%q", node) + */ + case int, int8, int16, int32, int64, + uint, uint8, uint16, uint32, uint64, uintptr: + tok = token.INT + str = fmt.Sprintf("%d", node) + case float32, float64: + tok = token.FLOAT + str = fmt.Sprintf("%g", node) + case complex64, complex128: + errorf("%s: unimplemented conversion of <%v> to ast.Node: %v", r.TypeOf(any), caller, any) + return nil + case string: + tok = token.STRING + str = fmt.Sprintf("%q", node) + default: + errorf("%s: cannot convert to ast.Node: %v <%v>", caller, any, r.TypeOf(any)) + return nil + } + return BasicLit{X: &ast.BasicLit{Kind: tok, Value: str}} + +} + +// ToAst2 returns either n0 (if i == 0) or n1, converted to Ast +func ToAst1(i int, node ast.Node) AstWithNode { + if i == 0 { + return ToAst(node) + } else { + return badIndex(i, 1) + } +} + +// ToAst2 returns either n0 (if i == 0) or n1, converted to Ast +func ToAst2(i int, n0 ast.Node, n1 ast.Node) AstWithNode { + var n ast.Node + switch i { + case 0: + n = n0 + case 1: + n = n1 + default: + return badIndex(i, 2) + } + return ToAst(n) +} + +func ToAst3(i int, n0 ast.Node, n1 ast.Node, n2 *ast.BlockStmt) AstWithNode { + var n ast.Node + switch i { + case 0: + n = n0 + case 1: + n = n1 + case 2: + if n2 == nil { + return nil + } + return BlockStmt{n2} + default: + return badIndex(i, 3) + } + return ToAst(n) +} + +func ToAst4(i int, n0 ast.Node, n1 ast.Node, n2 ast.Node, n3 ast.Node) AstWithNode { + var n ast.Node + switch i { + case 0: + n = n0 + case 1: + n = n1 + case 2: + n = n2 + case 3: + n = n3 + default: + return badIndex(i, 4) + } + return ToAst(n) +} + +// ToAst converts an ast.Node to Ast, providing uniform access to the node contents +// +func ToAst(node ast.Node) AstWithNode { + var x AstWithNode + switch node := node.(type) { + case nil: + return nil + case *ast.ArrayType: + x = ArrayType{node} + case *ast.AssignStmt: + x = AssignStmt{node} + case *ast.BadDecl: + x = BadDecl{node} + case *ast.BadExpr: + x = BadExpr{node} + case *ast.BadStmt: + x = BadStmt{node} + case *ast.BasicLit: + x = BasicLit{node} + case *ast.BinaryExpr: + x = BinaryExpr{node} + case *ast.BlockStmt: + if node != nil { // we can get typed nil from many places + x = BlockStmt{node} + } + case *ast.BranchStmt: + x = BranchStmt{node} + case *ast.CallExpr: + x = CallExpr{node} + case *ast.CaseClause: + x = CaseClause{node} + case *ast.ChanType: + x = ChanType{node} + case *ast.CommClause: + x = CommClause{node} + case *ast.CompositeLit: + x = CompositeLit{node} + case *ast.DeclStmt: + x = DeclStmt{node} + case *ast.DeferStmt: + x = DeferStmt{node} + case *ast.Ellipsis: + x = Ellipsis{node} + case *ast.EmptyStmt: + x = EmptyStmt{node} + case *ast.ExprStmt: + x = ExprStmt{node} + case *ast.Field: + x = Field{node} + case *ast.FieldList: + if node != nil { // we can get typed nil from many places + x = FieldList{node} + } + case *ast.File: + x = File{node} + case *ast.ForStmt: + x = ForStmt{node} + case *ast.FuncDecl: + x = FuncDecl{node} + case *ast.FuncLit: + x = FuncLit{node} + case *ast.FuncType: + x = FuncType{node} + case *ast.GenDecl: + if node != nil { + x = GenDecl{node} + } + case *ast.GoStmt: + x = GoStmt{node} + case *ast.Ident: + x = Ident{node} + case *ast.IfStmt: + x = IfStmt{node} + case *ast.ImportSpec: + x = ImportSpec{node} + case *ast.IncDecStmt: + x = IncDecStmt{node} + case *ast.IndexExpr: + x = IndexExpr{node} + case *ast.InterfaceType: + x = InterfaceType{node} + case *ast.KeyValueExpr: + x = KeyValueExpr{node} + case *ast.LabeledStmt: + x = LabeledStmt{node} + case *ast.MapType: + x = MapType{node} + case *ast.Package: + x = Package{node} + case *ast.ParenExpr: + x = ParenExpr{node} + case *ast.RangeStmt: + x = RangeStmt{node} + case *ast.ReturnStmt: + x = ReturnStmt{node} + case *ast.SelectStmt: + x = SelectStmt{node} + case *ast.SelectorExpr: + x = SelectorExpr{node} + case *ast.SendStmt: + x = SendStmt{node} + case *ast.SliceExpr: + x = SliceExpr{node} + case *ast.StarExpr: + x = StarExpr{node} + case *ast.StructType: + x = StructType{node} + case *ast.SwitchStmt: + x = SwitchStmt{node} + case *ast.TypeAssertExpr: + x = TypeAssertExpr{node} + case *ast.TypeSpec: + x = TypeSpec{node} + case *ast.TypeSwitchStmt: + x = TypeSwitchStmt{node} + case *ast.UnaryExpr: + x = UnaryExpr{node} + case *ast.ValueSpec: + x = ValueSpec{node} + default: + errorf("unsupported node type <%v>", r.TypeOf(node)) + } + return x +} + +func ToAstWithSlice(x Ast, caller interface{}) AstWithSlice { + switch x := x.(type) { + case AstWithSlice: + return x + default: + y := x.Interface() + errorf("%s: cannot convert to slice of ast.Node: %v <%v>", caller, y, r.TypeOf(y)) + return nil + } +} + +// ToNode converts Ast back ast.Node, or panics on failure +// (it fails if the argument is not AstWithNode) +func ToNode(x Ast) ast.Node { + switch x := x.(type) { + case nil: + return nil + case AstWithNode: + return x.Node() + default: + y := x.Interface() + errorf("cannot convert to ast.Node: %v <%v>", y, r.TypeOf(y)) + return nil + } +} + +func ToBasicLit(x Ast) *ast.BasicLit { + switch x := x.(type) { + case nil: + break + case BasicLit: + return x.X + default: + y := x.Interface() + errorf("cannot convert to *ast.BasicLit: %v <%v>", y, r.TypeOf(y)) + } + return nil +} + +func ToBlockStmt(x Ast) *ast.BlockStmt { + switch x := x.(type) { + case nil: + break + case BlockStmt: + return x.X + default: + stmt := ToStmt(x) + return &ast.BlockStmt{Lbrace: stmt.Pos(), List: []ast.Stmt{stmt}, Rbrace: stmt.End()} + } + return nil +} + +func ToCallExpr(x Ast) *ast.CallExpr { + switch x := x.(type) { + case nil: + break + case CallExpr: + return x.X + default: + y := x.Interface() + errorf("cannot convert to *ast.CallExpr: %v <%v>", y, r.TypeOf(y)) + } + return nil +} + +func ToDecl(x Ast) ast.Decl { + switch node := ToNode(x).(type) { + case ast.Decl: + return node + case nil: + default: + y := x.Interface() + errorf("cannot convert to ast.Decl: %v <%v>", y, r.TypeOf(y)) + } + return nil +} + +func ToExpr(x Ast) ast.Expr { + switch node := ToNode(x).(type) { + case nil: + break + case ast.Expr: + return node + case *ast.BlockStmt: + return BlockStmtToExpr(node) + case *ast.EmptyStmt: + return &ast.Ident{NamePos: node.Semicolon, Name: "nil"} + case *ast.ExprStmt: + return node.X + case ast.Stmt: + list := []ast.Stmt{node} + block := &ast.BlockStmt{List: list} + return BlockStmtToExpr(block) + default: + errorf("unimplemented conversion from %v to ast.Expr: %v <%v>", + r.TypeOf(node), node, r.TypeOf(node)) + } + return nil +} + +func ToExprSlice(x Ast) []ast.Expr { + switch x := x.(type) { + case nil: + break + case ExprSlice: + return x.X + case AstWithSlice: + n := x.Size() + ret := make([]ast.Expr, n) + for i := 0; i < n; i++ { + ret[i] = ToExpr(x.Get(i)) + } + return ret + default: + errorf("unimplemented conversion from %v <%v> to []ast.Expr", x, r.TypeOf(x)) + } + return nil +} + +func ToField(x Ast) *ast.Field { + switch node := ToNode(x).(type) { + case nil: + break + case *ast.Field: + return node + default: + errorf("cannot convert %v <%v> to *ast.Field", node, r.TypeOf(node)) + } + return nil +} + +func ToFile(x Ast) *ast.File { + switch node := ToNode(x).(type) { + case nil: + break + case *ast.File: + return node + default: + errorf("cannot convert %v <%v> to *ast.File", node, r.TypeOf(node)) + } + return nil +} + +func ToFieldList(x Ast) *ast.FieldList { + switch node := ToNode(x).(type) { + case nil: + break + case *ast.FieldList: + return node + case *ast.Field: + return &ast.FieldList{Opening: node.Pos(), List: []*ast.Field{node}, Closing: node.End()} + default: + errorf("cannot convert %v <%v> to *ast.Field", node, r.TypeOf(node)) + } + return nil +} + +func ToFuncType(x Ast) *ast.FuncType { + switch node := ToNode(x).(type) { + case nil: + break + case *ast.FuncType: + return node + default: + errorf("cannot convert %v <%v> to *ast.FuncType", node, r.TypeOf(node)) + } + return nil +} + +func ToImportSpec(x Ast) *ast.ImportSpec { + switch node := ToNode(x).(type) { + case nil: + break + case *ast.ImportSpec: + return node + default: + errorf("cannot convert %v <%v> to *ast.ImportSpec", node, r.TypeOf(node)) + } + return nil +} + +func ToIdent(x Ast) *ast.Ident { + switch node := ToNode(x).(type) { + case nil: + break + case *ast.Ident: + return node + default: + errorf("cannot convert %v <%v> to *ast.Ident", node, r.TypeOf(node)) + } + return nil +} + +func ToIdentSlice(x Ast) []*ast.Ident { + switch x := x.(type) { + case nil: + break + case IdentSlice: + return x.X + case AstWithSlice: + n := x.Size() + ret := make([]*ast.Ident, n) + for i := 0; i < n; i++ { + ret[i] = ToIdent(x.Get(i)) + } + return ret + default: + errorf("unimplemented conversion from %v <%v> to []*ast.Ident", x, r.TypeOf(x)) + } + return nil +} + +func ToSpec(x Ast) ast.Spec { + switch node := ToNode(x).(type) { + case nil: + break + case ast.Spec: + return node + default: + errorf("cannot convert %v <%v> to ast.Spec", node, r.TypeOf(node)) + } + return nil +} + +func ToStmt(x Ast) ast.Stmt { + switch node := ToNode(x).(type) { + case ast.Stmt: + return node + case ast.Decl: + return &ast.DeclStmt{Decl: node} + case ast.Expr: + return &ast.ExprStmt{X: node} + case nil: + break + default: + errorf("unimplemented conversion from %v <%v> to ast.Stmt", node, r.TypeOf(node)) + } + return nil +} + +func ToStmtSlice(x Ast) []ast.Stmt { + switch x := x.(type) { + case nil: + break + case StmtSlice: + return x.X + case AstWithSlice: + n := x.Size() + ret := make([]ast.Stmt, n) + for i := 0; i < n; i++ { + ret[i] = ToStmt(x.Get(i)) + } + return ret + default: + errorf("unimplemented conversion from %v <%v> to []ast.Stmt", x, r.TypeOf(x)) + } + return nil +} + +func BlockStmtToExpr(node *ast.BlockStmt) ast.Expr { + if node == nil { + return nil + } + list := node.List + switch len(list) { + case 0: + // convert {} to nil, because {} in expression context means "no useful value" + return &ast.Ident{NamePos: node.Lbrace, Name: "nil"} + case 1: + // check if we are lucky... + switch node := list[0].(type) { + case *ast.ExprStmt: + return node.X + case *ast.EmptyStmt: + // convert { ; } to nil, because { ; } in expression context means "no useful value" + return &ast.Ident{NamePos: node.Semicolon, Name: "nil"} + } + } + + // due to go/ast strictly typed model, there is only one mechanism + // to insert a statement inside an expression: use a closure. + // so we return a unary expression: MACRO (func() { /*block*/ }) + typ := &ast.FuncType{Func: token.NoPos, Params: &ast.FieldList{}} + fun := &ast.FuncLit{Type: typ, Body: node} + return &ast.UnaryExpr{Op: mt.MACRO, X: fun} +} diff --git a/vendor/github.com/cosmos72/gomacro/ast2/ast_node.go b/vendor/github.com/cosmos72/gomacro/ast2/ast_node.go new file mode 100644 index 0000000..3668a02 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/ast2/ast_node.go @@ -0,0 +1,903 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * ast_node.go + * + * Created on Feb 25, 2017 + * Author Massimiliano Ghilardi + */ + +package ast2 + +import ( + "go/ast" + "go/token" +) + +func asInterface(x interface{}, isnil bool) interface{} { + if isnil { + return nil + } + return x +} + +func asNode(x ast.Node, isnil bool) ast.Node { + if isnil { + return nil + } + return x +} + +// +// .................. functions Interface() interface{} +// +func (x ArrayType) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x AssignStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x BadDecl) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x BadExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x BadStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x BasicLit) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x BinaryExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x BranchStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x CallExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x CaseClause) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x ChanType) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x CommClause) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x CompositeLit) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x DeclStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x DeferStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x Ellipsis) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x EmptyStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x ExprStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x Field) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x ForStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x FuncDecl) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x FuncLit) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x FuncType) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x GoStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x Ident) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x IfStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x ImportSpec) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x IncDecStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x IndexExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x InterfaceType) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x KeyValueExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x LabeledStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x MapType) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x Package) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x ParenExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x RangeStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x SelectStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x SelectorExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x SendStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x SliceExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x StarExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x StructType) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x SwitchStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x TypeAssertExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x TypeSpec) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x TypeSwitchStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x UnaryExpr) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x ValueSpec) Interface() interface{} { return asInterface(x.X, x.X == nil) } + +// +// .................. functions Node() ast.Node +// +func (x ArrayType) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x AssignStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x BadDecl) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x BadExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x BadStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x BasicLit) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x BinaryExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x BranchStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x CallExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x CaseClause) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x ChanType) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x CommClause) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x CompositeLit) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x DeclStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x DeferStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x Ellipsis) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x EmptyStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x ExprStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x Field) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x ForStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x FuncDecl) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x FuncLit) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x FuncType) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x GoStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x Ident) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x IfStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x ImportSpec) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x IncDecStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x IndexExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x InterfaceType) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x KeyValueExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x LabeledStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x MapType) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x Package) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x ParenExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x RangeStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x SelectStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x SelectorExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x SendStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x SliceExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x StarExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x StructType) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x SwitchStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x TypeAssertExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x TypeSpec) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x TypeSwitchStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x UnaryExpr) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x ValueSpec) Node() ast.Node { return asNode(x.X, x.X == nil) } + +// +// .................. functions Op() token.Token +// +func (x ArrayType) Op() token.Token { return token.LBRACK } +func (x AssignStmt) Op() token.Token { return x.X.Tok } +func (x BadDecl) Op() token.Token { return token.ILLEGAL } +func (x BadExpr) Op() token.Token { return token.ILLEGAL } +func (x BadStmt) Op() token.Token { return token.ILLEGAL } +func (x BasicLit) Op() token.Token { return x.X.Kind } +func (x BinaryExpr) Op() token.Token { return x.X.Op } +func (x BranchStmt) Op() token.Token { return x.X.Tok } +func (x CallExpr) Op() token.Token { return token.RPAREN } +func (x CaseClause) Op() token.Token { + if len(x.X.List) != 0 { + return token.CASE + } else { + return token.DEFAULT + } +} +func (x ChanType) Op() token.Token { return token.CHAN } +func (x CommClause) Op() token.Token { + if x.X.Comm != nil { + return token.CASE + } else { + return token.DEFAULT + } +} +func (x CompositeLit) Op() token.Token { return token.RBRACE } +func (x DeclStmt) Op() token.Token { return x.X.Decl.(*ast.GenDecl).Tok } +func (x DeferStmt) Op() token.Token { return token.DEFER } +func (x Ellipsis) Op() token.Token { return token.ELLIPSIS } +func (x EmptyStmt) Op() token.Token { return token.SEMICOLON } +func (x ExprStmt) Op() token.Token { return token.ELSE } // FIXME +func (x Field) Op() token.Token { return token.PERIOD } +func (x ForStmt) Op() token.Token { return token.FOR } +func (x FuncDecl) Op() token.Token { return token.FUNC } +func (x FuncLit) Op() token.Token { return token.FUNC } +func (x FuncType) Op() token.Token { return token.FUNC } +func (x GoStmt) Op() token.Token { return token.GO } +func (x Ident) Op() token.Token { return token.IDENT } +func (x IfStmt) Op() token.Token { return token.IF } +func (x ImportSpec) Op() token.Token { return token.IMPORT } +func (x IncDecStmt) Op() token.Token { return x.X.Tok } +func (x IndexExpr) Op() token.Token { return token.LBRACK } +func (x InterfaceType) Op() token.Token { return token.INTERFACE } +func (x KeyValueExpr) Op() token.Token { return token.COLON } // FIXME +func (x LabeledStmt) Op() token.Token { return token.COLON } // FIXME +func (x MapType) Op() token.Token { return token.MAP } +func (x Package) Op() token.Token { return token.PACKAGE } +func (x ParenExpr) Op() token.Token { return token.LPAREN } +func (x RangeStmt) Op() token.Token { return token.RANGE } +func (x SelectStmt) Op() token.Token { return token.SELECT } +func (x SelectorExpr) Op() token.Token { return token.CASE } +func (x SendStmt) Op() token.Token { return token.CHAN } // FIXME +func (x SliceExpr) Op() token.Token { return token.RBRACK } // FIXME +func (x StarExpr) Op() token.Token { return token.MUL } +func (x StructType) Op() token.Token { return token.STRUCT } +func (x SwitchStmt) Op() token.Token { return token.SWITCH } +func (x TypeAssertExpr) Op() token.Token { return token.TYPE } // FIXME +func (x TypeSpec) Op() token.Token { return token.TYPE } +func (x TypeSwitchStmt) Op() token.Token { return token.SWITCH } // FIXME +func (x UnaryExpr) Op() token.Token { return x.X.Op } +func (x ValueSpec) Op() token.Token { return token.VAR } // can be VAR or CONST + +// +// .................. functions New() Ast +// +func (x ArrayType) New() Ast { return ArrayType{&ast.ArrayType{Lbrack: x.X.Lbrack}} } +func (x AssignStmt) New() Ast { return AssignStmt{&ast.AssignStmt{TokPos: x.X.TokPos, Tok: x.X.Tok}} } +func (x BadDecl) New() Ast { return BadDecl{&ast.BadDecl{From: x.X.From, To: x.X.To}} } +func (x BadExpr) New() Ast { return BadExpr{&ast.BadExpr{From: x.X.From, To: x.X.To}} } +func (x BadStmt) New() Ast { return BadStmt{&ast.BadStmt{From: x.X.From, To: x.X.To}} } +func (x BasicLit) New() Ast { + return BasicLit{&ast.BasicLit{ValuePos: x.X.ValuePos, Value: x.X.Value, Kind: x.X.Kind}} +} +func (x BinaryExpr) New() Ast { return BinaryExpr{&ast.BinaryExpr{OpPos: x.X.OpPos, Op: x.X.Op}} } +func (x BranchStmt) New() Ast { return BranchStmt{&ast.BranchStmt{TokPos: x.X.TokPos, Tok: x.X.Tok}} } +func (x CallExpr) New() Ast { + return CallExpr{&ast.CallExpr{Lparen: x.X.Lparen, Ellipsis: x.X.Ellipsis, Rparen: x.X.Rparen}} +} +func (x CaseClause) New() Ast { return CaseClause{&ast.CaseClause{Case: x.X.Case, Colon: x.X.Colon}} } +func (x ChanType) New() Ast { + return ChanType{&ast.ChanType{Begin: x.X.Begin, Arrow: x.X.Arrow, Dir: x.X.Dir}} +} +func (x CommClause) New() Ast { return CommClause{&ast.CommClause{Case: x.X.Case, Colon: x.X.Colon}} } +func (x CompositeLit) New() Ast { + return CompositeLit{&ast.CompositeLit{Lbrace: x.X.Lbrace, Rbrace: x.X.Rbrace}} +} +func (x DeclStmt) New() Ast { return DeclStmt{&ast.DeclStmt{}} } +func (x DeferStmt) New() Ast { return DeferStmt{&ast.DeferStmt{Defer: x.X.Defer}} } +func (x Ellipsis) New() Ast { return Ellipsis{&ast.Ellipsis{Ellipsis: x.X.Ellipsis}} } +func (x EmptyStmt) New() Ast { + return EmptyStmt{&ast.EmptyStmt{Semicolon: x.X.Semicolon, Implicit: x.X.Implicit}} +} +func (x ExprStmt) New() Ast { return ExprStmt{&ast.ExprStmt{}} } +func (x Field) New() Ast { return Field{&ast.Field{Doc: x.X.Doc, Comment: x.X.Comment}} } +func (x ForStmt) New() Ast { return ForStmt{&ast.ForStmt{For: x.X.For}} } +func (x FuncDecl) New() Ast { return FuncDecl{&ast.FuncDecl{Doc: x.X.Doc}} } +func (x FuncLit) New() Ast { return FuncLit{&ast.FuncLit{}} } +func (x FuncType) New() Ast { return FuncType{&ast.FuncType{Func: x.X.Func}} } +func (x GoStmt) New() Ast { return GoStmt{&ast.GoStmt{Go: x.X.Go}} } +func (x Ident) New() Ast { return Ident{&ast.Ident{NamePos: x.X.NamePos, Name: x.X.Name}} } +func (x IfStmt) New() Ast { return IfStmt{&ast.IfStmt{If: x.X.If}} } +func (x ImportSpec) New() Ast { + return ImportSpec{&ast.ImportSpec{Doc: x.X.Doc, Comment: x.X.Comment, EndPos: x.X.EndPos}} +} +func (x IncDecStmt) New() Ast { return IncDecStmt{&ast.IncDecStmt{TokPos: x.X.TokPos, Tok: x.X.Tok}} } +func (x IndexExpr) New() Ast { return IndexExpr{&ast.IndexExpr{Lbrack: x.X.Lbrack, Rbrack: x.X.Rbrack}} } +func (x InterfaceType) New() Ast { + return InterfaceType{&ast.InterfaceType{Interface: x.X.Interface, Incomplete: x.X.Incomplete}} +} +func (x KeyValueExpr) New() Ast { return KeyValueExpr{&ast.KeyValueExpr{Colon: x.X.Colon}} } +func (x LabeledStmt) New() Ast { return LabeledStmt{&ast.LabeledStmt{Colon: x.X.Colon}} } +func (x MapType) New() Ast { return MapType{&ast.MapType{Map: x.X.Map}} } +func (x Package) New() Ast { + return Package{&ast.Package{Name: x.X.Name, Scope: x.X.Scope, Imports: x.X.Imports}} +} +func (x ParenExpr) New() Ast { return ParenExpr{&ast.ParenExpr{Lparen: x.X.Lparen, Rparen: x.X.Rparen}} } +func (x RangeStmt) New() Ast { + return RangeStmt{&ast.RangeStmt{For: x.X.For, TokPos: x.X.TokPos, Tok: x.X.Tok}} +} +func (x SelectStmt) New() Ast { return SelectStmt{&ast.SelectStmt{Select: x.X.Select}} } +func (x SelectorExpr) New() Ast { return SelectorExpr{&ast.SelectorExpr{}} } +func (x SendStmt) New() Ast { return SendStmt{&ast.SendStmt{Arrow: x.X.Arrow}} } +func (x SliceExpr) New() Ast { return SliceExpr{&ast.SliceExpr{Lbrack: x.X.Lbrack, Rbrack: x.X.Rbrack}} } +func (x StarExpr) New() Ast { return StarExpr{&ast.StarExpr{Star: x.X.Star}} } +func (x StructType) New() Ast { return StructType{&ast.StructType{Incomplete: x.X.Incomplete}} } +func (x SwitchStmt) New() Ast { return SwitchStmt{&ast.SwitchStmt{Switch: x.X.Switch}} } +func (x TypeAssertExpr) New() Ast { + return TypeAssertExpr{&ast.TypeAssertExpr{Lparen: x.X.Lparen, Rparen: x.X.Rparen}} +} +func (x TypeSpec) New() Ast { return TypeSpec{&ast.TypeSpec{Doc: x.X.Doc, Comment: x.X.Comment}} } +func (x TypeSwitchStmt) New() Ast { return TypeSwitchStmt{&ast.TypeSwitchStmt{Switch: x.X.Switch}} } +func (x UnaryExpr) New() Ast { return UnaryExpr{&ast.UnaryExpr{OpPos: x.X.OpPos, Op: x.X.Op}} } +func (x ValueSpec) New() Ast { return ValueSpec{&ast.ValueSpec{Doc: x.X.Doc, Comment: x.X.Comment}} } + +// +// .................. functions Size() int +// +func (x ArrayType) Size() int { return 2 } +func (x AssignStmt) Size() int { return 2 } +func (x BadDecl) Size() int { return 0 } +func (x BadExpr) Size() int { return 0 } +func (x BadStmt) Size() int { return 0 } +func (x BasicLit) Size() int { return 0 } +func (x BinaryExpr) Size() int { return 2 } +func (x BranchStmt) Size() int { return 1 } +func (x CallExpr) Size() int { return 2 } +func (x CaseClause) Size() int { return 2 } +func (x ChanType) Size() int { return 1 } +func (x CommClause) Size() int { return 2 } +func (x CompositeLit) Size() int { return 2 } +func (x DeclStmt) Size() int { return 1 } +func (x DeferStmt) Size() int { return 1 } +func (x Ellipsis) Size() int { return 1 } +func (x EmptyStmt) Size() int { return 0 } +func (x ExprStmt) Size() int { return 1 } +func (x Field) Size() int { return 3 } +func (x ForStmt) Size() int { return 4 } +func (x FuncDecl) Size() int { return 4 } +func (x FuncLit) Size() int { return 2 } +func (x FuncType) Size() int { return 2 } +func (x GoStmt) Size() int { return 1 } +func (x Ident) Size() int { return 0 } +func (x IfStmt) Size() int { return 4 } +func (x ImportSpec) Size() int { return 2 } +func (x IncDecStmt) Size() int { return 1 } +func (x IndexExpr) Size() int { return 2 } +func (x InterfaceType) Size() int { return 1 } +func (x KeyValueExpr) Size() int { return 2 } +func (x LabeledStmt) Size() int { return 2 } +func (x MapType) Size() int { return 2 } +func (x Package) Size() int { return 2 } +func (x ParenExpr) Size() int { return 1 } +func (x RangeStmt) Size() int { return 4 } +func (x SelectStmt) Size() int { return 1 } +func (x SelectorExpr) Size() int { return 2 } +func (x SendStmt) Size() int { return 2 } +func (x SliceExpr) Size() int { return 4 } +func (x StarExpr) Size() int { return 1 } +func (x StructType) Size() int { return 1 } +func (x SwitchStmt) Size() int { return 3 } +func (x TypeAssertExpr) Size() int { return 2 } +func (x TypeSpec) Size() int { return 2 } +func (x TypeSwitchStmt) Size() int { return 3 } +func (x UnaryExpr) Size() int { return 1 } +func (x ValueSpec) Size() int { return 3 } + +// +// .................. functions Get(int) Ast +// +func (x ArrayType) Get(i int) Ast { return ToAst2(i, x.X.Len, x.X.Elt) } +func (x AssignStmt) Get(i int) Ast { + var slice []ast.Expr + switch i { + case 0: + slice = x.X.Lhs + case 1: + slice = x.X.Rhs + default: + return badIndex(i, 2) + } + if slice != nil { + return ExprSlice{slice} + } + return nil +} +func (x BadDecl) Get(i int) Ast { return badIndex(i, 0) } +func (x BadExpr) Get(i int) Ast { return badIndex(i, 0) } +func (x BadStmt) Get(i int) Ast { return badIndex(i, 0) } +func (x BasicLit) Get(i int) Ast { return badIndex(i, 0) } +func (x BinaryExpr) Get(i int) Ast { return ToAst2(i, x.X.X, x.X.Y) } +func (x BranchStmt) Get(i int) Ast { return Ident{x.X.Label} } +func (x CallExpr) Get(i int) Ast { + if i == 0 { + return ToAst(x.X.Fun) + } else if i == 1 { + if node := x.X.Args; node != nil { + return ExprSlice{node} + } + return nil + } else { + return badIndex(i, 2) + } +} +func (x CaseClause) Get(i int) Ast { + if i == 0 { + if list := x.X.List; list != nil { + return ExprSlice{list} + } + return nil + } else if i == 1 { + if list := x.X.Body; list != nil { + return StmtSlice{list} + } + return nil + } else { + return badIndex(i, 2) + } +} +func (x ChanType) Get(i int) Ast { return ToAst1(i, x.X.Value) } +func (x CommClause) Get(i int) Ast { + if i == 0 { + return ToAst(x.X.Comm) + } else if i == 1 { + if list := x.X.Body; list != nil { + return StmtSlice{list} + } + return nil + } else { + return badIndex(i, 2) + } +} +func (x CompositeLit) Get(i int) Ast { + if i == 0 { + return ToAst(x.X.Type) + } else if i == 1 { + if x.X.Elts != nil { + return ExprSlice{x.X.Elts} + } + return nil + } else { + return badIndex(i, 2) + } +} +func (x DeclStmt) Get(i int) Ast { return ToAst1(i, x.X.Decl) } +func (x DeferStmt) Get(i int) Ast { return CallExpr{x.X.Call} } +func (x Ellipsis) Get(i int) Ast { return ToAst1(i, x.X.Elt) } +func (x EmptyStmt) Get(i int) Ast { return badIndex(i, 0) } +func (x ExprStmt) Get(i int) Ast { return ToAst1(i, x.X.X) } +func (x Field) Get(i int) Ast { + if i == 0 { + if x.X.Names != nil { + return IdentSlice{x.X.Names} + } + return nil + } else if i == 1 { + return ToAst(x.X.Type) + } else if i == 2 { + return ToAst(x.X.Tag) + } else { + return badIndex(i, 3) + } +} +func (x ForStmt) Get(i int) Ast { + var node ast.Node + switch i { + case 0: + node = x.X.Init + case 1: + node = x.X.Cond + case 2: + node = x.X.Post + case 3: + node = x.X.Body + default: + return badIndex(i, 4) + } + return ToAst(node) +} +func (x FuncDecl) Get(i int) Ast { return ToAst4(i, x.X.Recv, x.X.Name, x.X.Type, x.X.Body) } +func (x FuncLit) Get(i int) Ast { return ToAst2(i, x.X.Type, x.X.Body) } +func (x FuncType) Get(i int) Ast { return ToAst2(i, x.X.Params, x.X.Results) } +func (x GoStmt) Get(i int) Ast { return CallExpr{x.X.Call} } +func (x Ident) Get(i int) Ast { return badIndex(i, 0) } +func (x IfStmt) Get(i int) Ast { return ToAst4(i, x.X.Init, x.X.Cond, x.X.Body, x.X.Else) } +func (x ImportSpec) Get(i int) Ast { return ToAst2(i, x.X.Name, x.X.Path) } +func (x IncDecStmt) Get(i int) Ast { return ToAst1(i, x.X.X) } +func (x IndexExpr) Get(i int) Ast { return ToAst2(i, x.X.X, x.X.Index) } +func (x InterfaceType) Get(i int) Ast { + if i == 0 { + if x.X.Methods != nil { + return FieldList{x.X.Methods} + } + return nil + } else { + return badIndex(i, 1) + } +} +func (x KeyValueExpr) Get(i int) Ast { return ToAst2(i, x.X.Key, x.X.Value) } +func (x LabeledStmt) Get(i int) Ast { return ToAst2(i, x.X.Label, x.X.Stmt) } +func (x MapType) Get(i int) Ast { return ToAst2(i, x.X.Key, x.X.Value) } +func (x Package) Get(i int) Ast { return nil } // TODO +func (x ParenExpr) Get(i int) Ast { return ToAst1(i, x.X.X) } +func (x RangeStmt) Get(i int) Ast { return ToAst4(i, x.X.Key, x.X.Value, x.X.X, x.X.Body) } +func (x SelectStmt) Get(i int) Ast { return ToAst1(i, x.X.Body) } +func (x SelectorExpr) Get(i int) Ast { return ToAst2(i, x.X.X, x.X.Sel) } +func (x SendStmt) Get(i int) Ast { return ToAst2(i, x.X.Chan, x.X.Value) } +func (x SliceExpr) Get(i int) Ast { return ToAst4(i, x.X.X, x.X.Low, x.X.High, x.X.Max) } +func (x StarExpr) Get(i int) Ast { return ToAst1(i, x.X.X) } +func (x StructType) Get(i int) Ast { return ToAst1(i, x.X.Fields) } +func (x SwitchStmt) Get(i int) Ast { return ToAst3(i, x.X.Init, x.X.Tag, x.X.Body) } +func (x TypeAssertExpr) Get(i int) Ast { return ToAst2(i, x.X.X, x.X.Type) } +func (x TypeSpec) Get(i int) Ast { return ToAst2(i, x.X.Name, x.X.Type) } +func (x TypeSwitchStmt) Get(i int) Ast { return ToAst3(i, x.X.Init, x.X.Assign, x.X.Body) } +func (x UnaryExpr) Get(i int) Ast { return ToAst1(i, x.X.X) } +func (x ValueSpec) Get(i int) Ast { + switch i { + case 0: + if x.X.Names != nil { + return IdentSlice{x.X.Names} + } + case 1: + if x.X.Type != nil { + return ToAst(x.X.Type) + } + case 2: + if x.X.Values != nil { + return ExprSlice{x.X.Values} + } + default: + return badIndex(i, 3) + } + return nil +} + +// +// .................. functions Set(int, Ast) +// +func (x ArrayType) Set(i int, child Ast) { + expr := ToExpr(child) + if i == 0 { + x.X.Len = expr + } else if i == 1 { + x.X.Elt = expr + } else { + badIndex(i, 2) + } +} +func (x AssignStmt) Set(i int, child Ast) { + exprs := ToExprSlice(child) + if i == 0 { + x.X.Lhs = exprs + } else if i == 1 { + x.X.Rhs = exprs + } else { + badIndex(i, 2) + } +} +func (x BadDecl) Set(i int, child Ast) { badIndex(i, 0) } +func (x BadExpr) Set(i int, child Ast) { badIndex(i, 0) } +func (x BadStmt) Set(i int, child Ast) { badIndex(i, 0) } +func (x BasicLit) Set(i int, child Ast) { badIndex(i, 0) } +func (x BinaryExpr) Set(i int, child Ast) { + expr := ToExpr(child) + if i == 0 { + x.X.X = expr + } else if i == 1 { + x.X.Y = expr + } else { + badIndex(i, 2) + } +} +func (x BranchStmt) Set(i int, child Ast) { + if i == 0 { + x.X.Label = ToIdent(child) + } else { + badIndex(i, 1) + } +} +func (x CallExpr) Set(i int, child Ast) { + if i == 0 { + x.X.Fun = ToExpr(child) + } else if i == 1 { + x.X.Args = ToExprSlice(child) + } else { + badIndex(i, 2) + } +} +func (x CaseClause) Set(i int, child Ast) { + if i == 0 { + x.X.List = ToExprSlice(child) + } else if i == 1 { + x.X.Body = ToStmtSlice(child) + } else { + badIndex(i, 2) + } +} +func (x ChanType) Set(i int, child Ast) { + if i == 0 { + x.X.Value = ToExpr(child) + } else { + badIndex(i, 1) + } +} +func (x CommClause) Set(i int, child Ast) { + if i == 0 { + x.X.Comm = ToStmt(child) + } else if i == 1 { + x.X.Body = ToStmtSlice(child) + } else { + badIndex(i, 2) + } +} +func (x CompositeLit) Set(i int, child Ast) { + if i == 0 { + x.X.Type = ToExpr(child) + } else if i == 1 { + x.X.Elts = ToExprSlice(child) + } else { + badIndex(i, 2) + } +} +func (x DeclStmt) Set(i int, child Ast) { + if i == 0 { + x.X.Decl = ToDecl(child) + } else { + badIndex(i, 1) + } +} +func (x DeferStmt) Set(i int, child Ast) { + if i == 0 { + x.X.Call = ToCallExpr(child) + } else { + badIndex(i, 1) + } +} +func (x Ellipsis) Set(i int, child Ast) { + if i == 0 { + x.X.Elt = ToExpr(child) + } else { + badIndex(i, 1) + } +} +func (x EmptyStmt) Set(i int, child Ast) { badIndex(i, 0) } +func (x ExprStmt) Set(i int, child Ast) { + if i == 0 { + x.X.X = ToExpr(child) + } else { + badIndex(i, 1) + } +} +func (x Field) Set(i int, child Ast) { + if i == 0 { + x.X.Names = ToIdentSlice(child) + } else if i == 1 { + x.X.Type = ToExpr(child) + } else if i == 2 { + x.X.Tag = ToBasicLit(child) + } else { + badIndex(i, 3) + } +} +func (x ForStmt) Set(i int, child Ast) { + switch i { + case 0: + x.X.Init = ToStmt(child) + case 1: + x.X.Cond = ToExpr(child) + case 2: + x.X.Post = ToStmt(child) + case 3: + x.X.Body = ToBlockStmt(child) + default: + badIndex(i, 4) + } +} +func (x FuncDecl) Set(i int, child Ast) { + switch i { + case 0: + x.X.Recv = ToFieldList(child) + case 1: + x.X.Name = ToIdent(child) + case 2: + x.X.Type = ToFuncType(child) + case 3: + x.X.Body = ToBlockStmt(child) + default: + badIndex(i, 4) + } +} +func (x FuncLit) Set(i int, child Ast) { + if i == 0 { + x.X.Type = ToFuncType(child) + } else if i == 1 { + x.X.Body = ToBlockStmt(child) + } else { + badIndex(i, 2) + } +} +func (x FuncType) Set(i int, child Ast) { + list := ToFieldList(child) + if i == 0 { + x.X.Params = list + } else if i == 1 { + x.X.Results = list + } else { + badIndex(i, 2) + } +} +func (x GoStmt) Set(i int, child Ast) { + if i == 0 { + x.X.Call = ToCallExpr(child) + } else { + badIndex(i, 1) + } +} +func (x Ident) Set(i int, child Ast) { badIndex(i, 0) } +func (x IfStmt) Set(i int, child Ast) { + switch i { + case 0: + x.X.Init = ToStmt(child) + case 1: + x.X.Cond = ToExpr(child) + case 2: + x.X.Body = ToBlockStmt(child) + case 3: + x.X.Else = ToStmt(child) + default: + badIndex(i, 4) + } +} +func (x ImportSpec) Set(i int, child Ast) { + if i == 0 { + x.X.Name = ToIdent(child) + } else if i == 1 { + x.X.Path = ToBasicLit(child) + } else { + badIndex(i, 2) + } +} +func (x IncDecStmt) Set(i int, child Ast) { + if i == 0 { + x.X.X = ToExpr(child) + } else { + badIndex(i, 1) + } +} +func (x IndexExpr) Set(i int, child Ast) { + expr := ToExpr(child) + if i == 0 { + x.X.X = expr + } else if i == 1 { + x.X.Index = expr + } else { + badIndex(i, 2) + } +} +func (x InterfaceType) Set(i int, child Ast) { + if i == 0 { + x.X.Methods = ToFieldList(child) + } else { + badIndex(i, 1) + } +} +func (x KeyValueExpr) Set(i int, child Ast) { + expr := ToExpr(child) + if i == 0 { + x.X.Key = expr + } else if i == 1 { + x.X.Value = expr + } else { + badIndex(i, 2) + } +} +func (x LabeledStmt) Set(i int, child Ast) { + if i == 0 { + x.X.Label = ToIdent(child) + } else if i == 1 { + x.X.Stmt = ToStmt(child) + } else { + badIndex(i, 2) + } +} +func (x MapType) Set(i int, child Ast) { + expr := ToExpr(child) + if i == 0 { + x.X.Key = expr + } else if i == 1 { + x.X.Value = expr + } else { + badIndex(i, 2) + } +} +func (x Package) Set(i int, child Ast) {} // TODO +func (x ParenExpr) Set(i int, child Ast) { + if i == 0 { + x.X.X = ToExpr(child) + } else { + badIndex(i, 1) + } +} +func (x RangeStmt) Set(i int, child Ast) { + switch i { + case 0: + x.X.Key = ToExpr(child) + case 1: + x.X.Value = ToExpr(child) + case 2: + x.X.X = ToExpr(child) + case 3: + x.X.Body = ToBlockStmt(child) + default: + badIndex(i, 4) + } +} +func (x SelectStmt) Set(i int, child Ast) { + if i == 0 { + x.X.Body = ToBlockStmt(child) + } else { + badIndex(i, 1) + } +} +func (x SelectorExpr) Set(i int, child Ast) { + if i == 0 { + x.X.X = ToExpr(child) + } else if i == 1 { + x.X.Sel = ToIdent(child) + } else { + badIndex(i, 2) + } +} +func (x SendStmt) Set(i int, child Ast) { + expr := ToExpr(child) + if i == 0 { + x.X.Chan = expr + } else if i == 1 { + x.X.Value = expr + } else { + badIndex(i, 2) + } +} +func (x SliceExpr) Set(i int, child Ast) { + expr := ToExpr(child) + switch i { + case 0: + x.X.X = expr + case 1: + x.X.Low = expr + case 2: + x.X.High = expr + case 3: + x.X.Max = expr + x.X.Slice3 = expr != nil + default: + badIndex(i, 4) + } +} +func (x StarExpr) Set(i int, child Ast) { + if i == 0 { + x.X.X = ToExpr(child) + } else { + badIndex(i, 1) + } +} +func (x StructType) Set(i int, child Ast) { + if i == 0 { + x.X.Fields = ToFieldList(child) + } else { + badIndex(i, 1) + } +} +func (x SwitchStmt) Set(i int, child Ast) { + switch i { + case 0: + x.X.Init = ToStmt(child) + case 1: + x.X.Tag = ToExpr(child) + case 2: + x.X.Body = ToBlockStmt(child) + default: + badIndex(i, 3) + } +} +func (x TypeAssertExpr) Set(i int, child Ast) { + if i == 0 { + x.X.X = ToExpr(child) + } else if i == 1 { + x.X.Type = ToExpr(child) + } else { + badIndex(i, 2) + } +} +func (x TypeSpec) Set(i int, child Ast) { + if i == 0 { + x.X.Name = ToIdent(child) + } else if i == 1 { + x.X.Type = ToExpr(child) + } else { + badIndex(i, 2) + } +} +func (x TypeSwitchStmt) Set(i int, child Ast) { + switch i { + case 0: + x.X.Init = ToStmt(child) + case 1: + x.X.Assign = ToStmt(child) + case 2: + x.X.Body = ToBlockStmt(child) + default: + badIndex(i, 3) + } +} +func (x UnaryExpr) Set(i int, child Ast) { + if i == 0 { + x.X.X = ToExpr(child) + } else { + badIndex(i, 1) + } +} +func (x ValueSpec) Set(i int, child Ast) { + switch i { + case 0: + x.X.Names = ToIdentSlice(child) + case 1: + x.X.Type = ToExpr(child) + case 2: + x.X.Values = ToExprSlice(child) + default: + badIndex(i, 3) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/ast2/ast_slice.go b/vendor/github.com/cosmos72/gomacro/ast2/ast_slice.go new file mode 100644 index 0000000..35af48d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/ast2/ast_slice.go @@ -0,0 +1,183 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * ast_slice.go + * + * Created on Feb 25, 2017 + * Author Massimiliano Ghilardi + */ + +package ast2 + +import ( + "go/ast" + "go/token" +) + +// Ast wrappers for variable-length slices of ast.Nodes - they are not full-blown ast.Node + +func (x AstSlice) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x NodeSlice) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x ExprSlice) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x FieldSlice) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x DeclSlice) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x IdentSlice) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x SpecSlice) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x StmtSlice) Interface() interface{} { return asInterface(x.X, x.X == nil) } + +func (x AstSlice) Op() token.Token { return token.COMMA } // FIXME +func (x NodeSlice) Op() token.Token { return token.COMMA } // FIXME +func (x ExprSlice) Op() token.Token { return token.COMMA } // FIXME +func (x FieldSlice) Op() token.Token { return token.SEMICOLON } // FIXME +func (x DeclSlice) Op() token.Token { return token.SEMICOLON } // FIXME +func (x IdentSlice) Op() token.Token { return token.COMMA } // FIXME +func (x SpecSlice) Op() token.Token { return token.SEMICOLON } // FIXME +func (x StmtSlice) Op() token.Token { return token.SEMICOLON } // FIXME + +func (x AstSlice) New() Ast { return AstSlice{} } +func (x NodeSlice) New() Ast { return NodeSlice{} } +func (x ExprSlice) New() Ast { return ExprSlice{} } +func (x FieldSlice) New() Ast { return FieldSlice{} } +func (x DeclSlice) New() Ast { return DeclSlice{} } +func (x IdentSlice) New() Ast { return IdentSlice{} } +func (x SpecSlice) New() Ast { return SpecSlice{} } +func (x StmtSlice) New() Ast { return StmtSlice{} } + +func (x AstSlice) Size() int { return len(x.X) } +func (x NodeSlice) Size() int { return len(x.X) } +func (x ExprSlice) Size() int { return len(x.X) } +func (x FieldSlice) Size() int { return len(x.X) } +func (x DeclSlice) Size() int { return len(x.X) } +func (x IdentSlice) Size() int { return len(x.X) } +func (x SpecSlice) Size() int { return len(x.X) } +func (x StmtSlice) Size() int { return len(x.X) } + +func (x AstSlice) Get(i int) Ast { return x.X[i] } +func (x NodeSlice) Get(i int) Ast { return ToAst(x.X[i]) } +func (x ExprSlice) Get(i int) Ast { return ToAst(x.X[i]) } +func (x FieldSlice) Get(i int) Ast { return ToAst(x.X[i]) } +func (x DeclSlice) Get(i int) Ast { return ToAst(x.X[i]) } +func (x IdentSlice) Get(i int) Ast { return ToAst(x.X[i]) } +func (x SpecSlice) Get(i int) Ast { return ToAst(x.X[i]) } +func (x StmtSlice) Get(i int) Ast { return ToAst(x.X[i]) } + +func (x AstSlice) Set(i int, child Ast) { x.X[i] = child } +func (x NodeSlice) Set(i int, child Ast) { x.X[i] = ToNode(child) } +func (x ExprSlice) Set(i int, child Ast) { x.X[i] = ToExpr(child) } +func (x FieldSlice) Set(i int, child Ast) { x.X[i] = ToField(child) } +func (x DeclSlice) Set(i int, child Ast) { x.X[i] = ToDecl(child) } +func (x IdentSlice) Set(i int, child Ast) { x.X[i] = ToIdent(child) } +func (x SpecSlice) Set(i int, child Ast) { x.X[i] = ToSpec(child) } +func (x StmtSlice) Set(i int, child Ast) { x.X[i] = ToStmt(child) } + +func (x AstSlice) Slice(lo, hi int) AstWithSlice { x.X = x.X[lo:hi]; return x } +func (x NodeSlice) Slice(lo, hi int) AstWithSlice { x.X = x.X[lo:hi]; return x } +func (x ExprSlice) Slice(lo, hi int) AstWithSlice { x.X = x.X[lo:hi]; return x } +func (x FieldSlice) Slice(lo, hi int) AstWithSlice { x.X = x.X[lo:hi]; return x } +func (x DeclSlice) Slice(lo, hi int) AstWithSlice { x.X = x.X[lo:hi]; return x } +func (x IdentSlice) Slice(lo, hi int) AstWithSlice { x.X = x.X[lo:hi]; return x } +func (x SpecSlice) Slice(lo, hi int) AstWithSlice { x.X = x.X[lo:hi]; return x } +func (x StmtSlice) Slice(lo, hi int) AstWithSlice { x.X = x.X[lo:hi]; return x } + +func (x AstSlice) Append(child Ast) AstWithSlice { x.X = append(x.X, child); return x } +func (x NodeSlice) Append(child Ast) AstWithSlice { x.X = append(x.X, ToNode(child)); return x } +func (x ExprSlice) Append(child Ast) AstWithSlice { x.X = append(x.X, ToExpr(child)); return x } +func (x FieldSlice) Append(child Ast) AstWithSlice { x.X = append(x.X, ToField(child)); return x } +func (x DeclSlice) Append(child Ast) AstWithSlice { x.X = append(x.X, ToDecl(child)); return x } +func (x IdentSlice) Append(child Ast) AstWithSlice { x.X = append(x.X, ToIdent(child)); return x } +func (x SpecSlice) Append(child Ast) AstWithSlice { x.X = append(x.X, ToSpec(child)); return x } +func (x StmtSlice) Append(child Ast) AstWithSlice { x.X = append(x.X, ToStmt(child)); return x } + +// variable-length ast.Nodes + +func (x BlockStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x FieldList) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x File) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x GenDecl) Interface() interface{} { return asInterface(x.X, x.X == nil) } +func (x ReturnStmt) Interface() interface{} { return asInterface(x.X, x.X == nil) } + +func (x BlockStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x FieldList) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x File) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x GenDecl) Node() ast.Node { return asNode(x.X, x.X == nil) } +func (x ReturnStmt) Node() ast.Node { return asNode(x.X, x.X == nil) } + +func (x BlockStmt) Op() token.Token { return token.LBRACE } +func (x FieldList) Op() token.Token { return token.ELLIPSIS } +func (x File) Op() token.Token { return token.EOF } +func (x GenDecl) Op() token.Token { return x.X.Tok } +func (x ReturnStmt) Op() token.Token { return token.RETURN } + +func (x BlockStmt) New() Ast { return BlockStmt{&ast.BlockStmt{Lbrace: x.X.Lbrace, Rbrace: x.X.Rbrace}} } +func (x FieldList) New() Ast { return FieldList{&ast.FieldList{}} } +func (x File) New() Ast { + return File{&ast.File{Doc: x.X.Doc, Package: x.X.Package, Name: x.X.Name, Scope: x.X.Scope, Imports: x.X.Imports, Comments: x.X.Comments}} +} +func (x GenDecl) New() Ast { + return GenDecl{&ast.GenDecl{Doc: x.X.Doc, TokPos: x.X.TokPos, Tok: x.X.Tok, Lparen: x.X.Lparen, Rparen: x.X.Rparen}} +} + +// do not copy position of "return" keyword. +// otherwise go/format may insert a newline between "return" and the following expressions +func (x ReturnStmt) New() Ast { return ReturnStmt{&ast.ReturnStmt{}} } + +func (x BlockStmt) Size() int { return len(x.X.List) } +func (x FieldList) Size() int { return len(x.X.List) } +func (x File) Size() int { return len(x.X.Decls) } +func (x GenDecl) Size() int { return len(x.X.Specs) } +func (x ReturnStmt) Size() int { return len(x.X.Results) } + +func (x BlockStmt) Get(i int) Ast { return ToAst(x.X.List[i]) } +func (x FieldList) Get(i int) Ast { return ToAst(x.X.List[i]) } +func (x File) Get(i int) Ast { return ToAst(x.X.Decls[i]) } +func (x GenDecl) Get(i int) Ast { return ToAst(x.X.Specs[i]) } +func (x ReturnStmt) Get(i int) Ast { return ToAst(x.X.Results[i]) } + +func (x BlockStmt) Set(i int, child Ast) { x.X.List[i] = ToStmt(child) } +func (x FieldList) Set(i int, child Ast) { x.X.List[i] = ToField(child) } +func (x File) Set(i int, child Ast) { x.X.Decls[i] = ToDecl(child) } +func (x GenDecl) Set(i int, child Ast) { x.X.Specs[i] = ToSpec(child) } +func (x ReturnStmt) Set(i int, child Ast) { x.X.Results[i] = ToExpr(child) } + +func (x BlockStmt) Slice(lo, hi int) AstWithSlice { x.X.List = x.X.List[lo:hi]; return x } +func (x FieldList) Slice(lo, hi int) AstWithSlice { x.X.List = x.X.List[lo:hi]; return x } +func (x File) Slice(lo, hi int) AstWithSlice { x.X.Decls = x.X.Decls[lo:hi]; return x } +func (x GenDecl) Slice(lo, hi int) AstWithSlice { x.X.Specs = x.X.Specs[lo:hi]; return x } +func (x ReturnStmt) Slice(lo, hi int) AstWithSlice { x.X.Results = x.X.Results[lo:hi]; return x } + +func (x BlockStmt) Append(child Ast) AstWithSlice { + x.X.List = append(x.X.List, ToStmt(child)) + return x +} +func (x FieldList) Append(child Ast) AstWithSlice { + x.X.List = append(x.X.List, ToField(child)) + return x +} +func (x File) Append(child Ast) AstWithSlice { + x.X.Decls = append(x.X.Decls, ToDecl(child)) + return x +} +func (x GenDecl) Append(child Ast) AstWithSlice { + x.X.Specs = append(x.X.Specs, ToSpec(child)) + return x +} +func (x ReturnStmt) Append(child Ast) AstWithSlice { + x.X.Results = append(x.X.Results, ToExpr(child)) + return x +} diff --git a/vendor/github.com/cosmos72/gomacro/ast2/error.go b/vendor/github.com/cosmos72/gomacro/ast2/error.go new file mode 100644 index 0000000..9490f09 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/ast2/error.go @@ -0,0 +1,44 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * error.go + * + * Created on: Mar 18, 2017 + * Author: Massimiliano Ghilardi + */ + +package ast2 + +import ( + "errors" + "fmt" +) + +func badIndex(index int, size int) AstWithNode { + if size > 0 { + errorf("index out of range: %d not in 0...%d", index, size-1) + } else { + errorf("index out of range: %d, slice is empty", index) + } + return nil +} + +func errorf(format string, args ...interface{}) { + panic(errors.New(fmt.Sprintf(format, args...))) +} diff --git a/vendor/github.com/cosmos72/gomacro/ast2/x_package.go b/vendor/github.com/cosmos72/gomacro/ast2/x_package.go new file mode 100644 index 0000000..e4e275c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/ast2/x_package.go @@ -0,0 +1,218 @@ +// this file was generated by gomacro command: import _i "github.com/cosmos72/gomacro/ast2" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package ast2 + +import ( + "go/ast" + "go/token" + r "reflect" + + "github.com/cosmos72/gomacro/imports" +) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/ast2" +func init() { + imports.Packages["github.com/cosmos72/gomacro/ast2"] = imports.Package{ + Binds: map[string]r.Value{ + "AnyToAst": r.ValueOf(AnyToAst), + "AnyToAstWithNode": r.ValueOf(AnyToAstWithNode), + "AnyToAstWithSlice": r.ValueOf(AnyToAstWithSlice), + "BlockStmtToExpr": r.ValueOf(BlockStmtToExpr), + "ToAst": r.ValueOf(ToAst), + "ToAst1": r.ValueOf(ToAst1), + "ToAst2": r.ValueOf(ToAst2), + "ToAst3": r.ValueOf(ToAst3), + "ToAst4": r.ValueOf(ToAst4), + "ToAstWithSlice": r.ValueOf(ToAstWithSlice), + "ToBasicLit": r.ValueOf(ToBasicLit), + "ToBlockStmt": r.ValueOf(ToBlockStmt), + "ToCallExpr": r.ValueOf(ToCallExpr), + "ToDecl": r.ValueOf(ToDecl), + "ToExpr": r.ValueOf(ToExpr), + "ToExprSlice": r.ValueOf(ToExprSlice), + "ToField": r.ValueOf(ToField), + "ToFieldList": r.ValueOf(ToFieldList), + "ToFile": r.ValueOf(ToFile), + "ToFuncType": r.ValueOf(ToFuncType), + "ToIdent": r.ValueOf(ToIdent), + "ToIdentSlice": r.ValueOf(ToIdentSlice), + "ToImportSpec": r.ValueOf(ToImportSpec), + "ToNode": r.ValueOf(ToNode), + "ToSpec": r.ValueOf(ToSpec), + "ToStmt": r.ValueOf(ToStmt), + "ToStmtSlice": r.ValueOf(ToStmtSlice), + }, + Types: map[string]r.Type{ + "ArrayType": r.TypeOf((*ArrayType)(nil)).Elem(), + "AssignStmt": r.TypeOf((*AssignStmt)(nil)).Elem(), + "Ast": r.TypeOf((*Ast)(nil)).Elem(), + "AstWithNode": r.TypeOf((*AstWithNode)(nil)).Elem(), + "AstWithSlice": r.TypeOf((*AstWithSlice)(nil)).Elem(), + "BadDecl": r.TypeOf((*BadDecl)(nil)).Elem(), + "BadExpr": r.TypeOf((*BadExpr)(nil)).Elem(), + "BadStmt": r.TypeOf((*BadStmt)(nil)).Elem(), + "BasicLit": r.TypeOf((*BasicLit)(nil)).Elem(), + "BinaryExpr": r.TypeOf((*BinaryExpr)(nil)).Elem(), + "BlockStmt": r.TypeOf((*BlockStmt)(nil)).Elem(), + "BranchStmt": r.TypeOf((*BranchStmt)(nil)).Elem(), + "CallExpr": r.TypeOf((*CallExpr)(nil)).Elem(), + "CaseClause": r.TypeOf((*CaseClause)(nil)).Elem(), + "ChanType": r.TypeOf((*ChanType)(nil)).Elem(), + "CommClause": r.TypeOf((*CommClause)(nil)).Elem(), + "CompositeLit": r.TypeOf((*CompositeLit)(nil)).Elem(), + "DeclSlice": r.TypeOf((*DeclSlice)(nil)).Elem(), + "DeclStmt": r.TypeOf((*DeclStmt)(nil)).Elem(), + "DeferStmt": r.TypeOf((*DeferStmt)(nil)).Elem(), + "Ellipsis": r.TypeOf((*Ellipsis)(nil)).Elem(), + "EmptyStmt": r.TypeOf((*EmptyStmt)(nil)).Elem(), + "ExprSlice": r.TypeOf((*ExprSlice)(nil)).Elem(), + "ExprStmt": r.TypeOf((*ExprStmt)(nil)).Elem(), + "Field": r.TypeOf((*Field)(nil)).Elem(), + "FieldList": r.TypeOf((*FieldList)(nil)).Elem(), + "FieldSlice": r.TypeOf((*FieldSlice)(nil)).Elem(), + "File": r.TypeOf((*File)(nil)).Elem(), + "ForStmt": r.TypeOf((*ForStmt)(nil)).Elem(), + "FuncDecl": r.TypeOf((*FuncDecl)(nil)).Elem(), + "FuncLit": r.TypeOf((*FuncLit)(nil)).Elem(), + "FuncType": r.TypeOf((*FuncType)(nil)).Elem(), + "GenDecl": r.TypeOf((*GenDecl)(nil)).Elem(), + "GoStmt": r.TypeOf((*GoStmt)(nil)).Elem(), + "Ident": r.TypeOf((*Ident)(nil)).Elem(), + "IdentSlice": r.TypeOf((*IdentSlice)(nil)).Elem(), + "IfStmt": r.TypeOf((*IfStmt)(nil)).Elem(), + "ImportSpec": r.TypeOf((*ImportSpec)(nil)).Elem(), + "IncDecStmt": r.TypeOf((*IncDecStmt)(nil)).Elem(), + "IndexExpr": r.TypeOf((*IndexExpr)(nil)).Elem(), + "InterfaceType": r.TypeOf((*InterfaceType)(nil)).Elem(), + "KeyValueExpr": r.TypeOf((*KeyValueExpr)(nil)).Elem(), + "LabeledStmt": r.TypeOf((*LabeledStmt)(nil)).Elem(), + "MapType": r.TypeOf((*MapType)(nil)).Elem(), + "NodeSlice": r.TypeOf((*NodeSlice)(nil)).Elem(), + "Package": r.TypeOf((*Package)(nil)).Elem(), + "ParenExpr": r.TypeOf((*ParenExpr)(nil)).Elem(), + "RangeStmt": r.TypeOf((*RangeStmt)(nil)).Elem(), + "ReturnStmt": r.TypeOf((*ReturnStmt)(nil)).Elem(), + "SelectStmt": r.TypeOf((*SelectStmt)(nil)).Elem(), + "SelectorExpr": r.TypeOf((*SelectorExpr)(nil)).Elem(), + "SendStmt": r.TypeOf((*SendStmt)(nil)).Elem(), + "SliceExpr": r.TypeOf((*SliceExpr)(nil)).Elem(), + "SpecSlice": r.TypeOf((*SpecSlice)(nil)).Elem(), + "StarExpr": r.TypeOf((*StarExpr)(nil)).Elem(), + "StmtSlice": r.TypeOf((*StmtSlice)(nil)).Elem(), + "StructType": r.TypeOf((*StructType)(nil)).Elem(), + "SwitchStmt": r.TypeOf((*SwitchStmt)(nil)).Elem(), + "TypeAssertExpr": r.TypeOf((*TypeAssertExpr)(nil)).Elem(), + "TypeSpec": r.TypeOf((*TypeSpec)(nil)).Elem(), + "TypeSwitchStmt": r.TypeOf((*TypeSwitchStmt)(nil)).Elem(), + "UnaryExpr": r.TypeOf((*UnaryExpr)(nil)).Elem(), + "ValueSpec": r.TypeOf((*ValueSpec)(nil)).Elem(), + }, + Proxies: map[string]r.Type{ + "Ast": r.TypeOf((*Ast_github_com_cosmos72_gomacro_ast2)(nil)).Elem(), + "AstWithNode": r.TypeOf((*AstWithNode_github_com_cosmos72_gomacro_ast2)(nil)).Elem(), + "AstWithSlice": r.TypeOf((*AstWithSlice_github_com_cosmos72_gomacro_ast2)(nil)).Elem(), + }} +} + +// --------------- proxy for github.com/cosmos72/gomacro/ast2.Ast --------------- +type Ast_github_com_cosmos72_gomacro_ast2 struct { + Object interface{} + Get_ func(i int) Ast + Interface_ func() interface{} + New_ func() Ast + Op_ func() token.Token + Set_ func(i int, child Ast) + Size_ func() int +} + +func (Proxy *Ast_github_com_cosmos72_gomacro_ast2) Get(i int) Ast { + return Proxy.Get_(i) +} +func (Proxy *Ast_github_com_cosmos72_gomacro_ast2) Interface() interface{} { + return Proxy.Interface_() +} +func (Proxy *Ast_github_com_cosmos72_gomacro_ast2) New() Ast { + return Proxy.New_() +} +func (Proxy *Ast_github_com_cosmos72_gomacro_ast2) Op() token.Token { + return Proxy.Op_() +} +func (Proxy *Ast_github_com_cosmos72_gomacro_ast2) Set(i int, child Ast) { + Proxy.Set_(i, child) +} +func (Proxy *Ast_github_com_cosmos72_gomacro_ast2) Size() int { + return Proxy.Size_() +} + +// --------------- proxy for github.com/cosmos72/gomacro/ast2.AstWithNode --------------- +type AstWithNode_github_com_cosmos72_gomacro_ast2 struct { + Object interface{} + Get_ func(i int) Ast + Interface_ func() interface{} + New_ func() Ast + Node_ func() ast.Node + Op_ func() token.Token + Set_ func(i int, child Ast) + Size_ func() int +} + +func (Proxy *AstWithNode_github_com_cosmos72_gomacro_ast2) Get(i int) Ast { + return Proxy.Get_(i) +} +func (Proxy *AstWithNode_github_com_cosmos72_gomacro_ast2) Interface() interface{} { + return Proxy.Interface_() +} +func (Proxy *AstWithNode_github_com_cosmos72_gomacro_ast2) New() Ast { + return Proxy.New_() +} +func (Proxy *AstWithNode_github_com_cosmos72_gomacro_ast2) Node() ast.Node { + return Proxy.Node_() +} +func (Proxy *AstWithNode_github_com_cosmos72_gomacro_ast2) Op() token.Token { + return Proxy.Op_() +} +func (Proxy *AstWithNode_github_com_cosmos72_gomacro_ast2) Set(i int, child Ast) { + Proxy.Set_(i, child) +} +func (Proxy *AstWithNode_github_com_cosmos72_gomacro_ast2) Size() int { + return Proxy.Size_() +} + +// --------------- proxy for github.com/cosmos72/gomacro/ast2.AstWithSlice --------------- +type AstWithSlice_github_com_cosmos72_gomacro_ast2 struct { + Object interface{} + Append_ func(child Ast) AstWithSlice + Get_ func(i int) Ast + Interface_ func() interface{} + New_ func() Ast + Op_ func() token.Token + Set_ func(i int, child Ast) + Size_ func() int + Slice_ func(lo int, hi int) AstWithSlice +} + +func (Proxy *AstWithSlice_github_com_cosmos72_gomacro_ast2) Append(child Ast) AstWithSlice { + return Proxy.Append_(child) +} +func (Proxy *AstWithSlice_github_com_cosmos72_gomacro_ast2) Get(i int) Ast { + return Proxy.Get_(i) +} +func (Proxy *AstWithSlice_github_com_cosmos72_gomacro_ast2) Interface() interface{} { + return Proxy.Interface_() +} +func (Proxy *AstWithSlice_github_com_cosmos72_gomacro_ast2) New() Ast { + return Proxy.New_() +} +func (Proxy *AstWithSlice_github_com_cosmos72_gomacro_ast2) Op() token.Token { + return Proxy.Op_() +} +func (Proxy *AstWithSlice_github_com_cosmos72_gomacro_ast2) Set(i int, child Ast) { + Proxy.Set_(i, child) +} +func (Proxy *AstWithSlice_github_com_cosmos72_gomacro_ast2) Size() int { + return Proxy.Size_() +} +func (Proxy *AstWithSlice_github_com_cosmos72_gomacro_ast2) Slice(lo int, hi int) AstWithSlice { + return Proxy.Slice_(lo, hi) +} diff --git a/vendor/github.com/cosmos72/gomacro/base/constants.go b/vendor/github.com/cosmos72/gomacro/base/constants.go new file mode 100644 index 0000000..4155714 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/constants.go @@ -0,0 +1,115 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * constants.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package base + +import ( + r "reflect" +) + +type none struct{} + +const ( + StrGensymInterface = "\u0080" // name of extra struct field needed by the interpreter when creating interface proxies + StrGensymPrivate = "\u00AD" // prefix to generate names for unexported struct fields + StrGensymEmbedded = "\u00BB" // prefix to generate names for embedded struct fields + StrGensym = "\U000124AD" // prefix to generate names in macros - arbitrarily chosen U+124AD CUNEIFORM SIGN ERIN2 X - reasons: + // * accepted by Go compiler identifier name in source code + // * belongs to an ancient language no longer spoken, so hopefully low collision risk + // * outside Unicode basic place, so hopefully lower collision risk + // * relatively simple glyph picture + + MaxUint16 = ^uint16(0) + MaxUint = ^uint(0) + MinUint = 0 + MaxInt = int(MaxUint >> 1) + MinInt = ^MaxInt +) + +var ( + Nil = r.Value{} + + None = r.ValueOf(none{}) // used to indicate "no value" + + True = r.ValueOf(true) + False = r.ValueOf(false) + + One = r.ValueOf(1) + + TypeOfInt = r.TypeOf(int(0)) + TypeOfInt8 = r.TypeOf(int8(0)) + TypeOfInt16 = r.TypeOf(int16(0)) + TypeOfInt32 = r.TypeOf(int32(0)) + TypeOfInt64 = r.TypeOf(int64(0)) + + TypeOfUint = r.TypeOf(uint(0)) + TypeOfUint8 = r.TypeOf(uint8(0)) + TypeOfUint16 = r.TypeOf(uint16(0)) + TypeOfUint32 = r.TypeOf(uint32(0)) + TypeOfUint64 = r.TypeOf(uint64(0)) + TypeOfUintptr = r.TypeOf(uintptr(0)) + + TypeOfFloat32 = r.TypeOf(float32(0)) + TypeOfFloat64 = r.TypeOf(float64(0)) + TypeOfComplex64 = r.TypeOf(complex64(0)) + TypeOfComplex128 = r.TypeOf(complex128(0)) + + TypeOfBool = r.TypeOf(false) + TypeOfByte = r.TypeOf(byte(0)) + TypeOfRune = r.TypeOf(rune(0)) + TypeOfString = r.TypeOf("") + TypeOfInterface = r.TypeOf((*interface{})(nil)).Elem() + TypeOfError = r.TypeOf((*error)(nil)).Elem() + TypeOfDeferFunc = r.TypeOf(func() {}) + TypeOfReflectType = r.TypeOf((*r.Type)(nil)).Elem() // inception + + TypeOfSliceOfByte = r.TypeOf([]byte{}) + TypeOfSliceOfInterface = r.TypeOf([]interface{}{}) + + TypeOfPtrInt = r.TypeOf((*int)(nil)) + TypeOfPtrInt8 = r.TypeOf((*int8)(nil)) + TypeOfPtrInt16 = r.TypeOf((*int16)(nil)) + TypeOfPtrInt32 = r.TypeOf((*int32)(nil)) + TypeOfPtrInt64 = r.TypeOf((*int64)(nil)) + + TypeOfPtrUint = r.TypeOf((*uint)(nil)) + TypeOfPtrUint8 = r.TypeOf((*uint8)(nil)) + TypeOfPtrUint16 = r.TypeOf((*uint16)(nil)) + TypeOfPtrUint32 = r.TypeOf((*uint32)(nil)) + TypeOfPtrUint64 = r.TypeOf((*uint64)(nil)) + TypeOfPtrUintptr = r.TypeOf((*uintptr)(nil)) + + TypeOfPtrFloat32 = r.TypeOf((*float32)(nil)) + TypeOfPtrFloat64 = r.TypeOf((*float64)(nil)) + TypeOfPtrComplex64 = r.TypeOf((*complex64)(nil)) + TypeOfPtrComplex128 = r.TypeOf((*complex128)(nil)) + + TypeOfPtrBool = r.TypeOf((*bool)(nil)) + TypeOfPtrString = r.TypeOf((*string)(nil)) + + ZeroStrings = []string{} + ZeroTypes = []r.Type{} + ZeroValues = []r.Value{} +) diff --git a/vendor/github.com/cosmos72/gomacro/base/genimport.go b/vendor/github.com/cosmos72/gomacro/base/genimport.go new file mode 100644 index 0000000..e94e8dc --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/genimport.go @@ -0,0 +1,350 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * import_wrappers.go + * + * Created on May 26, 2017 + * Author Massimiliano Ghilardi + */ + +package base + +import ( + "bytes" + "fmt" + "go/constant" + "go/types" + "math" + "strconv" + "strings" +) + +type genimport struct { + globals *Globals + mode ImportMode + gpkg *types.Package + scope *types.Scope + names []string + out *bytes.Buffer + path string + name, name_ string + suffix string + reflect string +} + +func (g *Globals) writeImportFile(out *bytes.Buffer, path string, gpkg *types.Package, mode ImportMode) (isEmpty bool) { + + gen := g.newGenImport(out, path, gpkg, mode) + if gen == nil { + return true + } + gen.write() + return false +} + +func (g *Globals) newGenImport(out *bytes.Buffer, path string, gpkg *types.Package, mode ImportMode) *genimport { + scope := gpkg.Scope() + names := scope.Names() + + isEmpty := true + for _, name := range names { + if obj := scope.Lookup(name); obj.Exported() { + switch obj.(type) { + case *types.Const, *types.Var, *types.Func, *types.TypeName: + isEmpty = false + break + } + } + } + if isEmpty { + return nil + } + + gen := &genimport{globals: g, mode: mode, gpkg: gpkg, scope: scope, names: names, out: out, path: path} + + name := path[1+strings.LastIndexByte(path, '/'):] + name = sanitizeIdentifier(name) + gen.name = name + + if mode == ImInception { + gen.reflect = "r." + } else { + gen.name_ = name + "." + } + if mode != ImSharedLib { + gen.suffix = fmt.Sprintf("_%s", sanitizeIdentifier(path)) + } + return gen +} + +func (gen *genimport) write() { + + gen.writePreamble() + + gen.writeBinds() + gen.writeTypes() + gen.writeProxies() + gen.writeUntypeds() + gen.writeWrappers() + + if gen.mode == ImBuiltin { + gen.out.WriteString("\n\t}\n}\n") + } else { + gen.out.WriteString("\n}\n") + } + gen.writeInterfaceProxies() +} + +type mapdecl struct { + out *bytes.Buffer + head string + foot string +} + +func (gen *genimport) mapdecl(head, althead string) mapdecl { + var foot string + if gen.mode == ImSharedLib { + foot = "nil," + } else if strings.IndexByte(althead, '%') < 0 { + head = althead + } else { + head = fmt.Sprintf(althead, gen.reflect) + } + return mapdecl{gen.out, head, foot} +} + +func (d *mapdecl) header() { + if len(d.head) != 0 { + d.out.WriteString(d.head) + d.out.WriteByte('{') + d.head = "" + d.foot = "\n\t}," + } +} + +func (d *mapdecl) footer() { + if len(d.foot) != 0 { + d.out.WriteString(d.foot) + } +} + +func (gen *genimport) writePreamble() { + mode := gen.mode + out := gen.out + path := gen.path + + var alias, filepkg string + switch mode { + case ImBuiltin: + alias = "_b " + filepkg = "imports" + case ImInception: + alias = "_i " + filepkg = gen.name + default: + filepkg = "main" + } + + fmt.Fprintf(gen.out, `// this file was generated by gomacro command: import %s%q +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package %s + +import (`, alias, path, filepkg) + + var imports string + if mode == ImInception { + fmt.Fprintf(gen.out, "\n\tr \"reflect\"\n\t\"github.com/cosmos72/gomacro/imports\"") + imports = "imports." + } else { + fmt.Fprintf(out, "\n\t. \"reflect\"") + } + for _, str := range gen.globals.CollectPackageImports(gen.gpkg, true) { + if mode != ImInception || str != path { + fmt.Fprintf(out, "\n\t%q", str) + } + } + fmt.Fprintf(out, "\n)\n") + + if mode == ImSharedLib { + fmt.Fprint(out, ` +func main() { +} + +func Exports() (map[string]Value, map[string]Type, map[string]Type, map[string]string, map[string][]string) { + return `) + } else { + fmt.Fprintf(out, ` +// reflection: allow interpreted code to import %q +func init() { + %sPackages[%q] = %sPackage{ + `, path, imports, path, imports) + } +} + +func (gen *genimport) writeBinds() { + d := gen.mapdecl("map[string]Value", "Binds: map[string]%sValue") + + for _, name := range gen.names { + if obj := gen.scope.Lookup(name); obj.Exported() { + switch obj := obj.(type) { + case *types.Const: + val := obj.Val() + var conv1, conv2 string + if t, ok := obj.Type().(*types.Basic); ok && t.Info()&types.IsUntyped != 0 { + // untyped constants have arbitrary precision... they may overflow integers + // this is just an approximation, use Package.Untypeds for exact value + if val.Kind() == constant.Int { + str := val.ExactString() + conv1, conv2 = gen.globals.detectIntKind(gen.path, name, str) + } + } + d.header() + fmt.Fprintf(gen.out, "\n\t\t%q:\t%sValueOf(%s%s%s%s),", name, gen.reflect, conv1, gen.name_, name, conv2) + case *types.Var: + d.header() + fmt.Fprintf(gen.out, "\n\t\t%q:\t%sValueOf(&%s%s).Elem(),", name, gen.reflect, gen.name_, name) + case *types.Func: + d.header() + fmt.Fprintf(gen.out, "\n\t\t%q:\t%sValueOf(%s%s),", name, gen.reflect, gen.name_, name) + } + } + } + d.footer() +} + +func (gen *genimport) writeTypes() { + d := gen.mapdecl("map[string]Type", "Types: map[string]%sType") + + for _, name := range gen.names { + if obj := gen.scope.Lookup(name); obj.Exported() { + switch obj.(type) { + case *types.TypeName: + d.header() + fmt.Fprintf(gen.out, "\n\t\t%q:\t%sTypeOf((*%s%s)(nil)).Elem(),", name, gen.reflect, gen.name_, name) + } + } + } + d.footer() +} + +func (gen *genimport) writeProxies() { + d := gen.mapdecl("map[string]Type", "Proxies: map[string]%sType") + + for _, name := range gen.names { + if obj := gen.scope.Lookup(name); obj.Exported() { + if t := extractInterface(obj, true); t != nil { + d.header() + fmt.Fprintf(gen.out, "\n\t\t%q:\t%sTypeOf((*%s%s)(nil)).Elem(),", name, gen.reflect, name, gen.suffix) + } + } + } + d.footer() +} + +func (gen *genimport) writeUntypeds() { + d := gen.mapdecl("map[string]string", "Untypeds: map[string]string") + + for _, name := range gen.names { + if obj := gen.scope.Lookup(name); obj.Exported() { + switch obj := obj.(type) { + case *types.Const: + if t, ok := obj.Type().(*types.Basic); ok && t.Info()&types.IsUntyped != 0 { + str := MarshalUntyped(t.Kind(), obj.Val()) + if len(str) != 0 { + d.header() + fmt.Fprintf(gen.out, "\n\t\t%q:\t%q,", name, str) + } + } + } + } + } + d.footer() +} + +func (gen *genimport) writeWrappers() { + d := gen.mapdecl("map[string][]string", "Wrappers: map[string][]string") + + for _, name := range gen.names { + if obj := gen.scope.Lookup(name); obj.Exported() { + switch obj.(type) { + case *types.TypeName: + if t, ok := obj.Type().(*types.Named); ok { + // only structs can have embedded fields, and thus wrapper methods for embedded fields + if _, ok := t.Underlying().(*types.Struct); ok { + wrappers := new(analyzer).Analyze(t) + if len(wrappers) != 0 { + d.header() + fmt.Fprintf(gen.out, "\n\t\t%q:\t[]string{", obj.Name()) + for _, wrapper := range wrappers { + fmt.Fprintf(gen.out, "%q,", wrapper) + } + fmt.Fprint(gen.out, "},") + } + } + } + } + } + } + d.footer() +} + +func (gen *genimport) writeInterfaceProxies() { + path := gen.gpkg.Path() + for _, name := range gen.names { + obj := gen.scope.Lookup(name) + if t := extractInterface(obj, true); t != nil { + writeInterfaceProxy(gen.out, path, gen.suffix, name, t) + } + } +} + +func (g *Globals) detectIntKind(path, name, str string) (string, string) { + i, err := strconv.ParseInt(str, 0, 64) + if err == nil { + if i == int64(int32(i)) { + // constant fits int32. We can use the default (i.e. int) + // on both 32-bit and 64-bit platforms + return "", "" + } else if i == int64(uint32(i)) { + // constant fits uint32 + return "uint32(", ")" + } else { + return "int64(", ")" + } + } + _, err = strconv.ParseUint(str, 0, 64) + if err == nil { + return "uint64(", ")" + } + f, err := strconv.ParseFloat(str, 64) + if err != nil { + // nothing fits... leave the default + return "", "" + } else { + prefix := "float64" + f = math.Abs(f) + if f == float64(float32(f)) && f <= math.MaxFloat32 && f >= math.SmallestNonzeroFloat32 { + // float32 loses no precision vs. float64 + prefix = "float32" + } + g.Warnf("package %q: integer constant %s = %s overflows both int64 and uint64, converting to %s", path, name, str, prefix) + return prefix + "(", ")" + } +} diff --git a/vendor/github.com/cosmos72/gomacro/base/genimport_proxy.go b/vendor/github.com/cosmos72/gomacro/base/genimport_proxy.go new file mode 100644 index 0000000..38768a0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/genimport_proxy.go @@ -0,0 +1,153 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * genimport_proxy.go + * + * Created on Mar 06, 2017 + * Author Massimiliano Ghilardi + */ + +package base + +import ( + "bytes" + "fmt" + "go/types" + "strings" +) + +type writeTypeOpts int + +const ( + writeMethodsAsFields writeTypeOpts = 1 << iota + writeForceParamNames + writeIncludeParamTypes +) + +func writeInterfaceProxy(out *bytes.Buffer, pkgPath string, pkgSuffix string, name string, t *types.Interface) { + fmt.Fprintf(out, "\n// --------------- proxy for %s.%s ---------------\ntype %s%s struct {", pkgPath, name, name, pkgSuffix) + writeInterfaceMethods(out, pkgSuffix, name, t, writeMethodsAsFields) + out.WriteString("\n}\n") + writeInterfaceMethods(out, pkgSuffix, name, t, writeForceParamNames) +} + +func writeInterfaceMethods(out *bytes.Buffer, pkgSuffix string, name string, t *types.Interface, opts writeTypeOpts) { + if opts&writeMethodsAsFields != 0 { + fmt.Fprint(out, "\n\tObject\tinterface{}") // will be used to retrieve object wrapped in the proxy + } + n := t.NumMethods() + for i := 0; i < n; i++ { + writeInterfaceMethod(out, pkgSuffix, name, t.Method(i), opts) + } +} + +func writeInterfaceMethod(out *bytes.Buffer, pkgSuffix string, interfaceName string, method *types.Func, opts writeTypeOpts) { + if !method.Exported() { + return + } + sig, ok := method.Type().(*types.Signature) + if !ok { + return + } + params := sig.Params() + if opts&writeMethodsAsFields != 0 { + var param0 string + if opts&writeForceParamNames != 0 || isNamedTypeTuple(params) { + param0 = "_proxy_obj_ " + } + fmt.Fprintf(out, "\n\t%s_\tfunc(%sinterface{}", method.Name(), param0) + if params != nil && params.Len() != 0 { + out.WriteString(", ") + } + } else { + fmt.Fprintf(out, "func (Proxy *%s%s) %s(", interfaceName, pkgSuffix, method.Name()) + } + results := sig.Results() + writeTypeTuple(out, params, opts|writeIncludeParamTypes) + out.WriteString(") ") + writeTypeTupleOut(out, results) + if opts&writeMethodsAsFields != 0 { + return + } + out.WriteString(" {\n\t") + if results != nil && results.Len() > 0 { + out.WriteString("return ") + } + fmt.Fprintf(out, "Proxy.%s_(Proxy.Object", method.Name()) + if params != nil && params.Len() != 0 { + out.WriteString(", ") + } + writeTypeTuple(out, params, writeForceParamNames) + out.WriteString(")\n}\n") +} + +func isNamedTypeTuple(tuple *types.Tuple) bool { + if tuple == nil || tuple.Len() == 0 { + return false + } + for i, n := 0, tuple.Len(); i < n; i++ { + if len(tuple.At(i).Name()) != 0 { + return true + } + } + return false +} + +func writeTypeTupleOut(out *bytes.Buffer, tuple *types.Tuple) { + if tuple == nil || tuple.Len() == 0 { + return + } + ret0 := tuple.At(0) + if tuple.Len() > 1 || len(ret0.Name()) > 0 { + out.WriteString("(") + writeTypeTuple(out, tuple, writeIncludeParamTypes) + out.WriteString(")") + } else { + types.WriteType(out, ret0.Type(), packageNameQualifier) + } +} + +func writeTypeTuple(out *bytes.Buffer, tuple *types.Tuple, opts writeTypeOpts) { + n := tuple.Len() + for i := 0; i < n; i++ { + if i != 0 { + out.WriteString(", ") + } + writeTypeVar(out, tuple.At(i), i, opts) + } +} + +func writeTypeVar(out *bytes.Buffer, v *types.Var, index int, opts writeTypeOpts) { + name := v.Name() + if len(name) == 0 && opts&writeForceParamNames != 0 { + name = fmt.Sprintf("unnamed%d", index) + } + out.WriteString(name) + if opts&writeIncludeParamTypes != 0 { + if len(name) != 0 { + out.WriteString(" ") + } + types.WriteType(out, v.Type(), packageNameQualifier) + } +} + +func packageNameQualifier(pkg *types.Package) string { + path := pkg.Path() + return path[1+strings.LastIndexByte(path, '/'):] +} diff --git a/vendor/github.com/cosmos72/gomacro/base/genimport_untyped.go b/vendor/github.com/cosmos72/gomacro/base/genimport_untyped.go new file mode 100644 index 0000000..9727ff6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/genimport_untyped.go @@ -0,0 +1,119 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * genimport_untyped.go + * + * Created on May 27, 2017 + * Author Massimiliano Ghilardi + */ + +package base + +import ( + "fmt" + "go/constant" + "go/token" + "go/types" + "strings" +) + +func MarshalUntyped(kind types.BasicKind, val constant.Value) string { + // untyped constants have arbitrary precision... they may overflow integers + switch kind { + case types.UntypedBool: + if constant.BoolVal(val) { + return "bool:true" + } else { + return "bool:false" + } + case types.UntypedInt: + return fmt.Sprintf("int:%s", val.ExactString()) + case types.UntypedRune: + return fmt.Sprintf("rune:%s", val.ExactString()) + case types.UntypedFloat: + return fmt.Sprintf("float:%s", val.ExactString()) + case types.UntypedComplex: + return fmt.Sprintf("complex:%s:%s", constant.Real(val).ExactString(), constant.Imag(val).ExactString()) + case types.UntypedString: + return fmt.Sprintf("string:%s", constant.StringVal(val)) + case types.UntypedNil: + return "nil" + default: + return "" + } +} + +func UnmarshalUntyped(marshalled string) (types.BasicKind, constant.Value) { + var skind, str string + if sep := strings.IndexByte(marshalled, ':'); sep >= 0 { + skind = marshalled[:sep] + str = marshalled[sep+1:] + } else { + skind = marshalled + } + + var kind types.BasicKind + var val constant.Value + switch skind { + case "bool": + kind = types.UntypedBool + if str == "true" { + val = constant.MakeBool(true) + } else { + val = constant.MakeBool(false) + } + case "int": + kind = types.UntypedInt + val = constant.MakeFromLiteral(str, token.INT, 0) + case "rune": + kind = types.UntypedRune + val = constant.MakeFromLiteral(str, token.INT, 0) + case "float": + kind = types.UntypedFloat + val = unmarshalUntypedFloat(str) + case "complex": + kind = types.UntypedComplex + if sep := strings.IndexByte(str, ':'); sep >= 0 { + re := unmarshalUntypedFloat(str[:sep]) + im := unmarshalUntypedFloat(str[sep+1:]) + val = constant.BinaryOp(constant.ToComplex(re), token.ADD, constant.MakeImag(im)) + } else { + val = constant.ToComplex(unmarshalUntypedFloat(str)) + } + case "string": + kind = types.UntypedString + val = constant.MakeString(str) + case "nil": + kind = types.UntypedNil + default: + kind = types.Invalid + } + return kind, val +} + +// generalization of constant.MakeFromLiteral, accepts the fractions generated by +// constant.Value.ExactString() for floating-point values +func unmarshalUntypedFloat(str string) constant.Value { + if sep := strings.IndexByte(str, '/'); sep >= 0 { + x := constant.MakeFromLiteral(str[:sep], token.FLOAT, 0) + y := constant.MakeFromLiteral(str[sep+1:], token.FLOAT, 0) + return constant.BinaryOp(x, token.QUO, y) + } + return constant.MakeFromLiteral(str, token.FLOAT, 0) +} diff --git a/vendor/github.com/cosmos72/gomacro/base/genimport_wrapper.go b/vendor/github.com/cosmos72/gomacro/base/genimport_wrapper.go new file mode 100644 index 0000000..671f145 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/genimport_wrapper.go @@ -0,0 +1,86 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * genimport_wrapper.go + * + * Created on May 26, 2017 + * Author Massimiliano Ghilardi + */ + +package base + +import ( + "go/types" + "sort" +) + +// analyzer examines all methods of a named type and its embedded fields, +// and determines the wrapper methods for embedded fields. +type analyzer map[string][]int + +func (a *analyzer) add(mtd *types.Func, depth int) { + if *a == nil { + (*a) = make(map[string][]int) + } + name := mtd.Name() + (*a)[name] = append((*a)[name], depth) +} + +func (a *analyzer) Analyze(t *types.Named) []string { + a.analyze(t, 0) + return a.wrappers() +} + +func (a *analyzer) analyze(t *types.Named, depth int) { + for i, n := 0, t.NumMethods(); i < n; i++ { + mtd := t.Method(i) + if mtd.Exported() { + a.add(mtd, depth) + } + } + + if u, ok := t.Underlying().(*types.Struct); ok { + for i, n := 0, u.NumFields(); i < n; i++ { + if f := u.Field(i); f.Anonymous() { + switch ft := f.Type().(type) { + case *types.Named: + a.analyze(ft, depth+1) + case *types.Pointer: + if ft, ok := ft.Elem().(*types.Named); ok { + a.analyze(ft, depth+1) + } + } + } + } + } +} + +// listWrappers returns the names of wrapper methods for an analyzed type +func (a *analyzer) wrappers() []string { + var wrappers []string + for name, depths := range *a { + if depths[0] == 0 { + // explicit method declared in the outermost type. no ambiguity + continue + } + wrappers = append(wrappers, name) + } + sort.Strings(wrappers) + return wrappers +} diff --git a/vendor/github.com/cosmos72/gomacro/base/global.go b/vendor/github.com/cosmos72/gomacro/base/global.go new file mode 100644 index 0000000..2c8085a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/global.go @@ -0,0 +1,279 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * global.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package base + +import ( + "fmt" + "go/ast" + "go/token" + "io" + "os" + r "reflect" + "strings" + + mp "github.com/cosmos72/gomacro/parser" + mt "github.com/cosmos72/gomacro/token" + + . "github.com/cosmos72/gomacro/ast2" +) + +type Globals struct { + Output + Options Options + PackagePath string + Filename string + GensymN uint + Importer *Importer + Imports []*ast.GenDecl + Declarations []ast.Decl + Statements []ast.Stmt + ParserMode mp.Mode + SpecialChar rune +} + +func (g *Globals) Init() { + g.Output = Output{ + Stringer: Stringer{ + Fileset: mt.NewFileSet(), + NamedTypes: make(map[r.Type]string), + }, + // using both os.Stdout and os.Stderr can interleave impredictably + // normal output and diagnostic messages - ugly in interactive use + Stdout: os.Stdout, + Stderr: os.Stdout, + } + g.Options = OptTrapPanic // set by default + g.PackagePath = "main" + g.Filename = "repl.go" + g.GensymN = 0 + g.Importer = DefaultImporter() + g.Imports = nil + g.Declarations = nil + g.Statements = nil + g.ParserMode = 0 + g.SpecialChar = '~' +} + +func NewGlobals() *Globals { + g := &Globals{} + g.Init() + return g +} + +func (g *Globals) Gensym() string { + n := g.GensymN + g.GensymN++ + return fmt.Sprintf("%s%d", StrGensym, n) +} + +func (g *Globals) GensymEmbedded(name string) string { + if len(name) == 0 { + n := g.GensymN + g.GensymN++ + name = fmt.Sprintf("%d", n) + } + return StrGensymEmbedded + name +} + +func (g *Globals) GensymPrivate(name string) string { + if len(name) == 0 { + n := g.GensymN + g.GensymN++ + name = fmt.Sprintf("%d", n) + } + return StrGensymPrivate + name +} + +func IsGensym(name string) bool { + return strings.HasPrefix(name, StrGensym) +} + +func IsGensymInterface(name string) bool { + return name == StrGensymInterface +} + +func IsGensymEmbedded(name string) bool { + return strings.HasPrefix(name, StrGensymEmbedded) +} + +func IsGensymPrivate(name string) bool { + return strings.HasPrefix(name, StrGensymPrivate) +} + +// parse phase. no macroexpansion. +func (g *Globals) ParseBytes(src []byte) []ast.Node { + var parser mp.Parser + + mode := g.ParserMode + if g.Options&OptDebugParse != 0 { + mode |= mp.Trace + } else { + mode &^= mp.Trace + } + parser.Configure(mode, g.SpecialChar) + parser.Init(g.Fileset, g.Filename, g.Line, src) + + nodes, err := parser.Parse() + if err != nil { + Error(err) + return nil + } + return nodes +} + +// CollectAst accumulates declarations in ir.Decls and statements in ir.Stmts +// allows generating a *.go file on user request +func (g *Globals) CollectAst(form Ast) { + if g.Options&(OptCollectDeclarations|OptCollectStatements) == 0 { + return + } + + switch form := form.(type) { + case AstWithNode: + g.CollectNode(form.Node()) + case AstWithSlice: + n := form.Size() + for i := 0; i < n; i++ { + g.CollectAst(form.Get(i)) + } + } +} + +func (g *Globals) CollectNode(node ast.Node) { + collectDecl := g.Options&OptCollectDeclarations != 0 + collectStmt := g.Options&OptCollectStatements != 0 + + switch node := node.(type) { + case *ast.GenDecl: + if collectDecl { + switch node.Tok { + case token.IMPORT: + g.Imports = append(g.Imports, node) + case token.PACKAGE: // exception: modified parser parses "package foo" as a declaration + if len(node.Specs) == 1 { + if spec, ok := node.Specs[0].(*ast.ValueSpec); ok && len(spec.Names) == 1 { + g.PackagePath = spec.Names[0].Name + break + } + } + fallthrough + default: + g.Declarations = append(g.Declarations, node) + } + } + case *ast.FuncDecl: + if collectDecl { + if node.Recv == nil || len(node.Recv.List) != 0 { + // function or method declaration. + // skip macro declarations, Go compilers would choke on them + g.Declarations = append(g.Declarations, node) + } + } + case ast.Decl: + if collectDecl { + g.Declarations = append(g.Declarations, node) + } + case *ast.AssignStmt: + if node.Tok == token.DEFINE { + if collectDecl { + idents := make([]*ast.Ident, len(node.Lhs)) + for i, lhs := range node.Lhs { + idents[i] = lhs.(*ast.Ident) + } + decl := &ast.GenDecl{ + TokPos: node.Pos(), + Tok: token.VAR, + Specs: []ast.Spec{ + &ast.ValueSpec{ + Names: idents, + Type: nil, + Values: node.Rhs, + }, + }, + } + g.Declarations = append(g.Declarations, decl) + } + } else { + if collectStmt { + g.Statements = append(g.Statements, node) + } + } + case ast.Stmt: + if collectStmt { + g.Statements = append(g.Statements, node) + } + case ast.Expr: + if unary, ok := node.(*ast.UnaryExpr); ok && collectDecl { + if unary.Op == token.PACKAGE && unary.X != nil { + if ident, ok := unary.X.(*ast.Ident); ok { + g.PackagePath = ident.Name + break + } + } + } + if collectStmt { + stmt := &ast.ExprStmt{X: node} + g.Statements = append(g.Statements, stmt) + } + } +} + +func (g *Globals) WriteDeclsToFile(filename string, prologue ...string) { + f, err := os.Create(filename) + if err != nil { + g.Errorf("failed to create file %q: %v", filename, err) + } + defer f.Close() + for _, str := range prologue { + f.WriteString(str) + } + g.WriteDeclsToStream(f) +} + +func (g *Globals) WriteDeclsToStream(out io.Writer) { + fmt.Fprintf(out, "package %s\n\n", g.PackagePath) + + for _, imp := range g.Imports { + fmt.Fprintln(out, g.toPrintable("%v", imp)) + } + if len(g.Imports) != 0 { + fmt.Fprintln(out) + } + for _, decl := range g.Declarations { + fmt.Fprintln(out, g.toPrintable("%v", decl)) + } + if len(g.Statements) != 0 { + fmt.Fprint(out, "\nfunc init() {\n") + config.Indent = 1 + defer func() { + config.Indent = 0 + }() + for _, stmt := range g.Statements { + fmt.Fprintln(out, g.toPrintable("%v", stmt)) + } + fmt.Fprint(out, "}\n") + } +} diff --git a/vendor/github.com/cosmos72/gomacro/base/import_scanner.go b/vendor/github.com/cosmos72/gomacro/base/import_scanner.go new file mode 100644 index 0000000..bd95cf2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/import_scanner.go @@ -0,0 +1,211 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * import_scanner.go + * + * Created on Mar 06, 2017 + * Author Massimiliano Ghilardi + */ + +package base + +import ( + "fmt" + "go/types" + r "reflect" + "sort" +) + +type TypeVisitor func(name string, t types.Type) bool + +// implemented by *types.Pointer, *types.Array, *types.Slice, *types.Chan +type typeWithElem interface { + Elem() types.Type +} + +var depth int = 0 + +func (o *Output) trace(msg ...interface{}) { + const dots = ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " + const n = len(dots) + i := 2 * depth + for i > n { + fmt.Fprint(o.Stdout, dots) + i -= n + } + // i <= n + fmt.Fprint(o.Stdout, dots[0:i]) + fmt.Fprintln(o.Stdout, msg...) +} + +func trace(o *Output, caller string, name string, x interface{}) *Output { + o.trace(caller, "(", name, x) + depth++ + return o +} + +func un(o *Output) { + depth-- + o.trace(")") +} + +func (o *Output) traverseType(name string, in types.Type, visitor TypeVisitor) { + for { + // defer un(trace(o, "traverseType", name, r.TypeOf(in))) + + if !visitor(name, in) { + return + } + switch t := in.(type) { + case *types.Basic: + break + case *types.Named: + u := t.Underlying() + if in != u { + name = t.Obj().Name() + in = u + continue + } + case *types.Signature: + if recv := t.Recv(); recv != nil { + u := recv.Type() + // the receiver is often the interface containing this signature... + // avoid infinite recursion! + if in != u { + if _, ok := u.(*types.Interface); !ok { + o.traverseType(recv.Name(), u, visitor) + } + } + } + tuples := []*types.Tuple{t.Params(), t.Results()} + for _, tuple := range tuples { + n := tuple.Len() + for i := 0; i < n; i++ { + v := tuple.At(i) + o.traverseType(v.Name(), v.Type(), visitor) + } + } + case *types.Interface: + n := t.NumMethods() + for i := 0; i < n; i++ { + method := t.Method(i) + o.traverseType(method.Name(), method.Type(), visitor) + } + case *types.Struct: + n := t.NumFields() + for i := 0; i < n; i++ { + field := t.Field(i) + o.traverseType(field.Name(), field.Type(), visitor) + } + case *types.Map: + o.traverseType("", t.Key(), visitor) + name = "" + in = t.Elem() + continue + case typeWithElem: // *types.Pointer, *types.Array, *types.Slice, *types.Chan + name = "" + in = t.Elem() + continue + default: + o.Warnf("traverseType: unimplemented %#v <%v>", t, r.TypeOf(t)) + } + break + } +} + +type importExtractor struct { + imports map[string]bool + seen map[types.Type]bool + o *Output +} + +func (ie *importExtractor) visitPackage(pkg *types.Package, requireAllInterfaceMethodsExported bool) { + scope := pkg.Scope() + for _, name := range scope.Names() { + obj := scope.Lookup(name) + t := extractInterface(obj, requireAllInterfaceMethodsExported) + if t != nil { + ie.o.traverseType("", t, ie.visitType) + } + } +} + +func (ie *importExtractor) visitType(name string, t types.Type) bool { + if ie.seen[t] { + return false + } + switch t := t.(type) { + case *types.Named: + if obj := t.Obj(); obj != nil { + if pkg := obj.Pkg(); pkg != nil { + ie.imports[pkg.Path()] = true + } + } + // no need to visit the definition of a named type + return false + default: + return true + } +} + +func extractInterface(obj types.Object, requireAllMethodsExported bool) *types.Interface { + if obj == nil || !obj.Exported() { + return nil + } + switch obj.(type) { + case *types.TypeName: + u := obj.Type().Underlying() + if u, ok := u.(*types.Interface); ok { + if !requireAllMethodsExported || allMethodsExported(u) { + return u + } + } + } + return nil +} + +func allMethodsExported(intf *types.Interface) bool { + n := intf.NumMethods() + for i := 0; i < n; i++ { + if !intf.Method(i).Exported() { + return false + } + } + return true +} + +// we need to collect only the imports that actually appear in package's interfaces methods +// because Go rejects programs with unused imports +func (o *Output) CollectPackageImports(pkg *types.Package, requireAllInterfaceMethodsExported bool) []string { + ie := importExtractor{ + // we always need to import the package itself + imports: map[string]bool{pkg.Path(): true}, + o: o, + } + ie.visitPackage(pkg, requireAllInterfaceMethodsExported) + + strings := make([]string, len(ie.imports)) + i := 0 + for str := range ie.imports { + strings[i] = str + i++ + } + sort.Strings(strings) + return strings +} diff --git a/vendor/github.com/cosmos72/gomacro/base/importer.go b/vendor/github.com/cosmos72/gomacro/base/importer.go new file mode 100644 index 0000000..6cbfca8 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/importer.go @@ -0,0 +1,191 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * importer.go + * + * Created on Feb 27, 2017 + * Author Massimiliano Ghilardi + */ + +package base + +import ( + "bytes" + "errors" + "fmt" + "go/importer" + "go/types" + "io/ioutil" + "os" + r "reflect" + "strings" + + "github.com/cosmos72/gomacro/imports" +) + +type ImportMode int + +const ( + ImSharedLib ImportMode = iota + ImBuiltin + ImInception +) + +type Importer struct { + from types.ImporterFrom + compat types.Importer + srcDir string + mode types.ImportMode +} + +func DefaultImporter() *Importer { + imp := Importer{} + compat := importer.Default() + if from, ok := compat.(types.ImporterFrom); ok { + imp.from = from + } else { + imp.compat = compat + } + return &imp +} + +func (imp *Importer) Import(path string) (*types.Package, error) { + return imp.ImportFrom(path, imp.srcDir, imp.mode) +} + +func (imp *Importer) ImportFrom(path string, srcDir string, mode types.ImportMode) (*types.Package, error) { + if imp.from != nil { + return imp.from.ImportFrom(path, srcDir, mode) + } else if imp.compat != nil { + return imp.compat.Import(path) + } else { + return nil, errors.New(fmt.Sprintf("importer.Default() returned nil, cannot import %q", path)) + } +} + +// LookupPackage returns a package if already present in cache +func (g *Globals) LookupPackage(name, path string) *PackageRef { + pkg, found := imports.Packages[path] + if !found { + return nil + } + return &PackageRef{Package: pkg, Name: name, Path: path} +} + +func (g *Globals) ImportPackage(name, path string) *PackageRef { + ref := g.LookupPackage(name, path) + if ref != nil { + return ref + } + gpkg, err := g.Importer.Import(path) // loads names and types, not the values! + if err != nil { + g.Errorf("error loading package %q metadata, maybe you need to download (go get), compile (go build) and install (go install) it? %v", path, err) + } + var mode ImportMode + switch name { + case "_b": + mode = ImBuiltin + case "_i": + mode = ImInception + } + file := g.createImportFile(path, gpkg, mode) + if mode != ImSharedLib { + return nil + } + ref = &PackageRef{Name: name, Path: path} + if len(file) == 0 { + // empty package. still cache it for future use. + imports.Packages[path] = ref.Package + return ref + } + soname := g.compilePlugin(file, g.Stdout, g.Stderr) + ifun := g.loadPlugin(soname, "Exports") + fun := ifun.(func() (map[string]r.Value, map[string]r.Type, map[string]r.Type, map[string]string, map[string][]string)) + binds, types, proxies, untypeds, wrappers := fun() + + // done. cache package for future use. + ref.Package = imports.Package{ + Binds: binds, + Types: types, + Proxies: proxies, + Untypeds: untypeds, + Wrappers: wrappers, + } + imports.Packages[path] = ref.Package + return ref +} + +func (g *Globals) createImportFile(path string, pkg *types.Package, mode ImportMode) string { + buf := bytes.Buffer{} + isEmpty := g.writeImportFile(&buf, path, pkg, mode) + if isEmpty { + g.Warnf("package %q exports zero constants, functions, types and variables", path) + return "" + } + + file := computeImportFilename(path, mode) + err := ioutil.WriteFile(file, buf.Bytes(), os.FileMode(0666)) + if err != nil { + g.Errorf("error writing file %q: %v", file, err) + } + if mode != ImSharedLib { + g.Warnf("created file %q, recompile gomacro to use it", file) + } else { + g.Debugf("created file %q...", file) + } + return file +} + +func sanitizeIdentifier(str string) string { + return sanitizeIdentifier2(str, '_') +} + +func sanitizeIdentifier2(str string, replacement rune) string { + runes := []rune(str) + for i, ch := range runes { + if (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || ch == '_' || + (i != 0 && ch >= '0' && ch <= '9') { + continue + } + runes[i] = replacement + } + return string(runes) +} + +const gomacro_dir = "github.com/cosmos72/gomacro" + +func computeImportFilename(path string, mode ImportMode) string { + srcdir := getGoSrcPath() + + switch mode { + case ImBuiltin: + return fmt.Sprintf("%s/%s/imports/%s.go", srcdir, gomacro_dir, sanitizeIdentifier(path)) + case ImInception: + return fmt.Sprintf("%s/%s/x_package.go", srcdir, path) + } + + file := path[1+strings.LastIndexByte(path, '/'):] + file = fmt.Sprintf("%s/gomacro_imports/%s/%s.go", srcdir, path, file) + dir := file[0 : 1+strings.LastIndexByte(file, '/')] + err := os.MkdirAll(dir, 0700) + if err != nil { + Errorf("error creating directory %q: %v", dir, err) + } + return file +} diff --git a/vendor/github.com/cosmos72/gomacro/base/literal.go b/vendor/github.com/cosmos72/gomacro/base/literal.go new file mode 100644 index 0000000..cf5e05f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/literal.go @@ -0,0 +1,120 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * literal.go + * + * Created on Apr 11, 2017 + * Author Massimiliano Ghilardi + */ + +package base + +import ( + r "reflect" +) + +func KindToCategory(k r.Kind) r.Kind { + switch k { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + return r.Int + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + return r.Uint + case r.Float32, r.Float64: + return r.Float64 + case r.Complex64, r.Complex128: + return r.Complex128 + default: + return k + } +} + +func IsCategory(k r.Kind, categories ...r.Kind) bool { + k = KindToCategory(k) + for _, c := range categories { + if k == c { + return true + } + } + return false +} + +// IsOptimizedKind returns true if fast interpreter expects optimized expressions for given Kind +func IsOptimizedKind(k r.Kind) bool { + switch k { + case r.Bool, r.Int, r.Int8, r.Int16, r.Int32, r.Int64, + r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr, + r.Float32, r.Float64, r.Complex64, r.Complex128, r.String: + return true + } + return false +} + +var kindToType = [...]r.Type{ + r.Bool: TypeOfBool, + r.Int: TypeOfInt, + r.Int8: TypeOfInt8, + r.Int16: TypeOfInt16, + r.Int32: TypeOfInt32, + r.Int64: TypeOfInt64, + r.Uint: TypeOfUint, + r.Uint8: TypeOfUint8, + r.Uint16: TypeOfUint16, + r.Uint32: TypeOfUint32, + r.Uint64: TypeOfUint64, + r.Uintptr: TypeOfUintptr, + r.Float32: TypeOfFloat32, + r.Float64: TypeOfFloat64, + r.Complex64: TypeOfComplex64, + r.Complex128: TypeOfComplex128, + r.String: TypeOfString, +} + +func KindToType(k r.Kind) r.Type { + if int(k) < len(kindToType) { + return kindToType[k] + } + return nil +} + +// ConvertValue converts a value to type t and returns the converted value. +// extends reflect.Value.Convert(t) by allowing conversions from/to complex numbers. +// does not check for overflows or truncation. +func ConvertValue(v r.Value, to r.Type) r.Value { + t := ValueType(v) + if t == to { + return v + } + if !t.ConvertibleTo(to) { + // reflect.Value does not allow conversions from/to complex types + k := v.Kind() + kto := to.Kind() + if IsCategory(kto, r.Complex128) { + if IsCategory(k, r.Int, r.Uint, r.Float64) { + temp := v.Convert(TypeOfFloat64).Float() + v = r.ValueOf(complex(temp, 0.0)) + } + } else if IsCategory(k, r.Complex128) { + if IsCategory(k, r.Int, r.Uint, r.Float64) { + temp := real(v.Complex()) + v = r.ValueOf(temp) + } + } + } + return v.Convert(to) +} diff --git a/vendor/github.com/cosmos72/gomacro/base/output.go b/vendor/github.com/cosmos72/gomacro/base/output.go new file mode 100644 index 0000000..5751bcc --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/output.go @@ -0,0 +1,337 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * output.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package base + +import ( + "bytes" + "fmt" + "go/ast" + "go/printer" + "go/token" + "io" + r "reflect" + "strings" + "unsafe" + + . "github.com/cosmos72/gomacro/ast2" + mt "github.com/cosmos72/gomacro/token" +) + +type Stringer struct { + Fileset *mt.FileSet + Pos token.Pos + Line int + NamedTypes map[r.Type]string +} + +type Output struct { + Stringer + Stdout io.Writer + Stderr io.Writer +} + +type RuntimeError struct { + st *Stringer + format string + args []interface{} +} + +func (st *Stringer) Copy(other *Stringer) { + st.Fileset = other.Fileset + st.Pos = other.Pos + st.Line = other.Line +} + +func (err RuntimeError) Error() string { + args := err.args + var prefix string + if st := err.st; st != nil { + args = st.toPrintables(err.format, args) + prefix = st.Position().String() + } + msg := fmt.Sprintf(err.format, args...) + if prefix != "" && prefix != "-" { + msg = fmt.Sprintf("%s: %s", prefix, msg) + } + return msg +} + +func Error(err error) interface{} { + panic(err) +} + +func (o *Output) Error(err error) interface{} { + panic(err) +} + +func Errorf(format string, args ...interface{}) { + panic(RuntimeError{nil, format, args}) +} + +func (st *Stringer) Errorf(format string, args ...interface{}) (r.Value, []r.Value) { + panic(RuntimeError{st, format, args}) +} + +func Warnf(format string, args ...interface{}) { + str := fmt.Sprintf(format, args...) + fmt.Printf("// warning: %s\n", str) +} + +func (o *Output) Warnf(format string, args ...interface{}) { + args = o.toPrintables(format, args) + str := fmt.Sprintf(format, args...) + fmt.Fprintf(o.Stderr, "// warning: %s\n", str) +} + +var warnExtraValues = 5 + +func (o *Output) WarnExtraValues(extraValues []r.Value) { + if warnExtraValues > 0 { + o.Warnf("expression returned %d values, using only the first one: %v", + len(extraValues), extraValues) + warnExtraValues-- + if warnExtraValues == 0 { + o.Warnf("suppressing further similar warnings") + } + } +} + +func Debugf(format string, args ...interface{}) { + str := fmt.Sprintf(format, args...) + fmt.Printf("// debug: %s\n", str) +} + +func (o *Output) Debugf(format string, args ...interface{}) { + args = o.toPrintables(format, args) + str := fmt.Sprintf(format, args...) + fmt.Fprintf(o.Stdout, "// debug: %s\n", str) +} + +func (st *Stringer) IncLine(src string) { + st.Line += strings.Count(src, "\n") +} + +func (st *Stringer) IncLineBytes(src []byte) { + st.Line += bytes.Count(src, []byte("\n")) +} + +func (st *Stringer) Position() token.Position { + if st == nil || st.Fileset == nil { + return token.Position{} + } + return st.Fileset.Position(st.Pos) +} + +var typeOfReflectValue = r.TypeOf(r.Value{}) + +type unsafeType struct { +} + +type unsafeFlag uintptr + +type unsafeValue struct { + typ *unsafeType + ptr unsafe.Pointer + unsafeFlag +} + +func asUnsafeValue(v r.Value) unsafeValue { + return *(*unsafeValue)(unsafe.Pointer(&v)) +} + +func (st *Stringer) Fprintf(out io.Writer, format string, values ...interface{}) (n int, err error) { + values = st.toPrintables(format, values) + return fmt.Fprintf(out, format, values...) +} + +func (st *Stringer) Sprintf(format string, values ...interface{}) string { + values = st.toPrintables(format, values) + return fmt.Sprintf(format, values...) +} + +func (st *Stringer) ToString(separator string, values ...interface{}) string { + if len(values) == 0 { + return "" + } + values = st.toPrintables("", values) + var buf bytes.Buffer + for i, value := range values { + if i != 0 { + buf.WriteString(separator) + } + fmt.Fprint(&buf, value) + } + return buf.String() +} + +func (st *Stringer) toPrintables(format string, values []interface{}) []interface{} { + rets := make([]interface{}, len(values)) + for i, vi := range values { + if percent := strings.IndexByte(format, '%'); percent >= 0 { + format = format[percent:] + } + rets[i] = st.toPrintable(format, vi) + switch len(format) { + case 0: + case 1, 2: + format = "" + default: + format = format[2:] // skip %* + } + } + return rets +} + +func (st *Stringer) toPrintable(format string, value interface{}) (ret interface{}) { + if value == nil { + return nil + } + defer func() { + if rec := recover(); rec != nil { + ret = fmt.Sprintf("error pretty-printing %v", value) + } + }() + + switch v := value.(type) { + case r.Value: + return st.rvalueToPrintable(format, v) + case fmt.Formatter: + return v + case fmt.GoStringer: + if strings.HasPrefix(format, "%#v") { + return v.GoString() + } + } + + usual := len(format) == 0 || strings.HasPrefix(format, "%v") || strings.HasPrefix(format, "%s") + if usual { + switch v := value.(type) { + case AstWithNode: + return st.nodeToPrintable(v.Node()) + case Ast: + return st.toPrintable(format, v.Interface()) + case ast.Node: + return st.nodeToPrintable(v) + case r.Type: + return st.typeToPrintable(v) + case error: + return v.Error() + case fmt.Stringer: + return v.String() + } + } + + v := r.ValueOf(value) + switch k := v.Kind(); k { + case r.Array, r.Slice: + n := v.Len() + values := make([]interface{}, n) + converted := false + for i := 0; i < n; i++ { + vi := v.Index(i) + if vi == Nil { + values[i] = nil + } else if !vi.CanInterface() { + values[i] = vi + } else { + valuei := vi.Interface() + values[i] = st.toPrintable(format, valuei) + converted = converted || !vi.Type().Comparable() || valuei != values[i] + } + } + // return []interface{} only if we actually converted some element + if converted { + return values + } else { + return value + } + case r.Struct: + if usual { + return st.structToPrintable(format, v) + } + case r.Func: + return asUnsafeValue(v).ptr + } + return value +} + +var config = printer.Config{Mode: printer.UseSpaces | printer.TabIndent, Tabwidth: 8} + +func (st *Stringer) nodeToPrintable(node ast.Node) interface{} { + if node == nil { + return nil + } + var fset *mt.FileSet + if st != nil { + fset = st.Fileset + } + if fset == nil { + fset = mt.NewFileSet() + } + var buf bytes.Buffer + err := config.Fprint(&buf, &fset.FileSet, node) + if err != nil { + return err + } + return buf.String() +} + +func (st *Stringer) rvalueToPrintable(format string, value r.Value) interface{} { + if value == None { + return "/*no value*/" + } else if value == Nil { + return nil + } else if value.CanInterface() { + return st.toPrintable(format, value.Interface()) + } else { + return value + } +} + +func (st *Stringer) typeToPrintable(t r.Type) interface{} { + if t == nil { + return "nil" // because fmt.Printf("%v", nil) prints i.e adds extra <> + } + if st != nil { + if name, ok := st.NamedTypes[t]; ok { + return name + } + } + return t +} + +func (st *Stringer) structToPrintable(format string, v r.Value) string { + buf := bytes.Buffer{} + n := v.NumField() + t := v.Type() + ch := '{' + for i := 0; i < n; i++ { + fmt.Fprintf(&buf, "%c%s:%v", ch, t.Field(i).Name, v.Field(i)) + ch = ' ' + } + buf.WriteByte('}') + return buf.String() +} diff --git a/vendor/github.com/cosmos72/gomacro/base/plugin.go b/vendor/github.com/cosmos72/gomacro/base/plugin.go new file mode 100644 index 0000000..b9fd0c6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/plugin.go @@ -0,0 +1,93 @@ +// +build go1.8,linux,!android,!gccgo + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * plugin.go + * + * Created on Feb 27, 2017 + * Author Massimiliano Ghilardi + */ + +package base + +import ( + "fmt" + "io" + "os" + "os/exec" + "plugin" + "strings" +) + +func getGoPath() string { + dir := os.Getenv("GOPATH") + if len(dir) == 0 { + dir = os.Getenv("HOME") + if len(dir) == 0 { + Errorf("cannot determine go source directory: both $GOPATH and $HOME are unset or empty") + } + dir += "/go" + } + return dir +} + +func getGoSrcPath() string { + return getGoPath() + "/src" +} + +func (g *Globals) compilePlugin(filename string, stdout io.Writer, stderr io.Writer) string { + gosrcdir := getGoSrcPath() + gosrclen := len(gosrcdir) + filelen := len(filename) + if filelen < gosrclen || filename[0:gosrclen] != gosrcdir { + g.Errorf("source %q is in unsupported directory, cannot compile it: should be inside %q", filename, gosrcdir) + } + + cmd := exec.Command("go", "build", "-buildmode=plugin") + cmd.Dir = filename[0 : 1+strings.LastIndexByte(filename, '/')] + cmd.Stdin = nil + cmd.Stdout = stdout + cmd.Stderr = stderr + + g.Debugf("compiling %q ...", filename) + err := cmd.Run() + if err != nil { + g.Errorf("error executing \"go build -buildmode=plugin\" in directory %q: %v", cmd.Dir, err) + } + + dirname := filename[:strings.LastIndexByte(filename, '/')] + // go build uses innermost directory name as shared object name, + // i.e. foo/bar/main.go is compiled to foo/bar/bar.so + filename = dirname[1+strings.LastIndexByte(dirname, '/'):] + + return fmt.Sprintf("%s/%s.so", dirname, filename) +} + +func (g *Globals) loadPlugin(soname string, symbolName string) interface{} { + pkg, err := plugin.Open(soname) + if err != nil { + g.Errorf("error loading plugin %q: %v", soname, err) + } + val, err := pkg.Lookup(symbolName) + if err != nil { + g.Errorf("error loading symbol %q from plugin %q: %v", symbolName, soname, err) + } + return val +} diff --git a/vendor/github.com/cosmos72/gomacro/base/plugin_dummy.go b/vendor/github.com/cosmos72/gomacro/base/plugin_dummy.go new file mode 100644 index 0000000..03e944f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/plugin_dummy.go @@ -0,0 +1,51 @@ +// +build !go1.8 !linux android gccgo + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * plugin_dummy.go + * + * Created on Mar 21, 2017 + * Author Massimiliano Ghilardi + */ + +package base + +import ( + "io" + "os" +) + +func getGoPath() string { + return os.Getenv("GOPATH") +} + +func getGoSrcPath() string { + return getGoPath() + "/src" +} + +func (g *Globals) compilePlugin(filename string, stdout io.Writer, stderr io.Writer) string { + g.Errorf("gomacro compiled without support to load plugins - requires Go 1.8+ and Linux - cannot import packages at runtime") + return "" +} + +func (g *Globals) loadPlugin(soname string, symbolName string) interface{} { + g.Errorf("gomacro compiled without support to load plugins - requires Go 1.8+ and Linux - cannot import packages at runtime") + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/base/quasiquote.go b/vendor/github.com/cosmos72/gomacro/base/quasiquote.go new file mode 100644 index 0000000..9134be6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/quasiquote.go @@ -0,0 +1,223 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * quasiquote.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package base + +import ( + "go/ast" + "go/token" + + . "github.com/cosmos72/gomacro/ast2" + mp "github.com/cosmos72/gomacro/parser" + mt "github.com/cosmos72/gomacro/token" +) + +// SimplifyNodeForQuote unwraps ast.BlockStmt, ast.ExprStmt, ast.ParenExpr and ast.DeclStmt +// and returns their contents. +// used to implement classic.Env.evalQuote() and classic.Env.evalQuasiQuote(), be extra careful if you patch it! +func SimplifyNodeForQuote(in ast.Node, unwrapTrivialBlocks bool) ast.Node { + // unwrap expressions... they fit in more places and make the life easier to MacroExpand and evalQuasiquote + // also, if unwrapTrivialBlocks is true, unwrap a single-statement block { foo } to foo + for { + switch node := in.(type) { + case *ast.BlockStmt: + if unwrapTrivialBlocks { + switch len(node.List) { + case 0: + return &ast.EmptyStmt{Semicolon: node.End(), Implicit: false} + case 1: + in = node.List[0] + unwrapTrivialBlocks = false + continue + } + } + return node + case *ast.ExprStmt: + return node.X + case *ast.ParenExpr: + return node.X + case *ast.DeclStmt: + return node.Decl + } + return in + } +} + +// SimplifyAstForQuote unwraps ast2.BlockStmt, ast2.ExprStmt, ast2.ParenExpr and ast2.DeclStmt +// and returns their contents. +// used to implement fast.Comp.QuasiQuote(), be extra careful if you patch it! +func SimplifyAstForQuote(in Ast, unwrapTrivialBlocks bool) Ast { + // unwrap expressions... they fit in more places and make the life easier to MacroExpand and evalQuasiquote + // also, if unwrapTrivialBlocks is true, unwrap a single-statement block { foo } to foo + for { + switch form := in.(type) { + case BlockStmt: + if unwrapTrivialBlocks { + switch form.Size() { + case 0: + return EmptyStmt{&ast.EmptyStmt{Semicolon: form.X.List[0].End(), Implicit: false}} + case 1: + in = form.Get(0) + unwrapTrivialBlocks = false + continue + } + } + return form + case ExprStmt, ParenExpr, DeclStmt: + return in.Get(0) + } + return in + } +} + +// restricted version of UnwrapTrivialAst +func UnwrapTrivialNode(node ast.Node) ast.Node { + in := ToAst(node) + out := unwrapTrivialAst2(in, true) + return ToNode(out) +} + +// unwrapTrivialAst extract the content from ParenExpr, ExprStmt, DeclStmt: +// such nodes are trivial wrappers for their contents +func UnwrapTrivialAst(in Ast) Ast { + return unwrapTrivialAst2(in, true) +} + +func UnwrapTrivialAstKeepBlocks(in Ast) Ast { + return unwrapTrivialAst2(in, false) +} + +func unwrapTrivialAst2(in Ast, unwrapTrivialBlockStmt bool) Ast { + for { + switch form := in.(type) { + case BlockStmt: + if !unwrapTrivialBlockStmt || form.Size() != 1 { + return form + } + // a one-element block is trivial UNLESS it contains a declaration. + // reason: the declaration alters its scope with new bindings. + // unwrapping it would alters the OUTER scope. + // i.e. { var x = foo() } and var x = foo() give different scopes + // to the variable 'x' so they are not equivalent. + // + // same reasoning for { x := foo() } versus x := foo() + child := form.Get(0) + switch child := child.(type) { + case DeclStmt: + return in + case AssignStmt: + if child.Op() == token.DEFINE { + return in + } + } + // Debugf("unwrapTrivialAst(block) unwrapping %#v <%T>\n\tto %#v <%T>\n", form.Interface(), form.Interface(), child.Interface(), child.Interface()) + in = child + case ParenExpr, ExprStmt, DeclStmt: + child := form.Get(0) + // Debugf("unwrapTrivialAst(1) unwrapped %#v <%T>\n\tto %#v <%T>\n", form.Interface(), form.Interface(), child.Interface(), child.Interface()) + in = child + default: + return in + } + } +} + +// MakeQuote invokes parser.MakeQuote() and wraps the resulting ast.Node, +// which represents quote{

}, into an Ast struct +func MakeQuote(form UnaryExpr) (UnaryExpr, BlockStmt) { + expr, block := mp.MakeQuote(nil, form.X.Op, form.X.OpPos, nil) + return UnaryExpr{expr}, BlockStmt{block} +} + +// MakeQuote2 invokes parser.MakeQuote() and wraps the resulting ast.Node, +// which represents quote{}, into an Ast struct +func MakeQuote2(form UnaryExpr, toQuote AstWithNode) UnaryExpr { + var node ast.Node + if toQuote != nil { + node = toQuote.Node() + } + // Debugf("node = %#v\n", node) + // Debugf("form = %#v\n", form) + // Debugf("form.X = %#v\n", form.X) + expr, _ := mp.MakeQuote(nil, form.X.Op, form.X.OpPos, node) + return UnaryExpr{expr} +} + +// DuplicateNestedUnquotes is a support function to handle the following complication: +// in Common Lisp, the right-most unquote pairs with the left-most comma! +// we implement the same mechanics, so we must drill down to the last unquote/unquote_splice +// and, for unquote_splice, create a copy of the unquote/unquote_splice stack for each result. +// Example: +// x:=quote{7; 8} +// quasiquote{quasiquote{1; unquote{2}; unquote{unquote_splice{x}}}} +// must return +// quasiquote{1; unquote{2}; unquote{7}; unquote{8}} +func DuplicateNestedUnquotes(src UnaryExpr, depth int, content Ast) Ast { + if depth == 0 { + return content + } + head, tail := MakeQuote(src) + var form Ast = src + + for ; depth > 1; depth-- { + form = form.Get(0).Get(1) + form = UnwrapTrivialAst(form) + + src = form.(UnaryExpr) + expr, newTail := MakeQuote(src) + // cheat: we know that BlockStmt.Append() always returns the receiver unmodified + tail.Append(expr) + tail = newTail + } + // cheat: we know that BlockStmt.Append() always returns the receiver unmodified + if content != nil { + tail.Append(content) + } + return head +} + +func DescendNestedUnquotes(unquote UnaryExpr) (lastUnquote UnaryExpr, depth int) { + depth = 1 + for { + form := unquote.Get(0).Get(1) + form = UnwrapTrivialAst(form) + + if form != nil && form.Size() == 1 { + if block, ok := form.(BlockStmt); ok { + form = UnwrapTrivialAst(block.Get(0)) + if form != nil && form.Size() == 1 { + if expr, ok := form.(UnaryExpr); ok { + if op := expr.Op(); op == mt.UNQUOTE || op == mt.UNQUOTE_SPLICE { + unquote = expr + depth++ + continue + } + } + } + } + } + return unquote, depth + } +} diff --git a/vendor/github.com/cosmos72/gomacro/base/read.go b/vendor/github.com/cosmos72/gomacro/base/read.go new file mode 100644 index 0000000..871cf5d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/read.go @@ -0,0 +1,450 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * read.go + * + * Created on: Mar 12, 2017 + * Author: Massimiliano Ghilardi + */ + +package base + +import ( + "bufio" + "bytes" + "errors" + "fmt" + "go/token" + "io" + r "reflect" + + mt "github.com/cosmos72/gomacro/token" +) + +func ReadBytes(src interface{}) []byte { + switch s := src.(type) { + case []byte: + if s != nil { + return s + } + case string: + return []byte(s) + case *bytes.Buffer: + // is io.Reader, but src is already available in []byte form + if s != nil { + return s.Bytes() + } + case io.Reader: + if s != nil { + var buf bytes.Buffer + if _, err := io.Copy(&buf, s); err != nil { + Error(err) + } + return buf.Bytes() + } + } + Errorf("unsupported source, cannot read from: %v <%v>", src, r.TypeOf(src)) + return nil +} + +func ReadString(src interface{}) string { + switch s := src.(type) { + case []byte: + if s != nil { + return string(s) + } + case string: + return s + case *bytes.Buffer: + // is io.Reader, but src is already available in string form + if s != nil { + return s.String() + } + case io.Reader: + if s != nil { + var buf bytes.Buffer + if _, err := io.Copy(&buf, s); err != nil { + Error(err) + } + return buf.String() + } + } + Errorf("unsupported source, cannot read from: %v <%v>", src, r.TypeOf(src)) + return "" +} + +type ReadOptions int + +const ( + ReadOptShowPrompt ReadOptions = 1 << iota + ReadOptCollectAllComments // continue until non-comment is found. default is to return comments one by one +) + +const debug = false + +type mode int + +const ( + mNormal mode = iota + mPlus + mMinus + mRune + mString + mRuneEscape + mStringEscape + mRawString + mSlash + mHash + mLineComment + mComment + mCommentStar + mTilde +) + +func (m mode) String() string { + switch m { + case mNormal: + return "norm" + case mPlus: + return "plus" + case mMinus: + return "minus" + case mRune: + return "rune" + case mString: + return "string" + case mRuneEscape: + return "runesc" + case mStringEscape: + return "stresc" + case mRawString: + return "strraw" + case mSlash: + return "slash" + case mHash: + return "hash" + case mLineComment: + return "lcomm" + case mComment: + return "comment" + case mCommentStar: + return "comm*" + case mTilde: + return "tilds" + default: + return "???" + } +} + +var paragraph_separator_bytes = []byte{0xe2, 0x80, 0xa9} +var nl_bytes = []byte{'\n'} + +func ReadMultiline(in *bufio.Reader, opts ReadOptions, out io.Writer, prompt string) (src string, firstToken int, err error) { + m := mNormal + paren := 0 + optPrompt := opts&ReadOptShowPrompt != 0 + optAllComments := opts&ReadOptCollectAllComments != 0 + ignorenl := false + firstToken = -1 + lastToken := -1 + + if optPrompt { + fmt.Fprint(out, prompt) + } + var line, buf []byte + + // comments do not reset ignorenl + resetnl := func(paren int, m mode) bool { + return paren != 0 || + (m != mNormal && m != mSlash && m != mHash && + m != mLineComment && m != mComment && m != mCommentStar) + } + foundtoken := func(pos int) { + lastToken = len(buf) + pos + if firstToken < 0 { + firstToken = lastToken + if debug { + Debugf("ReadMultiline: setting firstToken to %d, line up to it = %q", firstToken, line[:pos]) + } + } + } + invalidChar := func(i int, ch byte, ctx string) (string, int, error) { + return string(append(buf, line[:i]...)), firstToken, + errors.New(fmt.Sprintf("unexpected character %q inside %s literal", ch, ctx)) + } + + for { + line, err = in.ReadBytes('\n') + line = bytes.Replace(line, paragraph_separator_bytes, nl_bytes, -1) + for i, ch := range line { + if debug { + Debugf("ReadMultiline: found %q\tmode=%v\tparen=%d ignorenl=%t", ch, m, paren, ignorenl) + } + switch m { + case mPlus, mMinus: + if ch == '+' { + if m == mPlus { + m = mNormal + } else { + m = mPlus + } + break + } else if ch == '-' { + if m == mMinus { + m = mNormal + } else { + m = mMinus + } + break + } + m = mNormal + ignorenl = true + if ch <= ' ' { + continue + } + fallthrough + case mNormal: + switch ch { + case '(', '[', '{': + paren++ + case ')', ']', '}': + paren-- + case '\'': + m = mRune + case '"': + m = mString + case '`': + m = mRawString + case '/': + m = mSlash + continue // no tokens yet + case '#': + m = mHash // support #! line comments + continue // no tokens yet + case '~': + m = mTilde + case '!', '%', '&', '*', ',', '.', '<', '=', '>', '^', '|': + ignorenl = paren == 0 + case '+': + ignorenl = false + if paren == 0 { + m = mPlus + } + case '-': + ignorenl = false + if paren == 0 { + m = mMinus + } + default: + if ch <= ' ' { + continue // not a token + } + ignorenl = false // found a token + } + case mRune: + switch ch { + case '\\': + m = mRuneEscape + case '\'': + m = mNormal + default: + if ch < ' ' { + return invalidChar(i, ch, "rune") + } + } + case mRuneEscape: + if ch < ' ' { + return invalidChar(i, ch, "rune") + } + m = mRune + case mString: + switch ch { + case '\\': + m = mStringEscape + case '"': + m = mNormal + default: + if ch < ' ' { + return invalidChar(i, ch, "string") + } + } + case mStringEscape: + if ch < ' ' { + return invalidChar(i, ch, "string") + } + m = mString + case mRawString: + switch ch { + case '`': + m = mNormal + } + case mSlash: + switch ch { + case '/': + m = mLineComment + continue // no tokens + case '*': + m = mComment + continue // no tokens + default: + m = mNormal + if ch <= ' ' { + ignorenl = true + } else { + foundtoken(i - 1) + } + } + case mHash: + switch ch { + case '!': + m = mLineComment + line[i-1] = '/' + line[i] = '/' + continue // no tokens + default: + m = mNormal + foundtoken(i - 1) + } + case mLineComment: + continue + case mComment: + switch ch { + case '*': + m = mCommentStar + } + continue + case mCommentStar: + switch ch { + case '/': + m = mNormal + default: + m = mComment + } + continue + case mTilde: + m = mNormal + } + if debug { + Debugf("ReadMultiline: \tmode=%v\tparen=%d ignorenl=%t resetnl=%t", m, paren, ignorenl, resetnl(paren, m)) + } + if resetnl(paren, m) { + ignorenl = false + if debug { + Debugf("ReadMultiline: cleared ignorenl") + } + } + if ch > ' ' { + foundtoken(i) + } + } + buf = append(buf, line...) + if m == mLineComment { + m = mNormal + } + if err != nil { + break + } + if paren <= 0 && !ignorenl && m == mNormal && (firstToken >= 0 || !optAllComments) { + if firstToken >= 0 && lastIsKeywordIgnoresNl(line, firstToken, lastToken) { + ignorenl = true + } else { + break + } + } + if debug { + Debugf("ReadMultiline: continuing\tmode=%v\tparen=%d ignorenl=%t", m, paren, ignorenl) + } + if m == mPlus || m == mMinus { + m = mNormal + } + if optPrompt { + printDots(out, 4+2*paren) + } + } + if err != nil { + if err == io.EOF && paren > 0 { + err = errors.New("unexpected EOF") + } + return string(buf), firstToken, err + } + if debug { + Debugf("ReadMultiline: read %d bytes, firstToken at %d", len(buf), firstToken) + if firstToken >= 0 { + Debugf("ReadMultiline: comments: %q", buf[:firstToken]) + Debugf("ReadMultiline: tokens: %q", buf[firstToken:]) + } else { + Debugf("ReadMultiline: comments: %q", buf) + } + } + return string(buf), firstToken, nil +} + +func lastIsKeywordIgnoresNl(line []byte, first, last int) bool { + if last >= 0 && last < len(line) { + line = line[:last+1] + } + if first >= 0 && first <= len(line) { + line = line[first:] + } + n := len(line) + var start, end int + for i := n - 1; i >= 0; i-- { + ch := line[i] + if ch <= ' ' { + continue + } else if ch >= 'a' && ch <= 'z' { + end = i + 1 + break + } + return false + } + for i := end - 1; i >= 0; i-- { + ch := line[i] + if ch < 'a' || ch > 'z' { + start = i + 1 + break + } + } + str := string(line[start:end]) + tok := mt.Lookup(str) + ignorenl := false + switch tok { + case token.IDENT, token.BREAK, token.CONTINUE, token.FALLTHROUGH, token.RETURN: + default: + ignorenl = true + } + if debug { + Debugf("lastIsKeywordIgnoresNl: found %ignorenl=%t", str, ignorenl) + } + return ignorenl +} + +func printDots(out io.Writer, count int) { + const ( + dots = ". . . . . . . . . . . . . . . . " + ndots = len(dots) + ) + for count >= ndots { + fmt.Fprint(out, dots) + count -= ndots + } + if count > 0 { + fmt.Fprint(out, dots[0:count]) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/base/string.go b/vendor/github.com/cosmos72/gomacro/base/string.go new file mode 100644 index 0000000..fb0b7be --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/string.go @@ -0,0 +1,113 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * string.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package base + +import ( + "strconv" +) + +func UnescapeChar(str string) (rune, error) { + // Debugf("unescapeChar(): parsing CHAR %#v", str) + n := len(str) + if n >= 2 && str[0] == '\'' && str[n-1] == '\'' { + str = str[1 : n-1] + } + ret, _, _, err := strconv.UnquoteChar(str, '\'') + if err != nil { + return 0, err + } + return ret, nil +} + +func UnescapeString(str string) string { + ret, err := strconv.Unquote(str) + if err != nil { + Error(err) + } + return ret +} + +func FindFirstToken(src []byte) int { + n := len(src) + const ( + Normal = iota + Slash + LineComment + MultiLineComment + MultiLineCommentStar + ) + mode := Normal + for i := 0; i < n; i++ { + ch := src[i] + switch mode { + case Normal: + if ch == '/' { + mode = Slash + } else if ch > ' ' { + return i + } + case Slash: + if ch == '/' { + mode = LineComment + } else if ch == '*' { + mode = MultiLineComment + } else { + return i - 1 + } + case LineComment: + if ch == '\n' { + mode = Normal + } + case MultiLineComment: + if ch == '*' { + mode = MultiLineCommentStar + } + case MultiLineCommentStar: + if ch == '/' { + mode = Normal + } else { + mode = MultiLineComment + } + } + } + return n +} + +/* +func extractFirstIdentifier(src []byte) []byte { + n := len(src) + for i := 0; i < n; i++ { + ch := src[i] + if (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || + ch == '_' || ch >= 128 || + (i != 0 && (ch >= '0' && ch <= '9')) { + } else { + return src[:i] + } + } + return src +} +*/ diff --git a/vendor/github.com/cosmos72/gomacro/base/types.go b/vendor/github.com/cosmos72/gomacro/base/types.go new file mode 100644 index 0000000..5a0b954 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/types.go @@ -0,0 +1,141 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * types.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package base + +import ( + "sort" + "strings" + + "github.com/cosmos72/gomacro/imports" +) + +type PackageRef struct { + imports.Package + Name, Path string +} + +type Options uint +type WhichMacroExpand uint + +const ( + OptTrapPanic Options = 1 << iota + OptPanicStackTrace + OptMacroExpandOnly // do not compile or execute code, only parse and macroexpand it + OptFastInterpreter // use the new (and incomplete) fast interpreter + OptCollectDeclarations + OptCollectStatements + OptShowCompile + OptShowEval + OptShowEvalType + OptShowMacroExpand + OptShowParse + OptShowPrompt + OptShowTime + OptDebugCallStack + OptDebugField + OptDebugMacroExpand + OptDebugMethod + OptDebugPanicRecover + OptDebugParse + OptDebugQuasiquote + OptDebugSleepOnSwitch // to torture-test "switch" implementation for race conditions +) + +const ( + CMacroExpand1 WhichMacroExpand = iota + CMacroExpand + CMacroExpandCodewalk +) + +var optNames = map[Options]string{ + OptTrapPanic: "TrapPanic", + OptPanicStackTrace: "StackTrace.OnPanic", + OptMacroExpandOnly: "MacroExpandOnly", + OptFastInterpreter: "FastInterpreter", + OptCollectDeclarations: "Declarations.Collect", + OptCollectStatements: "Statements.Collect", + OptShowCompile: "Compile.Show", + OptShowEval: "Eval.Show", + OptShowEvalType: "Type.Eval.Show", + OptShowMacroExpand: "MacroExpand.Show", + OptShowParse: "Parse.Show", + OptShowPrompt: "Prompt.Show", + OptShowTime: "Time.Show", + OptDebugCallStack: "?CallStack.Debug", + OptDebugField: "?Field.Debug", + OptDebugMacroExpand: "?MacroExpand.Debug", + OptDebugMethod: "?Method.Debug", + OptDebugPanicRecover: "?PanicRecover.Debug", + OptDebugParse: "?Parse.Debug", + OptDebugQuasiquote: "?Quasiquote.Debug", + OptDebugSleepOnSwitch: "?SwitchSleep.Debug", +} + +var optValues = map[string]Options{} + +func init() { + for k, v := range optNames { + optValues[v] = k + } +} + +func (o Options) String() string { + names := make([]string, 0) + for k, v := range optNames { + if k&o != 0 { + names = append(names, v) + } + } + sort.Strings(names) + return strings.Join(names, " ") +} + +func ParseOptions(str string) Options { + var opts Options + for _, name := range strings.Split(str, " ") { + if opt, ok := optValues[name]; ok { + opts ^= opt + } else if len(name) != 0 { + for k, v := range optNames { + if strings.HasPrefix(v, name) { + opts ^= k + } + } + } + } + return opts +} + +func (m WhichMacroExpand) String() string { + switch m { + case CMacroExpand1: + return "MacroExpand1" + case CMacroExpandCodewalk: + return "MacroExpandCodewalk" + default: + return "MacroExpand" + } +} diff --git a/vendor/github.com/cosmos72/gomacro/base/util.go b/vendor/github.com/cosmos72/gomacro/base/util.go new file mode 100644 index 0000000..1e0266f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/util.go @@ -0,0 +1,71 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * util.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package base + +import ( + r "reflect" +) + +func PackValues(val0 r.Value, vals []r.Value) []r.Value { + if len(vals) == 0 && val0 != None { + vals = []r.Value{val0} + } + return vals +} + +func UnpackValues(vals []r.Value) (r.Value, []r.Value) { + val0 := None + if len(vals) > 0 { + val0 = vals[0] + } + return val0, vals +} + +// ValueInterface() is a zero-value-safe version of reflect.Value.Interface() +func ValueInterface(v r.Value) interface{} { + if v == Nil || v == None || !v.IsValid() || !v.CanInterface() { + return nil + } + return v.Interface() +} + +// ValueType() is a zero-value-safe version of reflect.Value.Type() +func ValueType(v r.Value) r.Type { + if v == Nil || v == None || !v.IsValid() { + return nil + } + return v.Type() +} + +func IsNillableKind(k r.Kind) bool { + switch k { + case r.Invalid, // nil is nillable... + r.Chan, r.Func, r.Interface, r.Map, r.Ptr, r.Slice: + return true + default: + return false + } +} diff --git a/vendor/github.com/cosmos72/gomacro/base/x_package.go b/vendor/github.com/cosmos72/gomacro/base/x_package.go new file mode 100644 index 0000000..bb7a2f1 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/base/x_package.go @@ -0,0 +1,155 @@ +// this file was generated by gomacro command: import _i "github.com/cosmos72/gomacro/base" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package base + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/imports" +) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/base" +func init() { + imports.Packages["github.com/cosmos72/gomacro/base"] = imports.Package{ + Binds: map[string]r.Value{ + "CMacroExpand": r.ValueOf(CMacroExpand), + "CMacroExpand1": r.ValueOf(CMacroExpand1), + "CMacroExpandCodewalk": r.ValueOf(CMacroExpandCodewalk), + "ConvertValue": r.ValueOf(ConvertValue), + "Debugf": r.ValueOf(Debugf), + "DefaultImporter": r.ValueOf(DefaultImporter), + "DescendNestedUnquotes": r.ValueOf(DescendNestedUnquotes), + "DuplicateNestedUnquotes": r.ValueOf(DuplicateNestedUnquotes), + "Error": r.ValueOf(Error), + "Errorf": r.ValueOf(Errorf), + "False": r.ValueOf(&False).Elem(), + "FindFirstToken": r.ValueOf(FindFirstToken), + "ImBuiltin": r.ValueOf(ImBuiltin), + "ImInception": r.ValueOf(ImInception), + "ImSharedLib": r.ValueOf(ImSharedLib), + "IsCategory": r.ValueOf(IsCategory), + "IsGensym": r.ValueOf(IsGensym), + "IsGensymEmbedded": r.ValueOf(IsGensymEmbedded), + "IsGensymInterface": r.ValueOf(IsGensymInterface), + "IsGensymPrivate": r.ValueOf(IsGensymPrivate), + "IsNillableKind": r.ValueOf(IsNillableKind), + "IsOptimizedKind": r.ValueOf(IsOptimizedKind), + "KindToCategory": r.ValueOf(KindToCategory), + "KindToType": r.ValueOf(KindToType), + "MakeQuote": r.ValueOf(MakeQuote), + "MakeQuote2": r.ValueOf(MakeQuote2), + "MarshalUntyped": r.ValueOf(MarshalUntyped), + "MaxInt": r.ValueOf(int64(MaxInt)), + "MaxUint": r.ValueOf(uint64(MaxUint)), + "MaxUint16": r.ValueOf(MaxUint16), + "MinInt": r.ValueOf(int64(MinInt)), + "MinUint": r.ValueOf(MinUint), + "NewGlobals": r.ValueOf(NewGlobals), + "Nil": r.ValueOf(&Nil).Elem(), + "None": r.ValueOf(&None).Elem(), + "One": r.ValueOf(&One).Elem(), + "OptCollectDeclarations": r.ValueOf(OptCollectDeclarations), + "OptCollectStatements": r.ValueOf(OptCollectStatements), + "OptDebugCallStack": r.ValueOf(OptDebugCallStack), + "OptDebugField": r.ValueOf(OptDebugField), + "OptDebugMacroExpand": r.ValueOf(OptDebugMacroExpand), + "OptDebugMethod": r.ValueOf(OptDebugMethod), + "OptDebugPanicRecover": r.ValueOf(OptDebugPanicRecover), + "OptDebugQuasiquote": r.ValueOf(OptDebugQuasiquote), + "OptFastInterpreter": r.ValueOf(OptFastInterpreter), + "OptMacroExpandOnly": r.ValueOf(OptMacroExpandOnly), + "OptPanicStackTrace": r.ValueOf(OptPanicStackTrace), + "OptShowCompile": r.ValueOf(OptShowCompile), + "OptShowEval": r.ValueOf(OptShowEval), + "OptShowEvalType": r.ValueOf(OptShowEvalType), + "OptShowMacroExpand": r.ValueOf(OptShowMacroExpand), + "OptShowParse": r.ValueOf(OptShowParse), + "OptShowPrompt": r.ValueOf(OptShowPrompt), + "OptShowTime": r.ValueOf(OptShowTime), + "OptTrapPanic": r.ValueOf(OptTrapPanic), + "PackValues": r.ValueOf(PackValues), + "ParseOptions": r.ValueOf(ParseOptions), + "ReadBytes": r.ValueOf(ReadBytes), + "ReadMultiline": r.ValueOf(ReadMultiline), + "ReadOptCollectAllComments": r.ValueOf(ReadOptCollectAllComments), + "ReadOptShowPrompt": r.ValueOf(ReadOptShowPrompt), + "ReadString": r.ValueOf(ReadString), + "SimplifyAstForQuote": r.ValueOf(SimplifyAstForQuote), + "SimplifyNodeForQuote": r.ValueOf(SimplifyNodeForQuote), + "StrGensym": r.ValueOf(StrGensym), + "StrGensymEmbedded": r.ValueOf(StrGensymEmbedded), + "StrGensymInterface": r.ValueOf(StrGensymInterface), + "StrGensymPrivate": r.ValueOf(StrGensymPrivate), + "True": r.ValueOf(&True).Elem(), + "TypeOfBool": r.ValueOf(&TypeOfBool).Elem(), + "TypeOfByte": r.ValueOf(&TypeOfByte).Elem(), + "TypeOfComplex128": r.ValueOf(&TypeOfComplex128).Elem(), + "TypeOfComplex64": r.ValueOf(&TypeOfComplex64).Elem(), + "TypeOfDeferFunc": r.ValueOf(&TypeOfDeferFunc).Elem(), + "TypeOfError": r.ValueOf(&TypeOfError).Elem(), + "TypeOfFloat32": r.ValueOf(&TypeOfFloat32).Elem(), + "TypeOfFloat64": r.ValueOf(&TypeOfFloat64).Elem(), + "TypeOfInt": r.ValueOf(&TypeOfInt).Elem(), + "TypeOfInt16": r.ValueOf(&TypeOfInt16).Elem(), + "TypeOfInt32": r.ValueOf(&TypeOfInt32).Elem(), + "TypeOfInt64": r.ValueOf(&TypeOfInt64).Elem(), + "TypeOfInt8": r.ValueOf(&TypeOfInt8).Elem(), + "TypeOfInterface": r.ValueOf(&TypeOfInterface).Elem(), + "TypeOfPtrBool": r.ValueOf(&TypeOfPtrBool).Elem(), + "TypeOfPtrComplex128": r.ValueOf(&TypeOfPtrComplex128).Elem(), + "TypeOfPtrComplex64": r.ValueOf(&TypeOfPtrComplex64).Elem(), + "TypeOfPtrFloat32": r.ValueOf(&TypeOfPtrFloat32).Elem(), + "TypeOfPtrFloat64": r.ValueOf(&TypeOfPtrFloat64).Elem(), + "TypeOfPtrInt": r.ValueOf(&TypeOfPtrInt).Elem(), + "TypeOfPtrInt16": r.ValueOf(&TypeOfPtrInt16).Elem(), + "TypeOfPtrInt32": r.ValueOf(&TypeOfPtrInt32).Elem(), + "TypeOfPtrInt64": r.ValueOf(&TypeOfPtrInt64).Elem(), + "TypeOfPtrInt8": r.ValueOf(&TypeOfPtrInt8).Elem(), + "TypeOfPtrString": r.ValueOf(&TypeOfPtrString).Elem(), + "TypeOfPtrUint": r.ValueOf(&TypeOfPtrUint).Elem(), + "TypeOfPtrUint16": r.ValueOf(&TypeOfPtrUint16).Elem(), + "TypeOfPtrUint32": r.ValueOf(&TypeOfPtrUint32).Elem(), + "TypeOfPtrUint64": r.ValueOf(&TypeOfPtrUint64).Elem(), + "TypeOfPtrUint8": r.ValueOf(&TypeOfPtrUint8).Elem(), + "TypeOfPtrUintptr": r.ValueOf(&TypeOfPtrUintptr).Elem(), + "TypeOfReflectType": r.ValueOf(&TypeOfReflectType).Elem(), + "TypeOfRune": r.ValueOf(&TypeOfRune).Elem(), + "TypeOfSliceOfByte": r.ValueOf(&TypeOfSliceOfByte).Elem(), + "TypeOfSliceOfInterface": r.ValueOf(&TypeOfSliceOfInterface).Elem(), + "TypeOfString": r.ValueOf(&TypeOfString).Elem(), + "TypeOfUint": r.ValueOf(&TypeOfUint).Elem(), + "TypeOfUint16": r.ValueOf(&TypeOfUint16).Elem(), + "TypeOfUint32": r.ValueOf(&TypeOfUint32).Elem(), + "TypeOfUint64": r.ValueOf(&TypeOfUint64).Elem(), + "TypeOfUint8": r.ValueOf(&TypeOfUint8).Elem(), + "TypeOfUintptr": r.ValueOf(&TypeOfUintptr).Elem(), + "UnescapeChar": r.ValueOf(UnescapeChar), + "UnescapeString": r.ValueOf(UnescapeString), + "UnmarshalUntyped": r.ValueOf(UnmarshalUntyped), + "UnpackValues": r.ValueOf(UnpackValues), + "UnwrapTrivialAst": r.ValueOf(UnwrapTrivialAst), + "UnwrapTrivialAstKeepBlocks": r.ValueOf(UnwrapTrivialAstKeepBlocks), + "UnwrapTrivialNode": r.ValueOf(UnwrapTrivialNode), + "ValueInterface": r.ValueOf(ValueInterface), + "ValueType": r.ValueOf(ValueType), + "Warnf": r.ValueOf(Warnf), + "ZeroStrings": r.ValueOf(&ZeroStrings).Elem(), + "ZeroTypes": r.ValueOf(&ZeroTypes).Elem(), + "ZeroValues": r.ValueOf(&ZeroValues).Elem(), + }, + Types: map[string]r.Type{ + "Globals": r.TypeOf((*Globals)(nil)).Elem(), + "ImportMode": r.TypeOf((*ImportMode)(nil)).Elem(), + "Importer": r.TypeOf((*Importer)(nil)).Elem(), + "Options": r.TypeOf((*Options)(nil)).Elem(), + "Output": r.TypeOf((*Output)(nil)).Elem(), + "PackageRef": r.TypeOf((*PackageRef)(nil)).Elem(), + "ReadOptions": r.TypeOf((*ReadOptions)(nil)).Elem(), + "RuntimeError": r.TypeOf((*RuntimeError)(nil)).Elem(), + "Stringer": r.TypeOf((*Stringer)(nil)).Elem(), + "TypeVisitor": r.TypeOf((*TypeVisitor)(nil)).Elem(), + "WhichMacroExpand": r.TypeOf((*WhichMacroExpand)(nil)).Elem(), + }, + Proxies: map[string]r.Type{}} +} diff --git a/vendor/github.com/cosmos72/gomacro/benchmark_test.go b/vendor/github.com/cosmos72/gomacro/benchmark_test.go new file mode 100644 index 0000000..05f5c2c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/benchmark_test.go @@ -0,0 +1,713 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * expr_test.go + * + * Created on: Mar 06 2017 + * Author: Massimiliano Ghilardi + */ +package main + +import ( + "fmt" + r "reflect" + "testing" + + // . "github.com/cosmos72/gomacro/base" + "github.com/cosmos72/gomacro/classic" + "github.com/cosmos72/gomacro/experiments/bytecode_interfaces" + "github.com/cosmos72/gomacro/experiments/bytecode_values" + "github.com/cosmos72/gomacro/experiments/closure_interfaces" + "github.com/cosmos72/gomacro/experiments/closure_maps" + "github.com/cosmos72/gomacro/experiments/closure_values" + "github.com/cosmos72/gomacro/fast" +) + +const ( + collatz_n = 837799 // sequence climbs to 1487492288, which also fits 32-bit ints + sum_n = 1000 + fib_n = 12 + bigswitch_n = 100 +) + +var verbose = false + +/* + --------- 2017-05-21: results on Intel Core i7 4770 --------------- + + BenchmarkFibonacciCompiler-8 3000000 501 ns/op + BenchmarkFibonacciFast-8 100000 15774 ns/op + BenchmarkFibonacciFast2-8 100000 15141 ns/op + BenchmarkFibonacciClassic-8 2000 915990 ns/op + BenchmarkFibonacciClassic2-8 2000 912180 ns/op + BenchmarkFibonacciClosureValues-8 5000 259074 ns/op + BenchmarkFibonacciClosureInterfaces-8 10000 193098 ns/op + BenchmarkFibonacciClosureMaps-8 5000 358345 ns/op + BenchmarkShellSortCompiler-8 20000000 74.0 ns/op + BenchmarkShellSortFast-8 200000 7790 ns/op + BenchmarkShellSortClassic-8 5000 276673 ns/op + BenchmarkSwitchCompiler-8 1000000 2363 ns/op + BenchmarkSwitchFast-8 50000 37773 ns/op + BenchmarkSwitchClassic-8 500 3454461 ns/op + BenchmarkArithCompiler1-8 200000000 8.41 ns/op + BenchmarkArithCompiler2-8 200000000 8.41 ns/op + BenchmarkArithFast-8 50000000 30.8 ns/op + BenchmarkArithFast2-8 30000000 50.6 ns/op + BenchmarkArithFastConst-8 100000000 15.2 ns/op + BenchmarkArithFastCompileLoop-8 100000 21442 ns/op + BenchmarkArithClassic-8 1000000 1686 ns/op + BenchmarkArithClassic2-8 500000 2916 ns/op + BenchmarkCollatzCompiler-8 5000000 265 ns/op + BenchmarkCollatzFast-8 200000 11812 ns/op + BenchmarkCollatzClassic-8 2000 654139 ns/op + BenchmarkCollatzBytecodeInterfaces-8 50000 30203 ns/op + BenchmarkCollatzClosureValues-8 100000 16570 ns/op + BenchmarkSumCompiler-8 5000000 294 ns/op + BenchmarkSumFast-8 100000 20789 ns/op + BenchmarkSumFast2-8 100000 20720 ns/op + BenchmarkSumClassic-8 1000 1223624 ns/op + BenchmarkSumBytecodeValues-8 20000 76201 ns/op + BenchmarkSumBytecodeInterfaces-8 30000 53031 ns/op + BenchmarkSumClosureValues-8 30000 41124 ns/op + BenchmarkSumClosureInterfaces-8 10000 147109 ns/op + BenchmarkSumClosureMaps-8 20000 93320 ns/op +*/ + +// ---------------------- recursion: fibonacci ---------------------- + +func fibonacci(n int) int { + if n <= 2 { + return 1 + } + return fibonacci(n-1) + fibonacci(n-2) +} + +func BenchmarkFibonacciCompiler(b *testing.B) { + var total int + n := fib_n + for i := 0; i < b.N; i++ { + total += fibonacci(n) + } + if verbose { + println(total) + } +} + +func BenchmarkFibonacciFast(b *testing.B) { + ir := fast.New() + ir.Eval(fibonacci_source_string) + + // compile the call to fibonacci(fib_n) + expr := ir.Compile(fmt.Sprintf("fibonacci(%d)", fib_n)) + fun := expr.Fun.(func(*fast.Env) int) + env := ir.PrepareEnv() + + fun(env) // warm up + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += fun(env) + } +} + +func BenchmarkFibonacciFast2(b *testing.B) { + ir := fast.New() + ir.Eval(fibonacci_source_string) + + // alternative: extract the function fibonacci, and call it ourselves + // + // ValueOf is the method to retrieve constants, functions and variables from the classic and fast interpreters + // (if you are going to read or write the same interpreter variable repeatedly, + // dereferencing the address returned by AddressOfVar is faster) + fun := ir.ValueOf("fibonacci").Interface().(func(int) int) + + fun(fib_n) // warm up + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += fun(fib_n) + } +} + +func BenchmarkFibonacciClassic(b *testing.B) { + ir := classic.New() + ir.Eval(fibonacci_source_string) + + // compile the call to fibonacci(fib_n) + form := ir.Parse(fmt.Sprintf("fibonacci(%d)", fib_n)) + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += int(ir.EvalAst1(form).Int()) + } +} + +func BenchmarkFibonacciClassic2(b *testing.B) { + ir := classic.New() + ir.Eval(fibonacci_source_string) + + // alternative: extract the function fibonacci, and call it ourselves + fun := ir.ValueOf("fibonacci").Interface().(func(int) int) + + fun(fib_n) // warm up + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += fun(fib_n) + } +} + +func BenchmarkFibonacciClosureValues(b *testing.B) { + env := closure_values.NewEnv(nil) + fib := closure_values.DeclFibonacci(env, 0) + n := r.ValueOf(fib_n) + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += fib(n) + } +} + +func BenchmarkFibonacciClosureInterfaces(b *testing.B) { + env := closure_interfaces.NewEnv(nil) + fib := closure_interfaces.DeclFibonacci(env, 0) + var n interface{} = fib_n + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += fib(n) + } +} + +func BenchmarkFibonacciClosureMaps(b *testing.B) { + env := closure_maps.NewEnv(nil) + fib := closure_maps.DeclFibonacci(env, "fib") + n := r.ValueOf(fib_n) + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += fib(n) + } +} + +// ---------------------- arrays: shellsort ------------------------ + +// array indexing is faster that slice indexing, +// provided the array is *not* copied. so use a pointer to array +var shellshort_gaps = &[...]int{701, 301, 132, 57, 23, 10, 4, 1} + +func shellsort(v []int) { + var i, j, n, gap, temp int + n = len(v) + for _, gap = range shellshort_gaps { + for i = gap; i < n; i++ { + temp = v[i] + for j = i; j >= gap && v[j-gap] > temp; j -= gap { + v[j] = v[j-gap] + } + v[j] = temp + } + } +} + +var sort_data = []int{97, 89, 3, 4, 7, 0, 36, 79, 1, 12, 2, 15, 70, 18, 35, 70, 15, 73} + +func BenchmarkShellSortCompiler(b *testing.B) { + benchmark_sort(b, shellsort) +} + +func BenchmarkShellSortFast(b *testing.B) { + ir := fast.New() + ir.Eval(shellsort_source_string) + + // extract the function shellsort() + sort := ir.ValueOf("shellsort").Interface().(func([]int)) + + benchmark_sort(b, sort) +} + +func BenchmarkShellSortFastCompileLoop(b *testing.B) { + ir := fast.New() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + ir.Comp.Binds = make(map[string]*fast.Bind) + ir.Comp.BindNum = fast.NoIndex + ir.Compile(shellsort_source_string) + } +} + +func BenchmarkShellSortClassic(b *testing.B) { + ir := classic.New() + ir.Eval(shellsort_source_string) + + // extract the function shellsort() + sort := ir.ValueOf("shellsort").Interface().(func([]int)) + + benchmark_sort(b, sort) +} + +func benchmark_sort(b *testing.B, sort func([]int)) { + // call sort once for warm-up + v := make([]int, len(sort_data)) + copy(v, sort_data) + sort(v) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + copy(v, sort_data) + sort(v) + } + if verbose { + fmt.Println(v) + } +} + +// ---------------------- switch ------------------------ + +func bigswitch(n int) int { + for i := 0; i < 1000; i++ { + switch n & 15 { + case 0: + n++ + case 1: + n += 2 + case 2: + n += 3 + case 3: + n += 4 + case 4: + n += 5 + case 5: + n += 6 + case 6: + n += 7 + case 7: + n += 8 + case 8: + n += 9 + case 9: + n += 10 + case 10: + n += 11 + case 11: + n += 12 + case 12: + n += 13 + case 13: + n += 14 + case 14: + n += 15 + case 15: + n-- + } + } + return n +} + +func BenchmarkSwitchCompiler(b *testing.B) { + var total int + for i := 0; i < b.N; i++ { + total += bigswitch(bigswitch_n) + } + if verbose { + println(total) + } +} + +func BenchmarkSwitchFast(b *testing.B) { + ir := fast.New() + ir.Eval(switch_source_string) + + fun := ir.ValueOf("bigswitch").Interface().(func(int) int) + fun(bigswitch_n) + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += fun(bigswitch_n) + } +} + +func BenchmarkSwitchClassic(b *testing.B) { + ir := classic.New() + ir.Eval(switch_source_string) + + fun := ir.ValueOf("bigswitch").Interface().(func(int) int) + fun(bigswitch_n) + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += fun(bigswitch_n) + } +} + +// ---------------- simple arithmetic ------------------ + +func arith(n int) int { + return ((n*2+3)&4 | 5 ^ 6) / (n | 1) +} + +func BenchmarkArithCompiler1(b *testing.B) { + total := 0 + for i := 0; i < b.N; i++ { + n := b.N + total += ((n*2+3)&4 | 5 ^ 6) / (n | 1) + } + if verbose { + println(total) + } +} + +func BenchmarkArithCompiler2(b *testing.B) { + total := 0 + for i := 0; i < b.N; i++ { + total += arith(b.N) + } + if verbose { + println(total) + } +} + +func BenchmarkArithFast(b *testing.B) { + ir := fast.New() + ir.DeclVar("n", nil, int(0)) + + addr := ir.AddressOfVar("n").Interface().(*int) + + expr := ir.Compile("((n*2+3)&4 | 5 ^ 6) / (n|1)") + fun := expr.Fun.(func(*fast.Env) int) + env := ir.PrepareEnv() + fun(env) + + // interpreted code performs only arithmetic - iteration performed here + b.ResetTimer() + total := 0 + for i := 0; i < b.N; i++ { + *addr = b.N + total += fun(env) + } + if verbose { + println(total) + } +} + +func BenchmarkArithFast2(b *testing.B) { + ir := fast.New() + ir.Eval("var i, n, total int") + + n := ir.AddressOfVar("n").Interface().(*int) + total := ir.AddressOfVar("total").Interface().(*int) + + // interpreted code performs iteration and arithmetic + fun := ir.Compile("for i = 0; i < n; i++ { total += ((n*2+3)&4 | 5 ^ 6) / (n|1) }").AsX() + env := ir.PrepareEnv() + fun(env) + + b.ResetTimer() + + *n = b.N + *total = 0 + fun(env) + + if verbose { + println(*total) + } +} + +func BenchmarkArithFastConst(b *testing.B) { + ir := fast.New() + ir.Eval("var i, total int") + // "cheat" a bit and declare n as a constant. checks if constant propagation works :) + ir.DeclConst("n", nil, int(b.N)) + total := ir.AddressOfVar("total").Interface().(*int) + + // interpreted code performs iteration and arithmetic + fun := ir.Compile("for i = 0; i < n; i++ { total += ((n*2+3)&4 | 5 ^ 6) / (n|1) }").AsX() + env := ir.PrepareEnv() + fun(env) + + b.ResetTimer() + + *total = 0 + fun(env) + + if verbose { + println(*total) + } +} + +func BenchmarkArithFastCompileLoop(b *testing.B) { + ir := fast.New() + ir.Eval("var i, n, total int") + + b.ResetTimer() + for i := 0; i < b.N; i++ { + ir.Compile("total = 0; for i = 0; i < n; i++ { total += ((n*2+3)&4 | 5 ^ 6) / (n|1) }; total") + } +} + +func BenchmarkArithClassic(b *testing.B) { + ir := classic.New() + ir.Eval("n:=0") + + form := ir.Parse("((n*2+3)&4 | 5 ^ 6) / (n|1)") + + value := ir.ValueOf("n") + var ret r.Value + ir.EvalAst(form) + + // interpreted code performs only arithmetic - iteration performed here + b.ResetTimer() + total := 0 + for i := 0; i < b.N; i++ { + value.SetInt(int64(b.N)) + ret, _ = ir.EvalAst(form) + total += int(ret.Int()) + } + if verbose { + println(total) + } +} + +func BenchmarkArithClassic2(b *testing.B) { + ir := classic.New() + ir.Eval("var n, total int") + + // interpreted code performs iteration and arithmetic + form := ir.Parse("total = 0; for i:= 0; i < n; i++ { total += ((n*2+3)&4 | 5 ^ 6) / (n|1) }; total") + + value := ir.ValueOf("n") + ir.EvalAst(form) + + b.ResetTimer() + value.SetInt(int64(b.N)) + ret, _ := ir.EvalAst(form) + + if verbose { + println(ret.Int()) + } +} + +// ---------------- collatz conjecture -------------------- + +func collatz(n uint) { + for n > 1 { + if n&1 != 0 { + n = ((n * 3) + 1) >> 1 + } else { + n >>= 1 + } + } +} + +func BenchmarkCollatzCompiler(b *testing.B) { + var n uint = collatz_n + for i := 0; i < b.N; i++ { + collatz(n) + } +} + +func BenchmarkCollatzFast(b *testing.B) { + ir := fast.New() + ir.DeclVar("n", nil, uint(0)) + addr := ir.AddressOfVar("n").Interface().(*uint) + + fun := ir.Compile("for n > 1 { if n&1 != 0 { n = ((n * 3) + 1) >> 1 } else { n >>= 1 } }").AsX() + env := ir.PrepareEnv() + fun(env) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + *addr = collatz_n + fun(env) + } +} + +func BenchmarkCollatzClassic(b *testing.B) { + ir := classic.New() + ir.EvalAst(ir.Parse("var n uint")) + addr := ir.ValueOf("n").Addr().Interface().(*uint) + + form := ir.Parse("for n > 1 { if n&1 != 0 { n = ((n * 3) + 1) >> 1 } else { n >>= 1 } }") + ir.EvalAst(form) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + *addr = collatz_n + ir.EvalAst(form) + } +} + +func BenchmarkCollatzBytecodeInterfaces(b *testing.B) { + coll := bytecode_interfaces.BytecodeCollatz() + + b.ResetTimer() + for i := 0; i < b.N; i++ { + coll.Vars[0] = collatz_n + coll.Exec(0) + } +} + +func BenchmarkCollatzClosureValues(b *testing.B) { + env := closure_values.NewEnv(nil) + coll := closure_values.DeclCollatz(env, 0) + n := r.ValueOf(collatz_n) + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += coll(n) + } +} + +// ------------- looping: sum the integers from 1 to N ------------------- + +func sum(n int) int { + total := 0 + for i := 1; i <= n; i++ { + total += i + } + return total +} + +func BenchmarkSumCompiler(b *testing.B) { + var total int + for i := 0; i < b.N; i++ { + total += sum(sum_n) + } + if verbose { + println(total) + } +} + +func BenchmarkSumFast(b *testing.B) { + ir := fast.New() + ir.Eval("var i, total uint") + ir.DeclConst("n", nil, uint(sum_n)) + + expr := ir.Compile("total = 0; for i = 1; i <= n; i++ { total += i }; total") + fun := expr.Fun.(func(*fast.Env) uint) + env := ir.PrepareEnv() + fun(env) + + var total uint + b.ResetTimer() + for i := 0; i < b.N; i++ { + total += fun(env) + } + if verbose { + println(total) + } +} + +func BenchmarkSumFast2(b *testing.B) { + ir := fast.New() + ir.Eval("var i, total uint") + ir.DeclConst("n", nil, uint(sum_n)) + + fun := ir.Compile("for i = 1; i <= n; i++ { total += i }").AsX() + env := ir.PrepareEnv() + fun(env) + total := ir.AddressOfVar("total").Interface().(*uint) + + b.ResetTimer() + for i := 0; i < b.N; i++ { + *total = 0 + fun(env) + } + if verbose { + println(*total) + } +} + +func BenchmarkSumClassic(b *testing.B) { + ir := classic.New() + ir.Eval("var i, n, total int") + ir.ValueOf("n").SetInt(sum_n) + form := ir.Parse("total = 0; for i = 1; i <= n; i++ { total += i }; total") + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += int(ir.EvalAst1(form).Int()) + } +} + +func BenchmarkSumBytecodeValues(b *testing.B) { + sum := bytecode_values.BytecodeSum(sum_n) + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += int(sum.Exec(0)[0].Int()) + } +} + +func BenchmarkSumBytecodeInterfaces(b *testing.B) { + p := bytecode_interfaces.BytecodeSum(sum_n) + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += p.Exec(0)[0].(int) + } +} + +func BenchmarkSumClosureValues(b *testing.B) { + env := closure_values.NewEnv(nil) + sum := closure_values.DeclSum(env, 0) + n := r.ValueOf(sum_n) + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += sum(n) + } +} + +func BenchmarkSumClosureInterfaces(b *testing.B) { + env := closure_interfaces.NewEnv(nil) + sum := closure_interfaces.DeclSum(env, 0) + var n interface{} = sum_n + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += sum(n) + } +} + +func BenchmarkSumClosureMaps(b *testing.B) { + env := closure_maps.NewEnv(nil) + sum := closure_maps.DeclSum(env, "sum") + n := r.ValueOf(sum_n) + + b.ResetTimer() + var total int + for i := 0; i < b.N; i++ { + total += sum(n) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/assignment.go b/vendor/github.com/cosmos72/gomacro/classic/assignment.go new file mode 100644 index 0000000..2756d6c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/assignment.go @@ -0,0 +1,204 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * assignment.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +type placeType struct { + obj r.Value // the map to modify, or a settable r.Value + mapkey r.Value // the map key to set, or Nil +} + +// dummy place for assignment to _ +var _Place = placeType{ + obj: r.ValueOf(struct{}{}), +} + +func (env *Env) evalAssignments(node *ast.AssignStmt) (r.Value, []r.Value) { + left := node.Lhs + right := node.Rhs + op := node.Tok + nleft := len(left) + nright := len(right) + + if nright != 1 && nleft != nright { + return env.Errorf("value count mismatch: cannot assign %d values to %d places: %v", nright, nleft, node) + } + + // side effects happen left to right, with some unspecified cases, + // so first Eval() all node.Lhs, then Eval() all node.Rhs + // https://golang.org/ref/spec#Order_of_evaluation + + if op == token.DEFINE { + names := make([]string, nleft) + for i := 0; i < nleft; i++ { + ident, ok := left[i].(*ast.Ident) + if !ok { + return env.Errorf("variable declaration: invalid identifier: %v", left[i]) + } + names[i] = ident.Name + } + values := env.evalExprsMultipleValues(right, nleft) + return env.defineConstsVarsOrFuncs(names, nil, values, false) + + } else { + places := env.evalPlaces(left) + values := env.evalExprsMultipleValues(right, nleft) + return env.assignPlaces(places, op, values) + } +} + +func (env *Env) evalPlaces(node []ast.Expr) []placeType { + n := len(node) + places := make([]placeType, n) + for i := 0; i < n; i++ { + places[i] = env.evalPlace(node[i]) + } + return places +} + +func (env *Env) evalPlace(node ast.Expr) placeType { + obj := Nil + // ignore parenthesis: (expr) = value is the same as expr = value + for { + if paren, ok := node.(*ast.ParenExpr); ok { + node = paren.X + } else { + break + } + } + switch node := node.(type) { + case *ast.IndexExpr: + obj = env.evalExpr1(node.X) + index := env.evalExpr1(node.Index) + + switch obj.Kind() { + case r.Map: + // make a copy of obj and index, to protect against "evil assignment" m, i, m[i] = nil, 1, 2 where m is a map + if obj != Nil && obj.CanSet() { + obj = obj.Convert(obj.Type()) + } + if index != Nil && index.CanSet() { + index = index.Convert(index.Type()) + } + return placeType{obj, index} + default: + if obj.Kind() != r.Ptr || obj.Elem().Kind() != r.Array { + env.Errorf("unsupported index operation: %v [ %v ]. not an array, map, slice or string: %v <%v>", + node.X, index, obj, typeOf(obj)) + return placeType{} + } + obj = obj.Elem() + fallthrough + case r.Array, r.Slice, r.String: + i, ok := env.toInt(index) + if !ok { + env.Errorf("invalid index, expecting an int: %v <%v>", index, typeOf(index)) + return placeType{} + } + obj = obj.Index(int(i)) + } + case *ast.Ident: + if node.Name == "_" { + return _Place + } + obj = env.evalExpr1(node) + + default: + obj = env.evalExpr1(node) + } + if !obj.CanSet() { + env.Errorf("cannot assign to read-only location: %v", node) + return placeType{} + } + return placeType{obj, Nil} +} + +func (env *Env) assignPlaces(places []placeType, op token.Token, values []r.Value) (r.Value, []r.Value) { + n := len(places) + if n == 1 { + return env.assignPlace(places[0], op, values[0]), nil + } + // the naive loop + // for i := range places { env.assignPlace(places[i], op, values[i]) } + // is bugged. It breaks, among others, the common Go idiom to swap two values: a,b = b,a + // + // More in general, Go guarantees that all assignments happen *as if* + // the rhs values, and all lhs operands of indexing, dereferencing and struct field access, + // were copied to temporary locations before the assignments. + // That's exactly what we must do. + for i := 0; i < n; i++ { + p := &places[i] + v := p.mapkey + if v != Nil && v.CanSet() { + p.mapkey = v.Convert(v.Type()) // r.Value.Convert() makes a copy + } + v = values[i] + if v != Nil && v.CanSet() { + values[i] = v.Convert(v.Type()) // r.Value.Convert() makes a copy + } + } + for i := 0; i < n; i++ { + values[i] = env.assignPlace(places[i], op, values[i]) + } + return UnpackValues(values) +} + +func (env *Env) assignPlace(place placeType, op token.Token, value r.Value) r.Value { + obj := place.obj + if obj == _Place.obj { + return value + } + key := place.mapkey + if key == Nil { + t := typeOf(obj) + value = env.valueToType(value, t) + if op != token.ASSIGN { + value = env.evalBinaryExpr(obj, op, value) + } + obj.Set(value) + return value + } + // map[key] OP value + key = env.valueToType(key, obj.Type().Key()) + + // env.Debugf("setting map[key]: %v <%v> [%v <%v>] %s %v <%v>", obj, TypeOf(obj), key, TypeOf(key), op, value, TypeOf(value)) + + currValue, _, t := env.mapIndex(obj, key) + value = env.valueToType(value, t) + if op != token.ASSIGN { + value = env.evalBinaryExpr(currValue, op, value) + value = env.valueToType(value, t) // in case evalBinaryExpr() converted it + } + obj.SetMapIndex(key, value) + return value +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/binaryexpr.go b/vendor/github.com/cosmos72/gomacro/classic/binaryexpr.go new file mode 100644 index 0000000..ad2edd1 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/binaryexpr.go @@ -0,0 +1,401 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binaryexpr.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + mt "github.com/cosmos72/gomacro/token" +) + +func (env *Env) unsupportedBinaryExpr(xv r.Value, op token.Token, yv r.Value) r.Value { + opstr := mt.String(op) + ret, _ := env.Errorf("unsupported binary operation %s between <%v> and <%v>: %v %s %v", opstr, typeOf(xv), typeOf(yv), xv, opstr, yv) + return ret +} + +func (env *Env) evalBinaryExpr(xv r.Value, op token.Token, yv r.Value) r.Value { + switch xv.Kind() { + case r.Bool: + switch yv.Kind() { + case r.Bool: + return env.evalBinaryExprBoolBool(xv, op, yv) + } + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + x := xv.Int() + switch yv.Kind() { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + return env.evalBinaryExprIntInt(xv, op, yv) + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + return env.evalBinaryExprIntInt(xv, op, r.ValueOf(int64(yv.Uint()))) + case r.Float32, r.Float64: + xv = r.ValueOf(float64(x)).Convert(yv.Type()) + return env.evalBinaryExprFloat(xv, op, yv) + case r.Complex64, r.Complex128: + xv = r.ValueOf(complex(float64(x), 0.0)).Convert(yv.Type()) + return env.evalBinaryExprComplex(xv, op, yv) + } + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + x := xv.Uint() + switch yv.Kind() { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + if yv.Int() < 0 { + return env.evalBinaryExprIntInt(r.ValueOf(int64(x)), op, yv) + } else { + return env.evalBinaryExprUintUint(xv, op, r.ValueOf(uint64(yv.Int()))) + } + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + return env.evalBinaryExprUintUint(xv, op, yv) + case r.Float32, r.Float64: + xv = r.ValueOf(float64(x)).Convert(yv.Type()) + return env.evalBinaryExprFloat(xv, op, yv) + case r.Complex64, r.Complex128: + xv = r.ValueOf(complex(float64(x), 0.0)).Convert(yv.Type()) + return env.evalBinaryExprComplex(xv, op, yv) + } + case r.Float32, r.Float64: + return env.evalBinaryExprFloat(xv, op, yv) + case r.Complex64, r.Complex128: + return env.evalBinaryExprComplex(xv, op, yv) + case r.String: + return env.evalBinaryExprString(xv, op, yv) + default: + return r.ValueOf(env.evalBinaryExprMisc(xv, op, yv)) + } + return env.unsupportedBinaryExpr(xv, op, yv) +} + +func (env *Env) evalBinaryExprBoolBool(xv r.Value, op token.Token, yv r.Value) r.Value { + x := xv.Bool() + y := yv.Bool() + var b bool + switch op { + case token.LAND: // for a short-circuit implementation, see evalExpr + b = x && y + case token.LOR: // for a short-circuit implementation, see evalExpr + b = x || y + case token.EQL: + b = x == y + case token.NEQ: + b = x != y + default: + return env.unsupportedBinaryExpr(xv, op, yv) + } + return r.ValueOf(b) +} + +func (env *Env) evalBinaryExprIntInt(xv r.Value, op token.Token, yv r.Value) r.Value { + x := xv.Int() + y := yv.Int() + var ret int64 + var t r.Type + switch op { + case token.ADD, token.ADD_ASSIGN: + ret = x + y + case token.SUB, token.SUB_ASSIGN: + ret = x - y + case token.MUL, token.MUL_ASSIGN: + ret = x * y + case token.QUO, token.QUO_ASSIGN: + ret = x / y + case token.REM, token.REM_ASSIGN: + ret = x % y + case token.AND, token.AND_ASSIGN: + ret = x & y + case token.OR, token.OR_ASSIGN: + ret = x | y + case token.XOR, token.XOR_ASSIGN: + ret = x ^ y + case token.SHL, token.SHL_ASSIGN: + // in Go, x << y and x >> y require y to be unsigned + ret = x << uint64(y) + t = xv.Type() + case token.SHR, token.SHR_ASSIGN: + ret = x >> uint64(y) + t = xv.Type() + case token.AND_NOT, token.AND_NOT_ASSIGN: + ret = x &^ y + default: + goto PART2 + } + if t == nil { + t = binaryResultType(xv.Type(), yv.Type()) + } + return env.valueToType(r.ValueOf(ret), t) + +PART2: + var b bool + switch op { + case token.EQL: + b = x == y + case token.LSS: + b = x < y + case token.GTR: + b = x > y + case token.NEQ: + b = x != y + case token.LEQ: + b = x <= y + case token.GEQ: + b = x >= y + default: + return env.unsupportedBinaryExpr(r.ValueOf(x), op, r.ValueOf(y)) + } + return r.ValueOf(b) +} + +func (env *Env) evalBinaryExprUintUint(xv r.Value, op token.Token, yv r.Value) r.Value { + x := xv.Uint() + y := yv.Uint() + var ret uint64 + var t r.Type + + switch op { + case token.ADD, token.ADD_ASSIGN: + ret = x + y + case token.SUB, token.SUB_ASSIGN: + ret = x - y + case token.MUL, token.MUL_ASSIGN: + ret = x * y + case token.QUO, token.QUO_ASSIGN: + ret = x / y + case token.REM, token.REM_ASSIGN: + ret = x % y + case token.AND, token.AND_ASSIGN: + ret = x & y + case token.OR, token.OR_ASSIGN: + ret = x | y + case token.XOR, token.XOR_ASSIGN: + ret = x ^ y + case token.SHL, token.SHL_ASSIGN: + ret = x << y + t = xv.Type() + case token.SHR, token.SHR_ASSIGN: + ret = x >> y + t = xv.Type() + case token.AND_NOT, token.AND_NOT_ASSIGN: + ret = x &^ y + default: + goto PART2 + } + if t == nil { + t = binaryResultType(xv.Type(), yv.Type()) + } + return env.valueToType(r.ValueOf(ret), t) + +PART2: + var b bool + switch op { + case token.EQL: + b = x == y + case token.LSS: + b = x < y + case token.GTR: + b = x > y + case token.NEQ: + b = x != y + case token.LEQ: + b = x <= y + case token.GEQ: + b = x >= y + default: + return env.unsupportedBinaryExpr(xv, op, yv) + } + return r.ValueOf(b) +} + +func binaryResultType(xt, yt r.Type) r.Type { + if xt == yt { + return xt + } + // int and uint are used to approximate untyped constants, + // avoid them if possible + if xt == TypeOfInt || xt == TypeOfUint { + return yt + } + if yt == TypeOfInt || yt == TypeOfUint { + return xt + } + // prefer larger types + xs, ys := xt.Size(), yt.Size() + if xs > ys { + return xt + } else if xs < ys { + return yt + } + // prefer named types + xk, yk := xt.Kind(), yt.Kind() + if KindToType(xk) == xt { + return yt + } else if KindToType(yk) == yt { + return xt + } + // prefer types appearing later in reflect.Kind list + if xk >= yk { + return xt + } else { + return yt + } +} + +func (env *Env) evalBinaryExprFloat(xv r.Value, op token.Token, yv r.Value) r.Value { + x := xv.Float() + y, ok := env.toFloat(yv) + if ok { + var ret float64 + switch op { + case token.ADD, token.ADD_ASSIGN: + ret = x + y + case token.SUB, token.SUB_ASSIGN: + ret = x - y + case token.MUL, token.MUL_ASSIGN: + ret = x * y + case token.QUO, token.QUO_ASSIGN: + ret = x / y + default: + goto PART2 + } + if xv.Kind() == r.Float32 { + return r.ValueOf(float32(ret)) + } + return r.ValueOf(ret) + PART2: + var b bool + switch op { + case token.EQL: + b = x == y + case token.LSS: + b = x < y + case token.GTR: + b = x > y + case token.NEQ: + b = x != y + case token.LEQ: + b = x <= y + case token.GEQ: + b = x >= y + default: + return env.unsupportedBinaryExpr(xv, op, yv) + } + return r.ValueOf(b) + } + if yv.Kind() == r.Complex64 || yv.Kind() == r.Complex128 { + xv = r.ValueOf(complex(x, 0.0)).Convert(yv.Type()) + return env.evalBinaryExprComplex(xv, op, yv) + } + return env.unsupportedBinaryExpr(xv, op, yv) +} + +func (env *Env) evalBinaryExprComplex(xv r.Value, op token.Token, yv r.Value) r.Value { + x := xv.Complex() + y, ok := env.toComplex(yv) + if ok { + var ret complex128 + switch op { + case token.ADD, token.ADD_ASSIGN: + ret = x + y + case token.SUB, token.SUB_ASSIGN: + ret = x - y + case token.MUL, token.MUL_ASSIGN: + ret = x * y + case token.QUO, token.QUO_ASSIGN: + ret = x / y + default: + goto PART2 + } + if xv.Kind() == r.Complex64 { + return r.ValueOf(complex64(ret)) + } + return r.ValueOf(ret) + PART2: + var b bool + switch op { + case token.EQL: + b = x == y + case token.NEQ: + b = x != y + default: + return env.unsupportedBinaryExpr(xv, op, yv) + } + return r.ValueOf(b) + } + return env.unsupportedBinaryExpr(xv, op, yv) +} + +func (env *Env) evalBinaryExprString(xv r.Value, op token.Token, yv r.Value) r.Value { + if xv.Kind() != r.String || yv.Kind() != r.String { + return env.unsupportedBinaryExpr(xv, op, yv) + } + x, y := xv.String(), yv.String() + if op == token.ADD || op == token.ADD_ASSIGN { + return r.ValueOf(x + y) + } + var b bool + switch op { + case token.EQL: + b = x == y + case token.LSS: + b = x < y + case token.GTR: + b = x > y + case token.NEQ: + b = x != y + case token.LEQ: + b = x <= y + case token.GEQ: + b = x >= y + default: + return env.unsupportedBinaryExpr(xv, op, yv) + } + if b { + return True + } else { + return False + } +} + +func (env *Env) evalBinaryExprMisc(xv r.Value, op token.Token, yv r.Value) bool { + eql := true + switch op { + case token.EQL: + case token.NEQ: + eql = false + default: + env.unsupportedBinaryExpr(xv, op, yv) + return false + } + if xv == yv { + return eql + } + xnil := xv == Nil || IsNillableKind(xv.Kind()) && xv.IsNil() + ynil := yv == Nil || IsNillableKind(yv.Kind()) && yv.IsNil() + if xnil || ynil { + return eql == (xnil == ynil) + } + return eql == (xv.Interface() == yv.Interface()) +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/builtin.go b/vendor/github.com/cosmos72/gomacro/classic/builtin.go new file mode 100644 index 0000000..17e774e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/builtin.go @@ -0,0 +1,462 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * builtin.go + * + * Created on: Feb 15, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "fmt" + "go/ast" + "io/ioutil" + r "reflect" + + . "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" +) + +func funcAppend(env *Env, args []r.Value) (r.Value, []r.Value) { + n := len(args) + if n < 1 { + return env.Errorf("builtin append() expects at least one argument, found %d", n) + } + t := args[0].Type().Elem() + for i := 1; i < n; i++ { + args[i] = args[i].Convert(t) + } + return r.Append(args[0], args[1:]...), nil +} + +func callCap(arg interface{}) int { + obj := r.ValueOf(arg) + if obj.Kind() == r.Ptr { + // cap() of pointer-to-array returns cap() of array + obj = obj.Elem() + } + return obj.Cap() +} + +func callClose(channel interface{}) { + r.ValueOf(channel).Close() +} + +func funcComplex(env *Env, args []r.Value) (r.Value, []r.Value) { + rv, iv := args[0], args[1] + r_, rok := env.toFloat(rv) + i_, iok := env.toFloat(iv) + if !rok { + return env.Errorf("builtin complex(): not a float: %v <%v>", rv, typeOf(rv)) + } + if !iok { + return env.Errorf("builtin complex(): not a float: %v <%v>", iv, typeOf(iv)) + } + cplx := complex(r_, i_) + var ret interface{} + if rv.Kind() == r.Float32 && iv.Kind() == r.Float32 { + ret = complex64(cplx) + } else { + ret = cplx + } + return r.ValueOf(ret), nil +} + +func callCopy(dst, src interface{}) int { + if src, ok := src.(string); ok { + if dst, ok := dst.([]byte); ok { + // reflect.Copy does not support this case... use the compiler support + return copy(dst, src) + } + } + return r.Copy(r.ValueOf(dst), r.ValueOf(src)) +} + +func callDelete(m interface{}, key interface{}) { + vmap := r.ValueOf(m) + tkey := vmap.Type().Key() + vkey := r.ValueOf(key) + if key != nil && vkey.Type() != tkey { + vkey = vkey.Convert(tkey) + } + vmap.SetMapIndex(vkey, Nil) +} + +func funcEnv(env *Env, args []r.Value) (r.Value, []r.Value) { + return r.ValueOf(env), nil +} + +func funcEval(env *Env, args []r.Value) (r.Value, []r.Value) { + arg := args[0] + if arg == Nil || arg == None { + return arg, nil + } + x := toInterface(arg) + form := AnyToAst(x, "Eval") + return env.EvalAst(form) +} + +func funcEvalType(env *Env, args []r.Value) (r.Value, []r.Value) { + arg := args[0] + if arg == Nil || arg == None { + return arg, nil + } + x := toInterface(arg) + form := UnwrapTrivialAst(AnyToAst(x, "EvalType")) + + switch node := ToNode(form).(type) { + case ast.Expr: + // return nil for *ast.Ident{Name: "nil"} + t := env.evalTypeOrNil(node) + if t == nil { + return Nil, nil + } + // return as reflect.Type, not as the concrete struct *reflect.type + return r.ValueOf(&t).Elem(), nil + default: + return env.Errorf("EvalType: expecting , found: %v <%v>", node, r.TypeOf(node)) + } +} + +func funcImag(env *Env, args []r.Value) (r.Value, []r.Value) { + cv := args[0] + c_, ok := env.toComplex(cv) + if !ok { + return env.Errorf("builtin imag(): not a complex: %v <%v>", cv, typeOf(cv)) + } + i_ := imag(c_) + var ret interface{} + if cv.Kind() == r.Complex64 { + ret = float32(i_) + } else { + ret = i_ + } + return r.ValueOf(ret), nil +} + +func callLen(arg interface{}) int { + obj := r.ValueOf(arg) + if obj.Kind() == r.Ptr { + // len() of pointer-to-array returns len() of array + obj = obj.Elem() + } + return obj.Len() +} + +// +// --------- macroexpansion ---------- +// + +func funcMacroExpand(env *Env, args []r.Value) (r.Value, []r.Value) { + return callMacroExpand(env, args, CMacroExpand) +} + +func funcMacroExpand1(env *Env, args []r.Value) (r.Value, []r.Value) { + return callMacroExpand(env, args, CMacroExpand1) +} + +func funcMacroExpandCodewalk(env *Env, args []r.Value) (r.Value, []r.Value) { + return callMacroExpand(env, args, CMacroExpandCodewalk) +} + +func callMacroExpand(env *Env, args []r.Value, which WhichMacroExpand) (r.Value, []r.Value) { + n := len(args) + if n < 1 || n > 2 { + return env.Errorf("builtin %v() expects one or two arguments, found %d: %v", which, n, args) + } + val := args[0] + if val == Nil || val == None { + return val, nil + } + form := AnyToAst(val.Interface(), which.String()) + if n == 2 { + e := args[1] + if e != Nil && e != None { + env = e.Interface().(*Env) + } + } + var expanded bool + switch which { + case CMacroExpand1: + form, expanded = env.macroExpandAstOnce(form) + case CMacroExpandCodewalk: + form, expanded = env.MacroExpandAstCodewalk(form) + default: + form, expanded = env.macroExpandAst(form) + } + formv := r.ValueOf(form.Interface()) + return formv, []r.Value{formv, r.ValueOf(expanded)} +} + +func funcMake(env *Env, t r.Type, args []r.Value) (r.Value, []r.Value) { + n := len(args) + if n > 2 { + return env.Errorf("builtin make() expects one, two or three arguments, found %d", n+1) + } + ret := Nil + switch t.Kind() { + case r.Chan: + buffer := 0 + if n > 0 { + buffer = int(args[0].Int()) + } + ret = r.MakeChan(t, buffer) + case r.Map: + ret = r.MakeMap(t) + case r.Slice: + length := 0 + if n > 0 { + length = int(args[0].Int()) + } + capacity := length + if n > 1 { + capacity = int(args[1].Int()) + } + ret = r.MakeSlice(t, length, capacity) + } + return ret, nil +} + +func funcNew(env *Env, t r.Type, args []r.Value) (r.Value, []r.Value) { + return r.New(t), nil +} + +func funcParse(env *Env, args []r.Value) (r.Value, []r.Value) { + var in interface{} + if arg := args[0]; arg != Nil && arg != None { + in = arg.Interface() + } + out := env.Parse(in) + if out != nil { + return r.ValueOf(out.Interface()), nil + } + return Nil, nil +} + +func callPanic(arg interface{}) { + panic(arg) +} + +func funcReal(env *Env, args []r.Value) (r.Value, []r.Value) { + n := len(args) + if n != 1 { + return env.Errorf("builtin real() expects exactly one argument, found %d", n) + } + cv := args[0] + c_, ok := env.toComplex(cv) + if !ok { + return env.Errorf("builtin real(): not a complex: %v <%v>", cv, typeOf(cv)) + } + i_ := real(c_) + var ret interface{} + if cv.Kind() == r.Complex64 { + ret = float32(i_) + } else { + ret = i_ + } + return r.ValueOf(ret), nil +} + +func callReadFile(filename string) string { + bytes, err := ioutil.ReadFile(filename) + if err != nil { + callPanic(err) + } + return string(bytes) +} + +func callReadDir(dirname string) []string { + files, err := ioutil.ReadDir(dirname) + if err != nil { + callPanic(err) + } + n := len(files) + names := make([]string, n) + for i := 0; i < n; i++ { + names[i] = files[i].Name() + } + return names +} + +func funcRecover(env *Env, args []r.Value) (r.Value, []r.Value) { + // Go specs: "Executing a call to recover inside a deferred function + // (but not any function called by it) stops the panicking sequence + // by restoring normal execution and retrieves the error value passed to the call of panic" + // + // thus recover() is invoked inside deferred functions: find their caller's env + ret := Nil + + trace := env.Options&OptDebugPanicRecover != 0 + caller := env.CallerFrame() + if trace { + env.Debugf("recover(): env = %v, stack is:", env.Name) + env.showStack() + curr := env.CurrentFrame() + if curr != nil { + env.Debugf(" frame = %v, runningDefers = %v", curr.FuncEnv.Name, curr.runningDefers) + } else { + env.Debugf(" frame = nil") + } + if caller != nil { + env.Debugf(" caller = %v, runningDefers = %v", caller.FuncEnv.Name, caller.runningDefers) + } else { + env.Debugf(" caller = nil") + } + } + + if caller != nil { + if caller.runningDefers && caller.panicking { + // consume current panic + if trace { + env.Debugf(" consuming current panic = %#v", caller.panick) + } + ret = r.ValueOf(caller.panick) + caller.panick = nil + caller.panicking = false + } else if trace { + env.Debugf(" no panic to consume: caller.runningDefers = %q, caller.panicking = %q", + caller.runningDefers, caller.panicking) + } + } + return ret, nil +} + +func callSlice(args ...interface{}) []interface{} { + return args +} + +func funcValues(env *Env, args []r.Value) (r.Value, []r.Value) { + for i, arg := range args { + // go through interface{} to forget any "static" compile-time type information + if arg != None && arg != Nil { + args[i] = r.ValueOf(arg.Interface()) + } + } + return UnpackValues(args) +} + +func (top *Env) addIota() { + top.Binds.Set("iota", r.ValueOf(0)) +} + +func (top *Env) removeIota() { + top.Binds.Del("iota") +} + +func (top *Env) incrementIota() { + uIota := int(top.Binds.Get1("iota").Int()) + top.Binds.Set("iota", r.ValueOf(uIota+1)) +} + +func (env *Env) addBuiltins() { + binds := env.Binds.Ensure() + + binds.Set("Env", r.ValueOf(Function{funcEnv, 0})) + binds.Set("Eval", r.ValueOf(Function{funcEval, 1})) + binds.Set("EvalType", r.ValueOf(Function{funcEvalType, 1})) + binds.Set("MacroExpand", r.ValueOf(Function{funcMacroExpand, -1})) + binds.Set("MacroExpand1", r.ValueOf(Function{funcMacroExpand1, -1})) + binds.Set("MacroExpandCodewalk", r.ValueOf(Function{funcMacroExpandCodewalk, -1})) + binds.Set("Parse", r.ValueOf(Function{funcParse, 1})) + binds.Set("Read", r.ValueOf(ReadString)) + binds.Set("ReadDir", r.ValueOf(callReadDir)) + binds.Set("ReadFile", r.ValueOf(callReadFile)) + binds.Set("ReadMultiline", r.ValueOf(ReadMultiline)) + binds.Set("Slice", r.ValueOf(callSlice)) + binds.Set("String", r.ValueOf(func(args ...interface{}) string { + return env.ToString("", args...) + })) + // return multiple values, extracting the concrete type of each interface + binds.Set("Values", r.ValueOf(Function{funcValues, -1})) + + binds.Set("append", r.ValueOf(Function{funcAppend, -1})) + binds.Set("cap", r.ValueOf(callCap)) + binds.Set("close", r.ValueOf(callClose)) + binds.Set("complex", r.ValueOf(Function{funcComplex, 2})) + binds.Set("copy", r.ValueOf(callCopy)) + binds.Set("delete", r.ValueOf(callDelete)) + binds.Set("false", r.ValueOf(false)) + binds.Set("imag", r.ValueOf(Function{funcImag, 1})) + binds.Set("len", r.ValueOf(callLen)) + binds.Set("make", r.ValueOf(Constructor{funcMake, -1})) + binds.Set("new", r.ValueOf(Constructor{funcNew, 1})) + binds.Set("nil", Nil) + binds.Set("panic", r.ValueOf(callPanic)) + binds.Set("print", r.ValueOf(func(args ...interface{}) { + fmt.Fprint(env.Stdout, args...) + })) + binds.Set("println", r.ValueOf(func(args ...interface{}) { + fmt.Fprintln(env.Stdout, args...) + })) + binds.Set("real", r.ValueOf(Function{funcReal, 1})) + binds.Set("recover", r.ValueOf(Function{funcRecover, 0})) + binds.Set("true", r.ValueOf(true)) + + // --------- types --------- + types := env.Types.Ensure() + + types.Set("bool", r.TypeOf(false)) + types.Set("byte", r.TypeOf(byte(0))) + types.Set("complex64", r.TypeOf(complex64(0))) + types.Set("complex128", r.TypeOf(complex128(0))) + types.Set("error", r.TypeOf((*error)(nil)).Elem()) + types.Set("float32", r.TypeOf(float32(0))) + types.Set("float64", r.TypeOf(float64(0))) + types.Set("int", r.TypeOf(int(0))) + types.Set("int8", r.TypeOf(int8(0))) + types.Set("int16", r.TypeOf(int16(0))) + types.Set("int32", r.TypeOf(int32(0))) + types.Set("int64", r.TypeOf(int64(0))) + types.Set("rune", r.TypeOf(rune(0))) + types.Set("string", r.TypeOf("")) + types.Set("uint", r.TypeOf(uint(0))) + types.Set("uint8", r.TypeOf(uint8(0))) + types.Set("uint16", r.TypeOf(uint16(0))) + types.Set("uint32", r.TypeOf(uint32(0))) + types.Set("uint64", r.TypeOf(uint64(0))) + types.Set("uintptr", r.TypeOf(uintptr(0))) + + // --------- proxies --------- + proxies := env.Proxies.Ensure() + + proxies.Set("error", r.TypeOf((*Error_builtin)(nil)).Elem()) +} + +type Error_builtin struct { + Obj interface{} + Error_ func() string +} + +func (Proxy *Error_builtin) Error() string { + return Proxy.Error_() +} + +func (env *Env) addInterpretedBuiltins() { + if false { + line := "func not(flag bool) bool { if flag { return false } else { return true } }" + env.EvalAst(env.Parse(line)) + } + if false { + // Factorial(1000000): eval() elapsed time: 1.233714899 s + line := "func Factorial(n int) int { t := 1; for i := 2; i <= n; i=i+1 { t = t * i }; t }" + env.EvalAst(env.Parse(line)) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/call.go b/vendor/github.com/cosmos72/gomacro/classic/call.go new file mode 100644 index 0000000..493a9e2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/call.go @@ -0,0 +1,279 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call.go + * + * Created on: Mar 30, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +// eval an interpreted function +func (env *Env) evalFuncCall(envName string, body *ast.BlockStmt, t r.Type, argNames []string, args []r.Value, resultNames []string) (results []r.Value) { + if t.Kind() != r.Func { + env.Errorf("call of non-function type %v", t) + return nil + } + env = NewEnv(env, envName) + // register this function call in the call stack + env.CallStack.Frames = append(env.CallStack.Frames, CallFrame{FuncEnv: env}) + debugCall := env.Options&OptDebugCallStack != 0 + if debugCall { + env.Debugf("func starting: %s, args = %v, call stack is:", envName, args) + env.showStack() + } + + panicking := true // use a flag to distinguish non-panic from panic(nil) + defer func() { + if debugCall { + env.Debugf("func exiting: %s, panicking = %v, stack length = %d", + envName, panicking, len(env.CallStack.Frames)) + } + frame := env.CurrentFrame() + if panicking { + pan := recover() + switch p := pan.(type) { + case eReturn: + // return is implemented with a panic(eReturn{}) + results = env.convertFuncCallResults(t, p.results, true) + default: // some interpreted or compiled code invoked panic() + if env.Options&OptDebugPanicRecover != 0 { + env.Debugf("captured panic for defers: env = %v, panic = %#v", env.Name, p) + } + frame.panick = p + frame.panicking = true + } + } + if len(frame.defers) != 0 { + frame.runDefers(env) + } + stack := env.CallStack + stack.Frames = stack.Frames[0 : len(stack.Frames)-1] + + if debugCall { + str := "is" + if frame.panicking { + str = "=" + } + env.Debugf("func exited: %s, panic %s %v, stack length = %d", + envName, str, frame.panick, len(stack.Frames)) + } + + if frame.panicking { + panic(frame.panick) + } + }() + + for i, resultName := range resultNames { + env.DefineVar(resultName, t.Out(i), r.Zero(t.Out(i))) + } + for i, argName := range argNames { + env.DefineVar(argName, t.In(i), args[i]) + } + // use evalStatements(), not evalBlock(): in Go, the function arguments and body are in the same scope + rets := PackValues(env.evalStatements(body.List)) + results = env.convertFuncCallResults(t, rets, false) + panicking = false + return results +} + +func (env *Env) convertFuncCallResults(t r.Type, rets []r.Value, warn bool) []r.Value { + retsN := len(rets) + expectedN := t.NumOut() + if retsN < expectedN { + if warn { + env.Warnf("not enough return values: expecting %d, found %d: %v", expectedN, retsN, rets) + } + tmp := make([]r.Value, expectedN) + copy(tmp, rets) + rets = tmp + } else if retsN > expectedN { + if warn { + env.Warnf("too many return values: expecting %d, found %d: %v", expectedN, retsN, rets) + } + rets = rets[:expectedN] + } + for i, ret := range rets { + ti := t.Out(i) + if ret == Nil || ret == None { + rets[i] = r.Zero(ti) + } else { + rets[i] = ret.Convert(ti) + } + } + return rets +} + +func (frame *CallFrame) runDefers(env *Env) { + // execute defers last-to-first + frame.runningDefers = true + if env.Options&OptDebugCallStack != 0 { + str := "is" + if frame.panicking { + str = "=" + } + env.Debugf("func defers: %s, panic %s %v, stack length = %d", + env.Name, str, frame.panick, len(env.CallStack.Frames)) + } + defers := frame.defers + for i := len(defers) - 1; i >= 0; i-- { + frame.runDefer(defers[i]) + } +} + +func (frame *CallFrame) runDefer(deferred func()) { + // invoking panic() inside a deferred function exits it with a panic, + // but the previously-installed deferred functions are still executed + // and can recover() such panic + + panicking := true // use a flag to distinguish non-panic from panic(nil) + defer func() { + if panicking { + frame.panick = recover() + frame.panicking = true + } + }() + deferred() + panicking = false +} + +func (env *Env) evalCall(node *ast.CallExpr) (r.Value, []r.Value) { + var fun r.Value + var t r.Type + if len(node.Args) == 1 { + // may be a type conversion + fun, t = env.evalExpr1OrType(node.Fun) + } else { + fun = env.evalExpr1(node.Fun) + } + + if t != nil { + val := env.evalExpr1(node.Args[0]) + return env.valueToType(val, t), nil + } + + { + frames := env.CallStack.Frames + frame := &frames[len(frames)-1] + frame.CurrentCall = node + frame.InnerEnv = env // leaks a bit... should be cleared after the call + } + + switch fun.Kind() { + case r.Struct: + switch fun := fun.Interface().(type) { + case Constructor: + t, args := env.evalConstructorArgs(fun, node) + return fun.exec(env, t, args) + case Function: + args := env.evalFunctionArgs(fun, node) + return fun.exec(env, args) + } + case r.Func: + args := env.evalFuncArgs(fun, node) + var rets []r.Value + + if node.Ellipsis == token.NoPos { + rets = fun.Call(args) + } else { + rets = fun.CallSlice(args) + } + return UnpackValues(rets) + default: + break + } + return env.Errorf("call of non-function %v <%v>: %v", ValueInterface(fun), ValueType(fun), node) +} + +func (env *Env) evalConstructorArgs(fun Constructor, node *ast.CallExpr) (r.Type, []r.Value) { + args := node.Args + if fun.argNum >= 0 && fun.argNum != len(args) { + env.Errorf("builtin %v expects %d arguments, found %d", + node.Fun, fun.argNum, len(args)) + } else if len(args) == 0 { + env.Errorf("builtin %v expects at least one argument, found zero", node.Fun) + } + t := env.evalType(args[0]) + return t, env.evalExprs(args[1:]) +} + +func (env *Env) evalFunctionArgs(fun Function, node *ast.CallExpr) []r.Value { + args := node.Args + if fun.argNum >= 0 && fun.argNum != len(args) { + env.Errorf("function %v expects %d arguments, found %d", + node.Fun, fun.argNum, len(args)) + } + return env.evalExprs(args) +} + +func (env *Env) evalFuncArgs(fun r.Value, node *ast.CallExpr) []r.Value { + funt := fun.Type() + nin := funt.NumIn() + var args []r.Value + if len(node.Args) == 1 && nin > 1 { + // special case fooAcceptsMultipleArgs( barReturnsMultipleValues() ) + args = env.evalExprsMultipleValues(node.Args, nin) + } else { + args = env.evalExprs(node.Args) + } + if funt.IsVariadic() == (node.Ellipsis != token.NoPos) { + if len(args) != nin { + env.Errorf("function %v expects %d arguments, found %d: %v", node.Fun, nin, len(args), args) + return nil + } + for i, arg := range args { + args[i] = env.valueToType(arg, funt.In(i)) + } + } + return args +} + +func (env *Env) evalDefer(node *ast.CallExpr) (r.Value, []r.Value) { + frame := env.CurrentFrame() + if frame == nil { + return env.Errorf("defer outside function: %v", node) + } + fun := env.evalExpr1(node.Fun) + if fun.Kind() != r.Func { + return env.Errorf("defer of non-function: %v", node) + } + args := env.evalFuncArgs(fun, node) + closure := func() { + var rets []r.Value + if node.Ellipsis == token.NoPos { + rets = fun.Call(args) + } else { + rets = fun.CallSlice(args) + } + if len(rets) != 0 { + env.Warnf("call to deferred function %v returned %d values, expecting zero: %v", node, rets) + } + } + frame.defers = append(frame.defers, closure) + return None, nil +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/declaration.go b/vendor/github.com/cosmos72/gomacro/classic/declaration.go new file mode 100644 index 0000000..04f1b0e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/declaration.go @@ -0,0 +1,209 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * declaration.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "fmt" + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func (env *Env) evalDecl(node ast.Decl) (r.Value, []r.Value) { + switch node := node.(type) { + case *ast.GenDecl: + return env.evalDeclGen(node) + case *ast.FuncDecl: + return env.evalDeclFunction(node, node.Type, node.Body) + default: + return env.Errorf("unimplemented declaration: %v", node) + } +} + +func (env *Env) evalDeclGen(node *ast.GenDecl) (r.Value, []r.Value) { + tok := node.Tok + var ret r.Value + var rets []r.Value + switch tok { + case token.IMPORT: + for _, decl := range node.Specs { + ret, rets = env.evalImport(decl) + } + case token.CONST: + var defaultType ast.Expr + var defaultExprs []ast.Expr + top := env.TopEnv() + top.addIota() + defer top.removeIota() + for _, decl := range node.Specs { + ret, rets = env.evalDeclConsts(decl, defaultType, defaultExprs) + if valueSpec, ok := decl.(*ast.ValueSpec); ok && valueSpec.Values != nil { + defaultType = valueSpec.Type + defaultExprs = valueSpec.Values + } + top.incrementIota() + } + case token.TYPE: + for _, decl := range node.Specs { + return env.evalDeclType(decl) + } + case token.VAR: + for _, decl := range node.Specs { + ret, rets = env.evalDeclVars(decl) + } + default: + return env.Errorf("unimplemented declaration: %v", node) + } + return ret, rets +} + +func (env *Env) evalDeclConsts(node ast.Spec, defaultType ast.Expr, defaultExprs []ast.Expr) (r.Value, []r.Value) { + switch node := node.(type) { + case *ast.ValueSpec: + if node.Type != nil || node.Values != nil { + defaultType = node.Type + defaultExprs = node.Values + } + return env.evalDeclConstsOrVars(node.Names, defaultType, defaultExprs, true) + default: + return env.Errorf("unexpected constant declaration: expecting *ast.ValueSpec, found: %v <%v>", node, r.TypeOf(node)) + } +} + +func (env *Env) evalDeclType(node ast.Spec) (r.Value, []r.Value) { + switch node := node.(type) { + case *ast.TypeSpec: + name := node.Name.Name + // PATCH: support type aliases + if unary, ok := node.Type.(*ast.UnaryExpr); ok && unary.Op == token.ASSIGN { + t := env.evalTypeAlias(name, unary.X) + return r.ValueOf(&t).Elem(), nil // return a reflect.Type, not the concrete type + } + + t := env.evalType(node.Type) + if name != "_" { + // never define bindings for "_" + if _, ok := env.Types.Get(name); ok { + env.Warnf("redefined type: %v", name) + } else { + env.Types.Ensure() + } + env.Types.Set(name, t) + if _, ok := env.NamedTypes[t]; !ok { + env.NamedTypes[t] = fmt.Sprintf("%s.%s", env.PackagePath, name) + } + } + return r.ValueOf(&t).Elem(), nil // return a reflect.Type, not the concrete type + + default: + return env.Errorf("unexpected type declaration: expecting *ast.TypeSpec, found: %v <%v>", node, r.TypeOf(node)) + } +} + +func (env *Env) evalDeclVars(node ast.Spec) (r.Value, []r.Value) { + switch node := node.(type) { + case *ast.ValueSpec: + return env.evalDeclConstsOrVars(node.Names, node.Type, node.Values, false) + default: + return env.Errorf("unexpected variable declaration: expecting *ast.ValueSpec, found: %v <%v>", node, r.TypeOf(node)) + } +} + +func (env *Env) evalDeclConstsOrVars(idents []*ast.Ident, typ ast.Expr, exprs []ast.Expr, constant bool) (r.Value, []r.Value) { + n := len(idents) + names := make([]string, n) + for i, ident := range idents { + names[i] = ident.Name + } + t := env.evalType(typ) + + var values []r.Value + if exprs != nil { + values = env.evalExprsMultipleValues(exprs, n) + } + return env.defineConstsVarsOrFuncs(names, t, values, constant) +} + +func (env *Env) defineConstsVarsOrFuncs(names []string, t r.Type, values []r.Value, constant bool) (r.Value, []r.Value) { + n := len(names) + if values == nil { + if t == nil { + return env.Errorf("no values and no type: cannot define %v", names) + } + values = make([]r.Value, n) + zero := r.Zero(t) + for i := 0; i < n; i++ { + values[i] = env.defineConstVarOrFunc(names[i], t, zero, constant) + } + } else { + for i := 0; i < n; i++ { + values[i] = env.defineConstVarOrFunc(names[i], t, values[i], constant) + } + } + return UnpackValues(values) +} + +func (env *Env) DefineConst(name string, t r.Type, value r.Value) r.Value { + return env.defineConstVarOrFunc(name, t, value, true) +} + +func (env *Env) DefineVar(name string, t r.Type, value r.Value) r.Value { + return env.defineConstVarOrFunc(name, t, value, false) +} + +func (env *Env) DefineFunc(name string, t r.Type, value r.Value) r.Value { + return env.defineConstVarOrFunc(name, t, value, true) +} + +func (env *Env) defineConstVarOrFunc(name string, t r.Type, value r.Value, constant bool) r.Value { + if name == "_" { + // never define bindings for "_" + if t != nil { + value = env.valueToType(value, t) + } + return value + } + if t == nil { + t = typeOf(value) + } + if _, found := env.Binds.Get(name); found { + env.Warnf("redefined identifier: %v", name) + } else { + env.Binds.Ensure() + } + if constant { + value = value.Convert(t) + env.Binds.Set(name, value) + } else { + addr := r.New(t) + value = env.assignPlace(placeType{addr.Elem(), Nil}, token.ASSIGN, value) + env.Binds.Set(name, addr.Elem()) + } + // Debugf("defineConstVarOrFunc() added %#v to %#v", name, env.Binds) + return value +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/env.go b/vendor/github.com/cosmos72/gomacro/classic/env.go new file mode 100644 index 0000000..32c06ff --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/env.go @@ -0,0 +1,195 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * env.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "bufio" + "fmt" + "io" + r "reflect" + + . "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" + "github.com/cosmos72/gomacro/imports" +) + +type ThreadGlobals struct { + Globals + AllMethods map[r.Type]Methods // methods implemented by interpreted code + FastInterp interface{} // *fast.Interp // temporary... +} + +func NewThreadGlobals() *ThreadGlobals { + tg := &ThreadGlobals{ + AllMethods: make(map[r.Type]Methods), + } + tg.Globals.Init() + return tg +} + +type Env struct { + *ThreadGlobals + Binds BindMap + Types TypeMap + Proxies TypeMap + Outer *Env + CallStack *CallStack + iotaOffset int + Name, Path string +} + +func NewEnv(outer *Env, path string) *Env { + env := &Env{ + iotaOffset: 1, + Outer: outer, + Name: path, + Path: path, + } + if outer == nil { + env.ThreadGlobals = NewThreadGlobals() + env.CallStack = &CallStack{Frames: []CallFrame{CallFrame{}}} + env.addBuiltins() + env.addInterpretedBuiltins() + } else { + env.ThreadGlobals = outer.ThreadGlobals + env.CallStack = outer.CallStack + } + return env +} + +func (env *Env) TopEnv() *Env { + for ; env != nil; env = env.Outer { + if env.Outer == nil { + break + } + } + return env +} + +func (env *Env) FileEnv() *Env { + for ; env != nil; env = env.Outer { + outer := env.Outer + if outer == nil || outer.Outer == nil { + break + } + } + return env +} + +func (env *Env) AsPackage() imports.Package { + return imports.Package{ + Binds: env.Binds.AsMap(), + Types: env.Types.AsMap(), + Proxies: env.Proxies.AsMap(), + } +} + +func (env *Env) MergePackage(pkg imports.Package) { + env.Binds.Ensure().Merge(pkg.Binds) + env.Types.Ensure().Merge(pkg.Types) + env.Proxies.Ensure().Merge(pkg.Proxies) +} + +func (env *Env) ChangePackage(name string) *Env { + fenv := env.FileEnv() + currname := fenv.ThreadGlobals.PackagePath + if name == currname { + return env + } + fenv.AsPackage().SaveToPackages(currname) + + nenv := NewEnv(fenv.TopEnv(), name) + nenv.MergePackage(imports.Packages[name]) + nenv.ThreadGlobals.PackagePath = name + + return nenv +} + +// CurrentFrame returns the CallFrame representing the current function call +func (env *Env) CurrentFrame() *CallFrame { + if env != nil { + frames := env.CallStack.Frames + if n := len(frames); n > 0 { + return &frames[n-1] + } + } + return nil +} + +// CallerFrame returns the CallFrame representing the caller's function. +// needed by recover() +func (env *Env) CallerFrame() *CallFrame { + if env != nil { + frames := env.CallStack.Frames + if n := len(frames); n > 1 { + return &frames[n-2] + } + } + return nil +} + +// ValueOf returns the value of a constant, function or variable. +// for variables, the returned reflect.Value is settable and addressable +// returns the zero reflect.Value if not found +func (env *Env) ValueOf(name string) (value r.Value) { + found := false + for e := env; e != nil; e = e.Outer { + if value, found = e.Binds.Get(name); found { + break + } + } + return +} + +func (env *Env) ReadMultiline(in *bufio.Reader, opts ReadOptions) (str string, firstToken int) { + str, firstToken, err := ReadMultiline(in, opts, env.Stdout, "gomacro> ") + if err != nil && err != io.EOF { + fmt.Fprintf(env.Stderr, "// read error: %s\n", err) + } + return str, firstToken +} + +// macroexpand + collect + eval +func (env *Env) ClassicEval(form Ast) (r.Value, []r.Value) { + // macroexpansion phase. + form, _ = env.MacroExpandAstCodewalk(form) + + if env.Options&OptShowMacroExpand != 0 { + env.Debugf("after macroexpansion: %v", form.Interface()) + } + + // collect phase + if env.Options&(OptCollectDeclarations|OptCollectStatements) != 0 { + env.CollectAst(form) + } + + // eval phase + if env.Options&OptMacroExpandOnly != 0 { + return r.ValueOf(form.Interface()), nil + } else { + return env.EvalAst(form) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/env_multithread.go b/vendor/github.com/cosmos72/gomacro/classic/env_multithread.go new file mode 100644 index 0000000..a47d2db --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/env_multithread.go @@ -0,0 +1,134 @@ +// +build !gomacro_classic_singlethread + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * env.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + r "reflect" + + "golang.org/x/sync/syncmap" +) + +const MultiThread = true + +type BindMap syncmap.Map + +// ALWAYS use pointers to syncmap.Map, because https://godoc.org/golang.org/x/sync/syncmap#Map +// states "A Map must not be copied after first use." +func (m *BindMap) Ensure() *BindMap { + return m +} + +func (m *BindMap) Clear() { + *m = BindMap{} +} + +func (m *BindMap) Merge(binds map[string]r.Value) { + for k, v := range binds { + (*syncmap.Map)(m).Store(k, v) + } +} + +func (m *BindMap) AsMap() map[string]r.Value { + ret := make(map[string]r.Value) + (*syncmap.Map)(m).Range(func(k, v interface{}) bool { + ret[k.(string)] = v.(r.Value) + return true + }) + return ret +} + +func (m *BindMap) Get(key string) (r.Value, bool) { + val, ok := (*syncmap.Map)(m).Load(key) + if !ok { + return r.Value{}, false + } + return val.(r.Value), ok +} + +func (m *BindMap) Get1(key string) r.Value { + val, _ := (*syncmap.Map)(m).Load(key) + return val.(r.Value) +} + +func (m *BindMap) Set(key string, val r.Value) { + (*syncmap.Map)(m).Store(key, val) +} + +func (m *BindMap) Del(key string) { + (*syncmap.Map)(m).Delete(key) +} + +// ----------------------------------------- + +type TypeMap syncmap.Map + +// ALWAYS use pointers to TypeMap, because https://godoc.org/golang.org/x/sync/syncmap#Map +// states "A Map must not be copied after first use." +func (m *TypeMap) Ensure() *TypeMap { + return m +} + +func (m *TypeMap) Clear() { + *m = TypeMap{} +} + +func (m *TypeMap) Merge(binds map[string]r.Type) { + for k, v := range binds { + (*syncmap.Map)(m).Store(k, v) + } +} + +func (m *TypeMap) AsMap() map[string]r.Type { + ret := make(map[string]r.Type) + (*syncmap.Map)(m).Range(func(k, v interface{}) bool { + ret[k.(string)] = v.(r.Type) + return true + }) + return ret +} + +func (m *TypeMap) Get(key string) (r.Type, bool) { + val, ok := (*syncmap.Map)(m).Load(key) + if !ok { + return nil, false + } + return val.(r.Type), ok +} + +func (m *TypeMap) Get1(key string) r.Type { + val, _ := (*syncmap.Map)(m).Load(key) + return val.(r.Type) +} + +func (m *TypeMap) Set(key string, val r.Type) { + (*syncmap.Map)(m).Store(key, val) +} + +func (m *TypeMap) Del(key string) { + (*syncmap.Map)(m).Delete(key) +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/env_singlethread.go b/vendor/github.com/cosmos72/gomacro/classic/env_singlethread.go new file mode 100644 index 0000000..ec82b5a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/env_singlethread.go @@ -0,0 +1,114 @@ +// +build gomacro_classic_singlethread + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * env.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + r "reflect" +) + +const MultiThread = false + +type BindMap map[string]r.Value + +func (m *BindMap) Ensure() BindMap { + if *m == nil { + *m = make(map[string]r.Value) + } + return *m +} + +func (m *BindMap) Clear() { + *m = make(map[string]r.Value) +} + +func (m BindMap) Merge(binds map[string]r.Value) { + // make a copy. we do NOT want to modify binds! + for k, v := range binds { + m[k] = v + } +} + +func (m BindMap) AsMap() map[string]r.Value { + return m +} + +func (m BindMap) Get(key string) (r.Value, bool) { + val, ok := m[key] + return val, ok +} + +func (m BindMap) Get1(key string) r.Value { + return m[key] +} + +func (m BindMap) Set(key string, val r.Value) { + m[key] = val +} + +func (m BindMap) Del(key string) { + delete(m, key) +} + +// ----------------------------------------- + +type TypeMap map[string]r.Type + +func (m *TypeMap) Ensure() TypeMap { + if *m == nil { + *m = make(map[string]r.Type) + } + return *m +} + +func (m *TypeMap) Clear() { + *m = make(map[string]r.Type) +} + +func (m TypeMap) Merge(types map[string]r.Type) { + // make a copy. we do NOT want to modify types! + for k, v := range types { + m[k] = v + } +} + +func (m TypeMap) AsMap() map[string]r.Type { + return m +} + +func (m TypeMap) Get(key string) (r.Type, bool) { + val, ok := m[key] + return val, ok +} + +func (m TypeMap) Set(key string, val r.Type) { + m[key] = val +} + +func (m TypeMap) Del(key string) { + delete(m, key) +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/eval.go b/vendor/github.com/cosmos72/gomacro/classic/eval.go new file mode 100644 index 0000000..c1bdbf1 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/eval.go @@ -0,0 +1,141 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * eval.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" +) + +func (env *Env) Eval(src interface{}) (r.Value, []r.Value) { + return env.EvalAst(env.Parse(src)) +} + +func (env *Env) Eval1(src interface{}) r.Value { + return env.EvalAst1(env.Parse(src)) +} + +func (env *Env) EvalAst1(in Ast) r.Value { + value, extraValues := env.EvalAst(in) + if len(extraValues) > 1 { + env.WarnExtraValues(extraValues) + } + return value +} + +func (env *Env) EvalAst(in Ast) (r.Value, []r.Value) { + switch in := in.(type) { + case AstWithNode: + if in != nil { + return env.EvalNode(ToNode(in)) + } + case AstWithSlice: + if in != nil { + var ret r.Value + var rets []r.Value + n := in.Size() + for i := 0; i < n; i++ { + ret, rets = env.EvalNode(ToNode(in.Get(i))) + } + return ret, rets + } + case nil: + return None, nil + default: + return env.Errorf("EvalAst(): expecting or , found: %v <%v>", + in, r.TypeOf(in)) + } + return env.Errorf("EvalAst(): expecting or , found: nil") +} + +func (env *Env) EvalNode(node ast.Node) (r.Value, []r.Value) { + switch node := node.(type) { + case ast.Decl: + return env.evalDecl(node) + case ast.Expr: + return env.evalExpr(node) + case ast.Stmt: + return env.evalStatement(node) + case *ast.File: + return env.evalFile(node) + default: + return env.Errorf("unimplemented Eval for %v <%v>", node, r.TypeOf(node)) + } +} + +func (env *Env) EvalNode1(node ast.Node) r.Value { + value, extraValues := env.EvalNode(node) + if len(extraValues) > 1 { + env.WarnExtraValues(extraValues) + } + return value +} + +// parse, without macroexpansion +func (env *Env) ParseOnly(src interface{}) Ast { + var form Ast + switch src := src.(type) { + case Ast: + form = src + case ast.Node: + form = ToAst(src) + default: + bytes := ReadBytes(src) + nodes := env.ParseBytes(bytes) + + if env.Options&OptShowParse != 0 { + env.Debugf("after parse: %v", nodes) + } + switch len(nodes) { + case 0: + form = nil + case 1: + form = ToAst(nodes[0]) + default: + form = NodeSlice{X: nodes} + } + } + return form +} + +// Parse, with macroexpansion +func (env *Env) Parse(src interface{}) Ast { + form := env.ParseOnly(src) + + // macroexpansion phase. + form, _ = env.MacroExpandAstCodewalk(form) + + if env.Options&OptShowMacroExpand != 0 { + env.Debugf("after macroexpansion: %v", form.Interface()) + } + if env.Options&(OptCollectDeclarations|OptCollectStatements) != 0 { + env.CollectAst(form) + } + return form +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/expr.go b/vendor/github.com/cosmos72/gomacro/classic/expr.go new file mode 100644 index 0000000..abb6088 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/expr.go @@ -0,0 +1,345 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * expr.go + * + * Created on: Feb 15, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + mt "github.com/cosmos72/gomacro/token" +) + +func (env *Env) evalExprsMultipleValues(nodes []ast.Expr, expectedValuesN int) []r.Value { + n := len(nodes) + var values []r.Value + if n != expectedValuesN { + if n != 1 { + env.Errorf("value count mismatch: cannot assign %d values to %d places: %v", + n, expectedValuesN, nodes) + return nil + } + node := nodes[0] + // collect multiple values + values = PackValues(env.EvalNode(node)) + n = len(values) + if n < expectedValuesN { + env.Errorf("value count mismatch: expression returned %d values, cannot assign them to %d places: %v returned %v", + n, expectedValuesN, node, values) + return nil + } else if n > expectedValuesN { + env.Warnf("expression returned %d values, using only %d of them: %v returned %v", + n, expectedValuesN, node, values) + } + } else { + values = env.evalExprs(nodes) + } + return values +} + +func (env *Env) evalExprs(nodes []ast.Expr) []r.Value { + switch n := len(nodes); n { + case 0: + return nil + case 1: + ret := env.evalExpr1(nodes[0]) + return []r.Value{ret} + default: + rets := make([]r.Value, n) + for i := range nodes { + rets[i] = env.evalExpr1(nodes[i]) + } + return rets + } +} + +func (env *Env) evalExpr1(node ast.Expr) r.Value { + // treat failed type assertions specially: in compiled Go, they panic in single-value context + for { + switch expr := node.(type) { + case *ast.ParenExpr: + node = expr.X + continue + case *ast.TypeAssertExpr: + value, _ := env.evalTypeAssertExpr(expr, true) + return value + } + break + } + value, extraValues := env.evalExpr(node) + if len(extraValues) > 1 { + env.WarnExtraValues(extraValues) + } + return value +} + +func (env *Env) evalExpr(in ast.Expr) (r.Value, []r.Value) { + for { + if in != nil { + env.Pos = in.Pos() + } + // env.Debugf("evalExpr() %v", node) + switch node := in.(type) { + case *ast.BasicLit: + ret := env.evalLiteral0(node) + return r.ValueOf(ret), nil + + case *ast.BinaryExpr: + xv := env.evalExpr1(node.X) + switch op := node.Op; op { + case token.LAND, token.LOR: + if xv.Kind() != r.Bool { + return env.unsupportedLogicalOperand(op, xv) + } + // implement short-circuit logic + if (op == token.LOR) == xv.Bool() { + // env.Debugf("evalExpr() %v: %v = %v, skipping %v...", node, node.X, xv, node.Y) + return xv, nil + } + // env.Debugf("evalExpr() %v: %v = %v, evaluating %v...", node, node.X, xv, node.Y) + yv := env.evalExpr1(node.Y) + if yv.Kind() != r.Bool { + return env.unsupportedLogicalOperand(op, yv) + } + return yv, nil + default: + yv := env.evalExpr1(node.Y) + return env.evalBinaryExpr(xv, node.Op, yv), nil + } + + case *ast.CallExpr: + return env.evalCall(node) + + case *ast.CompositeLit: + return env.evalCompositeLiteral(node) + + case *ast.FuncLit: + return env.evalDeclFunction(nil, node.Type, node.Body) + + case *ast.Ident: + return env.evalIdentifier(node), nil + + case *ast.IndexExpr: + return env.evalIndexExpr(node) + + case *ast.ParenExpr: + in = node.X + continue + + case *ast.UnaryExpr: + return env.evalUnaryExpr(node) + + case *ast.SelectorExpr: + return env.evalSelectorExpr(node) + + case *ast.SliceExpr: + return env.evalSliceExpr(node) + + case *ast.StarExpr: + val := env.evalExpr1(node.X) + if val.Kind() != r.Ptr { + return env.Errorf("dereference of non-pointer: %v <%v>", val, typeOf(val)) + } + return val.Elem(), nil + + case *ast.TypeAssertExpr: + return env.evalTypeAssertExpr(node, false) + + // case *ast.KeyValueExpr: + } + return env.Errorf("unimplemented Eval() for: %v <%v>", in, r.TypeOf(in)) + } +} + +func (env *Env) unsupportedLogicalOperand(op token.Token, xv r.Value) (r.Value, []r.Value) { + return env.Errorf("unsupported type in logical operation %s: expecting bool, found %v <%v>", mt.String(op), xv, typeOf(xv)) +} + +func (env *Env) evalSliceExpr(node *ast.SliceExpr) (r.Value, []r.Value) { + obj := env.evalExpr1(node.X) + if obj.Kind() == r.Ptr { + obj = obj.Elem() + } + switch obj.Kind() { + case r.Array, r.Slice, r.String: + // ok + default: + return env.Errorf("slice operation %v expects array, slice or string. found: %v <%v>", node, obj, typeOf(obj)) + } + lo, hi := 0, obj.Len() + if node.Low != nil { + lo = int(env.valueToType(env.evalExpr1(node.Low), TypeOfInt).Int()) + } + if node.High != nil { + hi = int(env.valueToType(env.evalExpr1(node.High), TypeOfInt).Int()) + } + if node.Slice3 { + max := hi + if node.Max != nil { + max = int(env.valueToType(env.evalExpr1(node.Max), TypeOfInt).Int()) + } + return obj.Slice3(lo, hi, max), nil + } else { + return obj.Slice(lo, hi), nil + } +} + +func (env *Env) evalIndexExpr(node *ast.IndexExpr) (r.Value, []r.Value) { + // respect left-to-right order of evaluation + obj := env.evalExpr1(node.X) + index := env.evalExpr1(node.Index) + if obj.Kind() == r.Ptr { + obj = obj.Elem() + } + switch obj.Kind() { + + case r.Map: + index = env.valueToType(index, obj.Type().Key()) + + ret, present, _ := env.mapIndex(obj, index) + return ret, []r.Value{ret, r.ValueOf(present)} + + case r.Array, r.Slice, r.String: + i, ok := env.toInt(index) + if !ok { + return env.Errorf("invalid index, expecting an int: %v <%v>", index, typeOf(index)) + } + return obj.Index(int(i)), nil + + default: + return env.Errorf("unsupported index operation: %v [ %v ]. not an array, map, slice or string: %v <%v>", node.X, index, obj, typeOf(obj)) + } +} + +// mapIndex reproduces the exact behaviour of the map[key] builtin. given: +// var x = map[ktype]vtype +// x[key] does the following: +// 1. if key is present, return (the value associated to key, true, value.Type()) +// 2. otherwise, return (the zero value of vtype, false, vtype) +// note: converting key to ktype is caller's responsibility +func (env *Env) mapIndex(obj r.Value, key r.Value) (r.Value, bool, r.Type) { + value := obj.MapIndex(key) + present := value != Nil + var t r.Type + if present { + t = value.Type() + } else { + t = obj.Type().Elem() + value = r.Zero(t) + } + return value, present, t +} + +func (env *Env) evalSelectorExpr(node *ast.SelectorExpr) (r.Value, []r.Value) { + obj := env.evalExpr1(node.X) + name := node.Sel.Name + var val r.Value + + switch obj.Kind() { + case r.Ptr: + if pkg, ok := obj.Interface().(*PackageRef); ok { + // access symbol from imported package, for example fmt.Printf + if bind, ok := pkg.Binds[name]; ok { + return bind, nil + } + return env.Errorf("package %v %#v has no symbol %s", pkg.Name, pkg.Path, name) + } + elem := obj.Elem() + if elem.Kind() == r.Struct { + if val = elem.FieldByName(name); val != Nil { + break + } + } + // search for methods with pointer receiver first + if val = env.ObjMethodByName(obj, name); val != Nil { + break + } + if val = env.ObjMethodByName(elem, name); val != Nil { + break + } + return env.Errorf("pointer to struct <%v> has no field or method %s", typeOf(obj), name) + + case r.Interface: + val = obj.MethodByName(name) + if val != Nil { + break + } + return env.Errorf("interface <%v> has no method %s", typeOf(obj), name) + + case r.Struct: + if val = obj.FieldByName(name); val != Nil { + break + } + fallthrough + default: + // search for methods with pointer receiver first + if obj.CanAddr() { + if val = env.ObjMethodByName(obj.Addr(), name); val != Nil { + break + } + } + if val = env.ObjMethodByName(obj, name); val != Nil { + break + } + if obj.Kind() == r.Struct { + return env.Errorf("struct <%v> has no field or method %s", typeOf(obj), name) + } else { + return env.Errorf("value <%v> has no method %s", typeOf(obj), name) + } + } + return val, nil +} + +func (env *Env) evalTypeAssertExpr(node *ast.TypeAssertExpr, panicOnFail bool) (r.Value, []r.Value) { + val := env.evalExpr1(node.X) + t2 := env.evalType(node.Type) + if val == None || val == Nil { + if panicOnFail { + return env.Errorf("type assertion failed: %v <%v> is not a <%v>", val, nil, t2) + } + } else if t2 == TypeOfInterface { + val = val.Convert(t2) + return val, []r.Value{val, True} + } else { + t0 := val.Type() + fval := val.Interface() + t1 := r.TypeOf(fval) // extract the actual runtime type of fval + + if t1 != nil && t1.AssignableTo(t2) { + val = r.ValueOf(fval).Convert(t2) + return val, []r.Value{val, True} + } else if panicOnFail { + if t1 == nil { + return env.Errorf("type assertion failed: %v <%v> is nil, not a <%v>", fval, t0, t2) + } else { + return env.Errorf("type assertion failed: %v <%v> is a <%v>, not a <%v>", fval, t0, t1, t2) + } + } + } + zero := r.Zero(t2) + return zero, []r.Value{zero, False} +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/fast.go b/vendor/github.com/cosmos72/gomacro/classic/fast.go new file mode 100644 index 0000000..48e9416 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/fast.go @@ -0,0 +1,81 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * fast.go + * + * Created on: Apr 02, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/ast2" + "github.com/cosmos72/gomacro/base" + "github.com/cosmos72/gomacro/fast" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// temporary helper to invoke the new fast interpreter. +// executes macroexpand + collect + compile + eval +func (env *Env) FastEval(form ast2.Ast) (r.Value, []r.Value, xr.Type, []xr.Type) { + var f *fast.Interp + if env.FastInterp == nil { + f = fast.New() + f.Comp.CompileOptions |= fast.CompileKeepUntyped + env.FastInterp = f + } else { + f = env.FastInterp.(*fast.Interp) + } + f.Comp.Stringer.Copy(&env.Stringer) // sync Fileset, Pos, Line + f.Comp.Options = env.Options // sync Options + + // macroexpand phase. + // must be performed manually, because we used classic.Env.ParseOnly() + // instead of fast.Comp.Parse() + form, _ = f.Comp.MacroExpandCodewalk(form) + if env.Options&base.OptShowMacroExpand != 0 { + env.Debugf("after macroexpansion: %v", form.Interface()) + } + + // collect phase + if env.Options&(base.OptCollectDeclarations|base.OptCollectStatements) != 0 { + env.CollectAst(form) + } + + if env.Options&base.OptMacroExpandOnly != 0 { + x := form.Interface() + return r.ValueOf(x), nil, f.Comp.TypeOf(x), nil + } + + // compile phase + expr := f.Comp.Compile(form) + if env.Options&base.OptShowCompile != 0 { + env.Fprintf(env.Stdout, "%v\n", expr) + } + + // eval phase + if expr == nil { + return base.None, nil, nil, nil + } + value, values := f.RunExpr(expr) + return value, values, expr.Type, expr.Types +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/file.go b/vendor/github.com/cosmos72/gomacro/classic/file.go new file mode 100644 index 0000000..6378ecf --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/file.go @@ -0,0 +1,44 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * file.go + * + * Created on: Feb 15, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + r "reflect" +) + +func (env *Env) evalFile(node *ast.File) (r.Value, []r.Value) { + env.PackagePath = node.Name.Name + + // TODO eval node.Imports + var ret r.Value + var rets []r.Value + + for _, decl := range node.Decls { + ret, rets = env.evalDecl(decl) + } + return ret, rets +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/for.go b/vendor/github.com/cosmos72/gomacro/classic/for.go new file mode 100644 index 0000000..1b31641 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/for.go @@ -0,0 +1,303 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * for.go + * + * Created on: Feb 15, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func (env *Env) evalFor(node *ast.ForStmt) (r.Value, []r.Value) { + // Debugf("evalFor() init = %#v, cond = %#v, post = %#v, body = %#v", node.Init, node.Cond, node.Post, node.Body) + + if node.Init != nil { + env = NewEnv(env, "for {}") + env.evalStatement(node.Init) + } + for { + if node.Cond != nil { + cond := env.evalExpr1(node.Cond) + if cond.Kind() != r.Bool { + cf := cond.Interface() + return env.Errorf("for: invalid condition type <%T> %#v, expecting ", cf, cf) + } + if !cond.Bool() { + break + } + } + if !env.evalForBodyOnce(node.Body) { + break + } + if node.Post != nil { + env.evalStatement(node.Post) + } + } + return None, nil +} + +func (env *Env) evalForRange(node *ast.RangeStmt) (r.Value, []r.Value) { + // Debugf("evalForRange() init = %#v, cond = %#v, post = %#v, body = %#v", node.Init, node.Cond, node.Post, node.Body) + + container := env.evalExpr1(node.X) + if container == Nil || container == None { + return env.Errorf("invalid for range: cannot iterate on nil: %v evaluated to %v", node.X, container) + } + + switch container.Kind() { + case r.Chan: + return env.evalForRangeChannel(container, node) + case r.Map: + return env.evalForRangeMap(container, node) + case r.Slice, r.Array: + return env.evalForRangeSlice(container, node) + case r.String: + // Golang specs https://golang.org/ref/spec#RangeClause + // "For a string value, the "range" clause iterates over the Unicode code points in the string" + return env.evalForRangeString(container.String(), node) + case r.Ptr: + if container.Elem().Kind() == r.Array { + return env.evalForRangeSlice(container.Elem(), node) + } + } + return env.Errorf("invalid for range: expecting array, channel, map, slice, string, or pointer to array, found: %v <%v>", + container, typeOf(container)) +} + +func (env *Env) evalForRangeMap(obj r.Value, node *ast.RangeStmt) (r.Value, []r.Value) { + knode := nilIfIdentUnderscore(node.Key) + vnode := nilIfIdentUnderscore(node.Value) + tok := node.Tok + switch tok { + case token.DEFINE: + env = NewEnv(env, "range map {}") + t := obj.Type() + k := env.defineForIterVar(knode, t.Key()) + v := env.defineForIterVar(vnode, t.Elem()) + + for _, key := range obj.MapKeys() { + if k != Nil { + k.Set(key) + } + if v != Nil { + v.Set(obj.MapIndex(key)) + } + if !env.evalForBodyOnce(node.Body) { + break + } + } + case token.ASSIGN: + for _, key := range obj.MapKeys() { + // Golang specs https://golang.org/ref/spec#RangeClause + // "Function calls on the left are evaluated once per iteration" + // + // we actually evaluate once per iteration the full expressions on the left + if knode != nil { + kplace := env.evalPlace(knode) + env.assignPlace(kplace, tok, key) + } + if vnode != nil { + vplace := env.evalPlace(vnode) + env.assignPlace(vplace, tok, obj.MapIndex(key)) + } + if !env.evalForBodyOnce(node.Body) { + break + } + } + } + return None, nil +} + +func (env *Env) evalForRangeChannel(obj r.Value, node *ast.RangeStmt) (r.Value, []r.Value) { + knode := nilIfIdentUnderscore(node.Key) + if node.Value != nil { + return env.Errorf("range expression is a channel: expecting at most one iteration variable, found two: %v %v", node.Key, node.Value) + } + + tok := node.Tok + switch tok { + case token.DEFINE: + env = NewEnv(env, "range channel {}") + k := env.defineForIterVar(knode, obj.Type().Elem()) + + for { + recv, ok := obj.Recv() + if !ok { + break + } + if k != Nil { + k.Set(recv) + } + if !env.evalForBodyOnce(node.Body) { + break + } + } + case token.ASSIGN: + for { + recv, ok := obj.Recv() + if !ok { + break + } + // Golang specs https://golang.org/ref/spec#RangeClause + // "Function calls on the left are evaluated once per iteration" + // + // we actually evaluate once per iteration the full expressions on the left + if knode != nil { + kplace := env.evalPlace(knode) + env.assignPlace(kplace, tok, recv) + } + if !env.evalForBodyOnce(node.Body) { + break + } + } + } + return None, nil +} + +func (env *Env) evalForRangeString(str string, node *ast.RangeStmt) (r.Value, []r.Value) { + knode := nilIfIdentUnderscore(node.Key) + vnode := nilIfIdentUnderscore(node.Value) + tok := node.Tok + switch tok { + case token.DEFINE: + env = NewEnv(env, "range string {}") + k := env.defineForIterVar(knode, TypeOfInt) + v := env.defineForIterVar(vnode, TypeOfRune) + + for i, rune := range str { + if k != Nil { + k.Set(r.ValueOf(i)) + } + if v != Nil { + v.Set(r.ValueOf(rune)) + } + if !env.evalForBodyOnce(node.Body) { + break + } + } + case token.ASSIGN: + for i, rune := range str { + // Golang specs https://golang.org/ref/spec#RangeClause + // "Function calls on the left are evaluated once per iteration" + // + // we actually evaluate once per iteration the full expressions on the left + if knode != nil { + kplace := env.evalPlace(knode) + env.assignPlace(kplace, tok, r.ValueOf(i)) + } + if vnode != nil { + vplace := env.evalPlace(vnode) + env.assignPlace(vplace, tok, r.ValueOf(rune)) + } + if !env.evalForBodyOnce(node.Body) { + break + } + } + } + return None, nil +} + +func (env *Env) evalForRangeSlice(obj r.Value, node *ast.RangeStmt) (r.Value, []r.Value) { + knode := nilIfIdentUnderscore(node.Key) + vnode := nilIfIdentUnderscore(node.Value) + tok := node.Tok + switch tok { + case token.DEFINE: + env = NewEnv(env, "range slice/array {}") + k := env.defineForIterVar(knode, TypeOfInt) + v := env.defineForIterVar(vnode, obj.Type().Elem()) + + n := obj.Len() + for i := 0; i < n; i++ { + if k != Nil { + k.Set(r.ValueOf(i)) + } + if v != Nil { + v.Set(obj.Index(i)) + } + if !env.evalForBodyOnce(node.Body) { + break + } + } + case token.ASSIGN: + n := obj.Len() + for i := 0; i < n; i++ { + // Golang specs https://golang.org/ref/spec#RangeClause + // "Function calls on the left are evaluated once per iteration" + // + // we actually evaluate once per iteration the full expressions on the left + if knode != nil { + kplace := env.evalPlace(knode) + env.assignPlace(kplace, tok, r.ValueOf(i)) + } + if vnode != nil { + vplace := env.evalPlace(vnode) + env.assignPlace(vplace, tok, obj.Index(i)) + } + if !env.evalForBodyOnce(node.Body) { + break + } + } + } + return None, nil +} + +func (env *Env) evalForBodyOnce(node *ast.BlockStmt) (cont bool) { + defer func() { + if rec := recover(); rec != nil { + switch rec := rec.(type) { + case eBreak: + cont = false + case eContinue: + cont = true + default: + panic(rec) + } + } + }() + env.evalBlock(node) + return true +} + +func (env *Env) defineForIterVar(node ast.Expr, t r.Type) r.Value { + if node == nil || t == nil { + return Nil + } + name := node.(*ast.Ident).Name + env.DefineVar(name, t, r.Zero(t)) + return env.Binds.Get1(name) +} + +func nilIfIdentUnderscore(node ast.Expr) ast.Expr { + if ident, ok := node.(*ast.Ident); ok { + if ident.Name == "_" { + return nil + } + } + return node +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/function.go b/vendor/github.com/cosmos72/gomacro/classic/function.go new file mode 100644 index 0000000..16d254c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/function.go @@ -0,0 +1,90 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * function.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "fmt" + "go/ast" + r "reflect" +) + +func (env *Env) evalDeclFunction(decl *ast.FuncDecl, funcType *ast.FuncType, body *ast.BlockStmt) (r.Value, []r.Value) { + isMacro := false + var recv *ast.Field + + if decl != nil && decl.Recv != nil { + recvList := decl.Recv.List + if recvList != nil && len(recvList) == 0 { + isMacro = true + } else { + recv = recvList[0] + } + } + tFunc, tFuncOrMethod, argNames, resultNames := env.evalTypeFunctionOrMethod(recv, funcType) + tret := tFuncOrMethod + + var funcName string + if decl == nil { + funcName = makeFuncNameForEnv(decl, isMacro) + } else { + funcName = decl.Name.Name + } + + closure := func(args []r.Value) (results []r.Value) { + return env.evalFuncCall(funcName, body, tFuncOrMethod, argNames, args, resultNames) + } + var ret r.Value + if isMacro { + // env.Debugf("defined macro %v, type %v, args (%v), returns (%v)", decl.Name.Name, t, strings.Join(argNames, ", "), strings.Join(resultNames, ", ")) + ret = r.ValueOf(Macro{closure: closure, argNum: len(argNames)}) + tret = ret.Type() + } else { + ret = r.MakeFunc(tFuncOrMethod, closure) + + if decl != nil && recv != nil { + recvType := tFuncOrMethod.In(0) + // register tFunc, i.e. without the receiver, to allow comparison with Interface methods + env.registerMethod(recvType, funcName, tFunc, ret) + } + } + if decl != nil && recv == nil { + // register named functions and macros (NOT methods) in the current environment + ret = env.DefineFunc(funcName, tret, ret) + } + return ret, nil +} + +func makeFuncNameForEnv(decl *ast.FuncDecl, isMacro bool) string { + var prefix, space, suffix string = "func", "", "" + if isMacro { + prefix = "macro" + } + if decl != nil { + space = " " + suffix = decl.Name.Name + } + return fmt.Sprintf("%s%s%s()", prefix, space, suffix) +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/global.go b/vendor/github.com/cosmos72/gomacro/classic/global.go new file mode 100644 index 0000000..4bfa5ea --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/global.go @@ -0,0 +1,83 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * global.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + r "reflect" +) + +type CallStack struct { + Frames []CallFrame +} + +type CallFrame struct { + FuncEnv *Env + InnerEnv *Env // innermost Env + CurrentCall *ast.CallExpr // call currently in progress + defers []func() + panick interface{} // current panic + panicking bool + runningDefers bool +} + +type Constructor struct { + exec func(env *Env, arg0 r.Type, args []r.Value) (r.Value, []r.Value) + argNum int // if negative, do not check +} + +type Function struct { + exec func(env *Env, args []r.Value) (r.Value, []r.Value) + argNum int // if negative, do not check +} + +type Macro struct { + closure func(args []r.Value) (results []r.Value) + argNum int +} + +type TypedValue struct { + typ r.Type + val r.Value +} + +/** + * inside Methods, each string is the method name + * and each TypedValue is { + * Type: the method signature, i.e. the type of a func() *without* the receiver (to allow comparison with Interface methods) + * Value: the method implementation, i.e. a func() whose first argument is the receiver, + * } + */ +type Methods map[string]TypedValue + +/** + * Interface is the interpreted version of Golang interface values. + * Each Interface contains { + * Type: the interface type. returned by Env.evalInterface(), i.e. the type of a struct { € interface{}; functions... } + * Value: the datum implementing the interface. Value.Type() must be its concrete type, i.e. == r.TypeOf(Value.Interface()) + * } + */ +type Interface TypedValue diff --git a/vendor/github.com/cosmos72/gomacro/classic/identifier.go b/vendor/github.com/cosmos72/gomacro/classic/identifier.go new file mode 100644 index 0000000..b881876 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/identifier.go @@ -0,0 +1,54 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * identifier.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func (env *Env) evalIdentifier(ident *ast.Ident) r.Value { + value, found := env.resolveIdentifier(ident) + if !found { + env.Errorf("undefined identifier: %s", ident.Name) + } + return value +} + +func (env *Env) resolveIdentifier(ident *ast.Ident) (r.Value, bool) { + name := ident.Name + value := Nil + found := false + for e := env; e != nil; e = e.Outer { + // Debugf("evalIdentifier() looking up %#v in %#v", name, env.Binds) + if value, found = e.Binds.Get(name); found { + break + } + } + return value, found +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/import.go b/vendor/github.com/cosmos72/gomacro/classic/import.go new file mode 100644 index 0000000..c556b33 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/import.go @@ -0,0 +1,69 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * declaration.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + r "reflect" + "strings" + + . "github.com/cosmos72/gomacro/base" +) + +// eval a single import +func (env *Env) evalImport(node ast.Spec) (r.Value, []r.Value) { + switch node := node.(type) { + case *ast.ImportSpec: + path := UnescapeString(node.Path.Value) + path = env.sanitizeImportPath(path) + var name string + if node.Name != nil { + name = node.Name.Name + } else { + name = path[1+strings.LastIndexByte(path, '/'):] + } + pkg := env.ImportPackage(name, path) + if pkg != nil { + fileEnv := env.FileEnv() + fileEnv.DefineConst(name, r.TypeOf(pkg), r.ValueOf(pkg)) + } + return r.ValueOf(path), nil + default: + return env.Errorf("unimplemented import: %v", node) + } +} + +func (ir *ThreadGlobals) sanitizeImportPath(path string) string { + path = strings.Replace(path, "\\", "/", -1) + l := len(path) + if path == ".." || l >= 3 && (path[:3] == "../" || path[l-3:] == "/..") || strings.Contains(path, "/../") { + ir.Errorf("invalid import %q: contains \"..\"", path) + } + if path == "." || l >= 2 && (path[:2] == "./" || path[l-2:] == "/.") || strings.Contains(path, "/./") { + ir.Errorf("invalid import %q: contains \".\"", path) + } + return path +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/inspect.go b/vendor/github.com/cosmos72/gomacro/classic/inspect.go new file mode 100644 index 0000000..bbaa68b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/inspect.go @@ -0,0 +1,278 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * inspect.go + * + * Created on: Feb 11, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "bufio" + "errors" + "fmt" + r "reflect" + "strconv" + "strings" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +type Inspector struct { + names []string + vs []r.Value + ts []r.Type + xts []xr.Type + in *bufio.Reader + env *Env +} + +func (env *Env) Inspect(in *bufio.Reader, str string, fastInterpreter bool) { + form := env.Parse(str) + var v r.Value + var xt xr.Type + if fastInterpreter { + v, _, xt, _ = env.FastEval(form) + } else { + v = env.EvalAst1(form) + } + var t r.Type + if v != Nil && v != None { + t = r.TypeOf(v.Interface()) // show concrete type + } + switch dereferenceValue(v).Kind() { + case r.Array, r.Slice, r.String, r.Struct: + break + default: + env.showVar(str, v, t) + env.showMethods(t, xt) + return + } + stack := Inspector{names: []string{str}, vs: []r.Value{v}, ts: []r.Type{t}, xts: []xr.Type{xt}, in: in, env: env} + stack.Show() + stack.Repl() +} + +func (env *Env) showMethods(t r.Type, xt xr.Type) { + switch { + case xt != nil: + if xt.Kind() == r.Ptr { + xt = xt.Elem() + } + n := xt.NumMethod() + if n == 0 { + env.Fprintf(env.Stdout, "no methods of %v\n", xt) + return + } + env.Fprintf(env.Stdout, "methods of %v:\n", xt) + for i := 0; i < n; i++ { + env.Fprintf(env.Stdout, " m%d. %v\n", i, xt.Method(i).GoFun) + } + + case t != nil: + n := t.NumMethod() + if n == 0 { + env.Fprintf(env.Stdout, "no methods of %v\n", t) + return + } + env.Fprintf(env.Stdout, "methods of %v:\n", t) + for i := 0; i < n; i++ { + m := t.Method(i) + env.Fprintf(env.Stdout, " m%d. %s\t%v\n", i, m.Name, m.Type) + } + } +} + +func (env *Env) showVar(str string, v r.Value, t r.Type) { + env.Fprintf(env.Stdout, "%s\t= %v\t// %v\n", str, v, t) +} + +func (ip *Inspector) Help() { + fmt.Fprint(ip.env.Stdout, "// inspect commands: help methods quit top up\n") +} + +func (ip *Inspector) Show() { + depth := len(ip.names) + name := strings.Join(ip.names, ".") + v := ip.vs[depth-1] + t := ip.ts[depth-1] + ip.env.showVar(name, v, t) + + v = dereferenceValue(v) // dereference pointers on-the-fly + switch v.Kind() { + case r.Array, r.Slice, r.String: + ip.showIndexes(v) + case r.Struct: + ip.showFields(v) + } +} + +func (ip *Inspector) Repl() error { + for len(ip.names) > 0 { + fmt.Fprintf(ip.env.Stdout, "goinspect %s> ", strings.Join(ip.names, ".")) + cmd, err := ip.in.ReadString('\n') + if err != nil { + return err + } + cmd = strings.TrimSpace(cmd) + err = ip.Eval(cmd) + if err != nil { + return err + } + } + return nil +} + +func (ip *Inspector) Eval(cmd string) error { + switch { + case cmd == "?", strings.HasPrefix("help", cmd): + ip.Help() + case strings.HasPrefix("methods", cmd): + t := ip.ts[len(ip.ts)-1] + xt := ip.xts[len(ip.xts)-1] + ip.env.showMethods(t, xt) + case strings.HasPrefix("quit", cmd): + return errors.New("user quit") + case strings.HasPrefix("top", cmd): + ip.Top() + ip.Show() + case cmd == "", cmd == ".": + ip.Show() + case cmd == "-", strings.HasPrefix("up", cmd): + ip.Leave() + default: + ip.Enter(cmd) + } + return nil +} + +func (ip *Inspector) Top() { + ip.names = ip.names[0:1] + ip.vs = ip.vs[0:1] + ip.ts = ip.ts[0:1] +} + +func (ip *Inspector) Leave() { + depth := len(ip.names) + if depth <= 0 { + return + } + depth-- + ip.names = ip.names[:depth] + ip.vs = ip.vs[:depth] + ip.ts = ip.ts[:depth] + if depth > 0 { + ip.Show() + } +} + +func (ip *Inspector) showFields(v r.Value) { + n := v.NumField() + for i := 0; i < n; i++ { + f := v.Field(i) + t := typeOf(f) + f = dereferenceValue(f) + fmt.Fprintf(ip.env.Stdout, " %d. ", i) + ip.env.showVar(v.Type().Field(i).Name, f, t) + } +} + +func (ip *Inspector) showIndexes(v r.Value) { + n := v.Len() + for i := 0; i < n; i++ { + f := v.Index(i) + t := typeOf(f) + f = dereferenceValue(f) + fmt.Fprintf(ip.env.Stdout, " %d. ", i) + ip.env.showVar("", f, t) + } +} + +func (ip *Inspector) Enter(cmd string) { + i, err := strconv.Atoi(cmd) + if err != nil { + fmt.Fprintf(ip.env.Stdout, "unknown inspect command \"%s\". Type ? for help\n", cmd) + return + } + depth := len(ip.names) + v := dereferenceValue(ip.vs[depth-1]) + var n int + var fname string + var f r.Value + switch v.Kind() { + case r.Array, r.Slice, r.String: + n = v.Len() + if !ip.validRange(i, n) { + return + } + fname = fmt.Sprintf("[%s]", cmd) + f = v.Index(i) + case r.Struct: + n = v.NumField() + if !ip.validRange(i, n) { + return + } + fname = v.Type().Field(i).Name + f = v.Field(i) + default: + fmt.Fprintf(ip.env.Stdout, "cannot enter <%v>: expecting array, slice, string or struct\n", typeOf(v)) + return + } + var t r.Type + if f != Nil && f != None { + t = r.TypeOf(f.Interface()) // concrete type + } + + switch dereferenceValue(f).Kind() { // dereference pointers on-the-fly + case r.Array, r.Slice, r.String, r.Struct: + ip.names = append(ip.names, fname) + ip.vs = append(ip.vs, f) + ip.ts = append(ip.ts, t) + ip.Show() + default: + ip.env.showVar(fname, f, t) + } +} + +func dereferenceValue(v r.Value) r.Value { + for { + switch v.Kind() { + case r.Ptr: + v = v.Elem() + continue + case r.Interface: + v = r.ValueOf(v.Interface()) + continue + } + break + } + return v +} + +func (ip *Inspector) validRange(i, n int) bool { + if i < 0 || i >= n { + fmt.Fprintf(ip.env.Stdout, "%s contains %d elements, cannot inspect element %d\n", + strings.Join(ip.names, "."), n, i) + return false + } + return true +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/interface.go b/vendor/github.com/cosmos72/gomacro/classic/interface.go new file mode 100644 index 0000000..876c24f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/interface.go @@ -0,0 +1,58 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * interface.go + * + * Created on: Mar 29, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +// "\u0080" is Unicode codepoint: Padding Character. +// reflect.StructOf() allows it as field name, while go/scanner forbids it in Go source code +const nameOfInterfaceObject = "\u0080" + +func (env *Env) evalTypeInterface(node *ast.InterfaceType) r.Type { + if node.Methods == nil || len(node.Methods.List) == 0 { + return TypeOfInterface + } + types, names := env.evalTypeFields(node.Methods) + + types = append([]r.Type{TypeOfInterface}, types...) + names = append([]string{nameOfInterfaceObject}, names...) + + fields := makeStructFields(env.FileEnv().Path, names, types) + return r.StructOf(fields) +} + +func isInterfaceType(t r.Type) bool { + if t.Kind() == r.Struct && t.NumField() > 0 { + field := t.Field(0) + return field.Name == nameOfInterfaceObject && field.Type == TypeOfInterface + } + return false +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/interpreter.go b/vendor/github.com/cosmos72/gomacro/classic/interpreter.go new file mode 100644 index 0000000..4246e42 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/interpreter.go @@ -0,0 +1,273 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * interp.go + * + * Created on: Jun 15, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "bufio" + "fmt" + "os" + r "reflect" + "runtime/debug" + "strings" + "time" + + . "github.com/cosmos72/gomacro/base" +) + +type Interp struct { + *Env +} + +func New() *Interp { + top := NewEnv(nil, "builtin") + env := NewEnv(top, "main") + return &Interp{env} +} + +func (ir *Interp) ReplStdin() { + if ir.Options&OptShowPrompt != 0 { + fmt.Fprint(ir.Stdout, `// GOMACRO, an interactive Go interpreter with macros +// Copyright (C) 2017 Massimiliano Ghilardi +// License LGPL v3+: GNU Lesser GPL version 3 or later +// This is free software with ABSOLUTELY NO WARRANTY. +// +// Type :help for help +`) + } + in := bufio.NewReader(os.Stdin) + + ir.Line = 0 + for ir.ReadParseEvalPrint(in) { + ir.Line = 0 + } +} + +func (ir *Interp) Repl(in *bufio.Reader) { + for ir.ReadParseEvalPrint(in) { + } +} + +func (ir *Interp) ReadParseEvalPrint(in *bufio.Reader) (callAgain bool) { + var opts ReadOptions + if ir.Options&OptShowPrompt != 0 { + opts |= ReadOptShowPrompt + } + str, firstToken := ir.ReadMultiline(in, opts) + if firstToken < 0 { + // skip comments and continue, but fail on EOF or other errors + ir.IncLine(str) + return len(str) > 0 + } else if firstToken > 0 { + ir.IncLine(str[0:firstToken]) + } + return ir.ParseEvalPrint(str[firstToken:], in) +} + +func (ir *Interp) ParseEvalPrint(str string, in *bufio.Reader) (callAgain bool) { + var t1 time.Time + trap := ir.Options&OptTrapPanic != 0 + duration := ir.Options&OptShowTime != 0 + if duration { + t1 = time.Now() + } + defer func() { + ir.IncLine(str) + if trap { + rec := recover() + if ir.Options&OptPanicStackTrace != 0 { + fmt.Fprintf(ir.Stderr, "%v\n%s", rec, debug.Stack()) + } else { + fmt.Fprintf(ir.Stderr, "%v\n", rec) + } + callAgain = true + } + if duration { + delta := time.Now().Sub(t1) + ir.Debugf("eval time %.6f s", float32(delta)/float32(time.Second)) + } + }() + callAgain = ir.parseEvalPrint(str, in) + trap = false // no panic happened + return callAgain +} + +func (ir *Interp) parseEvalPrint(src string, in *bufio.Reader) (callAgain bool) { + + src = strings.TrimSpace(src) + n := len(src) + if n == 0 { + return true // no input. don't print anything + } + env := ir.Env + fast := env.Options&OptFastInterpreter != 0 // use the fast interpreter? + + if n > 0 && src[0] == ':' { + args := strings.SplitN(src, " ", 2) + cmd := args[0] + switch { + case strings.HasPrefix(":classic", cmd): + if len(args) <= 1 { + if env.Options&OptFastInterpreter != 0 { + env.Debugf("switched to classic interpreter") + } + env.Options &^= OptFastInterpreter + return true + } + // temporary override + src = strings.TrimSpace(args[1]) + fast = false + case strings.HasPrefix(":env", cmd): + if len(args) <= 1 { + env.ShowPackage("") + } else { + env.ShowPackage(args[1]) + } + return true + case strings.HasPrefix(":fast", cmd): + if len(args) <= 1 { + if env.Options&OptFastInterpreter == 0 { + env.Debugf("switched to fast interpreter (incomplete)") + } + env.Options |= OptFastInterpreter + return true + } + // temporary override + src = strings.TrimSpace(args[1]) + fast = true + case strings.HasPrefix(":help", cmd): + env.ShowHelp(env.Stdout) + return true + case strings.HasPrefix(":inspect", cmd): + if in == nil { + fmt.Fprint(env.Stdout, "// not connected to user input, cannot :inspect\n") + } else if len(args) == 1 { + fmt.Fprint(env.Stdout, "// inspect: missing argument\n") + } else { + env.Inspect(in, args[1], fast) + } + return true + case strings.HasPrefix(":options", cmd): + if len(args) > 1 { + env.Options ^= ParseOptions(args[1]) + } + fmt.Fprintf(env.Stdout, "// current options: %v\n", env.Options) + fmt.Fprintf(env.Stdout, "// unset options: %v\n", ^env.Options) + return true + case strings.HasPrefix(":quit", cmd): + return false + case strings.HasPrefix(":write", cmd): + if len(args) <= 1 { + env.WriteDeclsToStream(env.Stdout) + } else { + env.WriteDeclsToFile(args[1]) + } + return true + default: + // temporarily disable collection of declarations and statements, + // and temporarily disable macroexpandonly (i.e. re-enable eval) + saved := env.Options + todisable := OptMacroExpandOnly | OptCollectDeclarations | OptCollectStatements + if saved&todisable != 0 { + env.Options &^= todisable + defer func() { + env.Options = saved + }() + } + src = " " + src[1:] // slower than src = src[1:], but gives accurate column positions in error messages + } + } + if !fast { + if src == "package" || src == " package" || strings.HasPrefix(src, "package ") || strings.HasPrefix(src, " package ") { + arg := "" + src = strings.TrimSpace(src) + space := strings.IndexByte(src, ' ') + if space >= 0 { + arg = strings.TrimSpace(src[1+space:]) + } + if len(arg) == 0 { + fmt.Fprintf(env.Stdout, "// current package: %v\n", env.PackagePath) + } else { + ir.Env = env.ChangePackage(arg) + } + return true + } + } + + // parse phase. no macroexpansion/collect yet + form := env.ParseOnly(src) + + var value r.Value + var values []r.Value + var typ interface{} + var types []interface{} + + // eval phase + if form != nil { + if fast { + // macroexpand + collect + eval + xvalue, xvalues, xtype, xtypes := env.FastEval(form) + value, values, typ = xvalue, xvalues, xtype + types := make([]interface{}, len(xtypes)) + for i, xt := range xtypes { + types[i] = xt + } + } else { + // macroexpand + collect + eval + value, values = env.ClassicEval(form) + } + } + // print phase + opts := env.Options + if opts&OptShowEval != 0 { + if len(values) != 0 { + if opts&OptShowEvalType != 0 { + for i, vi := range values { + var ti interface{} + if types != nil && len(types) > i { + ti = types[i] + } else { + ti = ValueType(vi) + } + env.Fprintf(env.Stdout, "%v\t// %v\n", vi, ti) + } + } else { + for _, vi := range values { + env.Fprintf(env.Stdout, "%v\n", vi) + } + } + } else if value != None { + if opts&OptShowEvalType != 0 { + if typ == nil { + typ = ValueType(value) + } + env.Fprintf(env.Stdout, "%v\t// %v\n", value, typ) + } else { + env.Fprintf(env.Stdout, "%v\n", value) + } + } + } + return true +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/literal.go b/vendor/github.com/cosmos72/gomacro/classic/literal.go new file mode 100644 index 0000000..4384231 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/literal.go @@ -0,0 +1,214 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * literal.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + "go/token" + r "reflect" + "strconv" + "strings" + + . "github.com/cosmos72/gomacro/base" +) + +func (env *Env) evalLiteral0(node *ast.BasicLit) interface{} { + kind := node.Kind + str := node.Value + var ret interface{} + + switch kind { + + case token.INT: + if strings.HasPrefix(str, "-") { + i64, err := strconv.ParseInt(str, 0, 64) + if err != nil { + return env.Error(err) + } + // prefer int to int64. reason: in compiled Go, + // type inference deduces int for all constants representable by an int + i := int(i64) + if int64(i) == i64 { + return i + } + return i64 + } else { + u64, err := strconv.ParseUint(str, 0, 64) + if err != nil { + return env.Error(err) + } + // prefer, in order: int, int64, uint, uint64. reason: in compiled Go, + // type inference deduces int for all constants representable by an int + i := int(u64) + if i >= 0 && uint64(i) == u64 { + return i + } + i64 := int64(u64) + if i64 >= 0 && uint64(i64) == u64 { + return i64 + } + u := uint(u64) + if uint64(u) == u64 { + return u + } + return u64 + } + + case token.FLOAT: + f, err := strconv.ParseFloat(str, 64) + if err != nil { + return env.Error(err) + } + ret = f + + case token.IMAG: + if strings.HasSuffix(str, "i") { + str = str[:len(str)-1] + } + im, err := strconv.ParseFloat(str, 64) + if err != nil { + return env.Error(err) + } + ret = complex(0.0, im) + // env.Debugf("evalLiteral(): parsed IMAG %s -> %T %#v -> %T %#v", str, im, im, ret, ret) + + case token.CHAR: + ch, err := UnescapeChar(str) + if err != nil { + env.Errorf("%v: invalid char literal: %s", err, str) + return nil + } + return ch + + case token.STRING: + return UnescapeString(str) + + default: + env.Errorf("unimplemented basic literal: %v", node) + ret = nil + } + return ret +} + +func (env *Env) evalCompositeLiteral(node *ast.CompositeLit) (r.Value, []r.Value) { + t, ellipsis := env.evalType2(node.Type, false) + obj := Nil + switch t.Kind() { + case r.Map: + obj = r.MakeMap(t) + kt := t.Key() + vt := t.Elem() + for _, elt := range node.Elts { + switch elt := elt.(type) { + case *ast.KeyValueExpr: + key := env.valueToType(env.evalExpr1(elt.Key), kt) + val := env.valueToType(env.evalExpr1(elt.Value), vt) + obj.SetMapIndex(key, val) + default: + env.Errorf("map literal: invalid element, expecting <*ast.KeyValueExpr>, found: %v <%v>", elt, r.TypeOf(elt)) + } + } + // in compiled Go, map literals are addressable + place := r.New(t).Elem() + place.Set(obj) + obj = place + case r.Array, r.Slice: + vt := t.Elem() + idx := -1 + val := Nil + zero := Nil + if t.Kind() == r.Array { + obj = r.New(t).Elem() + } else { + zero = r.Zero(vt) + obj = r.MakeSlice(t, 0, len(node.Elts)) + } + for _, elt := range node.Elts { + switch elt := elt.(type) { + case *ast.KeyValueExpr: + idx = int(env.valueToType(env.evalExpr1(elt.Key), TypeOfInt).Int()) + val = env.valueToType(env.evalExpr1(elt.Value), vt) + default: + // golang specs: + // "An element without a key uses the previous element's index plus one. + // If the first element has no key, its index is zero." + idx++ + val = env.valueToType(env.evalExpr1(elt), vt) + } + if zero != Nil { // is slice, or array with unknown size [...]T{} + for obj.Len() <= idx { + obj = r.Append(obj, zero) + } + } + obj.Index(idx).Set(val) + } + if ellipsis { + // we can finally compute the actual array length... + // too bad we have to copy the elements + n := obj.Len() + t = r.ArrayOf(n, vt) + array := r.New(t).Elem() + for i := 0; i < n; i++ { + array.Index(i).Set(obj.Index(i)) + } + obj = array + } else if t.Kind() == r.Slice { + // in compiled Go, slice literals are addressable + place := r.New(t).Elem() + place.Set(obj) + obj = place + } + case r.Struct: + obj = r.New(t).Elem() + var pairs, elts bool + var field r.Value + var expr ast.Expr + for idx, elt := range node.Elts { + switch elt := elt.(type) { + case *ast.KeyValueExpr: + if elts { + return env.Errorf("cannot mix keyed and non-keyed initializers in struct composite literal: %v", node) + } + pairs = true + name := elt.Key.(*ast.Ident).Name + field = obj.FieldByName(name) + expr = elt.Value + default: + if pairs { + return env.Errorf("cannot mix keyed and non-keyed initializers in struct composite literal: %v", node) + } + elts = true + field = obj.Field(idx) + expr = elt + } + val := env.valueToType(env.evalExpr1(expr), field.Type()) + field.Set(val) + } + default: + env.Errorf("unexpected composite literal: %v", node) + } + return obj, nil +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/macroexpand.go b/vendor/github.com/cosmos72/gomacro/classic/macroexpand.go new file mode 100644 index 0000000..6d67856 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/macroexpand.go @@ -0,0 +1,287 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * macroexpand.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" + mt "github.com/cosmos72/gomacro/token" +) + +type macroExpandCtx struct { + env *Env +} + +// MacroExpandCodewalk traverses the whole AST tree using pre-order traversal, +// and replaces each node with the result of MacroExpand(node). +// It implements the macroexpansion phase +func (env *Env) MacroExpandCodewalk(in ast.Node) (out ast.Node, anythingExpanded bool) { + if in == nil { + return nil, false + } + var form Ast = ToAst(in) + form, anythingExpanded = env.MacroExpandAstCodewalk(form) + out = ToNode(form) + // if !anythingExpanded { + // env.Debugf("MacroExpand1() nothing to expand: %v <%v>", out, r.TypeOf(out)) + //} + return out, anythingExpanded +} + +func (env *Env) MacroExpandAstCodewalk(in Ast) (out Ast, anythingExpanded bool) { + return env.macroExpandAstCodewalk(in, 0) +} + +func (env *Env) macroExpandAstCodewalk(in Ast, quasiquoteDepth int) (out Ast, anythingExpanded bool) { + if in == nil || in.Size() == 0 { + return in, false + } + if quasiquoteDepth <= 0 { + if env.Options&OptDebugMacroExpand != 0 { + env.Debugf("MacroExpandCodewalk: qq = %d, macroexpanding %v", quasiquoteDepth, in.Interface()) + } + in, anythingExpanded = env.macroExpandAst(in) + } + if in != nil { + in = UnwrapTrivialAst(in) + } + if in == nil { + return in, anythingExpanded + } + saved := in + + if expr, ok := in.(UnaryExpr); ok { + isBlockWithinExpr := false + switch expr.X.Op { + case mt.MACRO: + isBlockWithinExpr = true + case mt.QUOTE: + // QUOTE prevents macroexpansion only if found outside any QUASIQUOTE + if quasiquoteDepth == 0 { + return saved, anythingExpanded + } + case mt.QUASIQUOTE: + // extract the body of QUASIQUOTE + quasiquoteDepth++ + case mt.UNQUOTE, mt.UNQUOTE_SPLICE: + // extract the body of UNQUOTE or UNQUOTE_SPLICE + quasiquoteDepth-- + default: + goto Recurse + } + inChild := UnwrapTrivialAst(in.Get(0).Get(1)) + outChild, expanded := env.macroExpandAstCodewalk(inChild, quasiquoteDepth) + if isBlockWithinExpr { + return outChild, expanded + } else { + out := in + if expanded { + out = MakeQuote2(expr, outChild.(AstWithNode)) + } + return out, expanded + } + } +Recurse: + if in == nil { + return saved, anythingExpanded + } + if env.Options&OptDebugMacroExpand != 0 { + env.Debugf("MacroExpandCodewalk: qq = %d, recursing on %v", quasiquoteDepth, in) + } + out = in.New() + n := in.Size() + if outSlice, canAppend := out.(AstWithSlice); canAppend { + // New() returns zero-length slice... resize it + for i := 0; i < n; i++ { + outSlice = outSlice.Append(nil) + } + out = outSlice + } + for i := 0; i < n; i++ { + child := UnwrapTrivialAst(in.Get(i)) + if child != nil { + expanded := false + if child.Size() != 0 { + child, expanded = env.macroExpandAstCodewalk(child, quasiquoteDepth) + } + if expanded { + anythingExpanded = true + } + } + out.Set(i, child) + } + if env.Options&OptDebugMacroExpand != 0 { + env.Debugf("MacroExpandCodewalk: qq = %d, expanded to %v", quasiquoteDepth, out) + } + return out, anythingExpanded +} + +// MacroExpand repeatedly invokes MacroExpand1 +// as long as the node represents a macro call. +// it returns the resulting node. +func (env *Env) MacroExpand(in ast.Node) (out ast.Node, everExpanded bool) { + if in == nil { + return nil, false + } + inAst := ToAst(in) + outAst, everExpanded := env.macroExpandAst(inAst) + out = ToNode(outAst) + // if !everExpanded { + // env.Debugf("MacroExpand1() not a macro: %v <%v>", out, r.TypeOf(out)) + //} + return out, everExpanded +} + +func (env *Env) macroExpandAst(form Ast) (out Ast, everExpanded bool) { + var expanded bool + for { + form, expanded = env.macroExpandAstOnce(form) + if !expanded { + return form, everExpanded + } + everExpanded = true + } +} + +// if node represents a macro call, MacroExpand1 executes it +// and returns the resulting node. +// Otherwise returns the node argument unchanged +func (env *Env) MacroExpand1(in ast.Node) (out ast.Node, expanded bool) { + if in == nil { + return nil, false + } + var form Ast = ToAst(in) + form, expanded = env.macroExpandAstOnce(form) + out = ToNode(form) + // if !expanded { + // env.Debugf("MacroExpand1: not a macro: %v <%v>", out, r.TypeOf(out)) + //} + return out, expanded +} + +// +func (env *Env) extractMacroCall(form Ast) Macro { + form = UnwrapTrivialAst(form) + switch form := form.(type) { + case Ident: + bind, found := env.resolveIdentifier(form.X) + if found && bind.Kind() == r.Struct { + switch value := bind.Interface().(type) { + case Macro: + if env.Options&OptDebugMacroExpand != 0 { + env.Debugf("MacroExpand1: found macro: %v", form.X.Name) + } + return value + } + } + } + return Macro{} +} + +func (env *Env) macroExpandAstOnce(in Ast) (out Ast, expanded bool) { + if in == nil { + return nil, false + } + // unwrap trivial nodes: DeclStmt, ParenExpr, ExprStmt + in = UnwrapTrivialAstKeepBlocks(in) + ins, ok := in.(AstWithSlice) + if !ok { + return in, false + } + if env.Options&OptDebugMacroExpand != 0 { + env.Debugf("MacroExpand1: found list: %v", ins.Interface()) + } + outs := ins.New().(AstWithSlice) + n := ins.Size() + + // since macro calls are sequences of statements, + // we must scan the whole list, + // consume it as needed by the macros we find, + // and build a new list accumulating the results of macroexpansion + for i := 0; i < n; i++ { + elt := ins.Get(i) + macro := env.extractMacroCall(elt) + if macro.closure == nil { + outs = outs.Append(elt) + continue + } + argn := macro.argNum + leftn := n - i - 1 + var args []r.Value + if argn > leftn { + args := make([]r.Value, leftn+1) // include the macro itself + for j := 0; j <= leftn; j++ { + args[j] = r.ValueOf(ins.Get(i + j).Interface()) + } + env.Errorf("not enough arguments for macroexpansion of %v: expecting %d, found %d", args, macro.argNum, leftn) + return in, false + } + if env.Options&OptDebugMacroExpand != 0 { + env.Debugf("MacroExpand1: found macro call %v at %d-th position of %v", elt.Interface(), i, ins.Interface()) + } + // wrap each ast.Node into a reflect.Value + args = make([]r.Value, argn) + for j := 0; j < argn; j++ { + args[j] = r.ValueOf(ToNode(ins.Get(i + j + 1))) + } + // invoke the macro + results := macro.closure(args) + if env.Options&OptDebugMacroExpand != 0 { + env.Debugf("MacroExpand1: macro expanded to: %v", results) + } + var out Ast + switch len(results) { + default: + args = append([]r.Value{r.ValueOf(elt.Interface())}, args...) + env.Warnf("macroexpansion returned %d values, using only the first one: %v %v returned %v", + len(results), args, results) + fallthrough + case 1: + any := results[0].Interface() + if any != nil { + out = AnyToAst(any, "macroexpansion") + break + } + fallthrough + case 0: + // do not insert nil nodes... they would wreak havok, convert them to the identifier nil + out = Ident{&ast.Ident{Name: "nil"}} + } + outs = outs.Append(out) + i += argn + expanded = true + } + if !expanded { + return in, false + } + if outs.Size() == 0 { + return EmptyStmt{&ast.EmptyStmt{}}, true + } + return UnwrapTrivialAst(outs), true +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/method.go b/vendor/github.com/cosmos72/gomacro/classic/method.go new file mode 100644 index 0000000..9feecf4 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/method.go @@ -0,0 +1,82 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * method.go + * + * Created on: Mar 30, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +// registerMethod registers a function value for the given receiver type recvType and method name. +// The type typ of the function must not include a receiver, +// while the function value val must include a receiver as first argument +// in particular, the equality recvType == val.Type().In(0) must be true +func (ir *ThreadGlobals) registerMethod(recvType r.Type, name string, typ r.Type, val r.Value) { + if _, ok := ir.AllMethods[recvType][name]; ok { + ir.Warnf("redefined method %s for <%v>", name, recvType) + } else { + // do not allow duplicate methods, one with pointer receiver and one with value receiver + var altType r.Type + if recvType.Kind() == r.Ptr { + altType = recvType.Elem() + } else { + altType = r.PtrTo(recvType) + } + if _, ok := ir.AllMethods[altType][name]; ok { + ir.Warnf("redefined method %s for <%v>", name, recvType) + delete(ir.AllMethods[altType], name) + } + } + + methods, ok := ir.AllMethods[recvType] + if !ok { + methods = make(map[string]TypedValue) + ir.AllMethods[recvType] = methods + } + methods[name] = TypedValue{typ: typ, val: val} +} + +// ObjMethodByName returns a function value corresponding to the method +// of obj with the given name. +// The arguments to a Call on the returned function should not include +// a receiver; the returned function will always use obj as the receiver. +// It returns the zero Value if no method was found. +func (ir *ThreadGlobals) ObjMethodByName(obj r.Value, name string) r.Value { + // search for methods known to the compiler + val := obj.MethodByName(name) + if val == Nil { + // search for methods known to the intepreter + t := obj.Type() + if method, ok := ir.AllMethods[t][name]; ok { + // cumbersome... we must create a closure on-the-fly + val = r.MakeFunc(method.typ, func(args []r.Value) []r.Value { + return method.val.Call(append([]r.Value{obj}, args...)) + }) + } + } + return val +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/number.go b/vendor/github.com/cosmos72/gomacro/classic/number.go new file mode 100644 index 0000000..725602f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/number.go @@ -0,0 +1,69 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * number.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + r "reflect" +) + +func (env *Env) toInt(xv r.Value) (int64, bool) { + switch xv.Kind() { + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + u := xv.Uint() + i := int64(u) + if uint64(i) != u { + env.Warnf("value %d overflows int64, truncated to %d", u, i) + } + return i, true + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + return xv.Int(), true + default: + return 0, false + } +} + +func (env *Env) toFloat(xv r.Value) (float64, bool) { + switch xv.Kind() { + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + return float64(xv.Uint()), true + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + return float64(xv.Int()), true + case r.Float32, r.Float64: + return xv.Float(), true + default: + return 0.0, false + } +} + +func (env *Env) toComplex(xv r.Value) (complex128, bool) { + switch xv.Kind() { + case r.Complex64, r.Complex128: + return xv.Complex(), true + default: + f, ok := env.toFloat(xv) + return complex(f, 0.0), ok + } +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/output.go b/vendor/github.com/cosmos72/gomacro/classic/output.go new file mode 100644 index 0000000..fd0c9f0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/output.go @@ -0,0 +1,151 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * output.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "fmt" + "go/ast" + "io" + r "reflect" + "sort" + + . "github.com/cosmos72/gomacro/base" +) + +var ( + nilEnv *Env + NilEnv = []r.Value{r.ValueOf(nilEnv)} +) + +func (ir *ThreadGlobals) ShowHelp(out io.Writer) { + fmt.Fprint(out, `// type Go code to execute it. example: func add(x, y int) int { return x + y } + +// interpreter commands: +:classic CODE execute CODE using the classic interpreter (default) +:env [name] show available functions, variables and constants + in current package, or from imported package "name" +:fast CODE execute CODE using the fast interpreter (incomplete) +:help show this help +:inspect EXPR inspect expression interactively +:options [OPTS] show or toggle interpreter options +:quit quit the interpreter +:write [FILE] write collected declarations and/or statements to standard output or to FILE + use :o Declarations and/or :o Statements to start collecting them +`) +} + +func (env *Env) showStack() { + frames := env.CallStack.Frames + n := len(frames) + for i := 1; i < n; i++ { + frame := &frames[i] + name := "" + if frame.FuncEnv != nil { + name = frame.FuncEnv.Name + } + if frame.panicking { + env.Debugf("%d:\t %v, runningDefers = %v, panic = %v", i, name, frame.runningDefers, frame.panick) + } else { + env.Debugf("%d:\t %v, runningDefers = %v, panic is nil", i, name, frame.runningDefers) + } + } +} + +func (env *Env) ShowPackage(packageName string) { + out := env.Stdout + e := env + path := env.Path + pkg := env.AsPackage() + if len(packageName) != 0 { + bind := env.evalIdentifier(&ast.Ident{Name: packageName}) + if bind == None || bind == Nil { + env.Warnf("not an imported package: %q", packageName) + return + } + switch val := bind.Interface().(type) { + case *PackageRef: + e = nil + pkg = val.Package + path = packageName + default: + env.Warnf("not an imported package: %q = %v <%v>", packageName, val, typeOf(bind)) + return + } + } + spaces15 := " " +Loop: + binds := pkg.Binds + if len(binds) > 0 { + fmt.Fprintf(out, "// ----- %s binds -----\n", path) + + keys := make([]string, len(binds)) + i := 0 + for k := range binds { + keys[i] = k + i++ + } + sort.Strings(keys) + for _, k := range keys { + n := len(k) & 15 + fmt.Fprintf(out, "%s%s = ", k, spaces15[n:]) + bind := binds[k] + if bind != Nil { + switch bind := bind.Interface().(type) { + case *Env: + fmt.Fprintf(out, "%p // %v\n", bind, r.TypeOf(bind)) + continue + } + } + env.Fprintf(out, "%v // %v\n", bind, r.TypeOf(bind)) + } + fmt.Fprintln(out) + } + types := pkg.Types + if len(types) > 0 { + fmt.Fprintf(out, "// ----- %s types -----\n", path) + + keys := make([]string, len(types)) + i := 0 + for k := range types { + keys[i] = k + i++ + } + sort.Strings(keys) + for _, k := range keys { + n := len(k) & 15 + t := types[k] + fmt.Fprintf(out, "%s%s %v <%v>\n", k, spaces15[n:], t.Kind(), t) + } + fmt.Fprintln(out) + } + if e != nil { + if e = e.Outer; e != nil { + path = e.Path + pkg = e.AsPackage() + goto Loop + } + } +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/quasiquote.go b/vendor/github.com/cosmos72/gomacro/classic/quasiquote.go new file mode 100644 index 0000000..d7a20ed --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/quasiquote.go @@ -0,0 +1,207 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * quasiquote.go + * + * Created on: Feb 19, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "fmt" + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" + mt "github.com/cosmos72/gomacro/token" +) + +func (env *Env) evalQuote(node *ast.BlockStmt) ast.Node { + return SimplifyNodeForQuote(node, true) +} + +// evalQuasiquote evaluates the body of a quasiquote{} represented as ast.Node +func (env *Env) evalQuasiquote(node *ast.BlockStmt) ast.Node { + // we invoke SimplifyNodeForQuote() at the end, not at the beginning. + // reason: to support quasiquote{unquote_splice ...} + toUnwrap := node != SimplifyNodeForQuote(node, true) + + in := ToAst(node) + out := env.evalQuasiquoteAst(in, 1) + ret := ToNode(out) + return SimplifyNodeForQuote(ret, toUnwrap) +} + +// evalQuasiquoteAst evaluates the body of a quasiquote{} represented as Ast +// use unified API to traverse ast.Node... every other solution is a nightmare +func (env *Env) evalQuasiquoteAst(in Ast, depth int) (out Ast) { + if in == nil { + return nil + } + inSlice, canSplice := in.(AstWithSlice) + env.debugQuasiQuote("evaluating", depth, canSplice, in.Interface()) + if !canSplice { + in = UnwrapTrivialAst(in) // drill through DeclStmt, ExprStmt, ParenExpr, one-element BlockStmt + } + if in == nil || in.Size() == 0 { + return in + } + + if !canSplice { + if in, ok := in.(UnaryExpr); ok { + switch in.Op() { + case mt.QUASIQUOTE: + // equivalent to ToAst(form.p.X.(*ast.FuncLit).Body) + toexpand := in.Get(0).Get(1) + env.debugQuasiQuote("recursing inside QUASIQUOTE", depth+1, canSplice, toexpand.Interface()) + expansion := env.evalQuasiquoteAst(toexpand, depth+1) + return MakeQuote2(in, expansion.(AstWithNode)) + case mt.UNQUOTE: + if depth <= 1 { + y := env.evalUnquote(in) + return AnyToAst(y, "unquote") + } else { + // equivalent to ToAst(form.p.X.(*ast.FuncLit).Body) + toexpand := in.Get(0).Get(1) + env.debugQuasiQuote("recursing inside UNQUOTE", depth-1, canSplice, toexpand.Interface()) + expansion := env.evalQuasiquoteAst(toexpand, depth-1) + return MakeQuote2(in, expansion.(AstWithNode)) + } + case mt.UNQUOTE_SPLICE: + y := in.Interface() + env.Errorf("quasiquote: cannot splice in single-statement context: %v <%v>", y, r.TypeOf(y)) + return nil + } + } + + out := in.New() + ni := in.Size() + for i := 0; i < ni; i++ { + child := in.Get(i) + if child == nil { + env.debugQuasiQuote("child is nil", depth, canSplice, child) + } else { + env.debugQuasiQuote("general case: recurse on child", depth, canSplice, child.Interface()) + child = env.evalQuasiquoteAst(child, depth) + } + out.Set(i, child) + } + return out + } + + outSlice := inSlice.New().(AstWithSlice) + ni := inSlice.Size() + for i := 0; i < ni; i++ { + // drill through DeclStmt, ExprStmt, ParenExpr + child := UnwrapTrivialAstKeepBlocks(inSlice.Get(i)) + switch child := child.(type) { + case UnaryExpr: + switch child.Op() { + case mt.QUASIQUOTE: + // equivalent to ToAst(form.p.X.(*ast.FuncLit).Body) + toexpand := child.Get(0).Get(1) + env.debugQuasiQuote("recursing inside QUASIQUOTE", depth+1, canSplice, toexpand.Interface()) + expansion := env.evalQuasiquoteAst(toexpand, depth+1) + child = MakeQuote2(child, expansion.(AstWithNode)) + outSlice = outSlice.Append(child) + goto Next + case mt.UNQUOTE, mt.UNQUOTE_SPLICE: + // complication: in Common Lisp, the right-most unquote pairs with the left-most comma! + // we implement the same mechanics, so we must drill down to the last unquote/unquote_splice + // and, for unquote_splice, create a copy of the unquote/unquote_splice stack for each result. + // Example: + // x:=quote{7; 8} + // quasiquote{quasiquote{1; unquote{2}; unquote{unquote_splice{x}}}} + // must return + // quasiquote{1; unquote{2}; unquote{7}; unquote{8}} + lastUnquote, unquoteDepth := DescendNestedUnquotes(child) + + op := lastUnquote.Op() + + env.debugQuasiQuote(fmt.Sprintf("inside %s, lastUnquote is %s (unquoteDepth = %d)", + mt.String(child.Op()), mt.String(op), unquoteDepth), depth, canSplice, child) + + if unquoteDepth > depth { + env.Errorf("%s not inside quasiquote: %v <%v>", mt.String(op), lastUnquote, r.TypeOf(lastUnquote)) + return nil + } else if unquoteDepth < depth { + toexpand := child.Get(0).Get(1) + env.debugQuasiQuote(fmt.Sprintf("recursing inside %s, lastUnquote is %s", mt.String(child.Op()), mt.String(op)), + depth-1, canSplice, toexpand.Interface()) + expansion := env.evalQuasiquoteAst(toexpand, depth-1) + child = MakeQuote2(child, expansion.(AstWithNode)) + outSlice = outSlice.Append(child) + } else { + env.debugQuasiQuote("calling unquote on", depth-unquoteDepth, canSplice, lastUnquote.Interface()) + toInsert := AnyToAst(env.evalUnquote(lastUnquote), mt.String(op)) + if toInsert == nil { + env.debugQuasiQuote("unquote returned", depth-unquoteDepth, canSplice, toInsert) + } else { + env.debugQuasiQuote("unquote returned", depth-unquoteDepth, canSplice, toInsert.Interface()) + } + if op == mt.UNQUOTE { + stack := DuplicateNestedUnquotes(child, unquoteDepth-1, toInsert) + outSlice = outSlice.Append(stack) + } else if toInsert != nil { + toSplice := ToAstWithSlice(toInsert, "unquote_splice") + nj := toSplice.Size() + for j := 0; j < nj; j++ { + stack := DuplicateNestedUnquotes(child, unquoteDepth-1, toSplice.Get(j)) + outSlice = outSlice.Append(stack) + } + } + } + goto Next + } + } + if child == nil { + env.debugQuasiQuote("child is nil", depth, canSplice, child) + } else { + env.debugQuasiQuote("general case: recurse on child", depth, canSplice, child.Interface()) + child = env.evalQuasiquoteAst(child, depth) + } + outSlice = outSlice.Append(child) + Next: + env.debugQuasiQuote("accumulated", depth, canSplice, outSlice.Interface()) + } + return outSlice +} + +func (env *Env) debugQuasiQuote(msg string, depth int, canSplice bool, x interface{}) { + if env.Options&OptDebugQuasiquote != 0 { + env.Debugf("quasiquote: %s (depth = %d, canSplice = %v)\n%v <%v>", msg, depth, canSplice, x, r.TypeOf(x)) + } +} + +// evalUnquote performs expansion inside a QUASIQUOTE +func (env *Env) evalUnquote(inout UnaryExpr) interface{} { + block := inout.X.X.(*ast.FuncLit).Body + + ret, extraValues := env.evalBlock(block) + if len(extraValues) > 1 { + env.Warnf("unquote returned %d values, only the first one will be used: %v", len(extraValues), block) + } + if ret == None || ret == Nil { + return nil + } + return ret.Interface() +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/select.go b/vendor/github.com/cosmos72/gomacro/classic/select.go new file mode 100644 index 0000000..3b3b292 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/select.go @@ -0,0 +1,179 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * select.go + * + * Created on: Mar 25, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +type selectLhsExpr struct { + lhs [2]ast.Expr + tok token.Token +} + +func (env *Env) evalSelect(node *ast.SelectStmt) (ret r.Value, rets []r.Value) { + if node.Body == nil || len(node.Body.List) == 0 { + return None, nil + } + list := node.Body.List + n := len(list) + lhs := make([]selectLhsExpr, n) + ops := make([]r.SelectCase, n) + + for i, stmt := range list { + case_ := stmt.(*ast.CommClause) + comm := case_.Comm + if comm == nil { + // default + ops[i].Dir = r.SelectDefault + } else { + env.mustBeSelectStatement(comm, &lhs[i], &ops[i]) + } + } + i, recv, recvOk := r.Select(ops) + case_ := list[i].(*ast.CommClause) + return env.evalSelectBody(lhs[i], [2]r.Value{recv, r.ValueOf(recvOk)}, case_) +} + +func (env *Env) mustBeSelectStatement(stmt ast.Stmt, lhs *selectLhsExpr, op *r.SelectCase) { + switch node := stmt.(type) { + case *ast.ExprStmt: + // <-ch + op.Dir = r.SelectRecv + op.Chan = env.mustBeSelectRecv(stmt, node.X) + return + case *ast.AssignStmt: + // v := <-ch or v = <-ch + llist := node.Lhs + lnum := len(llist) + if (lnum == 1 || lnum == 2) && len(node.Rhs) == 1 { + l0 := llist[0] + var l1 ast.Expr + if lnum == 2 { + l1 = llist[1] + } + r0 := node.Rhs[0] + switch node.Tok { + case token.DEFINE: + if _, ok := l0.(*ast.Ident); ok || l0 == nil { + if _, ok := l1.(*ast.Ident); ok || l1 == nil { + op.Dir = r.SelectRecv + op.Chan = env.mustBeSelectRecv(node, r0) + lhs.lhs[0] = l0 + lhs.lhs[1] = l1 + lhs.tok = node.Tok + return + } + } + case token.ASSIGN: + op.Dir = r.SelectRecv + op.Chan = env.mustBeSelectRecv(node, r0) + lhs.lhs[0] = l0 + lhs.lhs[1] = l1 + lhs.tok = node.Tok + return + } + } + case *ast.SendStmt: + // ch <- v + op.Dir = r.SelectSend + op.Chan = env.evalExpr1(node.Chan) + op.Send = env.evalExpr1(node.Value) + return + } + env.badSelectStatement(stmt) +} + +func (env *Env) mustBeSelectRecv(stmt ast.Stmt, node ast.Expr) r.Value { + for { + switch expr := node.(type) { + case *ast.ParenExpr: + node = expr.X + continue + case *ast.UnaryExpr: + if expr.Op == token.ARROW { + return env.evalExpr1(expr.X) + } + } + break + } + return env.badSelectStatement(stmt) +} + +func (env *Env) badSelectStatement(stmt ast.Stmt) r.Value { + env.Errorf("invalid select case, expecting [ch <- val] or [<-ch] or [var := <-ch] or [place = <-ch], found: %v <%v>", + stmt, r.TypeOf(stmt)) + return None +} + +func (env *Env) evalSelectBody(lhs selectLhsExpr, val [2]r.Value, case_ *ast.CommClause) (ret r.Value, rets []r.Value) { + if case_ == nil || len(case_.Body) == 0 { + // apply lhs side effects even without body + if lhs.tok == token.ASSIGN { + for i := 0; i < 2; i++ { + if expr := lhs.lhs[i]; expr != nil { + place := env.evalPlace(expr) + env.assignPlace(place, token.ASSIGN, val[i]) + } + } + } + return None, nil + } + panicking := true + defer func() { + if panicking { + switch pan := recover().(type) { + case eBreak: + ret, rets = None, nil + default: + panic(pan) + } + } + }() + // each case body has its own environment + label := "case:" + if case_.Comm == nil { + label = "default:" + } + env2 := NewEnv(env, label) + for i := 0; i < 2; i++ { + if expr := lhs.lhs[i]; expr != nil { + if lhs.tok == token.DEFINE { + env2.DefineVar(expr.(*ast.Ident).Name, nil, val[i]) + } else { + place := env.evalPlace(expr) + env.assignPlace(place, token.ASSIGN, val[i]) + } + } + } + ret, rets = env2.evalStatements(case_.Body) + panicking = false + return +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/statement.go b/vendor/github.com/cosmos72/gomacro/classic/statement.go new file mode 100644 index 0000000..16b3231 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/statement.go @@ -0,0 +1,232 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * statement.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +type eBreak struct { + label string +} + +type eContinue struct { + label string +} + +func (_ eBreak) Error() string { + return "break outside for or switch" +} + +func (_ eContinue) Error() string { + return "continue outside for" +} + +type eReturn struct { + results []r.Value +} + +func (_ eReturn) Error() string { + return "return outside function" +} + +func (env *Env) evalBlock(block *ast.BlockStmt) (r.Value, []r.Value) { + if block == nil || len(block.List) == 0 { + return None, nil + } + env = NewEnv(env, "{}") + + return env.evalStatements(block.List) +} + +func (env *Env) evalStatements(list []ast.Stmt) (r.Value, []r.Value) { + ret := None + var rets []r.Value + + for i := range list { + ret, rets = env.evalStatement(list[i]) + } + return ret, rets +} + +func (env *Env) evalStatement(stmt ast.Stmt) (r.Value, []r.Value) { +again: + if stmt != nil { + env.Pos = stmt.Pos() + } + switch node := stmt.(type) { + case *ast.AssignStmt: + return env.evalAssignments(node) + case *ast.BlockStmt: + return env.evalBlock(node) + case *ast.BranchStmt: + return env.evalBranch(node) + case *ast.CaseClause, *ast.CommClause: + return env.Errorf("misplaced case: not inside switch or select: %v <%v>", node, r.TypeOf(node)) + case *ast.DeclStmt: + return env.evalDecl(node.Decl) + case *ast.DeferStmt: + return env.evalDefer(node.Call) + case *ast.EmptyStmt: + return None, nil + case *ast.ExprStmt: + return env.evalExpr(node.X) + case *ast.ForStmt: + return env.evalFor(node) + case *ast.GoStmt: + return env.evalGo(node) + case *ast.IfStmt: + return env.evalIf(node) + case *ast.IncDecStmt: + return env.evalIncDec(node) + case *ast.LabeledStmt: + stmt = node + goto again + case *ast.RangeStmt: + return env.evalForRange(node) + case *ast.ReturnStmt: + return env.evalReturn(node) + case *ast.SelectStmt: + return env.evalSelect(node) + case *ast.SendStmt: + return env.evalSend(node) + case *ast.SwitchStmt: + return env.evalSwitch(node) + case *ast.TypeSwitchStmt: + return env.evalTypeSwitch(node) + default: + return env.Errorf("unimplemented statement: %v <%v>", node, r.TypeOf(node)) + } +} + +func (env *Env) evalBranch(node *ast.BranchStmt) (r.Value, []r.Value) { + var label string + if node.Label != nil { + label = node.Label.Name + } + switch node.Tok { + case token.BREAK: + panic(eBreak{label}) + case token.CONTINUE: + panic(eContinue{label}) + case token.GOTO: + return env.Errorf("unimplemented: goto") + case token.FALLTHROUGH: + return env.Errorf("invalid fallthrough: not the last statement in a case") + default: + return env.Errorf("unimplemented branch: %v <%v>", node, r.TypeOf(node)) + } +} + +func (env *Env) evalGo(stmt *ast.GoStmt) (r.Value, []r.Value) { + if !MultiThread { + env.Errorf("cannot create goroutine: %v\n\treason: this copy of gomacro was compiled with build tag 'gomacro_singlethread'", stmt) + } + + node := stmt.Call + fun := env.evalExpr1(node.Fun) + + switch fun.Kind() { + case r.Struct: + switch fun := fun.Interface().(type) { + case Constructor: + // evaluate args in the caller's goroutine + t, args := env.evalConstructorArgs(fun, node) + go fun.exec(env, t, args) + case Function: + // evaluate args in the caller's goroutine + args := env.evalFunctionArgs(fun, node) + go fun.exec(env, args) + } + case r.Func: + // evaluate args in the caller's goroutine + args := env.evalFuncArgs(fun, node) + if node.Ellipsis == token.NoPos { + go fun.Call(args) + } else { + go fun.CallSlice(args) + } + } + return None, nil +} + +func (env *Env) evalIf(node *ast.IfStmt) (r.Value, []r.Value) { + if node.Init != nil { + env = NewEnv(env, "if {}") + _, _ = env.evalStatement(node.Init) + } + cond, _ := env.EvalNode(node.Cond) + if cond.Kind() != r.Bool { + cf := cond.Interface() + return env.Errorf("if: invalid condition type <%T> %#v, expecting ", cf, cf) + } + if cond.Bool() { + return env.evalBlock(node.Body) + } else if node.Else != nil { + return env.evalStatement(node.Else) + } else { + return Nil, nil + } +} + +func (env *Env) evalIncDec(node *ast.IncDecStmt) (r.Value, []r.Value) { + var op token.Token + switch node.Tok { + case token.INC: + op = token.ADD_ASSIGN + case token.DEC: + op = token.SUB_ASSIGN + default: + return env.Errorf("unsupported *ast.IncDecStmt operation, expecting ++ or -- : %v <%v>", node, r.TypeOf(node)) + } + place := env.evalPlace(node.X) + return env.assignPlace(place, op, One), nil +} + +func (env *Env) evalSend(node *ast.SendStmt) (r.Value, []r.Value) { + channel := env.evalExpr1(node.Chan) + if channel.Kind() != r.Chan { + return env.Errorf("<- invoked on non-channel: %v evaluated to %v <%v>", node.Chan, channel, typeOf(channel)) + } + value := env.evalExpr1(node.Value) + channel.Send(value) + return None, nil +} + +func (env *Env) evalReturn(node *ast.ReturnStmt) (r.Value, []r.Value) { + var rets []r.Value + if len(node.Results) == 1 { + // return foo() returns *all* the values returned by foo, not just the first one + rets = PackValues(env.evalExpr(node.Results[0])) + } else { + rets = env.evalExprs(node.Results) + } + panic(eReturn{rets}) +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/switch.go b/vendor/github.com/cosmos72/gomacro/classic/switch.go new file mode 100644 index 0000000..a90070e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/switch.go @@ -0,0 +1,138 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * for.go + * + * Created on: Feb 15, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func (env *Env) evalSwitch(node *ast.SwitchStmt) (ret r.Value, rets []r.Value) { + if node.Init != nil { + // the scope of variables defined in the init statement of a switch + // is the switch itself + env = NewEnv(env, "switch") + env.evalStatement(node.Init) + } + var tag r.Value + if node.Tag == nil { + tag = True + } else { + tag = env.evalExpr1(node.Tag) + } + if node.Body == nil || len(node.Body.List) == 0 { + return None, nil + } + isFallthrough := false + cases := node.Body.List + n := len(cases) + default_i := n + for i := 0; i < n; i++ { + case_ := cases[i].(*ast.CaseClause) + if !isFallthrough && case_.List == nil { + // default will be executed later, if no case matches + default_i = i + } else if isFallthrough || env.caseMatches(tag, case_.List) { + ret, rets, isFallthrough = env.evalCaseBody(i == default_i, case_) + if !isFallthrough { + return ret, rets + } + } + } + // even "default:" can end with fallthrough... + for i := default_i; i < n; i++ { + case_ := cases[i].(*ast.CaseClause) + ret, rets, isFallthrough = env.evalCaseBody(i == default_i, case_) + if !isFallthrough { + return ret, rets + } + } + return None, nil +} + +func (env *Env) caseMatches(tag r.Value, list []ast.Expr) bool { + var i interface{} + var t r.Type = nil + if tag != None && tag != Nil { + i = tag.Interface() + t = tag.Type() + } + for _, expr := range list { + v := env.evalExpr1(expr) + if t == nil { + if v == Nil || v == None { + return true + } + } else { + v = env.valueToType(v, t) + // https://golang.org/pkg/reflect + // "To compare two Values, compare the results of the Interface method" + if v.Interface() == i { + return true + } + } + } + return false +} + +func (env *Env) evalCaseBody(isDefault bool, case_ *ast.CaseClause) (ret r.Value, rets []r.Value, isFallthrough bool) { + if case_ == nil || len(case_.Body) == 0 { + return None, nil, false + } + body := case_.Body + n := len(body) + // implement fallthrough + if last, ok := body[n-1].(*ast.BranchStmt); ok { + if last.Tok == token.FALLTHROUGH { + isFallthrough = true + body = body[0 : n-1] + } + } + + // each case body has its own environment + label := "case:" + if isDefault { + label = "default:" + } + panicking := true + defer func() { + if panicking { + switch pan := recover().(type) { + case eBreak: + ret, rets, isFallthrough = None, nil, false + default: + panic(pan) + } + } + }() + env = NewEnv(env, label) + ret, rets = env.evalStatements(body) + panicking = false + return +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/switch_type.go b/vendor/github.com/cosmos72/gomacro/classic/switch_type.go new file mode 100644 index 0000000..786505c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/switch_type.go @@ -0,0 +1,147 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * switch_type.go + * + * Created on: Mar 25, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func (env *Env) evalTypeSwitch(node *ast.TypeSwitchStmt) (ret r.Value, rets []r.Value) { + // the scope of variables defined in the init and assign statements of a type switch + // is the type switch itself + if node.Init != nil { + env = NewEnv(env, "type switch") + env.evalStatement(node.Init) + } + varname, expr := env.mustBeTypeSwitchStatement(node.Assign) + v := env.evalExpr1(expr) + if node.Body == nil || len(node.Body.List) == 0 { + return None, nil + } + var vt r.Type = nil + if v != None && v != Nil { + // go through interface{} to obtain actual concrete type + val := v.Interface() + v = r.ValueOf(val) + if val != nil { + vt = v.Type() + } + } + var default_ *ast.CaseClause + for _, stmt := range node.Body.List { + case_ := stmt.(*ast.CaseClause) + if case_.List == nil { + // default will be executed later, if no case matches + default_ = case_ + } else if t, ok := env.typecaseMatches(vt, case_.List); ok { + return env.evalTypecaseBody(varname, t, v, case_, false) + } + } + if default_ != nil { + return env.evalTypecaseBody(varname, TypeOfInterface, v, default_, true) + } + return None, nil +} + +func (env *Env) mustBeTypeSwitchStatement(node ast.Stmt) (*ast.Ident, ast.Expr) { + switch stmt := node.(type) { + case *ast.ExprStmt: + // x.(type) + return env.mustBeTypeSwitchAssert(node, stmt.X) + case *ast.AssignStmt: + // v := x.(type) + if len(stmt.Lhs) == 1 && len(stmt.Rhs) == 1 && stmt.Tok == token.DEFINE { + l := stmt.Lhs[0] + if lhs, ok := l.(*ast.Ident); ok { + r := stmt.Rhs[0] + _, rhs := env.mustBeTypeSwitchAssert(node, r) + return lhs, rhs + } + } + } + return env.badTypeSwitchStatement(node) +} + +func (env *Env) mustBeTypeSwitchAssert(s ast.Stmt, x ast.Expr) (*ast.Ident, ast.Expr) { + e, ok := x.(*ast.TypeAssertExpr) + if !ok || e.Type != nil { + return env.badTypeSwitchStatement(s) + } + return nil, e.X +} + +func (env *Env) badTypeSwitchStatement(s ast.Stmt) (*ast.Ident, ast.Expr) { + env.Errorf("invalid type switch expression, expecting x.(type) or v := x.(type), found: %v <%v>", + s, r.TypeOf(s)) + return nil, nil +} + +func (env *Env) typecaseMatches(vt r.Type, list []ast.Expr) (r.Type, bool) { + for _, expr := range list { + t := env.evalTypeOrNil(expr) + if t == nil { + if vt == nil { + return TypeOfInterface, true + } + } else if vt.AssignableTo(t) { + return t, true + } + } + return nil, false +} + +func (env *Env) evalTypecaseBody(varname *ast.Ident, t r.Type, val r.Value, case_ *ast.CaseClause, isDefault bool) (ret r.Value, rets []r.Value) { + if case_ == nil || len(case_.Body) == 0 { + return None, nil + } + panicking := true + defer func() { + if panicking { + switch pan := recover().(type) { + case eBreak: + ret, rets = None, nil + default: + panic(pan) + } + } + }() + // each case body has its own environment + label := "case:" + if isDefault { + label = "default:" + } + env = NewEnv(env, label) + if varname != nil { + env.DefineVar(varname.Name, t, val) + } + ret, rets = env.evalStatements(case_.Body) + panicking = false + return +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/type.go b/vendor/github.com/cosmos72/gomacro/classic/type.go new file mode 100644 index 0000000..7c678f7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/type.go @@ -0,0 +1,371 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * type.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "fmt" + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func typeOf(value r.Value) r.Type { + if value == None || value == Nil { + return TypeOfInterface + } + return value.Type() +} + +func (env *Env) evalExpr1OrType(node ast.Expr) (val r.Value, t r.Type) { + defer func() { + if r := recover(); r != nil { + switch r.(type) { + case RuntimeError: + t = env.evalType(node) + default: + panic(r) + } + } + }() + val = env.evalExpr1(node) + return val, nil +} + +// evalTypeAlias evaluates a type alias declaration, i.e. type Foo = /*...*/ +func (env *Env) evalTypeAlias(name string, node ast.Expr) r.Type { + t := env.evalType(node) + // never define bindings for "_" + if name != "_" { + if _, ok := env.Types.Get(name); ok { + env.Warnf("redefined type alias: %v", name) + } else { + env.Types.Ensure() + } + env.Types.Set(name, t) + } + return t +} + +// evalType evaluates a type +func (env *Env) evalType(node ast.Expr) r.Type { + t, _ := env.evalType2(node, false) + return t +} + +// evalTypeOrNil evaluates a type. as a special case used by type switch, evaluates *ast.Ident{Name:"nil"} to nil +func (env *Env) evalTypeOrNil(node ast.Expr) r.Type { + for { + switch expr := node.(type) { + case *ast.ParenExpr: + node = expr.X + continue + case *ast.Ident: + if expr.Name == "nil" { + val, found := env.resolveIdentifier(expr) + if found && val == Nil { + return nil + } + } + } + break + } + t, _ := env.evalType2(node, false) + return t +} + +// evalType0 evaluates a type expression. +// if allowEllipsis is true, it supports the special case &ast.Ellipsis{/*expression*/} +// that represents ellipsis in the last argument of a function declaration. +// The second return value is true both in the case above, and for array types whose length is [...] +func (env *Env) evalType2(node ast.Expr, allowEllipsis bool) (t r.Type, ellipsis bool) { + stars := 0 + for { + switch expr := node.(type) { + case *ast.StarExpr: + stars++ + node = expr.X + continue + case *ast.ParenExpr: + node = expr.X + continue + case *ast.Ellipsis: + if allowEllipsis { + node = expr.Elt + ellipsis = true + continue + } + } + break + } + if node != nil { + env.Pos = node.Pos() + } + + switch node := node.(type) { + case *ast.ArrayType: // also for slices + var ellipsis2 bool + t, ellipsis2 = env.evalTypeArray(node) + if !ellipsis { + ellipsis = ellipsis2 + } + case *ast.ChanType: + t = env.evalType(node.Value) + dir := r.BothDir + if node.Dir == ast.SEND { + dir = r.SendDir + } else if node.Dir == ast.RECV { + dir = r.RecvDir + } + t = r.ChanOf(dir, t) + case *ast.FuncType: + t, _, _ = env.evalTypeFunction(node) + case *ast.Ident: + t = env.evalTypeIdentifier(node.Name) + case *ast.InterfaceType: + t = env.evalTypeInterface(node) + case *ast.MapType: + kt := env.evalType(node.Key) + vt := env.evalType(node.Value) + t = r.MapOf(kt, vt) + case *ast.SelectorExpr: + if pkgIdent, ok := node.X.(*ast.Ident); ok { + pkgv := env.evalIdentifier(pkgIdent) + if pkg, ok := pkgv.Interface().(*PackageRef); ok { + name := node.Sel.Name + if t, ok = pkg.Types[name]; !ok { + env.Errorf("not a type: %v <%v>", node, r.TypeOf(node)) + } + } else { + env.Errorf("not a package: %v = %v <%v>", pkgIdent, pkgv, typeOf(pkgv)) + } + } else { + env.Errorf("unimplemented qualified type, expecting packageName.identifier: %v <%v>", node, r.TypeOf(node)) + } + case *ast.StructType: + // env.Debugf("evalType() struct declaration: %v <%v>", node, r.TypeOf(node)) + types, names := env.evalTypeFields(node.Fields) + // env.Debugf("evalType() struct names and types: %v %v", types, names) + fields := makeStructFields(env.FileEnv().Path, names, types) + // env.Debugf("evalType() struct fields: %#v", fields) + t = r.StructOf(fields) + case nil: + // type can be omitted in many case - then we must perform type inference + break + default: + // TODO which types are still missing? + env.Errorf("unimplemented type: %v <%v>", node, r.TypeOf(node)) + } + for i := 0; i < stars; i++ { + t = r.PtrTo(t) + } + if allowEllipsis && ellipsis { + t = r.SliceOf(t) + } + return t, ellipsis +} + +func (env *Env) evalTypeArray(node *ast.ArrayType) (t r.Type, ellipsis bool) { + t = env.evalType(node.Elt) + n := node.Len + switch n := n.(type) { + case *ast.Ellipsis: + t = r.SliceOf(t) + ellipsis = true + case nil: + t = r.SliceOf(t) + default: + count := env.evalExpr1(n).Int() + t = r.ArrayOf(int(count), t) + } + return t, ellipsis +} + +func (env *Env) evalTypeFunction(node *ast.FuncType) (t r.Type, argNames []string, resultNames []string) { + tFunc, _, argNames, resultNames := env.evalTypeFunctionOrMethod(nil, node) + return tFunc, argNames, resultNames +} + +func (env *Env) evalTypeFunctionOrMethod(recv *ast.Field, node *ast.FuncType) (tFunc r.Type, tFuncOrMethod r.Type, argNames []string, resultNames []string) { + argTypes, argNames, variadic := env.evalTypeFieldOrParamList(node.Params, true) + resultTypes, resultNames := env.evalTypeFields(node.Results) + tFunc = r.FuncOf(argTypes, resultTypes, variadic) + + if recv != nil { + recvTypes, recvNames, _ := env.evalTypeFieldsOrParams([]*ast.Field{recv}, false) + argTypes = append(recvTypes, argTypes...) + argNames = append(recvNames, argNames...) + tFuncOrMethod = r.FuncOf(argTypes, resultTypes, variadic) + } else { + tFuncOrMethod = tFunc + } + return tFunc, tFuncOrMethod, argNames, resultNames +} + +func (env *Env) evalTypeFields(fields *ast.FieldList) (types []r.Type, names []string) { + types, names, _ = env.evalTypeFieldOrParamList(fields, false) + return types, names +} + +func (env *Env) evalTypeFieldOrParamList(fields *ast.FieldList, allowEllipsis bool) (types []r.Type, names []string, ellipsis bool) { + var list []*ast.Field + if fields != nil { + list = fields.List + } + return env.evalTypeFieldsOrParams(list, allowEllipsis) +} + +func (env *Env) evalTypeFieldsOrParams(list []*ast.Field, allowEllipsis bool) (types []r.Type, names []string, ellipsis bool) { + types = make([]r.Type, 0) + names = ZeroStrings + n := len(list) + if n == 0 { + return types, names, ellipsis + } + var t r.Type + for i, f := range list { + t, ellipsis = env.evalType2(f.Type, i == n-1) + if len(f.Names) == 0 { + types = append(types, t) + names = append(names, "_") + // env.Debugf("evalTypeFields() %v -> %v", f.Type, t) + } else { + for _, ident := range f.Names { + types = append(types, t) + names = append(names, ident.Name) + // Debugf("evalTypeFields() %v %v -> %v", ident.Name, f.Type, t) + } + } + } + return types, names, ellipsis +} + +func (env *Env) evalTypeIdentifier(name string) r.Type { + for e := env; e != nil; e = e.Outer { + if t, ok := e.Types.Get(name); ok { + return t + } + } + env.Errorf("undefined identifier: %v", name) + return nil +} + +func makeStructFields(pkgPath string, names []string, types []r.Type) []r.StructField { + // pkgIdentifier := sanitizeIdentifier(pkgPath) + fields := make([]r.StructField, len(names)) + for i, name := range names { + fields[i] = r.StructField{ + Name: toExportedName(name), // Go 1.8 reflect.StructOf() supports *only* exported fields + Type: types[i], + Tag: "", + Anonymous: false, + } + } + return fields +} + +func toExportedName(name string) string { + if len(name) == 0 { + return name + } + ch := name[0] + if ch >= 'a' && ch <= 'z' { + ch -= 'a' - 'A' + } else if ch == '_' { + ch = 'X' + } else { + return name + } + return fmt.Sprintf("%c%s", ch, name[1:]) +} + +func (env *Env) valueToType(value r.Value, t r.Type) r.Value { + if value == None || value == Nil { + switch t.Kind() { + case r.Chan, r.Func, r.Interface, r.Map, r.Ptr, r.Slice: + return r.Zero(t) + } + } + newValue := ConvertValue(value, t) + if differentIntegerValues(value, newValue) { + env.Warnf("value %d overflows <%v>, truncated to %d", value, t, newValue) + } + return newValue +} + +func differentIntegerValues(v1 r.Value, v2 r.Value) bool { + k1, k2 := v1.Kind(), v2.Kind() + switch k1 { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + n1 := v1.Int() + switch k2 { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + return n1 != v2.Int() + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + return n1 < 0 || uint64(n1) != v2.Uint() + default: + return false + } + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + n1 := v1.Uint() + switch k2 { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + n2 := v2.Int() + return n2 < 0 || uint64(n2) != n1 + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + return n1 != v2.Uint() + default: + return false + } + default: + return false + } +} + +func toValues(args []interface{}) []r.Value { + n := len(args) + values := make([]r.Value, n) + for i := 0; i < n; i++ { + values[i] = r.ValueOf(args[i]) + } + return values +} + +func toInterfaces(values []r.Value) []interface{} { + n := len(values) + rets := make([]interface{}, n) + for i := 0; i < n; i++ { + rets[i] = toInterface(values[i]) + } + return rets +} + +func toInterface(value r.Value) interface{} { + if value != Nil && value != None { + return value.Interface() + } + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/unaryexpr.go b/vendor/github.com/cosmos72/gomacro/classic/unaryexpr.go new file mode 100644 index 0000000..6d44819 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/unaryexpr.go @@ -0,0 +1,267 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * unaryexpr.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package classic + +import ( + "fmt" + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + mt "github.com/cosmos72/gomacro/token" +) + +func (env *Env) unsupportedUnaryExpr(xv r.Value, op token.Token) (r.Value, []r.Value) { + opstr := mt.String(op) + return env.Errorf("unsupported unary expression %s on <%v>: %s %v", opstr, typeOf(xv), opstr, xv) +} + +func (env *Env) warnOverflowSignedMinus(x interface{}, ret interface{}) { + str := fmt.Sprintf("%d", x) + if len(str) > 0 && str[0] == '-' { + str = str[1:] + } + env.Warnf("value %s overflows <%v>, result truncated to %d", str, r.TypeOf(x), ret) +} + +func (env *Env) warnUnderflowUnsignedMinus(x interface{}, ret interface{}) { + env.Warnf("value -%d underflows <%v>, result truncated to %d", x, r.TypeOf(x), ret) +} + +func (env *Env) evalUnaryExpr(node *ast.UnaryExpr) (r.Value, []r.Value) { + op := node.Op + switch op { + case token.AND: + place := env.evalExpr1(node.X) + if place == Nil || !place.CanAddr() { + return env.Errorf("cannot take the address of: %v = %v <%v>", node.X, place, typeOf(place)) + } + return place.Addr(), nil + + // the various QUOTE special forms, the result of macroexpansion, + // and our extension "block statement inside expression" are: + // a block statements, wrapped in a closure, wrapped in a unary expression "MACRO", i.e.: + // MACRO func() { /*block*/ } + case mt.MACRO: + block := node.X.(*ast.FuncLit).Body + return env.evalBlock(block) + + case mt.QUOTE: + block := node.X.(*ast.FuncLit).Body + ret := env.evalQuote(block) + return r.ValueOf(ret), nil + + case mt.QUASIQUOTE: + block := node.X.(*ast.FuncLit).Body + ret := env.evalQuasiquote(block) + return r.ValueOf(ret), nil + + case mt.UNQUOTE, mt.UNQUOTE_SPLICE: + return env.Errorf("%s not inside quasiquote: %v <%v>", mt.String(op), node, r.TypeOf(node)) + } + + xv, _ := env.EvalNode(node.X) + + if op == token.ADD { + switch xv.Kind() { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64, + r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr, + r.Float32, r.Float64, r.Complex64, r.Complex128: + return xv, nil + default: + return env.unsupportedUnaryExpr(xv, op) + } + } + var ret interface{} + + switch xv.Kind() { + case r.Bool: + if op == token.NOT { + ret = !xv.Bool() + } + case r.Int: + x := int(xv.Int()) + switch op { + case token.SUB: + ret = -x + if x == -x && x != 0 { + env.warnOverflowSignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Int8: + x := int8(xv.Int()) + switch op { + case token.SUB: + ret = -x + if x == -x && x != 0 { + env.warnOverflowSignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Int16: + x := int16(xv.Int()) + switch op { + case token.SUB: + ret = -x + if x == -x && x != 0 { + env.warnOverflowSignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Int32: + x := int32(xv.Int()) + switch op { + case token.SUB: + ret = -x + if x == -x && x != 0 { + env.warnOverflowSignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Int64: + x := xv.Int() + switch op { + case token.SUB: + ret = -x + if x == -x && x != 0 { + env.warnOverflowSignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Uint: + x := uint(xv.Uint()) + switch op { + case token.SUB: + ret = -x + if x != 0 { + env.warnUnderflowUnsignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Uint8: + x := uint8(xv.Uint()) + switch op { + case token.SUB: + ret = -x + if x != 0 { + env.warnUnderflowUnsignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Uint16: + x := uint16(xv.Uint()) + switch op { + case token.SUB: + ret = -x + if x != 0 { + env.warnUnderflowUnsignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Uint32: + x := uint32(xv.Uint()) + switch op { + case token.SUB: + ret = -x + if x != 0 { + env.warnUnderflowUnsignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Uint64: + x := xv.Uint() + switch op { + case token.SUB: + ret = -x + if x != 0 { + env.warnUnderflowUnsignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Uintptr: + x := uintptr(xv.Uint()) + switch op { + case token.SUB: + ret = -x + if x != 0 { + env.warnUnderflowUnsignedMinus(x, ret) + } + case token.XOR: + ret = ^x + } + case r.Float32: + x := float32(xv.Float()) + switch op { + case token.SUB: + ret = -x + } + case r.Float64: + x := xv.Float() + switch op { + case token.SUB: + ret = -x + } + case r.Complex64: + x := complex64(xv.Complex()) + switch op { + case token.SUB: + ret = -x + } + case r.Complex128: + x := xv.Complex() + switch op { + case token.SUB: + ret = -x + } + case r.Chan: + switch op { + case token.ARROW: + ret, ok := xv.Recv() + return ret, []r.Value{ret, r.ValueOf(ok)} + } + } + if ret == nil { + return env.unsupportedUnaryExpr(xv, op) + } + retv := r.ValueOf(ret) + xt := xv.Type() + if retv.Type() != xt { + retv = retv.Convert(xt) + } + return retv, nil +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/x_package.go b/vendor/github.com/cosmos72/gomacro/classic/x_package.go new file mode 100644 index 0000000..1bb1bab --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/classic/x_package.go @@ -0,0 +1,38 @@ +// this file was generated by gomacro command: import _i "github.com/cosmos72/gomacro/classic" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package classic + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/imports" +) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/classic" +func init() { + imports.Packages["github.com/cosmos72/gomacro/classic"] = imports.Package{ + Binds: map[string]r.Value{ + "MultiThread": r.ValueOf(MultiThread), + "NewEnv": r.ValueOf(NewEnv), + "NewThreadGlobals": r.ValueOf(NewThreadGlobals), + "NilEnv": r.ValueOf(&NilEnv).Elem(), + }, + Types: map[string]r.Type{ + "BindMap": r.TypeOf((*BindMap)(nil)).Elem(), + "CallFrame": r.TypeOf((*CallFrame)(nil)).Elem(), + "CallStack": r.TypeOf((*CallStack)(nil)).Elem(), + "Constructor": r.TypeOf((*Constructor)(nil)).Elem(), + "Env": r.TypeOf((*Env)(nil)).Elem(), + "Error_builtin": r.TypeOf((*Error_builtin)(nil)).Elem(), + "Function": r.TypeOf((*Function)(nil)).Elem(), + "Inspector": r.TypeOf((*Inspector)(nil)).Elem(), + "Interface": r.TypeOf((*Interface)(nil)).Elem(), + "Macro": r.TypeOf((*Macro)(nil)).Elem(), + "Methods": r.TypeOf((*Methods)(nil)).Elem(), + "ThreadGlobals": r.TypeOf((*ThreadGlobals)(nil)).Elem(), + "TypeMap": r.TypeOf((*TypeMap)(nil)).Elem(), + "TypedValue": r.TypeOf((*TypedValue)(nil)).Elem(), + }, + Proxies: map[string]r.Type{}} +} diff --git a/vendor/github.com/cosmos72/gomacro/cmd.go b/vendor/github.com/cosmos72/gomacro/cmd.go new file mode 100644 index 0000000..b1ac41f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/cmd.go @@ -0,0 +1,300 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * cmd.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package main + +import ( + "bufio" + "bytes" + "errors" + "fmt" + "io" + "io/ioutil" + "os" + "strings" + + . "github.com/cosmos72/gomacro/base" + "github.com/cosmos72/gomacro/classic" +) + +type Cmd struct { + *classic.Interp + WriteDeclsAndStmtsToFile, OverwriteFiles bool +} + +func (cmd *Cmd) Init() { + cmd.Interp = classic.New() + cmd.ParserMode = 0 + cmd.Options = OptTrapPanic | OptShowPrompt | OptShowEval | OptShowEvalType // | OptShowAfterMacroExpansion // | OptDebugMacroExpand // | OptDebugQuasiquote // | OptShowEvalDuration // | OptShowAfterParse + cmd.WriteDeclsAndStmtsToFile = false + cmd.OverwriteFiles = false +} + +func (cmd *Cmd) Main(args []string) (err error) { + if cmd.Interp == nil { + cmd.Init() + } + ir := cmd.Interp + env := cmd.Env + + var set, clear Options + var repl = true + cmd.WriteDeclsAndStmtsToFile = false + cmd.OverwriteFiles = false + + for len(args) > 0 { + switch args[0] { + case "-c", "--collect": + env.Options |= OptCollectDeclarations | OptCollectStatements + case "-e", "--expr": + if len(args) > 1 { + repl = false + buf := bytes.NewBufferString(args[1]) + buf.WriteByte('\n') // because ReadMultiLine() needs a final '\n' + env.Options |= OptShowEval // set by default, overridden by -s, -v and -vv + env.Options = (env.Options | set) &^ clear + _, err := cmd.EvalReader(buf) + if err != nil { + return err + } + args = args[1:] + } + case "-f", "--force-overwrite": + cmd.OverwriteFiles = true + case "-h", "--help": + return cmd.Usage() + case "-i", "--repl": + repl = false + env.Options |= OptShowPrompt | OptShowEval | OptShowEvalType // set by default, overridden by -s, -v and -vv + env.Options = (env.Options | set) &^ clear + ir.ReplStdin() + + case "-m", "--macro-only": + set |= OptMacroExpandOnly + clear &^= OptMacroExpandOnly + case "-n", "--no-trap": + set &^= OptTrapPanic | OptPanicStackTrace + clear |= OptTrapPanic | OptPanicStackTrace + case "-t", "--trap": + set |= OptTrapPanic | OptPanicStackTrace + clear &= OptTrapPanic | OptPanicStackTrace + case "-s", "--silent": + set &^= OptShowEval | OptShowEvalType + clear |= OptShowEval | OptShowEvalType + case "-v", "--verbose": + set = (set | OptShowEval) &^ OptShowEvalType + clear = (clear &^ OptShowEval) | OptShowEvalType + case "-vv", "--very-verbose": + set |= OptShowEval | OptShowEvalType + clear &^= OptShowEval | OptShowEvalType + case "-w", "--write-decls": + cmd.WriteDeclsAndStmtsToFile = true + case "-x", "--exec": + clear |= OptMacroExpandOnly + set &^= OptMacroExpandOnly + default: + arg := args[0] + if len(arg) > 0 && arg[0] == '-' { + fmt.Fprintf(env.Stderr, "gomacro: unrecognized option '%s'.\nTry 'gomacro --help' for more information\n", arg) + return nil + } + repl = false + if cmd.WriteDeclsAndStmtsToFile { + env.Options |= OptCollectDeclarations | OptCollectStatements + } + env.Options &^= OptShowPrompt | OptShowEval | OptShowEvalType // cleared by default, overridden by -s, -v and -vv + env.Options = (env.Options | set) &^ clear + cmd.EvalFileOrDir(arg) + + env.Imports, env.Declarations, env.Statements = nil, nil, nil + } + args = args[1:] + } + if repl { + env.Options |= OptShowPrompt | OptShowEval | OptShowEvalType // set by default, overridden by -s, -v and -vv + env.Options = (env.Options | set) &^ clear + ir.ReplStdin() + } + return nil +} + +func (cmd *Cmd) Usage() error { + fmt.Fprint(cmd.Env.Stdout, `usage: gomacro [OPTIONS] [files-and-dirs] + + Recognized options: + -c, --collect collect declarations and statements, to print them later + -e, --expr EXPR evaluate expression + -f, --force-overwrite option -w will overwrite existing files + -h, --help show this help and exit + -i, --repl interactive. start a REPL after evaluating expression, files and dirs. + default: start a REPL only if no expressions, files or dirs are specified + -m, --macro-only do not execute code, only parse and macroexpand it. + useful to run gomacro as a Go preprocessor + -n, --no-trap do not trap panics in the interpreter + -t, --trap trap panics in the interpreter (default) + -s, --silent silent. do NOT show startup message, prompt, and expressions results. + default when executing files and dirs. + -v, --verbose verbose. show startup message, prompt, and expressions results. + default when executing an expression. + -vv, --very-verbose as -v, and in addition show the type of expressions results. + default when executing a REPL + -w, --write-decls write collected declarations and statements to *.go files. + implies -c + -x, --exec execute parsed code (default). disabled by -m + + Options are processed in order, except for -i that is always processed as last. + + Collected declarations and statements can be also written to standard output + or to a file with the REPL command :write +`) + return nil +} + +func (cmd *Cmd) EvalFilesAndDirs(filesAndDirs ...string) error { + for _, fileOrDir := range filesAndDirs { + err := cmd.EvalFileOrDir(fileOrDir) + if err != nil { + return err + } + } + return nil +} + +func (cmd *Cmd) EvalFileOrDir(fileOrDir string) error { + info, err := os.Stat(fileOrDir) + if err != nil { + return err + } + if info.IsDir() { + return cmd.EvalDir(fileOrDir) + } else { + return cmd.EvalFile(fileOrDir) + } +} + +func (cmd *Cmd) EvalDir(dirname string) error { + files, err := ioutil.ReadDir(dirname) + if err != nil { + return err + } + for _, file := range files { + filename := file.Name() + if !file.IsDir() && strings.HasSuffix(filename, ".gomacro") { + filename = fmt.Sprintf("%s%c%s", dirname, os.PathSeparator, filename) + err := cmd.EvalFile(filename) + if err != nil { + return err + } + } + } + return nil +} + +// use line comments for disclaimer: block comments prevent Go build tags from working +const disclaimer = `// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +` + +func (cmd *Cmd) EvalFile(filename string) (err error) { + env := cmd.Env + env.Declarations = nil + env.Statements = nil + saveFilename := env.Filename + + f, err := os.Open(filename) + if err != nil { + return err + } + defer func() { + f.Close() + env.Filename = saveFilename + }() + env.Filename = filename + var comments string + comments, err = cmd.EvalReader(f) + if err != nil { + return err + } + + if cmd.WriteDeclsAndStmtsToFile { + outname := filename + if dot := strings.LastIndexByte(outname, '.'); dot >= 0 { + // sanity check: dot must be in the file name, NOT in its path + if slash := strings.LastIndexByte(outname, os.PathSeparator); slash < dot { + outname = outname[0:dot] + } + } + outname += ".go" + if !cmd.OverwriteFiles { + _, err := os.Stat(outname) + if err == nil { + env.Warnf("file exists already, use -f to force overwriting: %v", outname) + return nil + } + } + env.WriteDeclsToFile(outname, disclaimer, comments) + + if env.Options&OptShowEval != 0 { + fmt.Fprintf(env.Stdout, "// processed file: %v\t-> %v\n", filename, outname) + } + } + return nil +} + +func (cmd *Cmd) EvalReader(src io.Reader) (comments string, err error) { + defer func() { + if rec := recover(); rec != nil { + switch rec := rec.(type) { + case error: + err = rec + default: + err = errors.New(fmt.Sprint(rec)) + } + } + }() + in := bufio.NewReader(src) + ir := cmd.Interp + env := ir.Env + env.Options &^= OptShowPrompt // parsing a file: suppress prompt + env.Line = 0 + + // perform the first iteration manually, to collect comments + str, firstToken := env.ReadMultiline(in, ReadOptCollectAllComments) + if firstToken >= 0 { + comments = str[0:firstToken] + if firstToken > 0 { + str = str[firstToken:] + env.IncLine(comments) + } + } + if ir.ParseEvalPrint(str, in) { + for ir.ReadParseEvalPrint(in) { + } + } + return comments, nil +} diff --git a/vendor/github.com/cosmos72/gomacro/doc/quasiquote.md b/vendor/github.com/cosmos72/gomacro/doc/quasiquote.md new file mode 100644 index 0000000..f81c99a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/doc/quasiquote.md @@ -0,0 +1,268 @@ +Quasiquote +========== + +implementing quasiquote, unquote and unquote_splice in Go +-------------------------------------------------------- + +One of the main motivations behind the creation of Go interpreter `gomacro` +was to add Lisp-like macros to Go. + +This includes implementing Common Lisp `quote`, `quasiquote` and, more crucially, +`unquote` and `unquote_splice` i.e. Common Lisp macro characters `'` `` ` `` `,` and `,@` + +Since Go language is not homoiconic, i.e. (source) code and (program) data +are not represented identically, this is a challenge. + +### Parser ### + +The first (moderate) difficulty is adding support for `'` `` ` `` `,` and `,@` to Go parser. +It was solved by forking Go standard packages https://golang.org/pkg/go/scanner/ +and https://golang.org/pkg/go/parser/ and patching them. + +Characters `'` `` ` `` and `,` are already reserved in Go, +so the author decided to replace them as follows: +* quote `'` must be written `~'` +* quasiquote `` ` `` must be written `~"` (not ``~` `` because the latter messes up syntax hilighting in Go-aware editors and IDEs - starts a multiline raw string) +* unquote `,` must be written `~,` +* unquote_splice `,@` must be written `~,@` + +the prefix `~` is configurabile when manually instantiating the modified parser. + +Go parser produces as output an abstract syntax tree (AST) represented as a tree of `ast.Node`, +from the standard package https://golang.org/pkg/go/ast/ + +Defining new node types is deliberately impossible (`ast.Node` is an interface with unexported methods), +luckily the existing types are flexible enough to accommodate the new syntax. + +The chosen representation is somewhat cumbersome but fully general: newly created constants `token.QUOTE`, `token.QUASIQUOTE`, +`token.UNQUOTE` and `token.UNQUOTE_SPLICE` are used as unary operators on a fictitious closure containing the quoted code. +Examples: +* `'x` must be written `~'x` and is parsed as if written `~' func() { x }` +* `` `{x = y}`` must be written `~"{x = y}` and is parsed as if written `~" func() { x = y }` +* `,{1 + 2}` must be written `~,{1 + 2}` and is parsed as if written `~, func() { 1 + 2 }` +* `,@{foo()}` must be written `~,@{foo()}` and is parsed as if written `~,@ func() { foo() }` + +The fictitious closures are necessary because `ast.UnaryExpr` only allows an expression as its operand - not arbitrary +statements or declarations. +In Go, the only expression that can contain arbitrary statements and declarations is a closure (in Go terms, a "function literal") + +### Classic interpreter ### + +`gomacro` contains two interpreters: "classic" and "fast". + +The classic interpreter is compact (about 5k LOC) and directly executes the AST, producing `reflect.Value` objects as output. +It is also quite slow (1000-3000 times slower than compiled Go), due to the overhead of continuously dispatching on the type +and contents of `ast.Node` and working with `reflect.Value` instead of native Go types. + +One significant advantage of directly executing the AST is the simplicity of quasiquote implementation: +it visits depth-first the whole AST, looking for `ast.UnaryExpr` whose operator is `token.QUOTE`, `token.QUASIQUOTE`, +`token.UNQUOTE` or `token.UNQUOTE_SPLICE`, and performs the corresponding operation (either return the quoted code literally or evaluate it) +while keeping track of the current quasiquotation depth (the number of entered `~"` minus the number of entered `~,` and `~,@`) + +### Fast interpreter ### + +#### Architecture #### + +The second, "fast" interpreter included in `gomacro` is more sophisticated. Instead of directly executing the AST, +it splits the execution in two phases: +1. visits the AST depth-first and "compiles" i.e. transforms it into tree of closures - one for each expression to be executed. + For example, `a + b` causes the interpreter to execute something like: + ``` + var a = compile("a").(func(env *Env) int) + var b = compile("b").(func(env *Env) int) + var sum_ab = func(env *Env) int { + return a(env) + b(env) + } + ``` + which creates a closure that, when later executed, computes `a + b`. + The fast interpreter also performs type checking and type inference while "compiling" this tree of closures. + + Statements (including declarations) are "compiled", i.e. transformed, a bit differently: each one becomes + a closure executing the statement in the interpreter, and returning the next closure to be executed. + For example, `if x { foo() } else { bar() }` causes the interpreter to execute something like: + ``` + var x = compile("x").(func(env *Env) bool) + var foo = compile("foo").(func(env *Env) func()) + var bar = compile("bar").(func(env *Env) func()) + var ip_then, ip_else, ip_finish int // will be set below + Code.Append(func(env *Env) (Stmt, *Env) { + var ip int + if x(env) { + ip = ip_then // goto ip_then + } else { + ip = ip_else // goto ip_else + } + env.Code.IP = ip + return env.Code[ip], env + }) + ip_then = Code.Len() + Code.Append(func(env *Env) (Stmt, *Env) { + foo(env)() + env.Code.IP = ip_finish // goto ip_finish i.e. skip else branch + return env.Code[ip_finish], env + }) + ip_else = Code.Len() + Code.Append(func(env *Env) (Stmt, *Env) { + bar(env)() + env.Code.IP = ip_finish // can also be written env.Code.IP++ + return env.Code[ip_finish], env + }) + ip_finish = Code.Len() + ``` + which creates a list of closures that, when later executed, computes `if x { foo() } else { bar() }`. + + Note the extensive use of closures, i.e. anonymous functions that access **mutable** variables + of the surrounding scope: in this case, `x` `foo` `bar` `ip_then` `ip_else` and `ip_finish`. + +2) executes the "compiled" code, i.e. calls the created closures + +"fast" interpreter also uses native Go types where possible, to further speed up execution +and reduce the reliance on `reflect.Value` and the overhead it imposes. + +The result is a much larger interpreter: +* 20k LOC written manually +* plus further 80k LOC, generated from 8k LOC of macros, by using the "classic" interpreter and its quote, + quasiquote and macros as a code generation tool + +It is also significantly faster than the "classic" interpreter: +on most microbenchmarks, "fast" interpreter is 10-100 times slower than compiled code, instead of 1000-3000 times slower. + +Interestingly, the "fast" interpreter appears to be faster than [python](https://www.python.org/) at least +on the fibonacci and collatz microbenchmarks - see [examples](../examples/) + +#### Quasiquotation difficulties #### + +The main difficulty in implementing quasiquotation in the "fast" interpreter is the "compile" phase: +code containing quasiquote must be type checked, and code fragments that must be evaluated should be transformed +into closures returning the result of evaluation. This is a problem similar to what Common Lisp compilers face +when compiling quasiquotations, with the difference that Go is not homoiconic. + +In practice, the lack of homoiconicity means that standard textbook quasiquotation algorithms for Common Lisp +are not directly applicable to Go. Some examples will clarify this last statement: + +In Common Lisp the textbook quasiquotation algorithms, as for example http://www.lispworks.com/documentation/HyperSpec/Body/02_df.htm +recursively visit the input AST, producing an output AST that does **not** contain `` ` `` `,` or `,@` +at the price of typically producing output significantly different from the input. Examples: + +* `` `(+ x ,y)`` is typically expanded to the equivalent source code: `(list '+ 'x y)` - to verify it, try ``(macroexpand '`(+ x ,y))`` in a Common Lisp REPL +* `` `(x ,y)`` is typically expanded to the equivalent `(list 'x y)` +* `` `(x ,@y)`` is typically expanded to the equivalent `(list* 'x y)` +* `` `(x ,@y ,@z)`` is typically expanded to the equivalent `(list* 'x (append y z))` +* and so on... + +#### First approach: quasiquotation is source transformation #### + +Any attempt to translate (almost) one-to-one the same algorithm in Go, and thus also the resulting examples, +would create an algorithm able to perform the following expansions: + +* `~"{x + ,y}` would be expanded to the equivalent source code: `&ast.BinaryExpr{Op: token.ADD, X: &ast.BasicLit{Name: "x"}, Y: y}` + i.e. an ast.Node representing addition between a literal "x" and an ast.Expr equal to the result of evaluating y +* `~"{x; ,y}` would be expanded to the source code: `[]ast.Stmt{&ast.ExprStmt{X: &ast.BasicLit{Name: "x"}}, y}` + i.e. a list of two ast.Stmt: a literal "x" wrapped in a statement, and an ast.Stmt equal to the result of evaluating y. +* `~"{x; ,@y}` would be expanded to the source code: `append([]ast.Stmt{&ast.ExprStmt{X: &ast.BasicLit{Name: "x"}}}, y...)` + where y must be an expression that, once type-checked and transformed into a closure, will return a []ast.Stmt +* `~"{x; ,@y; ,@z}` would be expanded to the source code: `append(append([]ast.Stmt{&ast.ExprStmt{X: &ast.BasicLit{Name: "x"}}}, y...), z...)` + where x and y must be expressions that, once type-checked and transformed into closures, will return []ast.Stmt + +Note the differences between the various expansions, and the dependency on "go/ast" package of the expanded source code. + +Some possible simplifications are: +1. allow `~'` in the expanded source code +2. work on `ast2.Ast` instead of `ast.Node` and the dozens of concrete types + implementing `ast.Node`: the formers is an `ast.Node` wrapper with an uniform API that greatly simplifies + manipulating Go abstract syntax trees. +3. implement dedicated functions and methods operating on `ast2.Ast`: `Quote`, `Unquote`, `Init`, `Concat` + and whatever else is needed to simplify the expansion + +* `~"{x + ~,y}` would be expanded to the equivalent source code: `in.New().Init(~'x, y)` + where `in` is an `ast2.Ast` containing `~"{x + ~,y}` +* `~"{x; ~,y}` would be expanded to the source code: `in.New().Init(~'x, y)` + where `in` is an `ast2.Ast` containing `~"{x; ~,y}` +* `~"{x; ~,@y}` would be expanded to the source code: `in.New().Init(~'x).Concat(y)` + where `in` is an `ast2.Ast` containing `~"{x; ~,@y}` +* `~"{x; ~,@y; ~,@z}` would be expanded to the source code: `in.New().Init(~'x).Concat(y).Concat(z)` + where `in` is an `ast2.Ast` containing `~"{x; ~,@y; ~,@z}` + +Even with such simplifications, this first approach looks tricky to implement correctly in all cases, +and also fragile: expanded source code depends on external libraries, which could be shadowed or unavailable. + +#### Second approach: quasiquotation merged with compile #### + +Since quasiquotation must be executed on the output of macroexpansion (quasiquote could be even considered a macro), +it is the last phase before "compile" i.e. before transformation of source code to a tree of closures. + +Thus an alternative approach is to merge quasiquotation with the compile phase: +while transforming AST nodes to closures, the "fast" interpreter could detect quasiquotes +and expand them - possibly not to source code, but directly to a tree of closures. + +In other words, quasiquotation could directly produce executable code, without going through +the intermediate phase of expanding it to source code. + +Is it easier to implement and/or more robust? Let's see. + +* `~"{x + ~,y}` would be transformed into a closure, by executing something like (`node` is an `ast.Node` + containing `~"{x + ~,y}`): + ``` + var x = quasiquote(node.X).(func(*Env) reflect.Value) // compile to a closure that returns a copy of the &ast.BasicLit wrapped in reflect.Value + var y = compile("y").(func (*Env) reflect.Value) // compile to a closure that returns an ast.Node wrapped in reflect.Value + var in = ToAst(node) // wrap into ast2.Ast + var form = in.New() // empty ast2.Ast with same type, operator and source position as 'in' + + var closure = func(env *Env) ast.Node { + var out = form.New() // create a new, empty ast2.Ast at each invokation + var xform = ToAst(x(env).Interface()) + var yform = ToAst(y(env).Interface()) + + out.Set(0, xform) + out.Set(1, yform) + return ToNode(out) + } + ``` +* `~"{x; ~,y}` would be transformed into a closure, by executing something like (`node` is an `ast.Node` + containing `~"{x; ~,y}`): + ``` + var x = quasiquote(node.X).(func(*Env) reflect.Value) // compile to a closure that returns a copy of the &ast.BasicLit wrapped in reflect.Value + var y = compile("y").(func (env *Env) reflect.Value) // compile to a closure that returns ast.Node wrapped in reflect.Value + var in = ToAst(node) // wrap into ast2.Ast + var form = in.New() // empty ast2.Ast with same type, operator and source position as 'in' + + var closure = func(env *Env) ast.Node { + var out = form.New() // create a new, empty ast2.Ast at each invokation + var xform = ToAst(x(env).Interface()) + var yform = ToAst(y(env).Interface()) + + out.Append(xform) + out.Append(yform) + return ToNode(out) + } + ``` +* `~"{x; ~,@y}` would be transformed into a closure, by executing something like (`node` is an `ast.Node` + containing `~"{x; ~,@y}`): + ``` + var x = quasiquote(node.X).(func(*Env) reflect.Value) // compile to a closure that returns a copy of the &ast.BasicLit wrapped in reflect.Value + var y = compile("y").(func (env *Env) reflect.Value) // compile to a closure that returns ast.Node wrapped in reflect.Value + var in = ToAst(node) // wrap into ast2.Ast + var form = in.New() // empty ast2.Ast with same type, operator and source position as 'in' + + var closure = func(env *Env) ast.Node { + var out = form.New() // create a new, empty ast2.Ast at each invokation + var xform = ToAst(x(env).Interface()) + var yform = ToAst(y(env).Interface()) + + out.Append(xform) + for i := 0; i < y.Len(); i++ { + out.Append(y.Get(i)) + } + return ToNode(out) + } + ``` + +While the above looks somewhat complicated, it changes very little from one case to the other, +and it is actually the **implementation** of quasiquote, not its output! + +Such implementation depends on `ast2.Ast` and related functions, but it will be part of the interpreter +itself - which already has such dependency - while macroexpanded source code would remain free of such dependencies. + +It seems this second approach only has advantages... the only evident disadvantage is the lack +of user-available mechanisms to expand quasiquotations, i.e. an eventual "Macroexpand" function +available at the REPL and to interpreted code, would **not** expand quasiquotes. diff --git a/vendor/github.com/cosmos72/gomacro/example/arith.gomacro b/vendor/github.com/cosmos72/gomacro/example/arith.gomacro new file mode 100755 index 0000000..de9bf48 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/arith.gomacro @@ -0,0 +1,11 @@ +#!/usr/bin/env gomacro + +func BenchmarkArith(n int) int { + total := 0 + for i := 0; i < n; i++ { + total += ((n*2+3)&4 | 5 ^ 6) / (n | 1) + } + return total +} + +println(BenchmarkArith(1000000)) diff --git a/vendor/github.com/cosmos72/gomacro/example/bag.go.easyjson b/vendor/github.com/cosmos72/gomacro/example/bag.go.easyjson new file mode 100644 index 0000000..feeddac --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/bag.go.easyjson @@ -0,0 +1,830 @@ +// Code generated by easyjson for marshaling/unmarshaling. DO NOT EDIT. + +package main + +import ( + json "encoding/json" + easyjson "github.com/mailru/easyjson" + jlexer "github.com/mailru/easyjson/jlexer" + jwriter "github.com/mailru/easyjson/jwriter" +) + +// suppress unused package warning +var ( + _ *json.RawMessage + _ *jlexer.Lexer + _ *jwriter.Writer + _ easyjson.Marshaler +) + +func easyjson9d2dde3aDecodeGithubComCosmos72GomacroExamples(in *jlexer.Lexer, out *Box) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeString() + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "B": + if in.IsNull() { + in.Skip() + out.B = nil + } else { + in.Delim('[') + if out.B == nil { + if !in.IsDelim(']') { + out.B = make([]bool, 0, 64) + } else { + out.B = []bool{} + } + } else { + out.B = (out.B)[:0] + } + for !in.IsDelim(']') { + var v1 bool + v1 = bool(in.Bool()) + out.B = append(out.B, v1) + in.WantComma() + } + in.Delim(']') + } + case "I": + if in.IsNull() { + in.Skip() + out.I = nil + } else { + in.Delim('[') + if out.I == nil { + if !in.IsDelim(']') { + out.I = make([]int, 0, 8) + } else { + out.I = []int{} + } + } else { + out.I = (out.I)[:0] + } + for !in.IsDelim(']') { + var v2 int + v2 = int(in.Int()) + out.I = append(out.I, v2) + in.WantComma() + } + in.Delim(']') + } + case "I8": + if in.IsNull() { + in.Skip() + out.I8 = nil + } else { + in.Delim('[') + if out.I8 == nil { + if !in.IsDelim(']') { + out.I8 = make([]int8, 0, 64) + } else { + out.I8 = []int8{} + } + } else { + out.I8 = (out.I8)[:0] + } + for !in.IsDelim(']') { + var v3 int8 + v3 = int8(in.Int8()) + out.I8 = append(out.I8, v3) + in.WantComma() + } + in.Delim(']') + } + case "I16": + if in.IsNull() { + in.Skip() + out.I16 = nil + } else { + in.Delim('[') + if out.I16 == nil { + if !in.IsDelim(']') { + out.I16 = make([]int16, 0, 32) + } else { + out.I16 = []int16{} + } + } else { + out.I16 = (out.I16)[:0] + } + for !in.IsDelim(']') { + var v4 int16 + v4 = int16(in.Int16()) + out.I16 = append(out.I16, v4) + in.WantComma() + } + in.Delim(']') + } + case "I32": + if in.IsNull() { + in.Skip() + out.I32 = nil + } else { + in.Delim('[') + if out.I32 == nil { + if !in.IsDelim(']') { + out.I32 = make([]int32, 0, 16) + } else { + out.I32 = []int32{} + } + } else { + out.I32 = (out.I32)[:0] + } + for !in.IsDelim(']') { + var v5 int32 + v5 = int32(in.Int32()) + out.I32 = append(out.I32, v5) + in.WantComma() + } + in.Delim(']') + } + case "I64": + if in.IsNull() { + in.Skip() + out.I64 = nil + } else { + in.Delim('[') + if out.I64 == nil { + if !in.IsDelim(']') { + out.I64 = make([]int64, 0, 8) + } else { + out.I64 = []int64{} + } + } else { + out.I64 = (out.I64)[:0] + } + for !in.IsDelim(']') { + var v6 int64 + v6 = int64(in.Int64()) + out.I64 = append(out.I64, v6) + in.WantComma() + } + in.Delim(']') + } + case "U": + if in.IsNull() { + in.Skip() + out.U = nil + } else { + in.Delim('[') + if out.U == nil { + if !in.IsDelim(']') { + out.U = make([]uint, 0, 8) + } else { + out.U = []uint{} + } + } else { + out.U = (out.U)[:0] + } + for !in.IsDelim(']') { + var v7 uint + v7 = uint(in.Uint()) + out.U = append(out.U, v7) + in.WantComma() + } + in.Delim(']') + } + case "U8": + if in.IsNull() { + in.Skip() + out.U8 = nil + } else { + out.U8 = in.Bytes() + } + case "U16": + if in.IsNull() { + in.Skip() + out.U16 = nil + } else { + in.Delim('[') + if out.U16 == nil { + if !in.IsDelim(']') { + out.U16 = make([]uint16, 0, 32) + } else { + out.U16 = []uint16{} + } + } else { + out.U16 = (out.U16)[:0] + } + for !in.IsDelim(']') { + var v9 uint16 + v9 = uint16(in.Uint16()) + out.U16 = append(out.U16, v9) + in.WantComma() + } + in.Delim(']') + } + case "U32": + if in.IsNull() { + in.Skip() + out.U32 = nil + } else { + in.Delim('[') + if out.U32 == nil { + if !in.IsDelim(']') { + out.U32 = make([]uint32, 0, 16) + } else { + out.U32 = []uint32{} + } + } else { + out.U32 = (out.U32)[:0] + } + for !in.IsDelim(']') { + var v10 uint32 + v10 = uint32(in.Uint32()) + out.U32 = append(out.U32, v10) + in.WantComma() + } + in.Delim(']') + } + case "U64": + if in.IsNull() { + in.Skip() + out.U64 = nil + } else { + in.Delim('[') + if out.U64 == nil { + if !in.IsDelim(']') { + out.U64 = make([]uint64, 0, 8) + } else { + out.U64 = []uint64{} + } + } else { + out.U64 = (out.U64)[:0] + } + for !in.IsDelim(']') { + var v11 uint64 + v11 = uint64(in.Uint64()) + out.U64 = append(out.U64, v11) + in.WantComma() + } + in.Delim(']') + } + case "S": + if in.IsNull() { + in.Skip() + out.S = nil + } else { + in.Delim('[') + if out.S == nil { + if !in.IsDelim(']') { + out.S = make([]string, 0, 4) + } else { + out.S = []string{} + } + } else { + out.S = (out.S)[:0] + } + for !in.IsDelim(']') { + var v12 string + v12 = string(in.String()) + out.S = append(out.S, v12) + in.WantComma() + } + in.Delim(']') + } + case "Any": + if in.IsNull() { + in.Skip() + out.Any = nil + } else { + in.Delim('[') + if out.Any == nil { + if !in.IsDelim(']') { + out.Any = make([]interface{}, 0, 4) + } else { + out.Any = []interface{}{} + } + } else { + out.Any = (out.Any)[:0] + } + for !in.IsDelim(']') { + var v13 interface{} + if m, ok := v13.(easyjson.Unmarshaler); ok { + m.UnmarshalEasyJSON(in) + } else if m, ok := v13.(json.Unmarshaler); ok { + m.UnmarshalJSON(in.Raw()) + } else { + v13 = in.Interface() + } + out.Any = append(out.Any, v13) + in.WantComma() + } + in.Delim(']') + } + case "Bag": + if in.IsNull() { + in.Skip() + out.Bag = nil + } else { + in.Delim('[') + if out.Bag == nil { + if !in.IsDelim(']') { + out.Bag = make([]*Bag, 0, 8) + } else { + out.Bag = []*Bag{} + } + } else { + out.Bag = (out.Bag)[:0] + } + for !in.IsDelim(']') { + var v14 *Bag + if in.IsNull() { + in.Skip() + v14 = nil + } else { + if v14 == nil { + v14 = new(Bag) + } + (*v14).UnmarshalEasyJSON(in) + } + out.Bag = append(out.Bag, v14) + in.WantComma() + } + in.Delim(']') + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson9d2dde3aEncodeGithubComCosmos72GomacroExamples(out *jwriter.Writer, in Box) { + out.RawByte('{') + first := true + _ = first + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"B\":") + if in.B == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v15, v16 := range in.B { + if v15 > 0 { + out.RawByte(',') + } + out.Bool(bool(v16)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I\":") + if in.I == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v17, v18 := range in.I { + if v17 > 0 { + out.RawByte(',') + } + out.Int(int(v18)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I8\":") + if in.I8 == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v19, v20 := range in.I8 { + if v19 > 0 { + out.RawByte(',') + } + out.Int8(int8(v20)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I16\":") + if in.I16 == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v21, v22 := range in.I16 { + if v21 > 0 { + out.RawByte(',') + } + out.Int16(int16(v22)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I32\":") + if in.I32 == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v23, v24 := range in.I32 { + if v23 > 0 { + out.RawByte(',') + } + out.Int32(int32(v24)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I64\":") + if in.I64 == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v25, v26 := range in.I64 { + if v25 > 0 { + out.RawByte(',') + } + out.Int64(int64(v26)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U\":") + if in.U == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v27, v28 := range in.U { + if v27 > 0 { + out.RawByte(',') + } + out.Uint(uint(v28)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U8\":") + out.Base64Bytes(in.U8) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U16\":") + if in.U16 == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v31, v32 := range in.U16 { + if v31 > 0 { + out.RawByte(',') + } + out.Uint16(uint16(v32)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U32\":") + if in.U32 == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v33, v34 := range in.U32 { + if v33 > 0 { + out.RawByte(',') + } + out.Uint32(uint32(v34)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U64\":") + if in.U64 == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v35, v36 := range in.U64 { + if v35 > 0 { + out.RawByte(',') + } + out.Uint64(uint64(v36)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"S\":") + if in.S == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v37, v38 := range in.S { + if v37 > 0 { + out.RawByte(',') + } + out.String(string(v38)) + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"Any\":") + if in.Any == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v39, v40 := range in.Any { + if v39 > 0 { + out.RawByte(',') + } + if m, ok := v40.(easyjson.Marshaler); ok { + m.MarshalEasyJSON(out) + } else if m, ok := v40.(json.Marshaler); ok { + out.Raw(m.MarshalJSON()) + } else { + out.Raw(json.Marshal(v40)) + } + } + out.RawByte(']') + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"Bag\":") + if in.Bag == nil && (out.Flags&jwriter.NilSliceAsEmpty) == 0 { + out.RawString("null") + } else { + out.RawByte('[') + for v41, v42 := range in.Bag { + if v41 > 0 { + out.RawByte(',') + } + if v42 == nil { + out.RawString("null") + } else { + (*v42).MarshalEasyJSON(out) + } + } + out.RawByte(']') + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v Box) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson9d2dde3aEncodeGithubComCosmos72GomacroExamples(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v Box) MarshalEasyJSON(w *jwriter.Writer) { + easyjson9d2dde3aEncodeGithubComCosmos72GomacroExamples(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *Box) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson9d2dde3aDecodeGithubComCosmos72GomacroExamples(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *Box) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson9d2dde3aDecodeGithubComCosmos72GomacroExamples(l, v) +} +func easyjson9d2dde3aDecodeGithubComCosmos72GomacroExamples1(in *jlexer.Lexer, out *Bag) { + isTopLevel := in.IsStart() + if in.IsNull() { + if isTopLevel { + in.Consumed() + } + in.Skip() + return + } + in.Delim('{') + for !in.IsDelim('}') { + key := in.UnsafeString() + in.WantColon() + if in.IsNull() { + in.Skip() + in.WantComma() + continue + } + switch key { + case "B": + out.B = bool(in.Bool()) + case "I": + out.I = int(in.Int()) + case "I8": + out.I8 = int8(in.Int8()) + case "I16": + out.I16 = int16(in.Int16()) + case "I32": + out.I32 = int32(in.Int32()) + case "I64": + out.I64 = int64(in.Int64()) + case "U": + out.U = uint(in.Uint()) + case "U8": + out.U8 = uint8(in.Uint8()) + case "U16": + out.U16 = uint16(in.Uint16()) + case "U32": + out.U32 = uint32(in.Uint32()) + case "U64": + out.U64 = uint64(in.Uint64()) + case "S": + out.S = string(in.String()) + case "Any": + if m, ok := out.Any.(easyjson.Unmarshaler); ok { + m.UnmarshalEasyJSON(in) + } else if m, ok := out.Any.(json.Unmarshaler); ok { + m.UnmarshalJSON(in.Raw()) + } else { + out.Any = in.Interface() + } + case "Box": + if in.IsNull() { + in.Skip() + out.Box = nil + } else { + if out.Box == nil { + out.Box = new(Box) + } + (*out.Box).UnmarshalEasyJSON(in) + } + default: + in.SkipRecursive() + } + in.WantComma() + } + in.Delim('}') + if isTopLevel { + in.Consumed() + } +} +func easyjson9d2dde3aEncodeGithubComCosmos72GomacroExamples1(out *jwriter.Writer, in Bag) { + out.RawByte('{') + first := true + _ = first + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"B\":") + out.Bool(bool(in.B)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I\":") + out.Int(int(in.I)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I8\":") + out.Int8(int8(in.I8)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I16\":") + out.Int16(int16(in.I16)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I32\":") + out.Int32(int32(in.I32)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"I64\":") + out.Int64(int64(in.I64)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U\":") + out.Uint(uint(in.U)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U8\":") + out.Uint8(uint8(in.U8)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U16\":") + out.Uint16(uint16(in.U16)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U32\":") + out.Uint32(uint32(in.U32)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"U64\":") + out.Uint64(uint64(in.U64)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"S\":") + out.String(string(in.S)) + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"Any\":") + if m, ok := in.Any.(easyjson.Marshaler); ok { + m.MarshalEasyJSON(out) + } else if m, ok := in.Any.(json.Marshaler); ok { + out.Raw(m.MarshalJSON()) + } else { + out.Raw(json.Marshal(in.Any)) + } + if !first { + out.RawByte(',') + } + first = false + out.RawString("\"Box\":") + if in.Box == nil { + out.RawString("null") + } else { + (*in.Box).MarshalEasyJSON(out) + } + out.RawByte('}') +} + +// MarshalJSON supports json.Marshaler interface +func (v Bag) MarshalJSON() ([]byte, error) { + w := jwriter.Writer{} + easyjson9d2dde3aEncodeGithubComCosmos72GomacroExamples1(&w, v) + return w.Buffer.BuildBytes(), w.Error +} + +// MarshalEasyJSON supports easyjson.Marshaler interface +func (v Bag) MarshalEasyJSON(w *jwriter.Writer) { + easyjson9d2dde3aEncodeGithubComCosmos72GomacroExamples1(w, v) +} + +// UnmarshalJSON supports json.Unmarshaler interface +func (v *Bag) UnmarshalJSON(data []byte) error { + r := jlexer.Lexer{Data: data} + easyjson9d2dde3aDecodeGithubComCosmos72GomacroExamples1(&r, v) + return r.Error() +} + +// UnmarshalEasyJSON supports easyjson.Unmarshaler interface +func (v *Bag) UnmarshalEasyJSON(l *jlexer.Lexer) { + easyjson9d2dde3aDecodeGithubComCosmos72GomacroExamples1(l, v) +} diff --git a/vendor/github.com/cosmos72/gomacro/example/bag.go.save b/vendor/github.com/cosmos72/gomacro/example/bag.go.save new file mode 100644 index 0000000..981d7a2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/bag.go.save @@ -0,0 +1,45 @@ +// empty file. stops "go build" from complaining that +// no buildable files are in the directory "examples" + +package main + +type Bag struct { + B bool + I int + I8 int8 + I16 int16 + I32 int32 + I64 int64 + U uint + U8 uint8 + U16 uint16 + U32 uint32 + U64 uint64 + // Uptr uintptr + S string + // E error + Any interface{} + Box *Box +} + +type Box struct { + B []bool + I []int + I8 []int8 + I16 []int16 + I32 []int32 + I64 []int64 + U []uint + U8 []uint8 + U16 []uint16 + U32 []uint32 + U64 []uint64 + // Uptr []uintptr + S []string + // E []error + Any []interface{} + Bag []*Bag +} + +func main() { +} diff --git a/vendor/github.com/cosmos72/gomacro/example/channel.gomacro b/vendor/github.com/cosmos72/gomacro/example/channel.gomacro new file mode 100755 index 0000000..a64eaa5 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/channel.gomacro @@ -0,0 +1,8 @@ +package main + +func channelTest() { + j := 0; cx := make(chan int, 2) + cs := (chan<- int)(cx); cr := (<-chan int)(cx) + + for i := 0; i < 1000000; i++ { cs <- i; j = <-cr } +} diff --git a/vendor/github.com/cosmos72/gomacro/example/collatz.gomacro b/vendor/github.com/cosmos72/gomacro/example/collatz.gomacro new file mode 100755 index 0000000..479fd0d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/collatz.gomacro @@ -0,0 +1,16 @@ +#!/usr/bin/env gomacro + +func collatz(n int) { + for n > 1 { + if n&1 != 0 { + n = ((n * 3) + 1) / 2 + } else { + n = n / 2 + } + } +} + + +for i := 0; i < 100000; i++ { + collatz(837799) +} diff --git a/vendor/github.com/cosmos72/gomacro/example/collatz.igo b/vendor/github.com/cosmos72/gomacro/example/collatz.igo new file mode 100644 index 0000000..3ad1900 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/collatz.igo @@ -0,0 +1,7 @@ + +collatz := func(n int) { for n > 1 { if n&1 != 0 { n = ((n * 3) + 1) / 2 } else { n = n / 2 } } } + + +collatz_loop := func() { for i := 0; i < 100000; i++ { collatz(837799) } } + +collatz_loop() diff --git a/vendor/github.com/cosmos72/gomacro/example/collatz.py b/vendor/github.com/cosmos72/gomacro/example/collatz.py new file mode 100644 index 0000000..61fd058 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/collatz.py @@ -0,0 +1,12 @@ +# collatz conjecture +def collatz(n): + while n > 1: + if n&1 != 0: + n = ((n * 3) + 1) / 2 + else: + n = n / 2 + +i = 0 +while i < 100000: + collatz(837799) + i+=1 diff --git a/vendor/github.com/cosmos72/gomacro/example/dummy.go b/vendor/github.com/cosmos72/gomacro/example/dummy.go new file mode 100644 index 0000000..4201d66 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/dummy.go @@ -0,0 +1,44 @@ +// empty file. stops "go build" from complaining that +// no buildable files are in the directory "examples" + +package main + +import ( + "fmt" + "io" + "os" + r "reflect" +) + +var TypeOfInterface = r.TypeOf((*interface{})(nil)).Elem() + +func main() { + p := r.ValueOf(new(interface{})) + i := p.Elem() + c := i.Convert(TypeOfInterface) + fmt.Printf("%v %v\n", p, p.Type()) + fmt.Printf("%v %v\n", i, i.Type()) + fmt.Printf("%v %v\n", c, c.Type()) + /* + defer func() { + fmt.Println(recover()) + }() + defer func() { + fmt.Println("foo") + }() + panic("test panic") + */ + // m := [...]int{0x7ffffff: 3} + // fmt.Println(m) + // p := Pair{A: 1, B: true} + // Pair{1, 2} = Pair{} + // var f os.file + // _ = bytes.Buffer{nil, 0} +} + +func main1() { + var x io.ReadWriteCloser = os.Stdin + f := io.ReadWriteCloser.Close + f(x) + fmt.Printf("%T\n", f) +} diff --git a/vendor/github.com/cosmos72/gomacro/example/embedded_field.go b/vendor/github.com/cosmos72/gomacro/example/embedded_field.go new file mode 100644 index 0000000..0a9781a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/embedded_field.go @@ -0,0 +1,111 @@ +package main + +import ( + "fmt" + "reflect" + _ "reflect" + "unsafe" +) + +type Pair struct{ A, B int } + +func pair(a, b int) Pair { var p Pair; p.A = a; p.B = b; return p } + +type Triple struct { + Pair + C int +} + +func (p Pair) First() int { + return p.A +} + +func (p Pair) Last() int { + return p.B +} + +func (t Triple) Last() int { + return t.C +} + +func embedded_field() { + printChars() + inspectTriple() +} + +func printChars() { + for i := 128; i <= 255; i++ { + fmt.Printf("%x %c\n", i, i) + } +} + +func inspectTriple() { + t := Triple{Pair{1, 2}, 3} + inspect("declared: ", t.Pair.First) + inspect("declared2: ", t.Pair.First) + inspect("wrapped: ", t.First) + inspect("wrapped2: ", t.First) + inspect("declared (reflect):", reflect.ValueOf(t.Pair).MethodByName("First").Interface().(func() int)) + inspect("declared2 (reflect):", reflect.ValueOf(t.Pair).MethodByName("First").Interface().(func() int)) + inspect("wrapped (reflect):", reflect.ValueOf(t).MethodByName("First").Interface().(func() int)) + inspect("wrapped2 (reflect):", reflect.ValueOf(t).MethodByName("First").Interface().(func() int)) + fmt.Println() + inspect("declared: ", t.Pair.Last) + inspect("declared2: ", t.Pair.Last) + inspect("overridden: ", t.Last) + inspect("overridden2: ", t.Last) + inspect("declared (reflect):", reflect.ValueOf(t.Pair).MethodByName("Last").Interface().(func() int)) + inspect("declared2 (reflect):", reflect.ValueOf(t.Pair).MethodByName("Last").Interface().(func() int)) + inspect("overridden (reflect):", reflect.ValueOf(t).MethodByName("Last").Interface().(func() int)) + inspect("overridden2 (reflect):", reflect.ValueOf(t).MethodByName("Last").Interface().(func() int)) + fmt.Println() + /* + inspectMethod1(t, "First") + inspectMethod1(t.Pair, "First") + inspectMethod1(t, "Last") + inspectMethod1(t.Pair, "Last") + */ +} + +func inspect(name string, x func() int) { + u := *(**uintptr)(unsafe.Pointer(&x)) + u4 := *(**[16]uintptr)(unsafe.Pointer(&x)) + fmt.Printf("%s %#v %#v %#v\n", name, x, u, *u4) +} + +type UnsafeValue struct { + typ *uintptr + ptr unsafe.Pointer + flag uintptr +} +type UnsafeInterface struct { + typ *uintptr + ptr unsafe.Pointer +} + +func inspectMethod(x interface{}, y interface{}, name string) { + mtd1 := reflect.ValueOf(x).MethodByName(name).Interface() + mtd2 := reflect.ValueOf(y).MethodByName(name).Interface() + + inspectMethod1(mtd1, name) + inspectMethod1(mtd2, name) +} + +func inspectMethod1(mtd interface{}, name string) { + fmt.Printf("%s:\t%#v\n", name, mtd) + uf := *(*UnsafeInterface)(unsafe.Pointer(&mtd)) + fmt.Printf("%s:\tInterface = %#v\n", name, uf) + fptr := (**uintptr)(uf.ptr) + fmt.Printf("%s:\tInterface.ptr = %#v %#v\n", name, fptr, *fptr) +} + +func inspectMethod2(x interface{}, name string) { + t := reflect.TypeOf(x) + mtd, _ := t.MethodByName(name) + fmt.Printf("%s:\t%v\n", name, mtd) + var f reflect.Value = mtd.Func + uf := *(*UnsafeValue)(unsafe.Pointer(&f)) + fmt.Printf("%s:\tFunc = %#v\n", name, uf) + fptr := (**uintptr)(uf.ptr) + fmt.Printf("%s:\tFunc.ptr = %#v %#v %#v\n", name, fptr, *fptr, **fptr) +} diff --git a/vendor/github.com/cosmos72/gomacro/example/embedded_field.gomacro b/vendor/github.com/cosmos72/gomacro/example/embedded_field.gomacro new file mode 100755 index 0000000..0f7a600 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/embedded_field.gomacro @@ -0,0 +1,8 @@ +#!/usr/bin/env gomacro + +type Pair struct{ a, b int } +type Triple struct {Pair; c int} + +var t Triple + +println(t) diff --git a/vendor/github.com/cosmos72/gomacro/example/fibonacci.gomacro b/vendor/github.com/cosmos72/gomacro/example/fibonacci.gomacro new file mode 100755 index 0000000..bfa5f37 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/fibonacci.gomacro @@ -0,0 +1,11 @@ +#!/usr/bin/env gomacro + +func fibonacci(n uint) uint { + if n <= 2 { + return 1 + } + return fibonacci(n-1) + fibonacci(n-2) +} + +println(fibonacci(30)) + diff --git a/vendor/github.com/cosmos72/gomacro/example/fibonacci.igo b/vendor/github.com/cosmos72/gomacro/example/fibonacci.igo new file mode 100644 index 0000000..d53f202 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/fibonacci.igo @@ -0,0 +1,6 @@ +fibonacci:=func(n int) int { return n }; + +fibonacci=func(n int) int { if n <= 2 { return 1 }; return fibonacci(n-1) + fibonacci(n-2) }; + +println(fibonacci(30)); + diff --git a/vendor/github.com/cosmos72/gomacro/example/fibonacci.py b/vendor/github.com/cosmos72/gomacro/example/fibonacci.py new file mode 100644 index 0000000..1a31f75 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/fibonacci.py @@ -0,0 +1,6 @@ +def fib(n): + if n <= 2: + return 1 + return fib(n-1) + fib(n-2) + +print(fib(30)) diff --git a/vendor/github.com/cosmos72/gomacro/example/for_range.gomacro b/vendor/github.com/cosmos72/gomacro/example/for_range.gomacro new file mode 100755 index 0000000..3253b89 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/for_range.gomacro @@ -0,0 +1,29 @@ +#!/usr/bin/env gomacro + +import "fmt" + +type Entry struct { + Key int + Value string +} + +func mapEntries(m map[int]string) []Entry { + entries := make([]Entry, len(m)) + i := 0 + for k, v := range m { + entries[i] = Entry{k, v} + i++ + } + return entries +} + +func printEntries(entries []Entry) { + for i, e := range entries { + fmt.Println(i, ":", e) + } +} + +m := map[int]string{1: "foo", 2: "bar", 3: "baz"} +entries := mapEntries(m) +printEntries(entries) + diff --git a/vendor/github.com/cosmos72/gomacro/example/make_fibonacci.gomacro b/vendor/github.com/cosmos72/gomacro/example/make_fibonacci.gomacro new file mode 100644 index 0000000..9453baf --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/make_fibonacci.gomacro @@ -0,0 +1,21 @@ + +// run "gomacro -m -w make_fibonacci.gomacro" +// to preprocess this file and generate make_fibonacci.go + +package main + +:import "go/ast" + +:macro makefib(typ ast.Node) ast.Node { + return ~"{ + ~func fibonacci(n ~,typ) ~,typ { + if n <= 2 { + return 1 + } + return fibonacci(n-1) + fibonacci(n-2) + } + } +} + +makefib; int64 + diff --git a/vendor/github.com/cosmos72/gomacro/experiments/bytecode_interfaces/bytecode_interfaces.go b/vendor/github.com/cosmos72/gomacro/experiments/bytecode_interfaces/bytecode_interfaces.go new file mode 100644 index 0000000..91ab4ab --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/experiments/bytecode_interfaces/bytecode_interfaces.go @@ -0,0 +1,212 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * bytecode_interfaces.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package bytecode_interfaces + +import ( + "time" +) + +type Op uint8 + +const ( + storeInt16 Op = iota + addIntInt + subIntInt + mulIntInt + andIntInt + rshiftIntInt + jmp + jmpIfGtrInt + jmpIfLeqInt + jmpIfEqlInt + ret +) + +type Inst struct { + Op Op + Dst, Lhs, Rhs uint8 +} + +func Uint8(n int8) uint8 { + return uint8(n) +} + +func Int(n uint8) int { + return int(int8(n)) +} + +func (i Inst) Src() int { + return int(uint16(i.Lhs) | uint16(i.Rhs)<<8) +} + +func Inst16(op Op, dst uint8, src int16) Inst { + return Inst{ + Op: op, + Dst: dst, + Lhs: uint8(src), + Rhs: uint8(src >> 8), + } +} + +type Prog struct { + IP int + Code []Inst + Vars []interface{} + Outer *Prog +} + +func (p *Prog) Exec(IP int) []interface{} { + if IP < 0 { + IP = p.IP + } + code := p.Code + vars := p.Vars + for { + if false { + // Debugf("fetching IP=%v\n", IP) + } + i := code[IP] + if false { + // Debugf("IP=%v,\tinst=%v\tStack=%v\n", IP, i, vars) + time.Sleep(time.Second) + } + IP++ + switch i.Op { + + case storeInt16: + vars[i.Dst] = i.Src() + case addIntInt: + lhs := vars[i.Lhs].(int) + rhs := vars[i.Rhs].(int) + vars[i.Dst] = lhs + rhs + case subIntInt: + lhs := vars[i.Lhs].(int) + rhs := vars[i.Rhs].(int) + vars[i.Dst] = lhs - rhs + case mulIntInt: + lhs := vars[i.Lhs].(int) + rhs := vars[i.Rhs].(int) + vars[i.Dst] = lhs * rhs + case andIntInt: + lhs := vars[i.Lhs].(int) + rhs := vars[i.Rhs].(int) + vars[i.Dst] = lhs & rhs + case rshiftIntInt: + lhs := vars[i.Lhs].(int) + rhs := vars[i.Rhs].(int) + vars[i.Dst] = lhs >> uint(rhs) + case jmp: + IP += Int(i.Dst) + case jmpIfGtrInt: + lhs := vars[i.Lhs].(int) + rhs := vars[i.Rhs].(int) + if lhs > rhs { + IP += Int(i.Dst) + } + case jmpIfLeqInt: + lhs := vars[i.Lhs].(int) + rhs := vars[i.Rhs].(int) + if lhs <= rhs { + IP += Int(i.Dst) + } + case jmpIfEqlInt: + lhs := vars[i.Lhs].(int) + rhs := vars[i.Rhs].(int) + if lhs == rhs { + IP += Int(i.Dst) + } + case ret: + return vars[i.Lhs:i.Rhs] + } + } +} + +/* + interpreted version of: + + func collatz(n int) { + for n > 1 { + if n&1 != 0 { + n = ((n * 3) + 1) / 2 + } else { + n = n / 2 + } + } + } +*/ +func BytecodeCollatz() *Prog { + const ( + n = iota + tmp + _0 + _1 + _3 + ) + return &Prog{Vars: []interface{}{n: 0, _0: 0, _1: 1, _3: 3}, + Code: []Inst{ + {jmpIfLeqInt, 6, n, _1}, + {andIntInt, tmp, n, _1}, + {jmpIfEqlInt, 2, tmp, _0}, + + {mulIntInt, tmp, n, _3}, + {addIntInt, n, tmp, _1}, + + {rshiftIntInt, n, n, _1}, + {jmp, Uint8(-7), 0, 0}, + + {ret, 0, 0, 0}, + }} +} + +/* + bytecode version of: + + func sum(n int) int { + total := 0 + for i := 1; i <= n; i++ { + total += i + } + return total + } +*/ +func BytecodeSum(N int) *Prog { + const ( + i = iota + n + total + _1 + ) + return &Prog{Vars: []interface{}{n: N, _1: 1}, + Code: []Inst{ + Inst16(storeInt16, i, 1), + Inst16(storeInt16, total, 0), + {jmpIfGtrInt, 3, i, n}, + {addIntInt, total, total, i}, + {addIntInt, i, i, _1}, + {jmp, Uint8(-4), 0, 0}, + {ret, 0, total, total + 1}, + }} +} diff --git a/vendor/github.com/cosmos72/gomacro/experiments/bytecode_values/bytecode_values.go b/vendor/github.com/cosmos72/gomacro/experiments/bytecode_values/bytecode_values.go new file mode 100644 index 0000000..4f9c538 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/experiments/bytecode_values/bytecode_values.go @@ -0,0 +1,161 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * bytecode_values.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package bytecode_values + +import ( + r "reflect" + "time" +) + +type Op uint8 + +const ( + storeInt16 Op = iota + addIntInt + subIntInt + jmp + jmpIfGtrInt + ret +) + +type Inst struct { + Op Op + Dst, Lhs, Rhs uint8 +} + +func Uint8(n int8) uint8 { + return uint8(n) +} + +func Int(n uint8) int { + return int(int8(n)) +} + +func (i Inst) Src() int { + return int(uint16(i.Lhs) | uint16(i.Rhs)<<8) +} + +func Inst16(op Op, dst uint8, src int16) Inst { + return Inst{ + Op: op, + Dst: dst, + Lhs: uint8(src), + Rhs: uint8(src >> 8), + } +} + +type Prog struct { + IP int + Code []Inst + Vars []r.Value + Outer *Prog +} + +func (p *Prog) Exec(IP int) []r.Value { + if IP < 0 { + IP = p.IP + } + code := p.Code + vars := p.Vars + for { + if false { + // Debugf("fetching IP=%v\n", IP) + } + i := code[IP] + if false { + // Debugf("IP=%v,\tinst=%v\tStack=%v\n", IP, i, vars) + time.Sleep(time.Second) + } + IP++ + switch i.Op { + + case storeInt16: + vars[i.Dst] = r.ValueOf(i.Src()) + case addIntInt: + lhs := int(vars[i.Lhs].Int()) + rhs := int(vars[i.Rhs].Int()) + vars[i.Dst] = r.ValueOf(lhs + rhs) + case subIntInt: + lhs := int(vars[i.Lhs].Int()) + rhs := int(vars[i.Rhs].Int()) + vars[i.Dst] = r.ValueOf(lhs - rhs) + case jmp: + IP += Int(i.Dst) + case jmpIfGtrInt: + lhs := int(vars[i.Lhs].Int()) + rhs := int(vars[i.Rhs].Int()) + if lhs > rhs { + IP += Int(i.Dst) + } + case ret: + return vars[i.Lhs:i.Rhs] + } + } +} + +/* + interpreted version of: + + func collatz(n int) { + for n > 1 { + if n&1 != 0 { + n = (n + 3) >> 1 + } else { + n = n >> 1 + } + } +} +*/ + +/* + bytecode version of: + + func sum(n int) int { + total := 0 + for i := 1; i <= n; i++ { + total += i + } + return total + } +*/ +func BytecodeSum(N int) *Prog { + const ( + i = iota + n + total + _1 + ) + return &Prog{Vars: []r.Value{n: r.ValueOf(N), _1: r.ValueOf(1)}, + Code: []Inst{ + Inst16(storeInt16, i, 1), + Inst16(storeInt16, total, 0), + {jmpIfGtrInt, 3, i, n}, + {addIntInt, total, total, i}, + {addIntInt, i, i, _1}, + {jmp, Uint8(-4), 0, 0}, + {ret, 0, total, total + 1}, + }} +} diff --git a/vendor/github.com/cosmos72/gomacro/experiments/closure_interfaces/closure_interfaces.go b/vendor/github.com/cosmos72/gomacro/experiments/closure_interfaces/closure_interfaces.go new file mode 100644 index 0000000..33e5313 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/experiments/closure_interfaces/closure_interfaces.go @@ -0,0 +1,362 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * closure_interfaces.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package closure_interfaces + +import ( + _ "errors" + _ "fmt" + + "github.com/cosmos72/gomacro/base" +) + +type Env struct { + Binds []interface{} + Outer *Env +} + +func NewEnv(outer *Env) *Env { + return &Env{ + Binds: make([]interface{}, 10), + Outer: outer, + } +} + +type SParam struct { + Name string + // Type r.Type +} + +type SReturn struct { + result0 interface{} + results []interface{} +} + +type X func(*Env) (interface{}, []interface{}) +type X1 func(*Env) interface{} +type XInt func(*Env) int +type XBool func(*Env) bool + +type Func func(args ...interface{}) (interface{}, []interface{}) +type FuncInt func(args ...interface{}) int + +type XFunc func(env *Env) Func +type XFuncInt func(env *Env) FuncInt + +func IntToX(f XInt) X { + return func(env *Env) (interface{}, []interface{}) { + return f(env), nil + } +} + +func Const(value interface{}) X { + return func(env *Env) (interface{}, []interface{}) { + return value, nil + } +} + +func Int(n int) XInt { + return func(env *Env) int { + return n + } +} + +func Var(upn, idx int) X { + return func(env *Env) (interface{}, []interface{}) { + for i := 0; i < upn; i++ { + env = env.Outer + } + return env.Binds[idx], nil + } +} + +func VarInt0(env *Env) int { + return env.Binds[0].(int) +} + +func VarInt(idx int) XInt { + return func(env *Env) int { + return env.Binds[idx].(int) + /* + switch v := env.Binds[idx].(type) { + case int: + return v + default: + panic(errors.New(fmt.Sprintf("Binds[%v] = %#v <%T> is not an ", idx, v, v))) + } + */ + } +} + +func VarSetInt(idx int, expr XInt) X { + return func(env *Env) (interface{}, []interface{}) { + val := expr(env) + env.Binds[idx] = val + return base.None, nil + } +} + +func VarIncInt(idx int) X { + return func(env *Env) (interface{}, []interface{}) { + v := env.Binds[idx] + env.Binds[idx] = v.(int) + 1 + return base.None, nil + } +} + +func AddIntInt(lhs, rhs XInt) XInt { + return func(env *Env) int { + return lhs(env) + rhs(env) + } +} + +func SubIntInt(lhs, rhs XInt) XInt { + return func(env *Env) int { + return lhs(env) - rhs(env) + } +} + +func LessIntInt(lhs, rhs XInt) XBool { + return func(env *Env) bool { + return lhs(env) < rhs(env) + } +} + +func LesseqIntInt(lhs, rhs XInt) XBool { + return func(env *Env) bool { + return lhs(env) <= rhs(env) + } +} + +func If(pred XBool, then, els X) X { + return func(env *Env) (interface{}, []interface{}) { + if pred(env) { + return then(env) + } else { + return els(env) + } + } +} + +func For(init X, pred XBool, post X, body X) X { + if init == nil && post == nil { + return func(env *Env) (interface{}, []interface{}) { + for pred(env) { + body(env) + } + return base.None, nil + } + + } else { + if init == nil || post == nil { + panic("invalid for(): init and post must be both present, or both omitted") + } + return func(env *Env) (interface{}, []interface{}) { + for init(env); pred(env); post(env) { + body(env) + } + return base.None, nil + } + } +} + +func Nop(env *Env) (interface{}, []interface{}) { + return base.None, nil +} + +func Block(list ...X) X { + switch len(list) { + case 0: + return Nop + case 1: + return list[0] + case 2: + return func(env *Env) (interface{}, []interface{}) { + list[0](env) + return list[1](env) + } + default: + return func(env *Env) (interface{}, []interface{}) { + n_1 := len(list) - 1 + for i := 0; i < n_1; i++ { + list[i](env) + } + return list[n_1](env) + } + } +} + +func Return(exprs ...X) X { + switch n := len(exprs); n { + case 0: + return Nop + case 1: + expr0 := exprs[0] + // return foo() returns *all* the values returned by foo, not just the first one + return func(env *Env) (interface{}, []interface{}) { + ret, rets := expr0(env) + panic(SReturn{ret, rets}) + } + default: + return func(env *Env) (interface{}, []interface{}) { + n := len(exprs) + rets := make([]interface{}, n) + for i, value := range exprs { + rets[i], _ = value(env) + } + var ret0 interface{} + if len(rets) > 0 { + ret0 = rets[0] + } + panic(SReturn{ret0, rets}) + } + } +} + +func ReturnInt(expr XInt) X { + return func(env *Env) (interface{}, []interface{}) { + ret := expr(env) + panic(SReturn{ret, nil}) + } +} + +func DeclVar(idx int, expr X) X { + return func(env *Env) (interface{}, []interface{}) { + value, _ := expr(env) + env.Binds[idx] = value + return value, nil + } +} + +func DeclFuncInt(idx int, params []SParam, body X) XFuncInt { + xf := MakeFuncInt(params, body) + return func(env *Env) FuncInt { + f := xf(env) + env.Binds[idx] = f + return f + } +} + +func MakeFuncInt(params []SParam, body X) XFuncInt { + return func(env *Env) FuncInt { + return func(args ...interface{}) (ret int) { + fenv := NewEnv(env) + panicking := true // use a flag to distinguish non-panic from panic(nil) + defer func() { + if panicking { + pan := recover() + switch p := pan.(type) { + case SReturn: + // return is implemented with a panic(cReturn{}) + ret = p.result0.(int) + default: + panic(pan) + } + } + }() + for i, _ := range params { + fenv.Binds[i] = args[i] + } + ret0, _ := body(fenv) + panicking = false + return ret0.(int) + } + } +} + +func CallInt(fun X, args ...X) XInt { + return func(env *Env) int { + fvalue, _ := fun(env) + f := fvalue.(FuncInt) + n := len(args) + values := make([]interface{}, n) + for i, arg := range args { + values[i], _ = arg(env) + } + return f(values...) + } +} + +// var typeOfInt = r.TypeOf(int(0)) + +/* + interpreted version of: + + func sum(n int) int { + total := 0 + for i := 1; i <= n; i++ { + total += i + } + return total + } +*/ +func DeclSum(env *Env, idx int) FuncInt { + const ( + n = 0 + total = 1 + i = 2 + ) + return DeclFuncInt( + idx, []SParam{{"n" /*typeOfInt*/}}, + Block( + DeclVar(total, Const(0)), + For(DeclVar(i, Const(1)), LesseqIntInt(VarInt(i), VarInt(n)), VarIncInt(i), + VarSetInt(total, + AddIntInt( + VarInt(total), VarInt(i), + ), + ), + ), + ReturnInt(VarInt(total)), + ), + )(env) +} + +/* + interpreted version of: + + func fibonacci(n int) int { + if (n <= 2) { + return 1 + } + return fibonacci(n-1) + fibonacci(n-2) + } +*/ +func DeclFibonacci(env *Env, idx int) FuncInt { + return DeclFuncInt( + idx, []SParam{{"n" /*typeOfInt*/}}, + Block( + If(LessIntInt(VarInt0, Int(2)), + ReturnInt(Int(1)), + ReturnInt( + AddIntInt( + CallInt(Var(1, idx), IntToX(SubIntInt(VarInt0, Int(1)))), + CallInt(Var(1, idx), IntToX(SubIntInt(VarInt0, Int(2)))), + ), + ), + ), + ), + )(env) +} diff --git a/vendor/github.com/cosmos72/gomacro/experiments/closure_maps/closure_maps.go b/vendor/github.com/cosmos72/gomacro/experiments/closure_maps/closure_maps.go new file mode 100644 index 0000000..7d8a9ed --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/experiments/closure_maps/closure_maps.go @@ -0,0 +1,417 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * closure_maps.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package closure_maps + +import ( + "errors" + "fmt" + r "reflect" + + "github.com/cosmos72/gomacro/base" +) + +type Env struct { + Binds map[string]r.Value + Outer *Env +} + +type SParam struct { + Name string + Type r.Type +} + +type SReturn struct { + result0 r.Value + results []r.Value +} + +type X func(*Env) (r.Value, []r.Value) +type X1 func(*Env) r.Value +type XInt func(*Env) int +type XBool func(*Env) bool + +type Func func(args ...r.Value) (r.Value, []r.Value) +type FuncInt func(args ...r.Value) int + +type XFunc func(env *Env) Func +type XFuncInt func(env *Env) FuncInt + +var typeOfInt = r.TypeOf(int(0)) + +func errorf(format string, args ...interface{}) (r.Value, []r.Value) { + panic(errors.New(fmt.Sprintf(format, args...))) +} + +func warnExtraValues(extraValues []r.Value) { + fmt.Printf("// warning: expression returned %d values, using only the first one: %v", + len(extraValues), extraValues) +} + +func NewEnv(outer *Env) *Env { + return &Env{Outer: outer} +} + +func (env *Env) DefineVar(name string, t r.Type, value r.Value) r.Value { + if env.Binds == nil { + env.Binds = make(map[string]r.Value) + } + if t == nil { + t = value.Type() + } else { + value = value.Convert(t) + } + place := r.New(t).Elem() + place.Set(value) + env.Binds[name] = place + return value +} + +func (env *Env) DefineFunc(name string, t r.Type, value r.Value) r.Value { + if env.Binds == nil { + env.Binds = make(map[string]r.Value) + } + if t == nil { + t = value.Type() + } else { + value = value.Convert(t) + } + env.Binds[name] = value + return value +} + +func IntToX(f XInt) X { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(f(env)), nil + } +} + +func Const(value interface{}) X { + v := r.ValueOf(value) + return func(env *Env) (r.Value, []r.Value) { + return v, nil + } +} + +func Int(n int) XInt { + return func(env *Env) int { + return n + } +} + +func Var(name string) X { + return func(env *Env) (r.Value, []r.Value) { + for e := env; e != nil; e = e.Outer { + if v, ok := e.Binds[name]; ok { + return v, nil + } + } + return errorf("undefined identifier: %v", name) + } +} + +func VarInt(name string) XInt { + return func(env *Env) int { + return int(env.Binds[name].Int()) + } +} + +func VarSetInt(name string, expr XInt) X { + return func(env *Env) (r.Value, []r.Value) { + val := expr(env) + for e := env; e != nil; e = e.Outer { + if v, ok := env.Binds[name]; ok { + v.SetInt(int64(val)) + return base.None, nil + } + } + return errorf("undefined identifier: %v", name) + } +} + +func VarIncInt(name string) X { + return func(env *Env) (r.Value, []r.Value) { + for e := env; e != nil; e = e.Outer { + if v, ok := env.Binds[name]; ok { + v.SetInt(v.Int() + 1) + return base.None, nil + } + } + return errorf("undefined identifier: %v", name) + } +} + +func AddIntInt(lhs, rhs XInt) XInt { + return func(env *Env) int { + return lhs(env) + rhs(env) + } +} + +func SubIntInt(lhs, rhs XInt) XInt { + return func(env *Env) int { + return lhs(env) - rhs(env) + } +} + +func LessIntInt(lhs, rhs XInt) XBool { + return func(env *Env) bool { + return lhs(env) < rhs(env) + } +} + +func LesseqIntInt(lhs, rhs XInt) XBool { + return func(env *Env) bool { + return lhs(env) <= rhs(env) + } +} + +func If(pred XBool, then, els X) X { + return func(env *Env) (r.Value, []r.Value) { + if pred(env) { + return then(env) + } else { + return els(env) + } + } +} + +func For(init X, pred XBool, post X, body X) X { + if init == nil && post == nil { + return func(env *Env) (r.Value, []r.Value) { + for pred(env) { + body(env) + } + return base.None, nil + } + + } else { + if init == nil || post == nil { + panic("invalid for(): init and post must be both present, or both omitted") + } + return func(env *Env) (r.Value, []r.Value) { + for init(env); pred(env); post(env) { + body(env) + } + return base.None, nil + } + } +} + +func Nop(env *Env) (r.Value, []r.Value) { + return base.None, nil +} + +func Block(list ...X) X { + switch len(list) { + case 0: + return Nop + case 1: + return list[0] + case 2: + return func(env *Env) (r.Value, []r.Value) { + list[0](env) + return list[1](env) + } + default: + return func(env *Env) (r.Value, []r.Value) { + n_1 := len(list) - 1 + for i := 0; i < n_1; i++ { + list[i](env) + } + return list[n_1](env) + } + } +} + +func Return(exprs ...X) X { + switch n := len(exprs); n { + case 0: + return Nop + case 1: + expr := exprs[0] + // return foo() returns *all* the values returned by foo, not just the first one + return func(env *Env) (r.Value, []r.Value) { + ret, rets := expr(env) + panic(SReturn{ret, rets}) + } + default: + return func(env *Env) (r.Value, []r.Value) { + n := len(exprs) + rets := make([]r.Value, n) + var extra []r.Value + for i, value := range exprs { + rets[i], extra = value(env) + if len(extra) > 1 { + warnExtraValues(extra) + } + } + ret0 := base.None + if len(rets) > 0 { + ret0 = rets[0] + } + panic(SReturn{ret0, rets}) + } + } +} + +func ReturnInt(expr XInt) X { + return func(env *Env) (r.Value, []r.Value) { + ret := expr(env) + panic(SReturn{r.ValueOf(ret), nil}) + } +} + +func DeclVar(name string, expr X) X { + return func(env *Env) (r.Value, []r.Value) { + value, extra := expr(env) + if len(extra) > 1 { + warnExtraValues(extra) + } + value = env.DefineVar(name, nil, value) + return value, nil + } +} + +func DeclFuncInt(name string, params []SParam, body X) XFuncInt { + xf := MakeFuncInt(name, params, body) + return func(env *Env) FuncInt { + f := xf(env) + env.DefineFunc(name, nil, r.ValueOf(f)) + return f + } +} + +func MakeFuncInt(name string, params []SParam, body X) XFuncInt { + return func(env *Env) FuncInt { + return func(args ...r.Value) (ret int) { + fenv := NewEnv(env) + panicking := true // use a flag to distinguish non-panic from panic(nil) + defer func() { + if panicking { + pan := recover() + switch p := pan.(type) { + case SReturn: + // return is implemented with a panic(cReturn{}) + ret = int(p.result0.Int()) + default: + panic(pan) + } + } + }() + for i, param := range params { + fenv.DefineVar(param.Name, param.Type, args[i]) + } + ret0, extra := body(fenv) + if len(extra) > 1 { + warnExtraValues(extra) + } + panicking = false + return int(ret0.Int()) + } + } +} + +func CallInt(fun X, args ...X) XInt { + return func(env *Env) int { + var extra []r.Value + fvalue, extra := fun(env) + if len(extra) > 1 { + warnExtraValues(extra) + } + if fvalue == base.Nil || fvalue == base.None { + errorf("undefined identifier: %v", fun) + } + f := fvalue.Interface().(FuncInt) + n := len(args) + values := make([]r.Value, n) + for i, arg := range args { + values[i], extra = arg(env) + if len(extra) > 1 { + warnExtraValues(extra) + } + } + return f(values...) + } +} + +/* + interpreted version of: + + func sum(n int) int { + total := 0 + for i := 1; i <= n; i++ { + total += i + } + return total + } +*/ +func DeclSum(env *Env, funcName string) FuncInt { + const ( + n = "n" + total = "total" + i = "i" + ) + return DeclFuncInt( + funcName, []SParam{{"n", typeOfInt}}, + Block( + DeclVar(total, Const(0)), + For(DeclVar(i, Const(1)), LesseqIntInt(VarInt(i), VarInt(n)), VarIncInt(i), + VarSetInt(total, + AddIntInt( + VarInt(total), VarInt(i), + ), + ), + ), + ReturnInt(VarInt(total)), + ), + )(env) +} + +/* + interpreted version of: + + func fibonacci(n int) int { + if (n <= 2) { + return 1 + } + return fibonacci(n-1) + fibonacci(n-2) + } +*/ +func DeclFibonacci(env *Env, funcName string) FuncInt { + return DeclFuncInt( + funcName, []SParam{{"n", typeOfInt}}, + Block( + If(LessIntInt(VarInt("n"), Int(2)), + ReturnInt(Int(1)), + ReturnInt( + AddIntInt( + CallInt(Var(funcName), IntToX(SubIntInt(VarInt("n"), Int(1)))), + CallInt(Var(funcName), IntToX(SubIntInt(VarInt("n"), Int(2)))), + ), + ), + ), + ), + )(env) +} diff --git a/vendor/github.com/cosmos72/gomacro/experiments/closure_values/closure_values.go b/vendor/github.com/cosmos72/gomacro/experiments/closure_values/closure_values.go new file mode 100644 index 0000000..38e4025 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/experiments/closure_values/closure_values.go @@ -0,0 +1,447 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * closure_values.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package closure_values + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/base" +) + +type Env struct { + Binds []r.Value + Outer *Env +} + +func NewEnv(outer *Env) *Env { + return &Env{ + Binds: make([]r.Value, 10), + Outer: outer, + } +} + +type SParam struct { + Type r.Type +} + +type SReturn struct { + result0 r.Value + results []r.Value +} + +type X func(*Env) (r.Value, []r.Value) +type X1 func(*Env) r.Value +type XInt func(*Env) int +type XBool func(*Env) bool + +type Func func(args ...r.Value) (r.Value, []r.Value) +type FuncInt func(args ...r.Value) int + +type XFunc func(env *Env) Func +type XFuncInt func(env *Env) FuncInt + +func IntToX(f XInt) X { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(f(env)), nil + } +} + +func Const(value interface{}) X { + v := r.ValueOf(value) + return func(env *Env) (r.Value, []r.Value) { + return v, nil + } +} + +func Int(n int) XInt { + return func(env *Env) int { + return n + } +} + +func Var(upn, idx int) X { + return func(env *Env) (r.Value, []r.Value) { + for i := 0; i < upn; i++ { + env = env.Outer + } + return env.Binds[idx], nil + } +} + +func VarInt0(env *Env) int { + return int(env.Binds[0].Int()) +} + +func VarInt(idx int) XInt { + return func(env *Env) int { + return int(env.Binds[idx].Int()) + } +} + +func VarSetInt(idx int, expr XInt) X { + return func(env *Env) (r.Value, []r.Value) { + val := expr(env) + env.Binds[idx].SetInt(int64(val)) + return base.None, nil + } +} + +func VarIncInt(idx int) X { + return func(env *Env) (r.Value, []r.Value) { + v := env.Binds[idx] + v.SetInt(v.Int() + 1) + return base.None, nil + } +} + +func BitandIntInt(lhs, rhs XInt) XInt { + return func(env *Env) int { + return lhs(env) & rhs(env) + } +} + +func AddIntInt(lhs, rhs XInt) XInt { + return func(env *Env) int { + return lhs(env) + rhs(env) + } +} + +func SubIntInt(lhs, rhs XInt) XInt { + return func(env *Env) int { + return lhs(env) - rhs(env) + } +} + +func MulIntInt(lhs, rhs XInt) XInt { + return func(env *Env) int { + return lhs(env) * rhs(env) + } +} + +func RshiftIntInt(lhs, rhs XInt) XInt { + if false { + return func(env *Env) int { + l, r := lhs(env), rhs(env) + // Debugf("rshift: lhs=%v, rhs=%v\n", l, r) + // time.Sleep(time.Second) + return l >> uint(r) + } + } else { + return func(env *Env) int { + return lhs(env) >> uint(rhs(env)) + } + } +} + +func LessIntInt(lhs, rhs XInt) XBool { + return func(env *Env) bool { + return lhs(env) < rhs(env) + } +} + +func LesseqIntInt(lhs, rhs XInt) XBool { + return func(env *Env) bool { + return lhs(env) <= rhs(env) + } +} + +func NoteqIntInt(lhs, rhs XInt) XBool { + return func(env *Env) bool { + return lhs(env) != rhs(env) + } +} + +func If(pred XBool, then, els X) X { + if els != nil { + return func(env *Env) (r.Value, []r.Value) { + if pred(env) { + return then(env) + } else { + return els(env) + } + } + } else { + return func(env *Env) (r.Value, []r.Value) { + if pred(env) { + return then(env) + } else { + return base.None, nil + } + } + } +} + +func For(init X, pred XBool, post X, body X) X { + if init == nil && post == nil { + return func(env *Env) (r.Value, []r.Value) { + for pred(env) { + body(env) + } + return base.None, nil + } + + } else { + if init == nil || post == nil { + panic("invalid for(): init and post must be both present, or both omitted") + } + return func(env *Env) (r.Value, []r.Value) { + for init(env); pred(env); post(env) { + body(env) + } + return base.None, nil + } + } +} + +func Nop(env *Env) (r.Value, []r.Value) { + return base.None, nil +} + +func Block(list ...X) X { + switch len(list) { + case 0: + return Nop + case 1: + return list[0] + case 2: + return func(env *Env) (r.Value, []r.Value) { + list[0](env) + return list[1](env) + } + default: + return func(env *Env) (r.Value, []r.Value) { + n_1 := len(list) - 1 + for i := 0; i < n_1; i++ { + list[i](env) + } + return list[n_1](env) + } + } +} + +func Return(exprs ...X) X { + switch n := len(exprs); n { + case 0: + return Nop + case 1: + expr0 := exprs[0] + // return foo() returns *all* the values returned by foo, not just the first one + return func(env *Env) (r.Value, []r.Value) { + ret, rets := expr0(env) + panic(SReturn{ret, rets}) + } + default: + return func(env *Env) (r.Value, []r.Value) { + n := len(exprs) + rets := make([]r.Value, n) + for i, value := range exprs { + rets[i], _ = value(env) + } + ret0 := base.None + if len(rets) > 0 { + ret0 = rets[0] + } + panic(SReturn{ret0, rets}) + } + } +} + +func ReturnInt(expr XInt) X { + return func(env *Env) (r.Value, []r.Value) { + ret := expr(env) + panic(SReturn{r.ValueOf(ret), nil}) + } +} + +func DeclVar(idx int, expr X) X { + return func(env *Env) (r.Value, []r.Value) { + value, _ := expr(env) + place := r.New(value.Type()).Elem() + place.Set(value) + env.Binds[idx] = place + return value, nil + } +} + +func DeclFuncInt(idx int, paramTypes []r.Type, body X) XFuncInt { + xf := MakeFuncInt(paramTypes, body) + return func(env *Env) FuncInt { + f := xf(env) + env.Binds[idx] = r.ValueOf(f) + return f + } +} + +func MakeFuncInt(paramTypes []r.Type, body X) XFuncInt { + return func(env *Env) FuncInt { + return func(args ...r.Value) (ret int) { + fenv := NewEnv(env) + panicking := true // use a flag to distinguish non-panic from panic(nil) + defer func() { + if panicking { + pan := recover() + switch p := pan.(type) { + case SReturn: + // return is implemented with a panic(cReturn{}) + ret = int(p.result0.Int()) + default: + panic(pan) + } + } + }() + for i, paramType := range paramTypes { + place := r.New(paramType).Elem() + place.Set(args[i]) + fenv.Binds[i] = place + } + ret0, _ := body(fenv) + panicking = false + return int(ret0.Int()) + } + } +} + +func CallInt(fun X, args ...X) XInt { + return func(env *Env) int { + fvalue, _ := fun(env) + f := fvalue.Interface().(FuncInt) + n := len(args) + values := make([]r.Value, n) + for i, arg := range args { + values[i], _ = arg(env) + } + return f(values...) + } +} + +var typeOfInt = r.TypeOf(int(0)) + +/* + interpreted version of: + + func collatz(n int) { + for n > 1 { + if n&1 != 0 { + n = ((n * 3) + 1) / 2 + } else { + n = n / 2 + } + } + } +*/ +func DeclCollatz(env *Env, idx int) FuncInt { + const ( + n = 0 + ) + return DeclFuncInt( + idx, []r.Type{typeOfInt}, + Block( + For(nil, LessIntInt(Int(1), VarInt(n)), nil, + If(NoteqIntInt(BitandIntInt(VarInt(n), Int(1)), Int(0)), + VarSetInt(n, + RshiftIntInt( + AddIntInt( + MulIntInt(VarInt(n), Int(3)), + Int(1), + ), + Int(1), + ), + ), + VarSetInt(n, + RshiftIntInt( + VarInt(n), + Int(1), + ), + ), + ), + ), + ReturnInt(Int(0)), + ), + )(env) +} + +/* + interpreted version of: + + func sum(n int) int { + total := 0 + for i := 1; i <= n; i++ { + total += i + } + return total + } +*/ +func DeclSum(env *Env, idx int) FuncInt { + const ( + n = 0 + total = 1 + i = 2 + ) + return DeclFuncInt( + idx, []r.Type{typeOfInt}, + Block( + DeclVar(total, Const(0)), + For(DeclVar(i, Const(1)), LesseqIntInt(VarInt(i), VarInt(n)), VarIncInt(i), + VarSetInt(total, + AddIntInt( + VarInt(total), VarInt(i), + ), + ), + ), + ReturnInt(VarInt(total)), + ), + )(env) +} + +/* + interpreted version of: + + func fibonacci(n int) int { + if (n <= 2) { + return 1 + } + return fibonacci(n-1) + fibonacci(n-2) + } +*/ +func DeclFibonacci(env *Env, idx int) FuncInt { + const ( + n = 0 + ) + return DeclFuncInt( + idx, []r.Type{typeOfInt}, + Block( + If(LessIntInt(VarInt0, Int(2)), + ReturnInt(Int(1)), + ReturnInt( + AddIntInt( + CallInt(Var(1, idx), IntToX(SubIntInt(VarInt0, Int(1)))), + CallInt(Var(1, idx), IntToX(SubIntInt(VarInt0, Int(2)))), + ), + ), + ), + ), + )(env) +} diff --git a/vendor/github.com/cosmos72/gomacro/experiments/dummy.go b/vendor/github.com/cosmos72/gomacro/experiments/dummy.go new file mode 100644 index 0000000..db983c5 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/experiments/dummy.go @@ -0,0 +1,4 @@ +// empty file. stops "go build" from complaining that +// no buildable files are in the directory "experiments" + +package experiments diff --git a/vendor/github.com/cosmos72/gomacro/experiments/stmt_new_test.go b/vendor/github.com/cosmos72/gomacro/experiments/stmt_new_test.go new file mode 100644 index 0000000..5a63fbf --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/experiments/stmt_new_test.go @@ -0,0 +1,611 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * stmt_test.go + * + * Created on Apr 04, 2017 + * Author Massimiliano Ghilardi + */ + +package experiments + +import ( + r "reflect" + "testing" + "unsafe" +) + +const ( + n int = 1000 +) + +/* + benchmark results on Intel Core2 Duo P8400 @2.26GHz, Ubuntu 16.04.1 amd64, Linux 4.4.0-31-generic amd64, Go 1.8.1 linux/amd64 + + -------- n = 10 -------- + BenchmarkThreadedStmtFunc6-2 20000000 64.6 ns/op + BenchmarkThreadedStmtFunc6Unroll-2 20000000 59.8 ns/op + BenchmarkThreadedStmtFunc6Terminate-2 20000000 98.5 ns/op + BenchmarkThreadedStmtFunc6Adaptive-2 20000000 60.7 ns/op + BenchmarkThreadedStmtStruct6-2 20000000 63.5 ns/op + BenchmarkThreadedStmtStruct6Unroll-2 30000000 57.5 ns/op + BenchmarkThreadedStmtStruct6Terminate-2 20000000 78.1 ns/op + BenchmarkThreadedStmtStruct6Adaptive-2 30000000 52.4 ns/op + BenchmarkThreadedStmtFunc0-2 20000000 76.3 ns/op + BenchmarkThreadedStmtFunc1-2 20000000 80.0 ns/op + BenchmarkThreadedStmtFunc2-2 20000000 70.4 ns/op + BenchmarkThreadedStmtFunc3-2 20000000 70.4 ns/op + BenchmarkThreadedStmtFunc4-2 20000000 66.3 ns/op + BenchmarkThreadedStmtFunc4Unroll-2 20000000 59.9 ns/op + BenchmarkThreadedStmtFunc4Terminate-2 20000000 83.1 ns/op + BenchmarkThreadedStmtFunc4Adaptive-2 20000000 63.9 ns/op + BenchmarkThreadedStmtFunc4Panic-2 5000000 332 ns/op + BenchmarkThreadedStmtFunc5-2 20000000 72.7 ns/op + + -------- n = 100 -------- + BenchmarkThreadedStmtFunc6-2 2000000 665 ns/op + BenchmarkThreadedStmtFunc6Unroll-2 2000000 600 ns/op + BenchmarkThreadedStmtFunc6Terminate-2 2000000 634 ns/op + BenchmarkThreadedStmtFunc6Adaptive-2 2000000 631 ns/op + BenchmarkThreadedStmtStruct6-2 2000000 636 ns/op + BenchmarkThreadedStmtStruct6Unroll-2 3000000 581 ns/op + BenchmarkThreadedStmtStruct6Terminate-2 2000000 597 ns/op + BenchmarkThreadedStmtStruct6Adaptive-2 3000000 543 ns/op + BenchmarkThreadedStmtFunc0-2 2000000 777 ns/op + BenchmarkThreadedStmtFunc1-2 2000000 818 ns/op + BenchmarkThreadedStmtFunc2-2 2000000 701 ns/op + BenchmarkThreadedStmtFunc3-2 2000000 701 ns/op + BenchmarkThreadedStmtFunc4-2 2000000 654 ns/op + BenchmarkThreadedStmtFunc4Unroll-2 3000000 642 ns/op + BenchmarkThreadedStmtFunc4Terminate-2 2000000 643 ns/op + BenchmarkThreadedStmtFunc4Adaptive-2 2000000 606 ns/op + BenchmarkThreadedStmtFunc4Panic-2 2000000 902 ns/op + BenchmarkThreadedStmtFunc5-2 2000000 749 ns/op + + -------- n = 1000 -------- + BenchmarkThreadedStmtFunc6-2 200000 6228 ns/op + BenchmarkThreadedStmtFunc6Unroll-2 300000 5896 ns/op + BenchmarkThreadedStmtFunc6Terminate-2 200000 5719 ns/op + BenchmarkThreadedStmtFunc6Adaptive-2 300000 5538 ns/op + BenchmarkThreadedStmtStruct6-2 200000 6227 ns/op + BenchmarkThreadedStmtStruct6Unroll-2 200000 5668 ns/op + BenchmarkThreadedStmtStruct6Terminate-2 300000 6068 ns/op + BenchmarkThreadedStmtStruct6Adaptive-2 300000 5584 ns/op + BenchmarkThreadedStmtFunc0-2 200000 7535 ns/op + BenchmarkThreadedStmtFunc1-2 200000 8109 ns/op + BenchmarkThreadedStmtFunc2-2 200000 7023 ns/op + BenchmarkThreadedStmtFunc3-2 200000 7078 ns/op + BenchmarkThreadedStmtFunc4-2 200000 6480 ns/op + BenchmarkThreadedStmtFunc4Unroll-2 200000 5987 ns/op + BenchmarkThreadedStmtFunc4Terminate-2 200000 5892 ns/op + BenchmarkThreadedStmtFunc4Adaptive-2 200000 5906 ns/op + BenchmarkThreadedStmtFunc4Panic-2 200000 6004 ns/op + BenchmarkThreadedStmtFunc5-2 200000 7016 ns/op +*/ +type ( + Env6 struct { + Binds []r.Value + Outer *Env6 + IP int + Code []Stmt6 + Interrupt Stmt6 + } + Stmt6 func(*Env6) (Stmt6, *Env6) + X6 func(*Env6) +) + +func BenchmarkThreadedFuncX6(b *testing.B) { + + var nop X6 = func(env *Env6) { + } + env := &Env6{ + Binds: make([]r.Value, 10), + } + all := make([]X6, n) + for i := 0; i < n; i++ { + all[i] = nop + } + + b.ResetTimer() + for i := 0; i < b.N; i++ { + for _, x := range all { + x(env) + } + } +} + +func BenchmarkThreadedStmtFuncX6(b *testing.B) { + + var xnop X6 = func(env *Env6) { + } + var nop Stmt6 = func(env *Env6) (Stmt6, *Env6) { + xnop(env) + env.IP++ + return env.Code[env.IP], env + } + env := &Env6{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt6, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for stmt != nil { + stmt, env = stmt(env) + } + } +} + +func BenchmarkThreadedStmtFunc6(b *testing.B) { + + var nop Stmt6 = func(env *Env6) (Stmt6, *Env6) { + env.IP++ + return env.Code[env.IP], env + } + + env := &Env6{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt6, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for stmt != nil { + stmt, env = stmt(env) + } + } +} + +func BenchmarkThreadedStmtFunc6Unroll(b *testing.B) { + var nop Stmt6 = func(env *Env6) (Stmt6, *Env6) { + env.IP++ + return env.Code[env.IP], env + } + env := &Env6{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt6, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + stmt, env = stmt(env) + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} + +func BenchmarkThreadedStmtFunc6Terminate(b *testing.B) { + var interrupt Stmt6 + interrupt = func(env *Env6) (Stmt6, *Env6) { + return interrupt, env + } + unsafeInterrupt := *(**uintptr)(unsafe.Pointer(&interrupt)) + + var nop Stmt6 = func(env *Env6) (Stmt6, *Env6) { + env.IP++ + return env.Code[env.IP], env + } + env := &Env6{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt6, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = interrupt + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for { + if x := stmt; *(**uintptr)(unsafe.Pointer(&x)) == unsafeInterrupt { + break + } + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + } + } +} + +func BenchmarkThreadedStmtFunc6Adaptive(b *testing.B) { + var nop Stmt6 = func(env *Env6) (Stmt6, *Env6) { + env.IP++ + return env.Code[env.IP], env + } + var interrupt Stmt6 = func(env *Env6) (Stmt6, *Env6) { + return env.Interrupt, env + } + unsafeInterrupt := *(**uintptr)(unsafe.Pointer(&interrupt)) + + env := &Env6{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt6, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() +outer: + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + if stmt == nil { + continue outer + } + for j := 0; j < 5; j++ { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + continue + } + } + } + } + } + } + } + } + } + } + } + } + } + } + continue outer + } + + all[n] = interrupt + env.Interrupt = interrupt + for { + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + + if x := stmt; *(**uintptr)(unsafe.Pointer(&x)) == unsafeInterrupt { + continue outer + } + } + } +} + +type ( + EnvS6 struct { + Binds []r.Value + Outer *EnvS6 + IP int + Code []StmtS6 + Interrupt StmtS6 + } + StmtS6 struct { + Exec func(env *EnvS6) (StmtS6, *EnvS6) + } +) + +func init() { + println("sizeof(*uintptr) =", unsafe.Sizeof((*uintptr)(nil))) + println("sizeof(Stmt6) =", unsafe.Sizeof(func(env *Env6) (Stmt6, *Env6) { return nil, env })) + println("sizeof(StmtS6) =", unsafe.Sizeof(StmtS6{})) +} + +func BenchmarkThreadedStmtStruct6(b *testing.B) { + + var nop StmtS6 = StmtS6{func(env *EnvS6) (StmtS6, *EnvS6) { + env.IP++ + return env.Code[env.IP], env + }} + env := &EnvS6{ + Binds: make([]r.Value, 10), + } + all := make([]StmtS6, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = StmtS6{} + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for stmt.Exec != nil { + stmt, env = stmt.Exec(env) + } + } +} + +func BenchmarkThreadedStmtStruct6Unroll(b *testing.B) { + + var nop StmtS6 = StmtS6{func(env *EnvS6) (StmtS6, *EnvS6) { + env.IP++ + return env.Code[env.IP], env + }} + env := &EnvS6{ + Binds: make([]r.Value, 10), + } + all := make([]StmtS6, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = StmtS6{} + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + stmt, env = stmt.Exec(env) + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} + +func BenchmarkThreadedStmtStruct6Terminate(b *testing.B) { + + var nop StmtS6 = StmtS6{func(env *EnvS6) (StmtS6, *EnvS6) { + env.IP++ + return env.Code[env.IP], env + }} + var interrupt StmtS6 = StmtS6{func(env *EnvS6) (StmtS6, *EnvS6) { + return env.Interrupt, env + }} + unsafeInterrupt := *(**uintptr)(unsafe.Pointer(&interrupt)) + + env := &EnvS6{ + Binds: make([]r.Value, 10), + } + all := make([]StmtS6, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = interrupt + env.Code = all + env.Interrupt = interrupt + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for { + if x := stmt; *(**uintptr)(unsafe.Pointer(&x)) == unsafeInterrupt { + break + } + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + } + } +} + +func BenchmarkThreadedStmtStruct6Adaptive(b *testing.B) { + + var nop StmtS6 = StmtS6{func(env *EnvS6) (StmtS6, *EnvS6) { + env.IP++ + return env.Code[env.IP], env + }} + var interrupt StmtS6 = StmtS6{func(env *EnvS6) (StmtS6, *EnvS6) { + return env.Interrupt, env + }} + unsafeInterrupt := *(**uintptr)(unsafe.Pointer(&interrupt)) + + env := &EnvS6{ + Binds: make([]r.Value, 10), + } + all := make([]StmtS6, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = StmtS6{} + env.Code = all + + b.ResetTimer() +outer: + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + if stmt.Exec == nil { + continue outer + } + for j := 0; j < 5; j++ { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + if stmt, env = stmt.Exec(env); stmt.Exec != nil { + continue + } + } + } + } + } + } + } + } + } + } + } + } + } + } + continue outer + } + + all[n] = interrupt + env.Interrupt = interrupt + for { + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + stmt, env = stmt.Exec(env) + + if x := stmt; *(**uintptr)(unsafe.Pointer(&x)) == unsafeInterrupt { + continue outer + } + } + } +} diff --git a/vendor/github.com/cosmos72/gomacro/experiments/stmt_old_test.go b/vendor/github.com/cosmos72/gomacro/experiments/stmt_old_test.go new file mode 100644 index 0000000..f487e36 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/experiments/stmt_old_test.go @@ -0,0 +1,481 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * stmt_test.go + * + * Created on Apr 04, 2017 + * Author Massimiliano Ghilardi + */ + +package experiments + +import ( + r "reflect" + "testing" + "unsafe" +) + +type ( + Env0 struct { + Binds []r.Value + Outer *Env0 + } + Stmt0 func(env *Env0, code []Stmt0) (Stmt0, *Env0) +) + +func BenchmarkThreadedStmtFunc0(b *testing.B) { + + env := &Env0{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt0, n+1) + for i := 0; i < n; i++ { + i := i + all[i] = func(env *Env0, code []Stmt0) (Stmt0, *Env0) { + return code[i+1], env + } + } + all[n] = nil + + b.ResetTimer() + for i := 0; i < b.N; i++ { + stmt := all[0] + for stmt != nil { + stmt, env = stmt(env, all) + } + } +} + +type ( + Env1 struct { + Binds []r.Value + Outer *Env1 + IP int + } + Stmt1 func(env *Env1, all []Stmt1) (Stmt1, *Env1) +) + +func BenchmarkThreadedStmtFunc1(b *testing.B) { + + var nop Stmt1 = func(env *Env1, code []Stmt1) (Stmt1, *Env1) { + env.IP++ + return code[env.IP], env + } + + env := &Env1{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt1, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for stmt != nil { + stmt, env = stmt(env, all) + } + } +} + +type ( + Env2 struct { + Binds []r.Value + Outer *Env2 + Code []Stmt2 + } + Stmt2 func(env *Env2, ip int) (Stmt2, *Env2, int) +) + +func BenchmarkThreadedStmtFunc2(b *testing.B) { + + var nop Stmt2 = func(env *Env2, ip int) (Stmt2, *Env2, int) { + ip++ + return env.Code[ip], env, ip + } + + env := &Env2{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt2, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + ip := 0 + stmt := all[ip] + for stmt != nil { + stmt, env, ip = stmt(env, ip) + } + } +} + +type ( + Env3 struct { + Binds []r.Value + Outer *Env0 + Code []Stmt3 + } + Stmt3 func(env *Env3, ip int) (Stmt3, int) +) + +func BenchmarkThreadedStmtFunc3(b *testing.B) { + + var nop Stmt3 = func(env *Env3, ip int) (Stmt3, int) { + ip++ + return env.Code[ip], ip + } + env := &Env3{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt3, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + ip := 0 + stmt := all[ip] + for stmt != nil { + stmt, ip = stmt(env, ip) + } + } +} + +type ( + Env4 struct { + Binds []r.Value + Outer *Env4 + IP int + Code []Stmt4 + Interrupt Stmt4 + } + Stmt4 func(env *Env4) Stmt4 +) + +func BenchmarkThreadedStmtFunc4(b *testing.B) { + var nop Stmt4 = func(env *Env4) Stmt4 { + env.IP++ + return env.Code[env.IP] + } + env := &Env4{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt4, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for stmt != nil { + stmt = stmt(env) + } + } +} + +func BenchmarkThreadedStmtFunc4Unroll(b *testing.B) { + var nop Stmt4 = func(env *Env4) Stmt4 { + env.IP++ + return env.Code[env.IP] + } + env := &Env4{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt4, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + stmt = stmt(env) + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } +} + +func BenchmarkThreadedStmtFunc4Terminate(b *testing.B) { + var interrupt Stmt4 + interrupt = func(env *Env4) Stmt4 { + return interrupt + } + unsafeInterrupt := *(**uintptr)(unsafe.Pointer(&interrupt)) + + var nop Stmt4 = func(env *Env4) Stmt4 { + env.IP++ + return env.Code[env.IP] + } + env := &Env4{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt4, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = interrupt + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for { + if x := stmt; *(**uintptr)(unsafe.Pointer(&x)) == unsafeInterrupt { + break + } + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + } + } +} + +func BenchmarkThreadedStmtFunc4Adaptive(b *testing.B) { + var nop Stmt4 = func(env *Env4) Stmt4 { + env.IP++ + return env.Code[env.IP] + } + var interrupt Stmt4 = func(env *Env4) Stmt4 { + return env.Interrupt + } + unsafeInterrupt := *(**uintptr)(unsafe.Pointer(&interrupt)) + _ = unsafeInterrupt + env := &Env4{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt4, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() +outer: + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + if stmt == nil { + continue outer + } + for j := 0; j < 5; j++ { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + if stmt = stmt(env); stmt != nil { + continue + } + } + } + } + } + } + } + } + } + } + } + } + } + } + continue outer + } + all[n] = interrupt + env.Interrupt = interrupt + for { + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + + if x := stmt; *(**uintptr)(unsafe.Pointer(&x)) == unsafeInterrupt { + continue outer + } + } + } +} + +func BenchmarkThreadedStmtFunc4Panic(b *testing.B) { + var terminate Stmt4 = func(env *Env4) Stmt4 { + panic("end of code") + } + + var nop Stmt4 = func(env *Env4) Stmt4 { + env.IP++ + return env.Code[env.IP] + } + env := &Env4{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt4, n+1) + for i := 0; i < n; i++ { + all[i] = nop + } + all[n] = terminate + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + runThreadedStmtFunc4Panic(env) + } +} + +func runThreadedStmtFunc4Panic(env *Env4) { + env.IP = 0 + stmt := env.Code[0] + defer func() { + recover() + }() + for { + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + stmt = stmt(env) + } +} + +type ( + Env5 struct { + Binds []r.Value + IP int + Code []Stmt5 + Outer *Env5 + } + Stmt5 func(**Env5) Stmt5 +) + +func BenchmarkThreadedStmtFunc5(b *testing.B) { + + var nop Stmt5 = func(penv **Env5) Stmt5 { + env := *penv + env.IP++ + return env.Code[env.IP] + } + + env := &Env5{ + Binds: make([]r.Value, 10), + } + all := make([]Stmt5, n+1) + for i := 0; i < n; i++ { + i := i + all[i] = nop + } + all[n] = nil + env.Code = all + + b.ResetTimer() + for i := 0; i < b.N; i++ { + env.IP = 0 + stmt := all[0] + for stmt != nil { + stmt = stmt(&env) + } + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/README.md b/vendor/github.com/cosmos72/gomacro/fast/README.md new file mode 100644 index 0000000..6dc82b2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/README.md @@ -0,0 +1,103 @@ +## gomacro - A Go interpreter with Lisp-like macros + +The package `fast` contains a faster reimplementation of gomacro interpreter. + +To learn about gomacro, download, compile and use it, please refer to the original implementation [README.md](../README.md) + +If you want to help with the reimplementation, or you are simply curious, read on :) + +## Current Status + +STABLE. + +The fast interpreter supports: +* multiline input - shared with the classic interpreter +* line comments starting with #! in addition to // - shared with the classic interpreter +* basic types: booleans, integers, floats, complex numbers, strings (and iota) +* the empty interface, i.e. interface{} - other interfaces not implemented yet +* constant, variable and type declarations (including untyped constants) +* Go 1.9 type aliases (experimental) +* unary and binary operators +* assignment, i.e. operators := = += -= *= /= %= &= |= ^= <<= >>= &^= +* composite types: arrays, channels, maps, pointers, slices, strings, structs (including composite literals) +* accessing struct fields, including embedded fields +* slicing +* type assertions and type conversions +* interface declarations (**only** declarations. interfaces cannot be implemented or used yet) +* importing and using interfaces declared (and implemented) by compiled code +* function declarations and calls, including variadic functions +* method declarations and calls, including wrapper methods for embedded fields +* closures +* Type.Method i.e. converting methods to functions (examples: time.Duration.Hours, fmt.Stringer.String) +* seamless invocation of compiled functions from interpreter, and vice-versa +* if, for, range, select, switch, type switch, break, continue, fallthrough, return (unimplemented: goto) +* all builtins: append, cap, close, complex, defer, delete, imag, len, make, new, panic, print, println, real, recover +* go i.e. goroutines +* imports + * Go standard packages "just work" + * importing other packages requires the "plugin" package (available only on Linux with Go 1.8+) +* ~quote, ~quasiquote, ~unquote, ~unquote_splice +* macro declarations, for example `macro foo(a, b, c interface{}) interface{} { return b }` +* macro calls, for example `foo; x; y; z` + +Missing features - you are welcome to contribute: +* goto +* interfaces. They can be declared, but nothing more: there is no way to implement them or call their methods + (interfaces declared in compiled code can be used, but not yet implemented by interpreted code) +* conversion from/to interpreted interfaces + +Current limitations: +* named types declared by interpreted code are approximated. + Inside the interpreter they look and behave correctly, but if you pass them to compiled code, + the type is actually unnamed. + + For example, if interpreted code declares `type Pair struct { A, B int }`, + then passes a `Pair` to compiled code, it will be received as `struct { A, B int }` + + The reason for such limitation is simple: the function `reflect.NamedOf()` does not exist, + so the interpreter uses `reflect.StructOf()` to define new types, + which can only create unnamed types. + +* recursive types declared by interpreted code are approximated. + Inside the interpreter they look and behave correctly, but if you pass them to compiled code, + the type is unnamed (as above) and self-references are actually interface{}. + + For example, if interpreted code declares `type List struct { First int; Rest *List }` + then passes a `List` to compiled code, it will be received as `struct { First int; Rest *interface{} }` + + The reason is the same as above: the interpreter uses `reflect.StructOf()` to define new types, + which cannot create recursive types. + + Interestingly, this means the interpreter also accepts the following declaration, + which is rejected by Go compiler: `type List2 struct { First int; Rest List2 }` + Note that `Rest` is a `List2` **not** a pointer to `List2` + +* interfaces declared by interpreted code are emulated. + Inside the interpreter they look and behave correctly, but if you pass them to compiled code, + the type is actually a pointer to a struct containing a header and a lot of functions. + + The reason is: the function `reflect.InterfaceOf()` does not exist, + so the interpreter has to emulate interfaces with `reflect.StructOf()` and a lot of bookkeeping + +* operators << and >> on untyped constants do not follow the exact type deduction rules. + The implemented behavior is: + * an untyped constant shifted by a non-constant expression always returns an int + * an untyped floating point constant shifted by a constant expression returns an untyped integer constant. + the interpreter signals an error during the precompile phase + if the left operand has a non-zero fractional or imaginary part, + or it overflows both int64 and uint64. + See [Go Language Specification](https://golang.org/ref/spec#Operators) for the correct behavior + +* recover() does not support mixing interpreted and compiled code: + if an interpreted function invokes as defer a compiled function, + or a compiled function invokes as defer an interpreted function, + then, inside that defer, recover() will not work: + it will return nil and will **not** stop panics. + + recover() works normally if the function and its defer are either + **both interpreted** or **both compiled**. + +Misc TODO notes: +* when importing a package, reuse compiled .so if exists already +* gomacro FILE: execute main() if (re)defined and package == "main" +* try to run Go compiler tests diff --git a/vendor/github.com/cosmos72/gomacro/fast/address.go b/vendor/github.com/cosmos72/gomacro/fast/address.go new file mode 100644 index 0000000..29a9a42 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/address.go @@ -0,0 +1,1008 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * address.go + * + * Created on Apr 05, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + "unsafe" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) AddressOf(node *ast.UnaryExpr) *Expr { return c.addressOf(node.X) } +func (c *Comp) addressOf(expr ast.Expr) *Expr { + for { + switch e := expr.(type) { + case *ast.ParenExpr: + expr = e.X + continue + case *ast.StarExpr: + + ret := c.Expr1(e.X) + if ret.Type.Kind() != r.Ptr { + c.Errorf("unary operation * on non-pointer <%v>: %v", ret.Type, e) + } + + } + break + } + place := c.placeOrAddress(expr, PlaceAddress) + + if place.IsVar() { + va := place.Var + return va.Address(c.Depth) + } else if place.Addr == nil { + c.Errorf("cannot take the address of %v <%v>", expr, place.Type) + return nil + } else { + + t := c.Universe.PtrTo(place.Type) + return exprX1(t, place.Addr) + } +} +func (c *Comp) AddressOfVar(name string) *Expr { + sym := c.Resolve(name) + va := sym.AsVar(PlaceAddress) + return va.Address(c.Depth) +} +func (va *Var) Address(maxdepth int) *Expr { + upn := va.Upn + k := va.Type.Kind() + index := va.Desc.Index() + if index == NoIndex { + base.Errorf("cannot take the address of %s: _", va.Desc.Class()) + return nil + } + var ret I + switch upn { + case 0: + switch k { + case r.Bool: + + ret = func(env *Env) *bool { + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int: + + ret = func(env *Env) *int { + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int8: + + ret = func(env *Env) *int8 { + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int16: + + ret = func(env *Env) *int16 { + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int32: + + ret = func(env *Env) *int32 { + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int64: + + ret = func(env *Env) *int64 { + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint: + + ret = func(env *Env) *uint { + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint8: + + ret = func(env *Env) *uint8 { + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint16: + + ret = func(env *Env) *uint16 { + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint32: + + ret = func(env *Env) *uint32 { + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint64: + + ret = func(env *Env) *uint64 { + env.AddressTaken = true + return &env.IntBinds[index] + + } + case r.Uintptr: + + ret = func(env *Env) *uintptr { + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float32: + + ret = func(env *Env) *float32 { + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float64: + + ret = func(env *Env) *float64 { + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Complex64: + + ret = func(env *Env) *complex64 { + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + + } + default: + + ret = func(env *Env) r.Value { + return env.Binds[index].Addr() + } + } + case 1: + switch k { + case r.Bool: + + ret = func(env *Env) *bool { + env = env. + Outer + + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int: + + ret = func(env *Env) *int { + env = env. + Outer + + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int8: + + ret = func(env *Env) *int8 { + env = env. + Outer + + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int16: + + ret = func(env *Env) *int16 { + env = env. + Outer + + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int32: + + ret = func(env *Env) *int32 { + env = env. + Outer + + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int64: + + ret = func(env *Env) *int64 { + env = env. + Outer + + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint: + + ret = func(env *Env) *uint { + env = env. + Outer + + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint8: + + ret = func(env *Env) *uint8 { + env = env. + Outer + + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint16: + + ret = func(env *Env) *uint16 { + env = env. + Outer + + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint32: + + ret = func(env *Env) *uint32 { + env = env. + Outer + + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint64: + + ret = func(env *Env) *uint64 { + env = env. + Outer + + env.AddressTaken = true + return &env.IntBinds[index] + + } + case r.Uintptr: + + ret = func(env *Env) *uintptr { + env = env. + Outer + + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float32: + + ret = func(env *Env) *float32 { + env = env. + Outer + + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float64: + + ret = func(env *Env) *float64 { + env = env. + Outer + + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Complex64: + + ret = func(env *Env) *complex64 { + env = env. + Outer + + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + + } + default: + + ret = func(env *Env) r.Value { + env = env. + Outer + return env.Binds[index].Addr() + + } + } + case 2: + switch k { + case r.Bool: + + ret = func(env *Env) *bool { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int: + + ret = func(env *Env) *int { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int8: + + ret = func(env *Env) *int8 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int16: + + ret = func(env *Env) *int16 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int32: + + ret = func(env *Env) *int32 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int64: + + ret = func(env *Env) *int64 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint: + + ret = func(env *Env) *uint { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint8: + + ret = func(env *Env) *uint8 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint16: + + ret = func(env *Env) *uint16 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint32: + + ret = func(env *Env) *uint32 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint64: + + ret = func(env *Env) *uint64 { + env = env. + Outer.Outer + + env.AddressTaken = true + return &env.IntBinds[index] + + } + case r.Uintptr: + + ret = func(env *Env) *uintptr { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float32: + + ret = func(env *Env) *float32 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float64: + + ret = func(env *Env) *float64 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Complex64: + + ret = func(env *Env) *complex64 { + env = env. + Outer.Outer + + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + + } + default: + + ret = func(env *Env) r.Value { + env = env. + Outer.Outer + return env.Binds[index].Addr() + + } + } + default: + switch k { + case r.Bool: + + ret = func(env *Env) *bool { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int: + + ret = func(env *Env) *int { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int8: + + ret = func(env *Env) *int8 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int16: + + ret = func(env *Env) *int16 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int32: + + ret = func(env *Env) *int32 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int64: + + ret = func(env *Env) *int64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint: + + ret = func(env *Env) *uint { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint8: + + ret = func(env *Env) *uint8 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint16: + + ret = func(env *Env) *uint16 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint32: + + ret = func(env *Env) *uint32 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint64: + + ret = func(env *Env) *uint64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return &env.IntBinds[index] + + } + case r.Uintptr: + + ret = func(env *Env) *uintptr { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float32: + + ret = func(env *Env) *float32 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float64: + + ret = func(env *Env) *float64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Complex64: + + ret = func(env *Env) *complex64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + + } + default: + + ret = func(env *Env) r.Value { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr() + + } + } + case maxdepth - 1: + switch k { + case r.Bool: + + ret = func(env *Env) *bool { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int: + + ret = func(env *Env) *int { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int8: + + ret = func(env *Env) *int8 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int16: + + ret = func(env *Env) *int16 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int32: + + ret = func(env *Env) *int32 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int64: + + ret = func(env *Env) *int64 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint: + + ret = func(env *Env) *uint { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint8: + + ret = func(env *Env) *uint8 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint16: + + ret = func(env *Env) *uint16 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint32: + + ret = func(env *Env) *uint32 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint64: + + ret = func(env *Env) *uint64 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return &env.IntBinds[index] + + } + case r.Uintptr: + + ret = func(env *Env) *uintptr { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float32: + + ret = func(env *Env) *float32 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float64: + + ret = func(env *Env) *float64 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Complex64: + + ret = func(env *Env) *complex64 { + env = env.ThreadGlobals.FileEnv + + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + + } + default: + + ret = func(env *Env) r.Value { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr() + + } + } + case maxdepth: + switch k { + case r.Bool: + + ret = func(env *Env) *bool { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int: + + ret = func(env *Env) *int { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int8: + + ret = func(env *Env) *int8 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int16: + + ret = func(env *Env) *int16 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int32: + + ret = func(env *Env) *int32 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Int64: + + ret = func(env *Env) *int64 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint: + + ret = func(env *Env) *uint { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint8: + + ret = func(env *Env) *uint8 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint16: + + ret = func(env *Env) *uint16 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint32: + + ret = func(env *Env) *uint32 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Uint64: + + ret = func(env *Env) *uint64 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return &env.IntBinds[index] + + } + case r.Uintptr: + + ret = func(env *Env) *uintptr { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float32: + + ret = func(env *Env) *float32 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Float64: + + ret = func(env *Env) *float64 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + + } + case r.Complex64: + + ret = func(env *Env) *complex64 { + env = env.ThreadGlobals.TopEnv + + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + + } + default: + + ret = func(env *Env) r.Value { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr() + + } + } + } + return &Expr{Lit: Lit{Type: xr.PtrTo(va.Type)}, Fun: ret} +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/address.gomacro b/vendor/github.com/cosmos72/gomacro/fast/address.gomacro new file mode 100644 index 0000000..726122c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/address.gomacro @@ -0,0 +1,187 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * address.go + * + * Created on Apr 05, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + "unsafe" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + "go/ast" + r "reflect" +) + +:const ( + // conventional values + AnyDepth = -1 + FileDepth = -2 + TopDepth = -3 +) + +:func faddress(upn int, typ ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + var t r.Type = EvalType(typ) + var decls, bind, rettype ast.Node + + if upn == 0 { + decls = ~'{{ }} + } else if upn > 0 { + decls = ~'env + for i := 0; i < upn; i++ { + decls = ~"{~,decls. Outer} + } + decls = ~"{{ + env = ~,decls + }} + } else if upn == FileDepth { + decls = ~'{{env = env.ThreadGlobals.FileEnv}} + } else if upn == TopDepth { + decls = ~'{{env = env.ThreadGlobals.TopEnv}} + } else { + decls = ~'{ + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + } + } + if t == nil { + // no need to set env.AddressTaken = true + // because env.Binds[index] actually contains a pointer to the variable + bind = ~'{env .Binds[index].Addr()} + rettype = ~'{r.Value} + } else { + decls = ~"{~,@decls; env.AddressTaken = true} + rettype = ~"{* ~,typ} + if t.Kind() == r.Uint64 { + bind = ~'{&env.IntBinds[index]} + } else { + bind = ~"{(*~,typ)(unsafe.Pointer(&env.IntBinds[index]))} + } + } + + return ~"{ + ret = func(env *Env) (~,rettype) { + ~,@decls + return ~,bind + } + } +} + +:macro address(depth ast.Node, typ ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + var upn int = Eval(depth).(int) + + return faddress(upn, typ) +} + +:macro addresses(depth ast.Node) ast.Node { + return ~"{ + switch k { + case r.Bool: address; ~,depth; bool + case r.Int: address; ~,depth; int + case r.Int8: address; ~,depth; int8 + case r.Int16: address; ~,depth; int16 + case r.Int32: address; ~,depth; int32 + case r.Int64: address; ~,depth; int64 + case r.Uint: address; ~,depth; uint + case r.Uint8: address; ~,depth; uint8 + case r.Uint16: address; ~,depth; uint16 + case r.Uint32: address; ~,depth; uint32 + case r.Uint64: address; ~,depth; uint64 + case r.Uintptr: address; ~,depth; uintptr + case r.Float32: address; ~,depth; float32 + case r.Float64: address; ~,depth; float64 + case r.Complex64: address; ~,depth; complex64 + default: address; ~,depth; nil + } + } +} + +func (c *Comp) AddressOf(node *ast.UnaryExpr) *Expr { + return c.addressOf(node.X) +} + +func (c *Comp) addressOf(expr ast.Expr) *Expr { + for { + switch e := expr.(type) { + case *ast.ParenExpr: + expr = e.X + continue + case *ast.StarExpr: + // optimize & * x -> x, but check that x is a pointer + ret := c.Expr1(e.X) + if ret.Type.Kind() != r.Ptr { + c.Errorf("unary operation * on non-pointer <%v>: %v", ret.Type, e) + } + } + break + } + place := c.placeOrAddress(expr, PlaceAddress) + // c.Debugf("AddressOf: place %v has type %v, taking its address", expr, place.Type) + if place.IsVar() { + va := place.Var // make a copy of place.Var, do not alter the original's type + return va.Address(c.Depth) + } else if place.Addr == nil { + c.Errorf("cannot take the address of %v <%v>", expr, place.Type) + return nil + } else { + // placeOrAddress returns the dereferenced type... fix it + t := c.Universe.PtrTo(place.Type) + return exprX1(t, place.Addr) + } +} + +func (c *Comp) AddressOfVar(name string) *Expr { + sym := c.Resolve(name) + va := sym.AsVar(PlaceAddress) + return va.Address(c.Depth) +} + +func (va *Var) Address(maxdepth int) *Expr { + upn := va.Upn + k := va.Type.Kind() + index := va.Desc.Index() + if index == NoIndex { + base.Errorf("cannot take the address of %s: _", va.Desc.Class()) + return nil + } + var ret I + switch upn { + case 0: {addresses; 0} + case 1: {addresses; 1} + case 2: {addresses; 2} + default: {addresses; -1} + case maxdepth-1: {addresses; -2} + case maxdepth: {addresses; -3} + } + return &Expr{Lit: Lit{Type: xr.PtrTo(va.Type)}, Fun: ret} +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/assignment.go b/vendor/github.com/cosmos72/gomacro/fast/assignment.go new file mode 100644 index 0000000..edb5833 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/assignment.go @@ -0,0 +1,405 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * declaration.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + r "reflect" +) + +type Assign struct { + placefun func(*Env) r.Value + placekey func(*Env) r.Value + setvar func(*Env, r.Value) + setplace func(r.Value, r.Value, r.Value) +} + +func (a *Assign) init(c *Comp, place *Place) { + if place.IsVar() { + a.setvar = c.varSetValue(&place.Var) + } else { + a.placefun = place.Fun + a.placekey = place.MapKey + a.setplace = c.placeSetValue(place) + } +} + +// Assign compiles an *ast.AssignStmt into an assignment to one or more place +func (c *Comp) Assign(node *ast.AssignStmt) { + c.Pos = node.Pos() + + lhs, rhs := node.Lhs, node.Rhs + if node.Tok == token.DEFINE { + c.DeclVarsShort(lhs, rhs) + return + } + ln, rn := len(lhs), len(rhs) + if node.Tok == token.ASSIGN { + if ln < 1 || (rn != 1 && ln != rn) { + c.Errorf("invalid assignment, cannot assign %d values to %d places: %v", rn, ln, node) + } + } else if ln != 1 || rn != 1 { + c.Errorf("invalid assignment, operator %s does not support multiple parallel assignments: %v", node.Tok, node) + } + + // the naive loop + // for i := range lhs { c.assign1(lhs[i], node.Tok, rhs[i]) } + // is bugged. It breaks, among others, the common Go idiom to swap two values: a,b = b,a + // + // More accurately, Go states at: https://golang.org/ref/spec#Assignments + // + // "The assignment proceeds in two phases. First, the operands of index expressions + // and pointer indirections (including implicit pointer indirections in selectors) + // on the left and the expressions on the right are all evaluated in the usual order. + // Second, the assignments are carried out in left-to-right order." + // + // A solution is to evaluate left-to-right all places on the left, + // then all expressions on the right, then perform all the assignments + + places := make([]*Place, ln) + exprs := make([]*Expr, rn) + canreorder := true + for i, li := range lhs { + places[i] = c.Place(li) + canreorder = canreorder && places[i].IsVar() // ach, needed. see for example i := 0; i, x[i] = 1, 2 // set i = 1, x[0] = 2 + } + if rn == 1 && ln > 1 { + exprs[0] = c.Expr(rhs[0]) + canreorder = false + } else { + for i, ri := range rhs { + exprs[i] = c.Expr1(ri) + canreorder = canreorder && exprs[i].Const() + } + } + if ln == rn && (ln <= 1 || canreorder) { + for i := range lhs { + c.assign1(lhs[i], node.Tok, rhs[i], places[i], exprs[i]) + } + return + } + // problem: we need to create temporary copies of the evaluations + // before performing the assignments. Such temporary copies must be per-goroutine! + // + // so a technique like the following is bugged, + // because it creates a *single* global location for the temporary copy: + // var tmp r.Value + // func set(env *Env) { tmp = places[i].Fun(env) } + // func get(env *Env) r.Value { return tmp } + + assign := make([]Assign, ln) + for i, place := range places { + assign[i].init(c, place) + } + + exprfuns, exprxv := c.assignPrepareRhs(node, places, exprs) + + c.Pos = node.Pos() + if ln == 2 && rn == 2 && assign[0].placekey == nil && assign[1].placekey == nil { + c.assign2(assign, exprfuns) + } else { + c.assignMulti(assign, exprfuns, exprxv) + } +} + +func (c *Comp) assignPrepareRhs(node *ast.AssignStmt, places []*Place, exprs []*Expr) ([]func(*Env) r.Value, func(*Env) (r.Value, []r.Value)) { + lhs, rhs := node.Lhs, node.Rhs + ln, rn := len(lhs), len(rhs) + if ln == rn { + exprfuns := make([]func(*Env) r.Value, rn) + for i, expr := range exprs { + tplace := places[i].Type + if expr.Const() { + expr.ConstTo(tplace) + } else if !expr.Type.AssignableTo(tplace) { + c.Pos = rhs[i].Pos() + c.Errorf("cannot use <%v> as <%v> in assignment: %v %v %v", expr.Type, tplace, lhs[i], node.Tok, rhs[i]) + } + exprfuns[i] = expr.AsX1() + } + return exprfuns, nil + } + if rn == 1 { + expr := exprs[0] + nexpr := expr.NumOut() + if nexpr != ln { + c.Pos = node.Pos() + c.Errorf("invalid assignment: expression returns %d values, cannot assign them to %d places: %v", nexpr, ln, node) + } + for i := 0; i < nexpr; i++ { + texpr := expr.Out(i) + tplace := places[i].Type + if !texpr.AssignableTo(tplace) { + c.Pos = lhs[i].Pos() + c.Errorf("cannot assign <%v> to %v <%v> in multiple assignment", texpr, lhs[i], tplace) + } + } + return nil, expr.AsXV(CompileDefaults) + } + c.Pos = node.Pos() + c.Errorf("invalid assignment, cannot assign %d values to %d places: %v", rn, ln, node) + return nil, nil +} + +// assign2 compiles multiple assignment to two places +func (c *Comp) assign2(assign []Assign, exprfuns []func(*Env) r.Value) { + efuns := [2]func(*Env) r.Value{exprfuns[0], exprfuns[1]} + var stmt Stmt + if assign[0].placefun == nil { + if assign[1].placefun == nil { + setvars := [2]func(*Env, r.Value){assign[0].setvar, assign[1].setvar} + stmt = func(env *Env) (Stmt, *Env) { + val0 := efuns[0](env) + val1 := efuns[1](env) + setvars[0](env, val0) + setvars[1](env, val1) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + obj1 := assign[1].placefun(env) + val0 := efuns[0](env) + val1 := efuns[1](env) + assign[0].setvar(env, val0) + assign[1].setplace(obj1, obj1, val1) + env.IP++ + return env.Code[env.IP], env + } + } + } else { + if assign[1].placefun == nil { + stmt = func(env *Env) (Stmt, *Env) { + obj0 := assign[0].placefun(env) + val0 := efuns[0](env) + val1 := efuns[1](env) + assign[0].setplace(obj0, obj0, val0) + assign[1].setvar(env, val1) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + obj0 := assign[0].placefun(env) + obj1 := assign[1].placefun(env) + val0 := efuns[0](env) + val1 := efuns[1](env) + assign[0].setplace(obj0, obj0, val0) + assign[1].setplace(obj1, obj1, val1) + env.IP++ + return env.Code[env.IP], env + } + } + } + c.append(stmt) +} + +// assignMulti compiles multiple assignment to places +func (c *Comp) assignMulti(assign []Assign, exprfuns []func(*Env) r.Value, exprxv func(*Env) (r.Value, []r.Value)) { + stmt := func(env *Env) (Stmt, *Env) { + n := len(assign) + // these buffers must be allocated at runtime, per goroutine! + objs := make([]r.Value, n) + keys := make([]r.Value, n) + var tmp r.Value + var a *Assign + // evaluate all lhs + for i := range assign { + if a = &assign[i]; a.placefun == nil { + continue + } + objs[i] = a.placefun(env) + if a.placekey == nil { + continue + } + // assigning to obj[key] where obj is a map: + // obj and key do NOT need to be settable, + // and actually Go spec tell to make a copy of their values + if tmp = objs[i]; tmp.CanSet() { + objs[i] = tmp.Convert(tmp.Type()) + } + if tmp = a.placekey(env); tmp.CanSet() { + tmp = tmp.Convert(tmp.Type()) + } + keys[i] = tmp + } + // evaluate all rhs + var vals []r.Value + if exprxv != nil { + _, vals = exprxv(env) + } else { + vals = make([]r.Value, n) + for i, exprfun := range exprfuns { + vals[i] = exprfun(env) + } + } + // execute assignments + for i := range assign { + a := &assign[i] + if a.setvar != nil { + a.setvar(env, vals[i]) + } else { + a.setplace(objs[i], keys[i], vals[i]) + } + } + env.IP++ + return env.Code[env.IP], env + } + c.append(stmt) +} + +// assign1 compiles a single assignment to a place +func (c *Comp) assign1(lhs ast.Expr, op token.Token, rhs ast.Expr, place *Place, init *Expr) { + panicking := true + defer func() { + if !panicking { + return + } + rec := recover() + node := &ast.AssignStmt{Lhs: []ast.Expr{lhs}, Tok: op, Rhs: []ast.Expr{rhs}} // for nice error messages + c.Errorf("error compiling assignment: %v\n\t%v", node, rec) + }() + if place.IsVar() { + c.SetVar(&place.Var, op, init) + } else { + c.SetPlace(place, op, init) + } + panicking = false +} + +// LookupVar compiles the left-hand-side of an assignment, in case it's an identifier (i.e. a variable name) +func (c *Comp) LookupVar(name string) *Var { + if name == "_" { + return &Var{} + } + sym := c.Resolve(name) + return sym.AsVar(PlaceSettable) +} + +// Place compiles the left-hand-side of an assignment +func (c *Comp) Place(node ast.Expr) *Place { + return c.placeOrAddress(node, false) +} + +// PlaceOrAddress compiles the left-hand-side of an assignment or the location of an address-of +func (c *Comp) placeOrAddress(in ast.Expr, opt PlaceOption) *Place { + for { + if in != nil { + c.Pos = in.Pos() + } + switch node := in.(type) { + case *ast.CompositeLit: + // composite literals are addressable but not settable + if opt == PlaceSettable { + c.Errorf("%s composite literal", opt) + } + e := c.Expr1(node) + fun := e.AsX1() + var addr func(*Env) r.Value + switch e.Type.Kind() { + case r.Array, r.Struct: + // array and struct composite literals are directly addressable + // because they are created with reflect.New(t).Elem() + addr = func(env *Env) r.Value { + return fun(env).Addr() + } + default: + // other composite literals (maps, slices) are not directly addressable: + // the result of reflect.MakeMap and reflect.MakeSlice is not addressable, + // so implement a workaround to behave as compiled Go. + // + // 'addr' below creates a new pointer-to-t at each execution, + // but since the map or slice is freshly created each time + // and 'addr' below is the only one code accessing it, + // it's not a problem + addr = func(env *Env) r.Value { + obj := fun(env) + place := r.New(obj.Type()) + place.Elem().Set(obj) + return place + } + } + return &Place{Var: Var{Type: e.Type}, Fun: fun, Addr: addr} + case *ast.Ident: + return c.IdentPlace(node.Name, opt) + case *ast.IndexExpr: + return c.IndexPlace(node, opt) + case *ast.ParenExpr: + in = node.X + continue + case *ast.StarExpr: + e := c.Expr1(node.X) + if e.Const() { + c.Errorf("%s a constant: %v <%v>", opt, node, e.Type) + return nil + } + // we cannot optimize the case "node.X is a variable" because we are compiling *variable, not variable + // e.Fun is already the address we want, dereference its type + t := e.Type.Elem() + // c.Debugf("placeOrAddress: %v has type %v, transformed into: %v has type %v", node.X, e.Type, node, t) + addr := e.AsX1() + fun := func(env *Env) r.Value { + return addr(env).Elem() + } + return &Place{Var: Var{Type: t}, Fun: fun, Addr: addr} + case *ast.SelectorExpr: + return c.SelectorPlace(node, opt) + default: + c.Errorf("%s: %v", opt, in) + return nil + } + } +} + +// placeForSideEffects compiles the left-hand-side of a do-nothing assignment, +// as for example *addressOfInt() += 0, in order to apply its side effects +func (c *Comp) placeForSideEffects(place *Place) { + if place.IsVar() { + return + } + var ret Stmt + fun := place.Fun + if mapkey := place.MapKey; mapkey != nil { + ret = func(env *Env) (Stmt, *Env) { + fun(env) + mapkey(env) + // no need to call obj.MapIndex(key): it has no side effects and cannot panic. + // obj := fun(env) + // key := mapkey(env) + // obj.MapIndex(key) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + c.append(ret) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary.go b/vendor/github.com/cosmos72/gomacro/fast/binary.go new file mode 100644 index 0000000..eb38297 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/binary.go @@ -0,0 +1,397 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binary.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/constant" + "go/token" + r "reflect" + + "github.com/cosmos72/gomacro/base" + mt "github.com/cosmos72/gomacro/token" +) + +func (c *Comp) BinaryExpr(node *ast.BinaryExpr) *Expr { + x := c.Expr(node.X) + y := c.Expr(node.Y) + if x.NumOut() == 0 { + c.Errorf("operand returns no values, cannot use in binary expression: %v", node.X) + } else if y.NumOut() == 0 { + c.Errorf("operand returns no values, cannot use in binary expression: %v", node.Y) + } + return c.BinaryExpr1(node, x, y) +} + +func (c *Comp) BinaryExpr1(node *ast.BinaryExpr, x *Expr, y *Expr) *Expr { + if x.Untyped() && y.Untyped() { + return c.BinaryExprUntyped(node, x.Value.(UntypedLit), y.Value.(UntypedLit)) + } + bothConst := x.Const() && y.Const() + var z *Expr + + switch node.Op { + case token.ADD, token.ADD_ASSIGN: + z = c.Add(node, x, y) + case token.SUB, token.SUB_ASSIGN: + z = c.Sub(node, x, y) + case token.MUL, token.MUL_ASSIGN: + z = c.Mul(node, x, y) + case token.QUO, token.QUO_ASSIGN: + z = c.Quo(node, x, y) + case token.REM, token.REM_ASSIGN: + z = c.Rem(node, x, y) + case token.AND, token.AND_ASSIGN: + z = c.And(node, x, y) + case token.OR, token.OR_ASSIGN: + z = c.Or(node, x, y) + case token.XOR, token.XOR_ASSIGN: + z = c.Xor(node, x, y) + case token.SHL, token.SHL_ASSIGN: + z = c.Shl(node, x, y) + case token.SHR, token.SHR_ASSIGN: + z = c.Shr(node, x, y) + case token.AND_NOT, token.AND_NOT_ASSIGN: + z = c.Andnot(node, x, y) + case token.LAND: + z = c.Land(node, x, y) + case token.LOR: + z = c.Lor(node, x, y) + case token.EQL: + z = c.Eql(node, x, y) + case token.LSS: + z = c.Lss(node, x, y) + case token.GTR: + z = c.Gtr(node, x, y) + case token.NEQ: + z = c.Neq(node, x, y) + case token.LEQ: + z = c.Leq(node, x, y) + case token.GEQ: + z = c.Geq(node, x, y) + default: + return c.unimplementedBinaryExpr(node, x, y) + } + if bothConst { + // constant propagation + z.EvalConst(CompileKeepUntyped) + } + return z +} + +func (c *Comp) BinaryExprUntyped(node *ast.BinaryExpr, x UntypedLit, y UntypedLit) *Expr { + op := node.Op + switch op { + case token.LAND, token.LOR: + xb, yb := x.ConstTo(c.TypeOfBool()).(bool), y.ConstTo(c.TypeOfBool()).(bool) + var flag bool + if op == token.LAND { + flag = xb && yb + } else { + flag = xb || yb + } + return c.exprUntypedLit(r.Bool, constant.MakeBool(flag)) + case token.EQL, token.LSS, token.GTR, token.NEQ, token.LEQ, token.GEQ: + // comparison gives an untyped bool + flag := constant.Compare(x.Obj, op, y.Obj) + return c.exprUntypedLit(r.Bool, constant.MakeBool(flag)) + case token.SHL, token.SHL_ASSIGN: + return c.ShiftUntyped(node, token.SHL, x, y) + case token.SHR, token.SHR_ASSIGN: + return c.ShiftUntyped(node, token.SHR, x, y) + default: + op2 := tokenWithoutAssign(op) + xint := base.KindToCategory(x.Kind) == r.Int + yint := base.KindToCategory(y.Kind) == r.Int + if op2 == token.QUO && xint && yint { + // untyped integer division + op2 = token.QUO_ASSIGN + } + zobj := constant.BinaryOp(x.Obj, op2, y.Obj) + zkind := constantKindToUntypedLitKind(zobj.Kind()) + // c.Debugf("untyped binary expression %v %s %v returned {%v %v}", x, op2, y, zkind, zobj) + // reflect.Int32 (i.e. rune) has precedence over reflect.Int + if zobj.Kind() == constant.Int { + if xint && x.Kind != r.Int { + zkind = x.Kind + } else if yint && y.Kind != r.Int { + zkind = y.Kind + } + } + if zkind == r.Invalid { + c.Errorf("invalid binary operation: %v %v %v", x.Obj, op, y.Obj) + } + return c.exprUntypedLit(zkind, zobj) + } +} + +func tokenWithoutAssign(op token.Token) token.Token { + switch op { + case token.ADD_ASSIGN: + op = token.ADD + case token.SUB_ASSIGN: + op = token.SUB + case token.MUL_ASSIGN: + op = token.MUL + case token.QUO_ASSIGN: + op = token.QUO + case token.REM_ASSIGN: + op = token.REM + case token.AND_ASSIGN: + op = token.AND + case token.OR_ASSIGN: + op = token.OR + case token.XOR_ASSIGN: + op = token.XOR + case token.SHL_ASSIGN: + op = token.SHL + case token.SHR, token.SHR_ASSIGN: + op = token.SHR + case token.AND_NOT_ASSIGN: + op = token.AND_NOT + } + return op +} + +var warnUntypedShift, warnUntypedShift2 = true, true + +func (c *Comp) ShiftUntyped(node *ast.BinaryExpr, op token.Token, x UntypedLit, y UntypedLit) *Expr { + if y.Obj.Kind() != constant.Int { + c.Errorf("invalid shift: %v %v %v", x.Obj, op, y.Obj) + } + yn64, exact := constant.Uint64Val(y.Obj) + yn := uint(yn64) + if !exact || uint64(yn) != yn64 { + c.Errorf("invalid shift: %v %v %v", x.Obj, op, y.Obj) + } + xn := x.Obj + xkind := x.Kind + switch xkind { + case r.Int, r.Int32: + // nothing to do + case r.Float64, r.Complex128: + if warnUntypedShift { + c.Warnf("known limitation (warned only once): untyped floating point constant shifted by untyped constant. returning untyped integer instead of deducing the type from the surrounding context: %v", + node) + warnUntypedShift = false + } + sign := constant.Sign(xn) + if xkind == r.Complex128 { + sign = constant.Sign(constant.Real(xn)) + } + if sign >= 0 { + xn = constant.MakeUint64(x.ConstTo(c.TypeOfUint64()).(uint64)) + } else { + xn = constant.MakeInt64(x.ConstTo(c.TypeOfInt64()).(int64)) + } + xkind = r.Int + default: + c.Errorf("invalid shift: %v %v %v", x.Obj, op, y.Obj) + } + zobj := constant.Shift(xn, op, yn) + if zobj.Kind() == constant.Unknown { + c.Errorf("invalid shift: %v %v %v", x.Obj, op, y.Obj) + } + return c.exprUntypedLit(xkind, zobj) +} + +// prepareShift panics if the types of xe and ye are not valid for shifts i.e. << or >> +// returns non-nil expression if it computes the shift operation itself +func (c *Comp) prepareShift(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + if xe.Untyped() && ye.Untyped() { + // untyped << untyped should not happen here, it's handled in Comp.BinaryExpr... but let's be safe + return c.ShiftUntyped(node, node.Op, xe.Value.(UntypedLit), ye.Value.(UntypedLit)) + } + xet, yet := xe.DefaultType(), ye.DefaultType() + if xet == nil || !base.IsCategory(xet.Kind(), r.Int, r.Uint) { + return c.invalidBinaryExpr(node, xe, ye) + } + if xe.Untyped() { + xuntyp := xe.Value.(UntypedLit) + if ye.Const() { + // untyped << typed + yuntyp := UntypedLit{r.Int, constant.MakeUint64(r.ValueOf(ye.Value).Uint()), c.Universe} + return c.ShiftUntyped(node, node.Op, xuntyp, yuntyp) + } + // untyped << expression + // BUG! we should deduce left operand type from its context, instead of assuming int + // see https://golang.org/ref/spec#Operators + // + // "If the left operand of a non-constant shift expression is an untyped constant, + // "it is first converted to the type it would assume if the shift expression + // "were replaced by its left operand alone." + if warnUntypedShift2 { + c.Warnf("known limitation (warned only once): untyped constant shifted by a non-constant expression. returning int instead of deducing the type from the surrounding context: %v", + node) + warnUntypedShift2 = false + } + xe.ConstTo(c.TypeOfInt()) + } + if ye.Untyped() { + // untyped constants do not distinguish between int and uint + if yet == nil || !base.IsCategory(yet.Kind(), r.Int) { + return c.invalidBinaryExpr(node, xe, ye) + } + ye.ConstTo(c.TypeOfUint64()) + } else { + if yet == nil || !base.IsCategory(yet.Kind(), r.Uint) { + return c.invalidBinaryExpr(node, xe, ye) + } + } + xe.WithFun() + ye.WithFun() + return nil +} + +func (c *Comp) Land(node *ast.BinaryExpr, x *Expr, y *Expr) *Expr { + xval, xfun, xerr := x.TryAsPred() + yval, yfun, yerr := y.TryAsPred() + if xerr || yerr { + return c.invalidBinaryExpr(node, x, y) + } + // optimize short-circuit logic + if xfun == nil { + if xval { + return y + } + return c.exprValue(nil, false) + } + if yfun == nil { + if yval { + return x + } + return c.exprBool(func(env *Env) bool { + return xfun(env) && false + }) + } + return c.exprBool(func(env *Env) bool { + return xfun(env) && yfun(env) + }) +} + +func (c *Comp) Lor(node *ast.BinaryExpr, x *Expr, y *Expr) *Expr { + xval, xfun, xerr := x.TryAsPred() + yval, yfun, yerr := y.TryAsPred() + if xerr || yerr { + return c.invalidBinaryExpr(node, x, y) + } + // optimize short-circuit logic + if xfun == nil { + if xval { + return c.exprValue(nil, true) + } + return y + } + if yfun == nil { + if yval { + return c.exprBool(func(env *Env) bool { + return xfun(env) || true + }) + } + return x + } + return c.exprBool(func(env *Env) bool { + return xfun(env) || yfun(env) + }) +} + +func (c *Comp) invalidBinaryExpr(node *ast.BinaryExpr, x *Expr, y *Expr) *Expr { + return c.badBinaryExpr("invalid", node, x, y) +} + +func (c *Comp) unimplementedBinaryExpr(node *ast.BinaryExpr, x *Expr, y *Expr) *Expr { + return c.badBinaryExpr("unimplemented", node, x, y) +} + +func (c *Comp) badBinaryExpr(reason string, node *ast.BinaryExpr, x *Expr, y *Expr) *Expr { + opstr := mt.String(node.Op) + var xstr, ystr string + if x.Const() { + xstr = x.String() + " " + } + if y.Const() { + ystr = y.String() + " " + } + c.Errorf("%s binary operation %s between %s<%v> and %s<%v>: %v %s %v", + reason, opstr, xstr, x.Type, ystr, y.Type, node.X, opstr, node.Y) + return nil +} + +// convert x and y to the same single-valued expression type. needed to convert untyped constants to regular Go types +func (c *Comp) toSameFuncType(node ast.Expr, xe *Expr, ye *Expr) { + xe.CheckX1() + ye.CheckX1() + xconst, yconst := xe.Const(), ye.Const() + if yconst { + if xconst { + c.constsToSameType(node, xe, ye) + xe.WithFun() + ye.WithFun() + } else { + ye.ConstTo(xe.Type) + } + } else if xconst { + xe.ConstTo(ye.Type) + } else if xe.Type.ReflectType() != ye.Type.ReflectType() { + c.mismatchedTypes(node, xe, ye) + } +} + +func (c *Comp) constsToSameType(node ast.Expr, xe *Expr, ye *Expr) { + x, y := xe.Value, ye.Value + if x == nil { + if y == nil { + return + } else { + switch node := node.(type) { + case *ast.BinaryExpr: + c.invalidBinaryExpr(node, xe, ye) + default: + c.Errorf("invalid operation between %v <%v> and %v <%v>: %v", x, xe.Type, y, ye.Type, node) + } + } + } + xu, yu := xe.Untyped(), ye.Untyped() + if xu && yu { + c.Errorf("internal error, operation between untyped constants %v and %v not optimized away: %v", + xe.Lit, ye.Lit, node) + } else if xu { + xe.ConstTo(ye.Type) + } else if yu { + ye.ConstTo(xe.Type) + } else if xe.Type.ReflectType() != ye.Type.ReflectType() { + c.mismatchedTypes(node, xe, ye) + } +} + +func (c *Comp) mismatchedTypes(node ast.Expr, xe *Expr, ye *Expr) { + switch node := node.(type) { + case *ast.BinaryExpr: + c.badBinaryExpr("mismatched types in", node, xe, ye) + default: + c.Errorf("mismatched types %v and %v in: %v", xe.Type, ye.Type, node) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary_eqlneq.go b/vendor/github.com/cosmos72/gomacro/fast/binary_eqlneq.go new file mode 100644 index 0000000..1d5a3e9 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/binary_eqlneq.go @@ -0,0 +1,1185 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binary_eql.go + * + * Created on Apr 02, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) Eql(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + if xe.IsNil { + if ye.IsNil { + return c.invalidBinaryExpr(node, xe, ye) + } else { + return c.eqlneqNil(node, xe, ye) + } + } else if ye.IsNil { + return c.eqlneqNil(node, xe, ye) + } + + if !xe.Type.Comparable() || !xe.Type.Comparable() { + return c.invalidBinaryExpr(node, xe, ye) + } + + xc, yc := xe.Const(), ye.Const() + if xe.Type.Kind() != r.Interface && ye.Type.Kind() != r.Interface { + c.toSameFuncType(node, xe, ye) + } + + k := xe.Type.Kind() + yk := ye.Type.Kind() + + var fun func(env *Env) bool + if k != yk { + + } else if xc == yc { + x, y := xe.Fun, ye.Fun + switch k { + case r.Bool: + { + x := x.(func(*Env) bool) + y := y.(func(*Env) bool) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := y.(func(*Env) complex64) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := y.(func(*Env) complex128) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + + case r.String: + { + x := x.(func(*Env) string) + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x(env) == y(env) } + + } + + } + + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + if k == r.Bool && yv.Bool() { + return xe + } + switch k { + case r.Bool: + + { + x := x.(func(*Env) bool) + y := yv.Bool() + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Int: + + { + x := x.(func(*Env) int) + y := int(yv.Int()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(yv.Int()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(yv.Int()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(yv.Int()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := yv.Int() + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(yv.Uint()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(yv.Uint()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(yv.Uint()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(yv.Uint()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := yv.Uint() + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(yv.Uint()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Float32: + + { + x := x.(func(*Env) float32) + y := + + float32(yv.Float()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Float64: + + { + x := x.(func(*Env) float64) + y := yv.Float() + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Complex64: + + { + x := x.(func(*Env) complex64) + y := + + complex64(yv.Complex()) + fun = func(env *Env) bool { return x(env) == y } + + } + case r.Complex128: + + { + x := x.(func(*Env) complex128) + y := yv.Complex() + fun = func(env *Env) bool { return x(env) == y } + + } + case r.String: + + { + x := x.(func(*Env) string) + y := yv.String() + fun = func(env *Env) bool { return x(env) == y } + + } + } + + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + if k == r.Bool && xv.Bool() { + return ye + } + switch k { + case r.Bool: + + { + x := xv.Bool() + + y := y.(func(*Env) bool) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Int: + + { + x := int( + + xv.Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Int8: + + { + x := int8( + + xv.Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Int16: + + { + x := int16( + + xv.Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Int32: + + { + x := int32( + + xv.Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Int64: + + { + x := xv.Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Uint: + + { + x := uint( + + xv.Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Uint8: + + { + x := uint8( + + xv.Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Uint16: + + { + x := uint16( + + xv.Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Uint32: + + { + x := uint32( + + xv.Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Uint64: + + { + x := xv.Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Uintptr: + + { + x := uintptr( + + xv.Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Float32: + + { + x := + + float32( + + xv.Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Float64: + + { + x := xv.Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Complex64: + + { + x := + + complex64( + + xv.Complex()) + + y := y.(func(*Env) complex64) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.Complex128: + + { + x := xv.Complex() + + y := y.(func(*Env) complex128) + fun = func(env *Env) bool { return x == y(env) } + + } + case r.String: + + { + x := xv.String() + + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x == y(env) } + + } + } + + } + if fun != nil { + return c.exprBool(fun) + } + return c.eqlneqMisc(node, xe, ye) +} +func (c *Comp) Neq(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + if xe.IsNil { + if ye.IsNil { + return c.invalidBinaryExpr(node, xe, ye) + } else { + return c.eqlneqNil(node, xe, ye) + } + } else if ye.IsNil { + return c.eqlneqNil(node, xe, ye) + } + + if !xe.Type.Comparable() || !xe.Type.Comparable() { + return c.invalidBinaryExpr(node, xe, ye) + } + + xc, yc := xe.Const(), ye.Const() + if xe.Type.Kind() != r.Interface && ye.Type.Kind() != r.Interface { + c.toSameFuncType(node, xe, ye) + } + + k := xe.Type.Kind() + yk := ye.Type.Kind() + + var fun func(env *Env) bool + if k != yk { + + } else if xc == yc { + x, y := xe.Fun, ye.Fun + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := y.(func(*Env) complex64) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := y.(func(*Env) complex128) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + + case r.String: + { + x := x.(func(*Env) string) + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x(env) != y(env) } + + } + + } + + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + if k == r.Bool && !yv.Bool() { + return xe + } + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(yv.Int()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(yv.Int()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(yv.Int()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(yv.Int()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := yv.Int() + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(yv.Uint()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(yv.Uint()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(yv.Uint()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(yv.Uint()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := yv.Uint() + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(yv.Uint()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Float32: + + { + x := x.(func(*Env) float32) + y := + + float32(yv.Float()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Float64: + + { + x := x.(func(*Env) float64) + y := yv.Float() + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Complex64: + + { + x := x.(func(*Env) complex64) + y := + + complex64(yv.Complex()) + fun = func(env *Env) bool { return x(env) != y } + + } + case r.Complex128: + + { + x := x.(func(*Env) complex128) + y := yv.Complex() + fun = func(env *Env) bool { return x(env) != y } + + } + case r.String: + + { + x := x.(func(*Env) string) + y := yv.String() + fun = func(env *Env) bool { return x(env) != y } + + } + } + + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + if k == r.Bool && !xv.Bool() { + return ye + } + switch k { + case r.Int: + + { + x := int( + + xv.Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Int8: + + { + x := int8( + + xv.Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Int16: + + { + x := int16( + + xv.Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Int32: + + { + x := int32( + + xv.Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Int64: + + { + x := xv.Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Uint: + + { + x := uint( + + xv.Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Uint8: + + { + x := uint8( + + xv.Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Uint16: + + { + x := uint16( + + xv.Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Uint32: + + { + x := uint32( + + xv.Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Uint64: + + { + x := xv.Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Uintptr: + + { + x := uintptr( + + xv.Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Float32: + + { + x := + + float32( + + xv.Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Float64: + + { + x := xv.Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Complex64: + + { + x := + + complex64( + + xv.Complex()) + + y := y.(func(*Env) complex64) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.Complex128: + + { + x := xv.Complex() + + y := y.(func(*Env) complex128) + fun = func(env *Env) bool { return x != y(env) } + + } + case r.String: + + { + x := xv.String() + + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x != y(env) } + + } + } + + } + if fun != nil { + return c.exprBool(fun) + } + return c.eqlneqMisc(node, xe, ye) +} +func (c *Comp) eqlneqMisc(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + var fun func(*Env) bool + + if xe.Type.Kind() == r.Interface || ye.Type.Kind() == r.Interface { + + xe.CheckX1() + ye.CheckX1() + } + + switch x := xe.Fun.(type) { + case func(*Env) (r.Value, []r.Value): + switch y := ye.Fun.(type) { + case func(*Env) (r.Value, []r.Value): + if node.Op == token.EQL { + fun = func(env *Env) bool { + v1, _ := x(env) + v2, _ := y(env) + if v1 == Nil || v2 == Nil { + return v1 == v2 + } else { + return v1.Interface() == v2.Interface() + } + + } + } else { + fun = func(env *Env) bool { + v1, _ := x(env) + v2, _ := y(env) + if v1 == Nil || v2 == Nil { + return v1 != v2 + } else { + return v1.Interface() != v2.Interface() + } + + } + } + + default: + y1 := ye.AsX1() + if node.Op == token.EQL { + fun = func(env *Env) bool { + v1, _ := x(env) + v2 := y1(env) + if v1 == Nil || v2 == Nil { + return v1 == v2 + } else { + return v1.Interface() == v2.Interface() + } + + } + } else { + fun = func(env *Env) bool { + v1, _ := x(env) + v2 := y1(env) + if v1 == Nil || v2 == Nil { + return v1 != v2 + } else { + return v1.Interface() != v2.Interface() + } + + } + } + + } + default: + x1 := xe.AsX1() + + switch y := ye.Fun.(type) { + case func(*Env) (r.Value, []r.Value): + if node.Op == token.EQL { + fun = func(env *Env) bool { + v1 := x1(env) + v2, _ := y(env) + if v1 == Nil || v2 == Nil { + return v1 == v2 + } else { + return v1.Interface() == v2.Interface() + } + + } + } else { + fun = func(env *Env) bool { + v1 := x1(env) + v2, _ := y(env) + if v1 == Nil || v2 == Nil { + return v1 != v2 + } else { + return v1.Interface() != v2.Interface() + } + + } + } + + default: + y1 := ye.AsX1() + if node.Op == token.EQL { + fun = func(env *Env) bool { + v1 := x1(env) + v2 := y1(env) + if v1 == Nil || v2 == Nil { + return v1 == v2 + } else { + return v1.Interface() == v2.Interface() + } + + } + } else { + fun = func(env *Env) bool { + v1 := x1(env) + v2 := y1(env) + if v1 == Nil || v2 == Nil { + return v1 != v2 + } else { + return v1.Interface() != v2.Interface() + } + + } + } + + } + } + return c.exprBool(fun) +} +func (c *Comp) eqlneqNil(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + var e *Expr + if ye.IsNil { + e = xe + } else { + e = ye + } + + if !IsNillableKind(e.Type.Kind()) { + return c.invalidBinaryExpr(node, xe, ye) + } + + var fun func(env *Env) bool + if f, ok := e.Fun.(func(env *Env) (r.Value, []r.Value)); ok { + e.CheckX1() + if node.Op == token.EQL { + fun = func(env *Env) bool { + v, _ := f(env) + vnil := v == Nil || IsNillableKind(v.Kind()) && v.IsNil() + return vnil + } + } else { + fun = func(env *Env) bool { + v, _ := f(env) + vnil := v == Nil || IsNillableKind(v.Kind()) && v.IsNil() + return !vnil + } + } + + } else { + f := e.AsX1() + if node.Op == token.EQL { + fun = func(env *Env) bool { + v := f(env) + vnil := v == Nil || IsNillableKind(v.Kind()) && v.IsNil() + return vnil + } + } else { + fun = func(env *Env) bool { + v := f(env) + vnil := v == Nil || IsNillableKind(v.Kind()) && v.IsNil() + return !vnil + } + } + + } + return c.exprBool(fun) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary_eqlneq.gomacro b/vendor/github.com/cosmos72/gomacro/fast/binary_eqlneq.gomacro new file mode 100644 index 0000000..d77abbd --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/binary_eqlneq.gomacro @@ -0,0 +1,432 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binary_eql.go + * + * Created on Apr 02, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +:import ( + "fmt" + "go/ast" + "go/token" + r "reflect" +) + + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makekind(typ ast.Node) ast.Node { + t := EvalType(typ) + + // go/ast.SelectorExpr requires the foo in r.foo to be an *ast.Ident, cannot unquote there + kind := ~"{r . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(t.Name())} + return kind +} + + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +:macro eqlneq(opnode, xconst, yconst, typ ast.Node) ast.Node { + + // the return type of Eval() and EvalType() varies. better check early. + xc, yc := Eval(xconst).(bool), Eval(yconst).(bool) + optoken := Eval(opnode).(token.Token) + + if xc == yc { + var expr *ast.BinaryExpr = ~"{x(env) && y(env)} // quasiquote, we modify it destructively + expr.Op = optoken + + return ~"{ + x := x.(func(*Env) ~,typ) + y := y.(func(*Env) ~,typ) + fun = func(env *Env) bool { + return ~,expr + } + } + } else if yc { + var expr *ast.BinaryExpr = ~"{x(env) && y} // quasiquote, we modify it destructively + expr.Op = optoken + + yconv := convertvalue1(typ, ~'yv) + return ~"{ + x := x.(func(*Env) ~,typ) + y := ~,yconv + fun = func(env *Env) bool { + return ~,expr + } + } + } else { + var expr *ast.BinaryExpr = ~"{x && y(env)} // quasiquote, we modify it destructively + expr.Op = optoken + + xconv := convertvalue1(typ, ~'xv) + return ~"{ + x := ~,xconv + y := y.(func(*Env) ~,typ) + fun = func(env *Env) bool { + return ~,expr + } + } + } +} + +:macro eqlneqs(opnode, xconst, yconst, types ast.Node) ast.Node { + typelist := types.(*ast.BlockStmt).List + caselist := make([]ast.Stmt, 0, len(typelist)) + for _, typ := range typelist { + t := EvalType(typ) + if t.Kind() == r.Int { + // shortcut for all int* types + for _, typ := range []ast.Expr{~'int, ~'int8, ~'int16, ~'int32, ~'int64} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: eqlneq; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + } + } else if t.Kind() == r.Uint { + // shortcut for all uint* types + for _, typ := range []ast.Expr{~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: eqlneq; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + } + } else { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: eqlneq; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + } + } + return ~"{ switch k { ~,@caselist } } +} + +func (c *Comp) Eql(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + if xe.IsNil { + if ye.IsNil { + return c.invalidBinaryExpr(node, xe, ye) + } else { + // nil == expr + return c.eqlneqNil(node, xe, ye) + } + } else if ye.IsNil { + // expr == nil + return c.eqlneqNil(node, xe, ye) + } + if !xe.Type.Comparable() || !xe.Type.Comparable() { + return c.invalidBinaryExpr(node, xe, ye) + } + xc, yc := xe.Const(), ye.Const() + if xe.Type.Kind() != r.Interface && ye.Type.Kind() != r.Interface { + // comparison between different types is allowed only if at least one is an interface + c.toSameFuncType(node, xe, ye) + } + k := xe.Type.Kind() + yk := ye.Type.Kind() // may differ from k + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun func(env *Env) bool + if k != yk { + // call c.eqlneqMisc() below + } else if xc == yc { + x, y := xe.Fun, ye.Fun + {eqlneqs; token.EQL; false; false; { bool; int; uint; float32; float64; complex64; complex128; string } } + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + if k == r.Bool && yv.Bool() { + // xe == true is the same as xe + return xe + } + {eqlneqs; token.EQL; false; true; { bool; int; uint; float32; float64; complex64; complex128; string } } + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + if k == r.Bool && xv.Bool() { + // true == ye is the same as ye + return ye + } + {eqlneqs; token.EQL; true; false; { bool; int; uint; float32; float64; complex64; complex128; string } } + } + if fun != nil { + return c.exprBool(fun) + } + return c.eqlneqMisc(node, xe, ye) +} + +func (c *Comp) Neq(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + if xe.IsNil { + if ye.IsNil { + return c.invalidBinaryExpr(node, xe, ye) + } else { + // nil == expr + return c.eqlneqNil(node, xe, ye) + } + } else if ye.IsNil { + // expr == nil + return c.eqlneqNil(node, xe, ye) + } + if !xe.Type.Comparable() || !xe.Type.Comparable() { + return c.invalidBinaryExpr(node, xe, ye) + } + xc, yc := xe.Const(), ye.Const() + if xe.Type.Kind() != r.Interface && ye.Type.Kind() != r.Interface { + // comparison between different types is allowed only if at least one is an interface + c.toSameFuncType(node, xe, ye) + } + k := xe.Type.Kind() + yk := ye.Type.Kind() // may differ from k + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun func(env *Env) bool + if k != yk { + // call c.eqlneqMisc() below + } else if xc == yc { + x, y := xe.Fun, ye.Fun + {eqlneqs; token.NEQ; false; false; { int; uint; float32; float64; complex64; complex128; string } } + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + if k == r.Bool && !yv.Bool() { + // xe != false is the same as xe + return xe + } + {eqlneqs; token.NEQ; false; true; { int; uint; float32; float64; complex64; complex128; string } } + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + if k == r.Bool && !xv.Bool() { + // false != ye is the same as ye + return ye + } + {eqlneqs; token.NEQ; true; false; { int; uint; float32; float64; complex64; complex128; string } } + } + if fun != nil { + return c.exprBool(fun) + } + return c.eqlneqMisc(node, xe, ye) +} + +// compare arrays, interfaces, pointers, structs +func (c *Comp) eqlneqMisc(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + var fun func(*Env) bool + + if xe.Type.Kind() == r.Interface || ye.Type.Kind() == r.Interface { + // not checked yet that xe and ye return at least one value... check now + xe.CheckX1() + ye.CheckX1() + } + + switch x := xe.Fun.(type) { + case func(*Env) (r.Value, []r.Value): + switch y := ye.Fun.(type) { + case func(*Env) (r.Value, []r.Value): + if node.Op == token.EQL { + fun = func(env *Env) bool { + v1, _ := x(env) + v2, _ := y(env) + if v1 == Nil || v2 == Nil { + return v1 == v2 + } else { + return v1.Interface() == v2.Interface() + } + } + } else { + fun = func(env *Env) bool { + v1, _ := x(env) + v2, _ := y(env) + if v1 == Nil || v2 == Nil { + return v1 != v2 + } else { + return v1.Interface() != v2.Interface() + } + } + } + default: + y1 := ye.AsX1() + if node.Op == token.EQL { + fun = func(env *Env) bool { + v1, _ := x(env) + v2 := y1(env) + if v1 == Nil || v2 == Nil { + return v1 == v2 + } else { + return v1.Interface() == v2.Interface() + } + } + } else { + fun = func(env *Env) bool { + v1, _ := x(env) + v2 := y1(env) + if v1 == Nil || v2 == Nil { + return v1 != v2 + } else { + return v1.Interface() != v2.Interface() + } + } + } + } + default: + x1 := xe.AsX1() + + switch y := ye.Fun.(type) { + case func(*Env) (r.Value, []r.Value): + if node.Op == token.EQL { + fun = func(env *Env) bool { + v1 := x1(env) + v2, _ := y(env) + if v1 == Nil || v2 == Nil { + return v1 == v2 + } else { + return v1.Interface() == v2.Interface() + } + } + } else { + fun = func(env *Env) bool { + v1 := x1(env) + v2, _ := y(env) + if v1 == Nil || v2 == Nil { + return v1 != v2 + } else { + return v1.Interface() != v2.Interface() + } + } + } + default: + y1 := ye.AsX1() + if node.Op == token.EQL { + fun = func(env *Env) bool { + v1 := x1(env) + v2 := y1(env) + if v1 == Nil || v2 == Nil { + return v1 == v2 + } else { + return v1.Interface() == v2.Interface() + } + } + } else { + fun = func(env *Env) bool { + v1 := x1(env) + v2 := y1(env) + if v1 == Nil || v2 == Nil { + return v1 != v2 + } else { + return v1.Interface() != v2.Interface() + } + } + } + } + } + return c.exprBool(fun) +} + +func (c *Comp) eqlneqNil(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + var e *Expr + if ye.IsNil { + e = xe + } else { + e = ye + } + // e can be a constant... for example nil == nil + if !IsNillableKind(e.Type.Kind()) { + return c.invalidBinaryExpr(node, xe, ye) + } + + var fun func(env *Env) bool + if f, ok := e.Fun.(func(env *Env) (r.Value, []r.Value)); ok { + e.CheckX1() // to warn or error as appropriate + if node.Op == token.EQL { + fun = func(env *Env) bool { + v, _ := f(env) + vnil := v == Nil || IsNillableKind(v.Kind()) && v.IsNil() + return vnil + } + } else { + fun = func(env *Env) bool { + v, _ := f(env) + vnil := v == Nil || IsNillableKind(v.Kind()) && v.IsNil() + return !vnil + } + } + } else { + f := e.AsX1() + if node.Op == token.EQL { + fun = func(env *Env) bool { + v := f(env) + vnil := v == Nil || IsNillableKind(v.Kind()) && v.IsNil() + return vnil + } + } else { + fun = func(env *Env) bool { + v := f(env) + vnil := v == Nil || IsNillableKind(v.Kind()) && v.IsNil() + return !vnil + } + } + } + return c.exprBool(fun) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary_ops.go b/vendor/github.com/cosmos72/gomacro/fast/binary_ops.go new file mode 100644 index 0000000..679dc39 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/binary_ops.go @@ -0,0 +1,5132 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binary_ops.go + * + * Created on Apr 12, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + r "reflect" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) Add(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x(env) + y(env) + } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x(env) + y(env) + } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x(env) + y(env) + } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x(env) + y(env) + } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x(env) + y(env) + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) + y(env) + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) + y(env) + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) + y(env) + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) + y(env) + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) + y(env) + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) + y(env) + } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) float32 { + return x(env) + y(env) + } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) float64 { + return x(env) + y(env) + } + + } + + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := y.(func(*Env) complex64) + fun = func(env *Env) complex64 { + return x(env) + y(env) + } + + } + + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := y.(func(*Env) complex128) + fun = func(env *Env) complex128 { + return x(env) + y(env) + } + + } + + case r.String: + { + x := x.(func(*Env) string) + y := y.(func(*Env) string) + fun = func(env *Env) string { + return x(env) + y(env) + } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) || y == "" { + return xe + } + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(r.ValueOf(y).Int()) + fun = func(env *Env) int { + return x(env) + y + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(r.ValueOf(y).Int()) + fun = func(env *Env) int8 { + return x(env) + y + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(r.ValueOf(y).Int()) + fun = func(env *Env) int16 { + return x(env) + y + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(r.ValueOf(y).Int()) + fun = func(env *Env) int32 { + return x(env) + y + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := r.ValueOf(y).Int() + fun = func(env *Env) int64 { + return x(env) + y + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(r.ValueOf(y).Uint()) + fun = func(env *Env) uint { + return x(env) + y + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(r.ValueOf(y).Uint()) + fun = func(env *Env) uint8 { + return x(env) + y + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(r.ValueOf(y).Uint()) + fun = func(env *Env) uint16 { + return x(env) + y + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(r.ValueOf(y).Uint()) + fun = func(env *Env) uint32 { + return x(env) + y + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := r.ValueOf(y).Uint() + fun = func(env *Env) uint64 { + return x(env) + y + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(r.ValueOf(y).Uint()) + fun = func(env *Env) uintptr { + return x(env) + y + } + + } + case r.Float32: + { + x := x.(func(*Env) float32) + y := float32(r.ValueOf(y).Float()) + fun = func(env *Env) float32 { + return x(env) + y + } + + } + case r.Float64: + { + x := x.(func(*Env) float64) + y := r.ValueOf(y).Float() + fun = func(env *Env) float64 { + return x(env) + y + } + + } + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := complex64(r.ValueOf(y).Complex()) + fun = func(env *Env) complex64 { + return x(env) + y + } + + } + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := r.ValueOf(y).Complex() + fun = func(env *Env) complex128 { + return x(env) + y + } + + } + case r.String: + { + x := x.(func(*Env) string) + y := r.ValueOf(y).String() + fun = func(env *Env) string { + return x(env) + y + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + x := xe.Value + y := ye.Fun + if isLiteralNumber(x, 0) || x == "" { + return ye + } + + switch k { + case r.Int: + + { + x := int( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x + y(env) + } + + } + case r.Int8: + + { + x := int8( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x + y(env) + } + + } + case r.Int16: + + { + x := int16( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x + y(env) + } + + } + case r.Int32: + + { + x := int32( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x + y(env) + } + + } + case r.Int64: + + { + x := r.ValueOf(x).Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x + y(env) + } + + } + case r.Uint: + + { + x := uint( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x + y(env) + } + + } + case r.Uint8: + + { + x := uint8( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x + y(env) + } + + } + case r.Uint16: + + { + x := uint16( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x + y(env) + } + + } + case r.Uint32: + + { + x := uint32( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x + y(env) + } + + } + case r.Uint64: + + { + x := r.ValueOf(x).Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x + y(env) + } + + } + case r.Uintptr: + + { + x := uintptr( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x + y(env) + } + + } + case r.Float32: + + { + x := float32( + + r.ValueOf(x).Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) float32 { + return x + y(env) + } + + } + case r.Float64: + + { + x := r.ValueOf(x).Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) float64 { + return x + y(env) + } + + } + case r.Complex64: + + { + x := complex64( + + r.ValueOf(x).Complex()) + + y := y.(func(*Env) complex64) + fun = func(env *Env) complex64 { + return x + y(env) + } + + } + case r.Complex128: + + { + x := r.ValueOf(x).Complex() + + y := y.(func(*Env) complex128) + fun = func(env *Env) complex128 { + return x + y(env) + } + + } + case r.String: + + { + x := r.ValueOf(x).String() + + y := y.(func(*Env) string) + fun = func(env *Env) string { + return x + y(env) + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) Sub(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x(env) - y(env) + } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x(env) - y(env) + } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x(env) - y(env) + } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x(env) - y(env) + } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x(env) - y(env) + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) - y(env) + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) - y(env) + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) - y(env) + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) - y(env) + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) - y(env) + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) - y(env) + } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) float32 { + return x(env) - y(env) + } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) float64 { + return x(env) - y(env) + } + + } + + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := y.(func(*Env) complex64) + fun = func(env *Env) complex64 { + return x(env) - y(env) + } + + } + + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := y.(func(*Env) complex128) + fun = func(env *Env) complex128 { + return x(env) - y(env) + } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return xe + } + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(r.ValueOf(y).Int()) + fun = func(env *Env) int { + return x(env) - y + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(r.ValueOf(y).Int()) + fun = func(env *Env) int8 { + return x(env) - y + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(r.ValueOf(y).Int()) + fun = func(env *Env) int16 { + return x(env) - y + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(r.ValueOf(y).Int()) + fun = func(env *Env) int32 { + return x(env) - y + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := r.ValueOf(y).Int() + fun = func(env *Env) int64 { + return x(env) - y + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(r.ValueOf(y).Uint()) + fun = func(env *Env) uint { + return x(env) - y + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(r.ValueOf(y).Uint()) + fun = func(env *Env) uint8 { + return x(env) - y + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(r.ValueOf(y).Uint()) + fun = func(env *Env) uint16 { + return x(env) - y + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(r.ValueOf(y).Uint()) + fun = func(env *Env) uint32 { + return x(env) - y + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := r.ValueOf(y).Uint() + fun = func(env *Env) uint64 { + return x(env) - y + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(r.ValueOf(y).Uint()) + fun = func(env *Env) uintptr { + return x(env) - y + } + + } + case r.Float32: + { + x := x.(func(*Env) float32) + y := float32(r.ValueOf(y).Float()) + fun = func(env *Env) float32 { + return x(env) - y + } + + } + case r.Float64: + { + x := x.(func(*Env) float64) + y := r.ValueOf(y).Float() + fun = func(env *Env) float64 { + return x(env) - y + } + + } + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := complex64(r.ValueOf(y).Complex()) + fun = func(env *Env) complex64 { + return x(env) - y + } + + } + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := r.ValueOf(y).Complex() + fun = func(env *Env) complex128 { + return x(env) - y + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + x := xe.Value + y := ye.Fun + + switch k { + case r.Int: + + { + x := int( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x - y(env) + } + + } + case r.Int8: + + { + x := int8( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x - y(env) + } + + } + case r.Int16: + + { + x := int16( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x - y(env) + } + + } + case r.Int32: + + { + x := int32( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x - y(env) + } + + } + case r.Int64: + + { + x := r.ValueOf(x).Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x - y(env) + } + + } + case r.Uint: + + { + x := uint( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x - y(env) + } + + } + case r.Uint8: + + { + x := uint8( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x - y(env) + } + + } + case r.Uint16: + + { + x := uint16( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x - y(env) + } + + } + case r.Uint32: + + { + x := uint32( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x - y(env) + } + + } + case r.Uint64: + + { + x := r.ValueOf(x).Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x - y(env) + } + + } + case r.Uintptr: + + { + x := uintptr( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x - y(env) + } + + } + case r.Float32: + + { + x := float32( + + r.ValueOf(x).Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) float32 { + return x - y(env) + } + + } + case r.Float64: + + { + x := r.ValueOf(x).Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) float64 { + return x - y(env) + } + + } + case r.Complex64: + + { + x := complex64( + + r.ValueOf(x).Complex()) + + y := y.(func(*Env) complex64) + fun = func(env *Env) complex64 { + return x - y(env) + } + + } + case r.Complex128: + + { + x := r.ValueOf(x).Complex() + + y := y.(func(*Env) complex128) + fun = func(env *Env) complex128 { + return x - y(env) + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) Mul(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x(env) * y(env) + } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x(env) * y(env) + } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x(env) * y(env) + } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x(env) * y(env) + } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x(env) * y(env) + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) * y(env) + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) * y(env) + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) * y(env) + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) * y(env) + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) * y(env) + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) * y(env) + } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) float32 { + return x(env) * y(env) + } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) float64 { + return x(env) * y(env) + } + + } + + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := y.(func(*Env) complex64) + fun = func(env *Env) complex64 { + return x(env) * y(env) + } + + } + + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := y.(func(*Env) complex128) + fun = func(env *Env) complex128 { + return x(env) * y(env) + } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + if ze := c.mulPow2(node, xe, ye); ze != nil { + return ze + } + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(r.ValueOf(y).Int()) + fun = func(env *Env) int { + return x(env) * y + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(r.ValueOf(y).Int()) + fun = func(env *Env) int8 { + return x(env) * y + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(r.ValueOf(y).Int()) + fun = func(env *Env) int16 { + return x(env) * y + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(r.ValueOf(y).Int()) + fun = func(env *Env) int32 { + return x(env) * y + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := r.ValueOf(y).Int() + fun = func(env *Env) int64 { + return x(env) * y + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(r.ValueOf(y).Uint()) + fun = func(env *Env) uint { + return x(env) * y + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(r.ValueOf(y).Uint()) + fun = func(env *Env) uint8 { + return x(env) * y + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(r.ValueOf(y).Uint()) + fun = func(env *Env) uint16 { + return x(env) * y + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(r.ValueOf(y).Uint()) + fun = func(env *Env) uint32 { + return x(env) * y + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := r.ValueOf(y).Uint() + fun = func(env *Env) uint64 { + return x(env) * y + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(r.ValueOf(y).Uint()) + fun = func(env *Env) uintptr { + return x(env) * y + } + + } + case r.Float32: + { + x := x.(func(*Env) float32) + y := float32(r.ValueOf(y).Float()) + fun = func(env *Env) float32 { + return x(env) * y + } + + } + case r.Float64: + { + x := x.(func(*Env) float64) + y := r.ValueOf(y).Float() + fun = func(env *Env) float64 { + return x(env) * y + } + + } + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := complex64(r.ValueOf(y).Complex()) + fun = func(env *Env) complex64 { + return x(env) * y + } + + } + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := r.ValueOf(y).Complex() + fun = func(env *Env) complex128 { + return x(env) * y + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + x := xe.Value + y := ye.Fun + if ze := c.mulPow2(node, xe, ye); ze != nil { + return ze + } + + switch k { + case r.Int: + + { + x := int( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x * y(env) + } + + } + case r.Int8: + + { + x := int8( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x * y(env) + } + + } + case r.Int16: + + { + x := int16( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x * y(env) + } + + } + case r.Int32: + + { + x := int32( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x * y(env) + } + + } + case r.Int64: + + { + x := r.ValueOf(x).Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x * y(env) + } + + } + case r.Uint: + + { + x := uint( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x * y(env) + } + + } + case r.Uint8: + + { + x := uint8( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x * y(env) + } + + } + case r.Uint16: + + { + x := uint16( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x * y(env) + } + + } + case r.Uint32: + + { + x := uint32( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x * y(env) + } + + } + case r.Uint64: + + { + x := r.ValueOf(x).Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x * y(env) + } + + } + case r.Uintptr: + + { + x := uintptr( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x * y(env) + } + + } + case r.Float32: + + { + x := float32( + + r.ValueOf(x).Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) float32 { + return x * y(env) + } + + } + case r.Float64: + + { + x := r.ValueOf(x).Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) float64 { + return x * y(env) + } + + } + case r.Complex64: + + { + x := complex64( + + r.ValueOf(x).Complex()) + + y := y.(func(*Env) complex64) + fun = func(env *Env) complex64 { + return x * y(env) + } + + } + case r.Complex128: + + { + x := r.ValueOf(x).Complex() + + y := y.(func(*Env) complex128) + fun = func(env *Env) complex128 { + return x * y(env) + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) Quo(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x(env) / y(env) + } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x(env) / y(env) + } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x(env) / y(env) + } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x(env) / y(env) + } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x(env) / y(env) + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) / y(env) + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) / y(env) + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) / y(env) + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) / y(env) + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) / y(env) + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) / y(env) + } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) float32 { + return x(env) / y(env) + } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) float64 { + return x(env) / y(env) + } + + } + + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := y.(func(*Env) complex64) + fun = func(env *Env) complex64 { + return x(env) / y(env) + } + + } + + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := y.(func(*Env) complex128) + fun = func(env *Env) complex128 { + return x(env) / y(env) + } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + c.Errorf("division by zero") + return nil + } else if ze := c.quoPow2(node, xe, ye); ze != nil { + return ze + } + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(r.ValueOf(y).Int()) + fun = func(env *Env) int { + return x(env) / y + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(r.ValueOf(y).Int()) + fun = func(env *Env) int8 { + return x(env) / y + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(r.ValueOf(y).Int()) + fun = func(env *Env) int16 { + return x(env) / y + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(r.ValueOf(y).Int()) + fun = func(env *Env) int32 { + return x(env) / y + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := r.ValueOf(y).Int() + fun = func(env *Env) int64 { + return x(env) / y + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(r.ValueOf(y).Uint()) + fun = func(env *Env) uint { + return x(env) / y + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(r.ValueOf(y).Uint()) + fun = func(env *Env) uint8 { + return x(env) / y + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(r.ValueOf(y).Uint()) + fun = func(env *Env) uint16 { + return x(env) / y + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(r.ValueOf(y).Uint()) + fun = func(env *Env) uint32 { + return x(env) / y + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := r.ValueOf(y).Uint() + fun = func(env *Env) uint64 { + return x(env) / y + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(r.ValueOf(y).Uint()) + fun = func(env *Env) uintptr { + return x(env) / y + } + + } + case r.Float32: + { + x := x.(func(*Env) float32) + y := float32(r.ValueOf(y).Float()) + fun = func(env *Env) float32 { + return x(env) / y + } + + } + case r.Float64: + { + x := x.(func(*Env) float64) + y := r.ValueOf(y).Float() + fun = func(env *Env) float64 { + return x(env) / y + } + + } + case r.Complex64: + { + x := x.(func(*Env) complex64) + y := complex64(r.ValueOf(y).Complex()) + fun = func(env *Env) complex64 { + return x(env) / y + } + + } + case r.Complex128: + { + x := x.(func(*Env) complex128) + y := r.ValueOf(y).Complex() + fun = func(env *Env) complex128 { + return x(env) / y + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + x := xe.Value + y := ye.Fun + + switch k { + case r.Int: + + { + x := int( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x / y(env) + } + + } + case r.Int8: + + { + x := int8( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x / y(env) + } + + } + case r.Int16: + + { + x := int16( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x / y(env) + } + + } + case r.Int32: + + { + x := int32( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x / y(env) + } + + } + case r.Int64: + + { + x := r.ValueOf(x).Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x / y(env) + } + + } + case r.Uint: + + { + x := uint( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x / y(env) + } + + } + case r.Uint8: + + { + x := uint8( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x / y(env) + } + + } + case r.Uint16: + + { + x := uint16( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x / y(env) + } + + } + case r.Uint32: + + { + x := uint32( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x / y(env) + } + + } + case r.Uint64: + + { + x := r.ValueOf(x).Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x / y(env) + } + + } + case r.Uintptr: + + { + x := uintptr( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x / y(env) + } + + } + case r.Float32: + + { + x := float32( + + r.ValueOf(x).Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) float32 { + return x / y(env) + } + + } + case r.Float64: + + { + x := r.ValueOf(x).Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) float64 { + return x / y(env) + } + + } + case r.Complex64: + + { + x := complex64( + + r.ValueOf(x).Complex()) + + y := y.(func(*Env) complex64) + fun = func(env *Env) complex64 { + return x / y(env) + } + + } + case r.Complex128: + + { + x := r.ValueOf(x).Complex() + + y := y.(func(*Env) complex128) + fun = func(env *Env) complex128 { + return x / y(env) + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) Rem(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x(env) % y(env) + } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x(env) % y(env) + } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x(env) % y(env) + } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x(env) % y(env) + } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x(env) % y(env) + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) % y(env) + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) % y(env) + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) % y(env) + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) % y(env) + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) % y(env) + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) % y(env) + } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + + if isLiteralNumber(y, 0) { + c.Errorf("division by zero") + return nil + } else if ze := c.remPow2(node, xe, ye); ze != nil { + return ze + } + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(r.ValueOf(y).Int()) + fun = func(env *Env) int { + return x(env) % y + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(r.ValueOf(y).Int()) + fun = func(env *Env) int8 { + return x(env) % y + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(r.ValueOf(y).Int()) + fun = func(env *Env) int16 { + return x(env) % y + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(r.ValueOf(y).Int()) + fun = func(env *Env) int32 { + return x(env) % y + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := r.ValueOf(y).Int() + fun = func(env *Env) int64 { + return x(env) % y + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(r.ValueOf(y).Uint()) + fun = func(env *Env) uint { + return x(env) % y + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(r.ValueOf(y).Uint()) + fun = func(env *Env) uint8 { + return x(env) % y + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(r.ValueOf(y).Uint()) + fun = func(env *Env) uint16 { + return x(env) % y + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(r.ValueOf(y).Uint()) + fun = func(env *Env) uint32 { + return x(env) % y + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := r.ValueOf(y).Uint() + fun = func(env *Env) uint64 { + return x(env) % y + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(r.ValueOf(y).Uint()) + fun = func(env *Env) uintptr { + return x(env) % y + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + x := xe.Value + y := ye.Fun + + switch k { + case r.Int: + + { + x := int( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x % y(env) + } + + } + case r.Int8: + + { + x := int8( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x % y(env) + } + + } + case r.Int16: + + { + x := int16( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x % y(env) + } + + } + case r.Int32: + + { + x := int32( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x % y(env) + } + + } + case r.Int64: + + { + x := r.ValueOf(x).Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x % y(env) + } + + } + case r.Uint: + + { + x := uint( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x % y(env) + } + + } + case r.Uint8: + + { + x := uint8( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x % y(env) + } + + } + case r.Uint16: + + { + x := uint16( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x % y(env) + } + + } + case r.Uint32: + + { + x := uint32( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x % y(env) + } + + } + case r.Uint64: + + { + x := r.ValueOf(x).Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x % y(env) + } + + } + case r.Uintptr: + + { + x := uintptr( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x % y(env) + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) mulPow2(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + + if xe.Const() == ye.Const() { + return nil + } + + if xe.Const() { + xe, ye = ye, xe + } + + if isLiteralNumber(ye.Value, 0) { + return c.exprZero(xe) + } else if isLiteralNumber(ye.Value, 1) { + return xe + } else if isLiteralNumber(ye.Value, -1) { + node1 := &ast.UnaryExpr{OpPos: node.OpPos, Op: token.SUB, X: node.X} + return c.UnaryMinus(node1, xe) + } + ypositive := true + yv := r.ValueOf(ye.Value) + var y uint64 + switch base.KindToCategory(yv.Kind()) { + case r.Int: + sy := yv.Int() + if sy < 0 { + ypositive = false + y = uint64(-sy) + } else { + y = uint64(sy) + } + + case r.Uint: + y = yv.Uint() + default: + return nil + } + if !isPowerOfTwo(y) { + return nil + } + + shift := integerLen(y) - 1 + x := xe.Fun + var fun I + switch xe.Type.Kind() { + case r.Int: + { + x := x.(func(*Env) int) + if ypositive { + switch shift { + case 1: + fun = func(env *Env) int { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) int { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) int { + return x(env) << 8 + } + + default: + fun = func(env *Env) int { + return x(env) << shift + } + + } + } else { + fun = func(env *Env) int { + return -(x(env) << shift) + } + } + + } + + case r.Int8: + { + x := x.(func(*Env) int8) + if ypositive { + switch shift { + case 1: + fun = func(env *Env) int8 { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) int8 { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) int8 { + return x(env) << 8 + } + + default: + fun = func(env *Env) int8 { + return x(env) << shift + } + + } + } else { + fun = func(env *Env) int8 { + return -(x(env) << shift) + } + } + + } + + case r.Int16: + { + x := x.(func(*Env) int16) + if ypositive { + switch shift { + case 1: + fun = func(env *Env) int16 { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) int16 { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) int16 { + return x(env) << 8 + } + + default: + fun = func(env *Env) int16 { + return x(env) << shift + } + + } + } else { + fun = func(env *Env) int16 { + return -(x(env) << shift) + } + } + + } + + case r.Int32: + { + x := x.(func(*Env) int32) + if ypositive { + switch shift { + case 1: + fun = func(env *Env) int32 { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) int32 { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) int32 { + return x(env) << 8 + } + + default: + fun = func(env *Env) int32 { + return x(env) << shift + } + + } + } else { + fun = func(env *Env) int32 { + return -(x(env) << shift) + } + } + + } + + case r.Int64: + { + x := x.(func(*Env) int64) + if ypositive { + switch shift { + case 1: + fun = func(env *Env) int64 { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) int64 { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) int64 { + return x(env) << 8 + } + + default: + fun = func(env *Env) int64 { + return x(env) << shift + } + + } + } else { + fun = func(env *Env) int64 { + return -(x(env) << shift) + } + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + switch shift { + case 1: + fun = func(env *Env) uint { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) uint { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) uint { + return x(env) << 8 + } + + default: + fun = func(env *Env) uint { + return x(env) << shift + } + + } + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + switch shift { + case 1: + fun = func(env *Env) uint8 { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) uint8 { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) uint8 { + return x(env) << 8 + } + + default: + fun = func(env *Env) uint8 { + return x(env) << shift + } + + } + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + switch shift { + case 1: + fun = func(env *Env) uint16 { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) uint16 { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) uint16 { + return x(env) << 8 + } + + default: + fun = func(env *Env) uint16 { + return x(env) << shift + } + + } + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + switch shift { + case 1: + fun = func(env *Env) uint32 { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) uint32 { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) uint32 { + return x(env) << 8 + } + + default: + fun = func(env *Env) uint32 { + return x(env) << shift + } + + } + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + switch shift { + case 1: + fun = func(env *Env) uint64 { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) uint64 { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) uint64 { + return x(env) << 8 + } + + default: + fun = func(env *Env) uint64 { + return x(env) << shift + } + + } + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + switch shift { + case 1: + fun = func(env *Env) uintptr { + return x(env) << 1 + } + + case 2: + fun = func(env *Env) uintptr { + return x(env) << 2 + } + + case 8: + fun = func(env *Env) uintptr { + return x(env) << 8 + } + + default: + fun = func(env *Env) uintptr { + return x(env) << shift + } + + } + } + + default: + return nil + } + return exprFun(xe.Type, fun) +} +func (c *Comp) quoPow2(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + + if xe.Const() || !ye.Const() { + return nil + } + + if isLiteralNumber(ye.Value, 0) { + c.Errorf("division by zero") + return nil + } else if isLiteralNumber(ye.Value, 1) { + return xe + } else if isLiteralNumber(ye.Value, -1) { + node1 := &ast.UnaryExpr{OpPos: node.OpPos, Op: token.SUB, X: node.X} + return c.UnaryMinus(node1, xe) + } + ypositive := true + yv := r.ValueOf(ye.Value) + var y uint64 + switch base.KindToCategory(yv.Kind()) { + case r.Int: + sy := yv.Int() + if sy < 0 { + ypositive = false + y = uint64(-sy) + } else { + y = uint64(sy) + } + + case r.Uint: + y = yv.Uint() + default: + return nil + } + if !isPowerOfTwo(y) { + return nil + } + + shift := integerLen(y) - 1 + x := xe.Fun + var fun I + switch xe.Type.Kind() { + case r.Int: + { + x := x.(func(*Env) int) + y_1 := + + int(y - 1) + if ypositive { + fun = func(env *Env) int { + n := x(env) + if n < 0 { + n += y_1 + } + return n >> shift + } + } else { + fun = func(env *Env) int { + n := x(env) + if n < 0 { + n += y_1 + } + return -(n >> shift) + } + } + + } + + case r.Int8: + { + x := x.(func(*Env) int8) + y_1 := + + int8(y - 1) + if ypositive { + fun = func(env *Env) int8 { + n := x(env) + if n < 0 { + n += y_1 + } + return n >> shift + } + } else { + fun = func(env *Env) int8 { + n := x(env) + if n < 0 { + n += y_1 + } + return -(n >> shift) + } + } + + } + + case r.Int16: + { + x := x.(func(*Env) int16) + y_1 := + + int16(y - 1) + if ypositive { + fun = func(env *Env) int16 { + n := x(env) + if n < 0 { + n += y_1 + } + return n >> shift + } + } else { + fun = func(env *Env) int16 { + n := x(env) + if n < 0 { + n += y_1 + } + return -(n >> shift) + } + } + + } + + case r.Int32: + { + x := x.(func(*Env) int32) + y_1 := + + int32(y - 1) + if ypositive { + fun = func(env *Env) int32 { + n := x(env) + if n < 0 { + n += y_1 + } + return n >> shift + } + } else { + fun = func(env *Env) int32 { + n := x(env) + if n < 0 { + n += y_1 + } + return -(n >> shift) + } + } + + } + + case r.Int64: + { + x := x.(func(*Env) int64) + y_1 := + + int64(y - 1) + if ypositive { + fun = func(env *Env) int64 { + n := x(env) + if n < 0 { + n += y_1 + } + return n >> shift + } + } else { + fun = func(env *Env) int64 { + n := x(env) + if n < 0 { + n += y_1 + } + return -(n >> shift) + } + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) >> shift + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) >> shift + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) >> shift + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) >> shift + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) >> shift + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) >> shift + } + + } + + default: + return nil + } + return exprFun(xe.Type, fun) +} +func (c *Comp) remPow2(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + + if xe.Const() || !ye.Const() { + return nil + } + + if isLiteralNumber(ye.Value, 0) { + c.Errorf("division by zero") + return nil + } else if isLiteralNumber(ye.Value, 1) { + return c.exprZero(xe) + } + + yv := r.ValueOf(ye.Value) + var y uint64 + switch base.KindToCategory(yv.Kind()) { + case r.Int: + sy := yv.Int() + if sy < 0 { + y = uint64(-sy) + } else { + y = uint64(sy) + } + + case r.Uint: + y = yv.Uint() + default: + return nil + } + if !isPowerOfTwo(y) { + return nil + } + + x := xe.Fun + var fun I + switch xe.Type.Kind() { + case r.Int: + { + x := x.(func(*Env) int) + y_1 := + + int(y - 1) + fun = func(env *Env) int { + n := x(env) + if n >= 0 { + return n & y_1 + } + return -(-n & y_1) + } + } + + case r.Int8: + { + x := x.(func(*Env) int8) + y_1 := + + int8(y - 1) + fun = func(env *Env) int8 { + n := x(env) + if n >= 0 { + return n & y_1 + } + return -(-n & y_1) + } + } + + case r.Int16: + { + x := x.(func(*Env) int16) + y_1 := + + int16(y - 1) + fun = func(env *Env) int16 { + n := x(env) + if n >= 0 { + return n & y_1 + } + return -(-n & y_1) + } + } + + case r.Int32: + { + x := x.(func(*Env) int32) + y_1 := + + int32(y - 1) + fun = func(env *Env) int32 { + n := x(env) + if n >= 0 { + return n & y_1 + } + return -(-n & y_1) + } + } + + case r.Int64: + { + x := x.(func(*Env) int64) + y_1 := + + int64(y - 1) + fun = func(env *Env) int64 { + n := x(env) + if n >= 0 { + return n & y_1 + } + return -(-n & y_1) + } + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y_1 := + + uint(y - 1) + fun = func(env *Env) uint { + return x(env) & y_1 + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y_1 := + + uint8(y - 1) + fun = func(env *Env) uint8 { + return x(env) & y_1 + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y_1 := + + uint16(y - 1) + fun = func(env *Env) uint16 { + return x(env) & y_1 + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y_1 := + + uint32(y - 1) + fun = func(env *Env) uint32 { + return x(env) & y_1 + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y_1 := + + uint64(y - 1) + fun = func(env *Env) uint64 { + return x(env) & y_1 + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y_1 := + + uintptr(y - 1) + fun = func(env *Env) uintptr { + return x(env) & y_1 + } + + } + + default: + return nil + } + return exprFun(xe.Type, fun) +} +func isPowerOfTwo(n uint64) bool { return n != 0 && n&(n-1) == 0 } +func integerLen(n uint64) uint8 { + var l uint8 + for n > 0xff { + l += 8 + n >>= 8 + } + for n != 0 { + l++ + n >>= 1 + } + return l +} +func (c *Comp) And(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x(env) & y(env) + } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x(env) & y(env) + } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x(env) & y(env) + } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x(env) & y(env) + } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x(env) & y(env) + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) & y(env) + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) & y(env) + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) & y(env) + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) & y(env) + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) & y(env) + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) & y(env) + } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return c.exprZero(xe) + } else if isLiteralNumber(y, -1) { + return xe + } + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(r.ValueOf(y).Int()) + fun = func(env *Env) int { + return x(env) & y + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(r.ValueOf(y).Int()) + fun = func(env *Env) int8 { + return x(env) & y + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(r.ValueOf(y).Int()) + fun = func(env *Env) int16 { + return x(env) & y + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(r.ValueOf(y).Int()) + fun = func(env *Env) int32 { + return x(env) & y + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := r.ValueOf(y).Int() + fun = func(env *Env) int64 { + return x(env) & y + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(r.ValueOf(y).Uint()) + fun = func(env *Env) uint { + return x(env) & y + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(r.ValueOf(y).Uint()) + fun = func(env *Env) uint8 { + return x(env) & y + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(r.ValueOf(y).Uint()) + fun = func(env *Env) uint16 { + return x(env) & y + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(r.ValueOf(y).Uint()) + fun = func(env *Env) uint32 { + return x(env) & y + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := r.ValueOf(y).Uint() + fun = func(env *Env) uint64 { + return x(env) & y + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(r.ValueOf(y).Uint()) + fun = func(env *Env) uintptr { + return x(env) & y + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + x := xe.Value + y := ye.Fun + if isLiteralNumber(x, 0) { + return c.exprZero(ye) + } else if isLiteralNumber(x, -1) { + return ye + } + + switch k { + case r.Int: + + { + x := int( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x & y(env) + } + + } + case r.Int8: + + { + x := int8( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x & y(env) + } + + } + case r.Int16: + + { + x := int16( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x & y(env) + } + + } + case r.Int32: + + { + x := int32( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x & y(env) + } + + } + case r.Int64: + + { + x := r.ValueOf(x).Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x & y(env) + } + + } + case r.Uint: + + { + x := uint( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x & y(env) + } + + } + case r.Uint8: + + { + x := uint8( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x & y(env) + } + + } + case r.Uint16: + + { + x := uint16( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x & y(env) + } + + } + case r.Uint32: + + { + x := uint32( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x & y(env) + } + + } + case r.Uint64: + + { + x := r.ValueOf(x).Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x & y(env) + } + + } + case r.Uintptr: + + { + x := uintptr( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x & y(env) + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) Or(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x(env) | y(env) + } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x(env) | y(env) + } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x(env) | y(env) + } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x(env) | y(env) + } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x(env) | y(env) + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) | y(env) + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) | y(env) + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) | y(env) + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) | y(env) + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) | y(env) + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) | y(env) + } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + + if isLiteralNumber(y, 0) { + return xe + } + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(r.ValueOf(y).Int()) + fun = func(env *Env) int { + return x(env) | y + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(r.ValueOf(y).Int()) + fun = func(env *Env) int8 { + return x(env) | y + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(r.ValueOf(y).Int()) + fun = func(env *Env) int16 { + return x(env) | y + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(r.ValueOf(y).Int()) + fun = func(env *Env) int32 { + return x(env) | y + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := r.ValueOf(y).Int() + fun = func(env *Env) int64 { + return x(env) | y + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(r.ValueOf(y).Uint()) + fun = func(env *Env) uint { + return x(env) | y + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(r.ValueOf(y).Uint()) + fun = func(env *Env) uint8 { + return x(env) | y + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(r.ValueOf(y).Uint()) + fun = func(env *Env) uint16 { + return x(env) | y + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(r.ValueOf(y).Uint()) + fun = func(env *Env) uint32 { + return x(env) | y + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := r.ValueOf(y).Uint() + fun = func(env *Env) uint64 { + return x(env) | y + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(r.ValueOf(y).Uint()) + fun = func(env *Env) uintptr { + return x(env) | y + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + x := xe.Value + y := ye.Fun + + if isLiteralNumber(x, 0) { + return ye + } + + switch k { + case r.Int: + + { + x := int( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x | y(env) + } + + } + case r.Int8: + + { + x := int8( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x | y(env) + } + + } + case r.Int16: + + { + x := int16( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x | y(env) + } + + } + case r.Int32: + + { + x := int32( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x | y(env) + } + + } + case r.Int64: + + { + x := r.ValueOf(x).Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x | y(env) + } + + } + case r.Uint: + + { + x := uint( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x | y(env) + } + + } + case r.Uint8: + + { + x := uint8( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x | y(env) + } + + } + case r.Uint16: + + { + x := uint16( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x | y(env) + } + + } + case r.Uint32: + + { + x := uint32( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x | y(env) + } + + } + case r.Uint64: + + { + x := r.ValueOf(x).Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x | y(env) + } + + } + case r.Uintptr: + + { + x := uintptr( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x | y(env) + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) Xor(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x(env) ^ y(env) + } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x(env) ^ y(env) + } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x(env) ^ y(env) + } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x(env) ^ y(env) + } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x(env) ^ y(env) + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) ^ y(env) + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) ^ y(env) + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) ^ y(env) + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) ^ y(env) + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) ^ y(env) + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) ^ y(env) + } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return xe + } + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(r.ValueOf(y).Int()) + fun = func(env *Env) int { + return x(env) ^ y + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(r.ValueOf(y).Int()) + fun = func(env *Env) int8 { + return x(env) ^ y + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(r.ValueOf(y).Int()) + fun = func(env *Env) int16 { + return x(env) ^ y + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(r.ValueOf(y).Int()) + fun = func(env *Env) int32 { + return x(env) ^ y + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := r.ValueOf(y).Int() + fun = func(env *Env) int64 { + return x(env) ^ y + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(r.ValueOf(y).Uint()) + fun = func(env *Env) uint { + return x(env) ^ y + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(r.ValueOf(y).Uint()) + fun = func(env *Env) uint8 { + return x(env) ^ y + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(r.ValueOf(y).Uint()) + fun = func(env *Env) uint16 { + return x(env) ^ y + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(r.ValueOf(y).Uint()) + fun = func(env *Env) uint32 { + return x(env) ^ y + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := r.ValueOf(y).Uint() + fun = func(env *Env) uint64 { + return x(env) ^ y + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(r.ValueOf(y).Uint()) + fun = func(env *Env) uintptr { + return x(env) ^ y + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + x := xe.Value + y := ye.Fun + if isLiteralNumber(x, 0) { + return ye + } + + switch k { + case r.Int: + + { + x := int( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x ^ y(env) + } + + } + case r.Int8: + + { + x := int8( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x ^ y(env) + } + + } + case r.Int16: + + { + x := int16( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x ^ y(env) + } + + } + case r.Int32: + + { + x := int32( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x ^ y(env) + } + + } + case r.Int64: + + { + x := r.ValueOf(x).Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x ^ y(env) + } + + } + case r.Uint: + + { + x := uint( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x ^ y(env) + } + + } + case r.Uint8: + + { + x := uint8( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x ^ y(env) + } + + } + case r.Uint16: + + { + x := uint16( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x ^ y(env) + } + + } + case r.Uint32: + + { + x := uint32( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x ^ y(env) + } + + } + case r.Uint64: + + { + x := r.ValueOf(x).Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x ^ y(env) + } + + } + case r.Uintptr: + + { + x := uintptr( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x ^ y(env) + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) Andnot(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x(env) &^ y(env) + } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x(env) &^ y(env) + } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x(env) &^ y(env) + } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x(env) &^ y(env) + } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x(env) &^ y(env) + } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) &^ y(env) + } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) &^ y(env) + } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) &^ y(env) + } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) &^ y(env) + } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) &^ y(env) + } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) &^ y(env) + } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, -1) { + return c.exprZero(xe) + } else if isLiteralNumber(y, 0) { + return xe + } + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(r.ValueOf(y).Int()) + fun = func(env *Env) int { + return x(env) &^ y + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(r.ValueOf(y).Int()) + fun = func(env *Env) int8 { + return x(env) &^ y + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(r.ValueOf(y).Int()) + fun = func(env *Env) int16 { + return x(env) &^ y + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(r.ValueOf(y).Int()) + fun = func(env *Env) int32 { + return x(env) &^ y + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := r.ValueOf(y).Int() + fun = func(env *Env) int64 { + return x(env) &^ y + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(r.ValueOf(y).Uint()) + fun = func(env *Env) uint { + return x(env) &^ y + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(r.ValueOf(y).Uint()) + fun = func(env *Env) uint8 { + return x(env) &^ y + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(r.ValueOf(y).Uint()) + fun = func(env *Env) uint16 { + return x(env) &^ y + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(r.ValueOf(y).Uint()) + fun = func(env *Env) uint32 { + return x(env) &^ y + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := r.ValueOf(y).Uint() + fun = func(env *Env) uint64 { + return x(env) &^ y + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(r.ValueOf(y).Uint()) + fun = func(env *Env) uintptr { + return x(env) &^ y + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + x := xe.Value + y := ye.Fun + if isLiteralNumber(x, 0) { + return c.exprZero(ye) + } + + switch k { + case r.Int: + + { + x := int( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) int { + return x &^ y(env) + } + + } + case r.Int8: + + { + x := int8( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) int8 { + return x &^ y(env) + } + + } + case r.Int16: + + { + x := int16( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) int16 { + return x &^ y(env) + } + + } + case r.Int32: + + { + x := int32( + + r.ValueOf(x).Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) int32 { + return x &^ y(env) + } + + } + case r.Int64: + + { + x := r.ValueOf(x).Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) int64 { + return x &^ y(env) + } + + } + case r.Uint: + + { + x := uint( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x &^ y(env) + } + + } + case r.Uint8: + + { + x := uint8( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x &^ y(env) + } + + } + case r.Uint16: + + { + x := uint16( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x &^ y(env) + } + + } + case r.Uint32: + + { + x := uint32( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x &^ y(env) + } + + } + case r.Uint64: + + { + x := r.ValueOf(x).Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x &^ y(env) + } + + } + case r.Uintptr: + + { + x := uintptr( + + r.ValueOf(x).Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x &^ y(env) + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) exprZero(xe *Expr) *Expr { + if xe.Const() { + xe.ConstTo(xe.DefaultType()) + return c.exprValue(xe.Type, xr.Zero(xe.Type).Interface()) + } + t := xe.Type + k := t.Kind() + x := xe.Fun + var fun I + + switch k { + case r.Bool: + { + x := x.(func(*Env) bool) + fun = func(env *Env) (zero bool) { + x(env) + return + + } + } + case r.Int: + { + x := x.(func(*Env) int) + fun = func(env *Env) (zero int) { + x(env) + return + + } + } + case r.Int8: + { + x := x.(func(*Env) int8) + fun = func(env *Env) (zero int8) { + x(env) + return + + } + } + case r.Int16: + { + x := x.(func(*Env) int16) + fun = func(env *Env) (zero int16) { + x(env) + return + + } + } + case r.Int32: + { + x := x.(func(*Env) int32) + fun = func(env *Env) (zero int32) { + x(env) + return + + } + } + case r.Int64: + { + x := x.(func(*Env) int64) + fun = func(env *Env) (zero int64) { + x(env) + return + + } + } + case r.Uint: + { + x := x.(func(*Env) uint) + fun = func(env *Env) (zero uint) { + x(env) + return + + } + } + case r.Uint8: + { + x := x.(func(*Env) uint8) + fun = func(env *Env) (zero uint8) { + x(env) + return + + } + } + case r.Uint16: + { + x := x.(func(*Env) uint16) + fun = func(env *Env) (zero uint16) { + x(env) + return + + } + } + case r.Uint32: + { + x := x.(func(*Env) uint32) + fun = func(env *Env) (zero uint32) { + x(env) + return + + } + } + case r.Uint64: + { + x := x.(func(*Env) uint64) + fun = func(env *Env) (zero uint64) { + x(env) + return + + } + } + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + fun = func(env *Env) (zero uintptr) { + x(env) + return + + } + } + + case r.Float32: + { + x := x.(func(*Env) float32) + fun = func(env *Env) (zero float32) { + x(env) + return + + } + } + + case r.Float64: + { + x := x.(func(*Env) float64) + fun = func(env *Env) (zero float64) { + x(env) + return + + } + } + + case r.Complex64: + { + x := x.(func(*Env) complex64) + fun = func(env *Env) (zero complex64) { + x(env) + return + + } + } + + case r.Complex128: + { + x := x.(func(*Env) complex128) + fun = func(env *Env) (zero complex128) { + x(env) + return + + } + } + + case r.String: + { + x := x.(func(*Env) string) + fun = func(env *Env) (zero string) { + x(env) + return + + } + } + + default: + { + zero := xr.Zero(t) + x := funAsX1(x, nil) + fun = func(env *Env) r.Value { + x(env) + return zero + } + } + + } + return exprFun(t, fun) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary_ops.gomacro b/vendor/github.com/cosmos72/gomacro/fast/binary_ops.gomacro new file mode 100644 index 0000000..2ca3cf0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/binary_ops.gomacro @@ -0,0 +1,845 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binary_ops.go + * + * Created on Apr 12, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + r "reflect" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + "fmt" + "go/ast" + "go/token" + r "reflect" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makekind(typ ast.Node) ast.Node { + t := EvalType(typ) + + // go/ast.SelectorExpr requires the foo in r.foo to be an *ast.Ident, cannot unquote there + kind := ~"{r . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(t.Name())} + return kind +} + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +:macro binaryop(opnode, xconst, yconst, typ ast.Node) ast.Node { + + // the return type of Eval() and EvalType() varies. better check early. + xc, yc := Eval(xconst).(bool), Eval(yconst).(bool) + optoken := Eval(opnode).(token.Token) + + if xc == yc { + var expr *ast.BinaryExpr = ~"{x(env) && y(env)} // quasiquote, we modify it destructively + expr.Op = optoken + + return ~"{ + x := x.(func(*Env) ~,typ) + y := y.(func(*Env) ~,typ) + fun = func(env *Env) ~,typ { + return ~,expr + } + } + } else if yc { + var expr *ast.BinaryExpr = ~"{x(env) && y} // quasiquote, we modify it destructively + expr.Op = optoken + + converty := convertvalue1(typ, ~'{r.ValueOf(y)}) + return ~"{ + x := x.(func(*Env) ~,typ) + y := ~,converty + fun = func(env *Env) ~,typ { + return ~,expr + } + } + } else { + var expr *ast.BinaryExpr = ~"{x && y(env)} // quasiquote, we modify it destructively + expr.Op = optoken + + convertx := convertvalue1(typ, ~'{r.ValueOf(x)}) + return ~"{ + x := ~,convertx + y := y.(func(*Env) ~,typ) + fun = func(env *Env) ~,typ { + return ~,expr + } + } + } +} + +:macro binaryops(opnode, xconst, yconst, types ast.Node) ast.Node { + typelist := types.(*ast.BlockStmt).List + caselist := make([]ast.Stmt, 0, len(typelist)) + foundnil := false + for _, typ := range typelist { + t := EvalType(typ) + if t == nil { + caselist = append(caselist, ~"{default: binaryop; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + foundnil = true + + } else if t.Kind() == r.Int { + // shortcut for all int* types + for _, typ := range []ast.Expr{~'int, ~'int8, ~'int16, ~'int32, ~'int64} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: binaryop; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + } + } else if t.Kind() == r.Uint { + // shortcut for all uint* types + for _, typ := range []ast.Expr{~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: binaryop; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + } + } else { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: binaryop; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + } + } + + if !foundnil { + caselist = append(caselist, ~'{default: return c.invalidBinaryExpr(node, xe, ye)}) + } + return ~"{ switch k { ~,@caselist } } +} + +func (c *Comp) Add(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.ADD; false; false; { int; uint; float32; float64; complex64; complex128; string }} + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) || y == "" { + return xe + } + {binaryops; token.ADD; false; true; { int; uint; float32; float64; complex64; complex128; string }} + } else { + x := xe.Value + y := ye.Fun + if isLiteralNumber(x, 0) || x == "" { + return ye + } + {binaryops; token.ADD; true; false; { int; uint; float32; float64; complex64; complex128; string }} + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) Sub(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.SUB; false; false; { int; uint; float32; float64; complex64; complex128 }} + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return xe + } + {binaryops; token.SUB; false; true; { int; uint; float32; float64; complex64; complex128 }} + } else { + x := xe.Value + y := ye.Fun + {binaryops; token.SUB; true; false; { int; uint; float32; float64; complex64; complex128 }} + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) Mul(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.MUL; false; false; { int; uint; float32; float64; complex64; complex128 }} + } else if yc { + x := xe.Fun + y := ye.Value + if ze := c.mulPow2(node, xe, ye); ze != nil { + return ze + } + {binaryops; token.MUL; false; true; { int; uint; float32; float64; complex64; complex128 }} + } else { + x := xe.Value + y := ye.Fun + if ze := c.mulPow2(node, xe, ye); ze != nil { + return ze + } + {binaryops; token.MUL; true; false; { int; uint; float32; float64; complex64; complex128 }} + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) Quo(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.QUO; false; false; { int; uint; float32; float64; complex64; complex128 }} + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + c.Errorf("division by zero") + return nil + } else if ze := c.quoPow2(node, xe, ye); ze != nil { + return ze + } + {binaryops; token.QUO; false; true; { int; uint; float32; float64; complex64; complex128 }} + } else { + x := xe.Value + y := ye.Fun + {binaryops; token.QUO; true; false; { int; uint; float32; float64; complex64; complex128 }} + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) Rem(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.REM; false; false; { int; uint }} + } else if yc { + x := xe.Fun + y := ye.Value + // cannot optimize x % 1 to 0 because x may have side effects + if isLiteralNumber(y, 0) { + c.Errorf("division by zero") + return nil + } else if ze := c.remPow2(node, xe, ye); ze != nil { + return ze + } + {binaryops; token.REM; false; true; { int; uint }} + } else { + x := xe.Value + y := ye.Fun + {binaryops; token.REM; true; false; { int; uint }} + } + return exprFun(xe.Type, fun) +} + +:macro mulpow2(typ ast.Node) ast.Node { + return ~"{ + x := x.(func(*Env) ~,typ) + if ypositive { + switch shift { + case 1: + fun = func(env *Env) ~,typ { + return x(env) << 1 + } + case 2: + fun = func(env *Env) ~,typ { + return x(env) << 2 + } + case 8: + fun = func(env *Env) ~,typ { + return x(env) << 8 + } + default: + fun = func(env *Env) ~,typ { + return x(env) << shift + } + } + } else { + fun = func(env *Env) ~,typ { + return -(x(env) << shift) + } + } + } +} + +:macro mulpow2_u(typ ast.Node) ast.Node { + return ~"{ + x := x.(func(*Env) ~,typ) + switch shift { + case 1: + fun = func(env *Env) ~,typ { + return x(env) << 1 + } + case 2: + fun = func(env *Env) ~,typ { + return x(env) << 2 + } + case 8: + fun = func(env *Env) ~,typ { + return x(env) << 8 + } + default: + fun = func(env *Env) ~,typ { + return x(env) << shift + } + } + } +} + +// mulPow2 tries to optimize multiplications by a constant power-of-two. +// returns nil if no optimized version could be compiled. +func (c *Comp) mulPow2(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + // no need to optimize if both xe and ye are constant: + // multiplication will be computed only once by EvalConst() + if xe.Const() == ye.Const() { + return nil + } + if xe.Const() { + // swap xe and ye. no side effects, xe is a constant + xe, ye = ye, xe + } + if isLiteralNumber(ye.Value, 0) { + return c.exprZero(xe) + } else if isLiteralNumber(ye.Value, 1) { + return xe + } else if isLiteralNumber(ye.Value, -1) { + node1 := &ast.UnaryExpr{OpPos: node.OpPos, Op: token.SUB, X: node.X} + return c.UnaryMinus(node1, xe) + } + ypositive := true + yv := r.ValueOf(ye.Value) + var y uint64 + switch base.KindToCategory(yv.Kind()) { + case r.Int: + sy := yv.Int() + if sy < 0 { + ypositive = false + y = uint64(-sy) + } else { + y = uint64(sy) + } + case r.Uint: + y = yv.Uint() + default: + // floating point or complex multiplication + return nil + } + if !isPowerOfTwo(y) { + // multiplication by shift and add not implemented... + return nil + } + shift := integerLen(y) - 1 + x := xe.Fun + var fun I + switch xe.Type.Kind() { + case r.Int: {mulpow2; int} + case r.Int8: {mulpow2; int8} + case r.Int16: {mulpow2; int16} + case r.Int32: {mulpow2; int32} + case r.Int64: {mulpow2; int64} + case r.Uint: {mulpow2_u; uint} + case r.Uint8: {mulpow2_u; uint8} + case r.Uint16: {mulpow2_u; uint16} + case r.Uint32: {mulpow2_u; uint32} + case r.Uint64: {mulpow2_u; uint64} + case r.Uintptr: {mulpow2_u; uintptr} + default: return nil + } + return exprFun(xe.Type, fun) +} + +:macro quopow2(typ ast.Node) ast.Node { + return ~"{ + x := x.(func(*Env) ~,typ) + y_1 := ~,typ(y - 1) // cannot overflow, y was originally a ~,typ + if ypositive { + fun = func(env *Env) ~,typ { + n := x(env) + if n < 0 { + n += y_1 + } + return n >> shift + } + } else { + fun = func(env *Env) ~,typ { + n := x(env) + if n < 0 { + n += y_1 + } + return -(n >> shift) + } + } + } +} + +:macro quopow2_u(typ ast.Node) ast.Node { + return ~"{ + x := x.(func(*Env) ~,typ) + fun = func(env *Env) ~,typ { + return x(env) >> shift + } + } +} + +// quoPow2 tries to optimize divisions by a constant power-of-two. +// returns nil if no optimized version could be compiled. +func (c *Comp) quoPow2(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + // no need to optimize if both xe and ye are constant: + // division will be computed only once by EvalConst() + if xe.Const() || !ye.Const() { + return nil + } + if isLiteralNumber(ye.Value, 0) { + c.Errorf("division by zero") + return nil + } else if isLiteralNumber(ye.Value, 1) { + return xe + } else if isLiteralNumber(ye.Value, -1) { + node1 := &ast.UnaryExpr{OpPos: node.OpPos, Op: token.SUB, X: node.X} + return c.UnaryMinus(node1, xe) + } + ypositive := true + yv := r.ValueOf(ye.Value) + var y uint64 + switch base.KindToCategory(yv.Kind()) { + case r.Int: + sy := yv.Int() + if sy < 0 { + ypositive = false + y = uint64(-sy) + } else { + y = uint64(sy) + } + case r.Uint: + y = yv.Uint() + default: + // floating point or complex division + return nil + } + if !isPowerOfTwo(y) { + // division by multiplication and shift not implemented... + return nil + } + // attention: xe / (2**n) and xe >> n have different truncation rules for negative xe: + // quotient / truncates toward zero + // right shift >> truncates toward negative infinity + // examples: + // 11 / 2 = 5, 11 >> 1 = 5 // same result + // -11 / 2 = -5, -11 >> 1 = -6 // different result + // 63 / 8 = 7, 63 >> 3 = 7 // same result + // -63 / 8 = -7, -63 >> 3 = -8 // different result + // + // -11 / -2 = 5, -(-11 >> 1) = 6 // different result + // -63 / -8 = 7, -(-63 >> 3) = 8 // different result + // + // to fix this, when xe is negative we must add abs(y)-1 to it: + // -11 / 2 = -5, (-11 + 1) >> 1 = -10 >> 1 = -5 // same result + // -63 / 8 = -7, (-63 + 7) >> 3 = -56 >> 3 = -7 // same result + // + // -11 / -2 = 5, -((-11 + 1) >> 1) = -(-10 >> 1) = 5 // same result + // -63 / -8 = 7, -((-63 + 7) >> 3) = -(-56 >> 3) = 7 // same result + + shift := integerLen(y) - 1 + x := xe.Fun + var fun I + switch xe.Type.Kind() { + case r.Int: {quopow2; int} + case r.Int8: {quopow2; int8} + case r.Int16: {quopow2; int16} + case r.Int32: {quopow2; int32} + case r.Int64: {quopow2; int64} + case r.Uint: {quopow2_u; uint} + case r.Uint8: {quopow2_u; uint8} + case r.Uint16: {quopow2_u; uint16} + case r.Uint32: {quopow2_u; uint32} + case r.Uint64: {quopow2_u; uint64} + case r.Uintptr: {quopow2_u; uintptr} + default: return nil + } + return exprFun(xe.Type, fun) +} + +:macro rempow2(typ ast.Node) ast.Node { + return ~"{ + x := x.(func(*Env) ~,typ) + y_1 := ~,typ(y - 1) // cannot overflow, y was originally a ~,typ + fun = func(env *Env) ~,typ { + n := x(env) + if n >= 0 { + return n & y_1 + } + return -(-n & y_1) + } + } +} + +:macro rempow2_u(typ ast.Node) ast.Node { + return ~"{ + x := x.(func(*Env) ~,typ) + y_1 := ~,typ(y - 1) // cannot overflow, y was originally a ~,typ + fun = func(env *Env) ~,typ { + return x(env) & y_1 + } + } +} + +// remPow2 tries to optimize remainders by a constant power-of-two. +// returns nil if no optimized version could be compiled. +func (c *Comp) remPow2(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + // no need to optimize if both xe and ye are constant: + // remainder will be computed only once by EvalConst() + if xe.Const() || !ye.Const() { + return nil + } + if isLiteralNumber(ye.Value, 0) { + c.Errorf("division by zero") + return nil + } else if isLiteralNumber(ye.Value, 1) { + return c.exprZero(xe) + } + yv := r.ValueOf(ye.Value) + var y uint64 + switch base.KindToCategory(yv.Kind()) { + case r.Int: + sy := yv.Int() + if sy < 0 { + y = uint64(-sy) + } else { + y = uint64(sy) + } + case r.Uint: + y = yv.Uint() + default: + // floating point or complex division + return nil + } + if !isPowerOfTwo(y) { + // remainder by multiplication and shift not implemented... + return nil + } + // attention: % (2**n) and & (2**n - 1) have different behaviours for negative xe: + // remainder % has the same sign as xe + // bitwise-and & is always >= 0 (for non-negative right operand) + // luckily, in Go x % y and x % -y always give the same result, so we can assume y >= 0 + // examples: + // 11 % 2 = 1, 11 & 1 = 1 // same result + // -11 % 2 = -1, -11 & 1 = 1 // different result + // -11 % -2 = -1, -11 & 1 = 1 // different result + // 63 % 8 = 7, 63 & 7 = 7 // same result + // -63 % 8 = -7, -63 & 7 = 1 // different result + // -63 % -8 = -7, -63 & 7 = 1 // different result + // + // to fix this, when xe is negative, we flip its sign, perform the bitwise-and with (abs(y)-1), then flip again the sign: + // -11 % 2 = -1, -(11 & 1) = -1 // same result + // -11 % -2 = -1, -(11 & 1) = -1 // same result + // -63 % 8 = -7, -(63 & 7) = -7 // same result + // -63 % -8 = -7, -(63 & 7) = -7 // same result + + x := xe.Fun + var fun I + switch xe.Type.Kind() { + case r.Int: {rempow2; int} + case r.Int8: {rempow2; int8} + case r.Int16: {rempow2; int16} + case r.Int32: {rempow2; int32} + case r.Int64: {rempow2; int64} + case r.Uint: {rempow2_u; uint} + case r.Uint8: {rempow2_u; uint8} + case r.Uint16: {rempow2_u; uint16} + case r.Uint32: {rempow2_u; uint32} + case r.Uint64: {rempow2_u; uint64} + case r.Uintptr: {rempow2_u; uintptr} + default: return nil + } + return exprFun(xe.Type, fun) +} + +func isPowerOfTwo(n uint64) bool { + return n != 0 && (n&(n-1)) == 0 +} + +// integerLen returns the number of bits needed to represent n +func integerLen(n uint64) uint8 { + var l uint8 + for n > 0xff { + l += 8 + n >>= 8 + } + for n != 0 { + l++ + n >>= 1 + } + return l +} + +func (c *Comp) And(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.AND; false; false; { int; uint }} + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return c.exprZero(xe) + } else if isLiteralNumber(y, -1) { + return xe + } + {binaryops; token.AND; false; true; { int; uint }} + } else { + x := xe.Value + y := ye.Fun + if isLiteralNumber(x, 0) { + return c.exprZero(ye) + } else if isLiteralNumber(x, -1) { + return ye + } + {binaryops; token.AND; true; false; { int; uint }} + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) Or(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.OR; false; false; { int; uint }} + } else if yc { + x := xe.Fun + y := ye.Value + // cannot optimize x | -1 to -1 because x may have side effects + if isLiteralNumber(y, 0) { + return xe + } + {binaryops; token.OR; false; true; { int; uint }} + } else { + x := xe.Value + y := ye.Fun + // cannot optimize -1 & y to -1 because x may have side effects + if isLiteralNumber(x, 0) { + return ye + } + {binaryops; token.OR; true; false; { int; uint }} + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) Xor(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.XOR; false; false; { int; uint }} + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return xe + } + {binaryops; token.XOR; false; true; { int; uint }} + } else { + x := xe.Value + y := ye.Fun + if isLiteralNumber(x, 0) { + return ye + } + {binaryops; token.XOR; true; false; { int; uint }} + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) Andnot(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.AND_NOT; false; false; { int; uint }} + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, -1) { + return c.exprZero(xe) + } else if isLiteralNumber(y, 0) { + return xe + } + {binaryops; token.AND_NOT; false; true; { int; uint }} + } else { + x := xe.Value + y := ye.Fun + if isLiteralNumber(x, 0) { + return c.exprZero(ye) + } + {binaryops; token.AND_NOT; true; false; { int; uint }} + } + return exprFun(xe.Type, fun) +} + +:macro exprzero(typ ast.Node) ast.Node { + if EvalType(typ) == nil { + return ~"{ + zero := xr.Zero(t) + x := funAsX1(x, nil) + fun = func(env *Env) r.Value { + x(env) + return zero + } + } + } + return ~"{ + x := x.(func(*Env) ~,typ) + fun = func(env *Env) (zero ~,typ) { + x(env) + return + } + } +} + +:macro exprzeros(types ast.Node) ast.Node { + typelist := types.(*ast.BlockStmt).List + caselist := make([]ast.Stmt, 0, len(typelist)) + foundnil := false + for _, typ := range typelist { + t := EvalType(typ) + if t == nil { + continue + } else if t.Kind() == r.Int { + // shortcut for all int* types + for _, typ := range []ast.Expr{~'int, ~'int8, ~'int16, ~'int32, ~'int64} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: exprzero; ~,typ}) + } + } else if t.Kind() == r.Uint { + // shortcut for all uint* types + for _, typ := range []ast.Expr{~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: exprzero; ~,typ}) + } + } else { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: exprzero; ~,typ}) + } + } + + caselist = append(caselist, ~"{default: exprzero; nil}) + + return ~"{ switch k { ~,@caselist } } +} + +// exprZero compiles a function that evaluates xe, +// then discards the result and always returns zero +func (c *Comp) exprZero(xe *Expr) *Expr { + if xe.Const() { + xe.ConstTo(xe.DefaultType()) + return c.exprValue(xe.Type, xr.Zero(xe.Type).Interface()) + } + t := xe.Type + k := t.Kind() + x := xe.Fun + var fun I + {exprzeros; {bool; int; uint; float32; float64; complex64; complex128; string} } + return exprFun(t, fun) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary_relops.go b/vendor/github.com/cosmos72/gomacro/fast/binary_relops.go new file mode 100644 index 0000000..36a0d18 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/binary_relops.go @@ -0,0 +1,1629 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binary_relops.go + * + * Created on Apr 12, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" +) + +func (c *Comp) Lss(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun func(*Env) bool + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + case r.String: + { + x := x.(func(*Env) string) + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x(env) < y(env) } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(yv.Int()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(yv.Int()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(yv.Int()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(yv.Int()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := yv.Int() + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(yv.Uint()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(yv.Uint()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(yv.Uint()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(yv.Uint()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := yv.Uint() + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(yv.Uint()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Float32: + { + x := x.(func(*Env) float32) + y := float32(yv.Float()) + fun = func(env *Env) bool { return x(env) < y } + + } + case r.Float64: + { + x := x.(func(*Env) float64) + y := yv.Float() + fun = func(env *Env) bool { return x(env) < y } + + } + case r.String: + { + x := x.(func(*Env) string) + y := yv.String() + fun = func(env *Env) bool { return x(env) < y } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + + switch k { + case r.Int: + + { + x := int( + + xv.Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Int8: + + { + x := int8( + + xv.Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Int16: + + { + x := int16( + + xv.Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Int32: + + { + x := int32( + + xv.Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Int64: + + { + x := xv.Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Uint: + + { + x := uint( + + xv.Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Uint8: + + { + x := uint8( + + xv.Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Uint16: + + { + x := uint16( + + xv.Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Uint32: + + { + x := uint32( + + xv.Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Uint64: + + { + x := xv.Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Uintptr: + + { + x := uintptr( + + xv.Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Float32: + + { + x := float32( + + xv.Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.Float64: + + { + x := xv.Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x < y(env) } + + } + case r.String: + + { + x := xv.String() + + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x < y(env) } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return c.exprBool(fun) +} +func (c *Comp) Gtr(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun func(*Env) bool + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + case r.String: + { + x := x.(func(*Env) string) + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x(env) > y(env) } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(yv.Int()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(yv.Int()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(yv.Int()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(yv.Int()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := yv.Int() + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(yv.Uint()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(yv.Uint()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(yv.Uint()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(yv.Uint()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := yv.Uint() + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(yv.Uint()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Float32: + { + x := x.(func(*Env) float32) + y := float32(yv.Float()) + fun = func(env *Env) bool { return x(env) > y } + + } + case r.Float64: + { + x := x.(func(*Env) float64) + y := yv.Float() + fun = func(env *Env) bool { return x(env) > y } + + } + case r.String: + { + x := x.(func(*Env) string) + y := yv.String() + fun = func(env *Env) bool { return x(env) > y } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + + switch k { + case r.Int: + + { + x := int( + + xv.Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Int8: + + { + x := int8( + + xv.Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Int16: + + { + x := int16( + + xv.Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Int32: + + { + x := int32( + + xv.Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Int64: + + { + x := xv.Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Uint: + + { + x := uint( + + xv.Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Uint8: + + { + x := uint8( + + xv.Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Uint16: + + { + x := uint16( + + xv.Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Uint32: + + { + x := uint32( + + xv.Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Uint64: + + { + x := xv.Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Uintptr: + + { + x := uintptr( + + xv.Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Float32: + + { + x := float32( + + xv.Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.Float64: + + { + x := xv.Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x > y(env) } + + } + case r.String: + + { + x := xv.String() + + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x > y(env) } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return c.exprBool(fun) +} +func (c *Comp) Leq(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun func(*Env) bool + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + case r.String: + { + x := x.(func(*Env) string) + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x(env) <= y(env) } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(yv.Int()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(yv.Int()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(yv.Int()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(yv.Int()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := yv.Int() + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(yv.Uint()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(yv.Uint()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(yv.Uint()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(yv.Uint()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := yv.Uint() + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(yv.Uint()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Float32: + { + x := x.(func(*Env) float32) + y := float32(yv.Float()) + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.Float64: + { + x := x.(func(*Env) float64) + y := yv.Float() + fun = func(env *Env) bool { return x(env) <= y } + + } + case r.String: + { + x := x.(func(*Env) string) + y := yv.String() + fun = func(env *Env) bool { return x(env) <= y } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + + switch k { + case r.Int: + + { + x := int( + + xv.Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Int8: + + { + x := int8( + + xv.Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Int16: + + { + x := int16( + + xv.Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Int32: + + { + x := int32( + + xv.Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Int64: + + { + x := xv.Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Uint: + + { + x := uint( + + xv.Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Uint8: + + { + x := uint8( + + xv.Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Uint16: + + { + x := uint16( + + xv.Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Uint32: + + { + x := uint32( + + xv.Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Uint64: + + { + x := xv.Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Uintptr: + + { + x := uintptr( + + xv.Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Float32: + + { + x := float32( + + xv.Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.Float64: + + { + x := xv.Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x <= y(env) } + + } + case r.String: + + { + x := xv.String() + + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x <= y(env) } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return c.exprBool(fun) +} +func (c *Comp) Geq(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + var fun func(*Env) bool + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch k { + case r.Int: + { + x := x.(func(*Env) int) + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + case r.Int8: + { + x := x.(func(*Env) int8) + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + case r.Int16: + { + x := x.(func(*Env) int16) + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + case r.Int32: + { + x := x.(func(*Env) int32) + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + case r.Int64: + { + x := x.(func(*Env) int64) + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + case r.Uint: + { + x := x.(func(*Env) uint) + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + case r.Uint8: + { + x := x.(func(*Env) uint8) + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + case r.Uint16: + { + x := x.(func(*Env) uint16) + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + case r.Uint32: + { + x := x.(func(*Env) uint32) + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + case r.Uint64: + { + x := x.(func(*Env) uint64) + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + case r.Uintptr: + { + x := x.(func(*Env) uintptr) + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + case r.Float32: + { + x := x.(func(*Env) float32) + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + case r.Float64: + { + x := x.(func(*Env) float64) + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + case r.String: + { + x := x.(func(*Env) string) + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x(env) >= y(env) } + + } + + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + + switch k { + case r.Int: + + { + x := x.(func(*Env) int) + y := int(yv.Int()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + y := int8(yv.Int()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + y := int16(yv.Int()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + y := int32(yv.Int()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + y := yv.Int() + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + y := uint(yv.Uint()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + y := uint8(yv.Uint()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + y := uint16(yv.Uint()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + y := uint32(yv.Uint()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + y := yv.Uint() + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + y := uintptr(yv.Uint()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Float32: + { + x := x.(func(*Env) float32) + y := float32(yv.Float()) + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.Float64: + { + x := x.(func(*Env) float64) + y := yv.Float() + fun = func(env *Env) bool { return x(env) >= y } + + } + case r.String: + { + x := x.(func(*Env) string) + y := yv.String() + fun = func(env *Env) bool { return x(env) >= y } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + + switch k { + case r.Int: + + { + x := int( + + xv.Int()) + + y := y.(func(*Env) int) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Int8: + + { + x := int8( + + xv.Int()) + + y := y.(func(*Env) int8) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Int16: + + { + x := int16( + + xv.Int()) + + y := y.(func(*Env) int16) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Int32: + + { + x := int32( + + xv.Int()) + + y := y.(func(*Env) int32) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Int64: + + { + x := xv.Int() + + y := y.(func(*Env) int64) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Uint: + + { + x := uint( + + xv.Uint()) + + y := y.(func(*Env) uint) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Uint8: + + { + x := uint8( + + xv.Uint()) + + y := y.(func(*Env) uint8) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Uint16: + + { + x := uint16( + + xv.Uint()) + + y := y.(func(*Env) uint16) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Uint32: + + { + x := uint32( + + xv.Uint()) + + y := y.(func(*Env) uint32) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Uint64: + + { + x := xv.Uint() + + y := y.(func(*Env) uint64) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Uintptr: + + { + x := uintptr( + + xv.Uint()) + + y := y.(func(*Env) uintptr) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Float32: + + { + x := float32( + + xv.Float()) + + y := y.(func(*Env) float32) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.Float64: + + { + x := xv.Float() + + y := y.(func(*Env) float64) + fun = func(env *Env) bool { return x >= y(env) } + + } + case r.String: + + { + x := xv.String() + + y := y.(func(*Env) string) + fun = func(env *Env) bool { return x >= y(env) } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return c.exprBool(fun) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary_relops.gomacro b/vendor/github.com/cosmos72/gomacro/fast/binary_relops.gomacro new file mode 100644 index 0000000..5b02a6b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/binary_relops.gomacro @@ -0,0 +1,263 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binary_relops.go + * + * Created on Apr 12, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + // . "github.com/cosmos72/gomacro/base" +) + +:import ( + "fmt" + "go/ast" + "go/token" + r "reflect" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makekind(typ ast.Node) ast.Node { + t := EvalType(typ) + + // go/ast.SelectorExpr requires the foo in r.foo to be an *ast.Ident, cannot unquote there + kind := ~"{r . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(t.Name())} + return kind +} + + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +:macro binaryop(opnode, xconst, yconst, typ ast.Node) ast.Node { + + // the return type of Eval() and EvalType() varies. better check early. + xc, yc := Eval(xconst).(bool), Eval(yconst).(bool) + optoken := Eval(opnode).(token.Token) + + if xc == yc { + var expr *ast.BinaryExpr = ~"{x(env) && y(env)} // quasiquote, we modify it destructively + expr.Op = optoken + + return ~"{ + x := x.(func(*Env) ~,typ) + y := y.(func(*Env) ~,typ) + fun = func(env *Env) bool { + return ~,expr + } + } + } else if yc { + var expr *ast.BinaryExpr = ~"{x(env) && y} // quasiquote, we modify it destructively + expr.Op = optoken + + yconv := convertvalue1(typ, ~'yv) + return ~"{ + x := x.(func(*Env) ~,typ) + y := ~,yconv + fun = func(env *Env) bool { + return ~,expr + } + } + } else { + var expr *ast.BinaryExpr = ~"{x && y(env)} // quasiquote, we modify it destructively + expr.Op = optoken + + xconv := convertvalue1(typ, ~'xv) + return ~"{ + x := ~,xconv + y := y.(func(*Env) ~,typ) + fun = func(env *Env) bool { + return ~,expr + } + } + } +} + +:macro binaryops(opnode, xconst, yconst, types ast.Node) ast.Node { + typelist := types.(*ast.BlockStmt).List + caselist := make([]ast.Stmt, 0, len(typelist)) + foundnil := false + for _, typ := range typelist { + t := EvalType(typ) + if t == nil { + caselist = append(caselist, ~"{default: binaryop; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + foundnil = true + + } else if t.Kind() == r.Int { + // shortcut for all int* types + for _, typ := range []ast.Expr{~'int, ~'int8, ~'int16, ~'int32, ~'int64} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: binaryop; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + } + } else if t.Kind() == r.Uint { + // shortcut for all uint* types + for _, typ := range []ast.Expr{~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: binaryop; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + } + } else { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: binaryop; ~,opnode; ~,xconst; ~,yconst; ~,typ}) + } + } + + if !foundnil { + caselist = append(caselist, ~'{default: return c.invalidBinaryExpr(node, xe, ye)}) + } + return ~"{ switch k { ~,@caselist } } +} + +func (c *Comp) Lss(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun func (*Env) bool + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.LSS; false; false; { int; uint; float32; float64; string }} + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + {binaryops; token.LSS; false; true; { int; uint; float32; float64; string }} + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + {binaryops; token.LSS; true; false; { int; uint; float32; float64; string }} + } + return c.exprBool(fun) +} + +func (c *Comp) Gtr(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun func (*Env) bool + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.GTR; false; false; { int; uint; float32; float64; string }} + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + {binaryops; token.GTR; false; true; { int; uint; float32; float64; string }} + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + {binaryops; token.GTR; true; false; { int; uint; float32; float64; string }} + } + return c.exprBool(fun) +} + +func (c *Comp) Leq(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun func (*Env) bool + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.LEQ; false; false; { int; uint; float32; float64; string }} + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + {binaryops; token.LEQ; false; true; { int; uint; float32; float64; string }} + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + {binaryops; token.LEQ; true; false; { int; uint; float32; float64; string }} + } + return c.exprBool(fun) +} + +func (c *Comp) Geq(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + xc, yc := xe.Const(), ye.Const() + c.toSameFuncType(node, xe, ye) + k := xe.Type.Kind() + + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun func (*Env) bool + if xc == yc { + x, y := xe.Fun, ye.Fun + {binaryops; token.GEQ; false; false; { int; uint; float32; float64; string }} + } else if yc { + x := xe.Fun + yv := r.ValueOf(ye.Value) + {binaryops; token.GEQ; false; true; { int; uint; float32; float64; string }} + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + {binaryops; token.GEQ; true; false; { int; uint; float32; float64; string }} + } + return c.exprBool(fun) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary_shifts.go b/vendor/github.com/cosmos72/gomacro/fast/binary_shifts.go new file mode 100644 index 0000000..a3faff4 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/binary_shifts.go @@ -0,0 +1,4117 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binary_shifts.go + * + * Created on Apr 08, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" +) + +func (c *Comp) Shl(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + if ze := c.prepareShift(node, xe, ye); ze != nil { + return ze + } + + xc, yc := xe.Const(), ye.Const() + xk, yk := xe.Type.Kind(), ye.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch xk { + case r.Int: + + { + x := x.(func(*Env) int) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int { return x(env) << y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int { return x(env) << y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int { return x(env) << y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int { return x(env) << y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int { return x(env) << y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int { return x(env) << y(env) } + + } + + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int8 { return x(env) << y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int8 { return x(env) << y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int8 { return x(env) << y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int8 { return x(env) << y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int8 { return x(env) << y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int8 { return x(env) << y(env) } + + } + + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int16 { return x(env) << y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int16 { return x(env) << y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int16 { return x(env) << y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int16 { return x(env) << y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int16 { return x(env) << y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int16 { return x(env) << y(env) } + + } + + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int32 { return x(env) << y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int32 { return x(env) << y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int32 { return x(env) << y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int32 { return x(env) << y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int32 { return x(env) << y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int32 { return x(env) << y(env) } + + } + + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int64 { return x(env) << y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int64 { return x(env) << y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int64 { return x(env) << y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int64 { return x(env) << y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int64 { return x(env) << y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int64 { return x(env) << y(env) } + + } + + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) << y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint { + return x(env) << y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint { + return x(env) << y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint { + return x(env) << y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint { + return x(env) << y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint { + return x(env) << y(env) + } + + } + + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint8 { + return x(env) << y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) << y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint8 { + return x(env) << y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint8 { + return x(env) << y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint8 { + return x(env) << y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint8 { + return x(env) << y(env) + } + + } + + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint16 { + return x(env) << y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint16 { + return x(env) << y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) << y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint16 { + return x(env) << y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint16 { + return x(env) << y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint16 { + return x(env) << y(env) + } + + } + + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint32 { + return x(env) << y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint32 { + return x(env) << y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint32 { + return x(env) << y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) << y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint32 { + return x(env) << y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint32 { + return x(env) << y(env) + } + + } + + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint64 { + return x(env) << y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint64 { + return x(env) << y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint64 { + return x(env) << y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint64 { + return x(env) << y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) << y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint64 { + return x(env) << y(env) + } + + } + + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uintptr { + return x(env) << y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uintptr { + return x(env) << y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uintptr { + return x(env) << y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uintptr { + return x(env) << y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uintptr { + return x(env) << y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) << y(env) + } + + } + + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return xe + } + + yv := r.ValueOf(y) + + switch xk { + case r.Int: + + { + x := x.(func(*Env) int) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int { + return x(env) << y + } + + } + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int8 { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) << y + } + + } + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int16 { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) << y + } + + } + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int32 { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) << y + } + + } + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int64 { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) << y + } + + } + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint { + return x(env) << y + } + + } + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint8 { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) << y + } + + } + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint16 { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) << y + } + + } + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint32 { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) << y + } + + } + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint64 { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) << y + } + + } + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) << y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) << y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) << y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) << y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uintptr { + return x(env) << y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) << y + } + + } + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + + switch xk { + case r.Int: + + { + x := int(xv.Int()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int { + return x << y(env) + } + + } + } + + } + case r.Int8: + + { + x := int8(xv.Int()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int8 { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int8 { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int8 { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int8 { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int8 { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int8 { + return x << y(env) + } + + } + } + + } + case r.Int16: + + { + x := int16(xv.Int()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int16 { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int16 { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int16 { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int16 { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int16 { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int16 { + return x << y(env) + } + + } + } + + } + case r.Int32: + + { + x := int32(xv.Int()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int32 { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int32 { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int32 { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int32 { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int32 { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int32 { + return x << y(env) + } + + } + } + + } + case r.Int64: + + { + x := xv.Int() + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int64 { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int64 { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int64 { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int64 { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int64 { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int64 { + return x << y(env) + } + + } + } + + } + case r.Uint: + + { + x := uint(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint { + return x << y(env) + } + + } + } + + } + case r.Uint8: + + { + x := uint8(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint8 { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint8 { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint8 { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint8 { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint8 { + return x << y(env) + } + + } + } + + } + case r.Uint16: + + { + x := uint16(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint16 { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint16 { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint16 { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint16 { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint16 { + return x << y(env) + } + + } + } + + } + case r.Uint32: + + { + x := uint32(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint32 { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint32 { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint32 { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint32 { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint32 { + return x << y(env) + } + + } + } + + } + case r.Uint64: + + { + x := xv.Uint() + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint64 { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint64 { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint64 { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint64 { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint64 { + return x << y(env) + } + + } + } + + } + case r.Uintptr: + + { + x := uintptr(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uintptr { + return x << y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uintptr { + return x << y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uintptr { + return x << y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uintptr { + return x << y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uintptr { + return x << y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x << y(env) + } + + } + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} +func (c *Comp) Shr(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + if ze := c.prepareShift(node, xe, ye); ze != nil { + return ze + } + + xc, yc := xe.Const(), ye.Const() + xk, yk := xe.Type.Kind(), ye.Type.Kind() + + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + + switch xk { + case r.Int: + + { + x := x.(func(*Env) int) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int { return x(env) >> y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int { return x(env) >> y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int { return x(env) >> y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int { return x(env) >> y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int { return x(env) >> y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int { return x(env) >> y(env) } + + } + + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int8 { return x(env) >> y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int8 { return x(env) >> y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int8 { return x(env) >> y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int8 { return x(env) >> y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int8 { return x(env) >> y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int8 { return x(env) >> y(env) } + + } + + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int16 { return x(env) >> y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int16 { return x(env) >> y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int16 { return x(env) >> y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int16 { return x(env) >> y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int16 { return x(env) >> y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int16 { return x(env) >> y(env) } + + } + + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int32 { return x(env) >> y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int32 { return x(env) >> y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int32 { return x(env) >> y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int32 { return x(env) >> y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int32 { return x(env) >> y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int32 { return x(env) >> y(env) } + + } + + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) int64 { return x(env) >> y(env) } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int64 { return x(env) >> y(env) } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int64 { return x(env) >> y(env) } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int64 { return x(env) >> y(env) } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int64 { return x(env) >> y(env) } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int64 { return x(env) >> y(env) } + + } + + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x(env) >> y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint { + return x(env) >> y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint { + return x(env) >> y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint { + return x(env) >> y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint { + return x(env) >> y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint { + return x(env) >> y(env) + } + + } + + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint8 { + return x(env) >> y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x(env) >> y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint8 { + return x(env) >> y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint8 { + return x(env) >> y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint8 { + return x(env) >> y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint8 { + return x(env) >> y(env) + } + + } + + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint16 { + return x(env) >> y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint16 { + return x(env) >> y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x(env) >> y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint16 { + return x(env) >> y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint16 { + return x(env) >> y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint16 { + return x(env) >> y(env) + } + + } + + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint32 { + return x(env) >> y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint32 { + return x(env) >> y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint32 { + return x(env) >> y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x(env) >> y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint32 { + return x(env) >> y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint32 { + return x(env) >> y(env) + } + + } + + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint64 { + return x(env) >> y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint64 { + return x(env) >> y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint64 { + return x(env) >> y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint64 { + return x(env) >> y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x(env) >> y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint64 { + return x(env) >> y(env) + } + + } + + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + switch yk { + case r.Uint: + { + y := y.(func(*Env) uint) + fun = func(env *Env) uintptr { + return x(env) >> y(env) + } + + } + + case r.Uint8: + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uintptr { + return x(env) >> y(env) + } + + } + + case r.Uint16: + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uintptr { + return x(env) >> y(env) + } + + } + + case r.Uint32: + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uintptr { + return x(env) >> y(env) + } + + } + + case r.Uint64: + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uintptr { + return x(env) >> y(env) + } + + } + + case r.Uintptr: + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x(env) >> y(env) + } + + } + + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return xe + } + + yv := r.ValueOf(y) + + switch xk { + case r.Int: + + { + x := x.(func(*Env) int) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int { + return x(env) >> y + } + + } + } + + } + case r.Int8: + + { + x := x.(func(*Env) int8) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int8 { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int8 { + return x(env) >> y + } + + } + } + + } + case r.Int16: + + { + x := x.(func(*Env) int16) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int16 { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int16 { + return x(env) >> y + } + + } + } + + } + case r.Int32: + + { + x := x.(func(*Env) int32) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int32 { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int32 { + return x(env) >> y + } + + } + } + + } + case r.Int64: + + { + x := x.(func(*Env) int64) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) int64 { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) int64 { + return x(env) >> y + } + + } + } + + } + case r.Uint: + + { + x := x.(func(*Env) uint) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint { + return x(env) >> y + } + + } + } + + } + case r.Uint8: + + { + x := x.(func(*Env) uint8) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint8 { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint8 { + return x(env) >> y + } + + } + } + + } + case r.Uint16: + + { + x := x.(func(*Env) uint16) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint16 { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint16 { + return x(env) >> y + } + + } + } + + } + case r.Uint32: + + { + x := x.(func(*Env) uint32) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint32 { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint32 { + return x(env) >> y + } + + } + } + + } + case r.Uint64: + + { + x := x.(func(*Env) uint64) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uint64 { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uint64 { + return x(env) >> y + } + + } + } + + } + case r.Uintptr: + + { + x := x.(func(*Env) uintptr) + switch yk { + case r.Uint: + + { + y := uint(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) >> y + } + + } + case r.Uint8: + + { + y := uint8(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) >> y + } + + } + case r.Uint16: + + { + y := uint16(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) >> y + } + + } + case r.Uint32: + + { + y := uint32(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) >> y + } + + } + case r.Uint64: + + { + y := yv.Uint() + + fun = func(env *Env) uintptr { + return x(env) >> y + } + + } + case r.Uintptr: + + { + y := uintptr(yv.Uint()) + fun = func(env *Env) uintptr { + return x(env) >> y + } + + } + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + + switch xk { + case r.Int: + + { + x := int(xv.Int()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int { + return x >> y(env) + } + + } + } + + } + case r.Int8: + + { + x := int8(xv.Int()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int8 { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int8 { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int8 { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int8 { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int8 { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int8 { + return x >> y(env) + } + + } + } + + } + case r.Int16: + + { + x := int16(xv.Int()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int16 { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int16 { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int16 { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int16 { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int16 { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int16 { + return x >> y(env) + } + + } + } + + } + case r.Int32: + + { + x := int32(xv.Int()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int32 { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int32 { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int32 { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int32 { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int32 { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int32 { + return x >> y(env) + } + + } + } + + } + case r.Int64: + + { + x := xv.Int() + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) int64 { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) int64 { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) int64 { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) int64 { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) int64 { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) int64 { + return x >> y(env) + } + + } + } + + } + case r.Uint: + + { + x := uint(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint { + return x >> y(env) + } + + } + } + + } + case r.Uint8: + + { + x := uint8(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint8 { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint8 { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint8 { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint8 { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint8 { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint8 { + return x >> y(env) + } + + } + } + + } + case r.Uint16: + + { + x := uint16(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint16 { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint16 { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint16 { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint16 { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint16 { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint16 { + return x >> y(env) + } + + } + } + + } + case r.Uint32: + + { + x := uint32(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint32 { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint32 { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint32 { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint32 { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint32 { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint32 { + return x >> y(env) + } + + } + } + + } + case r.Uint64: + + { + x := xv.Uint() + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uint64 { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uint64 { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uint64 { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uint64 { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uint64 { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uint64 { + return x >> y(env) + } + + } + } + + } + case r.Uintptr: + + { + x := uintptr(xv.Uint()) + switch yk { + case r.Uint: + + { + y := y.(func(*Env) uint) + fun = func(env *Env) uintptr { + return x >> y(env) + } + + } + case r.Uint8: + + { + y := y.(func(*Env) uint8) + fun = func(env *Env) uintptr { + return x >> y(env) + } + + } + case r.Uint16: + + { + y := y.(func(*Env) uint16) + fun = func(env *Env) uintptr { + return x >> y(env) + } + + } + case r.Uint32: + + { + y := y.(func(*Env) uint32) + fun = func(env *Env) uintptr { + return x >> y(env) + } + + } + case r.Uint64: + + { + y := y.(func(*Env) uint64) + fun = func(env *Env) uintptr { + return x >> y(env) + } + + } + case r.Uintptr: + + { + y := y.(func(*Env) uintptr) + fun = func(env *Env) uintptr { + return x >> y(env) + } + + } + } + + } + default: + return c.invalidBinaryExpr(node, xe, ye) + + } + } + return exprFun(xe.Type, fun) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary_shifts.gomacro b/vendor/github.com/cosmos72/gomacro/fast/binary_shifts.gomacro new file mode 100644 index 0000000..bb2ce26 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/binary_shifts.gomacro @@ -0,0 +1,264 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * binary_shifts.go + * + * Created on Apr 08, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" +) + +:import ( + "go/ast" + "go/token" + r "reflect" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makekind(typ ast.Node) ast.Node { + t := EvalType(typ) + + // go/ast.SelectorExpr requires the foo in r.foo to be an *ast.Ident, cannot unquote there + kind := ~"{r . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(t.Name())} + return kind +} + + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +// shift, x type and y type are fixed +:macro shift(opnode, xconst, yconst, xtyp, ytyp ast.Node) ast.Node { + + // the return type of Eval() and EvalType() varies. better check early. + xc, yc := Eval(xconst).(bool), Eval(yconst).(bool) + optoken := Eval(opnode).(token.Token) + + if xc == yc { + var expr *ast.BinaryExpr = ~"{x(env) && y(env)} // quasiquote, we modify it destructively + expr.Op = optoken + + return ~"{ + y := y.(func(*Env) ~,ytyp) + fun = func(env *Env) ~,xtyp { + return ~,expr + } + } + } else if yc { + var expr *ast.BinaryExpr = ~"{x(env) && y} // quasiquote, we modify it destructively + expr.Op = optoken + + yconvert := ~'{{}} + if EvalType(ytyp) != nil { + yconv1 := convertvalue1(ytyp, ~'yv) + yconvert = ~"{{y := ~,yconv1}} + } + + return ~"{ + ~,@yconvert + fun = func(env *Env) ~,xtyp { + return ~,expr + } + } + } else { + var expr *ast.BinaryExpr = ~"{x && y(env)} // quasiquote, we modify it destructively + expr.Op = optoken + + return ~"{ + y := y.(func(*Env) ~,ytyp) + fun = func(env *Env) ~,xtyp { + return ~,expr + } + } + } +} + +// shift, x type is fixed. dispatch on y type +:macro shifts(opnode, xconst, yconst, xtyp, ytypes ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + xc, yc := Eval(xconst).(bool), Eval(yconst).(bool) + + ytypelist := ytypes.(*ast.BlockStmt).List + caselist := make([]ast.Stmt, 0, len(ytypelist)) + for _, ytyp := range ytypelist { + t := EvalType(ytyp) + if t.Kind() == r.Int { + // shortcut for all int* types + for _, ytyp := range []ast.Expr{~'int, ~'int8, ~'int16, ~'int32, ~'int64} { + kind := makekind(ytyp) + caselist = append(caselist, ~"{case ~,kind: shift; ~,opnode; ~,xconst; ~,yconst; ~,xtyp; ~,ytyp}) + } + } else if t.Kind() == r.Uint { + // shortcut for all uint* types + for _, ytyp := range []ast.Expr{~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr} { + kind := makekind(ytyp) + caselist = append(caselist, ~"{case ~,kind: shift; ~,opnode; ~,xconst; ~,yconst; ~,xtyp; ~,ytyp}) + } + } else { + kind := makekind(ytyp) + caselist = append(caselist, ~"{case ~,kind: shift; ~,opnode; ~,xconst; ~,yconst; ~,xtyp; ~,ytyp}) + } + } + + swtch := ~"{ switch yk { ~,@caselist } } + if xc { + xconv1 := convertvalue1(xtyp, ~'xv) + return ~"{x := ~,xconv1; ~,swtch } + } else { + return ~"{x := x.(func(*Env) ~,xtyp); ~,swtch } + } +} + +// general shift - dispatch on x type, then on y type +:macro shiftss(opnode, xconst, yconst, xtypes ast.Node, ytypes ast.Node) ast.Node { + xtypelist := xtypes.(*ast.BlockStmt).List + caselist := make([]ast.Stmt, 0, len(xtypelist)) + foundnil := false + for _, typ := range xtypelist { + t := EvalType(typ) + if t == nil { + caselist = append(caselist, ~"{default: shifts; ~,opnode; ~,xconst; ~,yconst; ~,typ; ~,ytypes}) + foundnil = true + + } else if t.Kind() == r.Int { + // shortcut for all int* types + for _, typ := range []ast.Expr{~'int, ~'int8, ~'int16, ~'int32, ~'int64} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: shifts; ~,opnode; ~,xconst; ~,yconst; ~,typ; ~,ytypes}) + } + } else if t.Kind() == r.Uint { + // shortcut for all uint* types + for _, typ := range []ast.Expr{~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr} { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: shifts; ~,opnode; ~,xconst; ~,yconst; ~,typ; ~,ytypes}) + } + } else { + kind := makekind(typ) + caselist = append(caselist, ~"{case ~,kind: shifts; ~,opnode; ~,xconst; ~,yconst; ~,typ; ~,ytypes}) + } + } + + if !foundnil { + caselist = append(caselist, ~'{default: return c.invalidBinaryExpr(node, xe, ye)}) + } + return ~"{ switch xk { ~,@caselist } } +} + + +func (c *Comp) Shl(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + if ze := c.prepareShift(node, xe, ye); ze != nil { + return ze + } + xc, yc := xe.Const(), ye.Const() + xk, yk := xe.Type.Kind(), ye.Type.Kind() + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {shiftss; token.SHL; false; false; {int; uint}; {uint}} + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return xe + } + yv := r.ValueOf(y) + {shiftss; token.SHL; false; true; {int; uint}; {uint}} + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + {shiftss; token.SHL; true; false; {int; uint}; {uint}} + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) Shr(node *ast.BinaryExpr, xe *Expr, ye *Expr) *Expr { + if ze := c.prepareShift(node, xe, ye); ze != nil { + return ze + } + xc, yc := xe.Const(), ye.Const() + xk, yk := xe.Type.Kind(), ye.Type.Kind() + // if both x and y are constants, BinaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + var fun I + if xc == yc { + x, y := xe.Fun, ye.Fun + {shiftss; token.SHR; false; false; {int; uint}; {uint}} + } else if yc { + x := xe.Fun + y := ye.Value + if isLiteralNumber(y, 0) { + return xe + } + yv := r.ValueOf(y) + {shiftss; token.SHR; false; true; {int; uint}; {uint}} + } else { + xv := r.ValueOf(xe.Value) + y := ye.Fun + {shiftss; token.SHR; true; false; {int; uint}; {uint}} + } + return exprFun(xe.Type, fun) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/builtin.go b/vendor/github.com/cosmos72/gomacro/fast/builtin.go new file mode 100644 index 0000000..0d658f6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/builtin.go @@ -0,0 +1,1173 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * builtin.go + * + * Created on: Apr 02, 2017 + * Author: Massimiliano Ghilardi + */ + +package fast + +import ( + "fmt" + "go/ast" + "go/constant" + "go/token" + "io" + r "reflect" + + "github.com/cosmos72/gomacro/ast2" + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +var ( + zeroTypes = []xr.Type{} + rtypeOfSliceOfByte = r.TypeOf([]byte{}) + +/* + typeOfPtrBool = xr.PtrTo(xr.TypeOfBool) + typeOfPtrInt = xr.PtrTo(xr.TypeOfInt) + typeOfPtrInt8 = xr.PtrTo(xr.TypeOfInt) + typeOfPtrInt16 = xr.PtrTo(xr.TypeOfInt16) + typeOfPtrInt32 = xr.PtrTo(xr.TypeOfInt32) + typeOfPtrInt64 = xr.PtrTo(xr.TypeOfInt64) + typeOfPtrUint = xr.PtrTo(xr.TypeOfUint) + typeOfPtrUint8 = xr.PtrTo(xr.TypeOfUint) + typeOfPtrUint16 = xr.PtrTo(xr.TypeOfUint16) + typeOfPtrUint32 = xr.PtrTo(xr.TypeOfUint32) + typeOfPtrUint64 = xr.PtrTo(xr.TypeOfUint64) + typeOfPtrUintptr = xr.PtrTo(xr.TypeOfUintptr) + typeOfPtrFloat32 = xr.PtrTo(xr.TypeOfFloat32) + typeOfPtrFloat64 = xr.PtrTo(xr.TypeOfFloat64) + typeOfPtrComplex64 = xr.PtrTo(xr.TypeOfComplex64) + typeOfPtrComplex128 = xr.PtrTo(xr.TypeOfComplex128) + typeOfPtrString = xr.PtrTo(xr.TypeOfString) +*/ +) + +// =================================== iota =================================== + +func (top *Comp) addIota() { + // https://golang.org/ref/spec#Constants + // "Literal constants, true, false, iota, and certain constant expressions containing only untyped constant operands are untyped." + top.Binds["iota"] = top.BindUntyped(untypedZero) +} + +func (top *Comp) removeIota() { + delete(top.Binds, "iota") +} + +func (top *Comp) incrementIota() { + iota := top.Binds["iota"].Lit.Value.(UntypedLit).Obj + iota = constant.BinaryOp(iota, token.ADD, untypedOne.Obj) + top.Binds["iota"] = top.BindUntyped(UntypedLit{Kind: r.Int, Obj: iota}) +} + +// ============================== initialization =============================== + +func (ce *Interp) addBuiltins() { + universe := ce.Comp.Universe + + // https://golang.org/ref/spec#Constants + // "Literal constants, true, false, iota, and certain constant expressions containing only untyped constant operands are untyped." + ce.DeclConst("false", nil, UntypedLit{r.Bool, constant.MakeBool(false), universe}) + ce.DeclConst("true", nil, UntypedLit{r.Bool, constant.MakeBool(true), universe}) + + // https://golang.org/ref/spec#Variables : "[...] the predeclared identifier nil, which has no type" + ce.DeclConst("nil", nil, nil) + + ce.DeclBuiltin("append", Builtin{compileAppend, 1, base.MaxUint16}) + ce.DeclBuiltin("cap", Builtin{compileCap, 1, 1}) + ce.DeclBuiltin("close", Builtin{compileClose, 1, 1}) + ce.DeclBuiltin("copy", Builtin{compileCopy, 2, 2}) + ce.DeclBuiltin("complex", Builtin{compileComplex, 2, 2}) + ce.DeclBuiltin("delete", Builtin{compileDelete, 2, 2}) + ce.DeclBuiltin("imag", Builtin{compileRealImag, 1, 1}) + ce.DeclBuiltin("len", Builtin{compileLen, 1, 1}) + ce.DeclBuiltin("make", Builtin{compileMake, 1, 3}) + ce.DeclBuiltin("new", Builtin{compileNew, 1, 1}) + ce.DeclBuiltin("panic", Builtin{compilePanic, 1, 1}) + ce.DeclBuiltin("print", Builtin{compilePrint, 0, base.MaxUint16}) + ce.DeclBuiltin("println", Builtin{compilePrint, 0, base.MaxUint16}) + ce.DeclBuiltin("real", Builtin{compileRealImag, 1, 1}) + ce.DeclBuiltin("recover", Builtin{compileRecover, 0, 0}) + // ce.DeclBuiltin("recover", Function{callRecover, ce.Comp.TypeOf((*func() interface{})(nil)).Elem()}) + + tfunI2_Nb := ce.Comp.TypeOf(funI2_Nb) + + ce.DeclEnvFunc("Env", Function{callIdentity, ce.Comp.TypeOf(funI_I)}) + ce.DeclEnvFunc("Eval", Function{callEval, ce.Comp.TypeOf(funI2_I)}) + ce.DeclEnvFunc("EvalType", Function{callEvalType, ce.Comp.TypeOf(funI2_T)}) + ce.DeclEnvFunc("MacroExpand", Function{callMacroExpand, tfunI2_Nb}) + ce.DeclEnvFunc("MacroExpand1", Function{callMacroExpand1, tfunI2_Nb}) + ce.DeclEnvFunc("MacroExpandCodeWalk", Function{callMacroExpandCodeWalk, tfunI2_Nb}) + /* + binds["Parse"] = r.ValueOf(Function{funcParse, 1}) + binds["Read"] = r.ValueOf(ReadString) + binds["ReadDir"] = r.ValueOf(callReadDir) + binds["ReadFile"] = r.ValueOf(callReadFile) + binds["ReadMultiline"] = r.ValueOf(ReadMultiline) + binds["Slice"] = r.ValueOf(callSlice) + binds["String"] = r.ValueOf(func(args ...interface{}) string { + return env.toString("", args...) + }) + // return multiple values, extracting the concrete type of each interface + binds["Values"] = r.ValueOf(Function{funcValues, -1}) + */ + + // --------- types --------- + c := ce.Comp + for _, t := range c.Universe.BasicTypes { + ce.DeclType(t) + } + ce.DeclTypeAlias("byte", c.TypeOfUint8()) + ce.DeclTypeAlias("rune", c.TypeOfInt32()) + ce.DeclType(c.TypeOfError()) + + /* + // --------- proxies --------- + if env.Proxies == nil { + env.Proxies = make(map[string]Type) + } + proxies := env.Proxies + + proxies["error", TypeOf(*Error_builtin)(nil)).Elem() + */ +} + +// ============================= builtin functions ============================= + +// --- append() --- + +func compileAppend(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + n := len(node.Args) + args := make([]*Expr, n) + + args[0] = c.Expr1(node.Args[0]) + t0 := args[0].Type + if t0.Kind() != r.Slice { + c.Errorf("first argument to %s must be slice; have <%s>", sym.Name, t0) + return nil + } + telem := t0.Elem() + + if node.Ellipsis != token.NoPos { + if n != 2 { + return c.badBuiltinCallArgNum(sym.Name+"(arg1, arg2...)", 2, 2, node.Args) + } + telem = t0 // second argument is a slice too + } + for i := 1; i < n; i++ { + argi := c.Expr1(node.Args[i]) + if argi.Const() { + argi.ConstTo(telem) + } else if ti := argi.Type; !xr.SameType(ti, telem) && (ti == nil || !ti.AssignableTo(telem)) { + return c.badBuiltinCallArgType(sym.Name, node.Args[i], ti, telem) + } + args[i] = argi + } + t := xr.FuncOf([]xr.Type{t0, t0}, []xr.Type{t0}, true) // compile as reflect.Append(), which is variadic + sym.Type = t + fun := exprLit(Lit{Type: t, Value: r.Append}, &sym) + return &Call{ + Fun: fun, + Args: args, + OutTypes: []xr.Type{t0}, + Const: false, + Ellipsis: node.Ellipsis != token.NoPos, + } +} + +// --- cap() --- + +func callCap(val r.Value) int { + return val.Cap() +} + +func compileCap(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + // argument of builtin cap() cannot be a literal + arg := c.Expr1(node.Args[0]) + tin := arg.Type + tout := c.TypeOfInt() + switch tin.Kind() { + // no cap() on r.Map, see + // https://golang.org/ref/spec#Length_and_capacity + // and https://golang.org/pkg/reflect/#Value.Cap + case r.Array, r.Chan, r.Slice: + // ok + case r.Ptr: + if tin.Elem().Kind() == r.Array { + // cap() on pointer to array + arg = c.Deref(arg) + tin = arg.Type + break + } + fallthrough + default: + return c.badBuiltinCallArgType(sym.Name, node.Args[0], tin, "array, channel, slice, pointer to array") + } + t := xr.FuncOf([]xr.Type{tin}, []xr.Type{tout}, false) + sym.Type = t + fun := exprLit(Lit{Type: t, Value: callCap}, &sym) + // capacity of arrays is part of their type: cannot change at runtime, we could optimize it. + // TODO https://golang.org/ref/spec#Length_and_capacity specifies + // when the array passed to cap() is evaluated and when is not... + return newCall1(fun, arg, arg.Const(), tout) +} + +// --- close() --- + +func callClose(val r.Value) { + val.Close() +} + +func compileClose(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + arg := c.Expr1(node.Args[0]) + tin := arg.Type + if tin.Kind() != r.Chan { + return c.badBuiltinCallArgType(sym.Name, node.Args[0], tin, "channel") + } + t := xr.FuncOf([]xr.Type{tin}, zeroTypes, false) + sym.Type = t + fun := exprLit(Lit{Type: t, Value: callClose}, &sym) + return newCall1(fun, arg, false) +} + +// --- complex() --- + +func callComplex64(re float32, im float32) complex64 { + return complex(re, im) +} + +func callComplex128(re float64, im float64) complex128 { + return complex(re, im) +} + +func compileComplex(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + re := c.Expr1(node.Args[0]) + im := c.Expr1(node.Args[1]) + if re.Untyped() { + if im.Untyped() { + re.ConstTo(c.TypeOfFloat64()) + im.ConstTo(c.TypeOfFloat64()) + } else { + re.ConstTo(im.Type) + } + } else if im.Untyped() { + im.ConstTo(re.Type) + } + c.toSameFuncType(node, re, im) + kre := base.KindToCategory(re.Type.Kind()) + if re.Const() && kre != r.Float64 { + re.ConstTo(c.TypeOfFloat64()) + kre = r.Float64 + } + kim := base.KindToCategory(im.Type.Kind()) + if im.Const() && kim != r.Float64 { + im.ConstTo(c.TypeOfFloat64()) + kim = r.Float64 + } + if kre != r.Float64 { + c.Errorf("invalid operation: %v (arguments have type %v, expected floating-point)", + node, re.Type) + } + if kim != r.Float64 { + c.Errorf("invalid operation: %v (arguments have type %v, expected floating-point)", + node, im.Type) + } + tin := re.Type + k := re.Type.Kind() + var tout xr.Type + var call I + switch k { + case r.Float32: + tout = c.TypeOfComplex64() + call = callComplex64 + case r.Float64: + tout = c.TypeOfComplex128() + call = callComplex128 + default: + return c.badBuiltinCallArgType(sym.Name, node.Args[0], tin, "floating point") + } + touts := []xr.Type{tout} + t := xr.FuncOf([]xr.Type{tin}, touts, false) + sym.Type = t + fun := exprLit(Lit{Type: t, Value: call}, &sym) + // complex() of two constants is constant: it can be computed at compile time + return &Call{Fun: fun, Args: []*Expr{re, im}, Const: re.Const() && im.Const(), OutTypes: touts} +} + +// --- copy() --- + +func copyStringToBytes(dst []byte, src string) int { + // reflect.Copy does not support this case... use the compiler support + return copy(dst, src) +} + +func compileCopy(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + args := []*Expr{ + c.Expr1(node.Args[0]), + c.Expr1(node.Args[1]), + } + if args[1].Const() { + // we also accept a string literal as second argument + args[1].ConstTo(args[1].DefaultType()) + } + t0, t1 := args[0].Type, args[1].Type + var funCopy I = r.Copy + if t0 == nil || t0.Kind() != r.Slice || !t0.AssignableTo(xr.SliceOf(t0.Elem())) { + // https://golang.org/ref/spec#Appending_and_copying_slices + // copy [...] arguments must have identical element type T and must be assignable to a slice of type []T. + c.Errorf("first argument to copy should be slice; have %v <%v>", node.Args[0], t0) + return nil + } else if t0.Elem().Kind() == r.Uint8 && t1.Kind() == r.String { + // [...] As a special case, copy also accepts a destination argument assignable to type []byte + // with a source argument of a string type. This form copies the bytes from the string into the byte slice. + funCopy = copyStringToBytes + } else if t1 == nil || t1.Kind() != r.Slice || !t1.AssignableTo(xr.SliceOf(t1.Elem())) { + c.Errorf("second argument to copy should be slice or string; have %v <%v>", node.Args[1], t1) + return nil + } else if !xr.SameType(t0.Elem(), t1.Elem()) { + c.Errorf("arguments to copy have different element types: <%v> and <%v>", t0.Elem(), t1.Elem()) + } + outtypes := []xr.Type{c.TypeOfInt()} + t := xr.FuncOf([]xr.Type{t0, t1}, outtypes, false) + sym.Type = t + fun := exprLit(Lit{Type: t, Value: funCopy}, &sym) + return &Call{Fun: fun, Args: args, OutTypes: outtypes, Const: false} +} + +// --- delete() --- + +// use whatever calling convention is convenient: reflect.Values, interface{}s, primitive types... +// as long as call_builtin supports it, we're fine +func callDelete(vmap r.Value, vkey r.Value) { + vmap.SetMapIndex(vkey, base.Nil) +} + +func compileDelete(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + emap := c.Expr1(node.Args[0]) + ekey := c.Expr1(node.Args[1]) + tmap := emap.Type + if tmap.Kind() != r.Map { + c.Errorf("first argument to delete must be map; have %v", tmap) + return nil + } + tkey := tmap.Key() + if ekey.Const() { + ekey.ConstTo(tkey) + } else if ekey.Type == nil || !ekey.Type.AssignableTo(tkey) { + c.Errorf("cannot use %v <%v> as type <%v> in delete", node.Args[1], ekey.Type, tkey) + } + t := xr.FuncOf([]xr.Type{tmap, tkey}, zeroTypes, false) + sym.Type = t + fun := exprLit(Lit{Type: t, Value: callDelete}, &sym) + return &Call{Fun: fun, Args: []*Expr{emap, ekey}, OutTypes: zeroTypes, Const: false} +} + +// --- Env() --- + +func funI_I(interface{}) interface{} { + return nil +} + +// we can use whatever signature we want, as long as call_builtin supports it +func callIdentity(v r.Value) r.Value { + return v +} + +// --- Eval() --- + +func funI2_I(interface{}, interface{}) interface{} { + return nil +} + +func callEval(argv r.Value, interpv r.Value) r.Value { + if !argv.IsValid() { + return argv + } + form := ast2.AnyToAst(argv.Interface(), "Eval") + form = base.SimplifyAstForQuote(form, true) + + interp := interpv.Interface().(*Interp) + e := interp.CompileAst(form) + return interp.RunExpr1(e) +} + +// --- EvalType() --- + +func funI2_T(interface{}, interface{}) r.Type { + return nil +} + +func callEvalType(argv r.Value, interpv r.Value) r.Value { + if !argv.IsValid() { + return zeroOfReflectType + } + form := ast2.AnyToAst(argv.Interface(), "EvalType") + form = base.UnwrapTrivialAst(form) + node := form.Interface().(ast.Expr) + + interp := interpv.Interface().(*Interp) + t := interp.Comp.compileTypeOrNil(node) + if t == nil { + return zeroOfReflectType + } + return r.ValueOf(t.ReflectType()) +} + +// --- len() --- + +func callLenValue(val r.Value) int { + return val.Len() +} + +func callLenString(val string) int { + return len(val) +} + +func compileLen(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + arg := c.Expr1(node.Args[0]) + if arg.Const() { + arg.ConstTo(arg.DefaultType()) + } + tin := arg.Type + tout := c.TypeOfInt() + switch tin.Kind() { + case r.Array, r.Chan, r.Map, r.Slice, r.String: + // ok + case r.Ptr: + if tin.Elem().Kind() == r.Array { + // len() on pointer to array + arg = c.Deref(arg) + tin = arg.Type + break + } + fallthrough + default: + return c.badBuiltinCallArgType(sym.Name, node.Args[0], tin, "array, channel, map, slice, string, pointer to array") + } + t := xr.FuncOf([]xr.Type{tin}, []xr.Type{tout}, false) + sym.Type = t + fun := exprLit(Lit{Type: t, Value: callLenValue}, &sym) + if tin.Kind() == r.String { + fun.Value = callLenString // optimization + } + // length of arrays is part of their type: cannot change at runtime, we could optimize it. + // TODO https://golang.org/ref/spec#Length_and_capacity specifies + // when the array passed to len() is evaluated and when is not... + return newCall1(fun, arg, arg.Const(), tout) +} + +// --- MacroExpand(), MacroExpand1(), MacroExpandCodeWalk() --- + +func funI2_Nb(interface{}, interface{}) (ast.Node, bool) { + return nil, false +} + +func callMacroExpand(argv r.Value, interpv r.Value) (r.Value, r.Value) { + return callMacroExpandDispatch(argv, interpv, "MacroExpand") +} + +func callMacroExpand1(argv r.Value, interpv r.Value) (r.Value, r.Value) { + return callMacroExpandDispatch(argv, interpv, "MacroExpand1") +} + +func callMacroExpandCodeWalk(argv r.Value, interpv r.Value) (r.Value, r.Value) { + return callMacroExpandDispatch(argv, interpv, "MacroExpandCodeWalk") +} + +func callMacroExpandDispatch(argv r.Value, interpv r.Value, caller string) (r.Value, r.Value) { + if !argv.IsValid() { + return r.Zero(rtypeOfNode), base.False + } + form := ast2.AnyToAst(argv.Interface(), caller) + form = base.SimplifyAstForQuote(form, true) + + interp := interpv.Interface().(*Interp) + c := interp.Comp + + var flag bool + switch caller { + default: + form, flag = c.MacroExpand(form) + case "MacroExpand1": + form, flag = c.MacroExpand1(form) + case "MacroExpandCodeWalk": + form, flag = c.MacroExpandCodewalk(form) + } + flagv := base.False + if flag { + flagv = base.True + } + return r.ValueOf(form.Interface()).Convert(rtypeOfNode), flagv +} + +// --- make() --- + +func makeChan1(t r.Type) r.Value { + return r.MakeChan(t, 0) +} + +func makeMap2(t r.Type, n int) r.Value { + // reflect.MakeMap cannot specify initial capacity + return r.MakeMap(t) +} + +func makeSlice2(t r.Type, n int) r.Value { + // reflect.MakeSlice requires capacity + return r.MakeSlice(t, n, n) +} + +func compileMake(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + nargs := len(node.Args) + var nmin, nmax uint16 = 1, 2 + tin := c.Type(node.Args[0]) + var funMakes [4]I + switch tin.Kind() { + case r.Chan: + funMakes[1] = makeChan1 + funMakes[2] = r.MakeChan + case r.Map: + funMakes[1] = r.MakeMap + funMakes[2] = makeMap2 + case r.Slice: + nmin, nmax = 2, 3 + funMakes[2] = makeSlice2 + funMakes[3] = r.MakeSlice + default: + return c.badBuiltinCallArgType(sym.Name, node.Args[0], tin, "channel, map, slice") + } + if nargs < int(nmin) || nargs > int(nmax) { + return c.badBuiltinCallArgNum(sym.Name+"()", nmin, nmax, node.Args) + } + args := make([]*Expr, nargs) + argtypes := make([]xr.Type, nargs) + argtypes[0] = c.TypeOfInterface() + args[0] = c.exprValue(argtypes[0], tin.ReflectType()) // no need to build TypeOfReflectType + te := c.TypeOfInt() + for i := 1; i < nargs; i++ { + argi := c.Expr1(node.Args[i]) + if argi.Const() { + argi.ConstTo(te) + } else if ti := argi.Type; ti == nil || (!xr.SameType(ti, te) && !ti.AssignableTo(te)) { + return c.badBuiltinCallArgType(sym.Name, node.Args[i], ti, te) + } + args[i] = argi + argtypes[i] = te + } + outtypes := []xr.Type{tin} + t := xr.FuncOf(argtypes, outtypes, false) + sym.Type = t + funMake := funMakes[nargs] + if funMake == nil { + c.Errorf("internal error: no make() alternative to call for %v with %d arguments", tin, nargs) + return nil + } + fun := exprLit(Lit{Type: t, Value: funMake}, &sym) + return &Call{Fun: fun, Args: args, OutTypes: outtypes, Const: false} +} + +// --- new() --- + +func compileNew(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + tin := c.Type(node.Args[0]) + tout := xr.PtrTo(tin) + t := xr.FuncOf([]xr.Type{c.TypeOfInterface()}, []xr.Type{tout}, false) // no need to build TypeOfReflectType + sym.Type = t + fun := exprLit(Lit{Type: t, Value: r.New}, &sym) + arg := c.exprValue(c.TypeOfInterface(), tin.ReflectType()) + return newCall1(fun, arg, false, tout) +} + +// --- panic() --- + +func callPanic(arg interface{}) { + panic(arg) +} + +func compilePanic(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + arg := c.Expr1(node.Args[0]) + arg.To(c.TypeOfInterface()) + t := c.TypeOf(callPanic) + sym.Type = t + fun := exprLit(Lit{Type: t, Value: callPanic}, &sym) + return newCall1(fun, arg, false) +} + +// --- print(), println() --- + +func callPrint(out interface{}, args ...interface{}) { + fmt.Fprint(out.(io.Writer), args...) +} + +func callPrintln(out interface{}, args ...interface{}) { + fmt.Fprintln(out.(io.Writer), args...) +} + +func getStdout(env *Env) r.Value { + return r.ValueOf(env.ThreadGlobals.Stdout) +} + +func compilePrint(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + args := c.Exprs(node.Args) + for _, arg := range args { + arg.To(c.TypeOfInterface()) + } + arg0 := exprFun(c.TypeOfInterface(), getStdout) // no need to build TypeOfIoWriter + args = append([]*Expr{arg0}, args...) + + t := c.TypeOf(callPrint) + sym.Type = t + call := callPrint + if sym.Name == "println" { + call = callPrintln + } + fun := exprLit(Lit{Type: t, Value: call}, &sym) + return &Call{Fun: fun, Args: args, OutTypes: zeroTypes, Const: false, Ellipsis: node.Ellipsis != token.NoPos} +} + +// --- real() and imag() --- + +func callReal32(val complex64) float32 { + return real(val) +} + +func callReal64(val complex128) float64 { + return real(val) +} + +func callImag32(val complex64) float32 { + return imag(val) +} + +func callImag64(val complex128) float64 { + return imag(val) +} + +func compileRealImag(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + arg := c.Expr1(node.Args[0]) + if arg.Const() { + arg.ConstTo(arg.DefaultType()) + } + tin := arg.Type + var tout xr.Type + var call I + switch tin.Kind() { + case r.Complex64: + tout = c.TypeOfFloat32() + if sym.Name == "real" { + call = callReal32 + } else { + call = callImag32 + } + case r.Complex128: + tout = c.TypeOfFloat64() + if sym.Name == "real" { + call = callReal64 + } else { + call = callImag64 + } + default: + return c.badBuiltinCallArgType(sym.Name, node.Args[0], tin, "complex") + } + t := xr.FuncOf([]xr.Type{tin}, []xr.Type{tout}, false) + sym.Type = t + fun := exprLit(Lit{Type: t, Value: call}, &sym) + // real() and imag() of a constant are constants: they can be computed at compile time + return newCall1(fun, arg, arg.Const(), tout) +} + +var nilInterface = r.Zero(base.TypeOfInterface) + +// we can use whatever signature we want, as long as call_builtin supports it +func callRecover(v r.Value) r.Value { + env := v.Interface().(*Env) + g := env.ThreadGlobals + debug := g.Options&base.OptDebugPanicRecover != 0 + if !g.IsDefer { + if debug { + base.Debugf("recover() not directly inside a defer") + } + return nilInterface + } + if g.PanicFun == nil { + if debug { + base.Debugf("recover() no panic") + } + return nilInterface + } + if g.DeferOfFun != g.PanicFun { + if debug { + base.Debugf("recover() inside defer of function %p, not defer of the current panicking function %p", g.DeferOfFun, g.PanicFun) + } + return nilInterface + } + rec := g.Panic + if rec == nil { + if debug { + base.Debugf("recover() consuming current panic: nil") + } + v = nilInterface + } else { + if debug { + base.Debugf("recover() consuming current panic: %v <%v>", rec, r.TypeOf(rec)) + } + v = r.ValueOf(rec).Convert(base.TypeOfInterface) // keep the interface{} type + } + // consume the current panic + g.Panic = nil + g.PanicFun = nil + return v +} + +func argEnv(env *Env) r.Value { + return r.ValueOf(env) +} + +func compileRecover(c *Comp, sym Symbol, node *ast.CallExpr) *Call { + ti := c.TypeOfInterface() + t := xr.FuncOf([]xr.Type{ti}, []xr.Type{ti}, false) + sym.Type = t + fun := exprLit(Lit{Type: t, Value: callRecover}, &sym) + arg := exprX1(ti, argEnv) + return newCall1(fun, arg, false, ti) +} + +// ============================ support functions ============================= + +// call_builtin compiles a call to a builtin function: append, cap, copy, delete, len, make, new... +func (c *Comp) call_builtin(call *Call) I { + // builtin functions are always literals, i.e. funindex == NoIndex thus not stored in Env.Binds[] + // we must retrieve them directly from c.Fun.Value + if !call.Fun.Const() { + base.Errorf("internal error: call_builtin() invoked for non-constant function %#v. use one of the callXretY() instead", call.Fun) + } + var name string + if call.Fun.Sym != nil { + name = call.Fun.Sym.Name + } + args := call.Args + argfuns := make([]I, len(args)) + for i, arg := range args { + argfuns[i] = arg.WithFun() + } + if false { + argtypes := make([]xr.Type, len(args)) + for i, arg := range args { + argtypes[i] = arg.Type + } + // Debugf("compiling builtin %s() <%v> with arg types %v", name, TypeOf(c.Fun.Value), argtypes) + } + var ret I + switch fun := call.Fun.Value.(type) { + case func(float32, float32) complex64: // complex + arg0fun := argfuns[0].(func(*Env) float32) + arg1fun := argfuns[1].(func(*Env) float32) + if name == "complex" { + if args[0].Const() { + arg0 := args[0].Value.(float32) + ret = func(env *Env) complex64 { + arg1 := arg1fun(env) + return complex(arg0, arg1) + } + } else if args[1].Const() { + arg1 := args[1].Value.(float32) + ret = func(env *Env) complex64 { + arg0 := arg0fun(env) + return complex(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return complex(arg0, arg1) + } + } + } else { + ret = func(env *Env) complex64 { + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + case func(float64, float64) complex128: // complex + arg0fun := argfuns[0].(func(*Env) float64) + arg1fun := argfuns[1].(func(*Env) float64) + if name == "complex" { + if args[0].Const() { + arg0 := args[0].Value.(float64) + ret = func(env *Env) complex128 { + arg1 := arg1fun(env) + return complex(arg0, arg1) + } + } else if args[1].Const() { + arg1 := args[1].Value.(float64) + ret = func(env *Env) complex128 { + arg0 := arg0fun(env) + return complex(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return complex(arg0, arg1) + } + } + } else { + ret = func(env *Env) complex128 { + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + case func(complex64) float32: // real(), imag() + argfun := argfuns[0].(func(*Env) complex64) + if name == "real" { + ret = func(env *Env) float32 { + arg := argfun(env) + return real(arg) + } + } else if name == "imag" { + ret = func(env *Env) float32 { + arg := argfun(env) + return imag(arg) + } + } else { + ret = func(env *Env) float32 { + arg := argfun(env) + return fun(arg) + } + } + case func(complex128) float64: // real(), imag() + argfun := argfuns[0].(func(*Env) complex128) + if name == "real" { + ret = func(env *Env) float64 { + arg := argfun(env) + return real(arg) + } + } else if name == "imag" { + ret = func(env *Env) float64 { + arg := argfun(env) + return imag(arg) + } + } else { + ret = func(env *Env) float64 { + arg := argfun(env) + return fun(arg) + } + } + case func(string) int: // len(string) + argfun := argfuns[0].(func(*Env) string) + if name == "len" { + ret = func(env *Env) int { + arg := argfun(env) + return len(arg) + } + } else { + ret = func(env *Env) int { + arg := argfun(env) + return fun(arg) + } + } + case func([]byte, string) int: // copy([]byte, string) + arg0fun := args[0].AsX1() + if args[1].Const() { + // string is a literal + arg1const := args[1].Value.(string) + ret = func(env *Env) int { + // arg0 is "assignable to []byte" + arg0 := arg0fun(env) + if arg0.Type() != rtypeOfSliceOfByte { + arg0 = arg0.Convert(rtypeOfSliceOfByte) + } + return fun(arg0.Interface().([]byte), arg1const) + } + } else { + arg1fun := args[1].Fun.(func(*Env) string) + ret = func(env *Env) int { + // arg0 is "assignable to []byte" + arg0 := arg0fun(env) + if arg0.Type() != rtypeOfSliceOfByte { + arg0 = arg0.Convert(rtypeOfSliceOfByte) + } + arg1 := arg1fun(env) + return fun(arg0.Interface().([]byte), arg1) + } + } + case func(interface{}): // panic() + argfunsX1 := call.MakeArgfunsX1() + argfun := argfunsX1[0] + if name == "panic" { + ret = func(env *Env) { + arg := argfun(env).Interface() + panic(arg) + } + } else { + ret = func(env *Env) { + arg := argfun(env).Interface() + fun(arg) + } + } + case func(interface{}, ...interface{}): // print, println() + argfunsX1 := call.MakeArgfunsX1() + if call.Ellipsis { + argfuns := [2]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + ret = func(env *Env) { + arg := argfuns[0](env).Interface() + argslice := argfuns[1](env).Interface().([]interface{}) + fun(arg, argslice...) + } + } else { + ret = func(env *Env) { + args := make([]interface{}, len(argfunsX1)) + for i, argfun := range argfunsX1 { + args[i] = argfun(env).Interface() + } + fun(args[0], args[1:]...) + } + } + case func(r.Value): // close() + argfun := call.MakeArgfunsX1()[0] + if name == "close" { + ret = func(env *Env) { + arg := argfun(env) + arg.Close() + } + } else { + ret = func(env *Env) { + arg := argfun(env) + fun(arg) + } + } + case func(r.Value) int: // cap(), len() + argfun := call.MakeArgfunsX1()[0] + ret = func(env *Env) int { + arg := argfun(env) + return fun(arg) + } + case func(r.Value) r.Value: // Env() + argfun := call.MakeArgfunsX1()[0] + if name == "Env" { + ret = func(env *Env) r.Value { + return argfun(env) + } + } else { + ret = func(env *Env) r.Value { + arg0 := argfun(env) + return fun(arg0) + } + } + case func(r.Value, r.Value): // delete() + argfunsX1 := call.MakeArgfunsX1() + argfuns := [2]func(env *Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + ret = func(env *Env) { + arg0 := argfuns[0](env) + arg1 := argfuns[1](env) + fun(arg0, arg1) + } + case func(r.Value, r.Value) int: // copy() + argfunsX1 := call.MakeArgfunsX1() + argfuns := [2]func(env *Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + ret = func(env *Env) int { + arg0 := argfuns[0](env) + arg1 := argfuns[1](env) + return fun(arg0, arg1) + } + case func(r.Value, r.Value) r.Value: // Eval(), EvalType() + argfunsX1 := call.MakeArgfunsX1() + argfuns := [2]func(env *Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + ret = func(env *Env) r.Value { + arg0 := argfuns[0](env) + arg1 := argfuns[1](env) + return fun(arg0, arg1) + } + case func(r.Value, r.Value) (r.Value, r.Value): // MacroExpand*() + argfunsX1 := call.MakeArgfunsX1() + argfuns := [2]func(env *Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + ret = func(env *Env) (r.Value, []r.Value) { + arg0 := argfuns[0](env) + arg1 := argfuns[1](env) + ret0, ret1 := fun(arg0, arg1) + return ret0, []r.Value{ret0, ret1} + } + case func(r.Value, ...r.Value) r.Value: // append() + argfunsX1 := call.MakeArgfunsX1() + if call.Ellipsis { + argfuns := [2]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + if name == "append" { + ret = func(env *Env) r.Value { + arg0 := argfuns[0](env) + arg1 := argfuns[1](env) + argslice := unwrapSlice(arg1) + return r.Append(arg0, argslice...) + } + } else { + ret = func(env *Env) r.Value { + arg0 := argfuns[0](env) + arg1 := argfuns[1](env) + argslice := unwrapSlice(arg1) + return fun(arg0, argslice...) + } + } + } else { + if name == "append" { + ret = func(env *Env) r.Value { + args := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + args[i] = argfun(env) + } + return r.Append(args[0], args[1:]...) + } + } else { + ret = func(env *Env) r.Value { + args := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + args[i] = argfun(env) + } + return fun(args[0], args[1:]...) + } + } + } + case func(r.Type) r.Value: // new(), make() + arg0 := args[0].Value.(r.Type) + if name == "new" { + ret = func(env *Env) r.Value { + return r.New(arg0) + } + } else { + ret = func(env *Env) r.Value { + return fun(arg0) + } + } + case func(r.Type, int) r.Value: // make() + arg0 := args[0].Value.(r.Type) + arg1fun := argfuns[1].(func(*Env) int) + ret = func(env *Env) r.Value { + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + case func(r.Type, int, int) r.Value: // make() + arg0 := args[0].Value.(r.Type) + arg1fun := argfuns[1].(func(*Env) int) + arg2fun := argfuns[2].(func(*Env) int) + ret = func(env *Env) r.Value { + arg1 := arg1fun(env) + arg2 := arg2fun(env) + return fun(arg0, arg1, arg2) + } + default: + base.Errorf("unimplemented call_builtin() for function type %v", r.TypeOf(fun)) + } + return ret +} + +// unwrapSlice accepts a reflect.Value with kind == reflect.Array, Slice or String +// and returns slice of its elements, each wrapped in a reflect.Value +func unwrapSlice(arg r.Value) []r.Value { + n := arg.Len() + slice := make([]r.Value, n) + for i := range slice { + slice[i] = arg.Index(i) + } + return slice +} + +// callBuiltin invokes the appropriate compiler for a call to a builtin function: cap, copy, len, make, new... +func (c *Comp) callBuiltin(node *ast.CallExpr, fun *Expr) *Call { + builtin := fun.Value.(Builtin) + if fun.Sym == nil { + c.Errorf("invalid call to non-name builtin: %v", node) + return nil + } + nmin := builtin.ArgMin + nmax := builtin.ArgMax + n := len(node.Args) + if n < int(nmin) || n > int(nmax) { + return c.badBuiltinCallArgNum(fun.Sym.Name+"()", nmin, nmax, node.Args) + } + call := builtin.Compile(c, *fun.Sym, node) + if call != nil { + call.Builtin = true + } + return call +} + +// callFunction compiles a call to a function that accesses interpreter's *CompEnv +func (c *Comp) callFunction(node *ast.CallExpr, fun *Expr) (newfun *Expr, lastarg *Expr) { + function := fun.Value.(Function) + t := function.Type + var sym *Symbol + if fun.Sym != nil { + symcopy := *fun.Sym + symcopy.Type = t + sym = &symcopy + } + newfun = exprLit(Lit{Type: t, Value: function.Fun}, sym) + if len(node.Args) < t.NumIn() { + lastarg = exprX1(c.TypeOfInterface(), func(env *Env) r.Value { + return r.ValueOf(&Interp{Comp: c, env: env}) + }) + } + return newfun, lastarg +} + +func (c *Comp) badBuiltinCallArgNum(name interface{}, nmin uint16, nmax uint16, args []ast.Expr) *Call { + prefix := "not enough" + nargs := len(args) + if nargs > int(nmax) { + prefix = "too many" + } + str := fmt.Sprintf("%d", nmin) + if nmax <= nmin { + } else if nmax == nmin+1 { + str = fmt.Sprintf("%s or %d", str, nmax) + } else if nmax < base.MaxUint16 { + str = fmt.Sprintf("%s to %d", str, nmax) + } else { + str = fmt.Sprintf("%s or more", str) + } + c.Errorf("%s arguments in call to builtin %v: expecting %s, found %d: %v", prefix, name, str, nargs, args) + return nil +} + +func (c *Comp) badBuiltinCallArgType(name string, arg ast.Expr, tactual xr.Type, texpected interface{}) *Call { + c.Errorf("cannot use %v <%v> as %v in builtin %s()", arg, tactual, texpected, name) + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call.go b/vendor/github.com/cosmos72/gomacro/fast/call.go new file mode 100644 index 0000000..7c0a9df --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call.go @@ -0,0 +1,384 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call.go + * + * Created on Apr 15, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "bytes" + "fmt" + "go/ast" + "go/token" + r "reflect" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +type Call struct { + Fun *Expr + Args []*Expr + OutTypes []xr.Type + Builtin bool // if true, call is a builtin function + Const bool // if true, call has no side effects and always returns the same result => it can be invoked at compile time + Ellipsis bool // if true, must use reflect.Value.CallSlice or equivalent to invoke the function +} + +func newCall1(fun *Expr, arg *Expr, isconst bool, outtypes ...xr.Type) *Call { + return &Call{ + Fun: fun, + Args: []*Expr{arg}, + OutTypes: outtypes, + Const: isconst, + } +} + +func (call *Call) MakeArgfunsX1() []func(*Env) r.Value { + args := call.Args + argfuns := make([]func(*Env) r.Value, len(args)) + for i, arg := range args { + argfuns[i] = arg.AsX1() + } + return argfuns +} + +// CallExpr compiles a function call or a type conversion +func (c *Comp) CallExpr(node *ast.CallExpr) *Expr { + var fun *Expr + if len(node.Args) == 1 { + var t xr.Type + fun, t = c.Expr1OrType(node.Fun) + if t != nil { + return c.Convert(node.Args[0], t) + } + } + call := c.prepareCall(node, fun) + return c.call_any(call) +} + +// callExpr compiles the common part between CallExpr and Go statement +func (c *Comp) prepareCall(node *ast.CallExpr, fun *Expr) *Call { + if fun == nil { + fun = c.Expr1(node.Fun) + } + t := fun.Type + var builtin bool + var lastarg *Expr + if xr.SameType(t, c.TypeOfBuiltin()) { + return c.callBuiltin(node, fun) + } else if xr.SameType(t, c.TypeOfFunction()) { + fun, lastarg = c.callFunction(node, fun) + t = fun.Type + builtin = true + } + if t.Kind() != r.Func { + c.Errorf("call of non-function: %v <%v>", node.Fun, t) + return nil + } + var args []*Expr + if len(node.Args) == 1 { + // support foo(bar()) where bar() returns multiple values + arg := c.Expr(node.Args[0]) + if arg.NumOut() == 0 { + c.Errorf("function argument returns zero values: %v ", node.Args[0]) + } + args = []*Expr{arg} + } else { + args = c.Exprs(node.Args) + } + if lastarg != nil { + args = append(args, lastarg) + } + ellipsis := node.Ellipsis != token.NoPos + c.checkCallArgs(node, t, args, ellipsis) + + outn := t.NumOut() + outtypes := make([]xr.Type, outn) + for i := 0; i < outn; i++ { + outtypes[i] = t.Out(i) + } + return &Call{Fun: fun, Args: args, OutTypes: outtypes, Builtin: builtin, Ellipsis: ellipsis} +} + +// call_any emits a compiled function call +func (c *Comp) call_any(call *Call) *Expr { + expr := &Expr{} + tout := call.OutTypes + nout := len(tout) + expr.SetTypes(tout) + + maxdepth := c.Depth + // functions imported from other packages are constant too... + // but call_builtin does not know about them + if call.Fun.Const() { + if call.Builtin { + expr.Fun = c.call_builtin(call) + } else { + // normal calls do not expect function to be a constant. + call.Fun.WithFun() + } + } + + if expr.Fun != nil { + // done already + } else if len(call.Args) == 1 && call.Fun.Type.NumIn() > 1 { + // support foo(bar()) where bar() returns multiple values + expr.Fun = call_multivalue(call, maxdepth) + } else if nout == 0 { + expr.Fun = c.call_ret0(call, maxdepth) + } else if nout == 1 { + expr.Fun = c.call_ret1(call, maxdepth) + } else { + expr.Fun = c.call_ret2plus(call, maxdepth) + } + // constant propagation - only if function returns a single value + if call.Const && len(call.OutTypes) == 1 { + expr.EvalConst(CompileDefaults) + // c.Debugf("pre-computed result of constant call %v: %v <%v>", call, expr.Value, TypeOf(expr.Value)) + } + return expr +} + +func (c *Comp) checkCallArgs(node *ast.CallExpr, t xr.Type, args []*Expr, ellipsis bool) { + variadic := t.IsVariadic() + if ellipsis { + if variadic { + // a variadic function invoked as fun(x, y...) + // behaves exactly as a non-variadic function call: + // number and type of arguments must match + variadic = false + } else { + c.Errorf("invalid use of ... in call to non-variadic function <%v>: %v", t, node) + return + } + } + n := t.NumIn() + narg := len(args) + if narg == 1 { + // support foo(bar()) where bar() returns multiple values + narg = args[0].NumOut() + } + if narg < n-1 || (!variadic && narg != n) { + c.badCallArgNum(node.Fun, t, args) + return + } + var ti, tlast xr.Type + if variadic { + tlast = t.In(n - 1).Elem() + } + for i := 0; i < narg; i++ { + if variadic && i >= n-1 { + ti = tlast + } else { + ti = t.In(i) + } + if len(args) != narg { + // support foo(bar()) where bar() returns multiple values + targ := args[0].Out(i) + if targ == nil || !targ.AssignableTo(ti) { + c.Errorf("cannot use <%v> as <%v> in argument to %v", targ, ti, node.Fun) + } + continue + } + // one argument per parameter: foo(arg1, arg2 /*...*/) + arg := args[i] + if arg.Const() { + arg.ConstTo(ti) + } else if arg.Type == nil || !arg.Type.AssignableTo(ti) { + c.Errorf("cannot use <%v> as <%v> in argument to %v", arg.Type, ti, node.Fun) + } + } +} + +// mandatory optimization: fast_interpreter ASSUMES that expressions +// returning bool, int, uint, float, complex, string do NOT wrap them in reflect.Value +func (c *Comp) call_ret0(call *Call, maxdepth int) func(env *Env) { + if call.Ellipsis { + return call_ellipsis_ret0(call, maxdepth) + } else if call.Fun.Type.IsVariadic() { + return call_variadic_ret0(call, maxdepth) + } + // optimize fun(t1, t2) + exprfun := call.Fun.AsX1() + var ret func(*Env) + switch len(call.Args) { + case 0: + ret = c.call0ret0(call, maxdepth) + case 1: + ret = c.call1ret0(call, maxdepth) + case 2: + ret = c.call2ret0(call, maxdepth) + case 3: + argfunsX1 := call.MakeArgfunsX1() + argfuns := [3]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + argfunsX1[2], + } + ret = func(env *Env) { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + argfuns[2](env), + } + funv.Call(argv) + } + } + if ret == nil { + argfunsX1 := call.MakeArgfunsX1() + ret = func(env *Env) { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + funv.Call(argv) + } + } + return ret +} + +// mandatory optimization: fast_interpreter ASSUMES that expressions +// returning bool, int, uint, float, complex, string do NOT wrap them in reflect.Value +func (c *Comp) call_ret1(call *Call, maxdepth int) I { + if call.Ellipsis { + return call_ellipsis_ret1(call, maxdepth) + } else if call.Fun.Type.IsVariadic() { + return call_variadic_ret1(call, maxdepth) + } + var ret I + switch len(call.Args) { + case 0: + ret = c.call0ret1(call, maxdepth) + case 1: + ret = c.call1ret1(call, maxdepth) + case 2: + ret = c.call2ret1(call, maxdepth) + default: + ret = c.callnret1(call, maxdepth) + } + return ret +} + +// cannot optimize much here... fast_interpreter ASSUMES that expressions +// returning multiple values actually return (reflect.Value, []reflect.Value) +func (c *Comp) call_ret2plus(call *Call, maxdepth int) func(env *Env) (r.Value, []r.Value) { + if call.Ellipsis { + return call_ellipsis_ret2plus(call, maxdepth) + } + // no need to special case variadic functions here + expr := call.Fun + exprfun := expr.AsX1() + argfunsX1 := call.MakeArgfunsX1() + var ret func(*Env) (r.Value, []r.Value) + // slightly optimize fun() (tret0, tret1) + switch len(call.Args) { + case 0: + ret = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + retv := funv.Call(base.ZeroValues) + return retv[0], retv + } + case 1: + argfun := argfunsX1[0] + ret = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv) + return retv[0], retv + } + case 2: + argfuns := [2]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + ret = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv) + return retv[0], retv + } + case 3: + argfuns := [3]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + argfunsX1[2], + } + ret = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + argfuns[2](env), + } + retv := funv.Call(argv) + return retv[0], retv + } + default: + // general case + ret = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv) + return retv[0], retv + } + } + return ret +} + +func (c *Comp) badCallArgNum(fun ast.Expr, t xr.Type, args []*Expr) *Call { + prefix := "not enough" + n := t.NumIn() + nargs := len(args) + if nargs > n { + prefix = "too many" + } + have := bytes.Buffer{} + for i, arg := range args { + if i == 0 { + fmt.Fprintf(&have, "%v", arg.Type) + } else { + fmt.Fprintf(&have, ", %v", arg.Type) + } + } + want := bytes.Buffer{} + for i := 0; i < n; i++ { + if i == 0 { + fmt.Fprintf(&want, "%v", t.In(i)) + } else { + fmt.Fprintf(&want, ", %v", t.In(i)) + } + } + c.Errorf("%s arguments in call to %v:\n\thave (%s)\n\twant (%s)", prefix, fun, have.Bytes(), want.Bytes()) + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call0ret1.go b/vendor/github.com/cosmos72/gomacro/fast/call0ret1.go new file mode 100644 index 0000000..51c7d7f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call0ret1.go @@ -0,0 +1,907 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +// +build !gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call0ret1.go + * + * Created on Apr 20, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) call0ret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + base.Errorf("internal error: call0ret1() invoked for constant function %#v. use call_builtin() instead", expr) + } + + } + tret := expr.Type.Out(0) + kret := tret.Kind() + var cachedfunv r.Value + var ret I + switch kret { + case r.Bool: + + { + if !xr.SameType(tret, c.TypeOfBool(), + ) { + ret = func(env *Env) bool { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return ret.Bool() + + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() bool) + } + return cachedfun() + } + case 0: + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func() bool) + return fun() + } + case 1: + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func() bool) + return fun() + } + case 2: + ret = func(env *Env) bool { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() bool) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func() bool) + return fun() + } + } + + } + case r.Int: + + { + if !xr.SameType(tret, c.TypeOfInt(), + ) { + ret = func(env *Env) int { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return int(ret.Int()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() int) + } + return cachedfun() + } + case 0: + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func() int) + return fun() + } + case 1: + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func() int) + return fun() + } + case 2: + ret = func(env *Env) int { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() int) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func() int) + return fun() + } + } + + } + case r.Int8: + + { + if !xr.SameType(tret, c.TypeOfInt8(), + ) { + ret = func(env *Env) int8 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return int8(ret.Int()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() int8) + } + return cachedfun() + } + case 0: + ret = func(env *Env) int8 { + fun := env.Binds[funindex].Interface().(func() int8) + return fun() + } + case 1: + ret = func(env *Env) int8 { + fun := env.Outer.Binds[funindex].Interface().(func() int8) + return fun() + } + case 2: + ret = func(env *Env) int8 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() int8) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func() int8) + return fun() + } + } + + } + case r.Int16: + { + if !xr.SameType(tret, c.TypeOfInt16(), + ) { + ret = func(env *Env) int16 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return int16(ret.Int()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() int16) + } + return cachedfun() + } + case 0: + ret = func(env *Env) int16 { + fun := env.Binds[funindex].Interface().(func() int16) + return fun() + } + case 1: + ret = func(env *Env) int16 { + fun := env.Outer.Binds[funindex].Interface().(func() int16) + return fun() + } + case 2: + ret = func(env *Env) int16 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() int16) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func() int16) + return fun() + } + } + + } + case r.Int32: + { + if !xr.SameType(tret, c.TypeOfInt32(), + ) { + ret = func(env *Env) int32 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return int32(ret.Int()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() int32) + } + return cachedfun() + } + case 0: + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func() int32) + return fun() + } + case 1: + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func() int32) + return fun() + } + case 2: + ret = func(env *Env) int32 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() int32) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func() int32) + return fun() + } + } + + } + case r.Int64: + { + if !xr.SameType(tret, c.TypeOfInt64(), + ) { + ret = func(env *Env) int64 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return ret.Int() + + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() int64) + } + return cachedfun() + } + case 0: + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func() int64) + return fun() + } + case 1: + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func() int64) + return fun() + } + case 2: + ret = func(env *Env) int64 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() int64) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func() int64) + return fun() + } + } + + } + case r.Uint: + { + if !xr.SameType(tret, c.TypeOfUint(), + ) { + ret = func(env *Env) uint { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return uint(ret.Uint()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() uint) + } + return cachedfun() + } + case 0: + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func() uint) + return fun() + } + case 1: + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func() uint) + return fun() + } + case 2: + ret = func(env *Env) uint { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() uint) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func() uint) + return fun() + } + } + + } + case r.Uint8: + { + if !xr.SameType(tret, c.TypeOfUint8(), + ) { + ret = func(env *Env) uint8 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return uint8(ret.Uint()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() uint8) + } + return cachedfun() + } + case 0: + ret = func(env *Env) uint8 { + fun := env.Binds[funindex].Interface().(func() uint8) + return fun() + } + case 1: + ret = func(env *Env) uint8 { + fun := env.Outer.Binds[funindex].Interface().(func() uint8) + return fun() + } + case 2: + ret = func(env *Env) uint8 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() uint8) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func() uint8) + return fun() + } + } + + } + case r.Uint16: + { + if !xr.SameType(tret, c.TypeOfUint16(), + ) { + ret = func(env *Env) uint16 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return uint16(ret.Uint()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() uint16) + } + return cachedfun() + } + case 0: + ret = func(env *Env) uint16 { + fun := env.Binds[funindex].Interface().(func() uint16) + return fun() + } + case 1: + ret = func(env *Env) uint16 { + fun := env.Outer.Binds[funindex].Interface().(func() uint16) + return fun() + } + case 2: + ret = func(env *Env) uint16 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() uint16) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func() uint16) + return fun() + } + } + + } + case r.Uint32: + { + if !xr.SameType(tret, c.TypeOfUint32(), + ) { + ret = func(env *Env) uint32 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return uint32(ret.Uint()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() uint32) + } + return cachedfun() + } + case 0: + ret = func(env *Env) uint32 { + fun := env.Binds[funindex].Interface().(func() uint32) + return fun() + } + case 1: + ret = func(env *Env) uint32 { + fun := env.Outer.Binds[funindex].Interface().(func() uint32) + return fun() + } + case 2: + ret = func(env *Env) uint32 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() uint32) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func() uint32) + return fun() + } + } + + } + case r.Uint64: + { + if !xr.SameType(tret, c.TypeOfUint64(), + ) { + ret = func(env *Env) uint64 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return ret.Uint() + + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() uint64) + } + return cachedfun() + } + case 0: + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func() uint64) + return fun() + } + case 1: + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func() uint64) + return fun() + } + case 2: + ret = func(env *Env) uint64 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() uint64) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func() uint64) + return fun() + } + } + + } + case r.Uintptr: + { + if !xr.SameType(tret, c.TypeOfUintptr(), + ) { + ret = func(env *Env) uintptr { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return uintptr(ret.Uint()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() uintptr) + } + return cachedfun() + } + case 0: + ret = func(env *Env) uintptr { + fun := env.Binds[funindex].Interface().(func() uintptr) + return fun() + } + case 1: + ret = func(env *Env) uintptr { + fun := env.Outer.Binds[funindex].Interface().(func() uintptr) + return fun() + } + case 2: + ret = func(env *Env) uintptr { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() uintptr) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func() uintptr) + return fun() + } + } + + } + case r.Float32: + { + if !xr.SameType(tret, c.TypeOfFloat32(), + ) { + ret = func(env *Env) float32 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return float32(ret.Float()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() float32) + } + return cachedfun() + } + case 0: + ret = func(env *Env) float32 { + fun := env.Binds[funindex].Interface().(func() float32) + return fun() + } + case 1: + ret = func(env *Env) float32 { + fun := env.Outer.Binds[funindex].Interface().(func() float32) + return fun() + } + case 2: + ret = func(env *Env) float32 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() float32) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func() float32) + return fun() + } + } + + } + case r.Float64: + { + if !xr.SameType(tret, c.TypeOfFloat64(), + ) { + ret = func(env *Env) float64 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return ret.Float() + + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() float64) + } + return cachedfun() + } + case 0: + ret = func(env *Env) float64 { + fun := env.Binds[funindex].Interface().(func() float64) + return fun() + } + case 1: + ret = func(env *Env) float64 { + fun := env.Outer.Binds[funindex].Interface().(func() float64) + return fun() + } + case 2: + ret = func(env *Env) float64 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() float64) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func() float64) + return fun() + } + } + + } + case r.Complex64: + { + if !xr.SameType(tret, c.TypeOfComplex64(), + ) { + ret = func(env *Env) complex64 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return complex64(ret.Complex()) + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() complex64) + } + return cachedfun() + } + case 0: + ret = func(env *Env) complex64 { + fun := env.Binds[funindex].Interface().(func() complex64) + return fun() + } + case 1: + ret = func(env *Env) complex64 { + fun := env.Outer.Binds[funindex].Interface().(func() complex64) + return fun() + } + case 2: + ret = func(env *Env) complex64 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() complex64) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func() complex64) + return fun() + } + } + + } + case r.Complex128: + { + if !xr.SameType(tret, c.TypeOfComplex128(), + ) { + ret = func(env *Env) complex128 { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return ret.Complex() + + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() complex128 + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() complex128) + } + return cachedfun() + } + case 0: + ret = func(env *Env) complex128 { + fun := env.Binds[funindex].Interface().(func() complex128) + return fun() + } + case 1: + ret = func(env *Env) complex128 { + fun := env.Outer.Binds[funindex].Interface().(func() complex128) + return fun() + } + case 2: + ret = func(env *Env) complex128 { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() complex128) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func() complex128) + return fun() + } + } + + } + case r.String: + { + if !xr.SameType(tret, c.TypeOfString(), + ) { + ret = func(env *Env) string { + fun := exprfun(env) + + ret := fun.Call(base.ZeroValues)[0] + return ret.String() + + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() string + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() string) + } + return cachedfun() + } + case 0: + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func() string) + return fun() + } + case 1: + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func() string) + return fun() + } + case 2: + ret = func(env *Env) string { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() string) + return fun() + } + } + } + + if ret == nil { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func() string) + return fun() + } + } + + } + default: + ret = func(env *Env) r.Value { + funv := exprfun(env) + return funv.Call(base.ZeroValues)[0] + } + + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call0ret1.gomacro b/vendor/github.com/cosmos72/gomacro/fast/call0ret1.gomacro new file mode 100644 index 0000000..1ef9ce6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call0ret1.gomacro @@ -0,0 +1,200 @@ +// +build !gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call0ret1.go + * + * Created on Apr 20, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + "go/ast" + "go/token" + r "reflect" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func maketypevar(typ ast.Node) ast.Node { + t := EvalType(typ) + sel := &ast.SelectorExpr{ + X: &ast.Ident{Name: "c"}, + Sel: &ast.Ident{Name: "TypeOf" + upcasefirstbyte(t.Name())}, + } + return ~"{~,sel ()} +} + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +:macro mcall0ret1(rettyp ast.Node) ast.Node { + if EvalType(rettyp) == nil { + // keep the result wrapped in a reflect.Value + return ~"{ + ret = func(env *Env) r.Value { + funv := exprfun(env) + return funv.Call(base.ZeroValues)[0] + } + } + } + + cachefun := ~"{ + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func() ~,rettyp) + } + } + + typevar := maketypevar(rettyp) + retconv := convertvalue1(rettyp, ~'ret) + + return ~"{ + if !xr.SameType(tret, ~,typevar) { + ret = func(env *Env) ~,rettyp { + fun := exprfun(env) + // Debugf("calling %v with args []", fun.Type()) + ret := fun.Call(base.ZeroValues)[0] + return ~,retconv + } + } else if funsym != nil { + switch funupn { + case maxdepth - 1: + var cachedfun func() ~,rettyp + ret = func(env *Env) ~,rettyp { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + ~,cachefun + // Debugf("calling %v with args []", r.TypeOf(cachedfun)) + return cachedfun() + } + case 0: + ret = func(env *Env) ~,rettyp { + fun := env.Binds[funindex].Interface().(func() ~,rettyp) + // Debugf("calling %v with args []", r.TypeOf(fun)) + return fun() + } + case 1: + ret = func(env *Env) ~,rettyp { + fun := env.Outer.Binds[funindex].Interface().(func() ~,rettyp) + // Debugf("calling %v with args []", r.TypeOf(fun)) + return fun() + } + case 2: + ret = func(env *Env) ~,rettyp { + fun := env.Outer.Outer.Binds[funindex].Interface().(func() ~,rettyp) + // Debugf("calling %v with args []", r.TypeOf(fun)) + return fun() + } + } + } + if ret == nil { + ret = func(env *Env) ~,rettyp { + fun := exprfun(env).Interface().(func() ~,rettyp) + // Debugf("calling %v with args []", r.TypeOf(fun)) + return fun() + } + } + } +} + +func (c *Comp) call0ret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + base.Errorf("internal error: call0ret1() invoked for constant function %#v. use call_builtin() instead", expr) + } + } + tret := expr.Type.Out(0) + kret := tret.Kind() + var cachedfunv r.Value + var ret I + switch kret { + case r.Bool: {mcall0ret1; bool} + case r.Int: {mcall0ret1; int} + case r.Int8: {mcall0ret1; int8} + case r.Int16: {mcall0ret1; int16} + case r.Int32: {mcall0ret1; int32} + case r.Int64: {mcall0ret1; int64} + case r.Uint: {mcall0ret1; uint} + case r.Uint8: {mcall0ret1; uint8} + case r.Uint16: {mcall0ret1; uint16} + case r.Uint32: {mcall0ret1; uint32} + case r.Uint64: {mcall0ret1; uint64} + case r.Uintptr: {mcall0ret1; uintptr} + case r.Float32: {mcall0ret1; float32} + case r.Float64: {mcall0ret1; float64} + case r.Complex64: {mcall0ret1; complex64} + case r.Complex128:{mcall0ret1; complex128} + case r.String: {mcall0ret1; string} + default: {mcall0ret1; nil} + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call0ret1compact.go b/vendor/github.com/cosmos72/gomacro/fast/call0ret1compact.go new file mode 100644 index 0000000..8f40ec2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call0ret1compact.go @@ -0,0 +1,119 @@ +// +build gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call0ret1compact.go + * + * Created on Jun 14, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) call0ret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + + tret := expr.Type.Out(0) + kret := tret.Kind() + var ret I + + switch kret { + case r.Bool: + ret = func(env *Env) bool { + return exprfun(env).Call(base.ZeroValues)[0].Bool() + } + case r.Int: + ret = func(env *Env) int { + return int(exprfun(env).Call(base.ZeroValues)[0].Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + return int8(exprfun(env).Call(base.ZeroValues)[0].Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + return int16(exprfun(env).Call(base.ZeroValues)[0].Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + return int32(exprfun(env).Call(base.ZeroValues)[0].Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + return exprfun(env).Call(base.ZeroValues)[0].Int() + } + case r.Uint: + ret = func(env *Env) uint { + return uint(exprfun(env).Call(base.ZeroValues)[0].Uint()) + } + case r.Uint8: + ret = func(env *Env) uint8 { + return uint8(exprfun(env).Call(base.ZeroValues)[0].Uint()) + } + case r.Uint16: + ret = func(env *Env) uint16 { + return uint16(exprfun(env).Call(base.ZeroValues)[0].Uint()) + } + case r.Uint32: + ret = func(env *Env) uint32 { + return uint32(exprfun(env).Call(base.ZeroValues)[0].Uint()) + } + case r.Uint64: + ret = func(env *Env) uint64 { + return exprfun(env).Call(base.ZeroValues)[0].Uint() + } + case r.Uintptr: + ret = func(env *Env) uintptr { + return uintptr(exprfun(env).Call(base.ZeroValues)[0].Uint()) + } + case r.Float32: + ret = func(env *Env) float32 { + return float32(exprfun(env).Call(base.ZeroValues)[0].Float()) + } + case r.Float64: + ret = func(env *Env) float64 { + return exprfun(env).Call(base.ZeroValues)[0].Float() + } + case r.Complex64: + ret = func(env *Env) complex64 { + return complex64(exprfun(env).Call(base.ZeroValues)[0].Complex()) + } + case r.Complex128: + ret = func(env *Env) complex128 { + return exprfun(env).Call(base.ZeroValues)[0].Complex() + } + case r.String: + ret = func(env *Env) string { + return exprfun(env).Call(base.ZeroValues)[0].String() + } + default: + ret = func(env *Env) r.Value { + return exprfun(env).Call(base.ZeroValues)[0] + } + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call1ret1.go b/vendor/github.com/cosmos72/gomacro/fast/call1ret1.go new file mode 100644 index 0000000..7f87eb7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call1ret1.go @@ -0,0 +1,8977 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +// +build !gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call1ret1.go + * + * Created on Apr 15, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) call1ret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + Errorf("internal error: call1ret1() invoked for constant function %v. use call_builtin() instead", expr) + } + + } + t := expr.Type + targ, tret := t.In(0), t.Out(0) + karg, kret := targ.Kind(), tret.Kind() + var ret I + if KindToType(karg) != targ.ReflectType() || KindToType(kret) != tret.ReflectType() { + return c.call1ret1namedtype(call, maxdepth) + } + + arg := call.Args[0] + argfun := arg.AsX1() + var cachedfunv r.Value + + switch kret { + + case r.Bool: + switch karg { + case r.Bool: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool) bool + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Bool() + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) bool) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) bool) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(bool) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(bool) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(bool) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int) bool + + if arg.Const() { + argconst := int( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(int) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(int) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) bool + + if arg.Const() { + argconst := int8( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int8) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(int8) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(int8) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int8) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) bool + + if arg.Const() { + argconst := int16( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int16) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(int16) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(int16) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int16) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32) bool + + if arg.Const() { + argconst := int32( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int32) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(int32) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(int32) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int32) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64) bool + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Int() + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int64) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(int64) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(int64) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int64) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint) bool + + if arg.Const() { + argconst := uint( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(uint) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(uint) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) bool + + if arg.Const() { + argconst := uint8( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint8) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(uint8) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(uint8) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint8) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) bool + + if arg.Const() { + argconst := uint16( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint16) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(uint16) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(uint16) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint16) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) bool + + if arg.Const() { + argconst := uint32( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint32) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(uint32) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(uint32) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint32) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64) bool + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Uint() + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint64) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(uint64) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(uint64) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint64) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uintptr: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) bool + + if arg.Const() { + argconst := uintptr( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uintptr) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(uintptr) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(uintptr) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uintptr) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) bool + + if arg.Const() { + argconst := float32( + + r.ValueOf(arg.Value).Float()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float32) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(float32) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(float32) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(float32) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) bool + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Float() + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float64) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(float64) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(float64) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(float64) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) bool + + if arg.Const() { + argconst := complex64( + + r.ValueOf(arg.Value).Complex()) + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex64) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(complex64) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(complex64) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(complex64) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex128: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) bool + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Complex() + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex128) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(complex128) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(complex128) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(complex128) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.String: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string) bool + + if arg.Const() { + argconst := r.ValueOf(arg.Value).String() + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) bool) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) string) + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) bool) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) string) + if funsym != nil && funupn == 0 { + ret = func(env *Env) bool { + fun := env.Binds[funindex].Interface().(func(string) bool) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) bool { + fun := env.Outer.Binds[funindex].Interface().(func(string) bool) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(string) bool) + arg := argfun(env) + return fun(arg) + } + } + + } + default: + ret = func(env *Env) bool { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Bool() + } + } + + case r.Int: + switch karg { + case r.Bool: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool) int + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Bool() + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) bool) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) bool) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(bool) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(bool) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(bool) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int) int + + if arg.Const() { + argconst := int( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(int) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(int) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) int + + if arg.Const() { + argconst := int8( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int8) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(int8) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(int8) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int8) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) int + + if arg.Const() { + argconst := int16( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int16) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(int16) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(int16) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int16) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32) int + + if arg.Const() { + argconst := int32( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int32) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(int32) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(int32) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int32) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64) int + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Int() + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int64) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(int64) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(int64) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int64) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint) int + + if arg.Const() { + argconst := uint( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(uint) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(uint) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) int + + if arg.Const() { + argconst := uint8( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint8) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(uint8) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(uint8) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint8) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) int + + if arg.Const() { + argconst := uint16( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint16) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(uint16) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(uint16) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint16) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) int + + if arg.Const() { + argconst := uint32( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint32) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(uint32) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(uint32) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint32) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64) int + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Uint() + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint64) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(uint64) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(uint64) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint64) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uintptr: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) int + + if arg.Const() { + argconst := uintptr( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uintptr) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(uintptr) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(uintptr) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uintptr) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) int + + if arg.Const() { + argconst := float32( + + r.ValueOf(arg.Value).Float()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float32) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(float32) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(float32) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(float32) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) int + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Float() + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float64) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(float64) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(float64) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(float64) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) int + + if arg.Const() { + argconst := complex64( + + r.ValueOf(arg.Value).Complex()) + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex64) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(complex64) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(complex64) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(complex64) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex128: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) int + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Complex() + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex128) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(complex128) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(complex128) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(complex128) int) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.String: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string) int + + if arg.Const() { + argconst := r.ValueOf(arg.Value).String() + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) int) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) string) + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) int) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) string) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int { + fun := env.Binds[funindex].Interface().(func(string) int) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int { + fun := env.Outer.Binds[funindex].Interface().(func(string) int) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(string) int) + arg := argfun(env) + return fun(arg) + } + } + + } + default: + ret = func(env *Env) int { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return int(ret0.Int()) + } + } + + case r.Int8: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) int8 + + if arg.Const() { + argconst := int8( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) int8) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int8) + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) int8) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int8 { + fun := env.Binds[funindex].Interface().(func(int8) int8) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int8 { + fun := env.Outer.Binds[funindex].Interface().(func(int8) int8) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int8) int8) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(bool) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int8) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int16) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int32) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int64) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint8) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint16) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint32) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint64) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uintptr) int8) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(float32) int8) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(float64) int8) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(complex64) int8) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(complex128) int8) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(string) int8) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) int8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return int8(ret0.Int()) + } + } + } + + case r.Int16: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) int16 + + if arg.Const() { + argconst := int16( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) int16) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int16) + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) int16) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int16 { + fun := env.Binds[funindex].Interface().(func(int16) int16) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int16 { + fun := env.Outer.Binds[funindex].Interface().(func(int16) int16) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int16) int16) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(bool) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int8) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int16) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int32) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int64) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint8) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint16) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint32) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint64) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uintptr) int16) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(float32) int16) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(float64) int16) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(complex64) int16) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(complex128) int16) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(string) int16) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) int16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return int16(ret0.Int()) + } + } + } + + case r.Int32: + switch karg { + case r.Bool: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool) int32 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Bool() + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) bool) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) bool) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(bool) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(bool) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(bool) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int) int32 + + if arg.Const() { + argconst := int( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(int) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(int) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) int32 + + if arg.Const() { + argconst := int8( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int8) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(int8) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(int8) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int8) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) int32 + + if arg.Const() { + argconst := int16( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int16) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(int16) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(int16) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int16) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32) int32 + + if arg.Const() { + argconst := int32( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int32) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(int32) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(int32) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int32) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64) int32 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Int() + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int64) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(int64) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(int64) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int64) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint) int32 + + if arg.Const() { + argconst := uint( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(uint) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(uint) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) int32 + + if arg.Const() { + argconst := uint8( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint8) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(uint8) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(uint8) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint8) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) int32 + + if arg.Const() { + argconst := uint16( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint16) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(uint16) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(uint16) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint16) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) int32 + + if arg.Const() { + argconst := uint32( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint32) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(uint32) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(uint32) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint32) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64) int32 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Uint() + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint64) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(uint64) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(uint64) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint64) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uintptr: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) int32 + + if arg.Const() { + argconst := uintptr( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uintptr) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(uintptr) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(uintptr) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uintptr) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) int32 + + if arg.Const() { + argconst := float32( + + r.ValueOf(arg.Value).Float()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float32) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(float32) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(float32) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(float32) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) int32 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Float() + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float64) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(float64) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(float64) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(float64) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) int32 + + if arg.Const() { + argconst := complex64( + + r.ValueOf(arg.Value).Complex()) + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex64) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(complex64) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(complex64) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(complex64) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex128: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) int32 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Complex() + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex128) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(complex128) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(complex128) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(complex128) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.String: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string) int32 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).String() + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) int32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) string) + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) int32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) string) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int32 { + fun := env.Binds[funindex].Interface().(func(string) int32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int32 { + fun := env.Outer.Binds[funindex].Interface().(func(string) int32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(string) int32) + arg := argfun(env) + return fun(arg) + } + } + + } + default: + ret = func(env *Env) int32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return int32(ret0.Int()) + } + } + + case r.Int64: + switch karg { + case r.Bool: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool) int64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Bool() + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) bool) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) bool) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(bool) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(bool) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(bool) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int) int64 + + if arg.Const() { + argconst := int( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(int) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(int) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) int64 + + if arg.Const() { + argconst := int8( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int8) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(int8) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(int8) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int8) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) int64 + + if arg.Const() { + argconst := int16( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int16) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(int16) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(int16) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int16) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32) int64 + + if arg.Const() { + argconst := int32( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int32) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(int32) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(int32) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int32) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64) int64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Int() + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int64) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(int64) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(int64) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int64) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint) int64 + + if arg.Const() { + argconst := uint( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(uint) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) int64 + + if arg.Const() { + argconst := uint8( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint8) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(uint8) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint8) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint8) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) int64 + + if arg.Const() { + argconst := uint16( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint16) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(uint16) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint16) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint16) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) int64 + + if arg.Const() { + argconst := uint32( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint32) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(uint32) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint32) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint32) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64) int64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Uint() + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint64) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(uint64) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint64) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint64) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uintptr: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) int64 + + if arg.Const() { + argconst := uintptr( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uintptr) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(uintptr) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(uintptr) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uintptr) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) int64 + + if arg.Const() { + argconst := float32( + + r.ValueOf(arg.Value).Float()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float32) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(float32) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(float32) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(float32) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) int64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Float() + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float64) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(float64) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(float64) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(float64) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) int64 + + if arg.Const() { + argconst := complex64( + + r.ValueOf(arg.Value).Complex()) + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex64) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(complex64) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(complex64) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(complex64) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex128: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) int64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Complex() + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex128) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(complex128) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(complex128) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(complex128) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.String: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string) int64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).String() + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) int64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) string) + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) int64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) string) + if funsym != nil && funupn == 0 { + ret = func(env *Env) int64 { + fun := env.Binds[funindex].Interface().(func(string) int64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) int64 { + fun := env.Outer.Binds[funindex].Interface().(func(string) int64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(string) int64) + arg := argfun(env) + return fun(arg) + } + } + + } + default: + ret = func(env *Env) int64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Int() + } + } + + case r.Uint: + switch karg { + case r.Bool: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool) uint + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Bool() + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) bool) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) bool) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(bool) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(bool) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(bool) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int) uint + + if arg.Const() { + argconst := int( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(int) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(int) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) uint + + if arg.Const() { + argconst := int8( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int8) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(int8) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(int8) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int8) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) uint + + if arg.Const() { + argconst := int16( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int16) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(int16) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(int16) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int16) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32) uint + + if arg.Const() { + argconst := int32( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int32) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(int32) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(int32) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int32) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64) uint + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Int() + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int64) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(int64) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(int64) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int64) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint) uint + + if arg.Const() { + argconst := uint( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(uint) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(uint) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) uint + + if arg.Const() { + argconst := uint8( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint8) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(uint8) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(uint8) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint8) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) uint + + if arg.Const() { + argconst := uint16( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint16) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(uint16) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(uint16) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint16) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) uint + + if arg.Const() { + argconst := uint32( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint32) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(uint32) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(uint32) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint32) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64) uint + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Uint() + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint64) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(uint64) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(uint64) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint64) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uintptr: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) uint + + if arg.Const() { + argconst := uintptr( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uintptr) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(uintptr) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(uintptr) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uintptr) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) uint + + if arg.Const() { + argconst := float32( + + r.ValueOf(arg.Value).Float()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float32) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(float32) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(float32) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(float32) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) uint + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Float() + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float64) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(float64) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(float64) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(float64) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) uint + + if arg.Const() { + argconst := complex64( + + r.ValueOf(arg.Value).Complex()) + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex64) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(complex64) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(complex64) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(complex64) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex128: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) uint + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Complex() + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex128) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(complex128) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(complex128) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(complex128) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.String: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string) uint + + if arg.Const() { + argconst := r.ValueOf(arg.Value).String() + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) uint) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) string) + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) uint) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) string) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint { + fun := env.Binds[funindex].Interface().(func(string) uint) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint { + fun := env.Outer.Binds[funindex].Interface().(func(string) uint) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(string) uint) + arg := argfun(env) + return fun(arg) + } + } + + } + default: + ret = func(env *Env) uint { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return uint(ret0.Uint()) + } + } + + case r.Uint8: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) uint8 + + if arg.Const() { + argconst := uint8( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) uint8) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint8) + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) uint8) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint8 { + fun := env.Binds[funindex].Interface().(func(uint8) uint8) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint8 { + fun := env.Outer.Binds[funindex].Interface().(func(uint8) uint8) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint8) uint8) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(bool) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int8) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int16) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int32) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int64) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint8) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint16) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint32) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint64) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uintptr) uint8) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(float32) uint8) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(float64) uint8) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(complex64) uint8) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(complex128) uint8) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(string) uint8) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) uint8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return uint8(ret0.Uint()) + } + } + } + + case r.Uint16: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) uint16 + + if arg.Const() { + argconst := uint16( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) uint16) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint16) + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) uint16) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint16 { + fun := env.Binds[funindex].Interface().(func(uint16) uint16) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint16 { + fun := env.Outer.Binds[funindex].Interface().(func(uint16) uint16) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint16) uint16) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(bool) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int8) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int16) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int32) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int64) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint8) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint16) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint32) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint64) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uintptr) uint16) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(float32) uint16) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(float64) uint16) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(complex64) uint16) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(complex128) uint16) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(string) uint16) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) uint16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return uint16(ret0.Uint()) + } + } + } + + case r.Uint32: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) uint32 + + if arg.Const() { + argconst := uint32( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) uint32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint32) + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) uint32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint32 { + fun := env.Binds[funindex].Interface().(func(uint32) uint32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint32 { + fun := env.Outer.Binds[funindex].Interface().(func(uint32) uint32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint32) uint32) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(bool) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int8) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int16) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int32) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int64) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint8) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint16) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint32) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint64) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uintptr) uint32) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(float32) uint32) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(float64) uint32) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(complex64) uint32) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(complex128) uint32) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(string) uint32) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) uint32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return uint32(ret0.Uint()) + } + } + } + + case r.Uint64: + switch karg { + case r.Bool: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool) uint64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Bool() + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) bool) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) bool) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(bool) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(bool) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(bool) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int) uint64 + + if arg.Const() { + argconst := int( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(int) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(int) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) uint64 + + if arg.Const() { + argconst := int8( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int8) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(int8) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(int8) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int8) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) uint64 + + if arg.Const() { + argconst := int16( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int16) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(int16) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(int16) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int16) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32) uint64 + + if arg.Const() { + argconst := int32( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int32) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(int32) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(int32) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int32) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64) uint64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Int() + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int64) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(int64) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(int64) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int64) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint) uint64 + + if arg.Const() { + argconst := uint( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(uint) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) uint64 + + if arg.Const() { + argconst := uint8( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint8) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(uint8) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint8) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint8) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) uint64 + + if arg.Const() { + argconst := uint16( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint16) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(uint16) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint16) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint16) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) uint64 + + if arg.Const() { + argconst := uint32( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint32) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(uint32) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint32) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint32) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64) uint64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Uint() + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint64) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(uint64) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(uint64) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint64) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uintptr: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) uint64 + + if arg.Const() { + argconst := uintptr( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uintptr) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(uintptr) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(uintptr) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uintptr) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) uint64 + + if arg.Const() { + argconst := float32( + + r.ValueOf(arg.Value).Float()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float32) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(float32) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(float32) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(float32) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) uint64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Float() + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float64) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(float64) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(float64) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(float64) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) uint64 + + if arg.Const() { + argconst := complex64( + + r.ValueOf(arg.Value).Complex()) + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex64) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(complex64) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(complex64) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(complex64) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex128: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) uint64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Complex() + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex128) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(complex128) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(complex128) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(complex128) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.String: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string) uint64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).String() + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) uint64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) string) + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) uint64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) string) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uint64 { + fun := env.Binds[funindex].Interface().(func(string) uint64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uint64 { + fun := env.Outer.Binds[funindex].Interface().(func(string) uint64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(string) uint64) + arg := argfun(env) + return fun(arg) + } + } + + } + default: + ret = func(env *Env) uint64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Uint() + } + } + + case r.Uintptr: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) uintptr + + if arg.Const() { + argconst := uintptr( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) uintptr) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uintptr) + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) uintptr) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == 0 { + ret = func(env *Env) uintptr { + fun := env.Binds[funindex].Interface().(func(uintptr) uintptr) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) uintptr { + fun := env.Outer.Binds[funindex].Interface().(func(uintptr) uintptr) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uintptr) uintptr) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(bool) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int8) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int16) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int32) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int64) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint8) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint16) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint32) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint64) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uintptr) uintptr) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(float32) uintptr) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(float64) uintptr) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(complex64) uintptr) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(complex128) uintptr) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(string) uintptr) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) uintptr { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return uintptr(ret0.Uint()) + } + } + } + + case r.Float32: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) float32 + + if arg.Const() { + argconst := float32( + + r.ValueOf(arg.Value).Float()) + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) float32) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float32) + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) float32) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) float32 { + fun := env.Binds[funindex].Interface().(func(float32) float32) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) float32 { + fun := env.Outer.Binds[funindex].Interface().(func(float32) float32) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(float32) float32) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(bool) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int8) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int16) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int32) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int64) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint8) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint16) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint32) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint64) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uintptr) float32) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(float32) float32) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(float64) float32) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(complex64) float32) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(complex128) float32) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(string) float32) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) float32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return float32(ret0.Float()) + } + } + } + + case r.Float64: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) float64 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Float() + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) float64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float64) + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) float64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) float64 { + fun := env.Binds[funindex].Interface().(func(float64) float64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) float64 { + fun := env.Outer.Binds[funindex].Interface().(func(float64) float64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(float64) float64) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(bool) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int8) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int16) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int32) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int64) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint8) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint16) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint32) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint64) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uintptr) float64) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(float32) float64) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(float64) float64) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(complex64) float64) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(complex128) float64) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(string) float64) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) float64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Float() + } + } + } + + case r.Complex64: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) complex64 + + if arg.Const() { + argconst := complex64( + + r.ValueOf(arg.Value).Complex()) + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) complex64) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex64) + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) complex64) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) complex64 { + fun := env.Binds[funindex].Interface().(func(complex64) complex64) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) complex64 { + fun := env.Outer.Binds[funindex].Interface().(func(complex64) complex64) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(complex64) complex64) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(bool) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int8) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int16) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int32) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int64) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint8) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint16) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint32) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint64) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uintptr) complex64) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(float32) complex64) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(float64) complex64) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(complex64) complex64) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(complex128) complex64) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(string) complex64) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) complex64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return complex64(ret0.Complex()) + } + } + } + + case r.Complex128: + if karg == kret { + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) complex128 + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Complex() + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) complex128) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex128) + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) complex128) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == 0 { + ret = func(env *Env) complex128 { + fun := env.Binds[funindex].Interface().(func(complex128) complex128) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) complex128 { + fun := env.Outer.Binds[funindex].Interface().(func(complex128) complex128) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(complex128) complex128) + arg := argfun(env) + return fun(arg) + } + } + + } + } else { + switch karg { + case r.Bool: + + { + argfun := arg.WithFun().(func(env *Env) bool) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(bool) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Int: + + { + argfun := arg.WithFun().(func(env *Env) int) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Int8: + { + argfun := arg.WithFun().(func(env *Env) int8) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int8) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Int16: + { + argfun := arg.WithFun().(func(env *Env) int16) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int16) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Int32: + { + argfun := arg.WithFun().(func(env *Env) int32) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int32) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Int64: + { + argfun := arg.WithFun().(func(env *Env) int64) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int64) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint: + { + argfun := arg.WithFun().(func(env *Env) uint) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint8: + { + argfun := arg.WithFun().(func(env *Env) uint8) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint8) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint16: + { + argfun := arg.WithFun().(func(env *Env) uint16) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint16) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint32: + { + argfun := arg.WithFun().(func(env *Env) uint32) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint32) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Uint64: + { + argfun := arg.WithFun().(func(env *Env) uint64) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint64) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Uintptr: + { + argfun := arg.WithFun().(func(env *Env) uintptr) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uintptr) complex128) + arg := argfun(env) + return fun(arg) + } + } + case r.Float32: + { + argfun := arg.WithFun().(func(env *Env) float32) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(float32) complex128) + arg := argfun(env) + return fun(arg) + } + } + + case r.Float64: + { + argfun := arg.WithFun().(func(env *Env) float64) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(float64) complex128) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex64: + { + argfun := arg.WithFun().(func(env *Env) complex64) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(complex64) complex128) + arg := argfun(env) + return fun(arg) + } + } + + case r.Complex128: + { + argfun := arg.WithFun().(func(env *Env) complex128) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(complex128) complex128) + arg := argfun(env) + return fun(arg) + } + } + + case r.String: + { + argfun := arg.WithFun().(func(env *Env) string) + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(string) complex128) + arg := argfun(env) + return fun(arg) + } + } + + default: + ret = func(env *Env) complex128 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Complex() + } + } + } + + case r.String: + switch karg { + case r.Bool: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool) string + if arg.Const() { + argconst := r.ValueOf(arg.Value).Bool() + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) bool) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) bool) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(bool) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(bool) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(bool) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int) string + if arg.Const() { + argconst := int( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(int) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(int) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) string + if arg.Const() { + argconst := int8( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int8) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(int8) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(int8) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int8) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) string + if arg.Const() { + argconst := int16( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int16) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(int16) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(int16) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int16) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32) string + if arg.Const() { + argconst := int32( + + r.ValueOf(arg.Value).Int()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int32) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(int32) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(int32) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int32) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Int64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64) string + if arg.Const() { + argconst := r.ValueOf(arg.Value).Int() + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) int64) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) int64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(int64) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(int64) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int64) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint) string + if arg.Const() { + argconst := uint( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(uint) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(uint) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint8: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) string + if arg.Const() { + argconst := uint8( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint8) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(uint8) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(uint8) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint8) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint16: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) string + if arg.Const() { + argconst := uint16( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint16) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(uint16) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(uint16) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint16) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) string + if arg.Const() { + argconst := uint32( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint32) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(uint32) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(uint32) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint32) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uint64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64) string + if arg.Const() { + argconst := r.ValueOf(arg.Value).Uint() + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uint64) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(uint64) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(uint64) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint64) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Uintptr: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) string + if arg.Const() { + argconst := uintptr( + + r.ValueOf(arg.Value).Uint()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) uintptr) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(uintptr) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(uintptr) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uintptr) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float32: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) string + if arg.Const() { + argconst := float32( + + r.ValueOf(arg.Value).Float()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float32) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float32) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(float32) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(float32) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(float32) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Float64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) string + if arg.Const() { + argconst := r.ValueOf(arg.Value).Float() + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) float64) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) float64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(float64) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(float64) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(float64) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex64: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) string + if arg.Const() { + argconst := complex64( + + r.ValueOf(arg.Value).Complex()) + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex64) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(complex64) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(complex64) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(complex64) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.Complex128: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) string + if arg.Const() { + argconst := r.ValueOf(arg.Value).Complex() + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) complex128) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(complex128) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(complex128) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(complex128) string) + arg := argfun(env) + return fun(arg) + } + } + + } + case r.String: + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string) string + if arg.Const() { + argconst := r.ValueOf(arg.Value).String() + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) string) + } + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) string) + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string) string) + } + + arg := argfun(env) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) string) + if funsym != nil && funupn == 0 { + ret = func(env *Env) string { + fun := env.Binds[funindex].Interface().(func(string) string) + arg := argfun(env) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) string { + fun := env.Outer.Binds[funindex].Interface().(func(string) string) + arg := argfun(env) + return fun(arg) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(string) string) + arg := argfun(env) + return fun(arg) + } + } + + } + default: + ret = func(env *Env) string { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + + ret0 := funv.Call(argv)[0] + return ret0.String() + } + } + + } + if ret == nil { + ret = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + return funv.Call(argv)[0] + } + } + return ret +} +func (c *Comp) call1ret1namedtype(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + t := expr.Type + kret := t.Out(0).Kind() + + argfun := call.Args[0].AsX1() + var ret I + + switch kret { + case r.Bool: + ret = func(env *Env) bool { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Bool() + } + case r.Int: + ret = func(env *Env) int { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int(retv.Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int8(retv.Int()) + } + + case r.Int16: + ret = func(env *Env) int16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int16(retv.Int()) + } + + case r.Int32: + ret = func(env *Env) int32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int32(retv.Int()) + } + + case r.Int64: + ret = func(env *Env) int64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Int() + } + + case r.Uint: + ret = func(env *Env) uint { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint(retv.Uint()) + } + + case r.Uint8: + ret = func(env *Env) uint8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint8(retv.Uint()) + } + + case r.Uint16: + ret = func(env *Env) uint16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint16(retv.Uint()) + } + + case r.Uint32: + ret = func(env *Env) uint32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint32(retv.Uint()) + } + + case r.Uint64: + ret = func(env *Env) uint64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Uint() + } + + case r.Uintptr: + ret = func(env *Env) uintptr { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uintptr(retv.Uint()) + } + + case r.Float32: + ret = func(env *Env) float32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return float32(retv.Float()) + } + + case r.Float64: + ret = func(env *Env) float64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Float() + } + + case r.Complex64: + ret = func(env *Env) complex64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return complex64(retv.Complex()) + } + + case r.Complex128: + ret = func(env *Env) complex128 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Complex() + } + + case r.String: + ret = func(env *Env) string { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.String() + } + + } + if ret == nil { + ret = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + return funv.Call(argv)[0] + } + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call1ret1.gomacro b/vendor/github.com/cosmos72/gomacro/fast/call1ret1.gomacro new file mode 100644 index 0000000..7b6aa7a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call1ret1.gomacro @@ -0,0 +1,341 @@ +// +build !gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call1ret1.go + * + * Created on Apr 15, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +:import ( + "go/ast" + "go/token" + r "reflect" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func maketypevar(typ ast.Node) ast.Node { + t := EvalType(typ) + return &ast.Ident{Name: "TypeOf" + upcasefirstbyte(t.Name())} +} + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +:macro mcall1ret1(argtyp, rettyp ast.Node) ast.Node { + if EvalType(rettyp) == nil { + // keep the arguments and result wrapped in a reflect.Value + return ~"{ + ret = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + return funv.Call(argv)[0] + } + } + } + if EvalType(argtyp) == nil { + ret0 := convertvalue1(rettyp, ~'ret0) + + return ~"{ + ret = func(env *Env) ~,rettyp { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + // Debugf("calling %v with args [%v]", r.TypeOf(funv), argv) + ret0 := funv.Call(argv)[0] + return ~,ret0 + } + } + } + + cachefun := ~"{ + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(~,argtyp) ~,rettyp) + } + } + + argconv := convertvalue1(argtyp, ~'{r.ValueOf(arg.Value)}) + + return ~"{ + // Debugf("compiling call to %v, funsym=%p, funupn=%v, maxdepth=%v", r.TypeOf((func(~,argtyp) ~,rettyp)(nil)), funsym, funupn, maxdepth) + if funsym != nil && funupn == maxdepth - 1 { + var cachedfun func(~,argtyp) ~,rettyp + if arg.Const() { + argconst := ~,argconv + ret = func(env *Env) ~,rettyp { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + ~,cachefun + // Debugf("calling %v with args [%v]", r.TypeOf(cachedfun), argconst) + return cachedfun(argconst) + } + } else { + argfun := arg.Fun.(func(env *Env) ~,argtyp) + ret = func(env *Env) ~,rettyp { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + ~,cachefun + arg := argfun(env) + // Debugf("calling %v with args [%v]", r.TypeOf(fun), arg) + return cachedfun(arg) + } + } + } else { + argfun := arg.WithFun().(func(env *Env) ~,argtyp) + if funsym != nil && funupn == 0 { + ret = func(env *Env) ~,rettyp { + fun := env.Binds[funindex].Interface().(func(~,argtyp) ~,rettyp) + arg := argfun(env) + // Debugf("calling %v with args [%v]", r.TypeOf(fun), arg) + return fun(arg) + } + } else if funsym != nil && funupn == 1 { + ret = func(env *Env) ~,rettyp { + fun := env.Outer.Binds[funindex].Interface().(func(~,argtyp) ~,rettyp) + arg := argfun(env) + // Debugf("calling %v with args [%v]", r.TypeOf(fun), arg) + return fun(arg) + } + } else { + ret = func(env *Env) ~,rettyp { + fun := exprfun(env).Interface().(func(~,argtyp) ~,rettyp) + arg := argfun(env) + // Debugf("calling %v with args [%v]", r.TypeOf(fun), arg) + return fun(arg) + } + } + } + } +} + +:macro mcall1ret1compact(argtyp, rettyp ast.Node) ast.Node { + if EvalType(rettyp) == nil || EvalType(argtyp) == nil { + // nothing to optimize... + return ~"{mcall1ret1; ~,argtyp; ~,rettyp} + } + + return ~"{ + argfun := arg.WithFun().(func(env *Env) ~,argtyp) + ret = func(env *Env) ~,rettyp { + fun := exprfun(env).Interface().(func(~,argtyp) ~,rettyp) + arg := argfun(env) + // Debugf("calling %v with args [%v]", r.TypeOf(fun), argconst) + return fun(arg) + } + } +} + +:macro mcallx1ret1(rettyp ast.Node) ast.Node { + return ~"{ + switch karg { + case r.Bool: {mcall1ret1; bool; ~,rettyp} + case r.Int: {mcall1ret1; int; ~,rettyp} + case r.Int8: {mcall1ret1; int8; ~,rettyp} + case r.Int16: {mcall1ret1; int16; ~,rettyp} + case r.Int32: {mcall1ret1; int32; ~,rettyp} + case r.Int64: {mcall1ret1; int64; ~,rettyp} + case r.Uint: {mcall1ret1; uint; ~,rettyp} + case r.Uint8: {mcall1ret1; uint8; ~,rettyp} + case r.Uint16: {mcall1ret1; uint16; ~,rettyp} + case r.Uint32: {mcall1ret1; uint32; ~,rettyp} + case r.Uint64: {mcall1ret1; uint64; ~,rettyp} + case r.Uintptr: {mcall1ret1; uintptr; ~,rettyp} + case r.Float32: {mcall1ret1; float32; ~,rettyp} + case r.Float64: {mcall1ret1; float64; ~,rettyp} + case r.Complex64: {mcall1ret1; complex64; ~,rettyp} + case r.Complex128:{mcall1ret1; complex128; ~,rettyp} + case r.String: {mcall1ret1; string; ~,rettyp} + default: {mcall1ret1; nil; ~,rettyp} + } + } +} + +:macro mcallx1ret1compact(rettyp ast.Node) ast.Node { + return ~"{ + switch karg { + case r.Bool: {mcall1ret1compact; bool; ~,rettyp} + case r.Int: {mcall1ret1compact; int; ~,rettyp} + case r.Int8: {mcall1ret1compact; int8; ~,rettyp} + case r.Int16: {mcall1ret1compact; int16; ~,rettyp} + case r.Int32: {mcall1ret1compact; int32; ~,rettyp} + case r.Int64: {mcall1ret1compact; int64; ~,rettyp} + case r.Uint: {mcall1ret1compact; uint; ~,rettyp} + case r.Uint8: {mcall1ret1compact; uint8; ~,rettyp} + case r.Uint16: {mcall1ret1compact; uint16; ~,rettyp} + case r.Uint32: {mcall1ret1compact; uint32; ~,rettyp} + case r.Uint64: {mcall1ret1compact; uint64; ~,rettyp} + case r.Uintptr: {mcall1ret1compact; uintptr; ~,rettyp} + case r.Float32: {mcall1ret1compact; float32; ~,rettyp} + case r.Float64: {mcall1ret1compact; float64; ~,rettyp} + case r.Complex64: {mcall1ret1compact; complex64; ~,rettyp} + case r.Complex128:{mcall1ret1compact; complex128; ~,rettyp} + case r.String: {mcall1ret1compact; string; ~,rettyp} + default: {mcall1ret1compact; nil; ~,rettyp} + } + } +} + +func (c *Comp) call1ret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + Errorf("internal error: call1ret1() invoked for constant function %v. use call_builtin() instead", expr) + } + } + t := expr.Type + targ, tret := t.In(0), t.Out(0) + karg, kret := targ.Kind(), tret.Kind() + var ret I + if KindToType(karg) != targ.ReflectType() || KindToType(kret) != tret.ReflectType() { + return c.call1ret1namedtype(call, maxdepth) + } + arg := call.Args[0] + argfun := arg.AsX1() + var cachedfunv r.Value + + switch kret { + // do NOT optimize all cases... too many combinations + case r.Bool: {mcallx1ret1; bool} + case r.Int: {mcallx1ret1; int} + case r.Int8: if karg == kret {mcall1ret1; int8; int8} else {mcallx1ret1compact; int8} + case r.Int16: if karg == kret {mcall1ret1; int16; int16} else {mcallx1ret1compact; int16} + case r.Int32: {mcallx1ret1; int32} + case r.Int64: {mcallx1ret1; int64} + case r.Uint: {mcallx1ret1; uint} + case r.Uint8: if karg == kret {mcall1ret1; uint8; uint8} else {mcallx1ret1compact; uint8} + case r.Uint16: if karg == kret {mcall1ret1; uint16; uint16} else {mcallx1ret1compact; uint16} + case r.Uint32: if karg == kret {mcall1ret1; uint32; uint32} else {mcallx1ret1compact; uint32} + case r.Uint64: {mcallx1ret1; uint64} + case r.Uintptr: if karg == kret {mcall1ret1; uintptr; uintptr} else {mcallx1ret1compact; uintptr} + case r.Float32: if karg == kret {mcall1ret1; float32; float32} else {mcallx1ret1compact; float32} + case r.Float64: if karg == kret {mcall1ret1; float64; float64} else {mcallx1ret1compact; float64} + case r.Complex64: if karg == kret {mcall1ret1; complex64; complex64} else {mcallx1ret1compact; complex64} + case r.Complex128:if karg == kret {mcall1ret1; complex128; complex128} else {mcallx1ret1compact; complex128} + case r.String: {mcallx1ret1; string} + } + if ret == nil { + {mcall1ret1; nil; nil} // cannot optimize more this one... + } + return ret +} + +:macro mcallx1ret1namedtype(rettyp ast.Node) ast.Node { + retconv := convertvalue1(rettyp, ~'retv) + + return ~"{ + ret = func(env *Env) ~,rettyp { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return ~,retconv + } + } +} + +func (c *Comp) call1ret1namedtype(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + t := expr.Type + kret := t.Out(0).Kind() + + argfun := call.Args[0].AsX1() + var ret I + + switch kret { + case r.Bool: {mcallx1ret1namedtype; bool} + case r.Int: {mcallx1ret1namedtype; int} + case r.Int8: {mcallx1ret1namedtype; int8} + case r.Int16: {mcallx1ret1namedtype; int16} + case r.Int32: {mcallx1ret1namedtype; int32} + case r.Int64: {mcallx1ret1namedtype; int64} + case r.Uint: {mcallx1ret1namedtype; uint} + case r.Uint8: {mcallx1ret1namedtype; uint8} + case r.Uint16: {mcallx1ret1namedtype; uint16} + case r.Uint32: {mcallx1ret1namedtype; uint32} + case r.Uint64: {mcallx1ret1namedtype; uint64} + case r.Uintptr: {mcallx1ret1namedtype; uintptr} + case r.Float32: {mcallx1ret1namedtype; float32} + case r.Float64: {mcallx1ret1namedtype; float64} + case r.Complex64: {mcallx1ret1namedtype; complex64} + case r.Complex128:{mcallx1ret1namedtype; complex128} + case r.String: {mcallx1ret1namedtype; string} + } + if ret == nil { + {mcall1ret1; nil; nil} // cannot optimize more this one... + } + return ret +} + diff --git a/vendor/github.com/cosmos72/gomacro/fast/call1ret1compact.go b/vendor/github.com/cosmos72/gomacro/fast/call1ret1compact.go new file mode 100644 index 0000000..5d3c91d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call1ret1compact.go @@ -0,0 +1,222 @@ +// +build gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call1ret1compact.go + * + * Created on Apr 15, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" +) + +func (c *Comp) call1ret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + + arg := call.Args[0] + argfun := arg.AsX1() + var ret I + + switch expr.Type.Out(0).Kind() { + case r.Bool: + ret = func(env *Env) bool { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Bool() + } + + case r.Int: + ret = func(env *Env) int { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int(retv.Int()) + } + + case r.Int8: + ret = func(env *Env) int8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int8(retv.Int()) + } + + case r.Int16: + ret = func(env *Env) int16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int16(retv.Int()) + } + + case r.Int32: + ret = func(env *Env) int32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int32(retv.Int()) + } + + case r.Int64: + ret = func(env *Env) int64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Int() + } + + case r.Uint: + ret = func(env *Env) uint { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint(retv.Uint()) + } + + case r.Uint8: + ret = func(env *Env) uint8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint8(retv.Uint()) + } + + case r.Uint16: + ret = func(env *Env) uint16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint16(retv.Uint()) + } + + case r.Uint32: + ret = func(env *Env) uint32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint32(retv.Uint()) + } + + case r.Uint64: + ret = func(env *Env) uint64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Uint() + } + + case r.Uintptr: + ret = func(env *Env) uintptr { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uintptr(retv.Uint()) + } + + case r.Float32: + ret = func(env *Env) float32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return float32(retv.Float()) + } + + case r.Float64: + ret = func(env *Env) float64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Float() + } + + case r.Complex64: + ret = func(env *Env) complex64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return complex64(retv.Complex()) + } + + case r.Complex128: + ret = func(env *Env) complex128 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Complex() + } + + case r.String: + ret = func(env *Env) string { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.String() + } + default: + ret = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + return funv.Call(argv)[0] + } + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call2ret1.go b/vendor/github.com/cosmos72/gomacro/fast/call2ret1.go new file mode 100644 index 0000000..0ad68bd --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call2ret1.go @@ -0,0 +1,8828 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +// +build !gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call_ret1.go + * + * Created on Apr 15, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) call2ret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + Errorf("internal error: call2ret1() invoked for constant function %#v. use call_builtin() instead", expr) + } + + } + t := expr.Type + rtarg0, rtarg1, rtret := t.In(0).ReflectType(), t.In(1).ReflectType(), t.Out(0).ReflectType() + karg0, kret := rtarg0.Kind(), rtret.Kind() + args := call.Args + argfunsX1 := call.MakeArgfunsX1() + argfuns := [2]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + var cachedfunv r.Value + var ret I + if KindToType(kret) == rtret { + switch kret { + case r.Bool: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(bool, bool) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int, int) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int8, int8) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int16, int16) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int32, int32) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(int64, int64) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint, uint) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint8, uint8) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint16, uint16) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint32, uint32) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uint64, uint64) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(uintptr, uintptr) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(float32, float32) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(float64, float64) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(complex64, complex64) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(complex128, complex128) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) bool + + ret = func(env *Env) bool { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) bool) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) bool { + fun := exprfun(env).Interface().(func(string, string) bool) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) bool { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Bool() + } + } + + } + case r.Int: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(bool, bool) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int, int) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int8, int8) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int16, int16) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int32, int32) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(int64, int64) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint, uint) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint8, uint8) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint16, uint16) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint32, uint32) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uint64, uint64) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(uintptr, uintptr) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(float32, float32) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(float64, float64) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(complex64, complex64) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(complex128, complex128) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) int + + ret = func(env *Env) int { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) int) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int { + fun := exprfun(env).Interface().(func(string, string) int) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) int { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return int(ret0.Int()) + } + } + + } + case r.Int8: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(bool, bool) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int, int) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int8, int8) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int16, int16) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int32, int32) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(int64, int64) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint, uint) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint8, uint8) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint16, uint16) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint32, uint32) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uint64, uint64) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(float32, float32) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(float64, float64) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(complex64, complex64) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(complex128, complex128) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) int8 + + ret = func(env *Env) int8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) int8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int8 { + fun := exprfun(env).Interface().(func(string, string) int8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) int8 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return int8(ret0.Int()) + } + } + + } + case r.Int16: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(bool, bool) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int, int) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int8, int8) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int16, int16) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int32, int32) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(int64, int64) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint, uint) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint8, uint8) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint16, uint16) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint32, uint32) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uint64, uint64) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(float32, float32) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(float64, float64) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(complex64, complex64) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(complex128, complex128) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) int16 + + ret = func(env *Env) int16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) int16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int16 { + fun := exprfun(env).Interface().(func(string, string) int16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) int16 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return int16(ret0.Int()) + } + } + + } + case r.Int32: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(bool, bool) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int, int) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int8, int8) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int16, int16) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int32, int32) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(int64, int64) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint, uint) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint8, uint8) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint16, uint16) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint32, uint32) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uint64, uint64) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(float32, float32) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(float64, float64) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(complex64, complex64) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(complex128, complex128) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) int32 + + ret = func(env *Env) int32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) int32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int32 { + fun := exprfun(env).Interface().(func(string, string) int32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) int32 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return int32(ret0.Int()) + } + } + + } + case r.Int64: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(bool, bool) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int, int) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int8, int8) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int16, int16) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int32, int32) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(int64, int64) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint, uint) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint8, uint8) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint16, uint16) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint32, uint32) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uint64, uint64) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(float32, float32) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(float64, float64) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(complex64, complex64) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(complex128, complex128) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) int64 + + ret = func(env *Env) int64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) int64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) int64 { + fun := exprfun(env).Interface().(func(string, string) int64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) int64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Int() + } + } + + } + case r.Uint: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(bool, bool) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int, int) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int8, int8) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int16, int16) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int32, int32) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(int64, int64) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint, uint) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint8, uint8) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint16, uint16) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint32, uint32) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uint64, uint64) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(uintptr, uintptr) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(float32, float32) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(float64, float64) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(complex64, complex64) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(complex128, complex128) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) uint + + ret = func(env *Env) uint { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) uint) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint { + fun := exprfun(env).Interface().(func(string, string) uint) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) uint { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return uint(ret0.Uint()) + } + } + + } + case r.Uint8: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(bool, bool) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int, int) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int8, int8) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int16, int16) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int32, int32) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(int64, int64) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint, uint) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint8, uint8) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint16, uint16) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint32, uint32) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uint64, uint64) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(float32, float32) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(float64, float64) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(complex64, complex64) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(complex128, complex128) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) uint8 + + ret = func(env *Env) uint8 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) uint8) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint8 { + fun := exprfun(env).Interface().(func(string, string) uint8) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) uint8 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return uint8(ret0.Uint()) + } + } + + } + + case r.Uint16: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(bool, bool) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int, int) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int8, int8) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int16, int16) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int32, int32) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(int64, int64) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint, uint) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint8, uint8) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint16, uint16) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint32, uint32) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uint64, uint64) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(float32, float32) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(float64, float64) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(complex64, complex64) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(complex128, complex128) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) uint16 + + ret = func(env *Env) uint16 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) uint16) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint16 { + fun := exprfun(env).Interface().(func(string, string) uint16) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) uint16 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return uint16(ret0.Uint()) + } + } + + } + + case r.Uint32: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(bool, bool) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int, int) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int8, int8) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int16, int16) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int32, int32) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(int64, int64) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint, uint) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint8, uint8) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint16, uint16) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint32, uint32) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uint64, uint64) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(float32, float32) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(float64, float64) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(complex64, complex64) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(complex128, complex128) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) uint32 + + ret = func(env *Env) uint32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) uint32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint32 { + fun := exprfun(env).Interface().(func(string, string) uint32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) uint32 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return uint32(ret0.Uint()) + } + } + + } + + case r.Uint64: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(bool, bool) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int, int) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int8, int8) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int16, int16) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int32, int32) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(int64, int64) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint, uint) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint8, uint8) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint16, uint16) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint32, uint32) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uint64, uint64) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(float32, float32) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(float64, float64) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(complex64, complex64) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(complex128, complex128) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) uint64 + + ret = func(env *Env) uint64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) uint64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uint64 { + fun := exprfun(env).Interface().(func(string, string) uint64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) uint64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Uint() + } + } + + } + + case r.Uintptr: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(bool, bool) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int, int) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int8, int8) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int16, int16) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int32, int32) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(int64, int64) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint, uint) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint8, uint8) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint16, uint16) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint32, uint32) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uint64, uint64) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(uintptr, uintptr) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(float32, float32) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(float64, float64) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(complex64, complex64) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(complex128, complex128) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) uintptr + + ret = func(env *Env) uintptr { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) uintptr) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) uintptr { + fun := exprfun(env).Interface().(func(string, string) uintptr) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) uintptr { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return uintptr(ret0.Uint()) + } + } + + } + + case r.Float32: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(bool, bool) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int, int) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int8, int8) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int16, int16) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int32, int32) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(int64, int64) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint, uint) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint8, uint8) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint16, uint16) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint32, uint32) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uint64, uint64) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(float32, float32) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(float64, float64) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(complex64, complex64) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(complex128, complex128) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) float32 + + ret = func(env *Env) float32 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) float32) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float32 { + fun := exprfun(env).Interface().(func(string, string) float32) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) float32 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return float32(ret0.Float()) + } + } + + } + + case r.Float64: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(bool, bool) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int, int) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int8, int8) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int16, int16) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int32, int32) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(int64, int64) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint, uint) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint8, uint8) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint16, uint16) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint32, uint32) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uint64, uint64) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(float32, float32) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(float64, float64) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(complex64, complex64) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(complex128, complex128) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) float64 + + ret = func(env *Env) float64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) float64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) float64 { + fun := exprfun(env).Interface().(func(string, string) float64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) float64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Float() + } + } + + } + + case r.Complex64: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(bool, bool) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int, int) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int8, int8) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int16, int16) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int32, int32) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(int64, int64) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint, uint) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint8, uint8) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint16, uint16) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint32, uint32) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uint64, uint64) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(float32, float32) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(float64, float64) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(complex64, complex64) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(complex128, complex128) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) complex64 + + ret = func(env *Env) complex64 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) complex64) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex64 { + fun := exprfun(env).Interface().(func(string, string) complex64) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) complex64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return complex64(ret0.Complex()) + } + } + + } + + case r.Complex128: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(bool, bool) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int, int) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int8, int8) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int16, int16) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int32, int32) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(int64, int64) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint, uint) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint8, uint8) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint16, uint16) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint32, uint32) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uint64, uint64) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(uintptr, uintptr) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(float32, float32) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(float64, float64) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(complex64, complex64) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(complex128, complex128) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) complex128 + + ret = func(env *Env) complex128 { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) complex128) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) complex128 { + fun := exprfun(env).Interface().(func(string, string) complex128) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) complex128 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return ret0.Complex() + } + } + + } + + case r.String: + { + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: + + { + arg0fun := args[0].WithFun().(func(env *Env) bool) + arg1fun := args[1].WithFun().(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(bool, bool) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int: + + { + arg0fun := args[0].WithFun().(func(env *Env) int) + arg1fun := args[1].WithFun().(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int, int) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int8: + + { + arg0fun := args[0].WithFun().(func(env *Env) int8) + arg1fun := args[1].WithFun().(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int8, int8) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int16: + + { + arg0fun := args[0].WithFun().(func(env *Env) int16) + arg1fun := args[1].WithFun().(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int16, int16) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int32: + + { + arg0fun := args[0].WithFun().(func(env *Env) int32) + arg1fun := args[1].WithFun().(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int32, int32) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Int64: + + { + arg0fun := args[0].WithFun().(func(env *Env) int64) + arg1fun := args[1].WithFun().(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(int64, int64) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint) + arg1fun := args[1].WithFun().(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint, uint) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint8: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint8) + arg1fun := args[1].WithFun().(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint8, uint8) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint16: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint16) + arg1fun := args[1].WithFun().(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint16, uint16) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint32: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint32) + arg1fun := args[1].WithFun().(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint32, uint32) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uint64: + + { + arg0fun := args[0].WithFun().(func(env *Env) uint64) + arg1fun := args[1].WithFun().(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uint64, uint64) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Uintptr: + + { + arg0fun := args[0].WithFun().(func(env *Env) uintptr) + arg1fun := args[1].WithFun().(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(uintptr, uintptr) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float32: + + { + arg0fun := args[0].WithFun().(func(env *Env) float32) + arg1fun := args[1].WithFun().(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(float32, float32) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Float64: + + { + arg0fun := args[0].WithFun().(func(env *Env) float64) + arg1fun := args[1].WithFun().(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(float64, float64) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex64: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex64) + arg1fun := args[1].WithFun().(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(complex64, complex64) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.Complex128: + + { + arg0fun := args[0].WithFun().(func(env *Env) complex128) + arg1fun := args[1].WithFun().(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(complex128, complex128) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + case r.String: + + { + arg0fun := args[0].WithFun().(func(env *Env) string) + arg1fun := args[1].WithFun().(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) string + + ret = func(env *Env) string { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string) string) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) string { + fun := exprfun(env).Interface().(func(string, string) string) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + return fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) string { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + + ret0 := funv.Call(argv)[0] + return ret0.String() + } + } + + } + + } + } + + if ret == nil { + ret = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + return funv.Call(argv)[0] + } + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call2ret1.gomacro b/vendor/github.com/cosmos72/gomacro/fast/call2ret1.gomacro new file mode 100644 index 0000000..30476dc --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call2ret1.gomacro @@ -0,0 +1,258 @@ +// +build !gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call_ret1.go + * + * Created on Apr 15, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +:import ( + "go/ast" + "go/token" + r "reflect" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func convertret0(typ ast.Node) (ast.Node, ast.Node) { + var t r.Type = EvalType(typ) + var ret0 ast.Node = ~'{ret0} // set type ast.Node: classic interpreter is too clever and deduces *ast.Ident + if t == nil { + // keep the result wrapped in a reflect.Value + typ = ~'{r.Value} + } else { + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,ret0 . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + ret0 = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + ret0 = ~"{~,typ ( ~,sel () )} + } + } + return typ, ret0 +} + +:macro mcall2ret1(arg0typ, arg1typ, rettyp ast.Node) ast.Node { + if EvalType(rettyp) == nil { + // keep the arguments and result wrapped in a reflect.Value + return ~"{ + ret = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + return funv.Call(argv)[0] + } + } + } + var ret0 ast.Node // unused + rettyp, ret0 = convertret0(rettyp) + + if EvalType(arg0typ) == nil || EvalType(arg1typ) == nil { + return ~"{ + ret = func(env *Env) ~,rettyp { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + // Debugf("calling %v with args [%v]", r.TypeOf(funv), argv) + ret0 := funv.Call(argv)[0] + return ~,ret0 + } + } + } + + cachefun := ~"{ + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(~,arg0typ , ~,arg1typ) ~,rettyp) + } + } + + return ~"{ + arg0fun := args[0].WithFun().(func(env *Env) ~,arg0typ) + arg1fun := args[1].WithFun().(func(env *Env) ~,arg1typ) + if funsym != nil && funupn == maxdepth - 1 { + var cachedfun func(~,arg0typ, ~,arg1typ) ~,rettyp + ret = func(env *Env) ~,rettyp { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + ~,cachefun + arg0 := arg0fun(env) + arg1 := arg1fun(env) + // Debugf("calling %v with args [%v %v]", r.TypeOf(fun), arg0, arg1) + return cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) ~,rettyp { + fun := exprfun(env).Interface().(func(~,arg0typ , ~,arg1typ) ~,rettyp) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + // Debugf("calling %v with args [%v %v]", r.TypeOf(fun), arg0, arg1) + return fun(arg0, arg1) + } + } + } +} + +// not used, see comment below in mcallxy2ret1 +:macro __mcallx2ret1(arg1typ, rettyp ast.Node) ast.Node { + return ~"{ + switch karg0 { + case r.Bool: {mcall2ret1; bool; ~,arg1typ; ~,rettyp} + case r.Int: {mcall2ret1; int; ~,arg1typ; ~,rettyp} + case r.Int8: {mcall2ret1; int8; ~,arg1typ; ~,rettyp} + case r.Int16: {mcall2ret1; int16; ~,arg1typ; ~,rettyp} + case r.Int32: {mcall2ret1; int32; ~,arg1typ; ~,rettyp} + case r.Int64: {mcall2ret1; int64; ~,arg1typ; ~,rettyp} + case r.Uint: {mcall2ret1; uint; ~,arg1typ; ~,rettyp} + case r.Uint8: {mcall2ret1; uint8; ~,arg1typ; ~,rettyp} + case r.Uint16: {mcall2ret1; uint16; ~,arg1typ; ~,rettyp} + case r.Uint32: {mcall2ret1; uint32; ~,arg1typ; ~,rettyp} + case r.Uint64: {mcall2ret1; uint64; ~,arg1typ; ~,rettyp} + case r.Uintptr: {mcall2ret1; uintptr; ~,arg1typ; ~,rettyp} + case r.Float32: {mcall2ret1; float32; ~,arg1typ; ~,rettyp} + case r.Float64: {mcall2ret1; float64; ~,arg1typ; ~,rettyp} + case r.Complex64: {mcall2ret1; complex64; ~,arg1typ; ~,rettyp} + case r.Complex128:{mcall2ret1; complex128; ~,arg1typ; ~,rettyp} + case r.String: {mcall2ret1; string; ~,arg1typ; ~,rettyp} + default: {mcall2ret1; nil; ~,arg1typ; ~,rettyp} + } + } +} + +:macro mcallxy2ret1(rettyp ast.Node) ast.Node { + // generating all combinations func(targ0,targ1) tret + // produces a 6MB source file... definitely too much + // + // Only optimize func(targ0,targ0) tret + // i.e. if the two args have the same type - still produces a 240kB source file + return ~"{ + if rtarg0 == rtarg1 && KindToType(karg0) == rtarg0 { + switch karg0 { + case r.Bool: {mcall2ret1; bool; bool; ~,rettyp} + case r.Int: {mcall2ret1; int; int; ~,rettyp} + case r.Int8: {mcall2ret1; int8; int8; ~,rettyp} + case r.Int16: {mcall2ret1; int16; int16; ~,rettyp} + case r.Int32: {mcall2ret1; int32; int32; ~,rettyp} + case r.Int64: {mcall2ret1; int64; int64; ~,rettyp} + case r.Uint: {mcall2ret1; uint; uint; ~,rettyp} + case r.Uint8: {mcall2ret1; uint8; uint8; ~,rettyp} + case r.Uint16: {mcall2ret1; uint16; uint16; ~,rettyp} + case r.Uint32: {mcall2ret1; uint32; uint32; ~,rettyp} + case r.Uint64: {mcall2ret1; uint64; uint64; ~,rettyp} + case r.Uintptr: {mcall2ret1; uintptr; uintptr; ~,rettyp} + case r.Float32: {mcall2ret1; float32; float32; ~,rettyp} + case r.Float64: {mcall2ret1; float64; float64; ~,rettyp} + case r.Complex64: {mcall2ret1; complex64; complex64; ~,rettyp} + case r.Complex128:{mcall2ret1; complex128; complex128; ~,rettyp} + case r.String: {mcall2ret1; string; string; ~,rettyp} + } + } + if ret == nil { + {mcall2ret1; nil; nil; ~,rettyp} + } + } +} + +func (c *Comp) call2ret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + Errorf("internal error: call2ret1() invoked for constant function %#v. use call_builtin() instead", expr) + } + } + t := expr.Type + rtarg0, rtarg1, rtret := t.In(0).ReflectType(), t.In(1).ReflectType(), t.Out(0).ReflectType() + karg0, kret := rtarg0.Kind(), rtret.Kind() + args := call.Args + argfunsX1 := call.MakeArgfunsX1() + argfuns := [2]func(*Env) r.Value { + argfunsX1[0], + argfunsX1[1], + } + var cachedfunv r.Value + var ret I + if KindToType(kret) == rtret { + switch kret { + case r.Bool: {mcallxy2ret1; bool} + case r.Int: {mcallxy2ret1; int} + case r.Int8: {mcallxy2ret1; int8} + case r.Int16: {mcallxy2ret1; int16} + case r.Int32: {mcallxy2ret1; int32} + case r.Int64: {mcallxy2ret1; int64} + case r.Uint: {mcallxy2ret1; uint} + case r.Uint8: {mcallxy2ret1; uint8} + case r.Uint16: {mcallxy2ret1; uint16} + case r.Uint32: {mcallxy2ret1; uint32} + case r.Uint64: {mcallxy2ret1; uint64} + case r.Uintptr: {mcallxy2ret1; uintptr} + case r.Float32: {mcallxy2ret1; float32} + case r.Float64: {mcallxy2ret1; float64} + case r.Complex64: {mcallxy2ret1; complex64} + case r.Complex128:{mcallxy2ret1; complex128} + case r.String: {mcallxy2ret1; string} + } + } + if ret == nil { + {mcall2ret1; nil; nil; nil} // cannot optimize more this one... + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call2ret1compact.go b/vendor/github.com/cosmos72/gomacro/fast/call2ret1compact.go new file mode 100644 index 0000000..e1663ba --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call2ret1compact.go @@ -0,0 +1,32 @@ +// +build gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call1ret1compact.go + * + * Created on Jun 14, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +func (c *Comp) call2ret1(call *Call, maxdepth int) I { + return c.callnret1(call, maxdepth) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call_ellipsis.go b/vendor/github.com/cosmos72/gomacro/fast/call_ellipsis.go new file mode 100644 index 0000000..f0bc691 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call_ellipsis.go @@ -0,0 +1,697 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call_ellipsis.go + * + * Created on May 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" +) + +// call a variadic function, when arguments CONTAIN '...' +func call_ellipsis_ret0(c *Call, maxdepth int) func(env *Env) { + exprfun := c.Fun.AsX1() + argfunsX1 := c.MakeArgfunsX1() + var call func(*Env) + switch c.Fun.Type.NumIn() { + case 1: + argfun := argfunsX1[0] + call = func(env *Env) { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + funv.CallSlice(argv) + } + case 2: + argfuns := [2]func(env *Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + call = func(env *Env) { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + funv.CallSlice(argv) + } + case 3: + argfuns := [3]func(env *Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + argfunsX1[2], + } + call = func(env *Env) { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + argfuns[2](env), + } + funv.CallSlice(argv) + } + } + if call == nil { + call = func(env *Env) { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + funv.CallSlice(argv) + } + } + return call +} + +// mandatory optimization: fast_interpreter ASSUMES that expressions +// returning bool, int, uint, float, complex, string do NOT wrap them in reflect.Value +func call_ellipsis_ret1(c *Call, maxdepth int) I { + exprfun := c.Fun.AsX1() + argfunsX1 := c.MakeArgfunsX1() + kout := c.Fun.Type.Out(0).Kind() + var call I + switch c.Fun.Type.NumIn() { + case 1: + argfun := argfunsX1[0] + switch kout { + case r.Bool: + call = func(env *Env) bool { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return retv.Bool() + } + case r.Int: + call = func(env *Env) int { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return int(retv.Int()) + } + case r.Int8: + call = func(env *Env) int8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return int8(retv.Int()) + } + case r.Int16: + call = func(env *Env) int16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return int16(retv.Int()) + } + case r.Int32: + call = func(env *Env) int32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return int32(retv.Int()) + } + case r.Int64: + call = func(env *Env) int64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return retv.Int() + } + case r.Uint: + call = func(env *Env) uint { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return uint(retv.Uint()) + } + case r.Uint8: + call = func(env *Env) uint8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return uint8(retv.Uint()) + } + case r.Uint16: + call = func(env *Env) uint16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return uint16(retv.Uint()) + } + case r.Uint32: + call = func(env *Env) uint32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return uint32(retv.Uint()) + } + case r.Uint64: + call = func(env *Env) uint64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return retv.Uint() + } + case r.Uintptr: + call = func(env *Env) uintptr { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return uintptr(retv.Uint()) + } + case r.Float32: + call = func(env *Env) float32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return float32(retv.Float()) + } + case r.Float64: + call = func(env *Env) float64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return retv.Float() + } + case r.Complex64: + call = func(env *Env) complex64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return complex64(retv.Complex()) + } + case r.Complex128: + call = func(env *Env) complex128 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return retv.Complex() + } + case r.String: + call = func(env *Env) string { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv)[0] + return retv.String() + } + default: + call = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + return funv.CallSlice(argv)[0] + } + } + case 2: + argfuns := [2]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + switch kout { + case r.Bool: + call = func(env *Env) bool { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return retv.Bool() + } + case r.Int: + call = func(env *Env) int { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return int(retv.Int()) + } + case r.Int8: + call = func(env *Env) int8 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return int8(retv.Int()) + } + case r.Int16: + call = func(env *Env) int16 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return int16(retv.Int()) + } + case r.Int32: + call = func(env *Env) int32 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return int32(retv.Int()) + } + case r.Int64: + call = func(env *Env) int64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return retv.Int() + } + case r.Uint: + call = func(env *Env) uint { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return uint(retv.Uint()) + } + case r.Uint8: + call = func(env *Env) uint8 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return uint8(retv.Uint()) + } + case r.Uint16: + call = func(env *Env) uint16 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return uint16(retv.Uint()) + } + case r.Uint32: + call = func(env *Env) uint32 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return uint32(retv.Uint()) + } + case r.Uint64: + call = func(env *Env) uint64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return retv.Uint() + } + case r.Uintptr: + call = func(env *Env) uintptr { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return uintptr(retv.Uint()) + } + case r.Float32: + call = func(env *Env) float32 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return float32(retv.Float()) + } + case r.Float64: + call = func(env *Env) float64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return retv.Float() + } + case r.Complex64: + call = func(env *Env) complex64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return complex64(retv.Complex()) + } + case r.Complex128: + call = func(env *Env) complex128 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return retv.Complex() + } + case r.String: + call = func(env *Env) string { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv)[0] + return retv.String() + } + default: + call = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + return funv.CallSlice(argv)[0] + } + } + default: + switch kout { + case r.Bool: + call = func(env *Env) bool { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return retv.Bool() + } + case r.Int: + call = func(env *Env) int { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return int(retv.Int()) + } + case r.Int8: + call = func(env *Env) int8 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return int8(retv.Int()) + } + case r.Int16: + call = func(env *Env) int16 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return int16(retv.Int()) + } + case r.Int32: + call = func(env *Env) int32 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return int32(retv.Int()) + } + case r.Int64: + call = func(env *Env) int64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return retv.Int() + } + case r.Uint: + call = func(env *Env) uint { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return uint(retv.Uint()) + } + case r.Uint8: + call = func(env *Env) uint8 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return uint8(retv.Uint()) + } + case r.Uint16: + call = func(env *Env) uint16 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return uint16(retv.Uint()) + } + case r.Uint32: + call = func(env *Env) uint32 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return uint32(retv.Uint()) + } + case r.Uint64: + call = func(env *Env) uint64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return retv.Uint() + } + case r.Uintptr: + call = func(env *Env) uintptr { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return uintptr(retv.Uint()) + } + case r.Float32: + call = func(env *Env) float32 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return float32(retv.Float()) + } + case r.Float64: + call = func(env *Env) float64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return retv.Float() + } + case r.Complex64: + call = func(env *Env) complex64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return complex64(retv.Complex()) + } + case r.Complex128: + call = func(env *Env) complex128 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return retv.Complex() + } + case r.String: + call = func(env *Env) string { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv)[0] + return retv.String() + } + default: + call = func(env *Env) r.Value { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + return funv.CallSlice(argv)[0] + } + } + + } + return call +} + +// cannot optimize much here... fast_interpreter ASSUMES that expressions +// returning multiple values actually return (reflect.Value, []reflect.Value) +func call_ellipsis_ret2plus(callexpr *Call, maxdepth int) func(env *Env) (r.Value, []r.Value) { + expr := callexpr.Fun + exprfun := expr.AsX1() + argfunsX1 := callexpr.MakeArgfunsX1() + var call func(*Env) (r.Value, []r.Value) + + switch expr.Type.NumIn() { + case 1: + argfun := argfunsX1[0] + call = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.CallSlice(argv) + return retv[0], retv + } + case 2: + argfuns := [2]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + call = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.CallSlice(argv) + return retv[0], retv + } + case 3: + argfuns := [3]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + argfunsX1[2], + } + call = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + argfuns[2](env), + } + retv := funv.CallSlice(argv) + return retv[0], retv + } + default: + // general case + call = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.CallSlice(argv) + return retv[0], retv + } + } + return call +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call_multivalue.go b/vendor/github.com/cosmos72/gomacro/fast/call_multivalue.go new file mode 100644 index 0000000..6355883 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call_multivalue.go @@ -0,0 +1,353 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call_multivalue.go + * + * Created on May 29, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" +) + +// call_multivalue compiles foo(bar()) where bar() returns multiple values +func call_multivalue(call *Call, maxdepth int) I { + // no need to special case variadic functions here + expr := call.Fun + exprfun := expr.AsX1() + argfun := call.Args[0].AsXV(CompileDefaults) + nout := len(call.OutTypes) + var ret I + switch nout { + case 0: + if call.Ellipsis { + ret = func(env *Env) { + funv := exprfun(env) + _, argv := argfun(env) + funv.CallSlice(argv) + } + } else { + ret = func(env *Env) { + funv := exprfun(env) + _, argv := argfun(env) + funv.Call(argv) + } + } + case 1: + if call.Ellipsis { + ret = call_multivalue_ellipsis_ret1(call, maxdepth) + } else { + ret = call_multivalue_ret1(call, maxdepth) + } + default: + if call.Ellipsis { + ret = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + _, argv := argfun(env) + rets := funv.CallSlice(argv) + return rets[0], rets + } + } else { + ret = func(env *Env) (r.Value, []r.Value) { + funv := exprfun(env) + _, argv := argfun(env) + rets := funv.Call(argv) + return rets[0], rets + } + } + } + return ret +} + +// mandatory optimization: fast_interpreter ASSUMES that expressions +// returning bool, int, uint, float, complex, string do NOT wrap them in reflect.Value +func call_multivalue_ret1(call *Call, maxdepth int) I { + exprfun := call.Fun.AsX1() + argfun := call.Args[0].AsXV(CompileDefaults) + kout := call.OutTypes[0].Kind() + var ret I + switch kout { + case r.Bool: + ret = func(env *Env) bool { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return retv.Bool() + } + case r.Int: + ret = func(env *Env) int { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return int(retv.Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return int8(retv.Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return int16(retv.Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return int32(retv.Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return retv.Int() + } + case r.Uint: + ret = func(env *Env) uint { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return uint(retv.Uint()) + } + case r.Uint8: + ret = func(env *Env) uint8 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return uint8(retv.Uint()) + } + case r.Uint16: + ret = func(env *Env) uint16 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return uint16(retv.Uint()) + } + case r.Uint32: + ret = func(env *Env) uint32 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return uint32(retv.Uint()) + } + case r.Uint64: + ret = func(env *Env) uint64 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return retv.Uint() + } + case r.Uintptr: + ret = func(env *Env) uintptr { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return uintptr(retv.Uint()) + } + case r.Float32: + ret = func(env *Env) float32 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return float32(retv.Float()) + } + case r.Float64: + ret = func(env *Env) float64 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return retv.Float() + } + case r.Complex64: + ret = func(env *Env) complex64 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return complex64(retv.Complex()) + } + case r.Complex128: + ret = func(env *Env) complex128 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return retv.Complex() + } + case r.String: + ret = func(env *Env) string { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.Call(argv)[0] + return retv.String() + } + default: + ret = func(env *Env) r.Value { + funv := exprfun(env) + _, argv := argfun(env) + return funv.Call(argv)[0] + } + } + return ret +} + +// mandatory optimization: fast_interpreter ASSUMES that expressions +// returning bool, int, uint, float, complex, string do NOT wrap them in reflect.Value +func call_multivalue_ellipsis_ret1(call *Call, maxdepth int) I { + exprfun := call.Fun.AsX1() + argfun := call.Args[0].AsXV(CompileDefaults) + kout := call.OutTypes[0].Kind() + var ret I + switch kout { + case r.Bool: + ret = func(env *Env) bool { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return retv.Bool() + } + case r.Int: + ret = func(env *Env) int { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return int(retv.Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return int8(retv.Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return int16(retv.Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return int32(retv.Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return retv.Int() + } + case r.Uint: + ret = func(env *Env) uint { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return uint(retv.Uint()) + } + case r.Uint8: + ret = func(env *Env) uint8 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return uint8(retv.Uint()) + } + case r.Uint16: + ret = func(env *Env) uint16 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return uint16(retv.Uint()) + } + case r.Uint32: + ret = func(env *Env) uint32 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return uint32(retv.Uint()) + } + case r.Uint64: + ret = func(env *Env) uint64 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return retv.Uint() + } + case r.Uintptr: + ret = func(env *Env) uintptr { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return uintptr(retv.Uint()) + } + case r.Float32: + ret = func(env *Env) float32 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return float32(retv.Float()) + } + case r.Float64: + ret = func(env *Env) float64 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return retv.Float() + } + case r.Complex64: + ret = func(env *Env) complex64 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return complex64(retv.Complex()) + } + case r.Complex128: + ret = func(env *Env) complex128 { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return retv.Complex() + } + case r.String: + ret = func(env *Env) string { + funv := exprfun(env) + _, argv := argfun(env) + retv := funv.CallSlice(argv)[0] + return retv.String() + } + default: + ret = func(env *Env) r.Value { + funv := exprfun(env) + _, argv := argfun(env) + return funv.CallSlice(argv)[0] + } + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/call_variadic.go b/vendor/github.com/cosmos72/gomacro/fast/call_variadic.go new file mode 100644 index 0000000..c123965 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/call_variadic.go @@ -0,0 +1,633 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * call_variadic.go + * + * Created on May 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" +) + +// call a variadic function, when arguments DO NOT contain '...' +func call_variadic_ret0(c *Call, maxdepth int) func(env *Env) { + exprfun := c.Fun.AsX1() + argfunsX1 := c.MakeArgfunsX1() + var call func(*Env) + switch len(argfunsX1) { + case 1: + argfun := argfunsX1[0] + call = func(env *Env) { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + funv.Call(argv) + } + case 2: + argfuns := [2]func(env *Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + call = func(env *Env) { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + funv.Call(argv) + } + case 3: + argfuns := [3]func(env *Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + argfunsX1[2], + } + call = func(env *Env) { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + argfuns[2](env), + } + funv.Call(argv) + } + } + if call == nil { + call = func(env *Env) { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + funv.Call(argv) + } + } + return call +} + +// mandatory optimization: fast_interpreter ASSUMES that expressions +// returning bool, int, uint, float, complex, string do NOT wrap them in reflect.Value +func call_variadic_ret1(c *Call, maxdepth int) I { + exprfun := c.Fun.AsX1() + argfunsX1 := c.MakeArgfunsX1() + kout := c.Fun.Type.Out(0).Kind() + var call I + switch len(argfunsX1) { + case 1: + argfun := argfunsX1[0] + switch kout { + case r.Bool: + call = func(env *Env) bool { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Bool() + } + case r.Int: + call = func(env *Env) int { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int(retv.Int()) + } + case r.Int8: + call = func(env *Env) int8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int8(retv.Int()) + } + case r.Int16: + call = func(env *Env) int16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int16(retv.Int()) + } + case r.Int32: + call = func(env *Env) int32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return int32(retv.Int()) + } + case r.Int64: + call = func(env *Env) int64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Int() + } + case r.Uint: + call = func(env *Env) uint { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint(retv.Uint()) + } + case r.Uint8: + call = func(env *Env) uint8 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint8(retv.Uint()) + } + case r.Uint16: + call = func(env *Env) uint16 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint16(retv.Uint()) + } + case r.Uint32: + call = func(env *Env) uint32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uint32(retv.Uint()) + } + case r.Uint64: + call = func(env *Env) uint64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Uint() + } + case r.Uintptr: + call = func(env *Env) uintptr { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return uintptr(retv.Uint()) + } + case r.Float32: + call = func(env *Env) float32 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return float32(retv.Float()) + } + case r.Float64: + call = func(env *Env) float64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Float() + } + case r.Complex64: + call = func(env *Env) complex64 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return complex64(retv.Complex()) + } + case r.Complex128: + call = func(env *Env) complex128 { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.Complex() + } + case r.String: + call = func(env *Env) string { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + retv := funv.Call(argv)[0] + return retv.String() + } + default: + call = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfun(env), + } + return funv.Call(argv)[0] + } + } + case 2: + argfuns := [2]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + switch kout { + case r.Bool: + call = func(env *Env) bool { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return retv.Bool() + } + case r.Int: + call = func(env *Env) int { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return int(retv.Int()) + } + case r.Int8: + call = func(env *Env) int8 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return int8(retv.Int()) + } + case r.Int16: + call = func(env *Env) int16 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return int16(retv.Int()) + } + case r.Int32: + call = func(env *Env) int32 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return int32(retv.Int()) + } + case r.Int64: + call = func(env *Env) int64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return retv.Int() + } + case r.Uint: + call = func(env *Env) uint { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return uint(retv.Uint()) + } + case r.Uint8: + call = func(env *Env) uint8 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return uint8(retv.Uint()) + } + case r.Uint16: + call = func(env *Env) uint16 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return uint16(retv.Uint()) + } + case r.Uint32: + call = func(env *Env) uint32 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return uint32(retv.Uint()) + } + case r.Uint64: + call = func(env *Env) uint64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return retv.Uint() + } + case r.Uintptr: + call = func(env *Env) uintptr { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return uintptr(retv.Uint()) + } + case r.Float32: + call = func(env *Env) float32 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return float32(retv.Float()) + } + case r.Float64: + call = func(env *Env) float64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return retv.Float() + } + case r.Complex64: + call = func(env *Env) complex64 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return complex64(retv.Complex()) + } + case r.Complex128: + call = func(env *Env) complex128 { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return retv.Complex() + } + case r.String: + call = func(env *Env) string { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + retv := funv.Call(argv)[0] + return retv.String() + } + default: + call = func(env *Env) r.Value { + funv := exprfun(env) + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + return funv.Call(argv)[0] + } + } + default: + switch kout { + case r.Bool: + call = func(env *Env) bool { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return retv.Bool() + } + case r.Int: + call = func(env *Env) int { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return int(retv.Int()) + } + case r.Int8: + call = func(env *Env) int8 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return int8(retv.Int()) + } + case r.Int16: + call = func(env *Env) int16 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return int16(retv.Int()) + } + case r.Int32: + call = func(env *Env) int32 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return int32(retv.Int()) + } + case r.Int64: + call = func(env *Env) int64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return retv.Int() + } + case r.Uint: + call = func(env *Env) uint { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return uint(retv.Uint()) + } + case r.Uint8: + call = func(env *Env) uint8 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return uint8(retv.Uint()) + } + case r.Uint16: + call = func(env *Env) uint16 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return uint16(retv.Uint()) + } + case r.Uint32: + call = func(env *Env) uint32 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return uint32(retv.Uint()) + } + case r.Uint64: + call = func(env *Env) uint64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return retv.Uint() + } + case r.Uintptr: + call = func(env *Env) uintptr { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return uintptr(retv.Uint()) + } + case r.Float32: + call = func(env *Env) float32 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return float32(retv.Float()) + } + case r.Float64: + call = func(env *Env) float64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return retv.Float() + } + case r.Complex64: + call = func(env *Env) complex64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return complex64(retv.Complex()) + } + case r.Complex128: + call = func(env *Env) complex128 { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return retv.Complex() + } + case r.String: + call = func(env *Env) string { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + retv := funv.Call(argv)[0] + return retv.String() + } + default: + call = func(env *Env) r.Value { + funv := exprfun(env) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env) + } + return funv.Call(argv)[0] + } + } + + } + return call +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/callnret0.go b/vendor/github.com/cosmos72/gomacro/fast/callnret0.go new file mode 100644 index 0000000..365193c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/callnret0.go @@ -0,0 +1,1489 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +// +build !gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * callnret0.go + * + * Created on Apr 15, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) call0ret0(call *Call, maxdepth int) func(env *Env) { + expr := call.Fun + funsym := expr.Sym + if funsym == nil { + exprfun := expr.AsX1() + return func(env *Env) { + fun := exprfun(env).Interface().(func()) + fun() + } + } + + var cachedfunv r.Value + var cachedfun func() + + funupn := funsym.Upn + funindex := funsym.Desc.Index() + switch funupn { + case maxdepth - 1: + return func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func()) + } + cachedfun() + } + case 0: + return func(env *Env) { + fun := env.Binds[funindex].Interface().(func()) + fun() + } + case 1: + return func(env *Env) { + fun := env.Outer.Binds[funindex].Interface().(func()) + fun() + } + case 2: + return func(env *Env) { + fun := env.Outer.Outer.Binds[funindex].Interface().(func()) + fun() + } + default: + return func(env *Env) { + env = env.Outer.Outer.Outer.Outer + for i := 3; i < funupn; i++ { + env = env.Outer + } + + fun := env.Binds[funindex].Interface().(func()) + fun() + } + } +} +func (c *Comp) call1ret0(call *Call, maxdepth int) func(env *Env) { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + Errorf("internal error: call1ret0() invoked for constant function %#v. use call_builtin() instead", expr) + } + + } + arg := call.Args[0] + argfun := call.MakeArgfunsX1()[0] + + var cachedfunv r.Value + var ret func(env *Env) + + t := expr.Type.In(0) + k := t.Kind() + if KindToType(k) == t.ReflectType() { + switch k { + case r.Bool: + + if arg.Const() { + argconst := r.ValueOf(arg.Value).Bool() + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(bool)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) bool) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(bool)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Int: + + if arg.Const() { + argconst := int(r.ValueOf(arg.Value).Int()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) int) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Int8: + if arg.Const() { + argconst := int8(r.ValueOf(arg.Value).Int()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int8)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) int8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int8)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Int16: + if arg.Const() { + argconst := int16(r.ValueOf(arg.Value).Int()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int16)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) int16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int16)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Int32: + if arg.Const() { + argconst := int32(r.ValueOf(arg.Value).Int()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int32)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) int32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int32)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Int64: + if arg.Const() { + argconst := r.ValueOf(arg.Value).Int() + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int64)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) int64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int64)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Uint: + if arg.Const() { + argconst := + + uint(r.ValueOf(arg.Value).Uint()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) uint) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Uint8: + if arg.Const() { + argconst := + + uint8(r.ValueOf(arg.Value).Uint()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint8)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) uint8) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint8)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Uint16: + if arg.Const() { + argconst := + + uint16(r.ValueOf(arg.Value).Uint()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint16)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) uint16) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint16)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Uint32: + if arg.Const() { + argconst := + + uint32(r.ValueOf(arg.Value).Uint()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint32)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) uint32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint32)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Uint64: + if arg.Const() { + argconst := r.ValueOf(arg.Value).Uint() + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint64)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) uint64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint64)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Uintptr: + if arg.Const() { + argconst := + + uintptr(r.ValueOf(arg.Value).Uint()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uintptr)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) uintptr) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uintptr)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Float32: + if arg.Const() { + argconst := + + float32(r.ValueOf(arg.Value).Float()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(float32)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) float32) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(float32)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Float64: + if arg.Const() { + argconst := r.ValueOf(arg.Value).Float() + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(float64)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) float64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(float64)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Complex64: + if arg.Const() { + argconst := + + complex64(r.ValueOf(arg.Value).Complex()) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(complex64)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) complex64) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(complex64)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.Complex128: + if arg.Const() { + argconst := r.ValueOf(arg.Value).Complex() + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(complex128)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) complex128) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(complex128)) + arg := argfun(env) + + fun(arg) + } + } + + } + case r.String: + if arg.Const() { + argconst := r.ValueOf(arg.Value).String() + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string)) + } + + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(string)) + + fun(argconst) + } + } + + } else { + argfun := arg.Fun.(func(env *Env) string) + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string)) + } + + arg := argfun(env) + + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(string)) + arg := argfun(env) + + fun(arg) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) { + funv := exprfun(env) + + argv := []r.Value{ + argfun(env), + } + funv.Call(argv) + } + } + return ret +} +func (c *Comp) call2ret0(call *Call, maxdepth int) func(env *Env) { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + Errorf("internal error: call2ret0() invoked for constant function %#v. use call_builtin() instead", expr) + } + + } + args := call.Args + argfunsX1 := call.MakeArgfunsX1() + argfuns := [2]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + var cachedfunv r.Value + var ret func(env *Env) + + t := expr.Type.In(0) + rt := t.ReflectType() + k := t.Kind() + if KindToType(k) == rt && expr.Type.In(1).ReflectType() == rt { + switch k { + case r.Bool: + { + arg0fun := args[0].WithFun().(func(*Env) bool) + arg1fun := args[1].WithFun().(func(*Env) bool) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(bool, bool) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(bool, bool)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(bool, bool)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Int: + { + arg0fun := args[0].WithFun().(func(*Env) int) + arg1fun := args[1].WithFun().(func(*Env) int) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int, int) + + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int, int)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int, int)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Int8: + { + arg0fun := args[0].WithFun().(func(*Env) int8) + arg1fun := args[1].WithFun().(func(*Env) int8) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int8, int8) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int8, int8)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int8, int8)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Int16: + { + arg0fun := args[0].WithFun().(func(*Env) int16) + arg1fun := args[1].WithFun().(func(*Env) int16) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int16, int16) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int16, int16)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int16, int16)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Int32: + { + arg0fun := args[0].WithFun().(func(*Env) int32) + arg1fun := args[1].WithFun().(func(*Env) int32) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int32, int32) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int32, int32)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int32, int32)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Int64: + { + arg0fun := args[0].WithFun().(func(*Env) int64) + arg1fun := args[1].WithFun().(func(*Env) int64) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(int64, int64) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(int64, int64)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(int64, int64)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Uint: + { + arg0fun := args[0].WithFun().(func(*Env) uint) + arg1fun := args[1].WithFun().(func(*Env) uint) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint, uint) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint, uint)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint, uint)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Uint8: + { + arg0fun := args[0].WithFun().(func(*Env) uint8) + arg1fun := args[1].WithFun().(func(*Env) uint8) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint8, uint8) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint8, uint8)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint8, uint8)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Uint16: + { + arg0fun := args[0].WithFun().(func(*Env) uint16) + arg1fun := args[1].WithFun().(func(*Env) uint16) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint16, uint16) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint16, uint16)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint16, uint16)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Uint32: + { + arg0fun := args[0].WithFun().(func(*Env) uint32) + arg1fun := args[1].WithFun().(func(*Env) uint32) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint32, uint32) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint32, uint32)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint32, uint32)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Uint64: + { + arg0fun := args[0].WithFun().(func(*Env) uint64) + arg1fun := args[1].WithFun().(func(*Env) uint64) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uint64, uint64) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uint64, uint64)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uint64, uint64)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Uintptr: + { + arg0fun := args[0].WithFun().(func(*Env) uintptr) + arg1fun := args[1].WithFun().(func(*Env) uintptr) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(uintptr, uintptr) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(uintptr, uintptr)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(uintptr, uintptr)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Float32: + { + arg0fun := args[0].WithFun().(func(*Env) float32) + arg1fun := args[1].WithFun().(func(*Env) float32) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float32, float32) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float32, float32)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(float32, float32)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Float64: + { + arg0fun := args[0].WithFun().(func(*Env) float64) + arg1fun := args[1].WithFun().(func(*Env) float64) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(float64, float64) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(float64, float64)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(float64, float64)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Complex64: + { + arg0fun := args[0].WithFun().(func(*Env) complex64) + arg1fun := args[1].WithFun().(func(*Env) complex64) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex64, complex64) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex64, complex64)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(complex64, complex64)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.Complex128: + { + arg0fun := args[0].WithFun().(func(*Env) complex128) + arg1fun := args[1].WithFun().(func(*Env) complex128) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(complex128, complex128) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(complex128, complex128)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(complex128, complex128)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + case r.String: + { + arg0fun := args[0].WithFun().(func(*Env) string) + arg1fun := args[1].WithFun().(func(*Env) string) + + if funsym != nil && funupn == maxdepth-1 { + var cachedfun func(string, string) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(string, string)) + } + + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(string, string)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + + } + } + } + + if ret == nil { + ret = func(env *Env) { + funv := exprfun(env) + + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + funv.Call(argv) + } + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/callnret0.gomacro b/vendor/github.com/cosmos72/gomacro/fast/callnret0.gomacro new file mode 100644 index 0000000..b0c8180 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/callnret0.gomacro @@ -0,0 +1,357 @@ +// +build !gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * callnret0.go + * + * Created on Apr 15, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +:import ( + "go/ast" + "go/token" + r "reflect" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makekind(typ ast.Node) ast.Node { + t := EvalType(typ) + + // go/ast.SelectorExpr requires the foo in r.foo to be an *ast.Ident, cannot unquote there + kind := ~"{r . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(t.Name())} + return kind +} + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +func (c *Comp) call0ret0(call *Call, maxdepth int) func(env *Env) { + expr := call.Fun + funsym := expr.Sym + if funsym == nil { + exprfun := expr.AsX1() + return func(env *Env) { + fun := exprfun(env).Interface().(func()) + fun() + } + } + + var cachedfunv r.Value + var cachedfun func() + + funupn := funsym.Upn + funindex := funsym.Desc.Index() + switch funupn { + case maxdepth - 1: + return func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func()) + } + cachedfun() + } + case 0: + return func(env *Env) { + fun := env.Binds[funindex].Interface().(func()) + fun() + } + case 1: + return func(env *Env) { + fun := env.Outer.Binds[funindex].Interface().(func()) + fun() + } + case 2: + return func(env *Env) { + fun := env.Outer.Outer.Binds[funindex].Interface().(func()) + fun() + } + default: + return func(env *Env) { + env = env.Outer.Outer.Outer.Outer + for i := 3; i < funupn; i++ { + env = env.Outer + } + fun := env.Binds[funindex].Interface().(func()) + fun() + } + } +} + +:macro mcall1ret0(argtyp ast.Node) ast.Node { + + if EvalType(argtyp) == nil { + return ~"{ + ret = func(env *Env) { + funv := exprfun(env) + // keep the argument wrapped in a reflect.Value + argv := []r.Value{ + argfun(env), + } + funv.Call(argv) + } + } + } + + cachefun := ~"{ + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(~,argtyp)) + } + } + + argconv := convertvalue1(argtyp, ~'{r.ValueOf(arg.Value)}) + + return ~"{ + if arg.Const() { + argconst := ~,argconv + if funsym != nil && funupn == maxdepth - 1 { + var cachedfun func(~,argtyp) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + ~,cachefun + // Debugf("calling %v with args [%v]", r.TypeOf(cachedfun), argconst) + cachedfun(argconst) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(~,argtyp)) + // Debugf("calling %v with args [%v]", r.TypeOf(fun), argconst) + fun(argconst) + } + } + } else { + argfun := arg.Fun.(func(env *Env) ~,argtyp) + if funsym != nil && funupn == maxdepth - 1 { + var cachedfun func(~,argtyp) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + ~,cachefun + arg := argfun(env) + // Debugf("calling %v with args [%v]", r.TypeOf(cachedfun), arg) + cachedfun(arg) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(~,argtyp)) + arg := argfun(env) + // Debugf("calling %v with args [%v]", r.TypeOf(fun), arg) + fun(arg) + } + } + } + } +} + + + +func (c *Comp) call1ret0(call *Call, maxdepth int) func(env *Env) { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + Errorf("internal error: call1ret0() invoked for constant function %#v. use call_builtin() instead", expr) + } + } + arg := call.Args[0] + argfun := call.MakeArgfunsX1()[0] + + var cachedfunv r.Value + var ret func(env *Env) + + t := expr.Type.In(0) + k := t.Kind() + if KindToType(k) == t.ReflectType() { + switch k { + case r.Bool: {mcall1ret0; bool} + case r.Int: {mcall1ret0; int} + case r.Int8: {mcall1ret0; int8} + case r.Int16: {mcall1ret0; int16} + case r.Int32: {mcall1ret0; int32} + case r.Int64: {mcall1ret0; int64} + case r.Uint: {mcall1ret0; uint} + case r.Uint8: {mcall1ret0; uint8} + case r.Uint16: {mcall1ret0; uint16} + case r.Uint32: {mcall1ret0; uint32} + case r.Uint64: {mcall1ret0; uint64} + case r.Uintptr: {mcall1ret0; uintptr} + case r.Float32: {mcall1ret0; float32} + case r.Float64: {mcall1ret0; float64} + case r.Complex64: {mcall1ret0; complex64} + case r.Complex128:{mcall1ret0; complex128} + case r.String: {mcall1ret0; string} + } + } + if ret == nil { + {mcall1ret0; nil} + } + return ret +} + +:macro mcall2ret0(arg0typ, arg1typ ast.Node) ast.Node { + + if EvalType(arg0typ) == nil || EvalType(arg1typ) == nil { + return ~"{ + ret = func(env *Env) { + funv := exprfun(env) + // keep the arguments wrapped in a reflect.Value + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + funv.Call(argv) + } + } + } + + cachefun := ~"{ + if cachedfunv != funv { + cachedfunv = funv + cachedfun = funv.Interface().(func(~,arg0typ, ~,arg1typ)) + } + } + + return ~"{ + arg0fun := args[0].WithFun().(func(*Env) ~,arg0typ) + arg1fun := args[1].WithFun().(func(*Env) ~,arg0typ) + + if funsym != nil && funupn == maxdepth - 1 { + var cachedfun func(~,arg0typ, ~,arg1typ) + ret = func(env *Env) { + funv := env.ThreadGlobals.FileEnv.Binds[funindex] + ~,cachefun + arg0 := arg0fun(env) + arg1 := arg1fun(env) + cachedfun(arg0, arg1) + } + } else { + ret = func(env *Env) { + fun := exprfun(env).Interface().(func(~,arg0typ, ~,arg1typ)) + arg0 := arg0fun(env) + arg1 := arg1fun(env) + fun(arg0, arg1) + } + } + } +} + + +func (c *Comp) call2ret0(call *Call, maxdepth int) func(env *Env) { + expr := call.Fun + exprfun := expr.AsX1() + funsym := expr.Sym + funupn, funindex := -1, -1 + if funsym != nil { + funupn = funsym.Upn + funindex = funsym.Desc.Index() + if funindex == NoIndex { + Errorf("internal error: call2ret0() invoked for constant function %#v. use call_builtin() instead", expr) + } + } + args := call.Args + argfunsX1 := call.MakeArgfunsX1() + argfuns := [2]func(*Env)r.Value { + argfunsX1[0], + argfunsX1[1], + } + var cachedfunv r.Value + var ret func(env *Env) + + t := expr.Type.In(0) + rt := t.ReflectType() + k := t.Kind() + if KindToType(k) == rt && expr.Type.In(1).ReflectType() == rt { + switch k { + case r.Bool: {mcall2ret0; bool; bool} + case r.Int: {mcall2ret0; int; int} + case r.Int8: {mcall2ret0; int8; int8} + case r.Int16: {mcall2ret0; int16; int16} + case r.Int32: {mcall2ret0; int32; int32} + case r.Int64: {mcall2ret0; int64; int64} + case r.Uint: {mcall2ret0; uint; uint} + case r.Uint8: {mcall2ret0; uint8; uint8} + case r.Uint16: {mcall2ret0; uint16; uint16} + case r.Uint32: {mcall2ret0; uint32; uint32} + case r.Uint64: {mcall2ret0; uint64; uint64} + case r.Uintptr: {mcall2ret0; uintptr; uintptr} + case r.Float32: {mcall2ret0; float32; float32} + case r.Float64: {mcall2ret0; float64; float64} + case r.Complex64: {mcall2ret0; complex64; complex64} + case r.Complex128:{mcall2ret0; complex128; complex128} + case r.String: {mcall2ret0; string; string} + } + } + if ret == nil { + {mcall2ret0; nil; nil} + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/callnret0compact.go b/vendor/github.com/cosmos72/gomacro/fast/callnret0compact.go new file mode 100644 index 0000000..238c196 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/callnret0compact.go @@ -0,0 +1,76 @@ +// +build gomacro_fast_compact + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * callnret0compact.go + * + * Created on Jun 14, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" +) + +func (c *Comp) call0ret0(call *Call, maxdepth int) func(env *Env) { + expr := call.Fun + exprfun := expr.AsX1() + return func(env *Env) { + fun := exprfun(env).Interface().(func()) + fun() + } +} + +func (c *Comp) call1ret0(call *Call, maxdepth int) func(env *Env) { + expr := call.Fun + exprfun := expr.AsX1() + + argfun := call.MakeArgfunsX1()[0] + + return func(env *Env) { + funv := exprfun(env) + argv := []r.Value{argfun(env)} + + funv.Call(argv) + } +} + +func (c *Comp) call2ret0(call *Call, maxdepth int) func(env *Env) { + expr := call.Fun + exprfun := expr.AsX1() + + argfunsX1 := call.MakeArgfunsX1() + argfuns := [2]func(*Env) r.Value{ + argfunsX1[0], + argfunsX1[1], + } + + return func(env *Env) { + funv := exprfun(env) + + argv := []r.Value{ + argfuns[0](env), + argfuns[1](env), + } + funv.Call(argv) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/callnret1.go b/vendor/github.com/cosmos72/gomacro/fast/callnret1.go new file mode 100644 index 0000000..bffd2fb --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/callnret1.go @@ -0,0 +1,263 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * callnret1.go + * + * Created on Apr 20, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) callnret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + if expr.Sym != nil && expr.Sym.Desc.Index() == NoIndex { + Errorf("internal error: callnret1() invoked for constant function %#v. use call_builtin() instead", expr) + } + + kret := expr.Type.Out(0).Kind() + argfuns := call.MakeArgfunsX1() + var ret I + switch kret { + case r.Bool: + ret = func(env *Env) bool { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return ret0.Bool() + } + case r.Int: + ret = func(env *Env) int { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return int(ret0.Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return int8(ret0.Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return int16(ret0.Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return int32(ret0.Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return ret0.Int() + } + + case r.Uint: + ret = func(env *Env) uint { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return uint(ret0.Uint()) + } + + case r.Uint8: + ret = func(env *Env) uint8 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return uint8(ret0.Uint()) + } + + case r.Uint16: + ret = func(env *Env) uint16 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return uint16(ret0.Uint()) + } + + case r.Uint32: + ret = func(env *Env) uint32 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return uint32(ret0.Uint()) + } + + case r.Uint64: + ret = func(env *Env) uint64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return ret0.Uint() + } + + case r.Uintptr: + ret = func(env *Env) uintptr { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return uintptr(ret0.Uint()) + } + + case r.Float32: + ret = func(env *Env) float32 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return float32(ret0.Float()) + } + + case r.Float64: + ret = func(env *Env) float64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return ret0.Float() + } + + case r.Complex64: + ret = func(env *Env) complex64 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return complex64(ret0.Complex()) + } + + case r.Complex128: + ret = func(env *Env) complex128 { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return ret0.Complex() + } + + case r.String: + ret = func(env *Env) string { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return ret0.String() + } + + default: + ret = func(env *Env) r.Value { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + + ret0 := funv.Call(argv)[0] + return ret0 + + } + + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/callnret1.gomacro b/vendor/github.com/cosmos72/gomacro/fast/callnret1.gomacro new file mode 100644 index 0000000..12d094b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/callnret1.gomacro @@ -0,0 +1,133 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * callnret1.go + * + * Created on Apr 20, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +:import ( + "go/ast" + "go/token" + r "reflect" +) + + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func convertret0(typ ast.Node) (ast.Node, ast.Node) { + var t r.Type = EvalType(typ) + var ret0 ast.Node = ~'{ret0} // set type ast.Node: classic interpreter is too clever and deduces *ast.Ident + if t == nil { + // keep the result wrapped in a reflect.Value + typ = ~'{r.Value} + } else { + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,ret0 . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + ret0 = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + ret0 = ~"{~,typ ( ~,sel () )} + } + } + return typ, ret0 +} + +:macro mcallnret1(rettyp ast.Node) ast.Node { + var ret0 ast.Node + rettyp, ret0 = convertret0(rettyp) + + return ~"{ + ret = func(env *Env) ~,rettyp { + funv := exprfun(env) + argv := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + argv[i] = argfun(env) + } + // Debugf("calling %v with args %v", funv.Type(), argv) + ret0 := funv.Call(argv)[0] + return ~,ret0 + } + } +} + +func (c *Comp) callnret1(call *Call, maxdepth int) I { + expr := call.Fun + exprfun := expr.AsX1() + if expr.Sym != nil && expr.Sym.Desc.Index() == NoIndex { + Errorf("internal error: callnret1() invoked for constant function %#v. use call_builtin() instead", expr) + } + kret := expr.Type.Out(0).Kind() + argfuns := call.MakeArgfunsX1() + var ret I + switch kret { + case r.Bool: {mcallnret1; bool} + case r.Int: {mcallnret1; int} + case r.Int8: {mcallnret1; int8} + case r.Int16: {mcallnret1; int16} + case r.Int32: {mcallnret1; int32} + case r.Int64: {mcallnret1; int64} + case r.Uint: {mcallnret1; uint} + case r.Uint8: {mcallnret1; uint8} + case r.Uint16: {mcallnret1; uint16} + case r.Uint32: {mcallnret1; uint32} + case r.Uint64: {mcallnret1; uint64} + case r.Uintptr: {mcallnret1; uintptr} + case r.Float32: {mcallnret1; float32} + case r.Float64: {mcallnret1; float64} + case r.Complex64: {mcallnret1; complex64} + case r.Complex128:{mcallnret1; complex128} + case r.String: {mcallnret1; string} + default: {mcallnret1; nil} + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/channel.go b/vendor/github.com/cosmos72/gomacro/fast/channel.go new file mode 100644 index 0000000..d7311dd --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/channel.go @@ -0,0 +1,1277 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * channel.go + * + * Created on May 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) Recv(node *ast.UnaryExpr, xe *Expr) *Expr { + t := xe.Type + if t.Kind() != r.Chan { + return c.badUnaryExpr("expecting channel, found", node, xe) + } + + if t.ChanDir()&r.RecvDir == 0 { + return c.badUnaryExpr("cannot receive from send-only channel", node, xe) + } + + var fun func(env *Env) (r.Value, []r.Value) + switch x := xe.Fun.(type) { + case func(env *Env) (r.Value, []r.Value): + channelfun := x + fun = func(env *Env) (r.Value, []r.Value) { + channel, _ := channelfun(env) + retv, ok := channel.Recv() + var okv r.Value + if ok { + okv = True + } else { + okv = False + } + return retv, []r.Value{retv, okv} + } + default: + channelfun := xe.AsX1() + fun = func(env *Env) (r.Value, []r.Value) { + retv, ok := channelfun(env).Recv() + var okv r.Value + if ok { + okv = True + } else { + okv = False + } + return retv, []r.Value{retv, okv} + } + } + types := []xr.Type{t.Elem(), c.TypeOfBool()} + return exprXV(types, fun) +} +func (c *Comp) Recv1(node *ast.UnaryExpr, xe *Expr) *Expr { + t := xe.Type + if t.Kind() != r.Chan { + return c.badUnaryExpr("expecting channel, found", node, xe) + } + + if t.ChanDir()&r.RecvDir == 0 { + return c.badUnaryExpr("cannot receive from send-only channel", node, xe) + } + + telem := t.Elem() + var fun I + switch x := xe.Fun.(type) { + case func(env *Env) (r.Value, []r.Value): + channelfun := x + switch telem.Kind() { + case r.Bool: + fun = func(env *Env) bool { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return retv.Bool() + } + case r.Int: + fun = func(env *Env) int { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return int(retv.Int()) + } + case r.Int8: + fun = func(env *Env) int8 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return int8(retv.Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return int16(retv.Int()) + } + case r.Int32: + fun = func(env *Env) int32 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return int32(retv.Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return retv.Int() + } + case r.Uint: + fun = func(env *Env) uint { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return uint(retv.Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return uint8(retv.Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return uint16(retv.Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return uint32(retv.Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return retv.Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return uintptr(retv.Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return float32(retv.Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return retv.Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return complex64(retv.Complex()) + } + case r.Complex128: + fun = func(env *Env) complex128 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return retv.Complex() + } + case r.String: + fun = func(env *Env) string { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return retv.String() + } + default: + fun = func(env *Env) r.Value { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return retv + } + + } + default: + recvonly := t.ChanDir() == r.RecvDir + channelfun := xe.AsX1() + switch telem.Kind() { + case r.Bool: + if telem.ReflectType() != KindToType(r.Bool, + ) { + fun = func(env *Env) bool { + retv, _ := channelfun(env).Recv() + return retv.Bool() + } + } else if recvonly { + fun = func(env *Env) bool { + channel := channelfun(env).Interface().(<-chan bool) + return <-channel + } + } else { + fun = func(env *Env) bool { + channel := channelfun(env).Interface().(chan bool) + return <-channel + } + } + case r.Int: + if telem.ReflectType() != KindToType(r.Int, + ) { + fun = func(env *Env) int { + retv, _ := channelfun(env).Recv() + return int(retv.Int()) + } + } else if recvonly { + fun = func(env *Env) int { + channel := channelfun(env).Interface().(<-chan int) + return <-channel + } + } else { + fun = func(env *Env) int { + channel := channelfun(env).Interface().(chan int) + return <-channel + } + } + case r.Int8: + if telem.ReflectType() != KindToType(r.Int8, + ) { + fun = func(env *Env) int8 { + retv, _ := channelfun(env).Recv() + return int8(retv.Int()) + } + } else if recvonly { + fun = func(env *Env) int8 { + channel := channelfun(env).Interface().(<-chan int8) + return <-channel + } + } else { + fun = func(env *Env) int8 { + channel := channelfun(env).Interface().(chan int8) + return <-channel + } + } + case r.Int16: + if telem.ReflectType() != KindToType(r.Int16, + ) { + fun = func(env *Env) int16 { + retv, _ := channelfun(env).Recv() + return int16(retv.Int()) + } + } else if recvonly { + fun = func(env *Env) int16 { + channel := channelfun(env).Interface().(<-chan int16) + return <-channel + } + } else { + fun = func(env *Env) int16 { + channel := channelfun(env).Interface().(chan int16) + return <-channel + } + } + case r.Int32: + if telem.ReflectType() != KindToType(r.Int32, + ) { + fun = func(env *Env) int32 { + retv, _ := channelfun(env).Recv() + return int32(retv.Int()) + } + } else if recvonly { + fun = func(env *Env) int32 { + channel := channelfun(env).Interface().(<-chan int32) + return <-channel + } + } else { + fun = func(env *Env) int32 { + channel := channelfun(env).Interface().(chan int32) + return <-channel + } + } + case r.Int64: + if telem.ReflectType() != KindToType(r.Int64, + ) { + fun = func(env *Env) int64 { + retv, _ := channelfun(env).Recv() + return retv.Int() + } + } else if recvonly { + fun = func(env *Env) int64 { + channel := channelfun(env).Interface().(<-chan int64) + return <-channel + } + } else { + fun = func(env *Env) int64 { + channel := channelfun(env).Interface().(chan int64) + return <-channel + } + } + case r.Uint: + if telem.ReflectType() != KindToType(r.Uint, + ) { + fun = func(env *Env) uint { + retv, _ := channelfun(env).Recv() + return uint(retv.Uint()) + } + } else if recvonly { + fun = func(env *Env) uint { + channel := channelfun(env).Interface().(<-chan uint) + return <-channel + } + } else { + fun = func(env *Env) uint { + channel := channelfun(env).Interface().(chan uint) + return <-channel + } + } + case r.Uint8: + if telem.ReflectType() != KindToType(r.Uint8, + ) { + fun = func(env *Env) uint8 { + retv, _ := channelfun(env).Recv() + return uint8(retv.Uint()) + } + } else if recvonly { + fun = func(env *Env) uint8 { + channel := channelfun(env).Interface().(<-chan uint8) + return <-channel + } + } else { + fun = func(env *Env) uint8 { + channel := channelfun(env).Interface().(chan uint8) + return <-channel + } + } + case r.Uint16: + if telem.ReflectType() != KindToType(r.Uint16, + ) { + fun = func(env *Env) uint16 { + retv, _ := channelfun(env).Recv() + return uint16(retv.Uint()) + } + } else if recvonly { + fun = func(env *Env) uint16 { + channel := channelfun(env).Interface().(<-chan uint16) + return <-channel + } + } else { + fun = func(env *Env) uint16 { + channel := channelfun(env).Interface().(chan uint16) + return <-channel + } + } + case r.Uint32: + if telem.ReflectType() != KindToType(r.Uint32, + ) { + fun = func(env *Env) uint32 { + retv, _ := channelfun(env).Recv() + return uint32(retv.Uint()) + } + } else if recvonly { + fun = func(env *Env) uint32 { + channel := channelfun(env).Interface().(<-chan uint32) + return <-channel + } + } else { + fun = func(env *Env) uint32 { + channel := channelfun(env).Interface().(chan uint32) + return <-channel + } + } + case r.Uint64: + if telem.ReflectType() != KindToType(r.Uint64, + ) { + fun = func(env *Env) uint64 { + retv, _ := channelfun(env).Recv() + return retv.Uint() + } + } else if recvonly { + fun = func(env *Env) uint64 { + channel := channelfun(env).Interface().(<-chan uint64) + return <-channel + } + } else { + fun = func(env *Env) uint64 { + channel := channelfun(env).Interface().(chan uint64) + return <-channel + } + } + case r.Uintptr: + if telem.ReflectType() != KindToType(r.Uintptr, + ) { + fun = func(env *Env) uintptr { + retv, _ := channelfun(env).Recv() + return uintptr(retv.Uint()) + } + } else if recvonly { + fun = func(env *Env) uintptr { + channel := channelfun(env).Interface().(<-chan uintptr) + return <-channel + } + } else { + fun = func(env *Env) uintptr { + channel := channelfun(env).Interface().(chan uintptr) + return <-channel + } + } + case r.Float32: + if telem.ReflectType() != KindToType(r.Float32, + ) { + fun = func(env *Env) float32 { + retv, _ := channelfun(env).Recv() + return float32(retv.Float()) + } + } else if recvonly { + fun = func(env *Env) float32 { + channel := channelfun(env).Interface().(<-chan float32) + return <-channel + } + } else { + fun = func(env *Env) float32 { + channel := channelfun(env).Interface().(chan float32) + return <-channel + } + } + case r.Float64: + if telem.ReflectType() != KindToType(r.Float64, + ) { + fun = func(env *Env) float64 { + retv, _ := channelfun(env).Recv() + return retv.Float() + } + } else if recvonly { + fun = func(env *Env) float64 { + channel := channelfun(env).Interface().(<-chan float64) + return <-channel + } + } else { + fun = func(env *Env) float64 { + channel := channelfun(env).Interface().(chan float64) + return <-channel + } + } + case r.Complex64: + if telem.ReflectType() != KindToType(r.Complex64, + ) { + fun = func(env *Env) complex64 { + retv, _ := channelfun(env).Recv() + return complex64(retv.Complex()) + } + } else if recvonly { + fun = func(env *Env) complex64 { + channel := channelfun(env).Interface().(<-chan complex64) + return <-channel + } + } else { + fun = func(env *Env) complex64 { + channel := channelfun(env).Interface().(chan complex64) + return <-channel + } + } + case r.Complex128: + if telem.ReflectType() != KindToType(r.Complex128, + ) { + fun = func(env *Env) complex128 { + retv, _ := channelfun(env).Recv() + return retv.Complex() + } + } else if recvonly { + fun = func(env *Env) complex128 { + channel := channelfun(env).Interface().(<-chan complex128) + return <-channel + } + } else { + fun = func(env *Env) complex128 { + channel := channelfun(env).Interface().(chan complex128) + return <-channel + } + } + case r.String: + if telem.ReflectType() != KindToType(r.String, + ) { + fun = func(env *Env) string { + retv, _ := channelfun(env).Recv() + return retv.String() + } + } else if recvonly { + fun = func(env *Env) string { + channel := channelfun(env).Interface().(<-chan string) + return <-channel + } + } else { + fun = func(env *Env) string { + channel := channelfun(env).Interface().(chan string) + return <-channel + } + } + default: + fun = func(env *Env) r.Value { + retv, _ := channelfun(env).Recv() + return retv + } + + } + } + return exprFun(telem, fun) +} +func (c *Comp) Send(node *ast.SendStmt) { + channel := c.Expr1(node.Chan) + t := channel.Type + if t.Kind() != r.Chan { + c.Errorf("cannot send to non-channel type %v: %v", t, node) + return + } + if t.ChanDir()&r.SendDir == 0 { + c.Errorf("cannot send to receive-only channel type %v: %v", t, node) + return + } + telem := t.Elem() + rtelem := telem.ReflectType() + kelem := rtelem.Kind() + expr := c.Expr1(node.Value) + if expr.Const() { + expr.ConstTo(telem) + } else if expr.Type == nil || !expr.Type.AssignableTo(telem) { + c.Errorf("cannot use %v <%v> as type %v in send", node.Value, expr.Type, telem) + return + } + channelfun := channel.AsX1() + sendonly := t.ChanDir() == r.SendDir + var stmt Stmt + if expr.Const() { + v := r.ValueOf(expr.Value) + if KindToType(kelem) == rtelem { + switch kelem { + case + + r.Bool: + value := v.Bool() + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- bool) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan bool) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int: + value := + + int(v.Int()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int8: + value := + + int8(v.Int()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int8) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int8) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int16: + value := + + int16(v.Int()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int16) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int16) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int32: + value := + + int32(v.Int()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int32) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int32) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int64: + value := v.Int() + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int64) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int64) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint: + value := + + uint(v.Uint()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint8: + value := + + uint8(v.Uint()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint8) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint8) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint16: + value := + + uint16(v.Uint()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint16) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint16) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint32: + value := + + uint32(v.Uint()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint32) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint32) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint64: + value := v.Uint() + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint64) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint64) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uintptr: + value := + + uintptr(v.Uint()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uintptr) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uintptr) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Float32: + value := + + float32(v.Float()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- float32) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan float32) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Float64: + value := v.Float() + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- float64) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan float64) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Complex64: + value := + + complex64(v.Complex()) + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- complex64) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan complex64) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Complex128: + value := v.Complex() + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- complex128) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan complex128) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.String: + value := v.String() + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- string) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan string) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + if stmt == nil { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env) + channel.Send(v) + env.IP++ + return env.Code[env.IP], env + } + } + + } else { + if KindToType(kelem) == rtelem { + switch kelem { + case + + r.Bool: + if exprfun, ok := expr.Fun.(func(*Env) bool); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- bool) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan bool) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int: + if exprfun, ok := expr.Fun.(func(*Env) int); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int8: + if exprfun, ok := expr.Fun.(func(*Env) int8); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int8) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int8) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int16: + if exprfun, ok := expr.Fun.(func(*Env) int16); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int16) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int16) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int32: + if exprfun, ok := expr.Fun.(func(*Env) int32); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int32) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int32) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Int64: + if exprfun, ok := expr.Fun.(func(*Env) int64); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- int64) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan int64) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint: + if exprfun, ok := expr.Fun.(func(*Env) uint); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint8: + if exprfun, ok := expr.Fun.(func(*Env) uint8); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint8) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint8) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint16: + if exprfun, ok := expr.Fun.(func(*Env) uint16); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint16) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint16) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint32: + if exprfun, ok := expr.Fun.(func(*Env) uint32); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint32) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint32) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uint64: + if exprfun, ok := expr.Fun.(func(*Env) uint64); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uint64) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uint64) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Uintptr: + if exprfun, ok := expr.Fun.(func(*Env) uintptr); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- uintptr) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan uintptr) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Float32: + if exprfun, ok := expr.Fun.(func(*Env) float32); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- float32) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan float32) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Float64: + if exprfun, ok := expr.Fun.(func(*Env) float64); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- float64) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan float64) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Complex64: + if exprfun, ok := expr.Fun.(func(*Env) complex64); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- complex64) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan complex64) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.Complex128: + if exprfun, ok := expr.Fun.(func(*Env) complex128); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- complex128) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan complex128) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case + + r.String: + if exprfun, ok := expr.Fun.(func(*Env) string); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- string) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan string) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + if stmt == nil { + exprfun := expr.AsX1() + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env) + value := exprfun(env) + if value.Type() != rtelem { + value = value.Convert(rtelem) + } + + channel.Send(value) + env.IP++ + return env.Code[env.IP], env + } + } + } + c.append(stmt) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/channel.gomacro b/vendor/github.com/cosmos72/gomacro/fast/channel.gomacro new file mode 100644 index 0000000..65306d7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/channel.gomacro @@ -0,0 +1,407 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * channel.go + * + * Created on May 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +:import ( + "go/ast" + r "reflect" +) + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makekind(typ ast.Node) ast.Node { + t := EvalType(typ) + if t == nil { + return nil + } + // go/ast.SelectorExpr requires the foo in r.foo to be an *ast.Ident, cannot unquote there + kind := ~"{r . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(t.Name())} + return kind +} + +:func maketypevar(typ ast.Node) ast.Node { + t := EvalType(typ) + sel := &ast.SelectorExpr{ + X: &ast.Ident{Name: "c"}, + Sel: &ast.Ident{Name: "TypeOf" + upcasefirstbyte(t.Name())}, + } + return ~"{~,sel ()} +} + + +:func convertvalue(typ, val ast.Node) (ast.Node, ast.Node) { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + typ = ~'{r.Value} + } else { + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + } + return typ, val +} + +// Recv compiles <-channel (returns two values: the received value and an 'ok' flag) +func (c *Comp) Recv(node *ast.UnaryExpr, xe *Expr) *Expr { + t := xe.Type + if t.Kind() != r.Chan { + return c.badUnaryExpr("expecting channel, found", node, xe) + } + if t.ChanDir()&r.RecvDir == 0 { + return c.badUnaryExpr("cannot receive from send-only channel", node, xe) + } + var fun func(env *Env) (r.Value, []r.Value) + switch x := xe.Fun.(type) { + case func(env *Env) (r.Value, []r.Value): + channelfun := x + fun = func(env *Env) (r.Value, []r.Value) { + channel, _ := channelfun(env) + retv, ok := channel.Recv() + var okv r.Value + if ok { + okv = True + } else { + okv = False + } + return retv, []r.Value{retv, okv} + } + default: + channelfun := xe.AsX1() + fun = func(env *Env) (r.Value, []r.Value) { + retv, ok := channelfun(env).Recv() + var okv r.Value + if ok { + okv = True + } else { + okv = False + } + return retv, []r.Value{retv, okv} + } + } + types := []xr.Type{t.Elem(), c.TypeOfBool()} + return exprXV(types, fun) +} + +:macro recv1_xv(typ ast.Node) ast.Node { + if EvalType(typ) == nil { + return ~"{ + default: + fun = func(env *Env) r.Value { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return retv + } + } + } + kind := makekind(typ) + typ2, ret := convertvalue(typ, ~'retv) + return ~"{ + case ~,kind: + fun = func(env *Env) ~,typ2 { + channel, _ := channelfun(env) + retv, _ := channel.Recv() + return ~,ret + } + } +} + +:macro recv1(typ ast.Node) ast.Node { + if EvalType(typ) == nil { + return ~"{ + default: + fun = func(env *Env) r.Value { + retv, _ := channelfun(env).Recv() + return retv + } + } + } + kind := makekind(typ) + typ2, ret := convertvalue(typ, ~'retv) + return ~"{ + case ~,kind: + if telem.ReflectType() != KindToType(~,kind) { + fun = func(env *Env) ~,typ { + retv, _ := channelfun(env).Recv() + return ~,ret + } + } else if recvonly { + fun = func(env *Env) ~,typ { + channel := channelfun(env).Interface().(<-chan ~,typ) + return <-channel + } + } else { + fun = func(env *Env) ~,typ { + channel := channelfun(env).Interface().(chan ~,typ) + return <-channel + } + } + } +} + +// Recv1 compiles <-channel (returns a single value: the received value) +// mandatory optimization: fast_interpreter ASSUMES that expressions +// returning bool, int, uint, float, complex, string do NOT wrap them in reflect.Value +func (c *Comp) Recv1(node *ast.UnaryExpr, xe *Expr) *Expr { + t := xe.Type + if t.Kind() != r.Chan { + return c.badUnaryExpr("expecting channel, found", node, xe) + } + if t.ChanDir()&r.RecvDir == 0 { + return c.badUnaryExpr("cannot receive from send-only channel", node, xe) + } + telem := t.Elem() + var fun I + switch x := xe.Fun.(type) { + case func(env *Env) (r.Value, []r.Value): + channelfun := x + switch telem.Kind() { + {recv1_xv; bool} + {recv1_xv; int} + {recv1_xv; int8} + {recv1_xv; int16} + {recv1_xv; int32} + {recv1_xv; int64} + {recv1_xv; uint} + {recv1_xv; uint8} + {recv1_xv; uint16} + {recv1_xv; uint32} + {recv1_xv; uint64} + {recv1_xv; uintptr} + {recv1_xv; float32} + {recv1_xv; float64} + {recv1_xv; complex64} + {recv1_xv; complex128} + {recv1_xv; string} + {recv1_xv; nil} + } + default: + recvonly := t.ChanDir() == r.RecvDir + channelfun := xe.AsX1() + switch telem.Kind() { + {recv1; bool} + {recv1; int} + {recv1; int8} + {recv1; int16} + {recv1; int32} + {recv1; int64} + {recv1; uint} + {recv1; uint8} + {recv1; uint16} + {recv1; uint32} + {recv1; uint64} + {recv1; uintptr} + {recv1; float32} + {recv1; float64} + {recv1; complex64} + {recv1; complex128} + {recv1; string} + {recv1; nil} + } + } + return exprFun(telem, fun) +} + +:macro send_c(typ ast.Node) ast.Node { + kind := makekind(typ) + typ2, conv := convertvalue(typ, ~'v) + return ~"{ + case ~,kind: + value := ~,conv + if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- ~,typ) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan ~,typ) + channel <- value + env.IP++ + return env.Code[env.IP], env + } + } + } +} + +:macro send_e(typ ast.Node) ast.Node { + kind := makekind(typ) + return ~"{ + case ~,kind: + if exprfun, ok := expr.Fun.(func (*Env) ~,typ); !ok { + break + } else if sendonly { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan<- ~,typ) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env).Interface().(chan ~,typ) + channel <- exprfun(env) + env.IP++ + return env.Code[env.IP], env + } + } + } +} + +func (c *Comp) Send(node *ast.SendStmt) { + channel := c.Expr1(node.Chan) + t := channel.Type + if t.Kind() != r.Chan { + c.Errorf("cannot send to non-channel type %v: %v", t, node) + return + } + if t.ChanDir()&r.SendDir == 0 { + c.Errorf("cannot send to receive-only channel type %v: %v", t, node) + return + } + telem := t.Elem() + rtelem := telem.ReflectType() + kelem := rtelem.Kind() + expr := c.Expr1(node.Value) + if expr.Const() { + expr.ConstTo(telem) + } else if expr.Type == nil || !expr.Type.AssignableTo(telem) { + c.Errorf("cannot use %v <%v> as type %v in send", node.Value, expr.Type, telem) + return + } + channelfun := channel.AsX1() + sendonly := t.ChanDir() == r.SendDir + var stmt Stmt + if expr.Const() { + v := r.ValueOf(expr.Value) + if KindToType(kelem) == rtelem { + switch kelem { + {send_c; bool} + {send_c; int} + {send_c; int8} + {send_c; int16} + {send_c; int32} + {send_c; int64} + {send_c; uint} + {send_c; uint8} + {send_c; uint16} + {send_c; uint32} + {send_c; uint64} + {send_c; uintptr} + {send_c; float32} + {send_c; float64} + {send_c; complex64} + {send_c; complex128} + {send_c; string} + } + } + if stmt == nil { + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env) + channel.Send(v) + env.IP++ + return env.Code[env.IP], env + } + } + } else { + if KindToType(kelem) == rtelem { + switch kelem { + {send_e; bool} + {send_e; int} + {send_e; int8} + {send_e; int16} + {send_e; int32} + {send_e; int64} + {send_e; uint} + {send_e; uint8} + {send_e; uint16} + {send_e; uint32} + {send_e; uint64} + {send_e; uintptr} + {send_e; float32} + {send_e; float64} + {send_e; complex64} + {send_e; complex128} + {send_e; string} + } + } + if stmt == nil { + exprfun := expr.AsX1() + stmt = func(env *Env) (Stmt, *Env) { + channel := channelfun(env) + value := exprfun(env) + if value.Type() != rtelem { + value = value.Convert(rtelem) + } + channel.Send(value) + env.IP++ + return env.Code[env.IP], env + } + } + } + c.append(stmt) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/code.go b/vendor/github.com/cosmos72/gomacro/fast/code.go new file mode 100644 index 0000000..cb58e79 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/code.go @@ -0,0 +1,313 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * code.go + * + * Created on Apr 09, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + "unsafe" +) + +func (code *Code) Clear() { + code.List = nil + code.DebugPos = nil + code.WithDefers = false +} + +func (code *Code) Len() int { + return len(code.List) +} + +func (code *Code) Append(stmt Stmt, pos token.Pos) { + if stmt != nil { + code.List = append(code.List, stmt) + code.DebugPos = append(code.DebugPos, pos) + } +} + +func (code *Code) AsExpr() *Expr { + fun := code.Exec() + if fun == nil { + return nil + } + return expr0(fun) +} + +// declare a var instead of function: Code.Exec() needs the address of Interrupt +var Interrupt Stmt = func(env *Env) (Stmt, *Env) { + return env.ThreadGlobals.Interrupt, env +} + +func pushDefer(g *ThreadGlobals, deferOf *Env, panicking bool) (retg *ThreadGlobals, deferOf_ *Env, isDefer bool) { + deferOf_ = g.DeferOfFun + if panicking { + g.PanicFun = deferOf + } + g.DeferOfFun = deferOf + g.StartDefer = true + return g, deferOf_, g.IsDefer +} + +func popDefer(g *ThreadGlobals, deferOf *Env, isDefer bool) { + g.DeferOfFun = deferOf + g.StartDefer = false + g.IsDefer = isDefer +} + +func restore(g *ThreadGlobals, flag bool, interrupt Stmt) { + g.IsDefer = flag + g.Signal = SigNone + g.Interrupt = interrupt +} + +func maybeRepanic(g *ThreadGlobals) bool { + if g.PanicFun != nil { + panic(g.Panic) + } + // either not panicking or recover() invoked, no longer panicking + return false +} + +// Exec returns a func(*Env) that will execute the compiled code +func (code *Code) Exec() func(*Env) { + all := code.List + pos := code.DebugPos + defers := code.WithDefers + + code.Clear() + if len(all) == 0 { + return nil + } + all = append(all, Interrupt) + + if defers { + // code to support defer is slower... isolate it in a separate function + return func(env *Env) { + execWithDefers(env, all, pos) + } + } else { + return exec(all, pos) + } +} + +func exec(all []Stmt, pos []token.Pos) func(*Env) { + return func(env *Env) { + g := env.ThreadGlobals + if g.IsDefer || g.StartDefer { + // code to support defer is slower... isolate it in a separate function + execWithDefers(env, all, pos) + return + } + stmt := all[0] + env.IP = 0 + env.Code = all + env.DebugPos = pos + + interrupt := g.Interrupt + g.Interrupt = nil + var unsafeInterrupt *uintptr + g.Signal = SigNone + + for j := 0; j < 5; j++ { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + continue + } + } + } + } + } + } + } + } + } + } + } + } + } + } + goto finish + } + + unsafeInterrupt = *(**uintptr)(unsafe.Pointer(&Interrupt)) + env.ThreadGlobals.Interrupt = Interrupt + for { + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + + if *(**uintptr)(unsafe.Pointer(&stmt)) == unsafeInterrupt { + break + } + } + finish: + // restore env.ThreadGlobals.Interrupt and Signal before returning + g.Interrupt = interrupt + g.Signal = SigNone + return + } +} + +// execWithDefers executes the given compiled code, including support for defer() +func execWithDefers(env *Env, all []Stmt, pos []token.Pos) { + funenv := env + stmt := all[0] + env.IP = 0 + env.Code = all + env.DebugPos = pos + + g := env.ThreadGlobals + interrupt := g.Interrupt + g.Interrupt = nil + var unsafeInterrupt *uintptr + + defer restore(g, g.IsDefer, interrupt) // restore g.IsDefer, g.Signal and g.Interrupt on return + g.Signal = SigNone + g.IsDefer = g.StartDefer + g.StartDefer = false + panicking := true + panicking2 := false + + rundefer := func(fun func()) { + if panicking || panicking2 { + panicking = true + panicking2 = false + g.Panic = recover() + } + defer popDefer(pushDefer(g, funenv, panicking)) + panicking2 = true // detect panics inside defer + fun() + panicking2 = false + if panicking { + panicking = maybeRepanic(g) + } + } + + for j := 0; j < 5; j++ { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + if stmt, env = stmt(env); stmt != nil { + continue + } + } + } + } + } + } + } + } + } + } + } + } + } + } + if g.Signal != SigDefer { + goto finish + } + fun := g.InstallDefer + g.Signal = SigNone + g.InstallDefer = nil + defer rundefer(fun) + stmt = env.Code[env.IP] + if stmt != nil { + continue + } + break + } + + unsafeInterrupt = *(**uintptr)(unsafe.Pointer(&Interrupt)) + env.ThreadGlobals.Interrupt = Interrupt + for { + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + stmt, env = stmt(env) + + if *(**uintptr)(unsafe.Pointer(&stmt)) == unsafeInterrupt { + if g.Signal != SigDefer { + goto finish + } + fun := g.InstallDefer + g.Signal = SigNone + g.InstallDefer = nil + defer rundefer(fun) + stmt = env.Code[env.IP] + if *(**uintptr)(unsafe.Pointer(&stmt)) != unsafeInterrupt { + continue + } + break + } + } +finish: + panicking = false + return +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/compile.go b/vendor/github.com/cosmos72/gomacro/fast/compile.go new file mode 100644 index 0000000..3c255d4 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/compile.go @@ -0,0 +1,360 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * compile.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + "go/types" + r "reflect" + "strings" + + . "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func NewThreadGlobals() *ThreadGlobals { + return &ThreadGlobals{ + Globals: NewGlobals(), + } +} + +func New() *Interp { + top := NewCompEnvTop("builtin") + top.env.UsedByClosure = true // do not free this *Env + file := NewCompEnv(top, "main") + file.env.UsedByClosure = true // do not free this *Env + return file +} + +func NewCompEnvTop(path string) *Interp { + name := path[1+strings.LastIndexByte(path, '/'):] + + globals := NewGlobals() + universe := xr.NewUniverse() + + compGlobals := &CompThreadGlobals{ + Universe: universe, + interf2proxy: make(map[r.Type]r.Type), + proxy2interf: make(map[r.Type]xr.Type), + Globals: globals, + } + envGlobals := &ThreadGlobals{Globals: globals} + ce := &Interp{ + Comp: &Comp{ + UpCost: 1, + Depth: 0, + Outer: nil, + Name: name, + Path: path, + CompThreadGlobals: compGlobals, + }, + env: &Env{ + Outer: nil, + ThreadGlobals: envGlobals, + }, + } + // tell xreflect about our packages "fast" and "main" + compGlobals.Universe.CachePackage(types.NewPackage("fast", "fast")) + compGlobals.Universe.CachePackage(types.NewPackage("main", "main")) + + // no need to scavenge for Builtin, Function, Import, Macro and UntypedLit fields and methods. + // actually, making them opaque helps securing against malicious interpreted code. + for _, rtype := range []r.Type{rtypeOfBuiltin, rtypeOfFunction, rtypeOfImport, rtypeOfMacro, rtypeOfUntypedLit} { + compGlobals.opaqueType(rtype) + } + + envGlobals.TopEnv = ce.env + ce.addBuiltins() + return ce +} + +func NewCompEnv(outer *Interp, path string) *Interp { + name := path[1+strings.LastIndexByte(path, '/'):] + + compGlobals := outer.Comp.CompThreadGlobals + envGlobals := outer.env.ThreadGlobals + c := &Interp{ + Comp: &Comp{ + UpCost: 1, + Depth: outer.Comp.Depth + 1, + Outer: outer.Comp, + Name: name, + Path: path, + CompThreadGlobals: compGlobals, + }, + env: &Env{ + Outer: outer.env, + ThreadGlobals: envGlobals, + }, + } + if outer.env.Outer == nil { + envGlobals.FileEnv = c.env + } + return c +} + +func NewComp(outer *Comp, code *Code) *Comp { + if outer == nil { + return &Comp{UpCost: 1} + } + c := Comp{ + UpCost: 1, + Depth: outer.Depth + 1, + Outer: outer, + CompileOptions: outer.CompileOptions, + CompThreadGlobals: outer.CompThreadGlobals, + } + // Debugf("NewComp(%p->%p) %s", outer, &c, debug.Stack()) + if code != nil { + c.Code = *code + } + return &c +} + +func (c *Comp) TopComp() *Comp { + for ; c != nil; c = c.Outer { + if c.Outer == nil { + break + } + } + return c +} + +func (c *Comp) FileComp() *Comp { + for ; c != nil; c = c.Outer { + outer := c.Outer + if outer == nil || outer.Outer == nil { + break + } + } + return c +} + +// if a function Env only declares ignored binds, it gets this scratch buffers +var ignoredBinds = []r.Value{Nil} +var ignoredIntBinds = []uint64{0} + +func NewEnv(outer *Env, nbinds int, nintbinds int) *Env { + tg := outer.ThreadGlobals + pool := &tg.Pool // pool is an array, do NOT copy it! + index := tg.PoolSize - 1 + var env *Env + if index >= 0 { + tg.PoolSize = index + env = pool[index] + pool[index] = nil + } else { + env = &Env{} + } + if nbinds <= 1 { + env.Binds = ignoredBinds + } else if cap(env.Binds) < nbinds { + env.Binds = make([]r.Value, nbinds) + } else { + env.Binds = env.Binds[0:nbinds] + } + if nintbinds <= 1 { + env.IntBinds = ignoredIntBinds + } else if cap(env.IntBinds) < nintbinds { + env.IntBinds = make([]uint64, nintbinds) + } else { + env.IntBinds = env.IntBinds[0:nintbinds] + } + env.Outer = outer + env.IP = outer.IP + env.Code = outer.Code + env.ThreadGlobals = tg + return env +} + +func NewEnv4Func(outer *Env, nbinds int, nintbinds int) *Env { + tg := outer.ThreadGlobals + pool := &tg.Pool // pool is an array, do NOT copy it! + index := tg.PoolSize - 1 + var env *Env + if index >= 0 { + tg.PoolSize = index + env = pool[index] + pool[index] = nil + } else { + env = &Env{} + } + if nbinds <= 1 { + env.Binds = ignoredBinds + } else if cap(env.Binds) < nbinds { + env.Binds = make([]r.Value, nbinds) + } else { + env.Binds = env.Binds[0:nbinds] + } + if nintbinds <= 1 { + env.IntBinds = ignoredIntBinds + } else if cap(env.IntBinds) < nintbinds { + env.IntBinds = make([]uint64, nintbinds) + } else { + env.IntBinds = env.IntBinds[0:nintbinds] + } + env.Outer = outer + env.ThreadGlobals = tg + // Debugf("NewEnv4Func(%p->%p) binds=%d intbinds=%d", outer, env, nbinds, nintbinds) + return env +} + +func (env *Env) MarkUsedByClosure() { + for ; env != nil && !env.UsedByClosure; env = env.Outer { + env.UsedByClosure = true + } +} + +// FreeEnv tells the interpreter that given Env is no longer needed. +func (env *Env) FreeEnv() { + // Debugf("FreeEnv(%p->%p), IP = %d of %d", env, env.Outer, env.Outer.IP, len(env.Outer.Code)) + if env.UsedByClosure { + // in use, cannot recycle + return + } + common := env.ThreadGlobals + n := common.PoolSize + if n >= PoolCapacity { + return + } + if env.AddressTaken { + env.IntBinds = nil + env.AddressTaken = false + } + env.Outer = nil + env.Code = nil + env.ThreadGlobals = nil + common.Pool[n] = env // pool is an array, be careful NOT to copy it! + common.PoolSize = n + 1 +} + +func (env *Env) Top() *Env { + for ; env != nil; env = env.Outer { + if env.Outer == nil { + break + } + } + return env +} + +func (env *Env) File() *Env { + for ; env != nil; env = env.Outer { + outer := env.Outer + if outer == nil || outer.Outer == nil { + break + } + } + return env +} + +// combined Parse + MacroExpandCodeWalk +func (c *Comp) Parse(src string) Ast { + c.Line = 0 + nodes := c.ParseBytes([]byte(src)) + forms := AnyToAst(nodes, "Parse") + + forms, _ = c.MacroExpandCodewalk(forms) + if c.Options&OptShowMacroExpand != 0 { + c.Debugf("after macroexpansion: %v", forms.Interface()) + } + return forms +} + +func (c *Comp) Compile(in Ast) *Expr { + switch form := in.(type) { + case nil: + return nil + case AstWithNode: + return c.CompileNode(form.Node()) + case AstWithSlice: + n := form.Size() + var list []*Expr + for i := 0; i < n; i++ { + e := c.Compile(form.Get(i)) + if e != nil { + list = append(list, e) + } + } + return exprList(list, c.CompileOptions) + } + c.Errorf("Compile: unsupported value, expecting or , found %v <%v>", in, r.TypeOf(in)) + return nil +} + +// compileExpr is a wrapper for Compile +// that guarantees Code does not get clobbered/cleared. +// Used by Comp.Quasiquote +func (c *Comp) compileExpr(in Ast) *Expr { + cf := NewComp(c, nil) + cf.UpCost = 0 + cf.Depth-- + return cf.Compile(in) +} + +func (c *Comp) CompileNode(node ast.Node) *Expr { + if n := c.Code.Len(); n != 0 { + c.Warnf("Compile: discarding %d previously compiled statements from code buffer", n) + } + c.Code.Clear() + if node == nil { + return nil + } + c.Pos = node.Pos() + switch node := node.(type) { + case ast.Decl: + c.Decl(node) + case ast.Expr: + return c.Expr(node) + case *ast.ExprStmt: + // special case of statement + return c.Expr(node.X) + case ast.Stmt: + c.Stmt(node) + case *ast.File: + c.File(node) + default: + c.Errorf("Compile: unsupported expression, expecting , , or <*ast.File>, found %v <%v>", node, r.TypeOf(node)) + return nil + } + return c.Code.AsExpr() +} + +func (c *Comp) File(node *ast.File) { + c.Name = node.Name.Name + for _, decl := range node.Decls { + c.Decl(decl) + } +} + +func (c *Comp) Append(stmt Stmt, pos token.Pos) { + c.Code.Append(stmt, pos) +} + +func (c *Comp) append(stmt Stmt) { + c.Code.Append(stmt, c.Pos) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/compositelit.go b/vendor/github.com/cosmos72/gomacro/fast/compositelit.go new file mode 100644 index 0000000..70c6ba8 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/compositelit.go @@ -0,0 +1,339 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * compositelit.go + * + * Created on May 28, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) CompositeLit(node *ast.CompositeLit) *Expr { + t, ellipsis := c.compileType2(node.Type, false) + switch t.Kind() { + case r.Array: + return c.compositeLitArray(t, ellipsis, node) + case r.Map: + return c.compositeLitMap(t, node) + case r.Slice: + return c.compositeLitSlice(t, node) + case r.Struct: + return c.compositeLitStruct(t, node) + default: + c.Errorf("invalid type for composite literal: <%v> %v", t, node.Type) + return nil + } +} + +func (c *Comp) compositeLitArray(t xr.Type, ellipsis bool, node *ast.CompositeLit) *Expr { + rtype := t.ReflectType() + n := len(node.Elts) + if n == 0 { + return exprX1(t, func(env *Env) r.Value { + // array len is already encoded in its type + return r.New(rtype).Elem() + }) + } + size, keys, funvals := c.compositeLitElements(t, ellipsis, node) + if ellipsis { + // rebuild type with correct length + t = xr.ArrayOf(size, t.Elem()) + rtype = t.ReflectType() + } + + rtval := rtype.Elem() + zeroval := r.Zero(rtval) + return exprX1(t, func(env *Env) r.Value { + obj := r.New(rtype).Elem() + var val r.Value + for i, funval := range funvals { + val = funval(env) + if val == Nil || val == None { + val = zeroval + } else if val.Type() != rtval { + val = val.Convert(rtval) + } + obj.Index(keys[i]).Set(val) + } + return obj + }) +} + +func (c *Comp) compositeLitSlice(t xr.Type, node *ast.CompositeLit) *Expr { + rtype := t.ReflectType() + n := len(node.Elts) + if n == 0 { + return exprX1(t, func(env *Env) r.Value { + return r.MakeSlice(rtype, 0, 0) + }) + } + size, keys, funvals := c.compositeLitElements(t, false, node) + + rtval := rtype.Elem() + zeroval := r.Zero(rtval) + return exprX1(t, func(env *Env) r.Value { + obj := r.MakeSlice(rtype, size, size) + var val r.Value + for i, funval := range funvals { + val = funval(env) + if val == Nil || val == None { + val = zeroval + } else if val.Type() != rtval { + val = val.Convert(rtval) + } + obj.Index(keys[i]).Set(val) + } + return obj + }) +} + +func (c *Comp) compositeLitElements(t xr.Type, ellipsis bool, node *ast.CompositeLit) (size int, keys []int, funvals []func(*Env) r.Value) { + n := len(node.Elts) + tval := t.Elem() + seen := make(map[int]bool) // indexes already seen + keys = make([]int, n) + funvals = make([]func(*Env) r.Value, n) + size = 0 + key, lastkey := 0, -1 + + for i, el := range node.Elts { + elv := el + switch elkv := el.(type) { + case *ast.KeyValueExpr: + ekey := c.Expr1(elkv.Key) + if !ekey.Const() { + c.Errorf("literal %s index must be non-negative integer constant: %v", t.Kind(), elkv.Key) + } else if ekey.Untyped() { + key = ekey.ConstTo(c.TypeOfInt()).(int) + } else { + key = convertLiteralCheckOverflow(ekey.Value, c.TypeOfInt()).(int) + } + lastkey = key + elv = elkv.Value + default: + lastkey++ + } + if lastkey < 0 { + c.Errorf("literal %s index must be non-negative integer constant: %v", t.Kind(), lastkey) + } else if !ellipsis && t.Kind() == r.Array && lastkey >= t.Len() { + c.Errorf("%s index %d out of bounds [0:%d]", t.Kind(), lastkey, t.Len()) + } else if seen[lastkey] { + c.Errorf("duplicate index in %s literal: %d", t.Kind(), lastkey) + } + seen[lastkey] = true + if size <= lastkey { + if lastkey == MaxInt { + c.Errorf("literal %s too large: found index == MaxInt", t.Kind()) + } + size = lastkey + 1 + } + keys[i] = lastkey + + eval := c.Expr1(elv) + if eval.Const() { + eval.ConstTo(tval) + } else if !eval.Type.AssignableTo(tval) { + c.Errorf("cannot use %v <%v> as type <%v> in %s value", elv, eval.Type, tval, t.Kind()) + } + funvals[i] = eval.AsX1() + } + return size, keys, funvals +} + +func (c *Comp) compositeLitMap(t xr.Type, node *ast.CompositeLit) *Expr { + rtype := t.ReflectType() + n := len(node.Elts) + if n == 0 { + return exprX1(t, func(env *Env) r.Value { + return r.MakeMap(rtype) + }) + } + tkey := t.Key() + tval := t.Elem() + + seen := make(map[interface{}]bool) // constant keys already seen + funkeys := make([]func(*Env) r.Value, n) + funvals := make([]func(*Env) r.Value, n) + + for i, el := range node.Elts { + switch elkv := el.(type) { + case *ast.KeyValueExpr: + ekey := c.Expr1(elkv.Key) + if ekey.Const() { + ekey.ConstTo(tkey) + if seen[ekey.Value] { + c.Errorf("duplicate key %v in map literal", elkv.Key) + } + seen[ekey.Value] = true + } else if !ekey.Type.AssignableTo(tkey) { + c.Errorf("cannot use %v <%v> as type <%v> in map key", elkv.Key, ekey.Type, tkey) + } + eval := c.Expr1(elkv.Value) + if eval.Const() { + eval.ConstTo(tval) + } else if !eval.Type.AssignableTo(tval) { + c.Errorf("cannot use %v <%v> as type <%v> in map value", elkv.Value, eval.Type, tval) + } + funkeys[i] = ekey.AsX1() + funvals[i] = eval.AsX1() + + default: + c.Errorf("missing key in map literal: %v", el) + } + } + rtkey, rtval := rtype.Key(), rtype.Elem() + zerokey, zeroval := r.Zero(rtkey), r.Zero(rtval) + return exprX1(t, func(env *Env) r.Value { + obj := r.MakeMap(rtype) + var key, val r.Value + for i, funkey := range funkeys { + key = funkey(env) + if key == Nil || key == None { + key = zerokey + } else if key.Type() != rtkey { + key = key.Convert(rtkey) + } + val = funvals[i](env) + if val == Nil || val == None { + val = zeroval + } else if val.Type() != rtval { + val = val.Convert(rtval) + } + obj.SetMapIndex(key, val) + } + return obj + }) +} + +func (c *Comp) compositeLitStruct(t xr.Type, node *ast.CompositeLit) *Expr { + rtype := t.ReflectType() + n := len(node.Elts) + if n == 0 { + return exprX1(t, func(env *Env) r.Value { + return r.New(rtype).Elem() + }) + } + + var seen map[string]bool + var all map[string]xr.StructField + inits := make([]func(*Env) r.Value, n) + indexes := make([]int, n) + var flagkv, flagv bool + + for i, el := range node.Elts { + switch elkv := el.(type) { + case *ast.KeyValueExpr: + flagkv = true + if flagv { + c.Errorf("mixture of field:value and value in struct literal: %v", node) + } + switch k := elkv.Key.(type) { + case *ast.Ident: + name := k.Name + if seen[name] { + c.Errorf("duplicate field name in struct literal: %v", name) + } else if seen == nil { + seen = make(map[string]bool) + all = listStructFields(t, c.FileComp().Path) + } + field, ok := all[name] + if !ok { + c.Errorf("unknown field '%v' in struct literal of type %v", name, t) + } + expr := c.Expr1(elkv.Value) + if expr.Const() { + expr.ConstTo(field.Type) + } else if !expr.Type.AssignableTo(field.Type) { + c.Errorf("cannot use %v <%v> as type <%v> in field value", elkv.Value, expr.Type, field.Type) + } + inits[i] = expr.AsX1() + indexes[i] = field.Index[0] + default: + c.Errorf("invalid field name '%v' in struct literal", k) + } + default: + flagv = true + if flagkv { + c.Errorf("mixture of field:value and value in struct literal: %v", node) + } + field := t.Field(i) + expr := c.Expr1(el) + if expr.Const() { + expr.ConstTo(field.Type) + } else if !expr.Type.AssignableTo(field.Type) { + c.Errorf("cannot use %v <%v> as type <%v> in field value", el, expr.Type, field.Type) + } + if !ast.IsExported(field.Name) && field.Pkg.Path() != c.FileComp().Path { + c.Errorf("implicit assignment of unexported field '%v' in struct literal <%v>", field.Name, t) + } + inits[i] = expr.AsX1() + indexes[i] = field.Index[0] + } + } + if nfield := t.NumField(); flagv && n != nfield { + var label, plural = "few", "s" + if n > nfield { + label = "many" + } else if n == 1 { + plural = "" + } + c.Errorf("too %s values in struct initializer: <%v> has %d fields, found %d initializer%s", + label, t, nfield, n, plural) + } + return exprX1(t, func(env *Env) r.Value { + obj := r.New(rtype).Elem() + var val, field r.Value + var tfield r.Type + for i, init := range inits { + val = init(env) + if val == Nil || val == None { + continue + } + field = obj.Field(indexes[i]) + tfield = field.Type() + if val.Type() != tfield { + val = val.Convert(tfield) + } + field.Set(val) + } + return obj + }) +} + +// listStructFields lists the field names of a struct. It ignores embedded fields. +// Unexported fields are listed only if their package's path matches given pkgpath +func listStructFields(t xr.Type, pkgpath string) map[string]xr.StructField { + list := make(map[string]xr.StructField) + for i, n := 0, t.NumField(); i < n; i++ { + f := t.Field(i) + if ast.IsExported(f.Name) || f.Pkg.Path() == pkgpath { + list[f.Name] = f + } + } + return list +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/convert.go b/vendor/github.com/cosmos72/gomacro/fast/convert.go new file mode 100644 index 0000000..b09ce98 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/convert.go @@ -0,0 +1,152 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * convert.go + * + * Created on Apr 30, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// Convert compiles a type conversion +func (c *Comp) Convert(node ast.Expr, t xr.Type) *Expr { + e := c.Expr1(node) + if e.Untyped() { + e.ConstTo(e.DefaultType()) + } + + if xr.SameType(e.Type, t) { + return e + } else if e.Type == nil && IsNillableKind(t.Kind()) { + e.Type = t + e.Value = xr.Zero(t).Interface() + } else if e.Type != nil && e.Type.ConvertibleTo(t) { + } else { + c.Errorf("cannot convert %v to %v: %v", e.Type, t, node) + return nil + } + rtype := t.ReflectType() + if e.Const() { + val := r.ValueOf(e.Value).Convert(rtype).Interface() + return c.exprValue(t, val) + } + fun := e.AsX1() + var ret I + switch t.Kind() { + case r.Bool: + ret = func(env *Env) bool { + val := fun(env).Convert(rtype) + return val.Bool() + } + case r.Int: + ret = func(env *Env) int { + val := fun(env).Convert(rtype) + return int(val.Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + val := fun(env).Convert(rtype) + return int8(val.Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + val := fun(env).Convert(rtype) + return int16(val.Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + val := fun(env).Convert(rtype) + return int32(val.Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + val := fun(env).Convert(rtype) + return val.Int() + } + case r.Uint: + ret = func(env *Env) uint { + val := fun(env).Convert(rtype) + return uint(val.Uint()) + } + case r.Uint8: + ret = func(env *Env) uint8 { + val := fun(env).Convert(rtype) + return uint8(val.Uint()) + } + case r.Uint16: + ret = func(env *Env) uint16 { + val := fun(env).Convert(rtype) + return uint16(val.Uint()) + } + case r.Uint32: + ret = func(env *Env) uint32 { + val := fun(env).Convert(rtype) + return uint32(val.Uint()) + } + case r.Uint64: + ret = func(env *Env) uint64 { + val := fun(env).Convert(rtype) + return val.Uint() + } + case r.Uintptr: + ret = func(env *Env) uintptr { + val := fun(env).Convert(rtype) + return uintptr(val.Uint()) + } + case r.Float32: + ret = func(env *Env) float32 { + val := fun(env).Convert(rtype) + return float32(val.Float()) + } + case r.Float64: + ret = func(env *Env) float64 { + val := fun(env).Convert(rtype) + return val.Float() + } + case r.Complex64: + ret = func(env *Env) complex64 { + val := fun(env).Convert(rtype) + return complex64(val.Complex()) + } + case r.Complex128: + ret = func(env *Env) complex128 { + val := fun(env).Convert(rtype) + return val.Complex() + } + case r.String: + ret = func(env *Env) string { + val := fun(env).Convert(rtype) + return val.String() + } + default: + ret = func(env *Env) r.Value { + return fun(env).Convert(rtype) + } + } + return exprFun(t, ret) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/declaration.go b/vendor/github.com/cosmos72/gomacro/fast/declaration.go new file mode 100644 index 0000000..9739a50 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/declaration.go @@ -0,0 +1,562 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * declaration.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + r "reflect" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// Decl compiles a constant, variable, function or type declaration - or an import +func (c *Comp) Decl(node ast.Decl) { + if node != nil { + c.Pos = node.Pos() + } + switch node := node.(type) { + case *ast.GenDecl: + c.GenDecl(node) + case *ast.FuncDecl: + c.FuncDecl(node) + default: + c.Errorf("Compile: unsupported declaration, expecting <*ast.GenDecl> or <*ast.FuncDecl>, found: %v <%v>", node, r.TypeOf(node)) + } +} + +// GenDecl compiles a constant, variable or type declaration - or an import +func (c *Comp) GenDecl(node *ast.GenDecl) { + switch node.Tok { + case token.IMPORT: + for _, decl := range node.Specs { + c.Import(decl) + } + /* + case token.PACKAGE: + // modified parser converts 'package foo' to ast.GenDecl{Tok: token.Package} + for _, decl := range node.Specs { + c.changePackage(decl) + } + */ + case token.CONST: + var defaultType ast.Expr + var defaultExprs []ast.Expr + top := c.TopComp() + top.addIota() + defer top.removeIota() + for _, decl := range node.Specs { + c.DeclConsts(decl, defaultType, defaultExprs) + if valueSpec, ok := decl.(*ast.ValueSpec); ok && valueSpec.Values != nil { + defaultType = valueSpec.Type + defaultExprs = valueSpec.Values + } + top.incrementIota() + } + case token.TYPE: + for _, decl := range node.Specs { + c.DeclType(decl) + } + case token.VAR: + for _, decl := range node.Specs { + c.DeclVars(decl) + } + default: + c.Errorf("Compile: unsupported declaration kind, expecting token.IMPORT, token.CONST, token.TYPE or token.VAR, found %v: %v <%v>", + node.Tok, node, r.TypeOf(node)) + } +} + +// DeclConsts compiles a set of constant declarations +func (c *Comp) DeclConsts(node ast.Spec, defaultType ast.Expr, defaultExprs []ast.Expr) { + c.Pos = node.Pos() + switch node := node.(type) { + case *ast.ValueSpec: + if node.Type != nil || node.Values != nil { + defaultType = node.Type + defaultExprs = node.Values + } + names, t, inits := c.prepareDeclConstsOrVars(tostrings(node.Names), defaultType, defaultExprs) + c.DeclConsts0(names, t, inits) + default: + c.Errorf("Compile: unsupported constant declaration: expecting <*ast.ValueSpec>, found: %v <%v>", node, r.TypeOf(node)) + } +} + +// DeclVars compiles a set of variable declarations i.e. "var x1, x2... [type] = expr1, expr2..." +func (c *Comp) DeclVars(node ast.Spec) { + c.Pos = node.Pos() + switch node := node.(type) { + case *ast.ValueSpec: + names, t, inits := c.prepareDeclConstsOrVars(tostrings(node.Names), node.Type, node.Values) + c.DeclVars0(names, t, inits) + default: + c.Errorf("Compile: unsupported variable declaration: expecting <*ast.ValueSpec>, found: %v <%v>", node, r.TypeOf(node)) + } +} + +// DeclVarsShort compiles a set of variable short declarations i.e. "x1, x2... := expr1, expr2..." +func (c *Comp) DeclVarsShort(lhs []ast.Expr, rhs []ast.Expr) { + n := len(lhs) + names := make([]string, n) + for i := range lhs { + if ident, ok := lhs[i].(*ast.Ident); ok { + names[i] = ident.Name + } else { + c.Errorf("non-name %v on left side of :=", lhs[i]) + } + } + _, t, inits := c.prepareDeclConstsOrVars(names, nil, rhs) + c.DeclVars0(names, t, inits) +} + +func tostrings(idents []*ast.Ident) []string { + n := len(idents) + names := make([]string, n) + for i, ident := range idents { + names[i] = ident.Name + } + return names +} + +func (c *Comp) prepareDeclConstsOrVars(names []string, typ ast.Expr, exprs []ast.Expr) (names_out []string, t xr.Type, inits []*Expr) { + n := len(names) + if typ != nil { + t = c.Type(typ) + } + if exprs != nil { + inits = c.ExprsMultipleValues(exprs, n) + } + return names, t, inits +} + +func (c *Comp) DeclConsts0(names []string, t xr.Type, inits []*Expr) { + n := len(names) + if inits == nil { + c.Errorf("constants without initialization: %v", names) + } else if len(inits) != n { + c.Errorf("cannot declare %d constants with %d initializers: %v", n, len(inits), names) + } + for i, name := range names { + init := inits[i] + if !init.Const() { + c.Errorf("const initializer for %q is not a constant", name) + } + c.DeclConst0(name, t, init.Value) + } +} + +// DeclVars0 compiles a set of variable declarations +func (c *Comp) DeclVars0(names []string, t xr.Type, inits []*Expr) { + n := len(names) + ni := len(inits) + if ni == 0 { + for i := 0; i < n; i++ { + c.DeclVar0(names[i], t, nil) + } + } else if ni == n { + for i := 0; i < n; i++ { + c.DeclVar0(names[i], t, inits[i]) + } + } else if ni == 1 && n > 1 { + c.DeclMultiVar0(names, t, inits[0]) + } else { + c.Errorf("cannot declare %d variables from %d expressions: %v", n, ni, names) + } +} + +// DeclConst0 compiles a constant declaration +func (c *Comp) DeclConst0(name string, t xr.Type, value I) { + if !isLiteral(value) { + c.Errorf("const initializer for %q is not a constant: %v <%T>", name, value, value) + return + } + lit := c.litValue(value) + if t == nil { + t = lit.Type + } else { + value = lit.ConstTo(t) + } + bind := c.AddBind(name, ConstBind, t) + bind.Value = value // c.Binds[] is a map[string]*Bind => changes to *Bind propagate to the map +} + +// AddFuncBind reserves space for a subsequent function declaration +func (c *Comp) AddFuncBind(name string, t xr.Type) *Bind { + bind := c.AddBind(name, FuncBind, t) + if bind.Desc.Class() != FuncBind { + c.Errorf("internal error! Comp.AddBind(name=%q, class=FuncBind, type=%v) returned class=%v, expecting FuncBind", + name, t, bind.Desc.Class()) + } + return bind +} + +// AddBind reserves space for a subsequent constant, function or variable declaration +func (c *Comp) AddBind(name string, class BindClass, t xr.Type) *Bind { + if class == IntBind || class == VarBind { + if base.IsCategory(t.Kind(), r.Bool, r.Int, r.Uint, r.Float64) || t.Kind() == r.Complex64 { + class = IntBind + } else { + class = VarBind + } + } + var index = NoIndex + if name == "_" { + // never store bindings for "_" in c.Binds + desc := MakeBindDescriptor(class, index) + bind := &Bind{Lit: Lit{Type: t}, Desc: desc, Name: name} + return bind + } + if c.Binds == nil { + c.Binds = make(map[string]*Bind) + } + if len(name) == 0 { + // unnamed function result, or unnamed switch/range/... expression + } else if bind := c.Binds[name]; bind != nil { + c.Warnf("redefined identifier: %v", name) + oldclass := bind.Desc.Class() + if (oldclass == IntBind) == (class == IntBind) { + // both are IntBind, or neither is. + // we can reuse the bind index + index = bind.Desc.Index() + } + } + // allocate a slot either in Binds or in IntBinds + switch class { + case ConstBind: + index = NoIndex + default: // case FuncBind, VarBind: + if index == NoIndex { + if c.BindNum == NoIndex { + c.BindNum++ + } + index = c.BindNum + c.BindNum++ + } + case IntBind: + if index == NoIndex { + if c.IntBindNum == NoIndex { + c.IntBindNum++ + } + index = c.IntBindNum + c.IntBindNum++ + } + } + desc := MakeBindDescriptor(class, index) + bind := &Bind{Lit: Lit{Type: t}, Desc: desc, Name: name} + if len(name) != 0 { + // skip unnamed function results, and unnamed switch/range/... expression + c.Binds[name] = bind + } + return bind +} + +func (c *Comp) declUnnamedBind(e *Expr, o *Comp, upn int) *Symbol { + t := e.Type + bind := o.AddBind("", VarBind, t) + // c.Debugf("declUnnamedBind: allocated bind %v, upn = %d", bind, upn) + switch bind.Desc.Class() { + case IntBind: + // no difference between declaration and assignment for this class + va := bind.AsVar(upn, PlaceSettable) + c.SetVar(va, token.ASSIGN, e) + case VarBind: + // cannot use c.DeclVar0 because the variable is declared in o + // cannot use o.DeclVar0 because the initializer must be evaluated in c + // so initialize the binding manually + index := bind.Desc.Index() + init := e.AsX1() + rtype := t.ReflectType() + switch upn { + case 0: + c.append(func(env *Env) (Stmt, *Env) { + v := init(env) + if v.Type() != rtype { + v = v.Convert(rtype) + } + // no need to create a settable reflect.Value + env.Binds[index] = v + env.IP++ + return env.Code[env.IP], env + }) + case 1: + c.append(func(env *Env) (Stmt, *Env) { + v := init(env) + if v.Type() != rtype { + v = v.Convert(rtype) + } + // no need to create a settable reflect.Value + env.Outer.Binds[index] = v + env.IP++ + return env.Code[env.IP], env + }) + default: + c.append(func(env *Env) (Stmt, *Env) { + o := env + for i := 0; i < upn; i++ { + o = o.Outer + } + v := init(env) + if v.Type() != rtype { + v = v.Convert(rtype) + } + // no need to create a settable reflect.Value + o.Binds[index] = v + env.IP++ + return env.Code[env.IP], env + }) + } + default: + c.Errorf("internal error! Comp.AddBind(name=%q, class=VarBind, type=%v) returned class=%v, expecting VarBind or IntBind", + "", t, bind.Desc.Class()) + return nil + } + return bind.AsSymbol(upn) +} + +// DeclVar0 compiles a variable declaration. For caller's convenience, returns allocated Bind +func (c *Comp) DeclVar0(name string, t xr.Type, init *Expr) *Bind { + if t == nil { + if init == nil { + c.Errorf("no value and no type, cannot declare : %v", name) + } + t = init.DefaultType() + if t == nil { + c.Errorf("cannot declare variable as untyped nil: %v", name) + } + n := init.NumOut() + if n == 0 { + c.Errorf("initializer returns no values, cannot declare variable: %v", name) + } else if n > 1 { + c.Warnf("initializer returns %d values, using only the first one to declare variable: %v", n, name) + } + } + bind := c.AddBind(name, VarBind, t) + desc := bind.Desc + switch desc.Class() { + default: + c.Errorf("internal error! Comp.AddBind(name=%q, class=VarBind, type=%v) returned class=%v, expecting VarBind or IntBind", + name, t, desc.Class()) + return bind + case IntBind: + // no difference between declaration and assignment for these classes + if init == nil { + // no initializer... use the zero-value of t + init = c.exprValue(t, xr.Zero(t).Interface()) + } + va := bind.AsVar(0, PlaceSettable) + c.SetVar(va, token.ASSIGN, init) + case VarBind: + index := desc.Index() + if index == NoIndex && init != nil { + // assigning a constant or expression to _ + // only keep the expression side effects + c.append(init.AsStmt()) + } + // declaring a variable in Env.Binds[], we must create a settable and addressable reflect.Value + if init == nil { + // no initializer... use the zero-value of t + rtype := t.ReflectType() + c.append(func(env *Env) (Stmt, *Env) { + // base.Debugf("declaring %v", bind) + env.Binds[index] = r.New(rtype).Elem() + env.IP++ + return env.Code[env.IP], env + }) + return bind + } + if init.Const() { + init.ConstTo(t) // convert untyped constants, check typed constants + } + fun := init.AsX1() // AsX1() panics if init.NumOut() == 0, warns if init.NumOut() > 1 + tfun := init.Out(0) + if tfun == nil || (!xr.SameType(tfun, t) && !tfun.AssignableTo(t)) { + c.Errorf("cannot assign <%v> to <%v> in variable declaration: %v <%v>", tfun, t, name, t) + return bind + } + var ret func(env *Env) (Stmt, *Env) + // optimization: no need to wrap multiple-valued function into a single-value function + rtype := t.ReflectType() + if f, ok := init.Fun.(func(*Env) (r.Value, []r.Value)); ok { + ret = func(env *Env) (Stmt, *Env) { + ret, _ := f(env) + place := r.New(rtype).Elem() + place.Set(ret.Convert(rtype)) + env.Binds[index] = place + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + ret := fun(env) + place := r.New(rtype).Elem() + place.Set(ret.Convert(rtype)) + env.Binds[index] = place + env.IP++ + return env.Code[env.IP], env + } + } + c.append(ret) + } + return bind +} + +// DeclBindRuntimeValue compiles a variable, function or constant declaration with a reflect.Value passed at runtime +func (c *Comp) DeclBindRuntimeValue(bind *Bind) func(*Env, r.Value) { + desc := bind.Desc + index := desc.Index() + if index == NoIndex { + return nil + } + t := bind.Type + rtype := t.ReflectType() + switch desc.Class() { + default: + c.Errorf("cannot declare a %s with a value passed at runtime: %v <%v>", desc.Class(), bind.Name, t) + return nil + case FuncBind: + // declaring a function in Env.Binds[], the reflect.Value must not be addressable or settable + return func(env *Env, v r.Value) { + env.Binds[index] = v.Convert(rtype) + } + case VarBind: + // declaring a variable in Env.Binds[], we must create a settable and addressable reflect.Value + return func(env *Env, v r.Value) { + place := r.New(rtype).Elem() + if v.Type() != rtype { + v = v.Convert(rtype) + } + place.Set(v) + env.Binds[index] = place + } + case IntBind: + // no difference between declaration and assignment for IntBind + return c.varSetValue(bind.AsVar(0, PlaceSettable)) + } +} + +// DeclMultiVar0 compiles multiple variable declarations from a single multi-valued expression +func (c *Comp) DeclMultiVar0(names []string, t xr.Type, init *Expr) { + if t == nil { + if init == nil { + c.Errorf("no value and no type, cannot declare variables: %v", names) + } + } + n := len(names) + if n == 1 { + c.DeclVar0(names[0], t, init) + return + } + ni := init.NumOut() + if ni < n { + c.Errorf("cannot declare %d variables from expression returning %d values: %v", n, ni, names) + } else if ni > n { + c.Warnf("declaring %d variables from expression returning %d values: %v", n, ni, names) + } + decls := make([]func(*Env, r.Value), n) + for i, name := range names { + ti := init.Out(i) + if t != nil && !xr.SameType(t, ti) { + if ti != nil && !ti.AssignableTo(t) { + c.Errorf("cannot assign <%v> to <%v> in variable declaration: %v", ti, t, names) + return + } else { + ti = t // declared variable has type t, not the i-th type returned by multi-valued expression + } + } + bind := c.AddBind(name, VarBind, ti) + decls[i] = c.DeclBindRuntimeValue(bind) + } + fun := init.AsXV(0) + c.append(func(env *Env) (Stmt, *Env) { + // call the multi-valued function. we know ni > 1, so just use the []r.Value + _, rets := fun(env) + + // declare and assign the variables one by one. we know n <= ni + for i, decl := range decls { + if decl != nil { + decl(env, rets[i]) + } + } + env.IP++ + return env.Code[env.IP], env + }) +} + +// DeclFunc0 compiles a function declaration. For caller's convenience, returns allocated Bind +func (c *Comp) DeclFunc0(name string, fun I) *Bind { + funv := r.ValueOf(fun) + t := c.TypeOf(fun) + if t.Kind() != r.Func { + c.Errorf("DeclFunc0(%s): expecting a function, received %v <%v>", name, fun, t) + } + bind := c.AddFuncBind(name, t) + index := bind.Desc.Index() + ret := func(env *Env) (Stmt, *Env) { + env.Binds[index] = funv + env.IP++ + return env.Code[env.IP], env + } + c.append(ret) + return bind +} + +// DeclEnvFunc0 compiles a function declaration that accesses interpreter's Env. For caller's convenience, returns allocated Bind +func (c *Comp) DeclEnvFunc0(name string, envfun Function) *Bind { + t := c.TypeOfFunction() + bind := c.AddBind(name, ConstBind, t) // not a regular function... its type is not accurate + bind.Value = envfun // c.Binds[] is a map[string]*Bind => changes to *Bind propagate to the map + return bind +} + +// DeclBuiltin0 compiles a builtin function declaration. For caller's convenience, returns allocated Bind +func (c *Comp) DeclBuiltin0(name string, builtin Builtin) *Bind { + t := c.TypeOfBuiltin() + bind := c.AddBind(name, ConstBind, t) // not a regular function... its type is not accurate + bind.Value = builtin // c.Binds[] is a map[string]*Bind => changes to *Bind propagate to the map + return bind +} + +// replacement of reflect.TypeOf() that uses xreflect.TypeOf() +func (c *Comp) TypeOf(val interface{}) xr.Type { + v := c.Universe + v.TryResolve = c.tryResolveForXtype + + return v.TypeOf(val) +} + +func (c *Comp) tryResolveForXtype(name, pkgpath string) xr.Type { + if c.FileComp().Path != pkgpath { + return nil + } + var t xr.Type + for c != nil && t == nil { + t = c.Types[name] + c = c.Outer + } + return t +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/expr.go b/vendor/github.com/cosmos72/gomacro/fast/expr.go new file mode 100644 index 0000000..fd4340e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/expr.go @@ -0,0 +1,168 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * expr.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + r "reflect" + + xr "github.com/cosmos72/gomacro/xreflect" +) + +// ExprsMultipleValues either a single expression returning multiple values, +// or multiple expressions each returning a value. +func (c *Comp) ExprsMultipleValues(nodes []ast.Expr, expectedValuesN int) (inits []*Expr) { + n := len(nodes) + if n != expectedValuesN { + if n != 1 { + c.Errorf("value count mismatch: cannot assign %d values to %d places: %v", + n, expectedValuesN, nodes) + return nil + } + e := c.Expr(nodes[0]) + if actualN := e.NumOut(); actualN != expectedValuesN { + var plural string + if actualN != 1 { + plural = "s" + } + c.Errorf("expression returns %d value%s, expecting %d: %v", actualN, plural, expectedValuesN, nodes[0]) + } + inits = []*Expr{e} + } else { + inits = c.Exprs(nodes) + } + return inits +} + +// Exprs compiles multiple expressions +func (c *Comp) Exprs(nodes []ast.Expr) []*Expr { + var inits []*Expr + if n := len(nodes); n != 0 { + inits = make([]*Expr, n) + for i := range nodes { + inits[i] = c.Expr1(nodes[i]) + } + } + return inits +} + +// Expr compiles an expression that returns a single value +func (c *Comp) Expr1(in ast.Expr) *Expr { + for { + if in != nil { + c.Pos = in.Pos() + } + // env.Debugf("Expr1() %v", node) + switch node := in.(type) { + case *ast.ParenExpr: + in = node.X + continue + case *ast.IndexExpr: + return c.IndexExpr1(node) + case *ast.TypeAssertExpr: + return c.TypeAssert1(node) + case *ast.UnaryExpr: + if node.Op == token.ARROW { + xe := c.Expr1(node.X) + return c.Recv1(node, xe) + } else { + return c.UnaryExpr(node) + } + } + break + } + e := c.Expr(in) + nout := e.NumOut() + switch nout { + case 0: + c.Errorf("expression returns no values, expecting one: %v", in) + return nil + default: + c.Warnf("expression returns %d values %v, using only the first one: %v", + len(e.Types), e.Types, in) + fallthrough + case 1: + return e + } +} + +// Expr compiles an expression +func (c *Comp) Expr(in ast.Expr) *Expr { + for { + if in != nil { + c.Pos = in.Pos() + } + // env.Debugf("Expr() %v", node) + switch node := in.(type) { + case *ast.BasicLit: + return c.BasicLit(node) + case *ast.BinaryExpr: + return c.BinaryExpr(node) + case *ast.CallExpr: + return c.CallExpr(node) + case *ast.CompositeLit: + return c.CompositeLit(node) + case *ast.FuncLit: + return c.FuncLit(node) + case *ast.Ident: + return c.Ident(node.Name) + case *ast.IndexExpr: + return c.IndexExpr(node) + case *ast.ParenExpr: + in = node.X + continue + case *ast.UnaryExpr: + return c.UnaryExpr(node) + case *ast.SelectorExpr: + return c.SelectorExpr(node) + case *ast.SliceExpr: + return c.SliceExpr(node) + case *ast.StarExpr: + return c.StarExpr(node) + case *ast.TypeAssertExpr: + return c.TypeAssert2(node) + default: + } + c.Errorf("unimplemented Compile() for: %v <%v>", in, r.TypeOf(in)) + return nil + } +} + +// Expr1OrType compiles an single-valued expression or a type +// FIXME lookup simultaneously for both types and expressions +func (c *Comp) Expr1OrType(node ast.Expr) (e *Expr, t xr.Type) { + panicking := true + defer func() { + if panicking { + recover() + t = c.Type(node) + } + }() + e = c.Expr1(node) + panicking = false + return +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/expr1.go b/vendor/github.com/cosmos72/gomacro/fast/expr1.go new file mode 100644 index 0000000..d1357d6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/expr1.go @@ -0,0 +1,114 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * expr1.go + * + * Created on Apr 03, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/constant" + r "reflect" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) litValue(value I) Lit { + if untyp, ok := value.(UntypedLit); ok && untyp.Universe != c.Universe { + untyp.Universe = c.Universe + value = untyp + } + return Lit{Type: c.TypeOf(value), Value: value} +} + +func (c *Comp) exprUntypedLit(kind r.Kind, obj constant.Value) *Expr { + return &Expr{Lit: Lit{Type: c.TypeOfUntypedLit(), Value: UntypedLit{kind, obj, c.Universe}}} +} + +func (c *Comp) exprValue(t xr.Type, value I) *Expr { + if t == nil { + t = c.TypeOf(value) + } + return &Expr{Lit: Lit{Type: t, Value: value}, IsNil: value == nil} +} + +func exprLit(lit Lit, sym *Symbol) *Expr { + return &Expr{Lit: lit, Sym: sym, IsNil: lit.Value == nil} +} + +func exprFun(t xr.Type, fun I) *Expr { + return &Expr{Lit: Lit{Type: t}, Fun: fun} +} + +func exprX1(t xr.Type, fun func(env *Env) r.Value) *Expr { + return &Expr{Lit: Lit{Type: t}, Fun: fun} +} + +func exprXV(types []xr.Type, fun func(env *Env) (r.Value, []r.Value)) *Expr { + if len(types) == 1 { + return &Expr{Lit: Lit{Type: types[0]}, Fun: fun} + } else { + return &Expr{Lit: Lit{Type: types[0]}, Types: types, Fun: fun} + } +} + +func expr0(fun func(env *Env)) *Expr { + return &Expr{Types: zeroTypes, Fun: fun} +} + +func (c *Comp) exprBool(fun func(env *Env) bool) *Expr { + return &Expr{Lit: Lit{Type: c.TypeOfBool()}, Fun: fun} +} + +func (c *Comp) exprUint8(fun func(env *Env) uint8) *Expr { + return &Expr{Lit: Lit{Type: c.TypeOfUint8()}, Fun: fun} +} + +func (c *Comp) exprString(fun func(env *Env) string) *Expr { + return &Expr{Lit: Lit{Type: c.TypeOfString()}, Fun: fun} +} + +func (expr *Expr) EvalConst(opts CompileOptions) I { + if expr == nil { + return nil + } + if expr.Const() { + if opts == CompileDefaults && expr.Untyped() { + return expr.ConstTo(expr.DefaultType()) + } + return expr.Value + } + ret := expr.AsX1()(nil) + if ret == base.None { + base.Errorf("constant should evaluate to a single value, found no values at all") + return nil + } + var value I + if ret != base.Nil { + value = ret.Interface() + } + expr.Value = value + expr.IsNil = value == nil + expr.Fun = nil // no longer needed, will be recreated if needed as a wrapper for the computed value + return value +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/func0ret0.go b/vendor/github.com/cosmos72/gomacro/fast/func0ret0.go new file mode 100644 index 0000000..4ce1585 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/func0ret0.go @@ -0,0 +1,55 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * func0ret0.go + * + * Created on Apr 16, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) func0ret0(t xr.Type, m *funcMaker) func(env *Env) r.Value { + funcbody := m.funcbody + if funcbody == nil { + return func(env *Env) r.Value { + return valueOfNopFunc + } + } + + nbinds := m.nbinds + nintbinds := m.nintbinds + return func(env *Env) r.Value { + // function is closed over the env used to DECLARE it + env.MarkUsedByClosure() + return r.ValueOf(func() { + env := NewEnv4Func(env, nbinds, nintbinds) + // execute the body + funcbody(env) + + env.FreeEnv() + }) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/func0ret1.go b/vendor/github.com/cosmos72/gomacro/fast/func0ret1.go new file mode 100644 index 0000000..50c2791 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/func0ret1.go @@ -0,0 +1,507 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * func0ret1.go + * + * Created on Apr 16, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) func0ret1(t xr.Type, m *funcMaker) func(*Env) r.Value { + + nbinds := m.nbinds + nintbinds := m.nintbinds + funcbody := m.funcbody + + tret0 := t.Out(0) + kret0 := tret0.Kind() + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 bool) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) bool) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 int) { return }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) int) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 int8) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) int8) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 int16) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) int16) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 int32) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) int32) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 int64) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) int64) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 uint) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) uint) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 uint8) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) uint8) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 uint16) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) uint16) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 uint32) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) uint32) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 uint64) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) uint64) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 uintptr) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) uintptr) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 float32) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) float32) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 float64) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) float64) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 complex64) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) complex64) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 complex128) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) complex128) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 string) { + return + }, + ) + } + } + + resultfun := m.resultfuns[0].(func(*Env) string) + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + funcbody(env) + + ret0 = resultfun(env) + env.FreeEnv() + return + + }) + } + } + default: + return nil + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/func0ret1.gomacro b/vendor/github.com/cosmos72/gomacro/fast/func0ret1.gomacro new file mode 100644 index 0000000..22ce94a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/func0ret1.gomacro @@ -0,0 +1,104 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * func0ret1.go + * + * Created on Apr 16, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + r "reflect" + "go/ast" +) + + +// ----------------- func() t0 --------------------- + +:macro mfunc0ret1(ret0typ ast.Node) ast.Node { + if EvalType(ret0typ) == nil { + // not a well-known type + return ~"{ + return c.funcGeneric(t, m) + } + } + return ~"{ + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func() (ret0 ~,ret0typ) { + return + }) + } + } + resultfun := m.resultfuns[0].(func (*Env) ~,ret0typ) + return func(env *Env) r.Value { + // function is closed over the env used to DECLARE it + env.MarkUsedByClosure() + return r.ValueOf(func() (ret0 ~,ret0typ) { + env := NewEnv4Func(env, nbinds, nintbinds) + + // execute the body + funcbody(env) + + // extract result + ret0 = resultfun(env) + env.FreeEnv() + return + }) + } + } +} + +func (c *Comp) func0ret1(t xr.Type, m *funcMaker) func(*Env) r.Value { + // do NOT keep a reference to funcMaker + nbinds := m.nbinds + nintbinds := m.nintbinds + funcbody := m.funcbody + + tret0 := t.Out(0) + kret0 := tret0.Kind() + switch kret0 { + case r.Bool: {mfunc0ret1; bool} + case r.Int: {mfunc0ret1; int} + case r.Int8: {mfunc0ret1; int8} + case r.Int16: {mfunc0ret1; int16} + case r.Int32: {mfunc0ret1; int32} + case r.Int64: {mfunc0ret1; int64} + case r.Uint: {mfunc0ret1; uint} + case r.Uint8: {mfunc0ret1; uint8} + case r.Uint16: {mfunc0ret1; uint16} + case r.Uint32: {mfunc0ret1; uint32} + case r.Uint64: {mfunc0ret1; uint64} + case r.Uintptr: {mfunc0ret1; uintptr} + case r.Float32: {mfunc0ret1; float32} + case r.Float64: {mfunc0ret1; float64} + case r.Complex64: {mfunc0ret1; complex64} + case r.Complex128:{mfunc0ret1; complex128} + case r.String: {mfunc0ret1; string} + default: return nil + } +} + diff --git a/vendor/github.com/cosmos72/gomacro/fast/func1ret0.go b/vendor/github.com/cosmos72/gomacro/fast/func1ret0.go new file mode 100644 index 0000000..bbed054 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/func1ret0.go @@ -0,0 +1,468 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * func1ret0.go + * + * Created on Apr 16, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) func1ret0(t xr.Type, m *funcMaker) func(*Env) r.Value { + + nbinds := m.nbinds + nintbinds := m.nintbinds + funcbody := m.funcbody + param0index := m.parambinds[0].Desc.Index() + + targ0 := t.In(0) + karg0 := targ0.Kind() + switch karg0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[param0index] = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[param0index])) = arg0 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[param0index] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[param0index] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + + default: + { + rtype := t.ReflectType() + if funcbody == nil { + return func(env *Env) r.Value { + return r.MakeFunc(rtype, func([]r.Value) []r.Value { return ZeroValues }, + ) + } + } else { + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + rtarg0 := targ0.ReflectType() + return r.MakeFunc(rtype, func(args []r.Value) []r.Value { + env := NewEnv4Func(env, nbinds, nintbinds) + + if param0index != NoIndex { + place := r.New(rtarg0).Elem() + if arg0 := args[0]; arg0 != Nil && arg0 != None { + place.Set(arg0.Convert(rtarg0)) + } + + env.Binds[param0index] = place + } + + funcbody(env) + return ZeroValues + }) + } + } + + } + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/func1ret0.gomacro b/vendor/github.com/cosmos72/gomacro/fast/func1ret0.gomacro new file mode 100644 index 0000000..7cfb591 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/func1ret0.gomacro @@ -0,0 +1,180 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * func1ret0.go + * + * Created on Apr 16, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + r "reflect" + "go/ast" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +// convert a well-known reflect.Type into one of the constants TypeOf* +:func maketypeident(t r.Type) *ast.Ident { + name := "TypeOf" + upcasefirstbyte(t.Name()) + return &ast.Ident{Name: name} +} + +:func fsetarg(typ, tident, name, index ast.Node) ast.Node { + var t r.Type = EvalType(typ) + var bind ast.Node + if t == nil { + bind = ~"{ + place := r.New(~,tident).Elem() + place.Set(r.ValueOf(~,name)) + env.Binds[~,index] = place + } + } else { + typeident := maketypeident(t) + switch t.Kind() { + case r.Complex128: + bind = ~"{ + place := r.New(~,typeident).Elem() + place.SetComplex(~,name) + env.Binds[~,index] = place + } + case r.String: + bind = ~"{ + place := r.New(~,typeident).Elem() + place.SetString(~,name) + env.Binds[~,index] = place + } + case r.Uint64: + bind = ~"{env.IntBinds[~,index] = ~,name} + default: + bind = ~"{*(*~,typ)(unsafe.Pointer(&env.IntBinds[~,index])) = ~,name} + } + } + return bind +} + +// fully optimized function declaration +:macro mfunc1ret0(arg0typ ast.Node) ast.Node { + var t r.Type = EvalType(arg0typ) + if t != nil { + arg0bind := fsetarg(arg0typ, ~'targ0, ~'arg0, ~'param0index) + return ~"{ + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(~,arg0typ) { + }) + } + } + return func(env *Env) r.Value { + // function is closed over the env used to DECLARE it + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 ~,arg0typ) { + env := NewEnv4Func(env, nbinds, nintbinds) + // copy arg0 into allocated binds + ~,arg0bind + // execute the body + funcbody(env) + + env.FreeEnv() + }) + } + } + } + // not a well-known type... use reflect.MakeFunc() + return ~"{ + rtype := t.ReflectType() + if funcbody == nil { + return func(env *Env) r.Value { + return r.MakeFunc(rtype, func([]r.Value) []r.Value { + return ZeroValues + }) + } + } else { + return func(env *Env) r.Value { + // function is closed over the env used to DECLARE it + env.MarkUsedByClosure() + rtarg0 := targ0.ReflectType() + return r.MakeFunc(rtype, func(args []r.Value) []r.Value { + env := NewEnv4Func(env, nbinds, nintbinds) + + // copy arg0 into allocated binds + if param0index != NoIndex { + place := r.New(rtarg0).Elem() + if arg0 := args[0]; arg0 != Nil && arg0 != None { + place.Set(arg0.Convert(rtarg0)) + } + env.Binds[param0index] = place + } + // execute the body + funcbody(env) + + return ZeroValues + }) + } + } + } +} + +func (c *Comp) func1ret0(t xr.Type, m *funcMaker) func(*Env) r.Value { + // do NOT keep a reference to funcMaker + nbinds := m.nbinds + nintbinds := m.nintbinds + funcbody := m.funcbody + param0index := m.parambinds[0].Desc.Index() + + targ0 := t.In(0) + karg0 := targ0.Kind() + switch karg0 { + case r.Bool: {mfunc1ret0; bool} + case r.Int: {mfunc1ret0; int} + case r.Int8: {mfunc1ret0; int8} + case r.Int16: {mfunc1ret0; int16} + case r.Int32: {mfunc1ret0; int32} + case r.Int64: {mfunc1ret0; int64} + case r.Uint: {mfunc1ret0; uint} + case r.Uint8: {mfunc1ret0; uint8} + case r.Uint16: {mfunc1ret0; uint16} + case r.Uint32: {mfunc1ret0; uint32} + case r.Uint64: {mfunc1ret0; uint64} + case r.Uintptr: {mfunc1ret0; uintptr} + case r.Float32: {mfunc1ret0; float32} + case r.Float64: {mfunc1ret0; float64} + case r.Complex64: {mfunc1ret0; complex64} + case r.Complex128:{mfunc1ret0; complex128} + case r.String: {mfunc1ret0; string} + default: {mfunc1ret0; nil} + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/func1ret1.go b/vendor/github.com/cosmos72/gomacro/fast/func1ret1.go new file mode 100644 index 0000000..7f0589b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/func1ret1.go @@ -0,0 +1,8303 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * func_ret1.go + * + * Created on Apr 16, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) func1ret1(t xr.Type, m *funcMaker) func(*Env) r.Value { + + nbinds := m.nbinds + nintbinds := m.nintbinds + funcbody := m.funcbody + + targ0 := t.In(0) + karg0 := targ0.Kind() + kret0 := t.Out(0).Kind() + + indexes := [2]int{ + m.parambinds[0].Desc.Index(), + m.resultbinds[0].Desc.Index(), + } + switch karg0 { + case r.Bool: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Int: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Int8: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Int16: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Int32: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Int64: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Uint: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Uint8: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Uint16: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Uint32: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Uint64: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Uintptr: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Float32: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Float64: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Complex64: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.Complex128: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + case r.String: + switch kret0 { + case r.Bool: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 bool) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 int) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 int8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 int16) { return }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 int32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 int64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 uint) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 uint8) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 uint16) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 uint32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 uint64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = env.IntBinds[indexes[1]] + + env.FreeEnv() + return + + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 uintptr) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 float32) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 float64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 complex64) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) + + env.FreeEnv() + return + + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 complex128) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = env.Binds[indexes[1]].Complex() + + env.FreeEnv() + return + + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string) (ret0 string) { + return + }, + ) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string) (ret0 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + funcbody(env) + + ret0 = env.Binds[indexes[1]].String() + + env.FreeEnv() + return + + }) + } + } + } + } + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/func1ret1.gomacro b/vendor/github.com/cosmos72/gomacro/fast/func1ret1.gomacro new file mode 100644 index 0000000..cd0653f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/func1ret1.gomacro @@ -0,0 +1,206 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * func_ret1.go + * + * Created on Apr 16, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + r "reflect" + "go/ast" +) + + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +// convert a well-known reflect.Type into one of the constants TypeOf* +:func maketypeident(t r.Type) *ast.Ident { + name := "TypeOf" + upcasefirstbyte(t.Name()) + return &ast.Ident{Name: name} +} + +:func fsetarg(typ, name, index ast.Node) ast.Node { + var t r.Type = EvalType(typ) + var bind ast.Node + typeident := maketypeident(t) + switch t.Kind() { + case r.Complex128: + bind = ~"{ + place := r.New(~,typeident).Elem() + place.SetComplex(~,name) + env.Binds[~,index] = place + } + case r.String: + bind = ~"{ + place := r.New(~,typeident).Elem() + place.SetString(~,name) + env.Binds[~,index] = place + } + case r.Uint64: + bind = ~"{env.IntBinds[~,index] = ~,name} + default: + bind = ~"{*(*~,typ)(unsafe.Pointer(&env.IntBinds[~,index])) = ~,name} + } + return bind +} + +:func fgetresult(typ, index ast.Node) ast.Node { + var t r.Type = EvalType(typ) + var bind ast.Node + if t == nil { + bind = ~"{env.Binds[~,index]} + } else { + typeident := maketypeident(t) + switch t.Kind() { + case r.Complex128: + bind = ~"{env.Binds[~,index].Complex()} + case r.String: + bind = ~"{env.Binds[~,index].String()} + case r.Uint64: + bind = ~"{env.IntBinds[~,index]} + default: + bind = ~"{*(*~,typ)(unsafe.Pointer(&env.IntBinds[~,index]))} + } + } + return bind +} + +// ----------------- func(t0) t1 --------------------- + +// generate fully optimized function implementation for func(arg0typ) ret0typ +:macro mfunc1ret1(arg0typ, ret0typ ast.Node) ast.Node { + arg0bind := fsetarg(arg0typ, ~'arg0, ~'{indexes[0]}) + ret0bind := fgetresult(ret0typ, ~'{indexes[1]}) + return ~"{ + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(~,arg0typ) (ret0 ~,ret0typ) { + return + }) + } + } + + return func(env *Env) r.Value { + // function is closed over the env used to DECLARE it + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 ~,arg0typ) (ret0 ~,ret0typ) { + env := NewEnv4Func(env, nbinds, nintbinds) + + // copy arg into allocated binds + ~,arg0bind + + // execute the body + funcbody(env) + + // extract result + ret0 = ~,ret0bind + env.FreeEnv() + return + }) + } + } +} + +:macro mfunc1retx1(arg0typ ast.Node) ast.Node { + return ~"{ + switch kret0 { + case r.Bool: {mfunc1ret1; ~,arg0typ; bool} + case r.Int: {mfunc1ret1; ~,arg0typ; int} + case r.Int8: {mfunc1ret1; ~,arg0typ; int8} + case r.Int16: {mfunc1ret1; ~,arg0typ; int16} + case r.Int32: {mfunc1ret1; ~,arg0typ; int32} + case r.Int64: {mfunc1ret1; ~,arg0typ; int64} + case r.Uint: {mfunc1ret1; ~,arg0typ; uint} + case r.Uint8: {mfunc1ret1; ~,arg0typ; uint8} + case r.Uint16: {mfunc1ret1; ~,arg0typ; uint16} + case r.Uint32: {mfunc1ret1; ~,arg0typ; uint32} + case r.Uint64: {mfunc1ret1; ~,arg0typ; uint64} + case r.Uintptr: {mfunc1ret1; ~,arg0typ; uintptr} + case r.Float32: {mfunc1ret1; ~,arg0typ; float32} + case r.Float64: {mfunc1ret1; ~,arg0typ; float64} + case r.Complex64: {mfunc1ret1; ~,arg0typ; complex64} + case r.Complex128:{mfunc1ret1; ~,arg0typ; complex128} + case r.String: {mfunc1ret1; ~,arg0typ; string} + } + } +} + +:macro mfuncx1retx1(dummy ast.Node) ast.Node { + return ~"{ + switch karg0 { + case r.Bool: {mfunc1retx1; bool} + case r.Int: {mfunc1retx1; int} + case r.Int8: {mfunc1retx1; int8} + case r.Int16: {mfunc1retx1; int16} + case r.Int32: {mfunc1retx1; int32} + case r.Int64: {mfunc1retx1; int64} + case r.Uint: {mfunc1retx1; uint} + case r.Uint8: {mfunc1retx1; uint8} + case r.Uint16: {mfunc1retx1; uint16} + case r.Uint32: {mfunc1retx1; uint32} + case r.Uint64: {mfunc1retx1; uint64} + case r.Uintptr: {mfunc1retx1; uintptr} + case r.Float32: {mfunc1retx1; float32} + case r.Float64: {mfunc1retx1; float64} + case r.Complex64: {mfunc1retx1; complex64} + case r.Complex128:{mfunc1retx1; complex128} + case r.String: {mfunc1retx1; string} + } + } +} + +func (c *Comp) func1ret1(t xr.Type, m *funcMaker) func(*Env) r.Value { + // do NOT keep a reference to funcMaker + nbinds := m.nbinds + nintbinds := m.nintbinds + funcbody := m.funcbody + + targ0 := t.In(0) + karg0 := targ0.Kind() + kret0 := t.Out(0).Kind() + + indexes := [2]int{ + m.parambinds[0].Desc.Index(), + m.resultbinds[0].Desc.Index(), + } + + // if IsOptimizedKind(karg0) && IsOptimizedKind(kret0) + mfuncx1retx1; nil + + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/func2ret0.go b/vendor/github.com/cosmos72/gomacro/fast/func2ret0.go new file mode 100644 index 0000000..6ce5d7d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/func2ret0.go @@ -0,0 +1,7701 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * func2ret0.go + * + * Created on Apr 16, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) func2ret0(t xr.Type, m *funcMaker) func(*Env) r.Value { + karg0 := t.In(0).Kind() + karg1 := t.In(1).Kind() + + if !IsOptimizedKind(karg0) || !IsOptimizedKind(karg1) { + return nil + } + + indexes := [2]int{ + m.parambinds[0].Desc.Index(), + m.parambinds[1].Desc.Index(), + } + nbinds := m.nbinds + nintbinds := m.nintbinds + funcbody := m.funcbody + { + argdecls := [2]func(*Env, r.Value){nil, nil} + for i, bind := range m.parambinds { + argdecls[i] = c.DeclBindRuntimeValue(bind) + if argdecls[i] == nil { + argdecls[i] = declBindRuntimeValueNop + } + + } + switch karg0 { + case r.Bool: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, + uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, + + uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, + + uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, + + uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, + + float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, + + float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, + + complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, + + complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(bool, + + string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 bool, + + arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Int: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, + uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, + + uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, + + uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, + + float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, + + float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, + + complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, + + complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int, + + string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int, + + arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Int8: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, + uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, + + uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, + + float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, + + float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, + + complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, + + complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int8, + + string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int8, + + arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Int16: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, + uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, + + float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, + + float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, + + complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, + + complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int16, + + string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int16, + + arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Int32: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, + float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, + + float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, + + complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, + + complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int32, + + string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int32, + + arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Int64: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, + float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, + + complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, + + complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(int64, + + string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 int64, + + arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Uint: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, + complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, + + complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint, + + string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint, + arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Uint8: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, + complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint8, + + string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint8, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Uint16: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint16, + string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint16, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Uint32: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint32, string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint32, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Uint64: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uint64, string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uint64, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + env.IntBinds[indexes[0]] = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + case r.Uintptr: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(uintptr, string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 uintptr, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + + case r.Float32: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float32, string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float32, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + + case r.Float64: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(float64, string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 float64, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + + case r.Complex64: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex64, string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex64, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[0]])) = arg0 + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + + case r.Complex128: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(complex128, string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 complex128, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg0, + ) + env.Binds[indexes[0]] = place + } + + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + + case r.String: + switch karg1 { + case r.Bool: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, bool) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 bool) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*bool)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, int) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 int) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int8: + + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, int8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 int8) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, int16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 int16) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, int32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 int32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Int64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, int64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 int64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*int64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, uint) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 uint) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uint)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint8: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, uint8) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 uint8) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uint8)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint16: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, uint16) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 uint16) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uint16)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, uint32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 uint32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uint32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uint64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, uint64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 uint64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + env.IntBinds[indexes[1]] = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Uintptr: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, uintptr) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 uintptr) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*uintptr)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float32: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, float32) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 float32) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*float32)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Float64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, float64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 float64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*float64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex64: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, complex64) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 complex64) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + + *(*complex64)(unsafe.Pointer(&env.IntBinds[indexes[1]])) = arg1 + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.Complex128: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, complex128) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 complex128) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + { + place := r.New(TypeOfComplex128).Elem() + place.SetComplex(arg1, + ) + env.Binds[indexes[1]] = place + } + + funcbody(env) + + env.FreeEnv() + }) + } + } + case r.String: + { + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(string, string) { + }) + } + } + return func(env *Env) r.Value { + + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 string, arg1 string) { + env := NewEnv4Func(env, nbinds, nintbinds) + { + place := r.New(TypeOfString).Elem() + place.SetString(arg0, + ) + env.Binds[indexes[0]] = place + } + { + place := r.New(TypeOfString).Elem() + place.SetString(arg1, + ) + env.Binds[indexes[1]] = place + } + funcbody(env) + + env.FreeEnv() + }) + } + } + } + + } + } + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/func2ret0.gomacro b/vendor/github.com/cosmos72/gomacro/fast/func2ret0.gomacro new file mode 100644 index 0000000..442c8e7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/func2ret0.gomacro @@ -0,0 +1,232 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * func2ret0.go + * + * Created on Apr 16, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + r "reflect" + "go/ast" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +// convert a well-known reflect.Type into one of the constants TypeOf* +:func maketypeident(t r.Type) *ast.Ident { + name := "TypeOf" + upcasefirstbyte(t.Name()) + return &ast.Ident{Name: name} +} + +:func fsetarg(typ, tident, name, index ast.Node) ast.Node { + var t r.Type = EvalType(typ) + var bind ast.Node + if t == nil { + bind = ~"{ + place := r.New(~,tident).Elem() + place.Set(r.ValueOf(~,name)) + env.Binds[~,index] = place + } + } else { + typeident := maketypeident(t) + switch t.Kind() { + case r.Complex128: + bind = ~"{ + place := r.New(~,typeident).Elem() + place.SetComplex(~,name) + env.Binds[~,index] = place + } + case r.String: + bind = ~"{ + place := r.New(~,typeident).Elem() + place.SetString(~,name) + env.Binds[~,index] = place + } + case r.Uint64: + bind = ~"{env.IntBinds[~,index] = ~,name} + default: + bind = ~"{*(*~,typ)(unsafe.Pointer(&env.IntBinds[~,index])) = ~,name} + } + } + return bind +} + + +// fully optimized function implementation +:macro mfunc2ret0(arg0typ, arg1typ ast.Node) ast.Node { + var t0 r.Type = EvalType(arg0typ) + var t1 r.Type = EvalType(arg1typ) + + if t0 != nil && t1 != nil { + arg0bind := fsetarg(arg0typ, ~'targ0, ~'arg0, ~'{indexes[0]}) + arg1bind := fsetarg(arg1typ, ~'targ1, ~'arg1, ~'{indexes[1]}) + return ~"{ + if funcbody == nil { + return func(env *Env) r.Value { + return r.ValueOf(func(~,arg0typ, ~,arg1typ) { + }) + } + } + return func(env *Env) r.Value { + // function is closed over the env used to DECLARE it + env.MarkUsedByClosure() + return r.ValueOf(func(arg0 ~,arg0typ, arg1 ~,arg1typ) { + env := NewEnv4Func(env, nbinds, nintbinds) + // copy arg0, arg1 into allocated binds + ~,arg0bind + ~,arg1bind + // execute the body + funcbody(env) + + env.FreeEnv() + }) + } + } + } + // not well-known types... use reflect.MakeFunc() + return ~"{ + rtype := t.ReflectType() + if funcbody == nil { + return func(env *Env) r.Value { + return r.MakeFunc(rtype, func([]r.Value) []r.Value { + return ZeroValues + }) + } + } else { + return func(env *Env) r.Value { + // function is closed over the env used to DECLARE it + env.MarkUsedByClosure() + return r.MakeFunc(rtype, func(args []r.Value) []r.Value { + env := NewEnv4Func(env, nbinds, nintbinds) + + // copy args into allocated binds + for i := range rtargs { + if idx := indexes[i]; idx != NoIndex { + place := r.New(rtargs[i]).Elem() + if arg := args[i]; arg != Nil && arg != None { + place.Set(arg.Convert(rtargs[i])) + } + env.Binds[idx] = place + } + } + // execute the body + funcbody(env) + + return ZeroValues + }) + } + } + } +} + + +:macro mfuncy2ret0(arg0typ ast.Node) ast.Node { + return ~"{ + switch karg1 { + case r.Bool: {mfunc2ret0; ~,arg0typ; bool} + case r.Int: {mfunc2ret0; ~,arg0typ; int} + case r.Int8: {mfunc2ret0; ~,arg0typ; int8} + case r.Int16: {mfunc2ret0; ~,arg0typ; int16} + case r.Int32: {mfunc2ret0; ~,arg0typ; int32} + case r.Int64: {mfunc2ret0; ~,arg0typ; int64} + case r.Uint: {mfunc2ret0; ~,arg0typ; uint} + case r.Uint8: {mfunc2ret0; ~,arg0typ; uint8} + case r.Uint16: {mfunc2ret0; ~,arg0typ; uint16} + case r.Uint32: {mfunc2ret0; ~,arg0typ; uint32} + case r.Uint64: {mfunc2ret0; ~,arg0typ; uint64} + case r.Uintptr: {mfunc2ret0; ~,arg0typ; uintptr} + case r.Float32: {mfunc2ret0; ~,arg0typ; float32} + case r.Float64: {mfunc2ret0; ~,arg0typ; float64} + case r.Complex64: {mfunc2ret0; ~,arg0typ; complex64} + case r.Complex128:{mfunc2ret0; ~,arg0typ; complex128} + case r.String: {mfunc2ret0; ~,arg0typ; string} + } + } +} + +:macro mfuncxy2ret0(dummy ast.Node) ast.Node { + return ~"{ + argdecls := [2]func(*Env, r.Value){nil, nil} + for i, bind := range m.parambinds { + argdecls[i] = c.DeclBindRuntimeValue(bind) + if argdecls[i] == nil { + argdecls[i] = declBindRuntimeValueNop + } + } + switch karg0 { + case r.Bool: {mfuncy2ret0; bool} + case r.Int: {mfuncy2ret0; int} + case r.Int8: {mfuncy2ret0; int8} + case r.Int16: {mfuncy2ret0; int16} + case r.Int32: {mfuncy2ret0; int32} + case r.Int64: {mfuncy2ret0; int64} + case r.Uint: {mfuncy2ret0; uint} + case r.Uint8: {mfuncy2ret0; uint8} + case r.Uint16: {mfuncy2ret0; uint16} + case r.Uint32: {mfuncy2ret0; uint32} + case r.Uint64: {mfuncy2ret0; uint64} + case r.Uintptr: {mfuncy2ret0; uintptr} + case r.Float32: {mfuncy2ret0; float32} + case r.Float64: {mfuncy2ret0; float64} + case r.Complex64: {mfuncy2ret0; complex64} + case r.Complex128:{mfuncy2ret0; complex128} + case r.String: {mfuncy2ret0; string} + } + } +} + + +func (c *Comp) func2ret0(t xr.Type, m *funcMaker) func(*Env) r.Value { + karg0 := t.In(0).Kind() + karg1 := t.In(1).Kind() + + if !IsOptimizedKind(karg0) || !IsOptimizedKind(karg1) { + return nil + } + indexes := [2]int{ + m.parambinds[0].Desc.Index(), + m.parambinds[1].Desc.Index(), + } + nbinds := m.nbinds + nintbinds := m.nintbinds + funcbody := m.funcbody + + mfuncxy2ret0; nil + + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/function.go b/vendor/github.com/cosmos72/gomacro/fast/function.go new file mode 100644 index 0000000..98967f2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/function.go @@ -0,0 +1,465 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * function.go + * + * Created on Apr 02, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +type funcMaker struct { + nbinds int + nintbinds int + parambinds []*Bind + resultbinds []*Bind + resultfuns []I + funcbody func(*Env) +} + +// DeclFunc compiles a function, macro or method declaration +// For closure declarations, use FuncLit() +func (c *Comp) FuncDecl(funcdecl *ast.FuncDecl) { + var ismacro bool + if funcdecl.Recv != nil { + switch n := len(funcdecl.Recv.List); n { + case 0: + ismacro = true + case 1: + c.methodDecl(funcdecl) + return + default: + c.Errorf("invalid function/method declaration: found %d receivers, expecting at most one: %v", n, funcdecl) + return + } + } + functype := funcdecl.Type + t, paramnames, resultnames := c.TypeFunction(functype) + + // declare the function name and type before compiling its body: allows recursive functions/macros + funcname := funcdecl.Name.Name + var funcbind *Bind + if ismacro { + // use a ConstBind, as builtins do + funcbind = c.AddBind(funcname, ConstBind, c.TypeOfMacro()) + } else { + funcbind = c.AddBind(funcname, FuncBind, t) + } + cf := NewComp(c, nil) + info, resultfuns := cf.funcBinds(functype, t, paramnames, resultnames) + cf.Func = info + + if body := funcdecl.Body; body != nil { + // in Go, function arguments/results and function body are in the same scope + for _, node := range body.List { + cf.Stmt(node) + } + } + + funcindex := funcbind.Desc.Index() + if funcname == "_" || (!ismacro && funcindex == NoIndex) { + // function/macro named "_". still compile it (to check for compile errors) but discard the compiled code + return + } + // do NOT keep a reference to compile environment! + funcbody := cf.Code.Exec() + + var stmt Stmt + if ismacro { + // a macro declaration is a statement: + // executing it stores the macro function into Comp.Binds[funcname].Value + f := cf.macroCreate(t, info, resultfuns, funcbody) + + addr := &funcbind.Value + argnum := t.NumIn() + stmt = func(env *Env) (Stmt, *Env) { + fun := f(env) + *addr = Macro{fun, argnum} + env.IP++ + return env.Code[env.IP], env + } + } else { + // a function declaration is a statement: + // executing it creates the function in the runtime environment + f := cf.funcCreate(t, info, resultfuns, funcbody) + + stmt = func(env *Env) (Stmt, *Env) { + fun := f(env) + // Debugf("setting env.Binds[%d] = %v <%v>", funcindex, fun.Interface(), fun.Type()) + env.Binds[funcindex] = fun + env.IP++ + return env.Code[env.IP], env + } + } + c.Code.Append(stmt, funcdecl.Pos()) +} + +func (c *Comp) methodAdd(funcdecl *ast.FuncDecl, t xr.Type) (methodindex int, methods *[]r.Value) { + name := funcdecl.Name.Name + trecv := t.In(0) + if trecv.Kind() == r.Ptr && !trecv.Named() { + // receiver is an unnamed pointer type. add the method to its element type + trecv = trecv.Elem() + } + + panicking := true + defer func() { + if panicking { + rec := recover() + c.Errorf("error adding method %s <%v> to type <%v>\n\t%v", name, t, trecv, rec) + } + }() + n1 := trecv.NumMethod() + methodindex = trecv.AddMethod(name, t) + n2 := trecv.NumMethod() + if n1 == n2 { + c.Warnf("redefined method: %s.%s", trecv.Name(), name) + } + methods = trecv.GetMethods() + panicking = false + return +} + +// methodDecl compiles a method declaration +func (c *Comp) methodDecl(funcdecl *ast.FuncDecl) { + n := len(funcdecl.Recv.List) + if n != 1 { + c.Errorf("invalid function/method declaration: expecting one receiver or nil, found %d receivers: func %v %s(/*...*/)", + n, funcdecl.Recv, funcdecl.Name) + return + } + recvdecl := funcdecl.Recv.List[0] + + functype := funcdecl.Type + t, paramnames, resultnames := c.TypeFunctionOrMethod(recvdecl, functype) + + // gtype := t.GoType().Underlying().(*types.Signature) + // c.Debugf("declaring method (%v).%s%s %s\n\treflect.Type: <%v>", gtype.Recv().Type(), funcdecl.Name.Name, gtype.Params(), gtype.Results(), t.ReflectType()) + + // declare the method name and type before compiling its body: allows recursive methods + methodindex, methods := c.methodAdd(funcdecl, t) + + cf := NewComp(c, nil) + info, resultfuns := cf.funcBinds(functype, t, paramnames, resultnames) + cf.Func = info + + body := funcdecl.Body + if body != nil && len(body.List) != 0 { + // in Go, function arguments/results and function body are in the same scope + cf.List(body.List) + } + // do NOT keep a reference to compile environment! + funcbody := cf.Code.Exec() + f := cf.funcCreate(t, info, resultfuns, funcbody) + + // a method declaration is a statement: + // executing it sets the method value in the receiver type + var stmt Stmt + if c.Options&base.OptDebugMethod != 0 { + trecv := t.In(0) + tname := trecv.Name() + if len(tname) == 0 && trecv.Kind() == r.Ptr { + tname = trecv.Elem().Name() + } + methodname := funcdecl.Name + stmt = func(env *Env) (Stmt, *Env) { + (*methods)[methodindex] = f(env) + env.ThreadGlobals.Debugf("implemented method %s.%s", tname, methodname) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + (*methods)[methodindex] = f(env) + env.IP++ + return env.Code[env.IP], env + } + } + c.Code.Append(stmt, funcdecl.Pos()) +} + +// FuncLit compiles a function literal, i.e. a closure. +// For functions or methods declarations, use FuncDecl() +func (c *Comp) FuncLit(funclit *ast.FuncLit) *Expr { + functype := funclit.Type + t, paramnames, resultnames := c.TypeFunction(functype) + + cf := NewComp(c, nil) + info, resultfuns := cf.funcBinds(functype, t, paramnames, resultnames) + cf.Func = info + + body := funclit.Body + if body != nil && len(body.List) != 0 { + // in Go, function arguments/results and function body are in the same scope + cf.List(body.List) + } + // do NOT keep a reference to compile environment! + funcbody := cf.Code.Exec() + + f := cf.funcCreate(t, info, resultfuns, funcbody) + + // a function literal is an expression: + // executing it returns the function + return exprX1(t, f) +} + +// prepare the function parameter binds, result binds and FuncInfo +func (c *Comp) funcBinds(functype *ast.FuncType, t xr.Type, paramnames, resultnames []string) (info *FuncInfo, resultfuns []I) { + + parambinds := c.funcParamBinds(functype, t, paramnames) + + resultbinds, resultfuns := c.funcResultBinds(functype, t, resultnames) + namedresults := true + for _, resultname := range resultnames { + if len(resultname) == 0 { + namedresults = false + } + } + return &FuncInfo{ + Params: parambinds, + Results: resultbinds, + NamedResults: namedresults, + }, resultfuns +} + +// prepare the function parameter binds +func (c *Comp) funcParamBinds(functype *ast.FuncType, t xr.Type, names []string) []*Bind { + nin := t.NumIn() + binds := make([]*Bind, nin) + var namedparams, unnamedparams bool + ismethod := t.IsMethod() + for i := 0; i < nin; i++ { + // names[i] == "" means that argument is unnamed, and thus ignored inside the function. + // change to "_" so that AddBind will not allocate a bind for it - correct optimization... + // just remember to check for such case when creating the function + name := names[i] + if !ismethod || i != 0 { + // method receiver can be named or unnamed, independently from other input parameters + if name == "" { + name = "_" + unnamedparams = true + } else { + namedparams = true + } + } + if namedparams && unnamedparams { + c.Errorf("cannot mix named and unnamed parameters in function declaration: %v", functype) + } + bind := c.AddBind(name, VarBind, t.In(i)) + binds[i] = bind + } + return binds +} + +// prepare the function result binds +func (c *Comp) funcResultBinds(functype *ast.FuncType, t xr.Type, names []string) (binds []*Bind, funs []I) { + n := t.NumOut() + binds = make([]*Bind, n) + funs = make([]I, n) + var namedresults, unnamedresults bool + for i, n := 0, t.NumOut(); i < n; i++ { + // names[i] == "" means that result is unnamed. + // we must still allocate a bind for it. + name := names[i] + if name == "" { + unnamedresults = true + } else { + namedresults = true + } + if namedresults && unnamedresults { + c.Errorf("cannot mix named and unnamed results in function declaration: %v", functype) + } + c.Pos = functype.Pos() + bind := c.DeclVar0(name, t.Out(i), nil) + binds[i] = bind + // compile the extraction of results from runtime env + sym := bind.AsSymbol(0) + funs[i] = c.Symbol(sym).WithFun() + } + return +} + +func (c *Comp) funcMaker(info *FuncInfo, resultfuns []I, funcbody func(*Env)) *funcMaker { + return &funcMaker{ + nbinds: c.BindNum, + nintbinds: c.IntBindNum, + parambinds: info.Params, + resultbinds: info.Results, + resultfuns: resultfuns, + funcbody: funcbody, + } +} + +// actually create the function +func (c *Comp) funcCreate(t xr.Type, info *FuncInfo, resultfuns []I, funcbody func(*Env)) func(*Env) r.Value { + m := c.funcMaker(info, resultfuns, funcbody) + + rtype := t.ReflectType() // has receiver as first parameter + nin := rtype.NumIn() + nout := rtype.NumOut() + + // do not create optimized functions if arguments or results are named types + optimize := true + for i := 0; optimize && i < nin; i++ { + rt := rtype.In(i) + k := rt.Kind() + optimize = base.IsOptimizedKind(k) && rt == c.Universe.BasicTypes[k].ReflectType() + } + for i := 0; optimize && i < nout; i++ { + rt := rtype.Out(i) + k := rt.Kind() + optimize = base.IsOptimizedKind(k) && rt == c.Universe.BasicTypes[k].ReflectType() + } + + var fun func(*Env) r.Value + if optimize { + switch nin { + case 0: + switch nout { + case 0: + fun = c.func0ret0(t, m) + case 1: + fun = c.func0ret1(t, m) + } + case 1: + switch nout { + case 0: + fun = c.func1ret0(t, m) + case 1: + fun = c.func1ret1(t, m) + } + case 2: + switch nout { + case 0: + fun = c.func2ret0(t, m) + } + } + } + if fun == nil { + fun = c.funcGeneric(t, m) + } + return fun +} + +// fallback: create a non-optimized function +func (c *Comp) funcGeneric(t xr.Type, m *funcMaker) func(*Env) r.Value { + + paramdecls := make([]func(*Env, r.Value), len(m.parambinds)) + for i, bind := range m.parambinds { + if bind.Desc.Index() != NoIndex { + paramdecls[i] = c.DeclBindRuntimeValue(bind) + } + } + resultexprs := make([]func(*Env) r.Value, len(m.resultfuns)) + for i, resultfun := range m.resultfuns { + resultexprs[i] = funAsX1(resultfun, m.resultbinds[i].Type) + } + + // do NOT keep a reference to funcMaker + nbinds := m.nbinds + nintbinds := m.nintbinds + funcbody := m.funcbody + rtype := t.ReflectType() + + return func(env *Env) r.Value { + // function is closed over the env used to DECLARE it + env.MarkUsedByClosure() + return r.MakeFunc(rtype, func(args []r.Value) []r.Value { + env := NewEnv4Func(env, nbinds, nintbinds) + + if funcbody != nil { + // copy runtime arguments into allocated binds + for i, decl := range paramdecls { + if decl != nil { + // decl == nil means the argument is ignored inside the function + decl(env, args[i]) + } + } + // execute the body + funcbody(env) + } + // read results from allocated binds and return them + rets := make([]r.Value, len(resultexprs)) + for i, expr := range resultexprs { + rets[i] = expr(env) + } + env.FreeEnv() + return rets + }) + } +} + +// create a macro +func (c *Comp) macroCreate(t xr.Type, info *FuncInfo, resultfuns []I, funcbody func(*Env)) func(*Env) func(args []r.Value) []r.Value { + m := c.funcMaker(info, resultfuns, funcbody) + + paramdecls := make([]func(*Env, r.Value), len(m.parambinds)) + for i, bind := range m.parambinds { + if bind.Desc.Index() != NoIndex { + paramdecls[i] = c.DeclBindRuntimeValue(bind) + } + } + resultexprs := make([]func(*Env) r.Value, len(m.resultfuns)) + for i, resultfun := range m.resultfuns { + resultexprs[i] = funAsX1(resultfun, m.resultbinds[i].Type) + } + + // do NOT keep a reference to funcMaker + nbinds := m.nbinds + nintbinds := m.nintbinds + + return func(env *Env) func(args []r.Value) []r.Value { + // macro is closed over the env used to DECLARE it + env.MarkUsedByClosure() + return func(args []r.Value) []r.Value { + env := NewEnv4Func(env, nbinds, nintbinds) + + if funcbody != nil { + // copy runtime arguments into allocated binds + for i, decl := range paramdecls { + if decl != nil { + // decl == nil means the argument is ignored inside the function + decl(env, args[i]) + } + } + // execute the body + funcbody(env) + } + // read results from allocated binds and return them + rets := make([]r.Value, len(resultexprs)) + for i, expr := range resultexprs { + rets[i] = expr(env) + } + env.FreeEnv() + return rets + } + } +} + +func declBindRuntimeValueNop(*Env, r.Value) { +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/global.go b/vendor/github.com/cosmos72/gomacro/fast/global.go new file mode 100644 index 0000000..fb24641 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/global.go @@ -0,0 +1,572 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * global.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "fmt" + "go/ast" + "go/constant" + "go/token" + r "reflect" + "sort" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// opaqueTypeOf returns an xr.Type with the same name and package as r.TypeOf(val) but without fields or methods +func (g *CompThreadGlobals) opaqueType(rtype r.Type) xr.Type { + if k := rtype.Kind(); k != r.Struct { + g.Errorf("internal error: unimplemented opaqueTypeOf for kind=%v, expecting kind=Struct", k) + } + v := g.Universe + t := v.NamedOf(rtype.Name(), "fast") + t.SetUnderlying(v.TypeOf(struct{}{})) + t.UnsafeForceReflectType(rtype) + v.ReflectTypes[rtype] = t // also cache Type in g.Universe.ReflectTypes + // g.Debugf("initialized opaque type %v <%v> <%v>", t.Kind(), t.GoType(), t.ReflectType()) + return t +} + +// ================================= Untyped ================================= + +// UntypedLit represents an untyped literal value, i.e. an untyped constant +type UntypedLit struct { + Kind r.Kind // default type. matches Obj.Kind() except for rune literals, where Kind == reflect.Int32 + Obj constant.Value + Universe *xr.Universe +} + +var ( + untypedZero = UntypedLit{Kind: r.Int, Obj: constant.MakeInt64(0)} + untypedOne = UntypedLit{Kind: r.Int, Obj: constant.MakeInt64(1)} +) + +// pretty-print untyped constants +func (untyp UntypedLit) String() string { + obj := untyp.Obj + var strkind, strobj interface{} = untyp.Kind, nil + if untyp.Kind == r.Int32 { + strkind = "rune" + if obj.Kind() == constant.Int { + if i, exact := constant.Int64Val(obj); exact { + if i >= 0 && i <= 0x10FFFF { + strobj = fmt.Sprintf("%q", i) + } + } + } + } + if strobj == nil { + strobj = obj.ExactString() + } + return fmt.Sprintf("{%v %v}", strkind, strobj) +} + +// ================================= Lit ================================= + +// Lit represents a literal value, i.e. a typed or untyped constant +type Lit struct { + + // Type is nil only for literal nils. + // for all other literals, it is reflect.TypeOf(Lit.Value) + // + // when Lit is embedded in other structs that represent non-constant expressions, + // Type is the first type returned by the expression (nil if returns no values) + Type xr.Type + + // Value is one of: + // nil, bool, int, int8, int16, int32, int64, + // uint, uint8, uint16, uint32, uint64, uintptr, + // float32, float64, complex64, complex128, string, + // UntypedLit + // + // when Lit is embedded in other structs that represent non-constant expressions, + // Value is usually nil + Value I +} + +// Untyped returns true if Lit is an untyped constant +func (lit *Lit) Untyped() bool { + _, ok := lit.Value.(UntypedLit) + return ok +} + +// UntypedKind returns the reflect.Kind of untyped constants, +// i.e. their "default type" +func (lit *Lit) UntypedKind() r.Kind { + if untyp, ok := lit.Value.(UntypedLit); ok { + return untyp.Kind + } else { + return r.Invalid + } +} + +func (lit *Lit) ReflectValue() r.Value { + if lit.Untyped() { + // do not modify original Lit type + tmp := *lit + lit = &tmp + lit.ConstTo(lit.DefaultType()) + } + v := r.ValueOf(lit.Value) + if lit.Type != nil { + rtype := lit.Type.ReflectType() + if !v.IsValid() { + v = r.Zero(rtype) + } else if v.Type() != rtype { + v = v.Convert(rtype) + } + } + return v +} + +func (lit Lit) String() string { + switch val := lit.Value.(type) { + case string, nil: + return fmt.Sprintf("%#v", val) + default: + return fmt.Sprintf("%v", val) + } +} + +// ================================= Expr ================================= + +// Expr represents an expression in the "compiler" +type Expr struct { + Lit + Types []xr.Type // in case the expression produces multiple values. if nil, use Lit.Type. + Fun I // function that evaluates the expression at runtime. + Sym *Symbol // in case the expression is a symbol + IsNil bool +} + +func (e *Expr) Const() bool { + return e.Value != nil || e.IsNil +} + +// NumOut returns the number of values that an expression will produce when evaluated +func (e *Expr) NumOut() int { + if e.Types == nil { + return 1 + } + return len(e.Types) +} + +// Out returns the i-th type that an expression will produce when evaluated +func (e *Expr) Out(i int) xr.Type { + if i == 0 && e.Types == nil { + return e.Type + } + return e.Types[i] +} + +// Outs returns the types that an expression will produce when evaluated +func (e *Expr) Outs() []xr.Type { + if e.Types == nil { + return []xr.Type{e.Type} + } + return e.Types +} + +func (e *Expr) String() string { + if e == nil { + return "nil" + } + var str string + if e.Const() { + str = fmt.Sprintf("Expr{Type: %v, Value: %v}", e.Type, e.Lit.String()) + } else if e.NumOut() == 1 { + str = fmt.Sprintf("Expr{Type: %v, Fun: %#v}", e.Type, e.Fun) + } else { + str = fmt.Sprintf("Expr{Types: %v, Fun: %#v}", e.Types, e.Fun) + } + return str +} + +// ================================= Stmt ================================= + +// Stmt represents a statement in the fast interpreter +type Stmt func(*Env) (Stmt, *Env) + +// ================================= Builtin ================================= + +// Builtin represents a builtin function in the fast interpreter +type Builtin struct { + // interpreted code should not access "compile": not exported. + // compile usually needs to modify Symbol: pass it by value. + Compile func(c *Comp, sym Symbol, node *ast.CallExpr) *Call + ArgMin uint16 + ArgMax uint16 +} + +// ================================= Function ================================= + +// Function represents a function that accesses *CompEnv in the fast interpreter +type Function struct { + Fun interface{} + Type xr.Type +} + +// ================================= Macro ================================= + +// Macro represents a macro in the fast interpreter +type Macro struct { + closure func(args []r.Value) (results []r.Value) + argNum int +} + +// ================================= BindClass ================================= + +type BindClass int + +const ( + ConstBind = BindClass(iota) + FuncBind + VarBind + IntBind +) + +func (class BindClass) String() string { + switch class { + case ConstBind: + return "const" + case FuncBind: + return "func" + default: + return "var" + } +} + +// ================================== BindDescriptor ================================= + +// the zero value of BindDescriptor is a valid descriptor for all constants +type BindDescriptor BindClass + +const ( + bindClassMask = BindClass(0x3) + bindIndexShift = 2 + + NoIndex = int(0) // index of constants, functions and variables named "_" + ConstBindDescriptor = BindDescriptor(ConstBind) // bind descriptor for all constants +) + +func MakeBindDescriptor(class BindClass, index int) BindDescriptor { + class &= bindClassMask + return BindDescriptor(index<> bindIndexShift) + // debugf("BindDescriptor=%v, class=%v, index=%v", desc, desc.Class(), index) + return index +} + +func (desc BindDescriptor) Settable() bool { + class := desc.Class() + return class == IntBind || class == VarBind +} + +func (desc BindDescriptor) String() string { + return fmt.Sprintf("%s index=%d", desc.Class(), desc.Index()) +} + +// ================================== Bind ================================= + +// Bind represents a constant, variable, function or builtin in the "compiler" +type Bind struct { + Lit + Desc BindDescriptor + Name string +} + +func (bind *Bind) String() string { + return fmt.Sprintf("{%s name=%q value=%v type=<%v>}", bind.Desc, bind.Name, bind.Lit.Value, bind.Lit.Type) +} + +func (bind *Bind) Const() bool { + return bind.Desc.Class() == ConstBind +} + +func (bind *Bind) ConstValue() r.Value { + if !bind.Const() { + return Nil + } + return bind.Lit.ReflectValue() +} + +func (c *Comp) BindUntyped(value UntypedLit) *Bind { + value.Universe = c.Universe + return &Bind{Lit: Lit{Type: c.TypeOfUntypedLit(), Value: value}, Desc: ConstBindDescriptor} +} + +func (bind *Bind) AsVar(upn int, opt PlaceOption) *Var { + class := bind.Desc.Class() + switch class { + case VarBind, IntBind: + return &Var{Upn: upn, Desc: bind.Desc, Type: bind.Type, Name: bind.Name} + default: + Errorf("%s a %s: %s <%v>", opt, class, bind.Name, bind.Type) + return nil + } +} + +func (bind *Bind) AsSymbol(upn int) *Symbol { + return &Symbol{Bind: *bind, Upn: upn} +} + +type NamedType struct { + Name, Path string +} + +// ================================== Symbol, Var, Place ================================= + +// Symbol represents a resolved constant, function, variable or builtin +type Symbol struct { + Bind + Upn int +} + +func (sym *Symbol) AsVar(opt PlaceOption) *Var { + return sym.Bind.AsVar(sym.Upn, opt) +} + +// Var represents a settable variable +type Var struct { + // when Var is embedded in other structs that represent non-identifiers, + // Upn and Desc are usually the zero values + Upn int + Desc BindDescriptor + Type xr.Type + Name string +} + +func (va *Var) AsSymbol() *Symbol { + return &Symbol{ + Bind: Bind{ + Lit: Lit{Type: va.Type}, + Desc: va.Desc, + Name: va.Name, + }, + Upn: va.Upn, + } +} + +func (va *Var) AsPlace() *Place { + return &Place{Var: *va} +} + +// Place represents a settable place or, equivalently, its address +type Place struct { + Var + // Fun is nil for variables. + // For non-variables, returns a settable and addressable reflect.Value: the place itself. + // For map[key], Fun returns the map itself (which may NOT be settable). + // Call Fun only once, it may have side effects! + Fun func(*Env) r.Value + // Fddr is nil for variables. + // For non-variables, it will return the address of the place. + // For map[key], it is nil since map[key] is not addressable + // Call Addr only once, it may have side effects! + Addr func(*Env) r.Value + // used only for map[key], returns key. call it only once, it may have side effects! + MapKey func(*Env) r.Value + MapType xr.Type +} + +func (place *Place) IsVar() bool { + return place.Fun == nil +} + +type PlaceOption bool // the reason why we want a place: either to write into it, or to take its address + +const ( + PlaceSettable PlaceOption = false + PlaceAddress PlaceOption = true +) + +func (opt PlaceOption) String() string { + if opt == PlaceAddress { + return "cannot take the address of" + } else { + return "cannot assign to" + } +} + +// ================================= Import ================================= + +// Import represents an imported package +type Import struct { + // no need to split compile-time bind descriptors map from runtime values slice, + // because an import is a singleton - cannot be "instantiated" multiple times. + // Instead function or block activation record (*Env) can: + // think about goroutines, recursive functions or even loops. + Binds map[string]r.Value + BindTypes map[string]xr.Type + Types map[string]xr.Type + Name, Path string +} + +// ================================== Comp, Env ================================= + +type CompileOptions int + +const ( + CompileKeepUntyped CompileOptions = 1 << iota // if set, Compile() on expressions will keep all untyped constants as such (in expressions where Go compiler would compute an untyped constant too) + CompileDefaults CompileOptions = 0 +) + +type Code struct { + List []Stmt + DebugPos []token.Pos // for debugging interpreted code: position of each statement + WithDefers bool // true if code contains some defers +} + +type LoopInfo struct { + Break *int + Continue *int + Labels map[string]*int + ThisLabels []string // sorted. for labeled "switch" and "for" +} + +func (l *LoopInfo) HasLabel(label string) bool { + i := sort.SearchStrings(l.ThisLabels, label) + return i >= 0 && i < len(l.ThisLabels) && l.ThisLabels[i] == label +} + +type FuncInfo struct { + Params []*Bind + Results []*Bind + NamedResults bool +} + +const ( + PoolCapacity = 32 +) + +// ThreadGlobals contains per-goroutine interpreter runtime bookeeping information +type ThreadGlobals struct { + FileEnv *Env + TopEnv *Env + Interrupt Stmt + Signal Signal // set by interrupts: Return, Defer... + PoolSize int + Pool [PoolCapacity]*Env + InstallDefer func() // defer function to be installed + Panic interface{} // current panic. needed for recover() + PanicFun *Env // the currently panicking function + DeferOfFun *Env // function whose defer are running + StartDefer bool // true if next executed function body is a defer + IsDefer bool // true if function body being executed is a defer + *Globals +} + +// CompGlobals contains per-goroutine interpreter compile bookeeping information +type CompThreadGlobals struct { + Universe *xr.Universe + interf2proxy map[r.Type]r.Type // interface -> proxy + proxy2interf map[r.Type]xr.Type // proxy -> interface + *Globals +} + +// Comp is a tree-of-closures builder: it transforms ast.Nodes into closures +// for faster execution. Consider it a poor man's compiler (hence the name) +type Comp struct { + Binds map[string]*Bind + BindNum int // len(Binds) == BindNum + IntBindNum + # of constants + IntBindNum int + // UpCost is the number of *Env.Outer hops to perform at runtime to reach the *Env corresponding to *Comp.Outer + // usually equals one. will be zero if this *Comp defines no local variables/functions. + UpCost int + Depth int + Types map[string]xr.Type + Code Code // "compiled" code + Loop *LoopInfo // != nil when compiling a for or switch + Func *FuncInfo // != nil when compiling a function + Outer *Comp + Name string // set by "package" directive + Path string + CompileOptions CompileOptions + *CompThreadGlobals +} + +const ( + // conventional values + AnyDepth = -1 + FileDepth = -2 + TopDepth = -3 +) + +type Signal int + +const ( + SigNone Signal = iota + SigReturn + SigDefer // request to install a defer function +) + +// Env is the interpreter's runtime environment +type Env struct { + Binds []r.Value + IntBinds []uint64 + Outer *Env + IP int + Code []Stmt + DebugPos []token.Pos // for debugging interpreted code: position of each statement + ThreadGlobals *ThreadGlobals + UsedByClosure bool // a bitfield would introduce more races among goroutines + AddressTaken bool // true if &Env.IntBinds[index] was executed... then we cannot reuse IntBinds +} + +type ( + I interface{} + /* + XBool func(*Env) bool + XInt func(*Env) int + XInt8 func(*Env) int8 + XInt16 func(*Env) int16 + XInt32 func(*Env) int32 + XInt64 func(*Env) int64 + XUint func(*Env) uint + XUint8 func(*Env) uint8 + XUint16 func(*Env) uint16 + XUint32 func(*Env) uint32 + XUint64 func(*Env) uint64 + XUintptr func(*Env) uintptr + XFloat32 func(*Env) float32 + XFloat64 func(*Env) float64 + XComplex64 func(*Env) complex64 + XComplex128 func(*Env) complex128 + XString func(*Env) string + XV func(*Env) (r.Value, []r.Value) + */ +) diff --git a/vendor/github.com/cosmos72/gomacro/fast/identifier.go b/vendor/github.com/cosmos72/gomacro/fast/identifier.go new file mode 100644 index 0000000..0424418 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/identifier.go @@ -0,0 +1,504 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * identifier.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" +) + +func (c *Comp) Resolve(name string) *Symbol { + sym := c.TryResolve(name) + if sym == nil { + c.Errorf("undefined identifier: %v", name) + } + return sym +} + +func (c *Comp) TryResolve(name string) *Symbol { + upn := 0 + for ; c != nil; c = c.Outer { + if bind, ok := c.Binds[name]; ok { + // c.Debugf("TryResolve: %s is upn=%d %v", name, upn, bind) + return bind.AsSymbol(upn) + } + upn += c.UpCost // c.UpCost is zero if *Comp has no local variables/functions so it will NOT have a corresponding *Env at runtime + } + return nil +} + +// Ident compiles a read operation on a constant, variable or function +func (c *Comp) Ident(name string) *Expr { + return c.Symbol(c.Resolve(name)) +} + +// IdentPlace compiles an assignment to a variable, or taking the address of a variable +func (c *Comp) IdentPlace(name string, opt PlaceOption) *Place { + if name == "_" { + if opt == PlaceAddress { + c.Errorf("%s _", opt) + return nil + } + // assignment to _ is allowed: it does nothing + bind := c.AddBind(name, VarBind, c.TypeOfInterface()) + return &Place{Var: *bind.AsVar(0, PlaceSettable)} + } + sym := c.Resolve(name) + return &Place{Var: *sym.AsVar(opt)} +} + +// Symbol compiles a read operation on a constant, variable or function +func (c *Comp) Symbol(sym *Symbol) *Expr { + switch sym.Desc.Class() { + case ConstBind: + return exprLit(sym.Lit, sym) + case VarBind, FuncBind: + return c.symbol(sym) + case IntBind: + return c.intSymbol(sym) + default: + c.Errorf("unknown symbol class %s", sym.Desc.Class()) + } + return nil +} + +func (c *Comp) symbol(sym *Symbol) *Expr { + idx := sym.Desc.Index() + upn := sym.Upn + var fun I + switch sym.Type.Kind() { + case r.Complex128: + switch upn { + case 0: + fun = func(env *Env) complex128 { + return env.Binds[idx].Complex() + } + case 1: + fun = func(env *Env) complex128 { + return env.Outer.Binds[idx].Complex() + } + case 2: + fun = func(env *Env) complex128 { + return env.Outer.Outer.Binds[idx].Complex() + } + case c.Depth - 1: + fun = func(env *Env) complex128 { + return env.ThreadGlobals.FileEnv.Binds[idx].Complex() + } + case c.Depth: // TopEnv should not contain variables or functions... but no harm + fun = func(env *Env) complex128 { + return env.ThreadGlobals.TopEnv.Binds[idx].Complex() + } + default: + fun = func(env *Env) complex128 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Outer.Outer.Outer.Binds[idx].Complex() + } + } + case r.String: + switch upn { + case 0: + fun = func(env *Env) string { + return env.Binds[idx].String() + } + case 1: + fun = func(env *Env) string { + return env.Outer.Binds[idx].String() + } + case 2: + fun = func(env *Env) string { + return env.Outer.Outer.Binds[idx].String() + } + case c.Depth - 1: + fun = func(env *Env) string { + return env.ThreadGlobals.FileEnv.Binds[idx].String() + } + case c.Depth: // TopEnv should not contain variables or functions... but no harm + fun = func(env *Env) string { + return env.ThreadGlobals.TopEnv.Binds[idx].String() + } + default: + fun = func(env *Env) string { + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Outer.Outer.Outer.Binds[idx].String() + } + } + default: + switch upn { + case 0: + fun = func(env *Env) r.Value { + return env.Binds[idx] + } + case 1: + fun = func(env *Env) r.Value { + return env.Outer.Binds[idx] + } + case 2: + fun = func(env *Env) r.Value { + return env.Outer.Outer.Binds[idx] + } + case c.Depth - 1: + fun = func(env *Env) r.Value { + return env.ThreadGlobals.FileEnv.Binds[idx] + } + case c.Depth: // TopEnv should not contain variables or functions... but no harm + fun = func(env *Env) r.Value { + return env.ThreadGlobals.TopEnv.Binds[idx] + } + default: + fun = func(env *Env) r.Value { + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Outer.Outer.Outer.Binds[idx] + } + } + } + return &Expr{Lit: Lit{Type: sym.Type}, Fun: fun, Sym: sym} +} + +func (c *Comp) intSymbol(sym *Symbol) *Expr { + k := sym.Type.Kind() + idx := sym.Desc.Index() + upn := sym.Upn + var fun I + switch upn { + case 0: + switch k { + case r.Bool: + fun = func(env *Env) bool { + return *(*bool)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Int: + fun = func(env *Env) int { + return *(*int)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Int8: + fun = func(env *Env) int8 { + return *(*int8)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Int16: + fun = func(env *Env) int16 { + return *(*int16)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Int32: + fun = func(env *Env) int32 { + return *(*int32)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Int64: + fun = func(env *Env) int64 { + return *(*int64)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Uint: + fun = func(env *Env) uint { + return *(*uint)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return *(*uint8)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return *(*uint16)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return *(*uint32)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return env.IntBinds[idx] + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return *(*uintptr)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Float32: + fun = func(env *Env) float32 { + return *(*float32)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Float64: + fun = func(env *Env) float64 { + return *(*float64)(unsafe.Pointer(&env.IntBinds[idx])) + } + case r.Complex64: + fun = func(env *Env) complex64 { + return *(*complex64)(unsafe.Pointer(&env.IntBinds[idx])) + } + default: + c.Errorf("unsupported symbol type, cannot use for optimized read: %s %s <%v>", sym.Desc.Class(), sym.Name, sym.Type) + return nil + } + case 1: + switch k { + case r.Bool: + fun = func(env *Env) bool { + return *(*bool)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Int: + fun = func(env *Env) int { + return *(*int)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Int8: + fun = func(env *Env) int8 { + return *(*int8)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Int16: + fun = func(env *Env) int16 { + return *(*int16)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Int32: + fun = func(env *Env) int32 { + return *(*int32)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Int64: + fun = func(env *Env) int64 { + return *(*int64)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Uint: + fun = func(env *Env) uint { + return *(*uint)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return *(*uint8)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return *(*uint16)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return *(*uint32)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return env.Outer.IntBinds[idx] + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return *(*uintptr)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Float32: + fun = func(env *Env) float32 { + return *(*float32)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Float64: + fun = func(env *Env) float64 { + return *(*float64)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + case r.Complex64: + fun = func(env *Env) complex64 { + return *(*complex64)(unsafe.Pointer(&env.Outer.IntBinds[idx])) + } + default: + c.Errorf("unsupported variable type, cannot use for optimized read: %s <%v>", sym.Name, sym.Type) + return nil + } + case 2: + switch k { + case r.Bool: + fun = func(env *Env) bool { + return *(*bool)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int: + fun = func(env *Env) int { + return *(*int)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int8: + fun = func(env *Env) int8 { + return *(*int8)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int16: + fun = func(env *Env) int16 { + return *(*int16)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int32: + fun = func(env *Env) int32 { + return *(*int32)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int64: + fun = func(env *Env) int64 { + return *(*int64)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint: + fun = func(env *Env) uint { + return *(*uint)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return *(*uint8)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return *(*uint16)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return *(*uint32)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return env.Outer.Outer.IntBinds[idx] + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return *(*uintptr)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Float32: + fun = func(env *Env) float32 { + return *(*float32)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Float64: + fun = func(env *Env) float64 { + return *(*float64)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Complex64: + fun = func(env *Env) complex64 { + return *(*complex64)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + default: + c.Errorf("unsupported variable type, cannot use for optimized read: %s <%v>", sym.Name, sym.Type) + return nil + } + default: + switch k { + case r.Bool: + fun = func(env *Env) bool { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*bool)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int: + fun = func(env *Env) int { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*int)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int8: + fun = func(env *Env) int8 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*int8)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int16: + fun = func(env *Env) int16 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*int16)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int32: + fun = func(env *Env) int32 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*int32)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Int64: + fun = func(env *Env) int64 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*int64)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint: + fun = func(env *Env) uint { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*uint)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint8: + fun = func(env *Env) uint8 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*uint8)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint16: + fun = func(env *Env) uint16 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*uint16)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint32: + fun = func(env *Env) uint32 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*uint32)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Uint64: + fun = func(env *Env) uint64 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Outer.Outer.IntBinds[idx] + } + case r.Uintptr: + fun = func(env *Env) uintptr { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*uintptr)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Float32: + fun = func(env *Env) float32 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*float32)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Float64: + fun = func(env *Env) float64 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*float64)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + case r.Complex64: + fun = func(env *Env) complex64 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return *(*complex64)(unsafe.Pointer(&env.Outer.Outer.IntBinds[idx])) + } + default: + c.Errorf("unsupported variable type, cannot use for optimized read: %s <%v>", sym.Name, sym.Type) + return nil + } + } + return &Expr{Lit: Lit{Type: sym.Type}, Fun: fun, Sym: sym} +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/import.go b/vendor/github.com/cosmos72/gomacro/fast/import.go new file mode 100644 index 0000000..28a8ac7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/import.go @@ -0,0 +1,252 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * import.go + * + * Created on Apr 02, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/types" + r "reflect" + "strconv" + "strings" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// Import compiles an import statement +func (c *Comp) Import(node ast.Spec) { + switch node := node.(type) { + case *ast.ImportSpec: + str := node.Path.Value + path, err := strconv.Unquote(str) + if err != nil { + c.Errorf("error unescaping import path %q: %v", str, err) + } + path = c.sanitizeImportPath(path) + var name string + if node.Name != nil { + name = node.Name.Name + } else { + name = path[1+strings.LastIndexByte(path, '/'):] + } + // yes, we support local imports + // i.e. a function or block can import packages + c.ImportPackage(name, path) + default: + c.Errorf("unimplemented import: %v", node) + } +} + +func (g *CompThreadGlobals) sanitizeImportPath(path string) string { + path = strings.Replace(path, "\\", "/", -1) + l := len(path) + if path == ".." || l >= 3 && (path[:3] == "../" || path[l-3:] == "/..") || strings.Contains(path, "/../") { + g.Errorf("invalid import %q: contains \"..\"", path) + } + if path == "." || l >= 2 && (path[:2] == "./" || path[l-2:] == "/.") || strings.Contains(path, "/./") { + g.Errorf("invalid import %q: contains \".\"", path) + } + return path +} + +// Import imports a package. Usually invoked as Comp.FileComp().ImportPackage(name, path) +// because imports are usually top-level statements in a source file. +// But we also support local imports, i.e. import statements inside a function or block. +func (c *Comp) ImportPackage(name, path string) *Import { + g := c.CompThreadGlobals + pkgref := g.ImportPackage(name, path) + if pkgref == nil { + return nil + } + binds, bindtypes := g.parseImportBinds(pkgref.Binds, pkgref.Untypeds) + + imp := Import{ + Binds: binds, + BindTypes: bindtypes, + Types: g.parseImportTypes(pkgref.Types, pkgref.Wrappers), + Name: name, + Path: path, + } + + g.loadProxies(pkgref.Proxies, imp.Types) + + c.declImport0(name, imp) + return &imp +} + +// declImport0 compiles an import declaration. +// Note: does not loads proxies, use ImportPackage for that +func (c *Comp) declImport0(name string, imp Import) { + // treat imported package as a constant, + // because to compile code we need the declarations it contains: + // importing them at runtime would be too late. + t := c.TypeOfImport() + bind := c.AddBind(name, ConstBind, t) + bind.Value = imp // cfile.Binds[] is a map[string]*Bind => changes to *Bind propagate to the map +} + +func (g *CompThreadGlobals) parseImportBinds(binds map[string]r.Value, untypeds map[string]string) (map[string]r.Value, map[string]xr.Type) { + retbinds := make(map[string]r.Value) + rettypes := make(map[string]xr.Type) + for name, bind := range binds { + if untyped, ok := untypeds[name]; ok { + value, typ, ok := g.parseImportUntyped(untyped) + if ok { + retbinds[name] = value + rettypes[name] = typ + continue + } + } + retbinds[name] = bind + rettypes[name] = g.Universe.FromReflectType(bind.Type()) + } + return retbinds, rettypes +} + +func (g *CompThreadGlobals) parseImportUntyped(untyped string) (r.Value, xr.Type, bool) { + gkind, value := UnmarshalUntyped(untyped) + if gkind == types.Invalid { + return Nil, nil, false + } + lit := UntypedLit{Kind: xr.ToReflectKind(gkind), Obj: value, Universe: g.Universe} + return r.ValueOf(lit), g.TypeOfUntypedLit(), true +} + +func (g *CompThreadGlobals) parseImportTypes(rtypes map[string]r.Type, wrappers map[string][]string) map[string]xr.Type { + v := g.Universe + xtypes := make(map[string]xr.Type) + for name, rtype := range rtypes { + // Universe.FromReflectType uses cached *types.Package if possible + t := v.FromReflectType(rtype) + if twrappers := wrappers[name]; len(twrappers) != 0 { + t.RemoveMethods(twrappers, "") + } + xtypes[name] = t + } + return xtypes +} + +// loadProxies adds to thread-global maps the proxies found in import +func (g *CompThreadGlobals) loadProxies(proxies map[string]r.Type, xtypes map[string]xr.Type) { + for name, proxy := range proxies { + xtype := xtypes[name] + if xtype == nil { + g.Warnf("import %q: type not found for proxy <%v>", proxy.PkgPath(), proxy) + continue + } + if xtype.Kind() != r.Interface { + g.Warnf("import %q: type for proxy <%v> is not an interface: %v", proxy.PkgPath(), proxy, xtype) + continue + } + rtype := xtype.ReflectType() + g.interf2proxy[rtype] = proxy + g.proxy2interf[proxy] = xtype + } +} + +// v is an imported variable. build a function that will return it. +// Do NOT expose its value while compiling, otherwise the fast interpreter +// will (incorrectly) assume that it's a constant and will perform constant propagation. +// +// mandatory optimization: for basic kinds, unwrap reflect.Value +func importedBindAsFun(t xr.Type, v r.Value) I { + var fun I + switch t.Kind() { + case r.Bool: + fun = func(env *Env) bool { + return v.Bool() + } + case r.Int: + fun = func(env *Env) int { + return int(v.Int()) + } + case r.Int8: + fun = func(env *Env) int8 { + return int8(v.Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + return int16(v.Int()) + } + case r.Int32: + fun = func(env *Env) int32 { + return int32(v.Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + return v.Int() + } + case r.Uint: + fun = func(env *Env) uint { + return uint(v.Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return uint8(v.Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return uint16(v.Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return uint32(v.Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return v.Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return uintptr(v.Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + return float32(v.Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + return v.Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + return complex64(v.Complex()) + } + case r.Complex128: + fun = func(env *Env) complex128 { + return v.Complex() + } + case r.String: + fun = func(env *Env) string { + return v.String() + } + default: + fun = func(env *Env) r.Value { + return v + } + } + return fun +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/index.go b/vendor/github.com/cosmos72/gomacro/fast/index.go new file mode 100644 index 0000000..9fa140f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/index.go @@ -0,0 +1,998 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * index.go + * + * Created on Apr 23, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) IndexExpr(node *ast.IndexExpr) *Expr { return c.indexExpr(node, true) } +func (c *Comp) IndexExpr1(node *ast.IndexExpr) *Expr { return c.indexExpr(node, false) } +func (c *Comp) indexExpr(node *ast.IndexExpr, multivalued bool) *Expr { + obj := c.Expr1(node.X) + idx := c.Expr1(node.Index) + if obj.Untyped() { + obj.ConstTo(obj.DefaultType()) + } + + t := obj.Type + var ret *Expr + switch t.Kind() { + case r.Array, r.Slice, r.String: + ret = c.vectorIndex(node, obj, idx) + case r.Map: + if multivalued { + ret = c.mapIndex(node, obj, idx) + } else { + ret = c.mapIndex1(node, obj, idx) + } + + case r.Ptr: + if t.Elem().Kind() == r.Array { + objfun := obj.AsX1() + deref := exprFun(t.Elem(), func(env *Env) r.Value { return objfun(env).Elem() }, + ) + ret = c.vectorIndex(node, deref, idx) + break + } + fallthrough + default: + c.Errorf("invalid operation: %v (type %v does not support indexing)", node, t) + return nil + } + if obj.Const() && idx.Const() { + ret.EvalConst(CompileKeepUntyped) + } + return ret +} +func (c *Comp) vectorIndex(node *ast.IndexExpr, obj *Expr, idx *Expr) *Expr { + idxconst := idx.Const() + if idxconst { + idx.ConstTo(c.TypeOfInt()) + } else if idx.Type == nil || !idx.Type.AssignableTo(c.TypeOfInt()) { + c.Errorf("non-integer %s index: %v <%v>", obj.Type.Kind(), node.Index, idx.Type) + } + + t := obj.Type + if t.Kind() == r.String { + return c.stringIndex(node, obj, idx) + } + + t = t.Elem() + objfun := obj.AsX1() + var fun I + if idxconst { + i := idx.Value.(int) + switch t.Kind() { + case r.Bool: + fun = func(env *Env) bool { + objv := objfun(env) + return objv.Index(i).Bool() + } + + case r.Int: + fun = func(env *Env) int { + objv := objfun(env) + return int(objv.Index(i).Int()) + } + + case r.Int8: + fun = func(env *Env) int8 { + objv := objfun(env) + return int8(objv.Index(i).Int()) + } + + case r.Int16: + fun = func(env *Env) int16 { + objv := objfun(env) + return int16(objv.Index(i).Int()) + } + + case r.Int32: + fun = func(env *Env) int32 { + objv := objfun(env) + return int32(objv.Index(i).Int()) + } + + case r.Int64: + fun = func(env *Env) int64 { + objv := objfun(env) + return objv.Index(i).Int() + } + + case r.Uint: + fun = func(env *Env) uint { + objv := objfun(env) + return uint(objv.Index(i).Uint()) + } + + case r.Uint8: + fun = func(env *Env) uint8 { + objv := objfun(env) + return uint8(objv.Index(i).Uint()) + } + + case r.Uint16: + fun = func(env *Env) uint16 { + objv := objfun(env) + return uint16(objv.Index(i).Uint()) + } + + case r.Uint32: + fun = func(env *Env) uint32 { + objv := objfun(env) + return uint32(objv.Index(i).Uint()) + } + + case r.Uint64: + fun = func(env *Env) uint64 { + objv := objfun(env) + return objv.Index(i).Uint() + } + + case r.Uintptr: + fun = func(env *Env) uintptr { + objv := objfun(env) + return uintptr(objv.Index(i).Uint()) + } + + case r.Float32: + fun = func(env *Env) float32 { + objv := objfun(env) + return float32(objv.Index(i).Float()) + } + + case r.Float64: + fun = func(env *Env) float64 { + objv := objfun(env) + return objv.Index(i).Float() + } + + case r.Complex64: + fun = func(env *Env) complex64 { + objv := objfun(env) + return complex64(objv.Index(i).Complex()) + } + + case r.Complex128: + fun = func(env *Env) complex128 { + objv := objfun(env) + return objv.Index(i).Complex() + } + + case r.String: + fun = func(env *Env) string { + objv := objfun(env) + return objv.Index(i).String() + } + + default: + fun = func(env *Env) r.Value { + objv := objfun(env) + return objv.Index(i) + + } + + } + } else { + idxfun := idx.WithFun().(func(*Env) int) + switch t.Kind() { + case r.Bool: + fun = func(env *Env) bool { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i).Bool() + } + + case r.Int: + fun = func(env *Env) int { + objv := objfun(env) + i := idxfun(env) + return int(objv.Index(i).Int()) + } + + case r.Int8: + fun = func(env *Env) int8 { + objv := objfun(env) + i := idxfun(env) + return int8(objv.Index(i).Int()) + } + + case r.Int16: + fun = func(env *Env) int16 { + objv := objfun(env) + i := idxfun(env) + return int16(objv.Index(i).Int()) + } + + case r.Int32: + fun = func(env *Env) int32 { + objv := objfun(env) + i := idxfun(env) + return int32(objv.Index(i).Int()) + } + + case r.Int64: + fun = func(env *Env) int64 { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i).Int() + } + + case r.Uint: + fun = func(env *Env) uint { + objv := objfun(env) + i := idxfun(env) + return uint(objv.Index(i).Uint()) + } + + case r.Uint8: + fun = func(env *Env) uint8 { + objv := objfun(env) + i := idxfun(env) + return uint8(objv.Index(i).Uint()) + } + + case r.Uint16: + fun = func(env *Env) uint16 { + objv := objfun(env) + i := idxfun(env) + return uint16(objv.Index(i).Uint()) + } + + case r.Uint32: + fun = func(env *Env) uint32 { + objv := objfun(env) + i := idxfun(env) + return uint32(objv.Index(i).Uint()) + } + + case r.Uint64: + fun = func(env *Env) uint64 { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i).Uint() + } + + case r.Uintptr: + fun = func(env *Env) uintptr { + objv := objfun(env) + i := idxfun(env) + return uintptr(objv.Index(i).Uint()) + } + + case r.Float32: + fun = func(env *Env) float32 { + objv := objfun(env) + i := idxfun(env) + return float32(objv.Index(i).Float()) + } + + case r.Float64: + fun = func(env *Env) float64 { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i).Float() + } + + case r.Complex64: + fun = func(env *Env) complex64 { + objv := objfun(env) + i := idxfun(env) + return complex64(objv.Index(i).Complex()) + } + + case r.Complex128: + fun = func(env *Env) complex128 { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i).Complex() + } + + case r.String: + fun = func(env *Env) string { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i).String() + } + + default: + fun = func(env *Env) r.Value { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i) + + } + + } + } + return exprFun(t, fun) +} +func (c *Comp) stringIndex(node *ast.IndexExpr, obj *Expr, idx *Expr) *Expr { + idxfun := idx.WithFun().(func(*Env) int) + objfun := obj.WithFun().(func(*Env) string) + var fun func(env *Env) uint8 + if obj.Const() { + str := obj.Value.(string) + fun = func(env *Env) uint8 { + i := idxfun(env) + return str[i] + } + } else if idx.Const() { + i := idx.Value.(int) + fun = func(env *Env) uint8 { + str := objfun(env) + return str[i] + } + } else { + fun = func(env *Env) uint8 { + str := objfun(env) + i := idxfun(env) + return str[i] + } + } + return c.exprUint8(fun) +} +func (c *Comp) mapIndex(node *ast.IndexExpr, obj *Expr, idx *Expr) *Expr { + t := obj.Type + tkey := t.Key() + tval := t.Elem() + idxconst := idx.Const() + if idxconst { + idx.ConstTo(tkey) + } else if idx.Type == nil || !idx.Type.AssignableTo(tkey) { + c.Errorf("cannot use %v <%v> as <%v> in map index", node.Index, idx.Type, tkey) + } + + objfun := obj.AsX1() + zero := xr.Zero(tval) + var fun func(env *Env) (r.Value, []r.Value) + if idxconst { + key := r.ValueOf(idx.Value) + fun = func(env *Env) (r.Value, []r.Value) { + obj := objfun(env) + val := obj.MapIndex(key) + var ok r.Value + if val == base.Nil { + val = zero + ok = base.False + } else { + ok = base.True + } + return val, []r.Value{val, ok} + } + } else { + keyfun := idx.AsX1() + fun = func(env *Env) (r.Value, []r.Value) { + obj := objfun(env) + key := keyfun(env) + val := obj.MapIndex(key) + var ok r.Value + if val == base.Nil { + val = zero + ok = base.False + } else { + ok = base.True + } + return val, []r.Value{val, ok} + } + } + return exprXV([]xr.Type{tval, c.TypeOfBool()}, fun) +} +func (c *Comp) mapIndex1(node *ast.IndexExpr, obj *Expr, idx *Expr) *Expr { + t := obj.Type + tkey := t.Key() + tval := t.Elem() + idxconst := idx.Const() + if idxconst { + idx.ConstTo(tkey) + } else if idx.Type == nil || !idx.Type.AssignableTo(tkey) { + c.Errorf("cannot use %v <%v> as <%v> in map index", node.Index, idx.Type, tkey) + } + + objfun := obj.AsX1() + var fun I + if idxconst { + key := r.ValueOf(idx.Value) + switch tval.Kind() { + case r.Bool: + fun = func(env *Env) bool { + obj := objfun(env) + v := obj.MapIndex(key) + var result bool + + if v != base.Nil { + result = v.Bool() + } + return result + } + case r.Int: + fun = func(env *Env) int { + obj := objfun(env) + v := obj.MapIndex(key) + var result int + + if v != base.Nil { + result = int(v.Int()) + } + return result + } + case r.Int8: + fun = func(env *Env) int8 { + obj := objfun(env) + v := obj.MapIndex(key) + var result int8 + + if v != base.Nil { + result = int8(v.Int()) + } + return result + } + case r.Int16: + fun = func(env *Env) int16 { + obj := objfun(env) + v := obj.MapIndex(key) + var result int16 + + if v != base.Nil { + result = int16(v.Int()) + } + return result + } + case r.Int32: + fun = func(env *Env) int32 { + obj := objfun(env) + v := obj.MapIndex(key) + var result int32 + if v != base.Nil { + result = int32(v.Int()) + } + return result + } + case r.Int64: + fun = func(env *Env) int64 { + obj := objfun(env) + v := obj.MapIndex(key) + var result int64 + if v != base.Nil { + result = v.Int() + } + return result + } + case r.Uint: + fun = func(env *Env) uint { + obj := objfun(env) + v := obj.MapIndex(key) + var result uint + if v != base.Nil { + result = uint(v.Uint()) + } + return result + } + case r.Uint8: + fun = func(env *Env) uint8 { + obj := objfun(env) + v := obj.MapIndex(key) + var result uint8 + if v != base.Nil { + result = + uint8(v.Uint()) + } + return result + } + case r.Uint16: + fun = func(env *Env) uint16 { + obj := objfun(env) + v := obj.MapIndex(key) + var result uint16 + if v != base.Nil { + result = + + uint16(v.Uint()) + } + return result + } + case r.Uint32: + fun = func(env *Env) uint32 { + obj := objfun(env) + v := obj.MapIndex(key) + var result uint32 + if v != base.Nil { + result = + + uint32(v.Uint()) + } + return result + } + case r.Uint64: + fun = func(env *Env) uint64 { + obj := objfun(env) + v := obj.MapIndex(key) + var result uint64 + if v != base.Nil { + result = v.Uint() + } + return result + } + + case r.Uintptr: + fun = func(env *Env) uintptr { + obj := objfun(env) + v := obj.MapIndex(key) + var result uintptr + if v != base.Nil { + result = + + uintptr(v.Uint()) + } + return result + } + + case r.Float32: + fun = func(env *Env) float32 { + obj := objfun(env) + v := obj.MapIndex(key) + var result float32 + if v != base.Nil { + result = + + float32(v.Float()) + } + return result + } + + case r.Float64: + fun = func(env *Env) float64 { + obj := objfun(env) + v := obj.MapIndex(key) + var result float64 + if v != base.Nil { + result = v.Float() + } + return result + } + + case r.Complex64: + fun = func(env *Env) complex64 { + obj := objfun(env) + v := obj.MapIndex(key) + var result complex64 + if v != base.Nil { + result = + + complex64(v.Complex()) + } + return result + } + + case r.Complex128: + fun = func(env *Env) complex128 { + obj := objfun(env) + v := obj.MapIndex(key) + var result complex128 + if v != base.Nil { + result = v.Complex() + } + return result + } + + case r.String: + fun = func(env *Env) string { + obj := objfun(env) + v := obj.MapIndex(key) + var result string + if v != base.Nil { + result = v.String() + } + return result + } + + default: + { + zero := xr.Zero(tval) + fun = func(env *Env) r.Value { + obj := objfun(env) + result := obj.MapIndex(key) + if result == base.Nil { + result = zero + } + return result + } + } + + } + } else { + keyfun := idx.AsX1() + switch tval.Kind() { + case r.Bool: + fun = func(env *Env) bool { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result bool + if v != base.Nil { + result = v.Bool() + } + return result + } + + case r.Int: + fun = func(env *Env) int { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result int + if v != base.Nil { + result = + + int(v.Int()) + } + return result + } + + case r.Int8: + fun = func(env *Env) int8 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result int8 + if v != base.Nil { + result = + + int8(v.Int()) + } + return result + } + + case r.Int16: + fun = func(env *Env) int16 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result int16 + if v != base.Nil { + result = + + int16(v.Int()) + } + return result + } + + case r.Int32: + fun = func(env *Env) int32 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result int32 + if v != base.Nil { + result = + + int32(v.Int()) + } + return result + } + + case r.Int64: + fun = func(env *Env) int64 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result int64 + if v != base.Nil { + result = v.Int() + } + return result + } + + case r.Uint: + fun = func(env *Env) uint { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result uint + if v != base.Nil { + result = + + uint(v.Uint()) + } + return result + } + + case r.Uint8: + fun = func(env *Env) uint8 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result uint8 + if v != base.Nil { + result = + + uint8(v.Uint()) + } + return result + } + + case r.Uint16: + fun = func(env *Env) uint16 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result uint16 + if v != base.Nil { + result = + + uint16(v.Uint()) + } + return result + } + + case r.Uint32: + fun = func(env *Env) uint32 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result uint32 + if v != base.Nil { + result = + + uint32(v.Uint()) + } + return result + } + + case r.Uint64: + fun = func(env *Env) uint64 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result uint64 + if v != base.Nil { + result = v.Uint() + } + return result + } + + case r.Uintptr: + fun = func(env *Env) uintptr { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result uintptr + if v != base.Nil { + result = + + uintptr(v.Uint()) + } + return result + } + + case r.Float32: + fun = func(env *Env) float32 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result float32 + if v != base.Nil { + result = + + float32(v.Float()) + } + return result + } + + case r.Float64: + fun = func(env *Env) float64 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result float64 + if v != base.Nil { + result = v.Float() + } + return result + } + + case r.Complex64: + fun = func(env *Env) complex64 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result complex64 + if v != base.Nil { + result = + + complex64(v.Complex()) + } + return result + } + + case r.Complex128: + fun = func(env *Env) complex128 { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result complex128 + if v != base.Nil { + result = v.Complex() + } + return result + } + + case r.String: + fun = func(env *Env) string { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result string + if v != base.Nil { + result = v.String() + } + return result + } + + default: + { + zero := xr.Zero(tval) + fun = func(env *Env) r.Value { + obj := objfun(env) + key := keyfun(env) + result := obj.MapIndex(key) + if result == base.Nil { + result = zero + } + return result + } + } + + } + } + return exprFun(tval, fun) +} +func (c *Comp) IndexPlace(node *ast.IndexExpr, opt PlaceOption) *Place { + obj := c.Expr1(node.X) + idx := c.Expr1(node.Index) + if obj.Untyped() { + obj.ConstTo(obj.DefaultType()) + } + + t := obj.Type + switch t.Kind() { + case r.Array, r.Slice: + return c.vectorPlace(node, obj, idx) + case r.String: + + c.Errorf("%s a byte in a string: %v", opt, node) + return nil + case r.Map: + + if opt == PlaceAddress { + c.Errorf("%s a map element: %v", opt, node) + return nil + } + return c.mapPlace(node, obj, idx) + case r.Ptr: + if t.Elem().Kind() == r.Array { + return c.vectorPtrPlace(node, obj, idx) + } + + fallthrough + default: + c.Errorf("invalid operation: %v (type %v does not support indexing)", node, t) + return nil + } +} +func (c *Comp) mapPlace(node *ast.IndexExpr, obj *Expr, idx *Expr) *Place { + tmap := obj.Type + tkey := tmap.Key() + idxconst := idx.Const() + if idxconst { + idx.ConstTo(tkey) + } else if idx.Type == nil || !idx.Type.AssignableTo(tkey) { + c.Errorf("cannot use %v <%v> as type <%v> in map index: %v", node.Index, idx.Type, tkey, node) + } + return &Place{Var: Var{Type: tmap.Elem()}, Fun: obj.AsX1(), MapKey: idx.AsX1(), MapType: tmap} +} +func (c *Comp) vectorPlace(node *ast.IndexExpr, obj *Expr, idx *Expr) *Place { + idxconst := idx.Const() + if idxconst { + idx.ConstTo(c.TypeOfInt()) + } else if idx.Type == nil || !idx.Type.AssignableTo(c.TypeOfInt()) { + c.Errorf("non-integer %s index: %v <%v>", obj.Type.Kind(), node.Index, idx.Type) + } + + t := obj.Type.Elem() + objfun := obj.AsX1() + var fun, addr func(env *Env) r.Value + if idxconst { + i := idx.Value.(int) + fun = func(env *Env) r.Value { + objv := objfun(env) + return objv.Index(i) + } + addr = func(env *Env) r.Value { + objv := objfun(env) + return objv.Index(i).Addr() + } + } else { + idxfun := idx.WithFun().(func(*Env) int) + fun = func(env *Env) r.Value { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i) + } + addr = func(env *Env) r.Value { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i).Addr() + } + } + return &Place{Var: Var{Type: t}, Fun: fun, Addr: addr} +} +func (c *Comp) vectorPtrPlace(node *ast.IndexExpr, obj *Expr, idx *Expr) *Place { + idxconst := idx.Const() + if idxconst { + idx.ConstTo(c.TypeOfInt()) + } else if idx.Type == nil || !idx.Type.AssignableTo(c.TypeOfInt()) { + c.Errorf("non-integer %s index: %v <%v>", obj.Type.Kind(), node.Index, idx.Type) + } + + t := obj.Type.Elem().Elem() + objfun := obj.AsX1() + var fun, addr func(env *Env) r.Value + if idxconst { + i := idx.Value.(int) + fun = func(env *Env) r.Value { + objv := objfun(env).Elem() + return objv.Index(i) + } + addr = func(env *Env) r.Value { + objv := objfun(env).Elem() + return objv.Index(i).Addr() + } + } else { + idxfun := idx.WithFun().(func(*Env) int) + fun = func(env *Env) r.Value { + objv := objfun(env).Elem() + i := idxfun(env) + return objv.Index(i) + } + addr = func(env *Env) r.Value { + objv := objfun(env).Elem() + i := idxfun(env) + return objv.Index(i).Addr() + } + } + return &Place{Var: Var{Type: t}, Fun: fun, Addr: addr} +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/index.gomacro b/vendor/github.com/cosmos72/gomacro/fast/index.gomacro new file mode 100644 index 0000000..8210cf8 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/index.gomacro @@ -0,0 +1,552 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * index.go + * + * Created on Apr 23, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +:import ( + "go/ast" + r "reflect" +) + +import ( + "go/ast" + r "reflect" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// IndexExpr compiles a read operation on obj[idx] +func (c *Comp) IndexExpr(node *ast.IndexExpr) *Expr { + return c.indexExpr(node, true) +} + +// IndexExpr1 compiles a single-valued read operation on obj[idx] +func (c *Comp) IndexExpr1(node *ast.IndexExpr) *Expr { + return c.indexExpr(node, false) +} + +func (c *Comp) indexExpr(node *ast.IndexExpr, multivalued bool) *Expr { + obj := c.Expr1(node.X) + idx := c.Expr1(node.Index) + if obj.Untyped() { + obj.ConstTo(obj.DefaultType()) + } + t := obj.Type + var ret *Expr + switch t.Kind() { + case r.Array, r.Slice, r.String: + ret = c.vectorIndex(node, obj, idx) + case r.Map: + if multivalued { + ret = c.mapIndex(node, obj, idx) + } else { + ret = c.mapIndex1(node, obj, idx) + } + case r.Ptr: + if t.Elem().Kind() == r.Array { + objfun := obj.AsX1() + deref := exprFun(t.Elem(), func(env *Env) r.Value { + return objfun(env).Elem() + }) + ret = c.vectorIndex(node, deref, idx) + break + } + fallthrough + default: + c.Errorf("invalid operation: %v (type %v does not support indexing)", node, t) + return nil + } + if obj.Const() && idx.Const() { + // constant propagation + ret.EvalConst(CompileKeepUntyped) + } + return ret +} + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makekind(typ ast.Node) ast.Node { + t := EvalType(typ) + if t == nil { + return nil + } + // go/ast.SelectorExpr requires the foo in r.foo to be an *ast.Ident, cannot unquote there + kind := ~"{r . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(t.Name())} + return kind +} + + +:func convertvalue(typ, val ast.Node) (ast.Node, ast.Node) { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + typ = ~'{r.Value} + } else { + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + } + return typ, val +} + +:macro vec_index_c(typ ast.Node) ast.Node { + kind := makekind(typ) + typv, val := convertvalue(typ, ~'{objv.Index(i)}) + fun := ~"{ + fun = func(env *Env) ~,typv { + objv := objfun(env) + return ~,val + } + } + if kind == nil { + return ~"{ default: ~,fun } + } else { + return ~"{ case ~,kind: ~,fun } + } +} + +:macro vec_index_e(typ ast.Node) ast.Node { + kind := makekind(typ) + typv, val := convertvalue(typ, ~'{objv.Index(i)}) + fun := ~"{ + fun = func(env *Env) ~,typv { + objv := objfun(env) + i := idxfun(env) + return ~,val + } + } + if kind == nil { + return ~"{ default: ~,fun } + } else { + return ~"{ case ~,kind: ~,fun } + } +} + +// vectorIndex compiles obj[idx] where obj is an array or slice +func (c *Comp) vectorIndex(node *ast.IndexExpr, obj *Expr, idx *Expr) *Expr { + idxconst := idx.Const() + if idxconst { + idx.ConstTo(c.TypeOfInt()) + } else if idx.Type == nil || !idx.Type.AssignableTo(c.TypeOfInt()) { + c.Errorf("non-integer %s index: %v <%v>", obj.Type.Kind(), node.Index, idx.Type) + } + t := obj.Type + if t.Kind() == r.String { + return c.stringIndex(node, obj, idx) + } + t = t.Elem() + objfun := obj.AsX1() + var fun I + if idxconst { + i := idx.Value.(int) + switch t.Kind() { + {vec_index_c; bool} + {vec_index_c; int} + {vec_index_c; int8} + {vec_index_c; int16} + {vec_index_c; int32} + {vec_index_c; int64} + {vec_index_c; uint} + {vec_index_c; uint8} + {vec_index_c; uint16} + {vec_index_c; uint32} + {vec_index_c; uint64} + {vec_index_c; uintptr} + {vec_index_c; float32} + {vec_index_c; float64} + {vec_index_c; complex64} + {vec_index_c; complex128} + {vec_index_c; string} + {vec_index_c; nil} + } + } else { + idxfun := idx.WithFun().(func(*Env) int) + switch t.Kind() { + {vec_index_e; bool} + {vec_index_e; int} + {vec_index_e; int8} + {vec_index_e; int16} + {vec_index_e; int32} + {vec_index_e; int64} + {vec_index_e; uint} + {vec_index_e; uint8} + {vec_index_e; uint16} + {vec_index_e; uint32} + {vec_index_e; uint64} + {vec_index_e; uintptr} + {vec_index_e; float32} + {vec_index_e; float64} + {vec_index_e; complex64} + {vec_index_e; complex128} + {vec_index_e; string} + {vec_index_e; nil} + } + } + return exprFun(t, fun) +} + +// stringIndex compiles obj[idx] where obj is a string +func (c *Comp) stringIndex(node *ast.IndexExpr, obj *Expr, idx *Expr) *Expr { + idxfun := idx.WithFun().(func(*Env) int) + objfun := obj.WithFun().(func(*Env) string) + var fun func(env *Env) uint8 + if obj.Const() { + str := obj.Value.(string) + fun = func(env *Env) uint8 { + i := idxfun(env) + return str[i] + } + } else if idx.Const() { + i := idx.Value.(int) + fun = func(env *Env) uint8 { + str := objfun(env) + return str[i] + } + } else { + fun = func(env *Env) uint8 { + str := objfun(env) + i := idxfun(env) + return str[i] + } + } + return c.exprUint8(fun) +} + +// mapIndex compiles obj[idx] where obj is a map +func (c *Comp) mapIndex(node *ast.IndexExpr, obj *Expr, idx *Expr) *Expr { + t := obj.Type + tkey := t.Key() + tval := t.Elem() + idxconst := idx.Const() + if idxconst { + idx.ConstTo(tkey) + } else if idx.Type == nil || !idx.Type.AssignableTo(tkey) { + c.Errorf("cannot use %v <%v> as <%v> in map index", node.Index, idx.Type, tkey) + } + objfun := obj.AsX1() + zero := xr.Zero(tval) + var fun func(env *Env) (r.Value, []r.Value) + if idxconst { + key := r.ValueOf(idx.Value) + fun = func(env *Env) (r.Value, []r.Value) { + obj := objfun(env) + val := obj.MapIndex(key) + var ok r.Value + if val == base.Nil { + val = zero // map[key] returns the zero value if key is not present + ok = base.False + } else { + ok = base.True + } + return val, []r.Value{val, ok} + } + } else { + keyfun := idx.AsX1() + fun = func(env *Env) (r.Value, []r.Value) { + obj := objfun(env) + key := keyfun(env) + val := obj.MapIndex(key) + var ok r.Value + if val == base.Nil { + val = zero // map[key] returns the zero value if key is not present + ok = base.False + } else { + ok = base.True + } + return val, []r.Value{val, ok} + } + } + return exprXV([]xr.Type{tval, c.TypeOfBool()}, fun) +} + +:macro mapindex1_c(typ ast.Node) ast.Node { + if EvalType(typ) == nil { + return ~'{ + zero := xr.Zero(tval) + fun = func(env *Env) r.Value { + obj := objfun(env) + result := obj.MapIndex(key) + if result == base.Nil { + result = zero + } + return result + } + } + } + _, unwrap := convertvalue(typ, ~'v) + return ~"{ + fun = func(env *Env) ~,typ { + obj := objfun(env) + v := obj.MapIndex(key) + var result ~,typ + if v != base.Nil { + result = ~,unwrap + } + return result + } + } +} + +:macro mapindex1_e(typ ast.Node) ast.Node { + if EvalType(typ) == nil { + return ~'{ + zero := xr.Zero(tval) + fun = func(env *Env) r.Value { + obj := objfun(env) + key := keyfun(env) + result := obj.MapIndex(key) + if result == base.Nil { + result = zero + } + return result + } + } + } + _, unwrap := convertvalue(typ, ~'v) + return ~"{ + fun = func(env *Env) ~,typ { + obj := objfun(env) + key := keyfun(env) + v := obj.MapIndex(key) + var result ~,typ + if v != base.Nil { + result = ~,unwrap + } + return result + } + } +} + +// mapIndex1 compiles obj[idx] where obj is a map, in single-value context +func (c *Comp) mapIndex1(node *ast.IndexExpr, obj *Expr, idx *Expr) *Expr { + t := obj.Type + tkey := t.Key() + tval := t.Elem() + idxconst := idx.Const() + if idxconst { + idx.ConstTo(tkey) + } else if idx.Type == nil || !idx.Type.AssignableTo(tkey) { + c.Errorf("cannot use %v <%v> as <%v> in map index", node.Index, idx.Type, tkey) + } + objfun := obj.AsX1() + var fun I + if idxconst { + key := r.ValueOf(idx.Value) + switch tval.Kind() { + case r.Bool: mapindex1_c; bool + case r.Int: mapindex1_c; int + case r.Int8: mapindex1_c; int8 + case r.Int16: mapindex1_c; int16 + case r.Int32: mapindex1_c; int32 + case r.Int64: mapindex1_c; int64 + case r.Uint: mapindex1_c; uint + case r.Uint8: mapindex1_c; uint8 + case r.Uint16: mapindex1_c; uint16 + case r.Uint32: mapindex1_c; uint32 + case r.Uint64: mapindex1_c; uint64 + case r.Uintptr: mapindex1_c; uintptr + case r.Float32: mapindex1_c; float32 + case r.Float64: mapindex1_c; float64 + case r.Complex64: mapindex1_c; complex64 + case r.Complex128: mapindex1_c; complex128 + case r.String: mapindex1_c; string + default: mapindex1_c; nil + } + } else { + keyfun := idx.AsX1() + switch tval.Kind() { + case r.Bool: mapindex1_e; bool + case r.Int: mapindex1_e; int + case r.Int8: mapindex1_e; int8 + case r.Int16: mapindex1_e; int16 + case r.Int32: mapindex1_e; int32 + case r.Int64: mapindex1_e; int64 + case r.Uint: mapindex1_e; uint + case r.Uint8: mapindex1_e; uint8 + case r.Uint16: mapindex1_e; uint16 + case r.Uint32: mapindex1_e; uint32 + case r.Uint64: mapindex1_e; uint64 + case r.Uintptr: mapindex1_e; uintptr + case r.Float32: mapindex1_e; float32 + case r.Float64: mapindex1_e; float64 + case r.Complex64: mapindex1_e; complex64 + case r.Complex128: mapindex1_e; complex128 + case r.String: mapindex1_e; string + default: mapindex1_e; nil + } + } + return exprFun(tval, fun) +} + +// IndexPlace compiles obj[idx] returning a Place, i.e. a settable (and addressable, if possible) reflect.Value +func (c *Comp) IndexPlace(node *ast.IndexExpr, opt PlaceOption) *Place { + obj := c.Expr1(node.X) + idx := c.Expr1(node.Index) + if obj.Untyped() { + obj.ConstTo(obj.DefaultType()) + } + t := obj.Type + switch t.Kind() { + case r.Array, r.Slice: + return c.vectorPlace(node, obj, idx) + case r.String: + // bytes in a string are not settable nor addressable + c.Errorf("%s a byte in a string: %v", opt, node) + return nil + case r.Map: + // elements in a map are settable but not addressable + if opt == PlaceAddress { + c.Errorf("%s a map element: %v", opt, node) + return nil + } + return c.mapPlace(node, obj, idx) + case r.Ptr: + if t.Elem().Kind() == r.Array { + return c.vectorPtrPlace(node, obj, idx) + } + fallthrough + default: + c.Errorf("invalid operation: %v (type %v does not support indexing)", node, t) + return nil + } +} + +// mapPlace compiles obj[idx] where obj is a map, returning a settable place +func (c *Comp) mapPlace(node *ast.IndexExpr, obj *Expr, idx *Expr) *Place { + tmap := obj.Type + tkey := tmap.Key() + idxconst := idx.Const() + if idxconst { + idx.ConstTo(tkey) + } else if idx.Type == nil || !idx.Type.AssignableTo(tkey) { + c.Errorf("cannot use %v <%v> as type <%v> in map index: %v", node.Index, idx.Type, tkey, node) + } + return &Place{Var: Var{Type: tmap.Elem()}, Fun: obj.AsX1(), MapKey: idx.AsX1(), MapType: tmap} +} + +// vectorPlace compiles obj[idx] where obj is an array or slice, returning a settable and addressable place +func (c *Comp) vectorPlace(node *ast.IndexExpr, obj *Expr, idx *Expr) *Place { + idxconst := idx.Const() + if idxconst { + idx.ConstTo(c.TypeOfInt()) + } else if idx.Type == nil || !idx.Type.AssignableTo(c.TypeOfInt()) { + c.Errorf("non-integer %s index: %v <%v>", obj.Type.Kind(), node.Index, idx.Type) + } + t := obj.Type.Elem() + objfun := obj.AsX1() + var fun, addr func(env *Env) r.Value + if idxconst { + i := idx.Value.(int) + fun = func(env *Env) r.Value { + objv := objfun(env) + return objv.Index(i) + } + addr = func(env *Env) r.Value { + objv := objfun(env) + return objv.Index(i).Addr() + } + } else { + idxfun := idx.WithFun().(func(*Env) int) + fun = func(env *Env) r.Value { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i) + } + addr = func(env *Env) r.Value { + objv := objfun(env) + i := idxfun(env) + return objv.Index(i).Addr() + } + } + return &Place{Var: Var{Type: t}, Fun: fun, Addr: addr} +} + +// vectorPtrPlace compiles obj[idx] where obj is a pointer to an array, returning a settable and addressable reflect.Value +func (c *Comp) vectorPtrPlace(node *ast.IndexExpr, obj *Expr, idx *Expr) *Place { + idxconst := idx.Const() + if idxconst { + idx.ConstTo(c.TypeOfInt()) + } else if idx.Type == nil || !idx.Type.AssignableTo(c.TypeOfInt()) { + c.Errorf("non-integer %s index: %v <%v>", obj.Type.Kind(), node.Index, idx.Type) + } + t := obj.Type.Elem().Elem() // Elem() for the pointer to array, another Elem() for the array element type + objfun := obj.AsX1() + var fun, addr func(env *Env) r.Value + if idxconst { + i := idx.Value.(int) + fun = func(env *Env) r.Value { + objv := objfun(env).Elem() + return objv.Index(i) + } + addr = func(env *Env) r.Value { + objv := objfun(env).Elem() + return objv.Index(i).Addr() + } + } else { + idxfun := idx.WithFun().(func(*Env) int) + fun = func(env *Env) r.Value { + objv := objfun(env).Elem() + i := idxfun(env) + return objv.Index(i) + } + addr = func(env *Env) r.Value { + objv := objfun(env).Elem() + i := idxfun(env) + return objv.Index(i).Addr() + } + } + return &Place{Var: Var{Type: t}, Fun: fun, Addr: addr} +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/interface.go b/vendor/github.com/cosmos72/gomacro/fast/interface.go new file mode 100644 index 0000000..8c14701 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/interface.go @@ -0,0 +1,47 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * interface.go + * + * Created on: Mar 29, 2017 + * Author: Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) TypeInterface(node *ast.InterfaceType) xr.Type { + if node.Methods == nil || len(node.Methods.List) == 0 { + return c.TypeOfInterface() + } + methodtypes, methodnames := c.TypeFields(node.Methods) + + // TODO embedded interfaces + return c.Universe.InterfaceOf(methodnames, methodtypes, nil) +} + +func isInterfaceType(t xr.Type) bool { + return t.Kind() == r.Interface +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/interpreter.go b/vendor/github.com/cosmos72/gomacro/fast/interpreter.go new file mode 100644 index 0000000..c99ded4 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/interpreter.go @@ -0,0 +1,252 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * interpreter.go + * + * Created on: Apr 02, 2017 + * Author: Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + "strings" + + "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// Interp is the fast interpreter. +// It contains both the tree-of-closures builder Comp +// and the interpreter's runtime environment Env +type Interp struct { + Comp *Comp + env *Env // not exported. to access it, call CompEnv.PrepareEnv() +} + +func (ir *Interp) RunExpr1(e *Expr) r.Value { + if e == nil { + return None + } + env := ir.PrepareEnv() + fun := e.AsX1() + return fun(env) +} + +func (ir *Interp) RunExpr(e *Expr) (r.Value, []r.Value) { + if e == nil { + return None, nil + } + env := ir.PrepareEnv() + fun := e.AsXV(ir.Comp.CompileOptions) + return fun(env) +} + +func (ir *Interp) Parse(src string) ast2.Ast { + return ir.Comp.Parse(src) +} + +// combined Parse + Compile +func (ir *Interp) Compile(src string) *Expr { + c := ir.Comp + return c.Compile(c.Parse(src)) +} + +func (ir *Interp) CompileNode(node ast.Node) *Expr { + return ir.Comp.CompileNode(node) +} + +func (ir *Interp) CompileAst(form ast2.Ast) *Expr { + return ir.Comp.Compile(form) +} + +// combined Parse + Compile + RunExpr +func (ir *Interp) Eval(src string) (r.Value, []r.Value) { + c := ir.Comp + return ir.RunExpr(c.Compile(c.Parse(src))) +} + +func (ir *Interp) ChangePackage(name, path string) { + if len(path) == 0 { + path = name + } else { + name = path[1+strings.LastIndexByte(path, '/'):] + } + c := ir.Comp + currpath := c.Path + if path == currpath { + return + } +} + +// DeclConst compiles a constant declaration +func (ir *Interp) DeclConst(name string, t xr.Type, value I) { + ir.Comp.DeclConst0(name, t, value) +} + +// DeclFunc compiles a function declaration +func (ir *Interp) DeclFunc(name string, fun I) { + ir.Comp.DeclFunc0(name, fun) + ir.apply() +} + +// DeclBuiltin compiles a builtin function declaration +func (ir *Interp) DeclBuiltin(name string, builtin Builtin) { + ir.Comp.DeclBuiltin0(name, builtin) +} + +// DeclEnvFunc compiles a function declaration that accesses interpreter's *CompEnv +func (ir *Interp) DeclEnvFunc(name string, function Function) { + ir.Comp.DeclEnvFunc0(name, function) + ir.apply() +} + +// DeclType declares a type +func (ir *Interp) DeclType(t xr.Type) { + ir.Comp.DeclType0(t) +} + +// DeclType declares a type alias +func (ir *Interp) DeclTypeAlias(alias string, t xr.Type) { + ir.Comp.DeclTypeAlias0(alias, t) +} + +// DeclVar compiles a variable declaration +func (ir *Interp) DeclVar(name string, t xr.Type, value I) { + if t == nil { + t = ir.Comp.TypeOf(value) + } + ir.Comp.DeclVar0(name, t, ir.Comp.exprValue(t, value)) + ir.apply() +} + +// apply executes the compiled declarations, statements and expressions, +// then clears the compiled buffer +func (ir *Interp) apply() { + exec := ir.Comp.Code.Exec() + if exec != nil { + exec(ir.PrepareEnv()) + } +} + +// AddressOfVar compiles the expression &name, then executes it +// returns the zero value if name is not found or is not addressable +func (ir *Interp) AddressOfVar(name string) (addr r.Value) { + c := ir.Comp + sym := c.TryResolve(name) + if sym != nil { + switch sym.Desc.Class() { + case VarBind, IntBind: + va := sym.AsVar(PlaceAddress) + expr := va.Address(c.Depth) + return ir.RunExpr1(expr) + } + } + return Nil +} + +// replacement of reflect.TypeOf() that uses xreflect.TypeOf() +func (ir *Interp) TypeOf(val interface{}) xr.Type { + return ir.Comp.TypeOf(val) +} + +// ValueOf retrieves the value of a constant, function or variable +// The returned value is settable and addressable only for variables +// returns the zero value if name is not found +func (ir *Interp) ValueOf(name string) (value r.Value) { + sym := ir.Comp.TryResolve(name) + if sym == nil { + return Nil + } + switch sym.Desc.Class() { + case ConstBind: + return sym.Bind.ConstValue() + case IntBind: + value = ir.AddressOfVar(name) + if value != Nil { + value = value.Elem() // dereference + } + return value + case VarBind: + env := ir.PrepareEnv() + for i := 0; i < sym.Upn; i++ { + env = env.Outer + } + return env.Binds[sym.Desc.Index()] + default: + expr := ir.Comp.Symbol(sym) + return ir.RunExpr1(expr) + } +} + +func (ir *Interp) PrepareEnv() *Env { + return ir.prepareEnv(128) +} + +func (ir *Interp) prepareEnv(minDelta int) *Env { + c := ir.Comp + env := ir.env + // usually we know at Env creation how many slots are needed in c.Env.Binds + // but here we are modifying an existing Env... + if minDelta < 0 { + minDelta = 0 + } + capacity, min := cap(env.Binds), c.BindNum + // c.Debugf("prepareEnv() before: c.BindNum = %v, minDelta = %v, len(env.Binds) = %v, cap(env.Binds) = %v, env = %p", c.BindNum, minDelta, len(env.Binds), cap(env.Binds), env) + + if capacity < min { + if capacity <= min/2 { + capacity = min + } else { + capacity *= 2 + } + if capacity-min < minDelta { + capacity = min + minDelta + } + binds := make([]r.Value, min, capacity) + copy(binds, env.Binds) + env.Binds = binds + } + if len(env.Binds) < min { + env.Binds = env.Binds[0:min:cap(env.Binds)] + } + // c.Debugf("prepareEnv() after: c.BindNum = %v, minDelta = %v, len(env.Binds) = %v, cap(env.Binds) = %v, env = %p", c.BindNum, minDelta, len(env.Binds), cap(env.Binds), env) + + capacity, min = cap(env.IntBinds), c.IntBindNum + if capacity < min { + if capacity <= min/2 { + capacity = min + } else { + capacity *= 2 + } + if capacity-min < minDelta { + capacity = min + minDelta + } + binds := make([]uint64, min, capacity) + copy(binds, env.IntBinds) + env.IntBinds = binds + } + if len(env.IntBinds) < min { + env.IntBinds = env.IntBinds[0:min:cap(env.IntBinds)] + } + return env +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/literal.go b/vendor/github.com/cosmos72/gomacro/fast/literal.go new file mode 100644 index 0000000..120eee6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/literal.go @@ -0,0 +1,580 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * literal.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/constant" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) BasicLit(node *ast.BasicLit) *Expr { + str := node.Value + var kind r.Kind + var label string + switch node.Kind { + case token.INT: + kind, label = r.Int, "integer" + case token.FLOAT: + kind, label = r.Float64, "float" + case token.IMAG: + kind, label = r.Complex128, "complex" + case token.CHAR: + kind, label = r.Int32, "rune" + case token.STRING: + kind, label = r.String, "string" + default: + c.Errorf("unsupported basic literal: %v", node) + return nil + } + obj := constant.MakeFromLiteral(str, node.Kind, 0) + if obj.Kind() == constant.Unknown { + c.Errorf("invalid %s literal: %v", label, str) + return nil + } + return c.exprUntypedLit(kind, obj) +} + +func constantKindToUntypedLitKind(ckind constant.Kind) r.Kind { + ret := r.Invalid + switch ckind { + case constant.Bool: + ret = r.Bool + case constant.Int: + ret = r.Int // actually ambiguous, could be a rune - thus r.Int32 + case constant.Float: + ret = r.Float64 + case constant.Complex: + ret = r.Complex128 + case constant.String: + ret = r.String + } + return ret +} + +func isLiteral(x interface{}) bool { + if x == nil { + return true + } + rtype := r.TypeOf(x) + switch KindToCategory(rtype.Kind()) { + case r.Bool, r.Int, r.Uint, r.Float64, r.Complex128, r.String: + return true + } + _, ok := x.(UntypedLit) + return ok +} + +func isLiteralNumber(x I, n int64) bool { + if x == nil { + return false + } + v := r.ValueOf(x) + switch KindToCategory(v.Kind()) { + case r.Bool: + return false + case r.Int: + return v.Int() == n + case r.Uint: + u := v.Uint() + if n >= 0 { + return u == uint64(n) + } + // n == -1 means "unsigned integer equals its maximum value" + // similarly, n == -2 means "unsigned integer equals its maximum value minus 1" + // and so on... + un := r.ValueOf(n).Convert(v.Type()).Uint() + return u == un + case r.Float64: + return v.Float() == float64(n) + case r.Complex128: + return v.Complex() == complex(float64(n), 0) + case r.String: + return false + } + // no luck yet... try harder + switch x := x.(type) { + case r.Value: + return false + case UntypedLit: + return x.IsLiteralNumber(n) + } + Errorf("isLiteralNumber: unexpected literal type %v <%v>", x, r.TypeOf(x)) + return false +} + +func (untyp *UntypedLit) IsLiteralNumber(n int64) bool { + obj := untyp.Obj + switch obj.Kind() { + case constant.Int: + m, exact := constant.Int64Val(obj) + return exact && m == n + case constant.Float: + m, exact := constant.Float64Val(obj) + return exact && float64(int64(m)) == m && int64(m) == n + case constant.Complex: + m, exact := constant.Float64Val(constant.Imag(obj)) + if !exact || m != 0.0 { + return false + } + m, exact = constant.Float64Val(constant.Real(obj)) + return exact && float64(int64(m)) == m && int64(m) == n + default: + return false + } +} + +// ================================= ConstTo ================================= + +// ConstTo checks that a constant Expr can be used as the given type. +// panics if not constant, or if Expr is a typed constant of different type +// actually performs type conversion (and subsequent overflow checks) ONLY on untyped constants. +func (e *Expr) ConstTo(t xr.Type) I { + if !e.Const() { + Errorf("internal error: expression is not constant, use Expr.To() instead of Expr.ConstTo() to convert from <%v> to <%v>", e.Type, t) + } + val := e.Lit.ConstTo(t) + if e.Fun != nil { + // no longer valid, recompute it + e.Fun = nil + e.WithFun() + } + return val +} + +// ConstTo checks that a Lit can be used as the given type. +// panics if Lit is a typed constant of different type +// actually performs type conversion (and subsequent overflow checks) ONLY on untyped constants. +func (lit *Lit) ConstTo(t xr.Type) I { + value := lit.Value + // Debugf("Lit.ConstTo(): converting constant %v <%v> (stored as <%v>) to <%v>", value, TypeOf(value), lit.Type, t) + if t == nil { + // only literal nil has type nil + if value != nil { + Errorf("cannot convert constant %v <%v> to ", value, lit.Type) + } + return nil + } + // stricter than t == lit.Type + rfrom := r.TypeOf(value) + rto := t.ReflectType() + if rfrom == rto { + return value + } + switch x := value.(type) { + case UntypedLit: + lit.Type = t + lit.Value = x.ConstTo(t) + // Debugf("Lit.ConstTo(): converted untyped constant %v to %v <%v> (stored as <%v>)", x, lit.Value, TypeOf(lit.Value), t) + return lit.Value + case nil: + // literal nil can only be converted to nillable types + if IsNillableKind(t.Kind()) { + lit.Type = t + return nil + // lit.Value = r.Zero(t).Interface() + // return lit.Value + } + } + if rfrom != nil && rto != nil && (rfrom.AssignableTo(rto) || rfrom.Implements(rto)) { + lit.Type = t + lit.Value = r.ValueOf(value).Convert(rto).Interface() + return lit.Value + } + Errorf("cannot convert typed constant %v <%v> to <%v>", value, r.TypeOf(value), t) + return nil +} + +// ConstTo checks that an UntypedLit can be used as the given type. +// performs actual untyped -> typed conversion and subsequent overflow checks. +// returns the constant converted to given type +func (untyp *UntypedLit) ConstTo(t xr.Type) I { + obj := untyp.Obj + var val interface{} +again: + switch t.Kind() { + case r.Bool: + if obj.Kind() != constant.Bool { + Errorf("cannot convert untyped constant %v to <%v>", untyp, t) + } + val = constant.BoolVal(obj) + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64, + r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr, + r.Float32, r.Float64, r.Complex64, r.Complex128: + + n := untyp.extractNumber(obj, t) + return convertLiteralCheckOverflow(n, t) + case r.String: + if untyp.Obj.Kind() != constant.String { + Errorf("cannot convert untyped constant %v to <%v>", untyp, t) + } + val = UnescapeString(obj.ExactString()) + case r.Interface: + // this can happen too... for example in "var foo interface{} = 7" + // and it requites to convert the untyped constant to its default type. + // obviously, untyped constants can only implement empty interfaces + if t.NumMethod() == 0 { + t = untyp.DefaultType() + goto again + } + fallthrough + default: + Errorf("cannot convert untyped constant %v to <%v>", untyp, t) + return nil + } + v := r.ValueOf(val) + if v.Type() != t.ReflectType() { + val = v.Convert(t.ReflectType()) + } + return val +} + +// ================================= DefaultType ================================= + +// DefaultType returns the default type of an expression. +func (e *Expr) DefaultType() xr.Type { + if e.Untyped() { + return e.Lit.DefaultType() + } + return e.Type +} + +// DefaultType returns the default type of a constant. +func (lit *Lit) DefaultType() xr.Type { + switch x := lit.Value.(type) { + case UntypedLit: + return x.DefaultType() + default: + return lit.Type + } +} + +// DefaultType returns the default type of an untyped constant. +func (untyp *UntypedLit) DefaultType() xr.Type { + switch untyp.Kind { + case r.Bool, r.Int32, r.Int, r.Uint, r.Float64, r.Complex128, r.String: + if universe := untyp.Universe; universe == nil { + Errorf("UntypedLit.DefaultType(): malformed untyped constant %v, has nil Universe!", untyp) + return nil + } else { + return universe.BasicTypes[untyp.Kind] + } + + default: + Errorf("unexpected untyped constant %v, its default type is not known", untyp) + return nil + } +} + +// ======================= utilities for ConstTo and ConstToDefaultType ======================= + +// extractNumber converts the untyped constant src to an integer, float or complex. +// panics if src has different kind from constant.Int, constant.Float and constant.Complex +// the receiver (untyp UntypedLit) and the second argument (t reflect.Type) are only used to pretty-print the panic error message +func (untyp *UntypedLit) extractNumber(src constant.Value, t xr.Type) interface{} { + var n interface{} + var exact bool + switch src.Kind() { + case constant.Int: + n, exact = constant.Int64Val(src) + case constant.Float: + n, exact = constant.Float64Val(src) + case constant.Complex: + re := untyp.extractNumber(constant.Real(src), t) + im := untyp.extractNumber(constant.Imag(src), t) + rfloat := r.ValueOf(re).Convert(TypeOfFloat64).Float() + ifloat := r.ValueOf(im).Convert(TypeOfFloat64).Float() + n = complex(rfloat, ifloat) + exact = true + default: + Errorf("cannot convert untyped constant %v to <%v>", untyp, t) + return nil + } + // allow inexact conversions to float64 and complex128: + // floating point is intrinsically inexact, and Go compiler allows them too + if !exact && src.Kind() == constant.Int { + Errorf("untyped constant %v overflows <%v>", untyp, t) + return nil + } + return n +} + +// convertLiteralCheckOverflow converts a literal to type t and returns the converted value. +// panics if the conversion overflows the given type +func convertLiteralCheckOverflow(src interface{}, to xr.Type) interface{} { + v := r.ValueOf(src) + rto := to.ReflectType() + vto := ConvertValue(v, rto) + + k, kto := v.Kind(), vto.Kind() + if k == kto { + return vto.Interface() // no numeric conversion happened + } + c, cto := KindToCategory(k), KindToCategory(kto) + if cto == r.Int || cto == r.Uint { + if c == r.Float64 || c == r.Complex128 { + // float-to-integer conversion. check for truncation + t1 := ValueType(v) + vback := ConvertValue(vto, t1) + if src != vback.Interface() { + Errorf("constant %v truncated to %v", src, to) + return nil + } + } else { + // integer-to-integer conversion. convert back and compare the interfaces for overflows + t1 := ValueType(v) + vback := vto.Convert(t1) + if src != vback.Interface() { + Errorf("constant %v overflows %v", src, to) + return nil + } + } + } + return vto.Interface() +} + +// SetTypes sets the expression result types +func (e *Expr) SetTypes(tout []xr.Type) { + switch len(tout) { + case 0: + e.Type = nil + e.Types = tout + case 1: + e.Type = tout[0] + e.Types = nil + default: + e.Type = tout[0] + e.Types = tout + } +} + +/* used? + +// Set sets the expression value to the given (typed or untyped) constant +func (e *Expr) Set(x I) { + e.Lit.Set(x) + e.Types = nil + e.Fun = nil + e.IsNil = x == nil +} + +// Set sets the Lit to the given typed constant +func (lit *Lit) Set(x I) { + t := TypeOf(x) + if !isLiteral(x) { + Errorf("cannot set Lit to non-literal value %v <%v>", x, t) + } + lit.Type = t + lit.Value = x +} +*/ + +// To checks that an Expr can be used as (i.e. is assignable to) the given type, +// and converts Expr to the given type. +// panics if Expr has an incompatible type. +func (e *Expr) To(t xr.Type) { + if e.Const() { + e.ConstTo(t) + return + } + if xr.SameType(e.Type, t) { + return + } + if !e.Type.AssignableTo(t) { + Errorf("cannot use <%v> as <%v>", e.Type, t) + } + k := e.Type.Kind() + if IsOptimizedKind(k) { + if k == t.Kind() { + // same optimized representation + e.Type = t + return + } else if t.Kind() == r.Interface { + e.Fun = e.AsX1() + e.Type = t + return + } + Errorf("internal error: cannot use <%v> as <%v> (should not happen, <%v> is assignable to <%v>", e.Type, t, e.Type, t) + } + fun := e.AsX1() + rtype := t.ReflectType() + zero := r.Zero(rtype) + e.Fun = func(env *Env) r.Value { + v := fun(env) + if !v.IsValid() { + v = zero + } else if v.Type() != rtype { + v = v.Convert(rtype) + } + return v + } + e.Type = t +} + +// WithFun ensures that Expr.Fun is a closure that will return the expression result: +// +// if Expr is an untyped constant, WithFun converts the constant to its default type (panics on overflows), +// then sets Expr.Fun to a closure that will return such constant. +// if Expr is a typed constant, WithFun sets Expr.Fun to a closure that will return such constant. +// if Expr is not a constant, WithFun does nothing (Expr.Fun must be set already) +func (e *Expr) WithFun() I { + if !e.Const() { + return e.Fun + } + var fun I +again: + value := e.Value + v := r.ValueOf(value) + t := e.Type + if t == nil { + e.Fun = eNil + return eNil + } + if value == nil { + if !IsNillableKind(t.Kind()) { + Errorf("internal error: constant of type <%v> cannot be nil", t) + } + zero := r.Zero(t.ReflectType()) + fun = func(*Env) r.Value { + return zero + } + e.Fun = fun + return fun + } + rtactual := r.TypeOf(value) + rtexpected := t.ReflectType() + if rtexpected != rtactual { + if rtexpected.Kind() == r.Interface && rtactual.Implements(rtexpected) { + v = v.Convert(rtexpected) + } else { + Errorf("internal error: constant %v <%v> was assumed to have type <%v>", value, r.TypeOf(value), t.ReflectType()) + } + } + switch v.Kind() { + case r.Invalid: + fun = eNil + case r.Bool: + if v.Bool() { + fun = eTrue + } else { + fun = eFalse + } + case r.Int: + x := int(v.Int()) + fun = func(env *Env) int { + return x + } + case r.Int8: + x := int8(v.Int()) + fun = func(env *Env) int8 { + return x + } + case r.Int16: + x := int16(v.Int()) + fun = func(env *Env) int16 { + return x + } + case r.Int32: + x := int32(v.Int()) + fun = func(env *Env) int32 { + return x + } + case r.Int64: + x := v.Int() + fun = func(env *Env) int64 { + return x + } + case r.Uint: + x := uint(v.Uint()) + fun = func(env *Env) uint { + return x + } + case r.Uint8: + x := uint8(v.Uint()) + fun = func(env *Env) uint8 { + return x + } + case r.Uint16: + x := uint16(v.Uint()) + fun = func(env *Env) uint16 { + return x + } + case r.Uint32: + x := uint32(v.Uint()) + fun = func(env *Env) uint32 { + return x + } + case r.Uint64: + x := v.Uint() + fun = func(env *Env) uint64 { + return x + } + case r.Uintptr: + x := uintptr(v.Uint()) + fun = func(env *Env) uintptr { + return x + } + case r.Float32: + x := float32(v.Float()) + fun = func(env *Env) float32 { + return x + } + case r.Float64: + x := v.Float() + fun = func(env *Env) float64 { + return x + } + case r.Complex64: + x := complex64(v.Complex()) + fun = func(env *Env) complex64 { + return x + } + case r.Complex128: + x := v.Complex() + fun = func(env *Env) complex128 { + return x + } + case r.String: + x := v.String() + fun = func(env *Env) string { + return x + } + default: + if t.ReflectType() == rtypeOfUntypedLit { + e.ConstTo(e.DefaultType()) + goto again + } + fun = func(env *Env) r.Value { + return v + } + } + e.Fun = fun + return fun +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/macroexpand.go b/vendor/github.com/cosmos72/gomacro/fast/macroexpand.go new file mode 100644 index 0000000..f46bffa --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/macroexpand.go @@ -0,0 +1,293 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * macroexpand.go + * + * Created on Jun 09, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" + mt "github.com/cosmos72/gomacro/token" +) + +// MacroExpandNodeCodewalk traverses the whole AST tree using pre-order traversal, +// and replaces each node with the result of MacroExpandNode(node). +// It implements the macroexpansion phase +func (c *Comp) MacroExpandNodeCodewalk(in ast.Node) (out ast.Node, anythingExpanded bool) { + if in == nil { + return nil, false + } + var form Ast = ToAst(in) + form, anythingExpanded = c.MacroExpandCodewalk(form) + out = ToNode(form) + // if !anythingExpanded { + // c.Debugf("MacroExpand1() nothing to expand: %v <%v>", out, r.TypeOf(out)) + //} + return out, anythingExpanded +} + +// MacroExpandCodewalk traverses the whole AST tree using pre-order traversal, +// and replaces each node with the result of MacroExpand(node). +// It implements the macroexpansion phase +func (c *Comp) MacroExpandCodewalk(in Ast) (out Ast, anythingExpanded bool) { + return c.macroExpandCodewalk(in, 0) +} + +func (c *Comp) macroExpandCodewalk(in Ast, quasiquoteDepth int) (out Ast, anythingExpanded bool) { + if in == nil || in.Size() == 0 { + return in, false + } + debug := c.Options&OptDebugMacroExpand != 0 + if quasiquoteDepth <= 0 { + if debug { + c.Debugf("MacroExpandCodewalk: qq = %d, macroexpanding %v", quasiquoteDepth, in.Interface()) + } + in, anythingExpanded = c.MacroExpand(in) + } + if in != nil { + in = UnwrapTrivialAst(in) + } + if in == nil { + return in, anythingExpanded + } + saved := in + + if expr, ok := in.(UnaryExpr); ok { + isBlockWithinExpr := false + switch expr.X.Op { + case mt.MACRO: + isBlockWithinExpr = true + case mt.QUOTE: + // QUOTE prevents macroexpansion only if found outside any QUASIQUOTE + if quasiquoteDepth == 0 { + return saved, anythingExpanded + } + case mt.QUASIQUOTE: + // extract the body of QUASIQUOTE + quasiquoteDepth++ + case mt.UNQUOTE, mt.UNQUOTE_SPLICE: + // extract the body of UNQUOTE or UNQUOTE_SPLICE + quasiquoteDepth-- + default: + goto Recurse + } + inChild := UnwrapTrivialAst(in.Get(0).Get(1)) + outChild, expanded := c.macroExpandCodewalk(inChild, quasiquoteDepth) + if isBlockWithinExpr { + return outChild, expanded + } else { + out := in + if expanded { + out = MakeQuote2(expr, outChild.(AstWithNode)) + } + return out, expanded + } + } +Recurse: + if in == nil { + return saved, anythingExpanded + } + if debug { + c.Debugf("MacroExpandCodewalk: qq = %d, recursing on %v", quasiquoteDepth, in) + } + out = in.New() + n := in.Size() + if outSlice, canAppend := out.(AstWithSlice); canAppend { + // New() returns zero-length slice... resize it + for i := 0; i < n; i++ { + outSlice = outSlice.Append(nil) + } + out = outSlice + } + for i := 0; i < n; i++ { + child := UnwrapTrivialAst(in.Get(i)) + if child != nil { + expanded := false + if child.Size() != 0 { + child, expanded = c.macroExpandCodewalk(child, quasiquoteDepth) + } + if expanded { + anythingExpanded = true + } + } + out.Set(i, child) + } + if debug { + c.Debugf("MacroExpandCodewalk: qq = %d, expanded to %v", quasiquoteDepth, out) + } + return out, anythingExpanded +} + +// MacroExpandNode repeatedly invokes MacroExpandNode1 +// as long as the node represents a macro call. +// it returns the resulting node. +func (c *Comp) MacroExpandNode(in ast.Node) (out ast.Node, everExpanded bool) { + if in == nil { + return nil, false + } + inAst := ToAst(in) + outAst, everExpanded := c.MacroExpand(inAst) + out = ToNode(outAst) + // if !everExpanded { + // c.Debugf("MacroExpand1() not a macro: %v <%v>", out, r.TypeOf(out)) + //} + return out, everExpanded +} + +// MacroExpand repeatedly invokes MacroExpand +// as long as the node represents a macro call. +// it returns the resulting node. +func (c *Comp) MacroExpand(form Ast) (out Ast, everExpanded bool) { + var expanded bool + for { + form, expanded = c.MacroExpand1(form) + if !expanded { + return form, everExpanded + } + everExpanded = true + } +} + +// if node represents a macro call, MacroExpandNode1 executes it +// and returns the resulting node. +// Otherwise returns the node argument unchanged +func (c *Comp) MacroExpandNode1(in ast.Node) (out ast.Node, expanded bool) { + if in == nil { + return nil, false + } + var form Ast = ToAst(in) + form, expanded = c.MacroExpand1(form) + out = ToNode(form) + // if !expanded { + // c.Debugf("MacroExpandNode1: not a macro: %v <%v>", out, r.TypeOf(out)) + //} + return out, expanded +} + +func (c *Comp) extractMacroCall(form Ast) Macro { + form = UnwrapTrivialAst(form) + switch form := form.(type) { + case Ident: + sym := c.TryResolve(form.X.Name) + if sym != nil && sym.Bind.Desc.Class() == ConstBind && sym.Type.Kind() == r.Struct { + switch value := sym.Value.(type) { + case Macro: + if c.Options&OptDebugMacroExpand != 0 { + c.Debugf("MacroExpand1: found macro: %v", form.X.Name) + } + return value + } + } + } + return Macro{} +} + +// if node represents a macro call, MacroExpandNode1 executes it +// and returns the resulting node. +// Otherwise returns the node argument unchanged +func (c *Comp) MacroExpand1(in Ast) (out Ast, expanded bool) { + if in == nil { + return nil, false + } + // unwrap trivial nodes: DeclStmt, ParenExpr, ExprStmt + in = UnwrapTrivialAstKeepBlocks(in) + ins, ok := in.(AstWithSlice) + if !ok { + return in, false + } + debug := c.Options&OptDebugMacroExpand != 0 + if debug { + c.Debugf("MacroExpand1: found list: %v", ins.Interface()) + } + outs := ins.New().(AstWithSlice) + n := ins.Size() + + // since macro calls are sequences of statements, + // we must scan the whole list, + // consume it as needed by the macros we find, + // and build a new list accumulating the results of macroexpansion + for i := 0; i < n; i++ { + elt := ins.Get(i) + macro := c.extractMacroCall(elt) + if macro.closure == nil { + outs = outs.Append(elt) + continue + } + argn := macro.argNum + leftn := n - i - 1 + var args []r.Value + if argn > leftn { + args := make([]r.Value, leftn+1) // include the macro itself + for j := 0; j <= leftn; j++ { + args[j] = r.ValueOf(ins.Get(i + j).Interface()) + } + c.Errorf("not enough arguments for macroexpansion of %v: expecting %d, found %d", args, macro.argNum, leftn) + return in, false + } + if debug { + c.Debugf("MacroExpand1: found macro call %v at %d-th position of %v", elt.Interface(), i, ins.Interface()) + } + // wrap each ast.Node into a reflect.Value + args = make([]r.Value, argn) + for j := 0; j < argn; j++ { + args[j] = r.ValueOf(ToNode(ins.Get(i + j + 1))) + } + // invoke the macro + results := macro.closure(args) + if debug { + c.Debugf("MacroExpand1: macro expanded to: %v", results) + } + var out Ast + switch len(results) { + default: + args = append([]r.Value{r.ValueOf(elt.Interface())}, args...) + c.Warnf("macroexpansion returned %d values, using only the first one: %v %v returned %v", + len(results), args, results) + fallthrough + case 1: + any := results[0].Interface() + if any != nil { + out = AnyToAst(any, "macroexpansion") + break + } + fallthrough + case 0: + // do not insert nil nodes... they would wreak havok, convert them to the identifier nil + out = Ident{&ast.Ident{Name: "nil"}} + } + outs = outs.Append(out) + i += argn + expanded = true + } + if !expanded { + return in, false + } + if outs.Size() == 0 { + return EmptyStmt{&ast.EmptyStmt{}}, true + } + return UnwrapTrivialAst(outs), true +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/place_get.go b/vendor/github.com/cosmos72/gomacro/fast/place_get.go new file mode 100644 index 0000000..e981c1a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/place_get.go @@ -0,0 +1,194 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * place_get.go + * + * Created on Apr 25, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" +) + +func (c *Comp) GetPlace(place *Place) *Expr { + if place.IsVar() { + return c.Symbol(place.Var.AsSymbol()) + } + lhs := place.Fun + mapkey := place.MapKey + var ret I + if mapkey == nil { + switch place.Type.Kind() { + case r.Bool: + ret = func(env *Env) bool { + return lhs(env).Bool() + } + case r.Int: + ret = func(env *Env) int { + return int(lhs(env).Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + return int8(lhs(env).Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + return int16(lhs(env).Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + return int32(lhs(env).Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + return lhs(env).Int() + } + case r.Uint: + ret = func(env *Env) uint { + return uint(lhs(env).Uint()) + } + case r.Uint8: + ret = func(env *Env) uint8 { + return uint8(lhs(env).Uint()) + } + case r.Uint16: + ret = func(env *Env) uint16 { + return uint16(lhs(env).Uint()) + } + case r.Uint32: + ret = func(env *Env) uint32 { + return uint32(lhs(env).Uint()) + } + case r.Uint64: + ret = func(env *Env) uint64 { + return lhs(env).Uint() + } + case r.Uintptr: + ret = func(env *Env) uintptr { + return uintptr(lhs(env).Uint()) + } + case r.Float32: + ret = func(env *Env) float32 { + return float32(lhs(env).Float()) + } + case r.Float64: + ret = func(env *Env) float64 { + return lhs(env).Float() + } + case r.Complex64: + ret = func(env *Env) complex64 { + return complex64(lhs(env).Complex()) + } + case r.Complex128: + ret = func(env *Env) complex128 { + return lhs(env).Complex() + } + case r.String: + ret = func(env *Env) string { + return lhs(env).String() + } + default: + ret = lhs + } + } else { + switch place.Type.Kind() { + case r.Bool: + ret = func(env *Env) bool { + return lhs(env).MapIndex(mapkey(env)).Bool() + } + case r.Int: + ret = func(env *Env) int { + return int(lhs(env).MapIndex(mapkey(env)).Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + return int8(lhs(env).MapIndex(mapkey(env)).Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + return int16(lhs(env).MapIndex(mapkey(env)).Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + return int32(lhs(env).MapIndex(mapkey(env)).Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + return lhs(env).MapIndex(mapkey(env)).Int() + } + case r.Uint: + ret = func(env *Env) uint { + return uint(lhs(env).MapIndex(mapkey(env)).Uint()) + } + case r.Uint8: + ret = func(env *Env) uint8 { + return uint8(lhs(env).MapIndex(mapkey(env)).Uint()) + } + case r.Uint16: + ret = func(env *Env) uint16 { + return uint16(lhs(env).MapIndex(mapkey(env)).Uint()) + } + case r.Uint32: + ret = func(env *Env) uint32 { + return uint32(lhs(env).MapIndex(mapkey(env)).Uint()) + } + case r.Uint64: + ret = func(env *Env) uint64 { + return lhs(env).MapIndex(mapkey(env)).Uint() + } + case r.Uintptr: + ret = func(env *Env) uintptr { + return uintptr(lhs(env).MapIndex(mapkey(env)).Uint()) + } + case r.Float32: + ret = func(env *Env) float32 { + return float32(lhs(env).MapIndex(mapkey(env)).Float()) + } + case r.Float64: + ret = func(env *Env) float64 { + return lhs(env).MapIndex(mapkey(env)).Float() + } + case r.Complex64: + ret = func(env *Env) complex64 { + return complex64(lhs(env).MapIndex(mapkey(env)).Complex()) + } + case r.Complex128: + ret = func(env *Env) complex128 { + return lhs(env).MapIndex(mapkey(env)).Complex() + } + case r.String: + ret = func(env *Env) string { + return lhs(env).MapIndex(mapkey(env)).String() + } + default: + ret = func(env *Env) r.Value { + return lhs(env).MapIndex(mapkey(env)) + } + } + } + return exprFun(place.Type, ret) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/place_ops.go b/vendor/github.com/cosmos72/gomacro/fast/place_ops.go new file mode 100644 index 0000000..83c1dd0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/place_ops.go @@ -0,0 +1,6004 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * place_ops.go + * + * Created on Apr 25, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) placeAddConst(place *Place, val I) { + if isLiteralNumber(val, 0) || val == "" { + c.placeForSideEffects(place) + return + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + case r.Int: + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Float64: + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() + + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Complex128: + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() + + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.String: + val := v.String() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetString(lhs.String() + + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.ADD, place.Type) + + } + } else { + switch place.Type.Kind() { + case r.Int: + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + val := int64(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + val := uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + val := uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + val := uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + val := uint64(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + val := uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Float32: + val := float32(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float32 + + if v := lhs.MapIndex(key); v != Nil { + result = float32(v.Float()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Float64: + val := float64(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Float() + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Complex64: + val := complex64(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex64 + + if v := lhs.MapIndex(key); v != Nil { + result = complex64(v.Complex()) + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Complex128: + val := complex128(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex128 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Complex() + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.String: + val := string(v.String()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result string + + if v := lhs.MapIndex(key); v != Nil { + result = v.String() + } + result += val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.ADD, place.Type) + + } + } + + c.append(ret) + } +} +func (c *Comp) placeAddExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() + + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() + + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() + + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() + complex128(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex128: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() + + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) string: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetString(lhs.String() + + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.ADD, place.Type, funTypeOut(fun)) + + } + } else { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float32 + + if v := lhs.MapIndex(key); v != Nil { + result = float32(v.Float()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Float() + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex64 + + if v := lhs.MapIndex(key); v != Nil { + result = complex64(v.Complex()) + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex128: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex128 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Complex() + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) string: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result string + + if v := lhs.MapIndex(key); v != Nil { + result = v.String() + } + result += fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.ADD, place.Type, funTypeOut(fun)) + + } + } + + c.append(ret) +} +func (c *Comp) placeSubConst(place *Place, val I) { + if isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + case r.Int: + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Float64: + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() - + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Complex128: + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() - + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.SUB, place.Type) + + } + } else { + switch place.Type.Kind() { + case r.Int: + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + val := int64(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + val := uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + val := uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + val := uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + val := uint64(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + val := uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Float32: + val := float32(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float32 + + if v := lhs.MapIndex(key); v != Nil { + result = float32(v.Float()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Float64: + val := float64(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Float() + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Complex64: + val := complex64(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex64 + + if v := lhs.MapIndex(key); v != Nil { + result = complex64(v.Complex()) + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Complex128: + val := complex128(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex128 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Complex() + } + result -= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.SUB, place.Type) + + } + } + + c.append(ret) + } +} +func (c *Comp) placeSubExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() - + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() - + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() - + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() - complex128(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex128: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() - + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SUB, place.Type, funTypeOut(fun)) + + } + } else { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float32 + + if v := lhs.MapIndex(key); v != Nil { + result = float32(v.Float()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Float() + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex64 + + if v := lhs.MapIndex(key); v != Nil { + result = complex64(v.Complex()) + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex128: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex128 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Complex() + } + result -= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SUB, place.Type, funTypeOut(fun)) + + } + } + + c.append(ret) +} +func (c *Comp) placeMulConst(place *Place, val I) { + if isLiteralNumber(val, 0) { + + c.placeSetZero(place) + return + } else if isLiteralNumber(val, 1) { + c.placeForSideEffects(place) + return + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + case r.Int: + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Float64: + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() * + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Complex128: + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() * + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.MUL, place.Type) + + } + } else { + switch place.Type.Kind() { + case r.Int: + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + val := int64(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + val := uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + val := uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + val := uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + val := uint64(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + val := uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Float32: + val := float32(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float32 + + if v := lhs.MapIndex(key); v != Nil { + result = float32(v.Float()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Float64: + val := float64(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Float() + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Complex64: + val := complex64(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex64 + + if v := lhs.MapIndex(key); v != Nil { + result = complex64(v.Complex()) + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Complex128: + val := complex128(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex128 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Complex() + } + result *= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.MUL, place.Type) + + } + } + + c.append(ret) + } +} +func (c *Comp) placeMulExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() * + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() * + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() * + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() * complex128(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex128: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.MUL, place.Type, funTypeOut(fun)) + + } + } else { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float32 + + if v := lhs.MapIndex(key); v != Nil { + result = float32(v.Float()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Float() + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex64 + + if v := lhs.MapIndex(key); v != Nil { + result = complex64(v.Complex()) + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex128: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex128 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Complex() + } + result *= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.MUL, place.Type, funTypeOut(fun)) + + } + } + + c.append(ret) +} +func (c *Comp) placeQuoConst(place *Place, val I) { + if c.placeQuoPow2(place, val) { + return + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + case r.Int: + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Float64: + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() / + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Complex128: + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() / + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.QUO, place.Type) + + } + } else { + switch place.Type.Kind() { + case r.Int: + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + val := int64(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + val := uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + val := uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + val := uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + val := uint64(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + val := uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Float32: + val := float32(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float32 + + if v := lhs.MapIndex(key); v != Nil { + result = float32(v.Float()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Float64: + val := float64(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Float() + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Complex64: + val := complex64(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex64 + + if v := lhs.MapIndex(key); v != Nil { + result = complex64(v.Complex()) + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Complex128: + val := complex128(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex128 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Complex() + } + result /= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.QUO, place.Type) + + } + } + + c.append(ret) + } +} +func (c *Comp) placeQuoExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() / + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() / + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetFloat(lhs.Float() / + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() / complex128(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex128: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.QUO, place.Type, funTypeOut(fun)) + + } + } else { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float32 + + if v := lhs.MapIndex(key); v != Nil { + result = float32(v.Float()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result float64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Float() + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex64 + + if v := lhs.MapIndex(key); v != Nil { + result = complex64(v.Complex()) + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex128: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result complex128 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Complex() + } + result /= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.QUO, place.Type, funTypeOut(fun)) + + } + } + + c.append(ret) +} +func (c *Comp) placeRemConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, place.Type) + return + } else if isLiteralNumber(val, 1) { + + c.placeSetZero(place) + return + } + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + case r.Int: + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.REM, place.Type) + + } + } else { + switch place.Type.Kind() { + case r.Int: + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + val := int64(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + val := uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + val := uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + val := uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + val := uint64(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + val := uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result %= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.REM, place.Type) + + } + } + + c.append(ret) + } +} +func (c *Comp) placeRemExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() % + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() % + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.REM, place.Type, funTypeOut(fun)) + + } + } else { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result %= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.REM, place.Type, funTypeOut(fun)) + + } + } + + c.append(ret) +} +func (c *Comp) placeAndConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { + c.placeForSideEffects(place) + return + } else if isLiteralNumber(val, 0) { + + c.placeSetZero(place) + return + } + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + case r.Int: + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND, place.Type) + + } + } else { + switch place.Type.Kind() { + case r.Int: + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + val := int64(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + val := uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + val := uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + val := uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + val := uint64(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + val := uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result &= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND, place.Type) + + } + } + + c.append(ret) + } +} +func (c *Comp) placeAndExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() & + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() & + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.AND, place.Type, funTypeOut(fun)) + + } + } else { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result &= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.AND, place.Type, funTypeOut(fun)) + + } + } + + c.append(ret) +} +func (c *Comp) placeOrConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + case r.Int: + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.OR, place.Type) + + } + } else { + switch place.Type.Kind() { + case r.Int: + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + val := int64(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + val := uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + val := uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + val := uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + val := uint64(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + val := uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result |= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.OR, place.Type) + + } + } + + c.append(ret) + } +} +func (c *Comp) placeOrExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() | + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() | + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.OR, place.Type, funTypeOut(fun)) + + } + } else { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result |= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.OR, place.Type, funTypeOut(fun)) + + } + } + + c.append(ret) +} +func (c *Comp) placeXorConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + case r.Int: + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.XOR, place.Type) + + } + } else { + switch place.Type.Kind() { + case r.Int: + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + val := int64(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + val := uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + val := uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + val := uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + val := uint64(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + val := uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result ^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.XOR, place.Type) + + } + } + + c.append(ret) + } +} +func (c *Comp) placeXorExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() ^ + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() ^ + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.XOR, place.Type, funTypeOut(fun)) + + } + } else { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result ^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.XOR, place.Type, funTypeOut(fun)) + + } + } + + c.append(ret) +} +func (c *Comp) placeAndnotConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { + + c.placeSetZero(place) + return + } else if isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + case r.Int: + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND_NOT, place.Type) + + } + } else { + switch place.Type.Kind() { + case r.Int: + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + val := int64(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + val := uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + val := uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + val := uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + val := uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + val := uint64(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + val := uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result &^= val + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND_NOT, place.Type) + + } + } + + c.append(ret) + } +} +func (c *Comp) placeAndnotExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetInt(lhs.Int() &^ + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() &^ + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.AND_NOT, place.Type, funTypeOut(fun)) + + } + } else { + switch fun := fun.(type) { + case func(*Env) int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int + + if v := lhs.MapIndex(key); v != Nil { + result = int(v.Int()) + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int8 + + if v := lhs.MapIndex(key); v != Nil { + result = int8(v.Int()) + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int16 + + if v := lhs.MapIndex(key); v != Nil { + result = int16(v.Int()) + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int32 + + if v := lhs.MapIndex(key); v != Nil { + result = int32(v.Int()) + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result int64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Int() + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint + + if v := lhs.MapIndex(key); v != Nil { + result = uint(v.Uint()) + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint8 + + if v := lhs.MapIndex(key); v != Nil { + result = uint8(v.Uint()) + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint16 + + if v := lhs.MapIndex(key); v != Nil { + result = uint16(v.Uint()) + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint32 + + if v := lhs.MapIndex(key); v != Nil { + result = uint32(v.Uint()) + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uint64 + + if v := lhs.MapIndex(key); v != Nil { + result = v.Uint() + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + var result uintptr + + if v := lhs.MapIndex(key); v != Nil { + result = uintptr(v.Uint()) + } + result &^= fun(env) + + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.AND_NOT, place.Type, funTypeOut(fun)) + + } + } + + c.append(ret) +} +func (c *Comp) SetPlace(place *Place, op token.Token, init *Expr) { + if place.IsVar() { + c.SetVar(&place.Var, op, init) + return + } + t := place.Type + if init.Const() { + init.ConstTo(t) + } else if init.Type == nil || !init.Type.AssignableTo(t) { + c.Errorf("incompatible types in assignment: <%v> %s <%v>", t, op, init.Type) + return + } + rt := t.ReflectType() + if init.Const() { + val := init.Value + v := r.ValueOf(val) + if v == None || v == Nil { + v = r.Zero(rt) + val = v.Interface() + } else if v.Type() != rt { + v = v.Convert(rt) + val = v.Interface() + } + switch op { + case token.ASSIGN: + c.placeSetConst(place, val) + case token.ADD, token.ADD_ASSIGN: + c.placeAddConst(place, val) + case token.SUB, token.SUB_ASSIGN: + c.placeSubConst(place, val) + case token.MUL, token.MUL_ASSIGN: + c.placeMulConst(place, val) + case token.QUO, token.QUO_ASSIGN: + c.placeQuoConst(place, val) + case token.REM, token.REM_ASSIGN: + c.placeRemConst(place, val) + case token.AND, token.AND_ASSIGN: + c.placeAndConst(place, val) + case token.OR, token.OR_ASSIGN: + c.placeOrConst(place, val) + case token.XOR, token.XOR_ASSIGN: + c.placeAndConst(place, val) + case token.AND_NOT, token.AND_NOT_ASSIGN: + c.placeAndnotConst(place, val) + default: + c.Errorf("operator %s is not implemented", op) + } + } else { + fun := init.Fun + switch op { + case token.ASSIGN: + c.placeSetExpr(place, fun) + case token.ADD, token.ADD_ASSIGN: + c.placeAddExpr(place, fun) + case token.SUB, token.SUB_ASSIGN: + c.placeSubExpr(place, fun) + case token.MUL, token.MUL_ASSIGN: + c.placeMulExpr(place, fun) + case token.QUO, token.QUO_ASSIGN: + c.placeQuoExpr(place, fun) + case token.REM, token.REM_ASSIGN: + c.placeRemExpr(place, fun) + case token.AND, token.AND_ASSIGN: + c.placeAndExpr(place, fun) + case token.OR, token.OR_ASSIGN: + c.placeOrExpr(place, fun) + case token.XOR, token.XOR_ASSIGN: + c.placeAndExpr(place, fun) + case token.AND_NOT, token.AND_NOT_ASSIGN: + c.placeAndnotExpr(place, fun) + default: + c.Errorf("operator %s is not implemented", op) + } + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/place_ops.gomacro b/vendor/github.com/cosmos72/gomacro/fast/place_ops.gomacro new file mode 100644 index 0000000..dc790cf --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/place_ops.gomacro @@ -0,0 +1,566 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * place_ops.go + * + * Created on Apr 25, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + + +:import ( + "fmt" + "go/ast" + "go/token" + r "reflect" +) + + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makeupcase(node ast.Node, name string) ast.Node { + // go/ast.SelectorExpr requires the foo in x.foo to be an *ast.Ident, cannot unquote there + kind := ~"{~,node . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(name)} + return kind +} + +:func makekind(typ ast.Node) ast.Node { + name := EvalType(typ).Name() + return makeupcase(~'r, name) +} + +:func makeunwrapvalue(node ast.Node, typ ast.Node) ast.Node { + name := EvalType(typ).Name() + + // remove final digits from name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(name) != 0 { + ch := name[len(name)-1] + if ch < '0' || ch > '9' { + break + } + name = name[0:len(name)-1] + } + if name == "uintptr" { + name = "uint" // use reflect.Value.Uint() + } + + return makeupcase(node, name) +} + +:func op_to_assign(op token.Token) token.Token { + switch op { + case token.ADD: + op = token.ADD_ASSIGN + case token.SUB: + op = token.SUB_ASSIGN + case token.MUL: + op = token.MUL_ASSIGN + case token.QUO: + op = token.QUO_ASSIGN + case token.REM: + op = token.REM_ASSIGN + case token.AND: + op = token.AND_ASSIGN + case token.OR: + op = token.OR_ASSIGN + case token.XOR: + op = token.XOR_ASSIGN + case token.SHL: + op = token.SHL_ASSIGN + case token.SHR: + op = token.SHR_ASSIGN + case token.AND_NOT: + op = token.AND_NOT_ASSIGN + default: + panic(fmt.Sprintf("cannot convert token %s to assignment token", op)) + } + return op +} + +:func fsetplace(opnode, typ, expr ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + var t r.Type = EvalType(typ) + var bind ast.Node + var result *ast.BinaryExpr + op := Eval(opnode).(token.Token) + opset := op_to_assign(op) + + switch t.Kind() { + case r.Int, r.Int8, r.Int16, r.Int32: + result = ~"{lhs.Int() + int64(~,expr)} + result.Op = op + bind = ~"{lhs.SetInt(~,result)} + case r.Int64: + result = ~"{lhs.Int() + ~,expr} + result.Op = op + bind = ~"{lhs.SetInt(~,result)} + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uintptr: + result = ~"{lhs.Uint() + uint64(~,expr)} + result.Op = op + bind = ~"{lhs.SetUint(~,result)} + case r.Uint64: + result = ~"{lhs.Uint() + ~,expr} + result.Op = op + bind = ~"{lhs.SetUint(~,result)} + case r.Float32: + result = ~"{lhs.Float() + float64(~,expr)} + result.Op = op + bind = ~"{lhs.SetFloat(~,result)} + case r.Float64: + result = ~"{lhs.Float() + ~,expr} + result.Op = op + bind = ~"{lhs.SetFloat(~,result)} + case r.Complex64: + result = ~"{lhs.Complex() + complex128(~,expr)} + result.Op = op + bind = ~"{lhs.SetComplex(~,result)} + case r.Complex128: + result = ~"{lhs.Complex() + ~,expr} + result.Op = op + bind = ~"{lhs.SetComplex(~,result)} + case r.String: + result = ~"{lhs.String() + ~,expr} + result.Op = op + bind = ~"{lhs.SetString(~,result)} + default: + panic("unimplemented: <" + t.String() + "> " + opset.String() + " expression" ) + } + + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } +} + +:func fsetmap(opnode, typ, expr ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + var t r.Type = EvalType(typ) + var curr *ast.BlockStmt + var result *ast.AssignStmt = ~"{result += ~,expr} + op := Eval(opnode).(token.Token) + opset := op_to_assign(op) + result.Tok = opset + + switch t.Kind() { + case r.Int, r.Int8, r.Int16, r.Int32: + curr = ~"{var result ~,typ; if v := lhs.MapIndex(key); v != Nil { result = ~,typ(v.Int()) }} + case r.Int64: + curr = ~"{var result ~,typ; if v := lhs.MapIndex(key); v != Nil { result = v.Int() }} + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uintptr: + curr = ~"{var result ~,typ; if v := lhs.MapIndex(key); v != Nil { result = ~,typ(v.Uint()) }} + case r.Uint64: + curr = ~"{var result ~,typ; if v := lhs.MapIndex(key); v != Nil { result = v.Uint() }} + case r.Float32: + curr = ~"{var result ~,typ; if v := lhs.MapIndex(key); v != Nil { result = ~,typ(v.Float()) }} + case r.Float64: + curr = ~"{var result ~,typ; if v := lhs.MapIndex(key); v != Nil { result = v.Float() }} + case r.Complex64: + curr = ~"{var result ~,typ; if v := lhs.MapIndex(key); v != Nil { result = ~,typ(v.Complex()) }} + case r.Complex128: + curr = ~"{var result ~,typ; if v := lhs.MapIndex(key); v != Nil { result = v.Complex() }} + case r.String: + curr = ~"{var result ~,typ; if v := lhs.MapIndex(key); v != Nil { result = v.String() }} + default: + panic("unimplemented: <" + t.String() + "> " + opset.String() + " expression" ) + } + + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + ~,@curr + ~,result + lhs.SetMapIndex(key, r.ValueOf(result)) + env.IP++ + return env.Code[env.IP], env + } + } +} + +:macro setplace_const(opnode, typ ast.Node) ast.Node { + return fsetplace(opnode, typ, ~'val) +} + +:macro setplace_expr(opnode, typ ast.Node) ast.Node { + return fsetplace(opnode, typ, ~'{fun(env)}) +} + +:macro setmap_const(opnode, typ ast.Node) ast.Node { + return fsetmap(opnode, typ, ~'val) +} + +:macro setmap_expr(opnode, typ ast.Node) ast.Node { + return fsetmap(opnode, typ, ~'{fun(env)}) +} + + +:func list_types(typelist []ast.Stmt) []ast.Node { + rets := make([]ast.Node, 0, len(typelist)) + for _, typ := range typelist { + t := EvalType(typ) + if t == nil { + rets = append(rets, ~'nil) + } else if t.Kind() == r.Int { + rets = append(rets, ~'int, ~'int8, ~'int16, ~'int32, ~'int64) + } else if t.Kind() == r.Uint { + rets = append(rets, ~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr) + } else if t.Kind() == r.Float64 { + rets = append(rets, ~'float32, ~'float64) + } else if t.Kind() == r.Complex128 { + rets = append(rets, ~'complex64, ~'complex128) + } else { + rets = append(rets, typ) + } + } + return rets +} + +:macro setplaces_const(opnode, types ast.Node) ast.Node { + // separate cases for int8, uint16... not needed + typelist := types.(*ast.BlockStmt).List + caselist := make([]ast.Stmt, len(typelist)) + for i, typ := range typelist { + if EvalType(typ) == nil { + caselist[i] = ~"{default: c.Errorf(`invalid operator %s= on <%v>`, ~,opnode, place.Type)} + } else { + kind := makekind(typ) + unwrap := makeunwrapvalue(~'v, typ) + caselist[i] = ~"{case ~,kind: + val := ~,unwrap () + setplace_const; ~,opnode; ~,typ + } + } + } + // separate cases for int8, uint16... are needed + maptypelist := list_types(types.(*ast.BlockStmt).List) + mapcaselist := make([]ast.Stmt, len(maptypelist)) + for i, typ := range maptypelist { + if EvalType(typ) == nil { + mapcaselist[i] = ~"{default: c.Errorf(`invalid operator %s= on <%v>`, ~,opnode, place.Type)} + } else { + kind := makekind(typ) + unwrap := makeunwrapvalue(~'v, typ) + mapcaselist[i] = ~"{case ~,kind: + val := ~,typ( ~,unwrap () ) + setmap_const; ~,opnode; ~,typ + } + } + } + return ~"{ + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + v := r.ValueOf(val) + + if keyfun == nil { + switch KindToCategory(place.Type.Kind()) { + ~,@caselist + } + } else { + switch place.Type.Kind() { + ~,@mapcaselist + } + } + c.append(ret) + } +} + +:macro setplaces_expr(opnode, types ast.Node) ast.Node { + typelist := list_types(types.(*ast.BlockStmt).List) + caselist := make([]ast.Stmt, len(typelist)) + mapcaselist := make([]ast.Stmt, len(typelist)) + for i, typ := range typelist { + if EvalType(typ) == nil { + caselist[i] = ~"{default: c.Errorf(`invalid operator %s= between <%v> and <%v>`, ~,opnode, place.Type, funTypeOut(fun))} + mapcaselist[i] = caselist[i] + } else { + caselist[i] = ~"{~typecase func(*Env) ~,typ: + setplace_expr; ~,opnode; ~,typ + } + mapcaselist[i] = ~"{~typecase func(*Env) ~,typ: + setmap_expr; ~,opnode; ~,typ + } + } + } + return ~"{ + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + if keyfun == nil { + switch fun := fun.(type) { + ~,@caselist + } + } else { + switch fun := fun.(type) { + ~,@mapcaselist + } + } + c.append(ret) + } +} + +// varAddConst compiles 'place += constant' +func (c *Comp) placeAddConst(place *Place, val I) { + if isLiteralNumber(val, 0) || val == "" { + c.placeForSideEffects(place) + return + } + setplaces_const; token.ADD; {int; uint; float64; complex128; string; nil} +} + +// varAddExpr compiles 'place += expression' +func (c *Comp) placeAddExpr(place *Place, fun I) { + setplaces_expr; token.ADD; {int; uint; float64; complex128; string; nil} +} + +// placeSubConst compiles 'place -= constant' +func (c *Comp) placeSubConst(place *Place, val I) { + if isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + setplaces_const; token.SUB; {int; uint; float64; complex128; nil} +} + +// placeSubExpr compiles 'place -= expression' +func (c *Comp) placeSubExpr(place *Place, fun I) { + setplaces_expr; token.SUB; {int; uint; float64; complex128; nil} +} + +// placeMulConst compiles 'place *= constant' +func (c *Comp) placeMulConst(place *Place, val I) { + if isLiteralNumber(val, 0) { + // placeiable *= 0 is equivalent to place = 0 + c.placeSetZero(place) + return + } else if isLiteralNumber(val, 1) { + c.placeForSideEffects(place) + return + } + setplaces_const; token.MUL; {int; uint; float64; complex128; nil} +} + +// placeMulExpr compiles 'place *= expression' +func (c *Comp) placeMulExpr(place *Place, fun I) { + setplaces_expr; token.MUL; {int; uint; float64; complex128; nil} +} + +// placeQuoConst compiles 'place /= constant' +func (c *Comp) placeQuoConst(place *Place, val I) { + if c.placeQuoPow2(place, val) { + return + } + setplaces_const; token.QUO; {int; uint; float64; complex128; nil} +} + +// placeQuoExpr compiles 'place /= expression' +func (c *Comp) placeQuoExpr(place *Place, fun I) { + setplaces_expr; token.QUO; {int; uint; float64; complex128; nil} +} + +// placeRemConst compiles 'place %= constant' +func (c *Comp) placeRemConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, place.Type) + return + } else if isLiteralNumber(val, 1) { + // place %= 1 is equivalent to place = 0 + c.placeSetZero(place) + return + } + } + setplaces_const; token.REM; {int; uint; nil} +} + +// placeRemExpr compiles 'place %= expression' +func (c *Comp) placeRemExpr(place *Place, fun I) { + setplaces_expr; token.REM; {int; uint; nil} +} + +// placeAndConst compiles 'place &= constant' +func (c *Comp) placeAndConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { + c.placeForSideEffects(place) + return + } else if isLiteralNumber(val, 0) { + // place &= 0 is equivalent to place = 0 + c.placeSetZero(place) + return + } + } + setplaces_const; token.AND; {int; uint; nil} +} + +// placeAndExpr compiles 'place &= expression' +func (c *Comp) placeAndExpr(place *Place, fun I) { + setplaces_expr; token.AND; {int; uint; nil} +} + +// placeOrConst compiles 'place |= constant' +func (c *Comp) placeOrConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + setplaces_const; token.OR; {int; uint; nil} +} + +// placeOrExpr compiles 'place |= expression' +func (c *Comp) placeOrExpr(place *Place, fun I) { + setplaces_expr; token.OR; {int; uint; nil} +} + +// placeXorConst compiles 'place ^= constant' +func (c *Comp) placeXorConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + setplaces_const; token.XOR; {int; uint; nil} +} + +// placeXorExpr compiles 'place ^= expression' +func (c *Comp) placeXorExpr(place *Place, fun I) { + setplaces_expr; token.XOR; {int; uint; nil} +} + +// placeAndnotConst compiles 'place &^= constant' +func (c *Comp) placeAndnotConst(place *Place, val I) { + if IsCategory(place.Type.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { + // place &^= -1 is equivalent to place = 0 + c.placeSetZero(place) + return + } else if isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + } + setplaces_const; token.AND_NOT; {int; uint; nil} +} + +// varAndnotExpr compiles 'place &^= expression' +func (c *Comp) placeAndnotExpr(place *Place, fun I) { + setplaces_expr; token.AND_NOT; {int; uint; nil} +} + + +// SetPlace compiles an assignment to a place: +// 'place op constant' and 'place op expression' +func (c *Comp) SetPlace(place *Place, op token.Token, init *Expr) { + if place.IsVar() { + c.SetVar(&place.Var, op, init) + return + } + t := place.Type + if init.Const() { + init.ConstTo(t) + } else if init.Type == nil || !init.Type.AssignableTo(t) { + c.Errorf("incompatible types in assignment: <%v> %s <%v>", t, op, init.Type) + return + } + rt := t.ReflectType() + if init.Const() { + val := init.Value + v := r.ValueOf(val) + if v == None || v == Nil { + v = r.Zero(rt) + val = v.Interface() + } else if v.Type() != rt { + v = v.Convert(rt) + val = v.Interface() + } + switch op { + case token.ASSIGN: + c.placeSetConst(place, val) + case token.ADD, token.ADD_ASSIGN: + c.placeAddConst(place, val) + case token.SUB, token.SUB_ASSIGN: + c.placeSubConst(place, val) + case token.MUL, token.MUL_ASSIGN: + c.placeMulConst(place, val) + case token.QUO, token.QUO_ASSIGN: + c.placeQuoConst(place, val) + case token.REM, token.REM_ASSIGN: + c.placeRemConst(place, val) + case token.AND, token.AND_ASSIGN: + c.placeAndConst(place, val) + case token.OR, token.OR_ASSIGN: + c.placeOrConst(place, val) + case token.XOR, token.XOR_ASSIGN: + c.placeAndConst(place, val) + case token.AND_NOT, token.AND_NOT_ASSIGN: + c.placeAndnotConst(place, val) + default: + c.Errorf("operator %s is not implemented", op) + } + } else { + fun := init.Fun + switch op { + case token.ASSIGN: + c.placeSetExpr(place, fun) + case token.ADD, token.ADD_ASSIGN: + c.placeAddExpr(place, fun) + case token.SUB, token.SUB_ASSIGN: + c.placeSubExpr(place, fun) + case token.MUL, token.MUL_ASSIGN: + c.placeMulExpr(place, fun) + case token.QUO, token.QUO_ASSIGN: + c.placeQuoExpr(place, fun) + case token.REM, token.REM_ASSIGN: + c.placeRemExpr(place, fun) + case token.AND, token.AND_ASSIGN: + c.placeAndExpr(place, fun) + case token.OR, token.OR_ASSIGN: + c.placeOrExpr(place, fun) + case token.XOR, token.XOR_ASSIGN: + c.placeAndExpr(place, fun) + case token.AND_NOT, token.AND_NOT_ASSIGN: + c.placeAndnotExpr(place, fun) + default: + c.Errorf("operator %s is not implemented", op) + } + } +} + + diff --git a/vendor/github.com/cosmos72/gomacro/fast/place_set.go b/vendor/github.com/cosmos72/gomacro/fast/place_set.go new file mode 100644 index 0000000..a845a42 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/place_set.go @@ -0,0 +1,439 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * place_set.go + * + * Created on Apr 25, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) placeSetZero(place *Place) { + rt := place.Type.ReflectType() + zero := r.Zero(rt).Interface() + c.placeSetConst(place, zero) +} +func (c *Comp) placeSetConst(place *Place, val I) { + rt := place.Type.ReflectType() + v := r.ValueOf(val) + if ValueType(v) == nil { + v = r.Zero(rt) + } else { + v = v.Convert(rt) + } + + lhs := place.Fun + var ret Stmt + if mapkey := place.MapKey; mapkey != nil { + ret = func(env *Env) (Stmt, *Env) { + + obj := lhs(env) + key := mapkey(env) + obj.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + c.append(ret) + return + } + switch KindToCategory(rt.Kind()) { + case r.Bool: + + { + val := v.Bool() + + ret = func(env *Env) (Stmt, *Env) { + lhs(env).SetBool(val) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + lhs(env).SetInt(val) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + + { + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + lhs(env).SetUint(val) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float64: + + { + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + lhs(env).SetFloat(val) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex128: + + { + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + lhs(env).SetComplex(val) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.String: + + { + val := v.String() + + ret = func(env *Env) (Stmt, *Env) { + lhs(env).SetString(val) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + { + val := v + + ret = func(env *Env) (Stmt, *Env) { + lhs(env).Set(val) + + env.IP++ + return env.Code[env.IP], env + } + } + } + + c.append(ret) +} +func (c *Comp) placeSetExpr(place *Place, fun I) { + rt := place.Type.ReflectType() + lhs := place.Fun + var ret Stmt + if mapkey := place.MapKey; mapkey != nil { + rhs := funAsX1(fun, nil) + ret = func(env *Env) (Stmt, *Env) { + + obj := lhs(env) + key := mapkey(env) + val := rhs(env) + if val.Type() != rt { + val = val.Convert(rt) + } + + obj.SetMapIndex(key, val) + env.IP++ + return env.Code[env.IP], env + } + c.append(ret) + return + } + switch rt.Kind() { + case r.Bool: + + { + rhs := fun.(func(*Env) bool) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetBool(value) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + rhs := fun.(func(*Env) int) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetInt(int64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + + { + rhs := fun.(func(*Env) int8) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetInt(int64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + + { + rhs := fun.(func(*Env) int16) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetInt(int64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + + { + rhs := fun.(func(*Env) int32) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetInt(int64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + + { + rhs := fun.(func(*Env) int64) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetInt(int64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + + { + rhs := fun.(func(*Env) uint) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetUint(uint64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + + { + rhs := fun.(func(*Env) uint8) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetUint(uint64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + + { + rhs := fun.(func(*Env) uint16) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetUint(uint64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + + { + rhs := fun.(func(*Env) uint32) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetUint(uint64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + + { + rhs := fun.(func(*Env) uint64) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetUint(uint64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + + { + rhs := fun.(func(*Env) uintptr) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetUint(uint64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float32: + + { + rhs := fun.(func(*Env) float32) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetFloat(float64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float64: + + { + rhs := fun.(func(*Env) float64) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetFloat(float64(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex64: + + { + rhs := fun.(func(*Env) complex64) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetComplex(complex128(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex128: + + { + rhs := fun.(func(*Env) complex128) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetComplex(complex128(value)) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.String: + + { + rhs := fun.(func(*Env) string) + + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + place.SetString(value) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + { + rhs := funAsX1(fun, nil) + + zero := r.Zero(rt) + ret = func(env *Env) (Stmt, *Env) { + place := lhs(env) + value := rhs(env) + if value == Nil || value == None { + value = zero + } else if value.Type() != rt { + value = value.Convert(rt) + } + + place.Set(value) + + env.IP++ + return env.Code[env.IP], env + } + } + } + c.append(ret) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/place_set.gomacro b/vendor/github.com/cosmos72/gomacro/fast/place_set.gomacro new file mode 100644 index 0000000..49491b6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/place_set.gomacro @@ -0,0 +1,269 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * place_set.go + * + * Created on Apr 25, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +:import ( + "go/ast" + r "reflect" +) + +:func fsetplace_const(typ ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + var t r.Type = EvalType(typ) + + var decl, bind, mapbind ast.Node + + if t == nil { + decl = ~'{val := v} + bind = ~'{lhs(env).Set(val)} + } else { + switch t.Kind() { + case r.Bool: + decl = ~'{val := v.Bool()} + bind = ~'{lhs(env).SetBool(val)} + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + decl = ~'{val := v.Int()} + bind = ~'{lhs(env).SetInt(val)} + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + decl = ~'{val := v.Uint()} + bind = ~'{lhs(env).SetUint(val)} + case r.Float32, r.Float64: + decl = ~'{val := v.Float()} + bind = ~'{lhs(env).SetFloat(val)} + case r.Complex64, r.Complex128: + decl = ~'{val := v.Complex()} + bind = ~'{lhs(env).SetComplex(val)} + case r.String: + decl = ~'{val := v.String()} + bind = ~'{lhs(env).SetString(val)} + default: + panic("fsetplace_const unimplemented for type " + t.String()) + } + } + + return ~"{ + ~,decl + ret = func(env *Env) (Stmt, *Env) { + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } +} + +:func fsetplace_expr(typ ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + var t r.Type = EvalType(typ) + + var decl, bind ast.Node + + if t == nil { + decl = ~'{rhs := funAsX1(fun, nil)} + bind = ~'{ + // force left-to-right evaluation order + place := lhs(env) + value := rhs(env) + if value == Nil || value == None { + value = zero + } else if value.Type() != rt { + value = value.Convert(rt) + } + place.Set(value) + } + return ~"{ + ~,decl + zero := r.Zero(rt) + ret = func(env *Env) (Stmt, *Env) { + ~,@bind + env.IP++ + return env.Code[env.IP], env + } + } + } + + decl = ~"{rhs := fun.(func (*Env) ~,typ)} + switch t.Kind() { + case r.Bool: + bind = ~'{ + place := lhs(env) + value := rhs(env) + place.SetBool(value) + } + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + bind = ~'{ + place := lhs(env) + value := rhs(env) + place.SetInt(int64(value)) + } + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + bind = ~'{ + place := lhs(env) + value := rhs(env) + place.SetUint(uint64(value)) + } + case r.Float32, r.Float64: + bind = ~'{ + place := lhs(env) + value := rhs(env) + place.SetFloat(float64(value)) + } + case r.Complex64, r.Complex128: + bind = ~'{ + place := lhs(env) + value := rhs(env) + place.SetComplex(complex128(value)) + } + case r.String: + bind = ~'{ + place := lhs(env) + value := rhs(env) + place.SetString(value) + } + default: + panic("fsetplace_expr unimplemented for type " + t.String()) + } + return ~"{ + ~,decl + ret = func(env *Env) (Stmt, *Env) { + ~,@bind + env.IP++ + return env.Code[env.IP], env + } + } +} + +:macro setplace_const(typ ast.Node) ast.Node { + return fsetplace_const(typ) +} + +:macro setplace_expr(typ ast.Node) ast.Node { + return fsetplace_expr(typ) +} + +:macro setplaces_const() ast.Node { + return ~"{ + switch KindToCategory(rt.Kind()) { + case r.Bool: setplace_const; bool + case r.Int: setplace_const; int + case r.Uint: setplace_const; uint + case r.Float64: setplace_const; float64 + case r.Complex128: setplace_const; complex128 + case r.String: setplace_const; string + default: setplace_const; nil + } + } +} + +:macro setplaces_expr() ast.Node { + return ~"{ + switch rt.Kind() { + case r.Bool: setplace_expr; bool; + case r.Int: setplace_expr; int; + case r.Int8: setplace_expr; int8; + case r.Int16: setplace_expr; int16; + case r.Int32: setplace_expr; int32; + case r.Int64: setplace_expr; int64; + case r.Uint: setplace_expr; uint; + case r.Uint8: setplace_expr; uint8; + case r.Uint16: setplace_expr; uint16; + case r.Uint32: setplace_expr; uint32; + case r.Uint64: setplace_expr; uint64; + case r.Uintptr: setplace_expr; uintptr; + case r.Float32: setplace_expr; float32; + case r.Float64: setplace_expr; float64; + case r.Complex64: setplace_expr; complex64; + case r.Complex128: setplace_expr; complex128; + case r.String: setplace_expr; string; + default: setplace_expr; nil; + } + } +} + +// placeSetZero compiles 'place = 0' +func (c *Comp) placeSetZero(place *Place) { + rt := place.Type.ReflectType() + zero := r.Zero(rt).Interface() + c.placeSetConst(place, zero) +} + +// placeSetConst compiles 'place = constant' +func (c *Comp) placeSetConst(place *Place, val I) { + rt := place.Type.ReflectType() + v := r.ValueOf(val) + if ValueType(v) == nil { + v = r.Zero(rt) + } else { + v = v.Convert(rt) + } + lhs := place.Fun + var ret Stmt + if mapkey := place.MapKey; mapkey != nil { + ret = func(env *Env) (Stmt, *Env) { + // enforce left-to-right evaluation order + obj := lhs(env) + key := mapkey(env) + obj.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + c.append(ret) + return + } + setplaces_const + c.append(ret) +} + +// placeSetExpr compiles 'place = expression' +func (c *Comp) placeSetExpr(place *Place, fun I) { + rt := place.Type.ReflectType() + lhs := place.Fun + var ret Stmt + if mapkey := place.MapKey; mapkey != nil { + rhs := funAsX1(fun, nil) + ret = func(env *Env) (Stmt, *Env) { + // enforce left-to-right evaluation order + obj := lhs(env) + key := mapkey(env) + val := rhs(env) + if val.Type() != rt { + val = val.Convert(rt) + } + obj.SetMapIndex(key, val) + env.IP++ + return env.Code[env.IP], env + } + c.append(ret) + return + } + setplaces_expr + c.append(ret) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/place_set_value.go b/vendor/github.com/cosmos72/gomacro/fast/place_set_value.go new file mode 100644 index 0000000..271f5a5 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/place_set_value.go @@ -0,0 +1,94 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * place_set_value.go + * + * Created on May 29, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +// placeSetValue compiles 'place = value' where value is a reflect.Value passed at runtime. +// Used to assign places with the result of multi-valued expressions, +// and to implement multiple assignment place1, place2... = expr1, expr2... +func (c *Comp) placeSetValue(place *Place) func(lhs, key, val r.Value) { + rtype := place.Type.ReflectType() + + if place.MapKey != nil { + zero := r.Zero(rtype) + return func(lhs, key, val r.Value) { + if val == Nil || val == None { + val = zero + } else if val.Type() != rtype { + val = val.Convert(rtype) + } + lhs.SetMapIndex(key, val) + } + } + var ret func(r.Value, r.Value, r.Value) + switch KindToCategory(rtype.Kind()) { + case r.Bool: + ret = func(lhs, key, val r.Value) { + lhs.SetBool(val.Bool()) + } + case r.Int: + ret = func(lhs, key, val r.Value) { + lhs.SetInt(val.Int()) + } + case r.Uint: + ret = func(lhs, key, val r.Value) { + lhs.SetUint(val.Uint()) + } + case r.Float64: + ret = func(lhs, key, val r.Value) { + lhs.SetFloat(val.Float()) + } + case r.Complex128: + ret = func(lhs, key, val r.Value) { + lhs.SetComplex(val.Complex()) + } + case r.String: + ret = func(lhs, key, val r.Value) { + lhs.SetString(val.String()) + } + default: + zero := r.Zero(rtype) + ret = func(lhs, key, val r.Value) { + if val == Nil || val == None { + val = zero + } else if val.Type() != rtype { + val = val.Convert(rtype) + } + lhs.Set(val) + } + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/place_shifts.go b/vendor/github.com/cosmos72/gomacro/fast/place_shifts.go new file mode 100644 index 0000000..1721c6f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/place_shifts.go @@ -0,0 +1,1148 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * place_shifts.go + * + * Created on May 17, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) placeShlConst(place *Place, val I) { + if isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + val := r.ValueOf(val).Uint() + + t := place.Type + rt := t.ReflectType() + cat := KindToCategory(t.Kind()) + if keyfun == nil { + switch cat { + case r.Int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result << + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result << + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + } else { + switch cat { + case r.Int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result << + val, + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result << + val, + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + } + } + + if ret == nil { + c.Errorf("invalid operator %s= on <%v>", token.SHL, place.Type) + } + + c.append(ret) + } +} +func (c *Comp) placeShlExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + t := place.Type + rt := t.ReflectType() + cat := KindToCategory(t.Kind()) + if keyfun == nil { + switch cat { + case r.Int: + + switch fun := fun.(type) { + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + + switch fun := fun.(type) { + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result << + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + } + } else { + switch cat { + case r.Int: + switch fun := fun.(type) { + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + switch fun := fun.(type) { + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result << + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + if ret == nil { + c.Errorf("invalid operator %s= on <%v>", token.SHL, place.Type) + } + + c.append(ret) +} +func (c *Comp) placeShrConst(place *Place, val I) { + if isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + val := r.ValueOf(val).Uint() + + t := place.Type + rt := t.ReflectType() + cat := KindToCategory(t.Kind()) + if keyfun == nil { + switch cat { + case r.Int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result >> + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result >> + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + } else { + switch cat { + case r.Int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result >> + val, + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result >> + val, + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + } + } + + if ret == nil { + c.Errorf("invalid operator %s= on <%v>", token.SHR, place.Type) + } + + c.append(ret) + } +} +func (c *Comp) placeShrExpr(place *Place, fun I) { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + t := place.Type + rt := t.ReflectType() + cat := KindToCategory(t.Kind()) + if keyfun == nil { + switch cat { + case r.Int: + + switch fun := fun.(type) { + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + lhs.SetInt(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + + switch fun := fun.(type) { + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result >> + fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + } + } else { + switch cat { + case r.Int: + switch fun := fun.(type) { + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + switch fun := fun.(type) { + case func(*Env) uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result >> + fun(env), + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + if ret == nil { + c.Errorf("invalid operator %s= on <%v>", token.SHR, place.Type) + } + + c.append(ret) +} +func (c *Comp) placeQuoPow2(place *Place, val I) bool { + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, r.TypeOf(val)) + return false + } else if isLiteralNumber(val, 1) { + c.placeForSideEffects(place) + return true + } + + ypositive := true + yv := r.ValueOf(val) + ycat := KindToCategory(yv.Kind()) + var y uint64 + switch ycat { + case r.Int: + sy := yv.Int() + if sy < 0 { + ypositive = false + y = uint64(-sy) + } else { + y = uint64(sy) + } + + case r.Uint: + y = yv.Uint() + default: + return false + } + if !isPowerOfTwo(y) { + return false + } + + shift := integerLen(y) - 1 + + if !ypositive { + return false + } + + var roundup int64 + if ycat == r.Int { + roundup = int64(y - 1) + } + { + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + val := shift + + t := place.Type + rt := t.ReflectType() + cat := KindToCategory(t.Kind()) + if keyfun == nil { + switch cat { + case r.Int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Int() + + if result < 0 { + result += roundup + } + lhs.SetInt(result >> + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := lhs.Uint() + lhs.SetUint(result >> + val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + } else { + switch cat { + case r.Int: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Int() + + if result < 0 { + result += roundup + } + + v := r.ValueOf(result >> + val, + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := lhs.MapIndex(key).Uint() + + v := r.ValueOf(result >> + val, + ) + if v.Type() != rt { + v = v.Convert(rt) + } + + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + } + } + + if ret == nil { + c.Errorf("invalid operator %s= on <%v>", token.QUO, place.Type) + } + + c.append(ret) + } + return true +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/place_shifts.gomacro b/vendor/github.com/cosmos72/gomacro/fast/place_shifts.gomacro new file mode 100644 index 0000000..48973f7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/place_shifts.gomacro @@ -0,0 +1,404 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * place_shifts.go + * + * Created on May 17, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" +) + + +:import ( + "fmt" + "go/ast" + "go/token" + r "reflect" +) + + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makeupcase(node ast.Node, name string) ast.Node { + // go/ast.SelectorExpr requires the foo in x.foo to be an *ast.Ident, cannot unquote there + kind := ~"{~,node . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(name)} + return kind +} + +:func makekind(typ ast.Node) ast.Node { + name := EvalType(typ).Name() + return makeupcase(~'r, name) +} + +:func fsetplace(opnode, typ, expr, roundup ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + var t r.Type = EvalType(typ) + var get, set ast.Node + var shift *ast.BinaryExpr = ~"{result >> ~,expr} + op := Eval(opnode).(token.Token) + shift.Op = op + signed := false + + switch t.Kind() { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + get = ~"{lhs.Int()} + set = ~"{lhs.SetInt(~,shift)} + signed = true + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + get = ~"{lhs.Uint()} + set = ~"{lhs.SetUint(~,shift)} + default: + panic("invalid operator " + op.String() + "= on " + t.String()) + } + + if signed && Eval(roundup) == true { + return ~"{ + // used to optimize division by constant-power-of-two + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := ~,get + if result < 0 { + result += roundup + } + ~,set + env.IP++ + return env.Code[env.IP], env + } + } + } + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + result := ~,get + ~,set + env.IP++ + return env.Code[env.IP], env + } + } +} + +:func fsetmap(opnode, typ, expr, option ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + var t r.Type = EvalType(typ) + var get ast.Node + var shift *ast.BinaryExpr = ~"{result >> ~,expr} + op := Eval(opnode).(token.Token) + shift.Op = op + signed := false + + switch t.Kind() { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + get = ~"{lhs.MapIndex(key).Int()} + signed = true + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + get = ~"{lhs.MapIndex(key).Uint()} + default: + panic("invalid operator " + op.String() + "= on " + t.String()) + } + + var opt interface{} = Eval(option) + if signed && opt == true { + return ~"{ + // used to optimize division by constant-power-of-two + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := ~,get + if result < 0 { + result += roundup + } + v := r.ValueOf(~,shift) + if v.Type() != rt { + v = v.Convert(rt) + } + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + } + } else { + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + lhs := lhsfun(env) + key := keyfun(env) + result := ~,get + v := r.ValueOf(~,shift) + if v.Type() != rt { + v = v.Convert(rt) + } + lhs.SetMapIndex(key, v) + env.IP++ + return env.Code[env.IP], env + } + } + } +} + +:macro setplace_const(opnode, typ, option ast.Node) ast.Node { + return fsetplace(opnode, typ, ~'val, option) +} + +:macro setplace_expr(opnode, typ ast.Node) ast.Node { + return fsetplace(opnode, typ, ~'{fun(env)}, nil) +} + +:macro setmap_const(opnode, typ, option ast.Node) ast.Node { + return fsetmap(opnode, typ, ~'val, option) +} + +:macro setmap_expr(opnode, typ ast.Node) ast.Node { + return fsetmap(opnode, typ, ~'{fun(env)}, ~'0) +} + + +:func list_types(typelist []ast.Stmt) []ast.Node { + rets := make([]ast.Node, 0, len(typelist)) + for _, typ := range typelist { + t := EvalType(typ) + if t == nil { + rets = append(rets, ~'nil) + } else if t.Kind() == r.Int { + rets = append(rets, ~'int, ~'int8, ~'int16, ~'int32, ~'int64) + } else if t.Kind() == r.Uint { + rets = append(rets, ~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr) + } else if t.Kind() == r.Float64 { + rets = append(rets, ~'float32, ~'float64) + } else if t.Kind() == r.Complex128 { + rets = append(rets, ~'complex64, ~'complex128) + } else { + rets = append(rets, typ) + } + } + return rets +} + +:macro setplaces_const(opnode, types, roundup ast.Node) ast.Node { + // separate cases for int8, uint16... not needed + typelist := types.(*ast.BlockStmt).List + caselist := make([]ast.Stmt, len(typelist)) + mapcaselist := make([]ast.Stmt, len(typelist)) + for i, typ := range typelist { + kind := makekind(typ) + caselist[i] = ~"{case ~,kind: + setplace_const; ~,opnode; ~,typ; ~,roundup + } + mapcaselist[i] = ~"{case ~,kind: + setmap_const; ~,opnode; ~,typ; ~,roundup + } + } + var conv ast.Node + var isroundup interface{} = Eval(roundup) + if isroundup == true { + conv = ~'shift + opnode = ~'{token.QUO} // for error messages + } else { + conv = ~'{r.ValueOf(val).Uint()} + } + + return ~"{ + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + val := ~,conv + + t := place.Type + rt := t.ReflectType() + cat := KindToCategory(t.Kind()) + if keyfun == nil { + switch cat { + ~,@caselist + } + } else { + switch cat { + ~,@mapcaselist + } + } + if ret == nil { + c.Errorf("invalid operator %s= on <%v>", ~,opnode, place.Type) + } + c.append(ret) + } +} + +:macro setplaces_expr(opnode, ltyp, rtypes ast.Node) ast.Node { + rtypelist := list_types(rtypes.(*ast.BlockStmt).List) + + caselist := make([]ast.Stmt, len(rtypelist)) + for i, rtyp := range rtypelist { + caselist[i] = ~"{~typecase func(*Env) ~,rtyp: + setplace_expr; ~,opnode; ~,ltyp + } + } + return ~"{ + switch fun := fun.(type) { + ~,@caselist + } + } +} + +:macro setmaps_expr(opnode, ltyp, rtypes ast.Node) ast.Node { + rtypelist := list_types(rtypes.(*ast.BlockStmt).List) + + caselist := make([]ast.Stmt, len(rtypelist)) + for i, rtyp := range rtypelist { + caselist[i] = ~"{~typecase func(*Env) ~,rtyp: + setmap_expr; ~,opnode; ~,ltyp + } + } + return ~"{ + switch fun := fun.(type) { + ~,@caselist + } + } +} + +:macro setplacess_expr(opnode, ltypes, rtypes ast.Node) ast.Node { + ltypelist := ltypes.(*ast.BlockStmt).List + + caselist := make([]ast.Stmt, len(ltypelist)) + mapcaselist := make([]ast.Stmt, len(ltypelist)) + for i, ltyp := range ltypelist { + kind := makekind(ltyp) + caselist[i] = ~"{case ~,kind: + setplaces_expr; ~,opnode; ~,ltyp; ~,rtypes + } + mapcaselist[i] = ~"{case ~,kind: + setmaps_expr; ~,opnode; ~,ltyp; ~,rtypes + } + } + return ~"{ + var ret Stmt + lhsfun := place.Fun + keyfun := place.MapKey + t := place.Type + rt := t.ReflectType() + cat := KindToCategory(t.Kind()) + if keyfun == nil { + switch cat { + ~,@caselist + } + } else { + switch cat { + ~,@mapcaselist + } + } + if ret == nil { + c.Errorf("invalid operator %s= on <%v>", ~,opnode, place.Type) + } + c.append(ret) + } +} + +// placeShlConst compiles 'place <<= constant' +func (c *Comp) placeShlConst(place *Place, val I) { + if isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + setplaces_const; token.SHL; {int; uint}; false +} + +// placeShlExpr compiles 'place <<= expression' +func (c *Comp) placeShlExpr(place *Place, fun I) { + setplacess_expr; token.SHL; {int; uint}; {uint} +} + +// placeShrConst compiles 'place >>= constant' +func (c *Comp) placeShrConst(place *Place, val I) { + if isLiteralNumber(val, 0) { + c.placeForSideEffects(place) + return + } + setplaces_const; token.SHR; {int; uint}; false +} + +// placeShrExpr compiles 'place >>= expression' +func (c *Comp) placeShrExpr(place *Place, fun I) { + setplacess_expr; token.SHR; {int; uint}; {uint} +} + +// placeQuoPow2 compiles 'place /= constant-power-of-two' +func (c *Comp) placeQuoPow2(place *Place, val I) bool { + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, r.TypeOf(val)) + return false + } else if isLiteralNumber(val, 1) { + c.placeForSideEffects(place) + return true // nothing to do + } + + ypositive := true + yv := r.ValueOf(val) + ycat := KindToCategory(yv.Kind()) + var y uint64 + switch ycat { + case r.Int: + sy := yv.Int() + if sy < 0 { + ypositive = false + y = uint64(-sy) + } else { + y = uint64(sy) + } + case r.Uint: + y = yv.Uint() + default: + // floating point or complex division + return false + } + if !isPowerOfTwo(y) { + // division by multiplication and shift not implemented... + return false + } + // attention: xe / (2**n) and xe >> n have different truncation rules for negative xe: + // quotient / truncates toward zero + // right shift >> truncates toward negative infinity + // see quoPow2() in binary_ops.go for more details + shift := integerLen(y) - 1 + + if !ypositive { + return false // not yet implemented + } + + var roundup int64 + if ycat == r.Int { + // fix rounding mode + roundup = int64(y-1) + } + setplaces_const; token.SHR; {int; uint}; true + + return true +} + diff --git a/vendor/github.com/cosmos72/gomacro/fast/quasiquote.go b/vendor/github.com/cosmos72/gomacro/fast/quasiquote.go new file mode 100644 index 0000000..b958f17 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/quasiquote.go @@ -0,0 +1,290 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * quasiquote.go + * + * Created on Jun 09, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "fmt" + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/ast2" + . "github.com/cosmos72/gomacro/base" + mp "github.com/cosmos72/gomacro/parser" + mt "github.com/cosmos72/gomacro/token" +) + +var ( + rtypeOfNode = r.TypeOf((*ast.Node)(nil)).Elem() + rtypeOfUnaryExpr = r.TypeOf((*ast.UnaryExpr)(nil)) + rtypeOfBlockStmt = r.TypeOf((*ast.BlockStmt)(nil)).Elem() +) + +func (c *Comp) quasiquoteUnary(unary *ast.UnaryExpr) *Expr { + block := unary.X.(*ast.FuncLit).Body + node := SimplifyNodeForQuote(block, true) + + if block != nil && len(block.List) == 1 { + if unary, ok := SimplifyNodeForQuote(block.List[0], false).(*ast.UnaryExpr); ok && (unary.Op == mt.UNQUOTE || unary.Op == mt.UNQUOTE_SPLICE) { + // to support quasiquote{unquote ...} and quasiquote{unquote_splice ...} + // we invoke SimplifyNodeForQuote() at the end, not at the beginning. + + in := ToAst(block) + expr := c.quasiquote1(in, 1, true) + + if unary.Op == mt.UNQUOTE_SPLICE { + return expr + } + fun := expr.AsX1() + toUnwrap := block != node + return exprX1(c.Universe.FromReflectType(rtypeOfNode), func(env *Env) r.Value { + x := ValueInterface(fun(env)) + node := AnyToAstWithNode(x, "Quasiquote").Node() + node = SimplifyNodeForQuote(node, toUnwrap) + return r.ValueOf(node) + }) + } + } + return c.quasiquote1(ToAst(node), 1, true) +} + +// Quasiquote expands and compiles ~quasiquote, if Ast starts with it +func (c *Comp) Quasiquote(in Ast) *Expr { + switch form := in.(type) { + case UnaryExpr: + if form.Op() == mt.QUASIQUOTE { + body := form.X.X.(*ast.FuncLit).Body + return c.quasiquote1(ToAst(body), 1, true) + } + } + return c.Compile(in) +} + +func (c *Comp) quasiquote1(in Ast, depth int, can_splice bool) *Expr { + expr, _ := c.quasiquote(in, depth, can_splice) + return expr +} + +// quasiquote expands and compiles the contents of a ~quasiquote +func (c *Comp) quasiquote(in Ast, depth int, can_splice bool) (*Expr, bool) { + if in == nil || in.Interface() == nil { + return nil, false + } + debug := c.Options&OptDebugQuasiquote != 0 + var label string + if can_splice { + label = " splice" + } + if debug { + c.Debugf("Quasiquote[%d]%s expanding %s: %v <%v>", depth, label, mt.String(mt.QUASIQUOTE), in.Interface(), r.TypeOf(in.Interface())) + } + + switch in := in.(type) { + case AstWithSlice: + n := in.Size() + funs := make([]func(*Env) r.Value, 0, n) + splices := make([]bool, 0, n) + positions := make([]token.Position, 0, n) + for i := 0; i < n; i++ { + if form := in.Get(i); form != nil { + form = SimplifyAstForQuote(form, false) + expr, splice := c.quasiquote(form, depth, true) + fun := expr.AsX1() + if fun == nil { + c.Warnf("Quasiquote[%d]%s: node expanded to nil: %v <%v>", depth, label, form.Interface(), r.TypeOf(form.Interface())) + continue + } + funs = append(funs, fun) + splices = append(splices, splice) + var position token.Position + if form, ok := form.(AstWithNode); ok { + position = c.Fileset.Position(form.Node().Pos()) + } + positions = append(positions, position) + } + } + form := in.New().(AstWithSlice) + + typ := c.TypeOf(in.Interface()) // extract the concrete type implementing ast.Node + rtype := typ.ReflectType() + + return exprX1(typ, func(env *Env) r.Value { + out := form.New().(AstWithSlice) + for i, fun := range funs { + x := ValueInterface(fun(env)) + if debug { + Debugf("Quasiquote: env=%p, append to AstWithSlice: <%v> returned %v <%v>", env, r.TypeOf(fun), x, r.TypeOf(x)) + } + if x == nil { + continue + } else if !splices[i] { + out = out.Append(AnyToAst(x, positions[i])) + } else { + xs := AnyToAstWithSlice(x, positions[i]) + n := xs.Size() + for j := 0; j < n; j++ { + if xj := xs.Get(j); xj != nil { + out = out.Append(xj) + } + } + } + } + return r.ValueOf(out.Interface()).Convert(rtype) + }), false + case UnaryExpr: + unary := in.X + switch op := unary.Op; op { + case mt.QUOTE, mt.QUASIQUOTE, mt.UNQUOTE, mt.UNQUOTE_SPLICE: + node := SimplifyNodeForQuote(unary.X.(*ast.FuncLit).Body, true) + form := ToAst(node) + + if op == mt.QUASIQUOTE { + depth++ + } else if op == mt.UNQUOTE || op == mt.UNQUOTE_SPLICE { + depth-- + } + if depth <= 0 { + if debug { + c.Debugf("Quasiquote[%d]%s compiling %s: %v <%v>", depth, label, mt.String(op), node, r.TypeOf(node)) + } + return c.compileExpr(form), op == mt.UNQUOTE_SPLICE + } + fun := c.quasiquote1(form, depth, true).AsX1() + if fun == nil { + c.Warnf("Quasiquote[%d]%s: node expanded to nil: %v <%v>", depth, label, node, r.TypeOf(node)) + } + var pos token.Pos + var position token.Position + if node, ok := node.(ast.Node); ok { + pos = node.Pos() + position = c.Fileset.Position(pos) + } + if op == mt.UNQUOTE_SPLICE { + return c.quoteUnquoteSplice(op, pos, position, fun), false + } + return exprX1(c.Universe.FromReflectType(rtypeOfUnaryExpr), func(env *Env) r.Value { + var node ast.Node + if fun != nil { + x := ValueInterface(fun(env)) + if debug { + Debugf("Quasiquote: env = %p, body of %s: <%v> returned %v <%v>", env, mt.String(op), r.TypeOf(fun), x, r.TypeOf(x)) + } + node = AnyToAstWithNode(x, position).Node() + } + ret, _ := mp.MakeQuote(nil, op, token.NoPos, node) + return r.ValueOf(ret) + }), false + } + } + + // Ast can still be a tree: just not a resizeable one, so support ~unquote but not ~unquote_splice + in, ok := in.(AstWithNode) + if !ok { + x := in.Interface() + c.Errorf("Quasiquote: unsupported node type, expecting AstWithNode or AstWithSlice: %v <%v>", x, r.TypeOf(x)) + return nil, false + } + node := in.Interface() + if debug { + c.Debugf("Quasiquote[%d] recursing: %v <%v>", depth, node, r.TypeOf(node)) + } + if node == nil { + return nil, false + } + form := in.New().(AstWithNode) // we must NOT retain input argument, so clone it + n := in.Size() + typ := c.TypeOf(in.Interface()) // extract the concrete type implementing ast.Node + rtype := typ.ReflectType() + + if n == 0 { + return exprX1(typ, func(env *Env) r.Value { + return r.ValueOf(form.New().Interface()).Convert(rtype) + }), false + } + funs := make([]func(*Env) r.Value, n) + positions := make([]token.Position, n) + for i := 0; i < n; i++ { + if form := in.Get(i); form != nil { + form = SimplifyAstForQuote(form, false) + fun := c.quasiquote1(form, depth, false).AsX1() + if fun == nil { + c.Warnf("Quasiquote[%d]: node expanded to nil: %v", depth, form.Interface()) + continue + } + funs[i] = fun + if form, ok := form.(AstWithNode); ok && form.Node() != nil { + positions[i] = c.Fileset.Position(form.Node().Pos()) + } + } + } + + return exprX1(typ, func(env *Env) r.Value { + out := form.New().(AstWithNode) + for i, fun := range funs { + if fun != nil { + x := ValueInterface(fun(env)) + if debug { + Debugf("Quasiquote: env = %p, <%v> returned %v <%v>", env, r.TypeOf(fun), x, r.TypeOf(x)) + } + out.Set(i, AnyToAst(x, positions[i])) + } + } + return r.ValueOf(out.Interface()).Convert(rtype) + }), false +} + +func (c *Comp) quoteUnquoteSplice(op token.Token, pos token.Pos, position token.Position, fun func(*Env) r.Value) *Expr { + return exprX1(c.Universe.FromReflectType(rtypeOfUnaryExpr), func(env *Env) r.Value { + var node ast.Node + if fun != nil { + x := ValueInterface(fun(env)) + form := AnyToAst(x, position) + switch form := form.(type) { + case AstWithNode: + node = form.Node() + case AstWithSlice: + block := BlockStmt{&ast.BlockStmt{Lbrace: pos}} + n := form.Size() + for i := 0; i < n; i++ { + if formi := form.Get(i); formi != nil { + /*block =*/ block.Append(formi) + } + } + node = block.X + default: + var prefix string + if pos != token.NoPos { + prefix = fmt.Sprintf("%s: ", position) + } + Errorf("%s%s returned invalid type, expecting AstWithNode or AstWithSlice: %v, <%v>", + prefix, mt.String(mt.UNQUOTE_SPLICE), form, r.TypeOf(form)) + return Nil + } + } + ret, _ := mp.MakeQuote(nil, op, token.NoPos, node) + return r.ValueOf(ret) + }) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/range.go b/vendor/github.com/cosmos72/gomacro/fast/range.go new file mode 100644 index 0000000..e42ac6b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/range.go @@ -0,0 +1,482 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * range.go + * + * Created on Jun 04, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + r "reflect" + "sort" + "unicode/utf8" + "unsafe" + + "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +type rangeJump struct { + Start, Continue, Break int +} + +// Range compiles a "for-range" statement +func (c *Comp) Range(node *ast.RangeStmt, labels []string) { + var nbinds [2]int + + c, _ = c.pushEnvIfFlag(&nbinds, true) + erange := c.Expr1(node.X) + t := erange.Type + if erange.Untyped() { + t = erange.DefaultType() + erange.ConstTo(t) + } + var jump rangeJump + + sort.Strings(labels) + // we need a fresh Comp here... created above by c.pushEnvIfLocalBinds() + c.Loop = &LoopInfo{ + Continue: &jump.Continue, + Break: &jump.Break, + ThisLabels: labels, + } + + switch t.Kind() { + case r.Ptr: + if t.Elem().Kind() != r.Array { + c.Errorf("cannot range over %v <%v>", node.X, t) + } + // range on pointer to array: dereference it + t = t.Elem() + efun := erange.AsX1() + erange = exprX1(t, func(env *Env) r.Value { + return efun(env).Elem() + }) + fallthrough + case r.Chan: + c.rangeChan(node, erange, &jump) + case r.Map: + c.rangeMap(node, erange, &jump) + case r.Array, r.Slice: + c.rangeSlice(node, erange, &jump) + case r.String: + c.rangeString(node, erange, &jump) + default: + c.Errorf("cannot range over %v <%v>", node.X, t) + } + + jump.Break = c.Code.Len() + + c = c.popEnvIfFlag(&nbinds, true) +} + +func (c *Comp) rangeChan(node *ast.RangeStmt, erange *Expr, jump *rangeJump) { + t := erange.Type + telem := t.Elem() + + // unnamed bind, contains channel + bindchan := c.DeclVar0("", nil, erange) + idxchan := bindchan.Desc.Index() + + placekey, _ := c.rangeVars(node, telem, nil) + + jump.Start = c.Code.Len() + + if placekey == nil { + c.append(func(env *Env) (Stmt, *Env) { + _, ok := env.Binds[idxchan].Recv() + var ip int + if ok { + ip = env.IP + 1 + } else { + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + }) + } else { + // unnamed bind, contains last received value + bindrecv := c.AddBind("", VarBind, c.TypeOfInterface()) + idxrecv := bindrecv.Desc.Index() + + c.append(func(env *Env) (Stmt, *Env) { + v, ok := env.Binds[idxchan].Recv() + var ip int + if ok { + env.Binds[idxrecv] = v + ip = env.IP + 1 + } else { + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + }) + c.SetPlace(placekey, token.ASSIGN, unwrapBind(bindrecv, telem)) + } + + // compile the body + c.Block(node.Body) + + // jump back to start + c.append(func(env *Env) (Stmt, *Env) { + ip := jump.Start + env.IP = ip + return env.Code[ip], env + }) +} + +func (c *Comp) rangeMap(node *ast.RangeStmt, erange *Expr, jump *rangeJump) { + t := erange.Type + tkey, tval := t.Key(), t.Elem() + tkeyslice := xr.SliceOf(tkey) + rtkeyslice := tkeyslice.ReflectType() + + // unnamed bind, contains map + bindmap := c.DeclVar0("", nil, erange) + idxmap := bindmap.Desc.Index() + + // unnamed bind, contains map keys + bindkeys := c.AddBind("", VarBind, tkeyslice) + idxkeys := bindkeys.Desc.Index() + c.append(func(env *Env) (Stmt, *Env) { + // convert []r.Value slice into a []rtkey slice, to avoid reflect.Value.Interface() while iterating + vkeys := env.Binds[idxmap].MapKeys() + keys := r.MakeSlice(rtkeyslice, len(vkeys), len(vkeys)) + for i, vkey := range vkeys { + keys.Index(i).Set(vkey) + } + env.Binds[idxkeys] = keys + env.IP++ + return env.Code[env.IP], env + }) + + // unnamed bind, contains iteration index + bindnext := c.DeclVar0("", c.TypeOfInt(), nil) + idxnext := bindnext.Desc.Index() + + placekey, placeval := c.rangeVars(node, tkey, tval) + + var bindkey *Bind + var ekey *Expr + if placekey != nil || placeval != nil { + // unnamed bind, contains iteration map key + bindkey = c.DeclVar0("", c.TypeOfInterface(), nil) + ekey = unwrapBind(bindkey, tkey) + } + + jump.Start = c.Code.Len() + + if bindkey == nil { + // check iteration index against # of keys + c.append(func(env *Env) (Stmt, *Env) { + n := env.Binds[idxkeys].Len() + i := *(*int)(unsafe.Pointer(&env.IntBinds[idxnext])) + var ip int + if i < n { + ip = env.IP + 1 + } else { + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + }) + } else { + // check iteration index against # of keys, + // and copy current map key into bindkey + idxkey := bindkey.Desc.Index() + c.append(func(env *Env) (Stmt, *Env) { + vkeys := env.Binds[idxkeys] + n := vkeys.Len() + i := *(*int)(unsafe.Pointer(&env.IntBinds[idxnext])) + var ip int + if i < n { + env.Binds[idxkey] = vkeys.Index(i) + ip = env.IP + 1 + } else { + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + }) + } + + if placekey != nil { + // copy current map key into placekey + c.SetPlace(placekey, token.ASSIGN, ekey) + } + + if placeval == nil { + // nothing to do + } else if placeval.IsVar() && !base.IsOptimizedKind(placeval.Type.Kind()) { + idxkey := bindkey.Desc.Index() + idxval := placeval.Var.Desc.Index() + upval := placeval.Var.Upn + rtype := tval.ReflectType() + zero := r.Zero(rtype) + c.append(func(env *Env) (Stmt, *Env) { + vmap := env.Binds[idxmap] + key := env.Binds[idxkey] + o := env + for j := 0; j < upval; j++ { + o = o.Outer + } + val := vmap.MapIndex(key) + if !val.IsValid() { + val = zero + } else if val.Type() != rtype { + val = val.Convert(rtype) + } + o.Binds[idxval].Set(val) + env.IP++ + return env.Code[env.IP], env + }) + } else { + emap := c.Symbol(bindmap.AsSymbol(0)) + c.SetPlace(placeval, token.ASSIGN, c.mapIndex1(nil, emap, ekey)) + } + + // compile the body + c.Block(node.Body) + + // increase iteration index and jump back to start + c.append(func(env *Env) (Stmt, *Env) { + (*(*int)(unsafe.Pointer(&env.IntBinds[idxnext])))++ + ip := jump.Start + env.IP = ip + return env.Code[ip], env + }) +} + +func (c *Comp) rangeSlice(node *ast.RangeStmt, erange *Expr, jump *rangeJump) { + t := erange.Type + var constlen int + var elen *Expr + + if node.Value != nil || t.Kind() != r.Array { + // Go spec: one-variable range on array ONLY evaluates the array length, not the array itself + // save range variable in an unnamed bind + sym := c.DeclVar0("", nil, erange).AsSymbol(0) + erange = c.Symbol(sym) + } + + if t.Kind() == r.Array { + constlen = t.Len() + } else { + // save range length in an unnamed bind + rangefun := erange.AsX1() + elen0 := exprFun(c.TypeOfInt(), func(env *Env) int { + return rangefun(env).Len() + }) + symlen := c.DeclVar0("", nil, elen0).AsSymbol(0) + elen = c.Symbol(symlen) + } + + placekey, placeval := c.rangeVars(node, c.TypeOfInt(), t.Elem()) + + if placekey == nil { + // we need an interation variable, even if user code ignores it + placekey = c.DeclVar0("", c.TypeOfInt(), nil).AsVar(0, PlaceSettable).AsPlace() + } + + jump.Start = c.Code.Len() + + // compile comparison against range length + ekey := c.GetPlace(placekey) + funkey := ekey.WithFun().(func(*Env) int) + + if t.Kind() == r.Array { + c.append(func(env *Env) (Stmt, *Env) { + var ip int + if funkey(env) < constlen { + ip = env.IP + 1 + } else { + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + }) + } else { + funlen := elen.WithFun().(func(*Env) int) + c.append(func(env *Env) (Stmt, *Env) { + var ip int + if funkey(env) < funlen(env) { + ip = env.IP + 1 + } else { + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + }) + } + if placeval != nil { + // for error messages + indexnode := &ast.IndexExpr{X: node.X, Lbrack: node.X.Pos(), Index: node.Key, Rbrack: node.X.Pos()} + eindex := c.vectorIndex(indexnode, erange, ekey) + c.SetPlace(placeval, token.ASSIGN, eindex) + } + + // compile the body + c.Block(node.Body) + + // increment key + c.Pos = node.End() - 1 + one := c.exprValue(c.TypeOfInt(), 1) + c.SetPlace(placekey, token.ADD_ASSIGN, one) + + // jump back to comparison + c.append(func(env *Env) (Stmt, *Env) { + ip := jump.Start + env.IP = ip + return env.Code[ip], env + }) +} + +func (c *Comp) rangeString(node *ast.RangeStmt, erange *Expr, jump *rangeJump) { + // save string in an unnamed bind + bindrange := c.DeclVar0("", nil, erange) + idxrange := bindrange.Desc.Index() + + placekey, placeval := c.rangeVars(node, c.TypeOfInt(), c.TypeOfInt32()) + bindnext := c.DeclVar0("", c.TypeOfInt(), nil) + idxnext := bindnext.Desc.Index() + + var bindrune *Bind + if placeval != nil && !placeval.IsVar() { + bindrune = c.DeclVar0("", c.TypeOfInt32(), nil) + } + + jump.Start = c.Code.Len() + + if placekey != nil { + c.SetPlace(placekey, token.ASSIGN, c.Symbol(bindnext.AsSymbol(0))) + } + if placeval == nil { + c.append(func(env *Env) (Stmt, *Env) { + s := env.Binds[idxrange].String() + pnext := (*int)(unsafe.Pointer(&env.IntBinds[idxnext])) + next := *pnext + + _, size := utf8.DecodeRuneInString(s[next:]) + var ip int + if size != 0 { + next += size + *pnext = next + ip = env.IP + 1 + } else { + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + }) + } else if placeval.IsVar() { + idxval := placeval.Var.Desc.Index() + upval := placeval.Var.Upn + c.append(func(env *Env) (Stmt, *Env) { + s := env.Binds[idxrange].String() + pnext := (*int)(unsafe.Pointer(&env.IntBinds[idxnext])) + next := *pnext + + r, size := utf8.DecodeRuneInString(s[next:]) + var ip int + if size != 0 { + next += size + *pnext = next + o := env + for i := 0; i < upval; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&env.IntBinds[idxval])) = r + ip = env.IP + 1 + } else { + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + }) + } else { + idxrune := bindrune.Desc.Index() + c.append(func(env *Env) (Stmt, *Env) { + s := env.Binds[idxrange].String() + pnext := (*int)(unsafe.Pointer(&env.IntBinds[idxnext])) + next := *pnext + + r, size := utf8.DecodeRuneInString(s[next:]) + var ip int + if size != 0 { + next += size + *pnext = next + *(*int32)(unsafe.Pointer(&env.IntBinds[idxrune])) = r + ip = env.IP + 1 + } else { + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + }) + c.SetPlace(placeval, token.ASSIGN, c.Symbol(bindrune.AsSymbol(0))) + } + + // compile the body + c.Block(node.Body) + + // jump back to iteration + c.append(func(env *Env) (Stmt, *Env) { + ip := jump.Start + env.IP = ip + return env.Code[ip], env + }) +} + +// rangeVars compiles the key and value iteration variables in a for-range +func (c *Comp) rangeVars(node *ast.RangeStmt, tkey xr.Type, tval xr.Type) (*Place, *Place) { + var place [2]*Place + t := [2]xr.Type{tkey, tval} + + for i, expr := range [2]ast.Expr{node.Key, node.Value} { + if expr == nil { + continue + } else if t[i] == nil { + c.Pos = expr.Pos() + c.Errorf("too many variables in range") + } + c.Pos = expr.Pos() + if node.Tok == token.DEFINE { + switch expr := expr.(type) { + case *ast.Ident: + name := expr.Name + if name != "_" { + place[i] = c.DeclVar0(name, t[i], nil).AsVar(0, PlaceSettable).AsPlace() + } + default: + c.Errorf("non-name %v on left side of :=", expr) + } + } else { + place[i] = c.Place(expr) + if !t[i].AssignableTo(place[i].Type) { + c.Errorf("cannot assign type <%v> to %v <%v> in range", t[i], expr, place[i].Type) + } + } + } + return place[0], place[1] +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/select.go b/vendor/github.com/cosmos72/gomacro/fast/select.go new file mode 100644 index 0000000..561e3c5 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/select.go @@ -0,0 +1,252 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * select.go + * + * Created on Jun 05, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + r "reflect" + "sort" +) + +type selectEntry struct { + Dir r.SelectDir + Chan func(*Env) r.Value + Send func(*Env) r.Value +} + +func (c *Comp) Select(node *ast.SelectStmt, labels []string) { + if node.Body == nil || len(node.Body.List) == 0 { + return + } + + var ibreak int + sort.Strings(labels) + c.Loop = &LoopInfo{ + Break: &ibreak, + ThisLabels: labels, + } + + // unnamed bind, contains received value. Nil means nothing received + bindrecv := c.AddBind("", VarBind, c.TypeOfInterface()) + idxrecv := bindrecv.Desc.Index() + + list := node.Body.List + n := len(list) + entries := make([]selectEntry, n) + ips := make([]int, n) + defaultip := -1 + defaultpos := token.NoPos + + c.append(func(env *Env) (Stmt, *Env) { + cases := make([]r.SelectCase, len(entries)) + for i := range entries { + c := &cases[i] + e := &entries[i] + c.Dir = e.Dir + if e.Chan != nil { + c.Chan = e.Chan(env) + if e.Send != nil { + c.Send = e.Send(env) + } + } + } + chosen, recv, _ := r.Select(cases) + env.Binds[idxrecv] = recv + ip := ips[chosen] + env.IP = ip + return env.Code[ip], env + }) + + for i, stmt := range list { + ips[i] = c.Code.Len() + switch clause := stmt.(type) { + case *ast.CommClause: + if clause.Comm == nil { + if defaultip >= 0 { + c.Errorf("multiple defaults in select (first at %s)", c.Fileset.Position(defaultpos)) + } + defaultip = c.Code.Len() + defaultpos = clause.Pos() + entries[i] = c.selectDefault(clause) + } else { + entries[i] = c.selectCase(clause, bindrecv) + } + default: + c.Errorf("invalid statement inside select: expecting case or default, found: %v <%v>", stmt, r.TypeOf(stmt)) + } + } + // we finally know this + ibreak = c.Code.Len() +} + +// selectDefault compiles the default case in a switch +func (c *Comp) selectDefault(node *ast.CommClause) selectEntry { + if len(node.Body) != 0 { + c.List(node.Body) + } + c.jumpOut(0, c.Loop.Break) + return selectEntry{Dir: r.SelectDefault} +} + +// selectCase compiles a case in a select. +func (c *Comp) selectCase(clause *ast.CommClause, bind *Bind) selectEntry { + + var entry selectEntry + var nbinds [2]int + stmt := clause.Comm + c2 := c + locals := false + + switch node := stmt.(type) { + case *ast.ExprStmt: + // <-ch + entry = selectEntry{ + Dir: r.SelectRecv, + Chan: c.selectRecv(stmt, node.X).AsX1(), + } + case *ast.AssignStmt: + // v := <-ch or v = <-ch + lhs := node.Lhs + n := len(lhs) + if (n != 1 && n != 2) || len(node.Rhs) != 1 { + c.badSelectCase(stmt) + } + var l0, l1 ast.Expr = lhs[0], nil + if n == 2 { + l1 = lhs[1] + } + r0 := node.Rhs[0] + switch node.Tok { + case token.DEFINE: + id0 := asIdent(l0) + id1 := asIdent(l1) + if (id0 == nil && l0 != nil) || (id1 == nil && l1 != nil) { + c.badSelectCase(stmt) + } + echan := c.selectRecv(node, r0) + entry = selectEntry{Dir: r.SelectRecv, Chan: echan.AsX1()} + + if id0 != nil && id0.Name != "_" || id1 != nil && id1.Name != "_" { + c2, locals = c.pushEnvIfFlag(&nbinds, true) + + if id0 != nil && id0.Name != "_" { + t := echan.Type.Elem() + c2.DeclVar0(id0.Name, t, unwrapBindUp1(bind, t)) + } + if id1 != nil && id1.Name != "_" { + idx := bind.Desc.Index() + c2.DeclVar0(id1.Name, c.TypeOfBool(), c.exprBool(func(env *Env) bool { + return env.Outer.Binds[idx].IsValid() + })) + } + } else if len(clause.Body) != 0 { + c2, locals = c.pushEnvIfLocalBinds(&nbinds, clause.Body...) + } + + case token.ASSIGN: + echan := c.selectRecv(stmt, r0) + entry = selectEntry{Dir: r.SelectRecv, Chan: echan.AsX1()} + + if l0 != nil { + place := c.Place(l0) + t := echan.Type.Elem() + tplace := place.Type + if !t.AssignableTo(tplace) { + c.Errorf("cannot use <%v> as <%v> in assignment: %v = %v", t, tplace, l0, r0) + } + c.SetPlace(place, token.ASSIGN, unwrapBind(bind, t)) + } + if l1 != nil { + place := c.Place(l1) + t := c.TypeOfBool() + tplace := place.Type + if !t.AssignableTo(tplace) { + c.Errorf("cannot use <%v> as <%v> in assignment: _, %v = %v", t, tplace, l1, r0) + } + idx := bind.Desc.Index() + c.SetPlace(place, token.ASSIGN, c.exprBool(func(env *Env) bool { + return env.Binds[idx].IsValid() + })) + } + + if len(clause.Body) != 0 { + c2, locals = c.pushEnvIfLocalBinds(&nbinds, clause.Body...) + } + } + + case *ast.SendStmt: + // ch <- v + echan := c.Expr1(node.Chan) + if echan.Type.Kind() != r.Chan { + c.Errorf("cannot use %v <%v> as channel in select case", node, echan.Type) + } + esend := c.Expr1(node.Value) + tactual := esend.Type + texpected := echan.Type.Elem() + if !tactual.AssignableTo(texpected) { + c.Errorf("cannot use %v <%v> as <%v> in channel send", node.Value, tactual, texpected) + } + entry = selectEntry{Dir: r.SelectSend, Chan: echan.AsX1(), Send: esend.AsX1()} + + default: + c.badSelectCase(stmt) + } + + if len(clause.Body) != 0 { + c2.List(clause.Body) + } + if c2 != c { + c2.popEnvIfFlag(&nbinds, locals) + } + c.jumpOut(0, c.Loop.Break) + return entry +} + +func (c *Comp) selectRecv(stmt ast.Stmt, node ast.Expr) *Expr { + for { + switch expr := node.(type) { + case *ast.ParenExpr: + node = expr.X + continue + case *ast.UnaryExpr: + if expr.Op == token.ARROW { + e := c.Expr1(expr.X) + if e.Type.Kind() != r.Chan { + c.Errorf("cannot use %v <%v> as channel in select case", node, e.Type) + } + return e + } + } + c.badSelectCase(stmt) + return nil + } +} + +func (c *Comp) badSelectCase(stmt ast.Stmt) { + c.Errorf("invalid select case, expecting [ch <- val] or [<-ch] or [vars := <-ch] or [places = <-ch], found: %v <%v>", + stmt, r.TypeOf(stmt)) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/selector.go b/vendor/github.com/cosmos72/gomacro/fast/selector.go new file mode 100644 index 0000000..eeea884 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/selector.go @@ -0,0 +1,890 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * selector.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// SelectorExpr compiles foo.bar, i.e. read access to methods, struct fields and imported packages +func (c *Comp) SelectorExpr(node *ast.SelectorExpr) *Expr { + e, t := c.Expr1OrType(node.X) + if t != nil { + return c.selectorType(node, t) + } + t = e.Type + eorig := e + if t.Kind() == r.Ptr && t.Elem().Kind() == r.Struct { + t = t.Elem() + fun := e.AsX1() + e = exprFun(t, func(env *Env) r.Value { + return fun(env).Elem() + }) + } + name := node.Sel.Name + switch t.Kind() { + case r.Struct: + if t.ReflectType() == rtypeOfImport && e.Const() { + // access symbol from imported package, for example fmt.Printf + imp := e.Value.(Import) + return c.selectorImport(&imp, name) + } + field, fieldok, mtd, mtdok := c.LookupFieldOrMethod(t, name) + if fieldok { + return c.compileField(e, field) + } else if mtdok { + return c.compileMethod(node, eorig, mtd) + } + default: + // interfaces and named types can have methods, but no fields + if t.NumMethod() != 0 { + mtd, mtdn := c.LookupMethod(t, name) + switch mtdn { + case 0: + case 1: + return c.compileMethod(node, eorig, mtd) + default: + c.Errorf("type %s has %d methods %q, expression is ambiguous: %v", t, mtdn, name, node) + } + } + } + c.Errorf("type %s has no field or method %q: %v", t, name, node) + return nil +} + +// selectorImport compiles foo.bar where 'foo' is an imported package +func (c *Comp) selectorImport(imp *Import, name string) *Expr { + if bind, ok := imp.Binds[name]; ok { + t := imp.BindTypes[name] + var value interface{} + if bind.IsValid() && bind.CanInterface() { + if bind.CanAddr() { + // bind is an imported variable. do NOT extract its value, otherwise the fast interpreter + // will (incorrectly) assume that it's a constant and will perform constant propagation + fun := importedBindAsFun(t, bind) + return exprFun(t, fun) + } + value = bind.Interface() + } else { + value = xr.Zero(t) + } + return c.exprValue(t, value) + } + c.Errorf("package %v %q has no symbol %s", imp.Name, imp.Path, name) + return nil +} + +// selectorType compiles foo.bar where 'foo' is a type +func (c *Comp) selectorType(node *ast.SelectorExpr, t xr.Type) *Expr { + mtd, count := c.LookupMethod(t, node.Sel.Name) + if count == 0 { + c.Errorf("type <%v> has no method %q: %v", t, node.Sel, node) + } else if count > 1 { + c.Errorf("type <%v> has %d wrapper methods %q all at the same depth - expression is ambiguous: %v", t, count, node.Sel, node) + } + return c.compileMethodAsFunc(t, mtd) +} + +// lookup fields and methods at the same time... it's and error if both exist at the same depth +func (c *Comp) LookupFieldOrMethod(t xr.Type, name string) (xr.StructField, bool, xr.Method, bool) { + field, fieldn := c.LookupField(t, name) + mtd, mtdn := c.LookupMethod(t, name) + fielddepth := len(field.Index) + mtddepth := len(mtd.FieldIndex) + 1 + if fieldn != 0 && mtdn != 0 { + if fielddepth < mtddepth { + // prefer the field + mtdn = 0 + } else if fielddepth > mtddepth { + // prefer the method + fieldn = 0 + } else { + c.Errorf("type %v has %d field(s) and %d method(s) named %q at depth %d", + t, fieldn, mtdn, name, fielddepth) + } + } + if fieldn > 1 { + c.Errorf("type %v has %d fields named %q at depth %d", t, fieldn, name, fielddepth) + } else if mtdn > 1 { + c.Errorf("type %v has %d methods named %q at depth %d", t, mtdn, name, mtddepth) + } + return field, fieldn == 1, mtd, mtdn == 1 +} + +// LookupField performs a breadth-first search for struct field with given name +func (c *Comp) LookupField(t xr.Type, name string) (field xr.StructField, numfound int) { + return t.FieldByName(name, c.FileComp().Path) +} + +// LookupMethod performs a breadth-first search for method with given name +func (c *Comp) LookupMethod(t xr.Type, name string) (mtd xr.Method, numfound int) { + return t.MethodByName(name, c.FileComp().Path) +} + +// field1 isa variand of reflect.Value.Field, also accepts pointer values +// and dereferences pointer ONLY if index is negative (actually used index will be ^x) +func field0(v r.Value, index int) r.Value { + if index < 0 { + v = v.Elem() + index = ^index + } + return v.Field(index) +} + +// fieldByIndex is a variant of reflect.Value.FieldByIndex, also accepts pointer values +// and dereferences pointers ONLY if index[i] is negative (actually used index will be ^x) +func fieldByIndex(v r.Value, index []int) r.Value { + for _, x := range index { + if x < 0 { + v = v.Elem() + x = ^x + } + v = v.Field(x) + } + return v +} + +func (c *Comp) compileField(e *Expr, field xr.StructField) *Expr { + objfun := e.AsX1() + t := e.Type + var fun I + index := field.Index + + // descend embedded fields + for i, x := range index { + if t.Kind() == r.Ptr && t.Elem().Kind() == r.Struct { + // embedded field (or initial value) is a pointer, dereference it. + t = t.Elem() + index[i] = ^x // remember we neeed a pointer dereference at runtime + } + t = t.Field(x).Type + } + + t = field.Type + // c.Debugf("compileField: field=%#v", field) + if len(index) == 1 { + index0 := index[0] + switch t.Kind() { + case r.Bool: + fun = func(env *Env) bool { + obj := objfun(env) + return field0(obj, index0).Bool() + } + case r.Int: + fun = func(env *Env) int { + obj := objfun(env) + return int(field0(obj, index0).Int()) + } + case r.Int8: + fun = func(env *Env) int8 { + obj := objfun(env) + return int8(field0(obj, index0).Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + obj := objfun(env) + return int16(field0(obj, index0).Int()) + } + case r.Int32: + fun = func(env *Env) int32 { + obj := objfun(env) + return int32(field0(obj, index0).Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + obj := objfun(env) + return field0(obj, index0).Int() + } + case r.Uint: + fun = func(env *Env) uint { + obj := objfun(env) + return uint(field0(obj, index0).Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + obj := objfun(env) + return uint8(field0(obj, index0).Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + obj := objfun(env) + return uint16(field0(obj, index0).Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + obj := objfun(env) + return uint32(field0(obj, index0).Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + obj := objfun(env) + return field0(obj, index0).Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + obj := objfun(env) + return uintptr(field0(obj, index0).Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + obj := objfun(env) + return float32(field0(obj, index0).Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + obj := objfun(env) + return field0(obj, index0).Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + obj := objfun(env) + return complex64(field0(obj, index0).Complex()) + } + case r.Complex128: + fun = func(env *Env) complex128 { + obj := objfun(env) + return field0(obj, index0).Complex() + } + case r.String: + fun = func(env *Env) string { + obj := objfun(env) + return field0(obj, index0).String() + } + default: + fun = func(env *Env) r.Value { + obj := objfun(env) + return field0(obj, index0) + } + } + } else { + switch t.Kind() { + case r.Bool: + fun = func(env *Env) bool { + obj := objfun(env) + return fieldByIndex(obj, index).Bool() + } + case r.Int: + fun = func(env *Env) int { + obj := objfun(env) + return int(fieldByIndex(obj, index).Int()) + } + case r.Int8: + fun = func(env *Env) int8 { + obj := objfun(env) + return int8(fieldByIndex(obj, index).Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + obj := objfun(env) + return int16(fieldByIndex(obj, index).Int()) + } + case r.Int32: + fun = func(env *Env) int32 { + obj := objfun(env) + return int32(fieldByIndex(obj, index).Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + obj := objfun(env) + return fieldByIndex(obj, index).Int() + } + case r.Uint: + fun = func(env *Env) uint { + obj := objfun(env) + return uint(fieldByIndex(obj, index).Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + obj := objfun(env) + return uint8(fieldByIndex(obj, index).Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + obj := objfun(env) + return uint16(fieldByIndex(obj, index).Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + obj := objfun(env) + return uint32(fieldByIndex(obj, index).Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + obj := objfun(env) + return fieldByIndex(obj, index).Uint() + } + case r.Uintptr: + + fun = func(env *Env) uintptr { + obj := objfun(env) + return uintptr(fieldByIndex(obj, index).Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + obj := objfun(env) + return float32(fieldByIndex(obj, index).Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + obj := objfun(env) + return fieldByIndex(obj, index).Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + obj := objfun(env) + return complex64(fieldByIndex(obj, index).Complex()) + } + case r.Complex128: + fun = func(env *Env) complex128 { + obj := objfun(env) + return fieldByIndex(obj, index).Complex() + } + case r.String: + fun = func(env *Env) string { + obj := objfun(env) + return fieldByIndex(obj, index).String() + } + default: + fun = func(env *Env) r.Value { + obj := objfun(env) + return fieldByIndex(obj, index) + } + } + } + return exprFun(t, fun) +} + +func (c *Comp) changeFirstParam(tfirstparam, t xr.Type) xr.Type { + nin := t.NumIn() + if nin == 0 { + c.Errorf("compileMethod: inconsistent method type: expecting at least the receiver, found zero input parameters: <%v>", t) + } + params := make([]xr.Type, nin) + params[0] = tfirstparam + for i := 1; i < nin; i++ { + params[i] = t.In(i) + } + nout := t.NumOut() + results := make([]xr.Type, nout) + for i := 0; i < nout; i++ { + results[i] = t.Out(i) + } + return c.Universe.FuncOf(params, results, t.IsVariadic()) +} + +func (c *Comp) removeFirstParam(t xr.Type) xr.Type { + nin := t.NumIn() + if nin == 0 { + c.Errorf("compileMethod: inconsistent method type: expecting at least the receiver, found zero input parameters: <%v>", t) + } + params := make([]xr.Type, nin-1) + for i := 1; i < nin; i++ { + params[i-1] = t.In(i) + } + nout := t.NumOut() + results := make([]xr.Type, nout) + for i := 0; i < nout; i++ { + results[i] = t.Out(i) + } + return c.Universe.FuncOf(params, results, t.IsVariadic()) +} + +// compileMethod compiles a method call. +// relatively slow, but simple: return a closure with the receiver already bound +func (c *Comp) compileMethod(node *ast.SelectorExpr, e *Expr, mtd xr.Method) *Expr { + fieldindex := mtd.FieldIndex + t := e.Type + indirect := false // executed a dereference ? + + // descend embedded fields + for i, index := range fieldindex { + if t.Kind() == r.Ptr && t.Elem().Kind() == r.Struct { + // embedded field (or initial value) is a pointer, dereference it. + t = t.Elem() + indirect = true + fieldindex[i] = ^index // remember we neeed a pointer dereference at runtime + } + t = t.Field(index).Type + } + index := mtd.Index + rtype := t.ReflectType() + tfunc := mtd.Type + tclosure := c.removeFirstParam(tfunc) + rtclosure := tclosure.ReflectType() + trecv := tfunc.In(0) + + objPointer := t.Kind() == r.Ptr // field is pointer? + recvPointer := trecv.Kind() == r.Ptr // method with pointer receiver? + addressof := !objPointer && recvPointer + deref := objPointer && !recvPointer + + debug := c.Options&OptDebugMethod != 0 + if debug { + c.Debugf("compiling method %v: receiver is <%v>, value is <%v>", node, trecv, t) + } + if t.AssignableTo(trecv) { + addressof = false + deref = false + if debug { + c.Debugf("compiling method %v: value is assignable to receiver", node) + } + } else if addressof && xr.PtrTo(t).AssignableTo(trecv) { + // c.Debugf("method call <%v> will take address of receiver <%v>", tfunc, t) + // ensure receiver is addressable. maybe it was simply dereferenced by Comp.SelectorExpr + // or maybe we need to explicitly take its address + if indirect { + if len(fieldindex) != 0 { + // easy, we dereferenced some expression while descending embedded fields + // so the receiver is addressable + if debug { + c.Debugf("compiling method %v: address-of-value is assignable to receiver", node) + } + } else { + // even easier, the initial expression already contains the address we want + addressof = false + if debug { + c.Debugf("compiling method %v: value was initially an address", node) + } + } + } else { + // manually compile "& receiver_expression" + if debug { + c.Debugf("compiling method %v: compiling address-of-value", node) + } + if len(fieldindex) != 0 { + // must execute address-of-field at runtime, just check that struct is addressable + c.addressOf(node.X) + } else { + e = c.addressOf(node.X) + addressof = false + } + } + } else if deref && t.Elem().AssignableTo(trecv) { + if debug { + c.Debugf("method call <%v> will dereference receiver <%v>", tfunc, t) + } + } else { + c.Errorf("cannot use <%v> as <%v> in receiver of method <%v>", t, trecv, tfunc) + } + + objfun := e.AsX1() + var ret func(env *Env) r.Value + + if t.NumMethod() == rtype.NumMethod() && t.Named() && xr.QName1(t) == xr.QName1(rtype) { + // closures for methods declared by compiled code are available + // simply with reflect.Value.Method(index). Easy. + switch len(fieldindex) { + case 0: + ret = func(env *Env) r.Value { + obj := objfun(env) + return obj.Method(index) + } + case 1: + fieldindex := fieldindex[0] + ret = func(env *Env) r.Value { + obj := objfun(env) + obj = field0(obj, fieldindex) + return obj.Method(index) + } + default: + ret = func(env *Env) r.Value { + obj := objfun(env) + obj = fieldByIndex(obj, fieldindex) + return obj.Method(index) + } + } + } else { + // method declared by interpreted code, manually build the closure. + // + // It's not possible to call r.MakeFunc() only once at compile-time, + // because the closure passed to it needs access to a variable holding the receiver. + // such variable would be allocated only once at compile-time, + // not once per goroutine! + funs := mtd.Funs + nin := tfunc.NumIn() + + tname := t.Name() + methodname := mtd.Name + if funs == nil { + c.Errorf("method declared but not yet implemented: %s.%s", tname, methodname) + } else if len(*funs) <= index || (*funs)[index].Kind() != r.Func { + // c.Warnf("method declared but not yet implemented: %s.%s", tname, methodname) + } + + switch len(fieldindex) { + case 0: + ret = func(env *Env) r.Value { + obj := objfun(env) + if addressof { + obj = obj.Addr() + } else if deref { + obj = obj.Elem() + } + fun := (*funs)[index] // retrieve the function as soon as possible (early bind) + if fun == Nil { + Errorf("method is declared but not yet implemented: %s.%s", tname, methodname) + } + + return r.MakeFunc(rtclosure, func(args []r.Value) []r.Value { + fullargs := make([]r.Value, nin) + fullargs[0] = obj + copy(fullargs[1:], args) + // Debugf("invoking <%v> with args %v", fun.Type(), fullargs) + return fun.Call(fullargs) + }) + } + case 1: + fieldindex := fieldindex[0] + ret = func(env *Env) r.Value { + obj := objfun(env) + obj = field0(obj, fieldindex) + // Debugf("invoking method <%v> on receiver <%v> (addressof=%t, deref=%t)", (*funs)[index].Type(), obj.Type(), addressof, deref) + if addressof { + obj = obj.Addr() + } else if deref { + obj = obj.Elem() + } + fun := (*funs)[index] // retrieve the function as soon as possible (early bind) + + return r.MakeFunc(rtclosure, func(args []r.Value) []r.Value { + fullargs := make([]r.Value, nin) + fullargs[0] = obj + copy(fullargs[1:], args) + // Debugf("invoking <%v> with args %v", fun.Type(), fullargs) + return fun.Call(fullargs) + }) + } + default: + ret = func(env *Env) r.Value { + obj := objfun(env) + obj = fieldByIndex(obj, fieldindex) + if addressof { + obj = obj.Addr() + } else if deref { + obj = obj.Elem() + } + fun := (*funs)[index] // retrieve the function as soon as possible (early bind) + + return r.MakeFunc(rtclosure, func(args []r.Value) []r.Value { + fullargs := make([]r.Value, nin) + fullargs[0] = obj + copy(fullargs[1:], args) + // Debugf("invoking <%v> with args %v", fun.Type(), fullargs) + return fun.Call(fullargs) + }) + } + } + } + return exprX1(tclosure, ret) +} + +// compileMethodAsFunc compiles a method as a function, for example time.Duration.String. +// The method receiver will be the first argument of returned function. +func (c *Comp) compileMethodAsFunc(t xr.Type, mtd xr.Method) *Expr { + tsave := t + fieldindex := mtd.FieldIndex + + // descend embedded fields + for i, index := range fieldindex { + if t.Kind() == r.Ptr && t.Elem().Kind() == r.Struct { + // embedded field (or initial value) is a pointer, dereference it. + t = t.Elem() + fieldindex[i] = ^index // remember we neeed a pointer dereference at runtime + } + t = t.Field(index).Type + } + + index := mtd.Index + tfunc := mtd.Type + trecv := tfunc.In(0) + + objPointer := t.Kind() == r.Ptr // field is pointer? + recvPointer := trecv.Kind() == r.Ptr // method with pointer receiver? + addressof := !objPointer && recvPointer + deref := objPointer && !recvPointer + + // convert a method (i.e. with first param used as receiver) to regular function + // and, if needed, create wrapper method for embedded field + if recvPointer { + // receiver is pointer-to-tsave + if tsave.Kind() != r.Ptr { + tsave = xr.PtrTo(tsave) + if len(fieldindex) != 0 && fieldindex[0] >= 0 { + // remember we neeed a pointer dereference at runtime + fieldindex[0] = ^fieldindex[0] + } + } + } else { + // receiver is tsave + if tsave.Kind() == r.Ptr { + tsave = tsave.Elem() + if len(fieldindex) != 0 && fieldindex[0] < 0 { + // no pointer dereference at runtime + fieldindex[0] = ^fieldindex[0] + } + } + } + tfunc = c.changeFirstParam(tsave, tfunc) + + if len(fieldindex) == 0 { + // tsave is a named type, while trecv may be an unnamed interface: + // use tsave for correctness + t = tsave + } else { + t = trecv + } + if t.Kind() == r.Ptr { + t = t.Elem() + } + rtype := t.ReflectType() + + var ret r.Value + + // c.Debugf("compileMethodAsFunc: t = <%v> has %d methods, rtype = <%v> has %d methods", t, t.NumMethod(), rtype, rtype.NumMethod()) + + if t.NumMethod() == rtype.NumMethod() && t.Named() && xr.QName1(t) == xr.QName1(rtype) { + // methods declared by compiled code are available + // simply with reflect.Type.Method(index). Easy. + rmethod, ok := rtype.MethodByName(mtd.Name) + if !ok { + c.Errorf("inconsistent type <%v>: reflect.Type <%v> has no method %q", t, rtype, mtd.Name) + } + rfunc := rmethod.Func + + if rfunc.Kind() != r.Func { + if rtype.Kind() != r.Interface { + c.Errorf("inconsistent type <%v>: reflect.Type <%v> has method %q with callable function = nil", t, rtype, mtd.Name) + } + // invoking interface method... retrieve the function at runtime + rindex := rmethod.Index // usually == index. may differ if we removed wrapper methods from t + switch len(fieldindex) { + case 0: + ret = r.MakeFunc(tfunc.ReflectType(), func(args []r.Value) []r.Value { + return args[0].Method(rindex).Call(args[1:]) + }) + case 1: + fieldindex := fieldindex[0] + ret = r.MakeFunc(tfunc.ReflectType(), func(args []r.Value) []r.Value { + args[0] = field0(args[0], fieldindex) + return args[0].Method(rindex).Call(args[1:]) + }) + default: + ret = r.MakeFunc(tfunc.ReflectType(), func(args []r.Value) []r.Value { + args[0] = fieldByIndex(args[0], fieldindex) + return args[0].Method(rindex).Call(args[1:]) + }) + } + } else { + // invoking method of named type + switch len(fieldindex) { + case 0: + ret = rfunc + case 1: + fieldindex := fieldindex[0] + ret = r.MakeFunc(tfunc.ReflectType(), func(args []r.Value) []r.Value { + args[0] = field0(args[0], fieldindex) + return rfunc.Call(args) + }) + default: + ret = r.MakeFunc(tfunc.ReflectType(), func(args []r.Value) []r.Value { + args[0] = fieldByIndex(args[0], fieldindex) + return rfunc.Call(args) + }) + } + } + } else { + // method declared by interpreted code, manually retrieve it. + funs := mtd.Funs + + tname := t.Name() + methodname := mtd.Name + if funs == nil { + c.Errorf("method declared but not yet implemented: %s.%s", tname, methodname) + } else if len(*funs) <= index || (*funs)[index].Kind() != r.Func { + // c.Warnf("method declared but not yet implemented: %s.%s", tname, methodname) + } + + switch len(fieldindex) { + case 0: + ret = r.MakeFunc(tfunc.ReflectType(), func(args []r.Value) []r.Value { + if addressof { + args[0] = args[0].Addr() + } else if deref { + args[0] = args[0].Elem() + } + fun := (*funs)[index] // retrieve the function as soon as possible (early bind) + if fun == Nil { + Errorf("method is declared but not yet implemented: %s.%s", tname, methodname) + } + return fun.Call(args) + }) + case 1: + fieldindex := fieldindex[0] + ret = r.MakeFunc(tfunc.ReflectType(), func(args []r.Value) []r.Value { + args[0] = field0(args[0], fieldindex) + // Debugf("invoking method <%v> on receiver <%v> (addressof=%t, deref=%t)", (*funs)[index].Type(), obj.Type(), addressof, deref) + if addressof { + args[0] = args[0].Addr() + } else if deref { + args[0] = args[0].Elem() + } + fun := (*funs)[index] + if fun == Nil { + Errorf("method is declared but not yet implemented: %s.%s", tname, methodname) + } + return fun.Call(args) + }) + default: + ret = r.MakeFunc(tfunc.ReflectType(), func(args []r.Value) []r.Value { + args[0] = fieldByIndex(args[0], fieldindex) + if addressof { + args[0] = args[0].Addr() + } else if deref { + args[0] = args[0].Elem() + } + fun := (*funs)[index] // retrieve the function as soon as possible (early bind) + if fun == Nil { + Errorf("method is declared but not yet implemented: %s.%s", tname, methodname) + } + return fun.Call(args) + }) + } + } + return c.exprValue(tfunc, ret.Interface()) +} + +// SelectorPlace compiles a.b returning a settable and addressable Place +func (c *Comp) SelectorPlace(node *ast.SelectorExpr, opt PlaceOption) *Place { + obje := c.Expr1(node.X) + te := obje.Type + name := node.Sel.Name + switch te.Kind() { + case r.Ptr: + te = te.Elem() + if te.Kind() != r.Struct { + break + } + objfun := obje.AsX1() + obje = exprFun(te, func(env *Env) r.Value { + obj := objfun(env) + // Debugf("SelectorPlace: obj = %v <%v> (expecting pointer to struct)", obj, obj.Type()) + return obj.Elem() + }) + fallthrough + case r.Struct: + if te.ReflectType() == rtypeOfImport && obje.Const() { + // access symbol from imported package, for example fmt.Printf + imp := obje.Value.(Import) + return c.selectorPlaceImport(&imp, name, opt) + } + field, fieldn := c.LookupField(te, name) + if fieldn == 0 { + break + } else if fieldn > 1 { + c.Errorf("type %v has %d fields named %q, all at depth %d", te, fieldn, name, len(field.Index)) + return nil + } + // if te.Kind() == r.Ptr, field is automatically settable and addressable + // because the 'a' in 'a.b' is actually a pointer + if te.Kind() == r.Struct { + c.checkAddressableField(node) + } + return c.compileFieldPlace(obje, field) + } + c.Errorf("type %v has no field %q: %v", te, name, node) + return nil +} + +// selectorImport compiles pkgname.varname returning a settable and/or addressable Place +func (c *Comp) selectorPlaceImport(imp *Import, name string, opt PlaceOption) *Place { + if bind, ok := imp.Binds[name]; ok { + // a settable reflect.Value is always addressable. + // the converse is not guaranteed: unexported fields can be addressed but not set. + // see implementation of reflect.Value.CanAddr() and reflect.Value.CanSet() for details + if bind.IsValid() && bind.CanAddr() { + return &Place{ + Var: Var{Type: imp.BindTypes[name]}, + Fun: func(*Env) r.Value { + return bind + }, + Addr: func(*Env) r.Value { + return bind.Addr() + }, + } + } + c.Errorf("%s %s %s.%s", opt, bind.Kind(), imp.Name, name) + } + c.Errorf("package %v %q has no symbol %s", imp.Name, imp.Path, name) + return nil +} + +// checkSettableField check that a struct field is settable and addressable. +// by Go specs, this requires the struct itself to be settable and addressable. +func (c *Comp) checkAddressableField(node *ast.SelectorExpr) { + panicking := true + defer func() { + if panicking { + rec := recover() + c.Pos = node.Pos() + c.Errorf("cannot assign to %v\n\t%v", node, rec) + } + }() + c.placeOrAddress(node.X, PlaceAddress) + panicking = false +} + +func (c *Comp) compileFieldPlace(obje *Expr, field xr.StructField) *Place { + // c.Debugf("compileFieldPlace: field=%#v", field) + objfun := obje.AsX1() + t := field.Type + var fun, addr func(*Env) r.Value + index := field.Index + if len(index) == 1 { + index0 := index[0] + fun = func(env *Env) r.Value { + obj := objfun(env) + return field0(obj, index0) + } + addr = func(env *Env) r.Value { + obj := objfun(env) + return field0(obj, index0).Addr() + } + } else { + fun = func(env *Env) r.Value { + obj := objfun(env) + return fieldByIndex(obj, index) + } + addr = func(env *Env) r.Value { + obj := objfun(env) + return fieldByIndex(obj, index).Addr() + } + } + return &Place{Var: Var{Type: t, Name: field.Name}, Fun: fun, Addr: addr} +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/slice.go b/vendor/github.com/cosmos72/gomacro/fast/slice.go new file mode 100644 index 0000000..4eb8cee --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/slice.go @@ -0,0 +1,284 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * slice.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + r "reflect" + + xr "github.com/cosmos72/gomacro/xreflect" +) + +// SliceExpr compiles slice[lo:hi] and slice[lo:hi:max] +func (c *Comp) SliceExpr(node *ast.SliceExpr) *Expr { + e := c.Expr1(node.X) + if e.Const() { + e.ConstTo(e.DefaultType()) + } + if e.Type.Kind() == r.Array { + c.sliceArrayMustBeAddressable(node, e) + } + lo := c.sliceIndex(node.Low) + hi := c.sliceIndex(node.High) + max := c.sliceIndex(node.Max) + var ret *Expr + if node.Slice3 { + ret = c.slice3(node, e, lo, hi, max) + } else { + ret = c.slice2(node, e, lo, hi) + } + // constant propagation + if e.Const() && (lo == nil || lo.Const()) && (hi == nil || hi.Const()) && (max == nil || max.Const()) { + ret.EvalConst(CompileKeepUntyped) + } + return ret +} + +func (c *Comp) sliceIndex(node ast.Expr) *Expr { + if node == nil { + return nil + } + idx := c.Expr1(node) + if idx.Const() { + idx.ConstTo(c.TypeOfInt()) + if idx.Value.(int) < 0 { + c.Errorf("negative slice index: %v == %v", node, idx) + } + } else if idx.Type == nil || !idx.Type.AssignableTo(c.TypeOfInt()) { + c.Errorf("invalid slice index: expecting integer, found: %v <%v>", idx.Type, node) + } + return idx +} + +// slice2 compiles slice[lo:hi] +func (c *Comp) slice2(node *ast.SliceExpr, e, lo, hi *Expr) *Expr { + t := e.Type + switch t.Kind() { + case r.String: + return c.sliceString(e, lo, hi) + case r.Ptr: + if t.Elem().Kind() != r.Array { + break + } + fallthrough + case r.Slice, r.Array: + if t.Kind() == r.Ptr { + t = t.Elem() + objfun := e.AsX1() + e = exprX1(t, func(env *Env) r.Value { + return objfun(env).Elem() + }) + } + objfun := e.AsX1() + if lo == nil { + lo = c.exprValue(c.TypeOfInt(), 0) + } + var fun func(env *Env) r.Value + if lo.Const() { + lo := lo.Value.(int) + if hi == nil { + fun = func(env *Env) r.Value { + obj := objfun(env) + return obj.Slice(lo, obj.Len()) + } + } else if hi.Const() { + hi := hi.Value.(int) + fun = func(env *Env) r.Value { + obj := objfun(env) + return obj.Slice(lo, hi) + } + } else { + hifun := hi.WithFun().(func(*Env) int) + fun = func(env *Env) r.Value { + obj := objfun(env) + hi := hifun(env) + return obj.Slice(lo, hi) + } + } + } else { + lofun := lo.WithFun().(func(*Env) int) + if hi == nil { + fun = func(env *Env) r.Value { + obj := objfun(env) + lo := lofun(env) + return obj.Slice(lo, obj.Len()) + } + } else if hi.Const() { + hi := hi.Value.(int) + fun = func(env *Env) r.Value { + obj := objfun(env) + lo := lofun(env) + return obj.Slice(lo, hi) + } + } else { + hifun := hi.WithFun().(func(*Env) int) + fun = func(env *Env) r.Value { + obj := objfun(env) + lo := lofun(env) + hi := hifun(env) + return obj.Slice(lo, hi) + } + } + } + tout := xr.SliceOf(t.Elem()) + return exprX1(tout, fun) + } + c.Errorf("cannot slice %v: %v", t, node) + return nil +} + +// sliceString compiles string[lo:hi] +func (c *Comp) sliceString(e, lo, hi *Expr) *Expr { + objfun := e.WithFun().(func(*Env) string) + var fun func(env *Env) string + if lo == nil { + if hi == nil { + fun = objfun + } else if hi.Const() { + hi := hi.Value.(int) + fun = func(env *Env) string { + obj := objfun(env) + return obj[:hi] + } + } else { + hifun := hi.WithFun().(func(*Env) int) + fun = func(env *Env) string { + obj := objfun(env) + hi := hifun(env) + return obj[:hi] + } + } + } else if lo.Const() { + lo := lo.Value.(int) + if hi == nil { + fun = func(env *Env) string { + obj := objfun(env) + return obj[lo:] + } + } else if hi.Const() { + hi := hi.Value.(int) + fun = func(env *Env) string { + obj := objfun(env) + return obj[lo:hi] + } + } else { + hifun := hi.WithFun().(func(*Env) int) + fun = func(env *Env) string { + obj := objfun(env) + hi := hifun(env) + return obj[lo:hi] + } + } + } else { + lofun := lo.WithFun().(func(*Env) int) + if hi == nil { + fun = func(env *Env) string { + obj := objfun(env) + lo := lofun(env) + return obj[lo:] + } + } else if hi.Const() { + hi := hi.Value.(int) + fun = func(env *Env) string { + obj := objfun(env) + lo := lofun(env) + return obj[lo:hi] + } + } else { + hifun := hi.WithFun().(func(*Env) int) + fun = func(env *Env) string { + obj := objfun(env) + lo := lofun(env) + hi := hifun(env) + return obj[lo:hi] + } + } + } + return exprFun(c.TypeOfString(), fun) +} + +// slice3 compiles slice[lo:hi:max] +func (c *Comp) slice3(node *ast.SliceExpr, e, lo, hi, max *Expr) *Expr { + if lo == nil { + lo = c.exprValue(c.TypeOfInt(), 0) + } + if hi == nil { + c.Errorf("final index required in 3-index slice: %v", node) + } + if max == nil { + c.Errorf("final index required in 3-index slice: %v", node) + } + t := e.Type + switch t.Kind() { + case r.String: + c.Errorf("invalid operation %v (3-index slice of string)", node) + return nil + case r.Ptr: + if t.Elem().Kind() != r.Array { + break + } + fallthrough + case r.Slice, r.Array: + objfun := e.AsX1() + lofun := lo.WithFun().(func(*Env) int) + hifun := hi.WithFun().(func(*Env) int) + maxfun := max.WithFun().(func(*Env) int) + var fun func(env *Env) r.Value + if t.Kind() == r.Ptr { + t = t.Elem() + fun = func(env *Env) r.Value { + obj := objfun(env).Elem() + lo := lofun(env) + hi := hifun(env) + max := maxfun(env) + return obj.Slice3(lo, hi, max) + } + } else { + fun = func(env *Env) r.Value { + obj := objfun(env) + lo := lofun(env) + hi := hifun(env) + max := maxfun(env) + return obj.Slice3(lo, hi, max) + } + } + tout := xr.SliceOf(t.Elem()) + return exprX1(tout, fun) + } + c.Errorf("cannot slice %v: %v", t, node) + return nil +} + +func (c *Comp) sliceArrayMustBeAddressable(node *ast.SliceExpr, e *Expr) { + panicking := true + defer func() { + if panicking { + c.Errorf("cannot slice: array must be addressable: %v <%v>", node, e.Type) + } + }() + c.placeOrAddress(node.X, PlaceAddress) + panicking = false +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/statement.go b/vendor/github.com/cosmos72/gomacro/fast/statement.go new file mode 100644 index 0000000..dbb028e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/statement.go @@ -0,0 +1,702 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * statement.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + r "reflect" + "sort" + + . "github.com/cosmos72/gomacro/base" +) + +func stmtNop(env *Env) (Stmt, *Env) { + env.IP++ + return env.Code[env.IP], env +} + +func popEnv(env *Env) (Stmt, *Env) { + outer := env.Outer + outer.IP = env.IP + 1 + env.FreeEnv() + return outer.Code[outer.IP], outer +} + +func (c *Comp) Stmt(in ast.Stmt) { + var labels []string + for { + if in != nil { + c.Pos = in.Pos() + } + switch node := in.(type) { + case nil: + case *ast.AssignStmt: + c.Assign(node) + case *ast.BlockStmt: + c.Block(node) + case *ast.BranchStmt: + c.Branch(node) + case *ast.CaseClause: + c.misplacedCase(node, node.List == nil) + case *ast.CommClause: + c.misplacedCase(node, node.Comm == nil) + case *ast.DeclStmt: + c.Decl(node.Decl) + case *ast.DeferStmt: + c.Defer(node) + case *ast.EmptyStmt: + // nothing to do + case *ast.ExprStmt: + expr := c.Expr(node.X) + if !expr.Const() { + c.Append(expr.AsStmt(), in.Pos()) + } + case *ast.ForStmt: + c.For(node, labels) + case *ast.GoStmt: + c.Go(node) + case *ast.IfStmt: + c.If(node) + case *ast.IncDecStmt: + c.IncDec(node) + case *ast.LabeledStmt: + labels = append(labels, node.Label.Name) + in = node.Stmt + continue + case *ast.RangeStmt: + c.Range(node, labels) + case *ast.ReturnStmt: + c.Return(node) + case *ast.SelectStmt: + c.Select(node, labels) + case *ast.SendStmt: + c.Send(node) + case *ast.SwitchStmt: + c.Switch(node, labels) + case *ast.TypeSwitchStmt: + c.TypeSwitch(node, labels) + default: + c.Errorf("unimplemented statement: %v <%v>", node, r.TypeOf(node)) + } + return + } +} + +// Block compiles a block statement, i.e. { ... } +func (c *Comp) Block(block *ast.BlockStmt) { + if block == nil || len(block.List) == 0 { + return + } + c.List(block.List) +} + +// List compiles a slice of statements +func (c *Comp) List(list []ast.Stmt) { + if len(list) == 0 { + c.Errorf("List invoked on empty statement list") + } + var nbinds [2]int // # of binds in the block + + c2, locals := c.pushEnvIfLocalBinds(&nbinds, list...) + + for _, node := range list { + c2.Stmt(node) + } + + c2.popEnvIfLocalBinds(locals, &nbinds, list...) + + // c.Debugf("List compiled. inner *Comp = %#v", c2) +} + +// Branch compiles a break, continue, fallthrough or goto statement +func (c *Comp) Branch(node *ast.BranchStmt) { + switch node.Tok { + case token.BREAK: + c.Break(node) + case token.CONTINUE: + c.Continue(node) + case token.FALLTHROUGH: + c.misplacedFallthrough() + /* + case token.GOTO: + c.Goto(node) + */ + default: + c.Errorf("unimplemented branch statement: %v <%v>", node, r.TypeOf(node)) + } +} + +// Break compiles a "break" statement +func (c *Comp) Break(node *ast.BranchStmt) { + label := "" + if node.Label != nil { + label = node.Label.Name + } + upn := 0 + // do not cross function boundaries + for o := c; o != nil && o.Func == nil; o = o.Outer { + if o.Loop != nil && o.Loop.Break != nil { + if len(label) == 0 || o.Loop.HasLabel(label) { + // only keep a reference to the jump target, NOT TO THE WHOLE *Comp! + c.jumpOut(upn, o.Loop.Break) + return + } + } + upn += o.UpCost // count how many Env:s we must exit at runtime + } + if len(label) != 0 { + c.Errorf("break label not defined: %v", label) + } else { + c.Errorf("break outside for/switch") + } +} + +// Continue compiles a "continue" statement +func (c *Comp) Continue(node *ast.BranchStmt) { + label := "" + if node.Label != nil { + label = node.Label.Name + } + upn := 0 + // do not cross function boundaries + for o := c; o != nil && o.Func == nil; o = o.Outer { + if o.Loop != nil && o.Loop.Continue != nil { + if len(label) == 0 || o.Loop.HasLabel(label) { + // only keep a reference to the jump target, NOT TO THE WHOLE *Comp! + c.jumpOut(upn, o.Loop.Continue) + return + } + } + upn += o.UpCost // count how many Env:s we must exit at runtime + } + if len(label) != 0 { + c.Errorf("continue label not defined: %v", label) + } else { + c.Errorf("continue outside for") + } +} + +// Defer compiles a "defer" statement +func (c *Comp) Defer(node *ast.DeferStmt) { + call := c.prepareCall(node.Call, nil) + fun := call.Fun.AsX1() + argfuns := call.MakeArgfunsX1() + ellipsis := call.Ellipsis + c.append(func(env *Env) (Stmt, *Env) { + // Go specs: arguments of a defer call are evaluated immediately. + // the call itself is executed when the function containing defer returns, + // either normally or with a panic + f := fun(env) + if f.CanSet() { + f = f.Convert(f.Type()) // make a copy + } + args := make([]r.Value, len(argfuns)) + for i, argfun := range argfuns { + v := argfun(env) + if v.CanSet() { + v = v.Convert(v.Type()) // make a copy + } + args[i] = v + } + env.IP++ + g := env.ThreadGlobals + if ellipsis { + g.InstallDefer = func() { + f.CallSlice(args) + } + } else { + g.InstallDefer = func() { + f.Call(args) + } + } + g.Signal = SigDefer + return g.Interrupt, env + }) + c.Code.WithDefers = true +} + +// jumpOut compiles a break or continue statement +// ip is a pointer because the jump target may not be known yet... it will be filled later +func (c *Comp) jumpOut(upn int, ip *int) { + var stmt Stmt + switch upn { + case 0: + stmt = func(env *Env) (Stmt, *Env) { + ip := *ip + env.IP = ip + return env.Code[ip], env + } + case 1: + stmt = func(env *Env) (Stmt, *Env) { + env = env.Outer + ip := *ip + env.IP = ip + return env.Code[ip], env + } + case 2: + stmt = func(env *Env) (Stmt, *Env) { + env = env.Outer.Outer + ip := *ip + env.IP = ip + return env.Code[ip], env + } + default: + stmt = func(env *Env) (Stmt, *Env) { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + ip := *ip + env.IP = ip + return env.Code[ip], env + } + } + c.append(stmt) +} + +// For compiles a "for" statement +func (c *Comp) For(node *ast.ForStmt, labels []string) { + initLocals := false + var initBinds [2]int + + c, initLocals = c.pushEnvIfLocalBinds(&initBinds, node.Init) + if node.Init != nil { + c.Stmt(node.Init) + } + flag, fun, err := true, (func(*Env) bool)(nil), false // "for { }" without a condition means "for true { }" + if node.Cond != nil { + pred := c.Expr(node.Cond) + flag, fun, err = pred.TryAsPred() + if err { + c.invalidPred(node.Cond, pred) + return + } + } + var jump struct{ Cond, Post, Break int } + sort.Strings(labels) + // we need a fresh Comp here... created above by c.pushEnvIfLocalBinds() + c.Loop = &LoopInfo{ + Continue: &jump.Post, + Break: &jump.Break, + ThisLabels: labels, + } + + // compile the condition, if not a constant + jump.Cond = c.Code.Len() + if fun != nil { + stmt := func(env *Env) (Stmt, *Env) { + var ip int + if fun(env) { + ip = env.IP + 1 + // Debugf("for: condition = true, iterating. IntBinds = %v", env.IntBinds) + } else { + // Debugf("for: condition = false, exiting. IntBinds = %v", env.IntBinds) + ip = jump.Break + } + env.IP = ip + return env.Code[ip], env + } + c.Append(stmt, node.Cond.Pos()) + } + // compile the body + c.Block(node.Body) + // compile the post + if node.Post == nil { + jump.Post = jump.Cond // no post statement. "continue" jumps to the condition + } else { + jump.Post = c.Code.Len() + if containLocalBinds(node.Post) { + c.Errorf("invalid for: cannot declare new variables in post statement: %v", node.Post) + } + c.Stmt(node.Post) + } + c.Append(func(env *Env) (Stmt, *Env) { + // jump back to the condition + // Debugf("for: body executed, jumping back to condition. IntBinds = %v", env.IntBinds) + // time.Sleep(time.Second / 10) + ip := jump.Cond + env.IP = ip + return env.Code[ip], env + }, node.End()-1) + if fun == nil && !flag { + // "for false { }" means that body, post and jump back to condition are never executed... + // still compiled above (to check for errors) but drop the generated code + c.Code.List = c.Code.List[0:jump.Cond] + } + jump.Break = c.Code.Len() + + c = c.popEnvIfLocalBinds(initLocals, &initBinds, node.Init) +} + +// Go compiles a "go" statement i.e. a goroutine +func (c *Comp) Go(node *ast.GoStmt) { + // we must create a new ThreadGlobals with a new Pool. + // Ideally, the new ThreadGlobals could be created inside the call, + // but that requires modifying the function being executed. + // Instead, we create the new ThreadGlobals here and wrap it into an "unnecessary" Env + // Thus we must create a corresponding "unnecessary" Comp and use it to compile the call + c2 := NewComp(c, &c.Code) + + call := c2.prepareCall(node.Call, nil) + exprfun := call.Fun.AsX1() + argfunsX1 := call.MakeArgfunsX1() + + stmt := func(env *Env) (Stmt, *Env) { + // create a new Env to hold the new ThreadGlobals and (initially empty) Pool + env2 := NewEnv4Func(env, 0, 0) + tg := env.ThreadGlobals + env2.ThreadGlobals = &ThreadGlobals{ + FileEnv: tg.FileEnv, + TopEnv: tg.TopEnv, + // Interrupt, Signal, PoolSize and Pool are zero-initialized, fine with that + Globals: tg.Globals, + } + // env2.MarkUsedByClosure() // redundant, done by exprfun(env2) below + + // function and arguments are evaluated in the caller's goroutine + // using the new Env: we compiled them with c2 => execute them with env2 + funv := exprfun(env2) + argv := make([]r.Value, len(argfunsX1)) + for i, argfun := range argfunsX1 { + argv[i] = argfun(env2) + } + // the call is executed in a new goroutine. + // make it easy and do not try to optimize this call. + go funv.Call(argv) + + env.IP++ + return env.Code[env.IP], env + } + c2.Append(stmt, node.Pos()) + + // propagate back the compiled code + c.Code = c2.Code +} + +// If compiles an "if" statement +func (c *Comp) If(node *ast.IfStmt) { + var jump struct{ Then, Else, End int } + + initLocals := false + var initBinds [2]int + c, initLocals = c.pushEnvIfLocalBinds(&initBinds, node.Init) + if node.Init != nil { + c.Stmt(node.Init) + } + pred := c.Expr(node.Cond) + flag, fun, err := pred.TryAsPred() + if err { + c.invalidPred(node.Cond, pred) + return + } + if fun != nil { + stmt := func(env *Env) (Stmt, *Env) { + var ip int + if fun(env) { + ip = jump.Then + } else { + ip = jump.Else + } + env.IP = ip + return env.Code[ip], env + } + c.Append(stmt, node.Cond.Pos()) + } + // compile 'then' branch + jump.Then = c.Code.Len() + c.Block(node.Body) + if fun == nil && !flag { + // 'then' branch is never executed... + // still compiled above (to check for errors) but drop the generated code + c.Code.List = c.Code.List[0:jump.Then] + } + // compile a 'goto' between 'then' and 'else' branches + if fun != nil && node.Else != nil { + c.Append(func(env *Env) (Stmt, *Env) { + // after executing 'then' branch, we must skip 'else' branch + env.IP = jump.End + return env.Code[jump.End], env + }, node.Else.Pos()) + } + // compile 'else' branch + jump.Else = c.Code.Len() + if node.Else != nil { + // parser should guarantee Else to be a block or another "if" + // but macroexpansion can optimize away the block if it contains no declarations. + // still, better be safe and wrap the Else again in a block because: + // 1) catches improper macroexpander optimizations + // 2) there is no runtime performance penalty + xelse := node.Else + _, ok1 := xelse.(*ast.BlockStmt) + _, ok2 := xelse.(*ast.IfStmt) + if ok1 || ok2 { + c.Stmt(xelse) + } else { + c.Block(&ast.BlockStmt{List: []ast.Stmt{xelse}}) + } + if fun == nil && flag { + // 'else' branch is never executed... + // still compiled above (to check for errors) but drop the generated code + c.Code.List = c.Code.List[0:jump.Else] + } + } + jump.End = c.Code.Len() + + c = c.popEnvIfLocalBinds(initLocals, &initBinds, node.Init) +} + +// IncDec compiles a "place++" or "place--" statement +func (c *Comp) IncDec(node *ast.IncDecStmt) { + place := c.Place(node.X) + op := node.Tok + if op == token.DEC { + op = token.SUB + } else { + op = token.ADD + } + one := c.exprUntypedLit(untypedOne.Kind, untypedOne.Obj) + c.SetPlace(place, op, one) +} + +// Return compiles a "return" statement +func (c *Comp) Return(node *ast.ReturnStmt) { + var cinfo *FuncInfo + var upn int + var cf *Comp + for cf = c; cf != nil; cf = cf.Outer { + if cf.Func != nil { + cinfo = cf.Func + break + } + upn += cf.UpCost // count how many Env:s we must exit at runtime + } + if cinfo == nil { + c.Errorf("return outside function") + return + } + + resultBinds := cinfo.Results + resultExprs := node.Results + n := len(resultBinds) + switch len(resultExprs) { + case n: + // ok + case 1: + if n == 0 { + c.Errorf("return: expecting %d expressions, found %d: %v", n, len(resultExprs), node) + } + c.returnMultiValues(node, resultBinds, upn, resultExprs) + return + case 0: + if !cinfo.NamedResults { + // naked return requires results to have names + c.Errorf("return: expecting %d expressions, found %d: %v", n, len(resultExprs), node) + return + } + n = 0 // naked return. results are already set + default: + c.Errorf("return: expecting %d expressions, found %d: %v", n, len(resultExprs), node) + return + } + + exprs := c.Exprs(resultExprs) + for i := 0; i < n; i++ { + c.SetVar(resultBinds[i].AsVar(upn, PlaceSettable), token.ASSIGN, exprs[i]) + } + c.Append(stmtReturn, node.Pos()) +} + +// returnMultiValues compiles a "return foo()" statement where foo() returns multiple values +func (c *Comp) returnMultiValues(node *ast.ReturnStmt, resultBinds []*Bind, upn int, exprs []ast.Expr) { + n := len(resultBinds) + e := c.ExprsMultipleValues(exprs, n)[0] + fun := e.AsXV(CompileDefaults) + assigns := make([]func(*Env, r.Value), n) + for i := 0; i < n; i++ { + texpected := resultBinds[i].Type + tactual := e.Out(i) + if !tactual.AssignableTo(texpected) { + c.Errorf("incompatible types in assignment: %v = %v", texpected, tactual) + } + assigns[i] = c.varSetValue(resultBinds[i].AsVar(upn, PlaceSettable)) + } + c.Append(func(env *Env) (Stmt, *Env) { + // no risk in evaluating fun() first: return binds are plain variables, not places with side effects + _, vals := fun(env) + for i, assign := range assigns { + assign(env, vals[i]) + } + // append the return epilogue + common := env.ThreadGlobals + common.Signal = SigReturn + return common.Interrupt, env + }, node.Pos()) +} + +func stmtReturn(env *Env) (Stmt, *Env) { + common := env.ThreadGlobals + common.Signal = SigReturn + return common.Interrupt, env +} + +// containLocalBinds return true if one or more of the given statements (but not their contents: +// blocks are not examined) contain some function/variable declaration. +// ignores types, constants and anything named "_" +func containLocalBinds(list ...ast.Stmt) bool { + if len(list) == 0 { + Errorf("internal error: containLocalBinds() invoked on empty statement list") + } + for _, node := range list { + switch node := node.(type) { + case *ast.AssignStmt: + if node.Tok == token.DEFINE { + return true + } + case *ast.DeclStmt: + switch decl := node.Decl.(type) { + case *ast.FuncDecl: + // Go compiler forbids local functions... we allow them + if decl.Name != nil && decl.Name.Name != "_" { + return true + } + case *ast.GenDecl: + if decl.Tok != token.VAR { + continue + } + // found local variables... bail out unless they are all named "_" + for _, spec := range decl.Specs { + switch spec := spec.(type) { + case *ast.ValueSpec: + for _, ident := range spec.Names { + if ident.Name != "_" { + return true + } + } + } + } + } + case nil: + } + } + return false +} + +// pushEnvIfLocalBinds compiles a PushEnv statement if list contains local binds +// returns the *Comp to use to compile statement list. +func (c *Comp) pushEnvIfLocalBinds(nbinds *[2]int, list ...ast.Stmt) (inner *Comp, locals bool) { + if len(list) == 0 { + inner.Errorf("internal error: pushEnvIfLocalBinds() invoked on empty statement list") + } + // optimization: examine statements. if none of them is a function/variable declaration, + // no need to create a new *Env at runtime + // note: we still create a new *Comp at compile time to handle constant/type declarations + locals = containLocalBinds(list...) + return c.pushEnvIfFlag(nbinds, locals) +} + +// pushEnvIfDefine compiles a PushEnv statement if tok is token.DEFINE +// returns the *Comp to use to compile statement list. +func (c *Comp) pushEnvIfDefine(nbinds *[2]int, tok token.Token) (inner *Comp, locals bool) { + return c.pushEnvIfFlag(nbinds, tok == token.DEFINE) +} + +// pushEnvIfFlag compiles a PushEnv statement if flag is true +// returns the *Comp to use to compile statement list. +func (c *Comp) pushEnvIfFlag(nbinds *[2]int, flag bool) (*Comp, bool) { + if flag { + // push new *Env at runtime. we will know # of binds in the block only later, so use a closure on them + c.append(func(env *Env) (Stmt, *Env) { + inner := NewEnv(env, nbinds[0], nbinds[1]) + inner.IP++ + // Debugf("PushEnv(%p->%p), IP = %d of %d, pushed %d binds and %d intbinds", env, inner, inner.IP, nbinds[0], nbinds[1]) + return inner.Code[inner.IP], inner + }) + } + inner := NewComp(c, &c.Code) + if !flag { + inner.UpCost = 0 + inner.Depth-- + } + return inner, flag +} + +// popEnvIfLocalBinds compiles a PopEnv statement if locals is true. also sets *nbinds and *nintbinds +func (inner *Comp) popEnvIfLocalBinds(locals bool, nbinds *[2]int, list ...ast.Stmt) *Comp { + if len(list) == 0 { + inner.Errorf("internal error: popEnvIfLocalBinds() invoked on empty statement list") + } + c := inner.Outer + c.Code = inner.Code // copy back accumulated code + nbinds[0] = inner.BindNum // we finally know these + nbinds[1] = inner.IntBindNum + + if locals != (inner.BindNum != 0 || inner.IntBindNum != 0) { + c.Errorf(`internal error: containLocalBinds() returned %t, but block actually defined %d Binds and %d IntBinds: + Binds = %v + Block = +%v`, locals, inner.BindNum, inner.IntBindNum, inner.Binds, &ast.BlockStmt{List: list}) + return nil + } + + if locals { + // pop *Env at runtime + c.append(popEnv) + } + return c +} + +// popEnvIfLocalBinds compiles a PopEnv statement if flag is true. also sets *nbinds and *nintbinds +func (inner *Comp) popEnvIfFlag(nbinds *[2]int, flag bool) *Comp { + c := inner.Outer + c.Code = inner.Code // copy back accumulated code + nbinds[0] = inner.BindNum // we finally know these + nbinds[1] = inner.IntBindNum + + if flag != (inner.BindNum != 0 || inner.IntBindNum != 0) { + c.Errorf(`popEnvIfFlag internal error: flag is %t, but block actually defined %d Binds and %d IntBinds: + Binds = %v`, flag, inner.BindNum, inner.IntBindNum, inner.Binds) + return nil + } + + if flag { + // pop *Env at runtime + c.append(popEnv) + } + return c +} + +func (c *Comp) misplacedCase(node ast.Node, isdefault bool) { + label := "case" + if isdefault { + label = "default" + } + c.Errorf("misplaced %s: not inside switch or select: %v <%v>", label, node, r.TypeOf(node)) +} + +func (c *Comp) misplacedFallthrough() { + c.Errorf("misplaced fallthrough: not inside switch") +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/switch.go b/vendor/github.com/cosmos72/gomacro/fast/switch.go new file mode 100644 index 0000000..f3961cf --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/switch.go @@ -0,0 +1,364 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * switch.go + * + * Created on May 06, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/constant" + "go/token" + r "reflect" + "sort" + "time" + + . "github.com/cosmos72/gomacro/base" +) + +type caseEntry struct { + Pos token.Pos + IP int +} + +type caseMap map[interface{}]caseEntry + +type caseHelper struct { + ConstMap caseMap // constains all case constants + GotoMap caseMap // contains only the constants appearing before any non-constant case expression + AllConst bool +} + +// keep track of constant expressions in cases. error on duplicates +func (seen *caseHelper) add(c *Comp, val interface{}, entry caseEntry) { + prev, found := seen.ConstMap[val] + if found { + c.Errorf("duplicate case %v <%v> in switch\n\tprevious case at %s", val, r.TypeOf(val), c.Fileset.Position(prev.Pos)) + return + } + seen.ConstMap[val] = entry + if seen.AllConst { + seen.GotoMap[val] = entry + } +} + +func (c *Comp) Switch(node *ast.SwitchStmt, labels []string) { + initLocals := false + var initBinds [2]int + c, initLocals = c.pushEnvIfLocalBinds(&initBinds, node.Init) + if node.Init != nil { + c.Stmt(node.Init) + } + var ibreak int + sort.Strings(labels) + c.Loop = &LoopInfo{ + Break: &ibreak, + ThisLabels: labels, + } + + // tag.Value (if constant) or tag.Fun() will return the tag value at runtime + var tag *Expr + tagnode := node.Tag + if tagnode == nil { + // "switch { }" without an expression means "switch true { }" + tag = c.exprUntypedLit(r.Bool, constant.MakeBool(true)) + tagnode = &ast.Ident{NamePos: node.Pos() + 6, Name: "true"} // only for error messages + } else { + tag = c.Expr1(tagnode) + } + if !tag.Const() { + // cannot invoke tag.Fun() multiple times because side effects must be applied only once! + // switchTag saves the result of tag.Fun() in a runtime bind + // and returns an expression that retrieves it + tag = c.switchTag(tag) + + if c.Options&OptDebugSleepOnSwitch != 0 { + c.append(func(env *Env) (Stmt, *Env) { + Debugf("start sleeping on switch, env = %p", env) + time.Sleep(time.Second / 30) + Debugf("done sleeping on switch, env = %p", env) + env.IP++ + return env.Code[env.IP], env + }) + } + } + if node.Body != nil { + // reserve a code slot for switchGotoMap/switchGotoSlice optimizer + ipswitchgoto := c.Code.Len() + seen := &caseHelper{make(caseMap), make(caseMap), true} // keeps track of constant expressions in cases. errors on duplicates + c.Append(stmtNop, node.Body.Pos()) + + list := node.Body.List + defaulti := -1 + var defaultpos token.Pos + n := len(list) + for i, stmt := range list { + switch clause := stmt.(type) { + case *ast.CaseClause: + canfallthrough := i < n-1 // last case cannot fallthrough + if clause.List == nil { + if defaulti >= 0 { + c.Errorf("multiple defaults in switch (first at %s)", c.Fileset.Position(defaultpos)) + } + defaulti = c.Code.Len() + defaultpos = clause.Pos() + c.switchDefault(clause, canfallthrough) + } else { + c.switchCase(clause, tagnode, tag, canfallthrough, seen) + } + default: + c.Errorf("invalid statement inside switch: expecting case or default, found: %v <%v>", stmt, r.TypeOf(stmt)) + } + } + // default is executed as last, if no other case matches + if defaulti >= 0 { + // +1 to skip its "never matches" header + c.Append(func(env *Env) (Stmt, *Env) { + ip := defaulti + 1 + env.IP = ip + return env.Code[ip], env + }, defaultpos) + } + // try to optimize + c.switchGotoMap(tag, seen, ipswitchgoto) + } + // we finally know this + ibreak = c.Code.Len() + + c = c.popEnvIfLocalBinds(initLocals, &initBinds, node.Init) +} + +// switchTag takes the expression immediately following a switch, +// compiles it to a statement that evaluates it and saves its result +// in a runtime binding (an interpreter local variable), +// finally returns another expression that retrieves such runtime binding +func (c *Comp) switchTag(e *Expr) *Expr { + var upn, o = 0, c + // try to piggyback the binding to a Comp that already has some bindings, + // but do not cross function boundaries + for o.BindNum == 0 && o.IntBindNum == 0 && o.Func == nil && o.Outer != nil { + upn += o.UpCost + o = o.Outer + } + return c.Symbol(c.declUnnamedBind(e, o, upn)) +} + +// switchCase compiles a case in a switch. +func (c *Comp) switchCase(node *ast.CaseClause, tagnode ast.Expr, tag *Expr, canfallthrough bool, seen *caseHelper) { + cmpfuns := make([]func(*Env) bool, 0) + cmpnode := &ast.BinaryExpr{Op: token.EQL, X: tagnode} // for error messages, and Comp.BinaryExpr1 dispatches on its Op + + ibody := c.Code.Len() + 1 // body will start here + // compile a comparison of tag against each expression + sometrue := false + for _, enode := range node.List { + e := c.Expr1(enode) + if e.Const() { + e.ConstTo(tag.Type) + } + cmpnode.OpPos = enode.Pos() + cmpnode.Y = enode + cmp := c.BinaryExpr1(cmpnode, tag, e) + if e.Const() { + seen.add(c, e.Value, caseEntry{Pos: enode.Pos(), IP: ibody}) + if tag.Const() { + // constant propagation + flag := cmp.EvalConst(CompileDefaults) + if r.ValueOf(flag).Bool() { + sometrue = true + break // always matches, no need to check further expressions + } else { + // can never match, skip this expression + continue + } + } + } else { + seen.AllConst = false + } + // constants are handled above. only add non-constant comparisons to cmpfuns + cmpfuns = append(cmpfuns, cmp.Fun.(func(*Env) bool)) + } + // compile like "if tag == e1 || tag == e2 ... { }" + // and keep track of where to jump if no expression matches + // + // always occupy a Code slot for cmpfuns, even if nothing to do. + // reason: both caseMap optimizer and fallthrough from previous case + // skip such slot and jump to current body + var iend int + var stmt Stmt + switch len(cmpfuns) { + case 0: + if sometrue { + stmt = stmtNop + } else { + // compile anyway, a fallthrough from previous case may still reach the current body + stmt = func(env *Env) (Stmt, *Env) { + ip := iend + env.IP = ip + return env.Code[ip], env + } + } + case 1: + cmpfun := cmpfuns[0] + if sometrue { + stmt = func(env *Env) (Stmt, *Env) { + // keep side effects + cmpfun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + var ip int + if cmpfun(env) { + ip = env.IP + 1 + } else { + ip = iend + } + env.IP = ip + return env.Code[ip], env + } + } + case 2: + cmpfuns := [...]func(*Env) bool{ + cmpfuns[0], + cmpfuns[1], + } + if sometrue { + stmt = func(env *Env) (Stmt, *Env) { + // keep side effects + _ = cmpfuns[0](env) || cmpfuns[1](env) + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + var ip int + if cmpfuns[0](env) || cmpfuns[1](env) { + ip = env.IP + 1 + } else { + ip = iend + } + env.IP = ip + return env.Code[ip], env + } + } + default: + if sometrue { + stmt = func(env *Env) (Stmt, *Env) { + for _, cmpfun := range cmpfuns { + // keep side effects + if cmpfun(env) { + break + } + } + env.IP++ + return env.Code[env.IP], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + ip := iend + for _, cmpfun := range cmpfuns { + if cmpfun(env) { + ip = env.IP + 1 + break + } + } + env.IP = ip + return env.Code[ip], env + } + } + } + c.Append(stmt, node.Pos()) + c.switchCaseBody(node.Body, canfallthrough) + // we finally know where to jump if match fails + iend = c.Code.Len() +} + +// switchDefault compiles the default case in a switch +func (c *Comp) switchDefault(node *ast.CaseClause, canfallthrough bool) { + var iend int + c.Append(func(env *Env) (Stmt, *Env) { + // jump to the next case. we must always add this statement for three reasons: + // 1) if default is entered normally, it always fails to match and jumps to the next case + // 2) if the previous case ends with fallthrough, it will skip this statement and jump to default's body + // 3) if the switch ends without any matching case, it will manually jump to default's body (skipping this statement) + ip := iend + env.IP = ip + return env.Code[ip], env + }, node.Pos()) + c.switchCaseBody(node.Body, canfallthrough) + // we finally know where to jump if match fails + iend = c.Code.Len() +} + +// switchCaseBody compiles the body of a case in a switch +func (c *Comp) switchCaseBody(list []ast.Stmt, canfallthrough bool) { + var isfallthrough bool + var endpos token.Pos + n := len(list) + if n != 0 { + isfallthrough = isFallthrough(list[n-1]) + if isfallthrough { + endpos = list[n-1].Pos() + if canfallthrough { + n-- + list = list[:n] + } else { + c.Errorf("cannot fallthrough final case in switch") + return + } + } else { + endpos = list[n-1].End() + } + + // c.List creates a new scope... not accurate, compiled Go doesn't. + // but at least isolates per-case variables, as compiled Go does + if n != 0 { + c.List(list) + } + } + // after executing the case body, either break or fallthrough + c.Pos = endpos + if isfallthrough { + c.append(stmtFallthrough) + } else { + c.jumpOut(0, c.Loop.Break) + } +} + +// stmtFallThrough executes a fallthrough statement - only works inside a switch, +// and cannot be used in the last switch of a case +func stmtFallthrough(env *Env) (Stmt, *Env) { + env.IP += 2 // +2 to skip the comparisons in next case, and jump directly to its body + return env.Code[env.IP], env +} + +func isFallthrough(node ast.Stmt) bool { + switch node := node.(type) { + case *ast.BranchStmt: + return node.Tok == token.FALLTHROUGH + default: + return false + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/switch2.go b/vendor/github.com/cosmos72/gomacro/fast/switch2.go new file mode 100644 index 0000000..b717b1b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/switch2.go @@ -0,0 +1,1045 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * switch2.go + * + * Created on May 06, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +func (c *Comp) switchGotoMap(tag *Expr, seen *caseHelper, ip int) { + if len(seen.GotoMap) <= 1 { + return + } + + var stmt Stmt + switch efun := tag.Fun.(type) { + case func(*Env) bool: + m := [2]int{-1, -1} + for k, v := range seen.GotoMap { + if r.ValueOf(k).Bool() { + m[1] = v.IP + } else { + m[0] = v.IP + } + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + var ip int + if val { + ip = m[1] + } else { + ip = m[0] + } + + if ip >= 0 { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + case func(*Env) int: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[int]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[int(r.ValueOf(k).Int())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) int8: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[int8]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[int8(r.ValueOf(k).Int())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) int16: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[int16]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[int16(r.ValueOf(k).Int())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) int32: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[int32]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[int32(r.ValueOf(k).Int())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) int64: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[int64]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[r.ValueOf(k).Int()] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) uint: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[uint]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[uint(r.ValueOf(k).Uint())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) uint8: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[uint8]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[uint8(r.ValueOf(k).Uint())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) uint16: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[uint16]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[uint16(r.ValueOf(k).Uint())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) uint32: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[uint32]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[uint32(r.ValueOf(k).Uint())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) uint64: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[uint64]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[r.ValueOf(k).Uint()] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) uintptr: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[uintptr]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[uintptr(r.ValueOf(k).Uint())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) float32: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[float32]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[float32(r.ValueOf(k).Float())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) float64: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[float64]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[r.ValueOf(k).Float()] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) complex64: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[complex64]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[complex64(r.ValueOf(k).Complex())] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) complex128: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[complex128]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[r.ValueOf(k).Complex()] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) string: + { + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + + m := make(map[string]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[r.ValueOf(k).String()] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + + case func(*Env) (r.Value, []r.Value): + m := make(map[interface{}]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[k] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + v, _ := efun(env) + if ip, ok := m[v.Interface()]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + default: + fun := tag.AsX1() + m := make(map[interface{}]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[k] = v.IP + } + + stmt = func(env *Env) (Stmt, *Env) { + val := fun(env).Interface() + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + if stmt == nil { + return + } + + c.Code.List[ip] = stmt +} +func (c *Comp) switchGotoSlice(tag *Expr, seen *caseHelper) Stmt { + var stmt Stmt + switch efun := tag.Fun.(type) { + case func(*Env) int: + { + var min, max int + for k := range seen.GotoMap { + key := int(r.ValueOf(k).Int()) + min = key + max = key + break + } + for k := range seen.GotoMap { + key := int(r.ValueOf(k).Int()) + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := int(r.ValueOf(k).Int()) + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) int8: + { + var min, max int8 + for k := range seen.GotoMap { + key := int8(r.ValueOf(k).Int()) + min = key + max = key + break + } + for k := range seen.GotoMap { + key := int8(r.ValueOf(k).Int()) + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := int8(r.ValueOf(k).Int()) + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) int16: + { + var min, max int16 + for k := range seen.GotoMap { + key := int16(r.ValueOf(k).Int()) + min = key + max = key + break + } + for k := range seen.GotoMap { + key := int16(r.ValueOf(k).Int()) + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := int16(r.ValueOf(k).Int()) + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) int32: + { + var min, max int32 + for k := range seen.GotoMap { + key := + int32(r.ValueOf(k).Int()) + min = key + max = key + break + } + for k := range seen.GotoMap { + key := int32(r.ValueOf(k).Int()) + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := int32(r.ValueOf(k).Int()) + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) int64: + { + var min, max int64 + for k := range seen.GotoMap { + key := r.ValueOf(k).Int() + min = key + max = key + break + } + for k := range seen.GotoMap { + key := r.ValueOf(k).Int() + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := r.ValueOf(k).Int() + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) uint: + { + var min, max uint + for k := range seen.GotoMap { + key := + + uint(r.ValueOf(k).Uint()) + min = key + max = key + break + } + for k := range seen.GotoMap { + key := uint(r.ValueOf(k).Uint()) + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := uint(r.ValueOf(k).Uint()) + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + { + var min, max uint8 + for k := range seen.GotoMap { + key := + + uint8(r.ValueOf(k).Uint()) + min = key + max = key + break + } + for k := range seen.GotoMap { + key := uint8(r.ValueOf(k).Uint()) + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := uint8(r.ValueOf(k).Uint()) + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + { + var min, max uint16 + for k := range seen.GotoMap { + key := + + uint16(r.ValueOf(k).Uint()) + min = key + max = key + break + } + for k := range seen.GotoMap { + key := uint16(r.ValueOf(k).Uint()) + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := uint16(r.ValueOf(k).Uint()) + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + { + var min, max uint32 + for k := range seen.GotoMap { + key := + + uint32(r.ValueOf(k).Uint()) + min = key + max = key + break + } + for k := range seen.GotoMap { + key := uint32(r.ValueOf(k).Uint()) + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := uint32(r.ValueOf(k).Uint()) + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + { + var min, max uint64 + for k := range seen.GotoMap { + key := r.ValueOf(k).Uint() + min = key + max = key + break + } + for k := range seen.GotoMap { + key := r.ValueOf(k).Uint() + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := r.ValueOf(k).Uint() + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + { + var min, max uintptr + for k := range seen.GotoMap { + key := + + uintptr(r.ValueOf(k).Uint()) + min = key + max = key + break + } + for k := range seen.GotoMap { + key := + + uintptr(r.ValueOf(k).Uint()) + if min > key { + min = key + } else if max < key { + max = key + } + + } + + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2-3) || int(halfrange_trunc) > len(seen.GotoMap) { + break + } + + fullrange := int(max-min) + 1 + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := uintptr(r.ValueOf(k).Uint()) + + slice[key-min] = v.IP + 1 + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val-min] + } + + if ip > 0 { + env.IP = ip - 1 + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + } + return stmt +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/switch2.gomacro b/vendor/github.com/cosmos72/gomacro/fast/switch2.gomacro new file mode 100644 index 0000000..5eb3178 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/switch2.gomacro @@ -0,0 +1,321 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * switch2.go + * + * Created on May 06, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + . "github.com/cosmos72/gomacro/base" +) + +:import ( + "go/ast" + r "reflect" +) + + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + // keep the result wrapped in a reflect.Value + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +:macro switchtag(typ ast.Node) ast.Node { + return ~"{ + var val ~,typ + cachefun = func(*Env) ~,typ { + return val + } + efun := efun.(func(*Env) ~,typ) + stmt = func(env *Env) (Stmt, *Env) { + val = efun(env) + env.IP++ + return env.Code[env.IP], env + } + } +} + +/* +// BUGGED: not thread-safe, do not use. +// compile a statement that evaluates e.Fun() once, +// and return an expression that returns cached e.Fun() result +func (c *Comp) switchTag(e *Expr) *Expr { + efun := e.Fun + var cachefun I + var stmt Stmt + switch e.Type.Kind() { + case r.Bool: {switchtag; bool} + case r.Int: {switchtag; int} + case r.Int8: {switchtag; int8} + case r.Int16: {switchtag; int16} + case r.Int32: {switchtag; int32} + case r.Int64: {switchtag; int64} + case r.Uint: {switchtag; uint} + case r.Uint8: {switchtag; uint8} + case r.Uint16: {switchtag; uint16} + case r.Uint32: {switchtag; uint32} + case r.Uint64: {switchtag; uint64} + case r.Uintptr: {switchtag; uintptr} + case r.Float32: {switchtag; float32} + case r.Float64: {switchtag; float64} + case r.Complex64: {switchtag; complex64} + case r.Complex128: {switchtag; complex128} + case r.String: {switchtag; string} + default: + val := xr.Zero(e.Type) + cachefun = func(*Env) r.Value { + return val + } + if efun, ok := efun.(func(*Env) (r.Value, []r.Value)); ok { + stmt = func(env *Env) (Stmt, *Env) { + val, _ = efun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + efun := e.AsX1() + stmt = func(env *Env) (Stmt, *Env) { + val = efun(env) + env.IP++ + return env.Code[env.IP], env + } + } + } + c.append(stmt) + return exprFun(e.Type, cachefun) +} +*/ + +:macro switch_goto_map(typ ast.Node) ast.Node { + conv := convertvalue1(typ, ~'{r.ValueOf(k)}) + return ~"{ + stmt = c.switchGotoSlice(tag, seen) + if stmt != nil { + break + } + m := make(map[~,typ]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[~,conv] = v.IP + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } +} + +:macro switch_goto_slice(typ ast.Node) ast.Node { + conv := convertvalue1(typ, ~'{r.ValueOf(k)}) + return ~"{ + var min, max ~,typ + for k := range seen.GotoMap { + key := ~,conv + min = key + max = key + break + } + for k := range seen.GotoMap { + key := ~,conv + if min > key { + min = key + } else if max < key { + max = key + } + } + // full range is max - min + 1, but may overflow (example: MaxInt - MinInt + 1) + // so divide by 2 before subtracting and do not add one + halfrange_trunc := max/2 - min/2 + if uint64(halfrange_trunc) >= uint64(MaxInt/2 - 3) || int(halfrange_trunc) > len(seen.GotoMap) { + // too sparse for a slice, or slice indexes would overflow int + break + } + fullrange := int(max - min) + 1 // cannot overflow, we just checked above + if fullrange < len(seen.GotoMap) { + c.Errorf("switchGotoSlice: internal error, allocated slice has len=%v: less than the %d cases", fullrange, len(seen.GotoMap)) + } + slice := make([]int, fullrange) + for k, v := range seen.GotoMap { + key := ~,conv + slice[key - min] = v.IP + 1 // we will subtract one later. useful to mark 0 as invalid. + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + ip := 0 + if val >= min && val <= max { + ip = slice[val - min] + } + if ip > 0 { + env.IP = ip - 1 // 0 means invalid + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } +} + +// try to optimize switch using a computed goto +func (c *Comp) switchGotoMap(tag *Expr, seen *caseHelper, ip int) { + if len(seen.GotoMap) <= 1 { + return + } + var stmt Stmt + switch efun := tag.Fun.(type) { + case func(*Env) bool: + m := [2]int{-1, -1} + for k, v := range seen.GotoMap { + if r.ValueOf(k).Bool() { + m[1] = v.IP + } else { + m[0] = v.IP + } + } + stmt = func(env *Env) (Stmt, *Env) { + val := efun(env) + var ip int + if val { + ip = m[1] + } else { + ip = m[0] + } + if ip >= 0 { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + case func(*Env) int: {switch_goto_map; int} + case func(*Env) int8: {switch_goto_map; int8} + case func(*Env) int16: {switch_goto_map; int16} + case func(*Env) int32: {switch_goto_map; int32} + case func(*Env) int64: {switch_goto_map; int64} + case func(*Env) uint: {switch_goto_map; uint} + case func(*Env) uint8: {switch_goto_map; uint8} + case func(*Env) uint16: {switch_goto_map; uint16} + case func(*Env) uint32: {switch_goto_map; uint32} + case func(*Env) uint64: {switch_goto_map; uint64} + case func(*Env) uintptr: {switch_goto_map; uintptr} + case func(*Env) float32: {switch_goto_map; float32} + case func(*Env) float64: {switch_goto_map; float64} + case func(*Env) complex64: {switch_goto_map; complex64} + case func(*Env) complex128: {switch_goto_map; complex128} + case func(*Env) string: {switch_goto_map; string} + case func(*Env) (r.Value, []r.Value): + m := make(map[interface{}]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[k] = v.IP + } + stmt = func(env *Env) (Stmt, *Env) { + v, _ := efun(env) + if ip, ok := m[v.Interface()]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + default: + fun := tag.AsX1() + m := make(map[interface{}]int, len(seen.GotoMap)) + for k, v := range seen.GotoMap { + m[k] = v.IP + } + stmt = func(env *Env) (Stmt, *Env) { + val := fun(env).Interface() + if ip, ok := m[val]; ok { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + } + if stmt == nil { + return + } + // replace the nop we reserved for this purpose + c.Code.List[ip] = stmt +} + +func (c *Comp) switchGotoSlice(tag *Expr, seen *caseHelper) Stmt { + var stmt Stmt + switch efun := tag.Fun.(type) { + case func(*Env) int: {switch_goto_slice; int} + case func(*Env) int8: {switch_goto_slice; int8} + case func(*Env) int16: {switch_goto_slice; int16} + case func(*Env) int32: {switch_goto_slice; int32} + case func(*Env) int64: {switch_goto_slice; int64} + case func(*Env) uint: {switch_goto_slice; uint} + case func(*Env) uint8: {switch_goto_slice; uint8} + case func(*Env) uint16: {switch_goto_slice; uint16} + case func(*Env) uint32: {switch_goto_slice; uint32} + case func(*Env) uint64: {switch_goto_slice; uint64} + case func(*Env) uintptr: {switch_goto_slice; uintptr} + } + return stmt +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/switch_type.go b/vendor/github.com/cosmos72/gomacro/fast/switch_type.go new file mode 100644 index 0000000..56bf450 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/switch_type.go @@ -0,0 +1,530 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * switch.go + * + * Created on May 06, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + "go/types" + r "reflect" + "sort" + "unsafe" + + "github.com/cosmos72/gomacro/typeutil" + xr "github.com/cosmos72/gomacro/xreflect" +) + +type typecaseEntry struct { + Type xr.Type + Pos token.Pos + IP int +} + +type typecaseHelper struct { + TypeMap typeutil.Map // map types.Type -> typecaseEntry + ConcreteMap typeutil.Map // only contains the initial segment of non-interface types + AllConcrete bool +} + +// keep track of types in type-switch. error on duplicates +func (seen *typecaseHelper) add(c *Comp, t xr.Type, entry typecaseEntry) { + var gtype types.Type + if t != nil { + gtype = t.GoType() + } + prev := seen.TypeMap.At(gtype) + if prev != nil { + c.Errorf("duplicate case <%v> in switch\n\tprevious case at %s", t, c.Fileset.Position(prev.(typecaseEntry).Pos)) + return + } + entry.Type = t + seen.TypeMap.Set(gtype, entry) + if t.Kind() == r.Interface { + seen.AllConcrete = false + } else if seen.AllConcrete { + seen.ConcreteMap.Set(gtype, entry) + } +} + +/* +func (c *Comp) TypeSwitch(node *ast.TypeSwitchStmt, labels []string) { + c.Errorf("unimplemented statement: %v <%v>", node, r.TypeOf(node)) +} +*/ + +func (c *Comp) TypeSwitch(node *ast.TypeSwitchStmt, labels []string) { + initLocals := false + var initBinds [2]int + // TypeSwitch always allocates at least a bind "" in typeswitchTag() + c, initLocals = c.pushEnvIfFlag(&initBinds, true) + if node.Init != nil { + c.Stmt(node.Init) + } + var ibreak int + sort.Strings(labels) + c.Loop = &LoopInfo{ + Break: &ibreak, + ThisLabels: labels, + } + + tagnode, varname := c.typeswitchNode(node.Assign) + tagexpr := c.Expr1(tagnode) + if tagexpr.Type.Kind() != r.Interface { + c.Errorf("cannot type switch on non-interface type <%v>: %v", tagexpr.Type, tagnode) + } + if tagexpr.Const() { + c.Warnf("type switch on constant!? %v = %v <%v>", tagnode, tagexpr.Value, tagexpr.Type) + } + // just like Comp.Switch, we cannot invoke tagexpr.Fun() multiple times because + // side effects must be applied only once! + // typeswitchTag saves the result of tagexpr.Fun() in a runtime bind + // and returns the bind + bind := c.typeswitchTag(tagexpr) + + if node.Body != nil { + // reserve a code slot for typeSwitchGotoMap optimizer + ipswitchgoto := c.Code.Len() + seen := &typecaseHelper{AllConcrete: true} // keeps track of types in cases. errors on duplicates + c.Append(stmtNop, node.Body.Pos()) + + list := node.Body.List + defaulti := -1 + var defaultpos token.Pos + for _, stmt := range list { + c.Pos = stmt.Pos() + switch clause := stmt.(type) { + case *ast.CaseClause: + if clause.List == nil { + if defaulti >= 0 { + c.Errorf("multiple defaults in switch (first at %s)", c.Fileset.Position(defaultpos)) + } + defaulti = c.Code.Len() + defaultpos = clause.Pos() + c.typeswitchDefault(clause, varname, bind) + } else { + c.typeswitchCase(clause, varname, bind, seen) + } + default: + c.Errorf("invalid statement inside switch: expecting case or default, found: %v <%v>", stmt, r.TypeOf(stmt)) + } + } + // default is executed as last, if no other case matches + if defaulti >= 0 { + // +1 to skip its "never matches" header + c.Append(func(env *Env) (Stmt, *Env) { + ip := defaulti + 1 + env.IP = ip + return env.Code[ip], env + }, defaultpos) + } + // try to optimize + c.typeswitchGotoMap(bind, seen, ipswitchgoto) + } + // we finally know this + ibreak = c.Code.Len() + + c = c.popEnvIfLocalBinds(initLocals, &initBinds, node.Init, node.Assign) +} + +// typeswitchNode returns the expression to type-switch on. +// if such expression is used to declare a variable, the variable name is returned too +func (c *Comp) typeswitchNode(stmt ast.Stmt) (ast.Expr, string) { + var varname string // empty, or name of variable in 'switch varname := expression.(type)' + var tagnode ast.Expr + switch stmt := stmt.(type) { + case *ast.AssignStmt: + if len(stmt.Lhs) == 1 && len(stmt.Rhs) == 1 && stmt.Tok == token.DEFINE { + if lhs, ok := stmt.Lhs[0].(*ast.Ident); ok { + varname = lhs.Name + tagnode = stmt.Rhs[0] + } + } + case *ast.ExprStmt: + tagnode = stmt.X + } + + for { + switch e := tagnode.(type) { + case *ast.ParenExpr: + tagnode = e.X + continue + case *ast.TypeAssertExpr: + if e.Type != nil { + c.Errorf("invalid type switch: expecting '.(type)', found type assertion: %v", stmt) + } + tagnode = e.X + default: + tagnode = e + } + break + } + if tagnode == nil { + c.Errorf("expected type-switch expression, found: %v", stmt) + } + return tagnode, varname +} + +// typeswitchTag takes the expression immediately following a type-switch, +// compiles it to a statement that evaluates it and saves its result and its type +// in two runtime bindings (interpreter local variables), +// finally returns another expression that retrieves the expression value +// with its concrete type +func (c *Comp) typeswitchTag(e *Expr) *Bind { + bind := c.AddBind("", VarBind, e.Type) // e.Type must be an interface type... + + // c.Debugf("typeswitchTag: allocated bind %v", bind) + switch bind.Desc.Class() { + case VarBind: + // cannot use c.DeclVar0 because the variable is declared in o + // cannot use o.DeclVar0 because the initializer must be evaluated in c + // so initialize the binding manually + index := bind.Desc.Index() + init := e.AsX1() + c.append(func(env *Env) (Stmt, *Env) { + v := r.ValueOf(init(env).Interface()) // extract concrete type + // Debugf("typeswitchTag = %v <%v>", v, ValueType(v)) + // no need to create a settable reflect.Value + env.Binds[index] = v + env.IP++ + return env.Code[env.IP], env + }) + default: + c.Errorf("internal error! Comp.AddBind(name=%q, class=VarBind, type=%v) returned class=%v, expecting VarBind", + "", bind.Type, bind.Desc.Class()) + return nil + } + return bind +} + +// typeswitchGotoMap tries to optimize the dispatching of a type-switch +func (c *Comp) typeswitchGotoMap(bind *Bind, seen *typecaseHelper, ip int) { + if seen.ConcreteMap.Len() <= 1 { + return + } + m := make(map[r.Type]int) // FIXME this breaks on types declared in the interpreter + seen.ConcreteMap.Iterate(func(k types.Type, v interface{}) { + entry := v.(typecaseEntry) + m[entry.Type.ReflectType()] = entry.IP + }) + idx := bind.Desc.Index() + + stmt := func(env *Env) (Stmt, *Env) { + // FIXME this breaks on types declared in the interpreter + var rtype r.Type + if v := env.Binds[idx]; v.IsValid() { + rtype = v.Type() // concrete reflect.Type already extracted by typeswitchTag + } + if ip, found := m[rtype]; found { + env.IP = ip + } else { + env.IP++ + } + return env.Code[env.IP], env + } + c.Code.List[ip] = stmt +} + +// typeswitchCase compiles a case in a type-switch. +func (c *Comp) typeswitchCase(node *ast.CaseClause, varname string, bind *Bind, seen *typecaseHelper) { + + ibody := c.Code.Len() + 1 // body will start here + ts := make([]xr.Type, len(node.List)) + rtypes := make([]r.Type, len(node.List)) + + // compile a comparison of tag against each type + for i, enode := range node.List { + t := c.compileTypeOrNil(enode) + if t != nil { + rtypes[i] = t.ReflectType() + if t.Kind() != r.Interface && !t.Implements(bind.Type) { + c.Errorf("impossible typeswitch case: <%v> does not implement <%v>", t, bind.Type) + } + } + ts[i] = t + seen.add(c, t, typecaseEntry{Pos: enode.Pos(), IP: ibody}) + } + // compile like "if r.TypeOf(bind) == t1 || r.TypeOf(bind) == t2 ... { }" + // and keep track of where to jump if no expression matches + // + // always occupy a Code slot for type comparison, even if nothing to do. + // reason: typeswitchGotoMap optimizer skips such slot and jumps to current body + var iend int + var stmt Stmt + idx := bind.Desc.Index() + switch len(node.List) { + case 0: + // compile anyway. reachable? + stmt = func(env *Env) (Stmt, *Env) { + // Debugf("typeswitchCase: comparing %v against zero types", tagfun(env)) + ip := iend + env.IP = ip + return env.Code[ip], env + } + case 1: + t := ts[0] + rtype := rtypes[0] + if t == nil { + stmt = func(env *Env) (Stmt, *Env) { + v := env.Binds[idx] + // Debugf("typeswitchCase: comparing %v <%v> against nil type", v, ValueType(v)) + var ip int + if !v.IsValid() { + ip = env.IP + 1 + } else { + ip = iend + } + env.IP = ip + return env.Code[ip], env + } + } else if t.Kind() == r.Interface { + stmt = func(env *Env) (Stmt, *Env) { + v := env.Binds[idx] + // Debugf("typeswitchCase: comparing %v <%v> against interface type %v", v, ValueType(v), rtype) + var ip int + if v.IsValid() && v.Type().Implements(rtype) { + ip = env.IP + 1 + } else { + ip = iend + } + env.IP = ip + return env.Code[ip], env + } + } else { + stmt = func(env *Env) (Stmt, *Env) { + v := env.Binds[idx] + // Debugf("typeswitchCase: comparing %v <%v> against concrete type %v", v, ValueType(v), rtype) + var ip int + if v.IsValid() && v.Type() == rtype { + ip = env.IP + 1 + } else { + ip = iend + } + env.IP = ip + return env.Code[ip], env + } + } + default: + stmt = func(env *Env) (Stmt, *Env) { + v := env.Binds[idx] + var vt r.Type + if v.IsValid() { + vt = v.Type() + } + // Debugf("typeswitchCase: comparing %v <%v> against types %v", v, vt, rtypes) + ip := iend + for _, rtype := range rtypes { + switch { + case vt == rtype: + case rtype != nil: + if rtype.Kind() != r.Interface || !vt.Implements(rtype) { + continue + } + default: // rtype == nil + if v.IsValid() { + continue + } + } + // Debugf("typeswitchCase: v <%v> matches type %v", v, vt, rtype) + ip = env.IP + 1 + break + } + env.IP = ip + return env.Code[ip], env + } + } + c.Pos = node.Pos() + c.append(stmt) + var t xr.Type + if len(ts) == 1 { + t = ts[0] + } + c.typeswitchBody(node.Body, varname, t, bind) + // we finally know where to jump if match fails + iend = c.Code.Len() +} + +// typeswitchDefault compiles the default case in a type-switch. +func (c *Comp) typeswitchDefault(node *ast.CaseClause, varname string, bind *Bind) { + var iend int + stmt := func(env *Env) (Stmt, *Env) { + // Debugf("typeswitchDefault: default entered normally, skipping it") + ip := iend + env.IP = ip + return env.Code[ip], env + } + c.Pos = node.Pos() + c.append(stmt) + c.typeswitchBody(node.Body, varname, nil, bind) + iend = c.Code.Len() +} + +// typeswitchBody compiles the body of a case in a type-switch. +func (c *Comp) typeswitchBody(list []ast.Stmt, varname string, t xr.Type, bind *Bind) { + list1 := list + if list1 == nil { + list1 = []ast.Stmt{nil} + } + declvar := varname != "" && varname != "_" + locals := declvar || containLocalBinds(list1...) + var nbinds [2]int + + c2, locals2 := c.pushEnvIfFlag(&nbinds, locals) + if declvar { + sym := bind.AsSymbol(c2.UpCost) + if t == nil { + t = sym.Type + } + // cannot simply use sym as varname initializer: it returns the wrong type + c2.typeswitchVar(varname, t, sym) + } + for _, stmt := range list { + c2.Stmt(stmt) + } + c2.jumpOut(c2.UpCost, c.Loop.Break) + c2.popEnvIfLocalBinds(locals2, &nbinds, list1...) +} + +// typeswitchVar compiles the tag variable declaration in a type-switch. +func (c *Comp) typeswitchVar(varname string, t xr.Type, sym *Symbol) { + sidx := sym.Bind.Desc.Index() + + bind := c.AddBind(varname, VarBind, t) + idx := bind.Desc.Index() + + if sym.Upn != 1 { + c.Errorf("typeswitchVar: impossible sym.Upn = %v", sym.Upn) + } + var stmt Stmt + switch t.Kind() { + case r.Bool: + stmt = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env.IntBinds[idx])) = env.Outer.Binds[sidx].Bool() + env.IP++ + return env.Code[env.IP], env + } + case r.Int: + stmt = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[idx])) = int(env.Outer.Binds[sidx].Int()) + env.IP++ + return env.Code[env.IP], env + } + case r.Int8: + stmt = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[idx])) = int8(env.Outer.Binds[sidx].Int()) + env.IP++ + return env.Code[env.IP], env + } + case r.Int16: + stmt = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[idx])) = int16(env.Outer.Binds[sidx].Int()) + env.IP++ + return env.Code[env.IP], env + } + case r.Int32: + stmt = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[idx])) = int32(env.Outer.Binds[sidx].Int()) + env.IP++ + return env.Code[env.IP], env + } + case r.Int64: + stmt = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[idx])) = int64(env.Outer.Binds[sidx].Int()) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint: + stmt = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[idx])) = uint(env.Outer.Binds[sidx].Uint()) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint8: + stmt = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[idx])) = uint8(env.Outer.Binds[sidx].Uint()) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint16: + stmt = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[idx])) = uint16(env.Outer.Binds[sidx].Uint()) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint32: + stmt = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[idx])) = uint32(env.Outer.Binds[sidx].Uint()) + env.IP++ + return env.Code[env.IP], env + } + case r.Uint64: + stmt = func(env *Env) (Stmt, *Env) { + env.IntBinds[idx] = env.Outer.Binds[sidx].Uint() + env.IP++ + return env.Code[env.IP], env + } + case r.Uintptr: + stmt = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[idx])) = uintptr(env.Outer.Binds[sidx].Uint()) + env.IP++ + return env.Code[env.IP], env + } + case r.Float32: + stmt = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.IntBinds[idx])) = float32(env.Outer.Binds[sidx].Float()) + env.IP++ + return env.Code[env.IP], env + } + case r.Float64: + stmt = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.IntBinds[idx])) = env.Outer.Binds[sidx].Float() + env.IP++ + return env.Code[env.IP], env + } + case r.Complex64: + stmt = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.IntBinds[idx])) = complex64(env.Outer.Binds[sidx].Complex()) + env.IP++ + return env.Code[env.IP], env + } + default: + rtype := t.ReflectType() + zero := r.Zero(rtype) + stmt = func(env *Env) (Stmt, *Env) { + v := env.Outer.Binds[sidx] + place := r.New(rtype).Elem() + if !v.IsValid() { + v = zero + } else if v.Type() != rtype { + v = v.Convert(rtype) + } + place.Set(v) + env.Binds[idx] = place + env.IP++ + return env.Code[env.IP], env + } + } + c.append(stmt) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/type.go b/vendor/github.com/cosmos72/gomacro/fast/type.go new file mode 100644 index 0000000..bfedf89 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/type.go @@ -0,0 +1,783 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * type.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "fmt" + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// DeclType compiles a type declaration. +func (c *Comp) DeclType(node ast.Spec) { + switch node := node.(type) { + case *ast.TypeSpec: + name := node.Name.Name + // PATCH: support type aliases + if unary, ok := node.Type.(*ast.UnaryExpr); ok && unary.Op == token.ASSIGN { + t := c.Type(unary.X) + c.DeclTypeAlias(name, t) + } else { + // support self-referencing types, as for example: type List struct { First int; Rest *List } + t := c.DeclNamedType(name) + u := c.Type(node.Type) + if t != nil { // t == nil means name == "_", discard the result of type declaration + c.SetUnderlyingType(t, u) + } + } + default: + c.Errorf("Compile: unexpected type declaration, expecting <*ast.TypeSpec>, found: %v <%v>", node, r.TypeOf(node)) + } +} + +// DeclTypeAlias compiles a typealias declaration, i.e. type Foo = /*...*/ +// Returns the second argument. +func (c *Comp) DeclTypeAlias(name string, t xr.Type) xr.Type { + if name == "_" { + return t + } + if _, ok := c.Types[name]; ok { + c.Warnf("redefined type alias: %v", name) + c.Universe.InvalidateCache() + } else if c.Types == nil { + c.Types = make(map[string]xr.Type) + } + c.Types[name] = t + return t +} + +// DeclNamedType executes a named type forward declaration. +// Returns nil if name == "_" +// Otherwise it must be followed by Comp.SetUnderlyingType() +func (c *Comp) DeclNamedType(name string) xr.Type { + if name == "_" { + return nil + } + if t, ok := c.Types[name]; ok { + c.Warnf("redefined type: %v", name) + if xr.QName1(t) != xr.QName2(name, c.FileComp().Path) { + // the current type "name" is an alias, discard it + c.Universe.InvalidateCache() + } else { + // reuse t, change only its underlying type + return t + } + } else if c.Types == nil { + c.Types = make(map[string]xr.Type) + } + t := c.Universe.NamedOf(name, c.FileComp().Path) + c.Types[name] = t + return t +} + +func (c *Comp) SetUnderlyingType(t, underlying xr.Type) { + t.SetUnderlying(underlying) +} + +// DeclType0 declares a type +// in Go, types are computed only at compile time - no need for a runtime *Env +func (c *Comp) DeclType0(t xr.Type) xr.Type { + if t == nil { + return nil + } + return c.DeclTypeAlias0(t.Name(), t) +} + +// DeclTypeAlias0 declares a type alias +// in Go, types are computed only at compile time - no need for a runtime *Env +func (c *Comp) DeclTypeAlias0(alias string, t xr.Type) xr.Type { + if alias == "" || alias == "_" { + // never define bindings for "_" + return t + } + if _, ok := c.Types[alias]; ok { + c.Warnf("redefined type: %v", alias) + } else if c.Types == nil { + c.Types = make(map[string]xr.Type) + } + c.Types[alias] = t + return t +} + +// Type compiles a type expression. +func (c *Comp) Type(node ast.Expr) xr.Type { + t, _ := c.compileType2(node, false) + return t +} + +// compileTypeOrNil compiles a type expression. as a special case used by type switch, compiles *ast.Ident{Name:"nil"} to nil +func (c *Comp) compileTypeOrNil(node ast.Expr) xr.Type { + for { + switch expr := node.(type) { + case *ast.ParenExpr: + node = expr.X + continue + case *ast.Ident: + if expr.Name == "nil" { + sym := c.TryResolve(expr.Name) + if sym != nil && sym.Type == nil { + return nil + } + } + } + break + } + t, _ := c.compileType2(node, false) + return t +} + +// compileType2 compiles a type expression. +// if allowEllipsis is true, it supports the special case &ast.Ellipsis{/*expression*/} +// that represents ellipsis in the last argument of a function declaration. +// The second return value is true both in the case above, and for array types whose length is [...] +func (c *Comp) compileType2(node ast.Expr, allowEllipsis bool) (t xr.Type, ellipsis bool) { + stars := 0 + for { + switch expr := node.(type) { + case *ast.StarExpr: + stars++ + node = expr.X + continue + case *ast.ParenExpr: + node = expr.X + continue + case *ast.Ellipsis: + if allowEllipsis { + node = expr.Elt + ellipsis = true + continue + } + } + break + } + if node != nil { + c.Pos = node.Pos() + } + universe := c.Universe + var ellipsisArray bool + + switch node := node.(type) { + case *ast.ArrayType: // also for slices + t, ellipsisArray = c.TypeArray(node) + case *ast.ChanType: + telem := c.Type(node.Value) + dir := r.BothDir + if node.Dir == ast.SEND { + dir = r.SendDir + } else if node.Dir == ast.RECV { + dir = r.RecvDir + } + t = universe.ChanOf(dir, telem) + case *ast.FuncType: + t, _, _ = c.TypeFunction(node) + case *ast.Ident: + t = c.TypeIdent(node.Name) + case *ast.InterfaceType: + t = c.TypeInterface(node) + case *ast.MapType: + kt := c.Type(node.Key) + vt := c.Type(node.Value) + t = universe.MapOf(kt, vt) + case *ast.SelectorExpr: + ident, ok := node.X.(*ast.Ident) + if !ok { + c.Errorf("invalid qualified type, expecting packagename.identifier, found: %v <%v>", node, r.TypeOf(node)) + } + // this could be Package.Type, or other non-type expressions: Type.Method, Value.Method, Struct.Field... + // check for Package.Type + name := ident.Name + var bind *Bind + for o := c; o != nil; o = o.Outer { + if bind = o.Binds[name]; bind != nil { + break + } + } + if bind == nil { + c.Errorf("undefined %q in %v <%v>", name, node, r.TypeOf(node)) + } else if !bind.Const() || bind.Type.ReflectType() != rtypeOfImport { + c.Errorf("not a package: %q in %v <%v>", name, node, r.TypeOf(node)) + } + imp, ok := bind.Value.(Import) + if !ok { + c.Errorf("not a package: %q in %v <%v>", name, node, r.TypeOf(node)) + } + name = node.Sel.Name + t, ok = imp.Types[name] + if !ok || t == nil { + c.Errorf("not a type: %v <%v>", node, r.TypeOf(node)) + } + if !ast.IsExported(name) { + c.Errorf("cannot refer to unexported name %v", node) + } + case *ast.StructType: + // c.Debugf("evalType() struct declaration: %v <%v>", node, r.TypeOf(node)) + types, names := c.TypeFields(node.Fields) + // c.Debugf("evalType() struct names and types: %v %v", types, names) + pkg := universe.LoadPackage(c.FileComp().Path) + fields := c.makeStructFields(pkg, names, types) + // c.Debugf("compileType2() declaring struct type. fields=%#v", fields) + t = universe.StructOf(fields) + case nil: + // type can be omitted in many case - then we must perform type inference + break + default: + // TODO which types are still missing? + c.Errorf("unimplemented type: %v <%v>", node, r.TypeOf(node)) + } + if t != nil { + for i := 0; i < stars; i++ { + t = universe.PtrTo(t) + } + if allowEllipsis && ellipsis { + // ellipsis in the last argument of a function declaration + t = universe.SliceOf(t) + } + } + return t, ellipsis || ellipsisArray +} + +func (c *Comp) TypeArray(node *ast.ArrayType) (t xr.Type, ellipsis bool) { + universe := c.Universe + t = c.Type(node.Elt) + n := node.Len + switch n := n.(type) { + case *ast.Ellipsis: + t = universe.ArrayOf(0, t) + ellipsis = true + case nil: + t = universe.SliceOf(t) + default: + // as stated by https://golang.org/ref/spec#Array_types + // "The length is part of the array's type; it must evaluate to a non-negative constant + // representable by a value of type int. " + var count int + init := c.Expr(n) + if !init.Const() { + c.Errorf("array length is not a constant: %v", node) + return + } else if init.Untyped() { + count = init.ConstTo(c.TypeOfInt()).(int) + } else { + count = convertLiteralCheckOverflow(init.Value, c.TypeOfInt()).(int) + } + if count < 0 { + c.Errorf("array length [%v] is negative: %v", count, node) + } + t = universe.ArrayOf(count, t) + } + return t, ellipsis +} + +func (c *Comp) TypeFunction(node *ast.FuncType) (t xr.Type, paramNames []string, resultNames []string) { + return c.TypeFunctionOrMethod(nil, node) +} + +// TypeFunctionOrMethod compiles a function type corresponding to given receiver and function declaration +// If receiver is not null, the returned tFunc will have it as receiver. +func (c *Comp) TypeFunctionOrMethod(recv *ast.Field, node *ast.FuncType) (t xr.Type, paramNames []string, resultNames []string) { + paramTypes, paramNames, variadic := c.typeFieldOrParamList(node.Params, true) + resultTypes, resultNames := c.TypeFields(node.Results) + + var recvType xr.Type + if recv != nil { + // methods are functions with receiver. xreflect allows functions to be treated as methods + // (using the first parameter as receiver), but go/types.Type loaded by go/importer.Default() + // will have methods as functions with receivers. + // + // So be uniform with those. + // + // Alas, go/types.Type.String() does *not* print the receiver, making it cumbersome to debug. + recvTypes, recvNames, _ := c.typeFieldsOrParams([]*ast.Field{recv}, false) + recvType = recvTypes[0] + + // anyway, return the receiver *name* as first element of paramNames + paramNames = append(recvNames, paramNames...) + } + t = c.Universe.MethodOf(recvType, paramTypes, resultTypes, variadic) + return t, paramNames, resultNames +} + +func (c *Comp) TypeFields(fields *ast.FieldList) (types []xr.Type, names []string) { + types, names, _ = c.typeFieldOrParamList(fields, false) + return types, names +} + +func (c *Comp) typeFieldOrParamList(fields *ast.FieldList, allowEllipsis bool) (types []xr.Type, names []string, ellipsis bool) { + var list []*ast.Field + if fields != nil { + list = fields.List + } + return c.typeFieldsOrParams(list, allowEllipsis) +} + +func (c *Comp) typeFieldsOrParams(list []*ast.Field, allowEllipsis bool) (types []xr.Type, names []string, ellipsis bool) { + types = make([]xr.Type, 0) + names = ZeroStrings + n := len(list) + if n == 0 { + return types, names, ellipsis + } + var t xr.Type + for i, f := range list { + t, ellipsis = c.compileType2(f.Type, i == n-1) + if len(f.Names) == 0 { + types = append(types, t) + names = append(names, "") + // c.Debugf("evalTypeFields() %v -> %v", f.Type, t) + } else { + for _, ident := range f.Names { + types = append(types, t) + names = append(names, ident.Name) + // Debugf("evalTypeFields() %v %v -> %v", ident.Name, f.Type, t) + } + } + } + return types, names, ellipsis +} + +func (c *Comp) TypeIdent(name string) xr.Type { + for co := c; co != nil; co = co.Outer { + if t, ok := co.Types[name]; ok { + return t + } + } + c.Errorf("undefined identifier: %v", name) + return nil +} + +func (c *Comp) makeStructFields(pkg *xr.Package, names []string, types []xr.Type) []xr.StructField { + // pkgIdentifier := sanitizeIdentifier(pkgPath) + fields := make([]xr.StructField, len(names)) + for i, name := range names { + t := types[i] + fields[i] = xr.StructField{ + Name: name, + Pkg: pkg, + Type: t, + Tag: "", + Anonymous: len(name) == 0, + } + } + return fields +} + +// TypeAssert2 compiles a multi-valued type assertion +func (c *Comp) TypeAssert2(node *ast.TypeAssertExpr) *Expr { + val := c.Expr1(node.X) + tin := val.Type + tout := c.Type(node.Type) + rtout := tout.ReflectType() + if tin == nil || tin.Kind() != r.Interface { + c.Errorf("invalid type assertion: %v (non-interface type <%v> on left)", node, tin) + return nil + } + kin := tin.Kind() + kout := tout.Kind() + if kout != r.Interface && !tout.Implements(tin) { + c.Errorf("impossible type assertion: <%v> does not implement <%v>", tout, tin) + } + fun := val.Fun.(func(*Env) r.Value) // val returns an interface... must be already wrapped in a reflect.Value + fail := []r.Value{xr.Zero(tout), False} // returned by type assertion in case of failure + + var ret func(env *Env) (r.Value, []r.Value) + + if IsOptimizedKind(kout) { + ret = func(env *Env) (r.Value, []r.Value) { + v := fun(env) + v = r.ValueOf(v.Interface()) // rebuild reflect.Value with concrete type + if v.Type() != rtout { + return fail[0], fail + } + return v, []r.Value{v, True} + } + } else if tout.ReflectType() == TypeOfInterface { + // special case, nil is a valid interface{} + ret = func(env *Env) (r.Value, []r.Value) { + v := fun(env).Convert(TypeOfInterface) + return v, []r.Value{v, True} + } + } else if kout == r.Interface && tin.Implements(tout) { + ret = func(env *Env) (r.Value, []r.Value) { + v := fun(env) + // nil is not a valid tout, check for it. + // IsNil() can be invoked only on nillable types... + // but v.Type().Kind() should be r.Interface, which is nillable :) + if v.IsNil() { + return fail[0], fail + } + v = v.Convert(rtout) + return v, []r.Value{v, True} + } + } else if kout == r.Interface { + ret = func(env *Env) (r.Value, []r.Value) { + v := fun(env) + // nil is not a valid tout, check for it. + // IsNil() can be invoked only on nillable types... + // but v.Type().Kind() should be r.Interface, which is nillable :) + if v.IsNil() { + return fail[0], fail + } + v = r.ValueOf(v.Interface()) // rebuild reflect.Value with concrete type + rtconcr := v.Type() + if rtconcr != rtout && !rtconcr.Implements(rtout) { + return fail[0], fail + } + v = v.Convert(rtout) + return v, []r.Value{v, True} + } + } else if IsNillableKind(kin) { + ret = func(env *Env) (r.Value, []r.Value) { + v := fun(env) + // nil is not a valid tout, check for it. + // IsNil() can be invoked only on nillable types... + // but we just checked IsNillableKind(kin) + if v.IsNil() { + return fail[0], fail + } + v = r.ValueOf(v.Interface()) // rebuild reflect.Value with concrete type + rtconcr := v.Type() + if rtconcr != rtout { + return fail[0], fail + } + return v, []r.Value{v, True} + } + } else { + ret = func(env *Env) (r.Value, []r.Value) { + v := fun(env) + v = r.ValueOf(v.Interface()) // rebuild reflect.Value with concrete type + rtconcr := v.Type() + if rtconcr != rtout { + return fail[0], fail + } + return v, []r.Value{v, True} + } + } + return exprXV([]xr.Type{tout, c.TypeOfBool()}, ret) +} + +// TypeAssert1 compiles a single-valued type assertion +func (c *Comp) TypeAssert1(node *ast.TypeAssertExpr) *Expr { + if node.Type == nil { + c.Errorf("invalid type assertion: expecting actual type, found type switch: %v", node) + } + val := c.Expr1(node.X) + tin := val.Type + tout := c.Type(node.Type) + kout := tout.Kind() + if tin == nil || tin.Kind() != r.Interface { + c.Errorf("invalid type assertion: %v (non-interface type <%v> on left)", node, tin) + return nil + } + if tout.Kind() != r.Interface && !tout.Implements(tin) { + c.Errorf("impossible type assertion: <%v> does not implement <%v>", tout, tin) + } + fun := val.Fun.(func(*Env) r.Value) // val returns an interface... must be already wrapped in a reflect.Value + rtin := tin.ReflectType() + rtout := tout.ReflectType() + var ret I + switch kout { + case r.Bool: + ret = func(env *Env) bool { + v := typeassert(fun(env), rtin, rtout) + return v.Bool() + } + case r.Int: + ret = func(env *Env) int { + v := typeassert(fun(env), rtin, rtout) + return int(v.Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + v := typeassert(fun(env), rtin, rtout) + return int8(v.Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + v := typeassert(fun(env), rtin, rtout) + return int16(v.Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + v := typeassert(fun(env), rtin, rtout) + return int32(v.Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + v := typeassert(fun(env), rtin, rtout) + return v.Int() + } + case r.Uint: + ret = func(env *Env) uint { + v := typeassert(fun(env), rtin, rtout) + return uint(v.Uint()) + } + case r.Uint8: + ret = func(env *Env) uint8 { + v := typeassert(fun(env), rtin, rtout) + return uint8(v.Uint()) + } + case r.Uint16: + ret = func(env *Env) uint16 { + v := typeassert(fun(env), rtin, rtout) + return uint16(v.Uint()) + } + case r.Uint32: + ret = func(env *Env) uint32 { + v := typeassert(fun(env), rtin, rtout) + return uint32(v.Uint()) + } + case r.Uint64: + ret = func(env *Env) uint64 { + v := typeassert(fun(env), rtin, rtout) + return v.Uint() + } + case r.Uintptr: + ret = func(env *Env) uintptr { + v := typeassert(fun(env), rtin, rtout) + return uintptr(v.Uint()) + } + case r.Float32: + ret = func(env *Env) float32 { + v := typeassert(fun(env), rtin, rtout) + return float32(v.Float()) + } + case r.Float64: + ret = func(env *Env) float64 { + v := typeassert(fun(env), rtin, rtout) + return v.Float() + } + case r.Complex64: + ret = func(env *Env) complex64 { + v := typeassert(fun(env), rtin, rtout) + return complex64(v.Complex()) + } + case r.Complex128: + ret = func(env *Env) complex128 { + v := typeassert(fun(env), rtin, rtout) + return v.Convert(rtout).Complex() + } + case r.String: + ret = func(env *Env) string { + v := typeassert(fun(env), rtin, rtout) + return v.String() + } + default: + if tout.ReflectType() == TypeOfInterface { + // special case, nil is a valid interface{} + ret = func(env *Env) r.Value { + return fun(env).Convert(TypeOfInterface) + } + break + } + if tout.Kind() == r.Interface && tin.Implements(tout) { + ret = func(env *Env) r.Value { + v := fun(env) + // nil is not a valid tout, check for it. + // IsNil() can be invoked only on nillable types... + // but v.Type().Kind() should be r.Interface, which is nillable :) + if v.IsNil() { + panic(&TypeAssertionError{ + Interface: rtin, + Concrete: nil, + Asserted: rtout, + }) + } + return v.Convert(rtout) + } + break + } + ret = func(env *Env) r.Value { + v := fun(env) + // nil is not a valid tout, check for it. + // IsNil() can be invoked only on nillable types... + // but v.Type().Kind() should be r.Interface, which is nillable :) + if v.IsNil() { + panic(&TypeAssertionError{ + Interface: rtin, + Concrete: nil, + Asserted: rtout, + }) + } + v = r.ValueOf(v.Interface()) // rebuild reflect.Value with concrete type + rtconcr := v.Type() + if rtconcr != rtout && (rtout.Kind() != r.Interface || !rtconcr.Implements(rtout)) { + panic(&TypeAssertionError{ + Interface: rtin, + Concrete: rtconcr, + Asserted: rtout, + }) + } + return v.Convert(rtout) + } + } + return exprFun(tout, ret) +} + +func typeassert(v r.Value, rtin r.Type, rtout r.Type) r.Value { + v = r.ValueOf(v.Interface()) // extract concrete type + rtconcr := v.Type() + if rtconcr != rtout { + panic(&TypeAssertionError{ + Interface: rtin, + Concrete: rtconcr, + Asserted: rtout, + }) + } + return v +} + +func (g *CompThreadGlobals) TypeOfBool() xr.Type { + return g.Universe.BasicTypes[r.Bool] +} + +func (g *CompThreadGlobals) TypeOfInt() xr.Type { + return g.Universe.BasicTypes[r.Int] +} + +func (g *CompThreadGlobals) TypeOfInt8() xr.Type { + return g.Universe.BasicTypes[r.Int8] +} + +func (g *CompThreadGlobals) TypeOfInt16() xr.Type { + return g.Universe.BasicTypes[r.Int16] +} + +func (g *CompThreadGlobals) TypeOfInt32() xr.Type { + return g.Universe.BasicTypes[r.Int32] +} + +func (g *CompThreadGlobals) TypeOfInt64() xr.Type { + return g.Universe.BasicTypes[r.Int64] +} + +func (g *CompThreadGlobals) TypeOfUint() xr.Type { + return g.Universe.BasicTypes[r.Uint] +} + +func (g *CompThreadGlobals) TypeOfUint8() xr.Type { + return g.Universe.BasicTypes[r.Uint8] +} + +func (g *CompThreadGlobals) TypeOfUint16() xr.Type { + return g.Universe.BasicTypes[r.Uint16] +} + +func (g *CompThreadGlobals) TypeOfUint32() xr.Type { + return g.Universe.BasicTypes[r.Uint32] +} + +func (g *CompThreadGlobals) TypeOfUint64() xr.Type { + return g.Universe.BasicTypes[r.Uint64] +} + +func (g *CompThreadGlobals) TypeOfUintptr() xr.Type { + return g.Universe.BasicTypes[r.Uintptr] +} + +func (g *CompThreadGlobals) TypeOfFloat32() xr.Type { + return g.Universe.BasicTypes[r.Float32] +} + +func (g *CompThreadGlobals) TypeOfFloat64() xr.Type { + return g.Universe.BasicTypes[r.Float64] +} + +func (g *CompThreadGlobals) TypeOfComplex64() xr.Type { + return g.Universe.BasicTypes[r.Complex64] +} + +func (g *CompThreadGlobals) TypeOfComplex128() xr.Type { + return g.Universe.BasicTypes[r.Complex128] +} + +func (g *CompThreadGlobals) TypeOfString() xr.Type { + return g.Universe.BasicTypes[r.String] +} + +func (g *CompThreadGlobals) TypeOfError() xr.Type { + return g.Universe.TypeOfError +} + +func (g *CompThreadGlobals) TypeOfInterface() xr.Type { + return g.Universe.TypeOfInterface +} + +var ( + rtypeOfBuiltin = r.TypeOf(Builtin{}) + rtypeOfFunction = r.TypeOf(Function{}) + rtypeOfImport = r.TypeOf(Import{}) + rtypeOfMacro = r.TypeOf(Macro{}) + rtypeOfUntypedLit = r.TypeOf(UntypedLit{}) + rtypeOfReflectType = r.TypeOf((*r.Type)(nil)).Elem() + + zeroOfReflectType = r.Zero(rtypeOfReflectType) +) + +func (g *CompThreadGlobals) TypeOfBuiltin() xr.Type { + return g.Universe.ReflectTypes[rtypeOfBuiltin] +} + +func (g *CompThreadGlobals) TypeOfFunction() xr.Type { + return g.Universe.ReflectTypes[rtypeOfFunction] +} + +func (g *CompThreadGlobals) TypeOfImport() xr.Type { + return g.Universe.ReflectTypes[rtypeOfImport] +} + +func (g *CompThreadGlobals) TypeOfMacro() xr.Type { + return g.Universe.ReflectTypes[rtypeOfMacro] +} + +func (g *CompThreadGlobals) TypeOfUntypedLit() xr.Type { + return g.Universe.ReflectTypes[rtypeOfUntypedLit] +} + +// A TypeAssertionError explains a failed type assertion. +type TypeAssertionError struct { + Interface r.Type + Concrete r.Type + Asserted r.Type + MissingMethod string // one method needed by Interface, missing from Concrete +} + +func (*TypeAssertionError) RuntimeError() {} + +func (e *TypeAssertionError) Error() string { + in := e.Interface + concr := e.Concrete + if concr == nil { + return fmt.Sprintf("interface conversion: <%v> is nil, not <%v>", in, e.Asserted) + } + if len(e.MissingMethod) == 0 { + return fmt.Sprintf("interface conversion: <%v> is <%v>, not <%v>", in, concr, e.Asserted) + } + return fmt.Sprintf("interface conversion: <%v> is not <%v>: missing method ", concr, e.Asserted, e.MissingMethod) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/unary.go b/vendor/github.com/cosmos72/gomacro/fast/unary.go new file mode 100644 index 0000000..283bbde --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/unary.go @@ -0,0 +1,123 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * unary.go + * + * Created on Apr 07, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/constant" + "go/token" + + "github.com/cosmos72/gomacro/base" + mt "github.com/cosmos72/gomacro/token" +) + +func (c *Comp) UnaryExpr(node *ast.UnaryExpr) *Expr { + switch node.Op { + case mt.QUOTE: + // surprisingly easy :) + block := node.X.(*ast.FuncLit).Body + node := base.SimplifyNodeForQuote(block, true) + return c.exprValue(nil, node) + + case mt.QUASIQUOTE: + return c.quasiquoteUnary(node) + + case mt.UNQUOTE, mt.UNQUOTE_SPLICE: + c.Errorf("invalid %s outside %s: %v", mt.String(node.Op), mt.String(mt.QUASIQUOTE), node) + + case token.AND: + // c.Expr(node.X) is useless here... skip it + return c.AddressOf(node) + } + + xe := c.Expr1(node.X) + if xe.Type == nil { + return c.invalidUnaryExpr(node, xe) + } + if xe.Untyped() { + return c.UnaryExprUntyped(node, xe) + } + isConst := xe.Const() + xe.WithFun() + var z *Expr + + switch node.Op { + case token.ADD: + z = c.UnaryPlus(node, xe) // only checks xe type, returns xe itself + case token.SUB: + z = c.UnaryMinus(node, xe) + case token.NOT: + z = c.UnaryNot(node, xe) + case token.XOR: + z = c.UnaryXor(node, xe) + case token.ARROW: + z = c.Recv(node, xe) + // never returns a constant + isConst = false + // case token.MUL: // not seen, the parser produces *ast.StarExpr instead + default: + return c.invalidUnaryExpr(node, xe) + } + if isConst { + // constant propagation + z.EvalConst(CompileKeepUntyped) + } + return z +} + +func (c *Comp) UnaryExprUntyped(node *ast.UnaryExpr, xe *Expr) *Expr { + op := node.Op + switch op { + case token.ADD, token.SUB, token.XOR, token.NOT: + xlit := xe.Value.(UntypedLit) + ret := constant.UnaryOp(op, xlit.Obj, 0) + if ret == constant.MakeUnknown() { + return c.invalidUnaryExpr(node, xe) + } + return c.exprUntypedLit(xlit.Kind, ret) + } + return c.invalidUnaryExpr(node, xe) +} + +func (c *Comp) invalidUnaryExpr(node *ast.UnaryExpr, xe *Expr) *Expr { + return c.badUnaryExpr("invalid", node, xe) +} + +func (c *Comp) unimplementedUnaryExpr(node *ast.UnaryExpr, xe *Expr) *Expr { + return c.badUnaryExpr("unimplemented", node, xe) +} + +func (c *Comp) badUnaryExpr(reason string, node *ast.UnaryExpr, xe *Expr) *Expr { + opstr := mt.String(node.Op) + if xe != nil { + c.Errorf("%s unary operation %s on <%v>: %s %v", + reason, opstr, xe.Type, opstr, node.X) + } else { + c.Errorf("%s unary operation %s: %s %v", + reason, opstr, opstr, node.X) + } + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/unary_ops.go b/vendor/github.com/cosmos72/gomacro/fast/unary_ops.go new file mode 100644 index 0000000..2bf23c9 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/unary_ops.go @@ -0,0 +1,370 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * unary_plus.go + * + * Created on Apr 07, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/token" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) UnaryPlus(node *ast.UnaryExpr, xe *Expr) *Expr { + if !IsCategory(xe.Type.Kind(), r.Int, r.Uint, r.Float64, r.Complex128) { + return c.invalidUnaryExpr(node, xe) + } + return xe +} + +func (c *Comp) UnaryMinus(node *ast.UnaryExpr, xe *Expr) *Expr { + // if xe is constant, UnaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + x := xe.Fun + var fun I + switch x := x.(type) { + case func(env *Env) int: + fun = func(env *Env) int { + return -x(env) + } + case func(env *Env) int8: + fun = func(env *Env) int8 { + return -x(env) + } + case func(env *Env) int16: + fun = func(env *Env) int16 { + return -x(env) + } + case func(env *Env) int32: + fun = func(env *Env) int32 { + return -x(env) + } + case func(env *Env) int64: + fun = func(env *Env) int64 { + return -x(env) + } + case func(env *Env) uint: + fun = func(env *Env) uint { + return -x(env) + } + case func(env *Env) uint8: + fun = func(env *Env) uint8 { + return -x(env) + } + case func(env *Env) uint16: + fun = func(env *Env) uint16 { + return -x(env) + } + case func(env *Env) uint32: + fun = func(env *Env) uint32 { + return -x(env) + } + case func(env *Env) uint64: + fun = func(env *Env) uint64 { + return -x(env) + } + case func(env *Env) uintptr: + fun = func(env *Env) uintptr { + return -x(env) + } + case func(env *Env) float32: + fun = func(env *Env) float32 { + return -x(env) + } + case func(env *Env) float64: + fun = func(env *Env) float64 { + return -x(env) + } + case func(env *Env) complex64: + fun = func(env *Env) complex64 { + return -x(env) + } + case func(env *Env) complex128: + fun = func(env *Env) complex128 { + return -x(env) + } + default: + return c.invalidUnaryExpr(node, xe) + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) UnaryXor(node *ast.UnaryExpr, xe *Expr) *Expr { + // if xe is constant, UnaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + x := xe.Fun + var fun I + switch x := x.(type) { + case func(env *Env) int: + fun = func(env *Env) int { + return ^x(env) + } + case func(env *Env) int8: + fun = func(env *Env) int8 { + return ^x(env) + } + case func(env *Env) int16: + fun = func(env *Env) int16 { + return ^x(env) + } + case func(env *Env) int32: + fun = func(env *Env) int32 { + return ^x(env) + } + case func(env *Env) int64: + fun = func(env *Env) int64 { + return ^x(env) + } + case func(env *Env) uint: + fun = func(env *Env) uint { + return ^x(env) + } + case func(env *Env) uint8: + fun = func(env *Env) uint8 { + return ^x(env) + } + case func(env *Env) uint16: + fun = func(env *Env) uint16 { + return ^x(env) + } + case func(env *Env) uint32: + fun = func(env *Env) uint32 { + return ^x(env) + } + case func(env *Env) uint64: + fun = func(env *Env) uint64 { + return ^x(env) + } + case func(env *Env) uintptr: + fun = func(env *Env) uintptr { + return ^x(env) + } + default: + return c.invalidUnaryExpr(node, xe) + } + return exprFun(xe.Type, fun) +} + +func (c *Comp) UnaryNot(node *ast.UnaryExpr, xe *Expr) *Expr { + // if xe is constant, UnaryExpr will invoke EvalConst() + // on our return value. no need to optimize that. + x := xe.Fun + var fun I + switch x := x.(type) { + case func(env *Env) bool: + fun = func(env *Env) bool { + return !x(env) + } + default: + return c.invalidUnaryExpr(node, xe) + } + return exprFun(xe.Type, fun) +} + +// StarExpr compiles unary operator * i.e. pointer dereference +func (c *Comp) StarExpr(node *ast.StarExpr) *Expr { + expr := node.X + for { + switch e := expr.(type) { + case *ast.ParenExpr: + expr = e.X + continue + case *ast.UnaryExpr: + if e.Op == token.AND { + // optimize * & x -> x, but check that x is addressable + c.placeOrAddress(e.X, PlaceAddress) + return c.Expr1(e.X) + } + } + break + } + addr := c.Expr1(expr) // panics if addr returns zero values, warns if returns multiple values + taddr := addr.Type + if taddr.Kind() != r.Ptr { + c.Errorf("unary operation * on non-pointer <%v>: %v", taddr, node) + } + return c.Deref(addr) +} + +// Deref compiles unary operator * i.e. pointer dereference +func (c *Comp) Deref(addr *Expr) *Expr { + taddr := addr.Type + if taddr.Kind() != r.Ptr { + c.Errorf("unary operation * on non-pointer <%v>", taddr) + } + x1 := addr.AsX1() // panics if addr returns zero values, warns if returns multiple values + t := taddr.Elem() + x := addr.Fun + var fun I + // fast interpreter expects that Exprs returning primitive types or string + // do NOT wrap them into reflect.Value + switch x := x.(type) { + case func(env *Env) *bool: + fun = func(env *Env) bool { + return *x(env) + } + case func(env *Env) *int: + fun = func(env *Env) int { + return *x(env) + } + case func(env *Env) *int8: + fun = func(env *Env) int8 { + return *x(env) + } + case func(env *Env) *int16: + fun = func(env *Env) int16 { + return *x(env) + } + case func(env *Env) *int32: + fun = func(env *Env) int32 { + return *x(env) + } + case func(env *Env) *int64: + fun = func(env *Env) int64 { + return *x(env) + } + case func(env *Env) *uint: + fun = func(env *Env) uint { + return *x(env) + } + case func(env *Env) *uint8: + fun = func(env *Env) uint8 { + return *x(env) + } + case func(env *Env) *uint16: + fun = func(env *Env) uint16 { + return *x(env) + } + case func(env *Env) *uint32: + fun = func(env *Env) uint32 { + return *x(env) + } + case func(env *Env) *uint64: + fun = func(env *Env) uint64 { + return *x(env) + } + case func(env *Env) *uintptr: + fun = func(env *Env) uintptr { + return *x(env) + } + case func(env *Env) *float32: + fun = func(env *Env) float32 { + return *x(env) + } + case func(env *Env) *float64: + fun = func(env *Env) float64 { + return *x(env) + } + case func(env *Env) *complex64: + fun = func(env *Env) complex64 { + return *x(env) + } + default: + fun = c.derefUnwrap(t, x1) + } + return exprFun(t, fun) +} + +// deref0Unwrap compiles unary operator * on reflect.Value - unwraps reflect.Value.Elem() if possible +func (c *Comp) derefUnwrap(t xr.Type, x1 func(*Env) r.Value) I { + var fun I + switch t.Kind() { + case r.Bool: + fun = func(env *Env) bool { + return x1(env).Elem().Bool() + } + case r.Int: + fun = func(env *Env) int { + return int(x1(env).Elem().Int()) + } + case r.Int8: + fun = func(env *Env) int8 { + return int8(x1(env).Elem().Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + return int16(x1(env).Elem().Int()) + } + case r.Int32: + fun = func(env *Env) int32 { + return int32(x1(env).Elem().Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + return x1(env).Elem().Int() + } + case r.Uint: + fun = func(env *Env) uint { + return uint(x1(env).Elem().Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return uint8(x1(env).Elem().Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return uint16(x1(env).Elem().Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return uint32(x1(env).Elem().Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return x1(env).Elem().Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return uintptr(x1(env).Elem().Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + return float32(x1(env).Elem().Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + return x1(env).Elem().Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + return complex64(x1(env).Elem().Complex()) + } + case r.Complex128: + fun = func(env *Env) complex128 { + return x1(env).Elem().Complex() + } + case r.String: + fun = func(env *Env) string { + return x1(env).Elem().String() + } + default: + fun = func(env *Env) r.Value { + return x1(env).Elem() + } + } + return fun +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/util.go b/vendor/github.com/cosmos72/gomacro/fast/util.go new file mode 100644 index 0000000..5150fab --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/util.go @@ -0,0 +1,1732 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * identifier.go + * + * Created on Apr 01, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/ast" + "go/constant" + r "reflect" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func eFalse(*Env) bool { + return false +} + +func eTrue(*Env) bool { + return true +} + +func eNone(*Env) { +} + +func eNil(*Env) r.Value { + return Nil +} + +func eXVNone(*Env) (r.Value, []r.Value) { + return None, nil +} + +func nop() { +} + +var valueOfNopFunc = r.ValueOf(nop) + +func asIdent(node ast.Expr) *ast.Ident { + ident, _ := node.(*ast.Ident) + return ident +} + +func (e *Expr) TryAsPred() (value bool, fun func(*Env) bool, err bool) { + if e.Untyped() { + untyp := e.Value.(UntypedLit) + if untyp.Kind != r.Bool { + return false, nil, true + } + return constant.BoolVal(untyp.Obj), nil, false + } + if e.Type.Kind() != r.Bool { + return false, nil, true + } + if e.Const() { + v := r.ValueOf(e.Value) + return v.Bool(), nil, false + } + switch fun := e.Fun.(type) { + case func(*Env) bool: + return false, fun, false + case func(*Env) (r.Value, []r.Value): + e.CheckX1() + return false, func(env *Env) bool { + ret, _ := fun(env) + return ret.Bool() + }, false + default: + fun1 := e.AsX1() + return false, func(env *Env) bool { + return fun1(env).Bool() + }, false + } +} + +func (c *Comp) invalidPred(node ast.Expr, x *Expr) Stmt { + return c.badPred("invalid", node, x) +} + +func (c *Comp) badPred(reason string, node ast.Expr, x *Expr) Stmt { + var t xr.Type = nil + if x.NumOut() != 0 { + t = x.Out(0) + } + c.Errorf("%s boolean predicate, expecting expression, found <%v>: %v", + reason, t, node) + return nil +} + +func (e *Expr) AsX() func(*Env) { + if e == nil || e.Const() { + return nil + } + return funAsX(e.Fun) +} + +func funAsX(any I) func(*Env) { + switch fun := any.(type) { + case nil: + case func(*Env): + return fun + case func(*Env) r.Value: + return func(env *Env) { + fun(env) + } + case func(*Env) (r.Value, []r.Value): + return func(env *Env) { + fun(env) + } + case func(*Env) bool: + return func(env *Env) { + fun(env) + } + case func(*Env) int: + return func(env *Env) { + fun(env) + } + case func(*Env) int8: + return func(env *Env) { + fun(env) + } + case func(*Env) int16: + return func(env *Env) { + fun(env) + } + case func(*Env) int32: + return func(env *Env) { + fun(env) + } + case func(*Env) int64: + return func(env *Env) { + fun(env) + } + case func(*Env) uint: + return func(env *Env) { + fun(env) + } + case func(*Env) uint8: + return func(env *Env) { + fun(env) + } + case func(*Env) uint16: + return func(env *Env) { + fun(env) + } + case func(*Env) uint32: + return func(env *Env) { + fun(env) + } + case func(*Env) uint64: + return func(env *Env) { + fun(env) + } + case func(*Env) uintptr: + return func(env *Env) { + fun(env) + } + case func(*Env) float32: + return func(env *Env) { + fun(env) + } + case func(*Env) float64: + return func(env *Env) { + fun(env) + } + case func(*Env) complex64: + return func(env *Env) { + fun(env) + } + case func(*Env) complex128: + return func(env *Env) { + fun(env) + } + case func(*Env) string: + return func(env *Env) { + fun(env) + } + default: + Errorf("unsupported function type, cannot convert to func(*Env): %v <%v>", any, r.TypeOf(any)) + } + return nil +} + +// CheckX1() panics if given expression cannot be used in single-value context, +// for example because it returns no value at all. +// It just prints a warning if expression returns multiple values. +func (e *Expr) CheckX1() { + if e != nil && e.Const() { + return + } + if e == nil || e.NumOut() == 0 { + Errorf("expression returns no values, cannot convert to func(env *Env) r.Value") + return + } else if e.NumOut() > 1 { + Warnf("expression returns %d values, using only the first one: %v", e.NumOut(), e.Types) + } +} + +func (e *Expr) AsX1() func(*Env) r.Value { + if e == nil { + return eNil + } + if e.Const() { + return valueAsX1(e.Value, e.Type, CompileDefaults) + } + e.CheckX1() + return funAsX1(e.Fun, e.Type) +} + +func (e *Expr) AsXV(opts CompileOptions) func(*Env) (r.Value, []r.Value) { + if e == nil { + return eXVNone + } + if e.Const() { + return valueAsXV(e.Value, e.Type, opts) + } + return funAsXV(e.Fun, e.Type) +} + +func valueAsX1(any I, t xr.Type, opts CompileOptions) func(*Env) r.Value { + convertuntyped := opts&CompileKeepUntyped == 0 + untyp, untyped := any.(UntypedLit) + if untyped && convertuntyped { + if t == nil || t.ReflectType() == rtypeOfUntypedLit { + t = untyp.DefaultType() + } + // Debugf("late conversion of untyped constant %v <%v> to <%v>", untyp, r.TypeOf(untyp), t) + any = untyp.ConstTo(t) + } + v := r.ValueOf(any) + if t != nil { + rtype := t.ReflectType() + if !v.IsValid() { + v = r.Zero(rtype) + } else if convertuntyped || !untyped { + v = v.Convert(rtype) + } + } + return func(*Env) r.Value { + return v + } +} + +func valueAsXV(any I, t xr.Type, opts CompileOptions) func(*Env) (r.Value, []r.Value) { + convertuntyped := opts&CompileKeepUntyped == 0 + untyp, untyped := any.(UntypedLit) + if convertuntyped { + if untyped { + if t == nil || t.ReflectType() == rtypeOfUntypedLit { + t = untyp.DefaultType() + // Debugf("valueAsXV: late conversion of untyped constant %v <%v> to its default type <%v>", untyp, r.TypeOf(untyp), t) + } else { + // Debugf("valueAsXV: late conversion of untyped constant %v <%v> to <%v>", untyp, r.TypeOf(untyp), t.ReflectType()) + } + any = untyp.ConstTo(t) + } + } + v := r.ValueOf(any) + if t != nil { + rtype := t.ReflectType() + if ValueType(v) == nil { + v = r.Zero(rtype) + } else if convertuntyped || !untyped { + v = v.Convert(rtype) + } + } + return func(*Env) (r.Value, []r.Value) { + return v, nil + } +} + +func funAsX1(fun I, t xr.Type) func(*Env) r.Value { + // Debugf("funAsX1() %v -> %v", TypeOf(fun), t) + var rt r.Type + if t != nil { + rt = t.ReflectType() + } + switch fun := fun.(type) { + case nil: + case func(*Env): + if fun == nil { + break + } + return func(env *Env) r.Value { + fun(env) + return None + } + case func(*Env) r.Value: + return fun + case func(*Env) (r.Value, []r.Value): + return func(env *Env) r.Value { + ret, _ := fun(env) + return ret + } + case func(*Env) bool: + if rt == nil || rt == TypeOfBool { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int: + if rt == nil || rt == TypeOfInt { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int8: + if rt == nil || rt == TypeOfInt8 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int16: + if rt == nil || rt == TypeOfInt16 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int32: + if rt == nil || rt == TypeOfInt32 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int64: + if rt == nil || rt == TypeOfInt64 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint: + if rt == nil || rt == TypeOfUint { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint8: + if rt == nil || rt == TypeOfUint8 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint16: + if rt == nil || rt == TypeOfUint16 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint32: + if rt == nil || rt == TypeOfUint32 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint64: + if rt == nil || rt == TypeOfUint64 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uintptr: + if rt == nil || rt == TypeOfUintptr { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) float32: + if rt == nil || rt == TypeOfFloat32 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) float64: + if rt == nil || rt == TypeOfFloat64 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) complex64: + if rt == nil || rt == TypeOfComplex64 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) complex128: + if rt == nil || rt == TypeOfComplex128 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) string: + if rt == nil || rt == TypeOfString { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *bool: + if rt == nil || rt == TypeOfPtrBool { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *int: + if rt == nil || rt == TypeOfPtrInt { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *int8: + if rt == nil || rt == TypeOfPtrInt8 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *int16: + if rt == nil || rt == TypeOfPtrInt16 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *int32: + if rt == nil || rt == TypeOfPtrInt32 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *int64: + if rt == nil || rt == TypeOfPtrInt64 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *uint: + if rt == nil || rt == TypeOfPtrUint { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *uint8: + if rt == nil || rt == TypeOfPtrUint8 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *uint16: + if rt == nil || rt == TypeOfPtrUint16 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *uint32: + if rt == nil || rt == TypeOfPtrUint32 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *uint64: + if rt == nil || rt == TypeOfPtrUint64 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *uintptr: + if rt == nil || rt == TypeOfPtrUintptr { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *float32: + if rt == nil || rt == TypeOfPtrFloat32 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *float64: + if rt == nil || rt == TypeOfPtrFloat64 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) *complex64: + if rt == nil || rt == TypeOfPtrComplex64 { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)) + } + } else { + return func(env *Env) r.Value { + return r.ValueOf(fun(env)).Convert(rt) + } + } + default: + Errorf("unsupported expression type, cannot convert to func(*Env) r.Value: %v <%v>", fun, r.TypeOf(fun)) + } + return nil +} + +func funAsXV(fun I, t xr.Type) func(*Env) (r.Value, []r.Value) { + // Debugf("funAsXV() %v -> %v", TypeOf(fun), t) + var rt r.Type + if t != nil { + rt = t.ReflectType() + } + switch fun := fun.(type) { + case nil: + case func(*Env): + if fun == nil { + break + } + return func(env *Env) (r.Value, []r.Value) { + fun(env) + return None, nil + } + case func(*Env) r.Value: + return func(env *Env) (r.Value, []r.Value) { + return fun(env), nil + } + case func(*Env) (r.Value, []r.Value): + return fun + case func(*Env) bool: + if rt == nil || rt == TypeOfBool { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) int: + if rt == nil || rt == TypeOfInt { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) int8: + if rt == nil || rt == TypeOfInt8 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) int16: + if rt == nil || rt == TypeOfInt16 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) int32: + if rt == nil || rt == TypeOfInt32 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) int64: + if rt == nil || rt == TypeOfInt64 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) uint: + if rt == nil || rt == TypeOfUint { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) uint8: + if rt == nil || rt == TypeOfUint8 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) uint16: + if rt == nil || rt == TypeOfUint16 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) uint32: + if rt == nil || rt == TypeOfUint32 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) uint64: + if rt == nil || rt == TypeOfUint64 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) uintptr: + if rt == nil || rt == TypeOfUintptr { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) float32: + if rt == nil || rt == TypeOfFloat32 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) float64: + if rt == nil || rt == TypeOfFloat64 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) complex64: + if rt == nil || rt == TypeOfComplex64 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) complex128: + if rt == nil || rt == TypeOfComplex128 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) string: + if rt == nil || rt == TypeOfString { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *bool: + if rt == nil || rt == TypeOfPtrBool { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *int: + if rt == nil || rt == TypeOfPtrInt { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *int8: + if rt == nil || rt == TypeOfPtrInt8 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *int16: + if rt == nil || rt == TypeOfPtrInt16 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *int32: + if rt == nil || rt == TypeOfPtrInt32 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *int64: + if rt == nil || rt == TypeOfPtrInt64 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *uint: + if rt == nil || rt == TypeOfPtrUint { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *uint8: + if rt == nil || rt == TypeOfPtrUint8 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *uint16: + if rt == nil || rt == TypeOfPtrUint16 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *uint32: + if rt == nil || rt == TypeOfPtrUint32 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *uint64: + if rt == nil || rt == TypeOfPtrUint64 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *uintptr: + if rt == nil || rt == TypeOfPtrUintptr { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *float32: + if rt == nil || rt == TypeOfPtrFloat32 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *float64: + if rt == nil || rt == TypeOfPtrFloat64 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + case func(*Env) *complex64: + if rt == nil || rt == TypeOfPtrComplex64 { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)), nil + } + } else { + return func(env *Env) (r.Value, []r.Value) { + return r.ValueOf(fun(env)).Convert(rt), nil + } + } + default: + Errorf("unsupported expression, cannot convert to func(*Env) (r.Value, []r.Value) : %v <%v>", + fun, r.TypeOf(fun)) + } + return nil +} + +func (e *Expr) AsStmt() Stmt { + if e == nil || e.Const() { + return nil + } + return funAsStmt(e.Fun) +} + +func funAsStmt(fun I) Stmt { + var ret func(env *Env) (Stmt, *Env) + + switch fun := fun.(type) { + case nil: + case func(*Env): + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) r.Value: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) (r.Value, []r.Value): + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) bool: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int8: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int16: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int32: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) int64: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint8: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint16: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint32: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uint64: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) uintptr: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float32: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) float64: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex64: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) complex128: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + case func(*Env) string: + ret = func(env *Env) (Stmt, *Env) { + fun(env) + env.IP++ + return env.Code[env.IP], env + } + default: + + Errorf("unsupported expression type, cannot convert to Stmt : %v <%v>", + fun, r.TypeOf(fun)) + } + return ret +} + +// funTypeOut returns the first return type of given function +func funTypeOut(fun I) r.Type { + rt := r.TypeOf(fun) + if rt == nil || rt.Kind() != r.Func || rt.NumOut() == 0 { + return nil + } + return rt.Out(0) +} + +// funTypeOuts returns the return types of given function +func funTypeOuts(fun I) []r.Type { + rt := r.TypeOf(fun) + if rt == nil || rt.Kind() != r.Func { + return []r.Type{rt} + } + n := rt.NumOut() + rts := make([]r.Type, n) + for i := 0; i < n; i++ { + rts[i] = rt.Out(i) + } + return rts +} + +// exprList merges together a list of expressions, +// and returns an expression that evaluates each one +func exprList(list []*Expr, opts CompileOptions) *Expr { + // skip constant expressions (except the last one) + var n int + for i, ni := 0, len(list)-1; i <= ni; i++ { + // preserve the last expression even if constant + // because it will be returned to the user + if i == ni || !list[i].Const() { + list[n] = list[i] + n++ + } + } + switch n { + case 0: + return nil + case 1: + return list[0] + } + list = list[:n] + + funs := make([]func(*Env), n-1) + for i := range funs { + funs[i] = list[i].AsX() + } + return &Expr{ + Lit: Lit{Type: list[n-1].Type}, + Types: list[n-1].Types, + Fun: funList(funs, list[n-1], opts), + } +} + +// funList merges together a list of functions, +// and returns a function that evaluates each one +func funList(funs []func(*Env), last *Expr, opts CompileOptions) I { + var rt r.Type + if last.Type != nil { + // keep untyped constants only if requested + if opts != CompileKeepUntyped && last.Untyped() { + last.ConstTo(last.DefaultType()) + } + rt = last.Type.ReflectType() + } + switch fun := last.WithFun().(type) { + case nil: + return func(env *Env) { + for _, f := range funs { + f(env) + } + } + case func(*Env): + return func(env *Env) { + for _, f := range funs { + f(env) + } + fun(env) + } + case func(*Env) r.Value: + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return fun(env) + } + case func(*Env) (r.Value, []r.Value): + return func(env *Env) (r.Value, []r.Value) { + for _, f := range funs { + f(env) + } + return fun(env) + } + case func(*Env) bool: + if rt == nil || rt == TypeOfBool { + return func(env *Env) bool { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int: + if rt == nil || rt == TypeOfInt { + return func(env *Env) int { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int8: + if rt == nil || rt == TypeOfInt8 { + return func(env *Env) int8 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int16: + if rt == nil || rt == TypeOfInt16 { + return func(env *Env) int16 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int32: + if rt == nil || rt == TypeOfInt32 { + return func(env *Env) int32 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) int64: + if rt == nil || rt == TypeOfInt64 { + return func(env *Env) int64 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint: + if rt == nil || rt == TypeOfUint { + return func(env *Env) uint { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint8: + if rt == nil || rt == TypeOfUint8 { + return func(env *Env) uint8 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint16: + if rt == nil || rt == TypeOfUint16 { + return func(env *Env) uint16 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint32: + if rt == nil || rt == TypeOfUint32 { + return func(env *Env) uint32 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uint64: + if rt == nil || rt == TypeOfUint64 { + return func(env *Env) uint64 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) uintptr: + if rt == nil || rt == TypeOfUintptr { + return func(env *Env) uintptr { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) float32: + if rt == nil || rt == TypeOfFloat32 { + return func(env *Env) float32 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) float64: + if rt == nil || rt == TypeOfFloat64 { + return func(env *Env) float64 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) complex64: + if rt == nil || rt == TypeOfComplex64 { + return func(env *Env) complex64 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) complex128: + if rt == nil || rt == TypeOfComplex128 { + return func(env *Env) complex128 { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + case func(*Env) string: + if rt == nil || rt == TypeOfString { + return func(env *Env) string { + for _, f := range funs { + f(env) + } + return fun(env) + } + } else { + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + return r.ValueOf(fun(env)).Convert(rt) + } + } + default: + switch last.NumOut() { + case 0: + fun := last.AsX() + return func(env *Env) { + for _, f := range funs { + f(env) + } + fun(env) + } + case 1: + var zero r.Value + if rt != nil { + zero = r.Zero(rt) + } + fun := last.AsX1() + return func(env *Env) r.Value { + for _, f := range funs { + f(env) + } + ret := fun(env) + if ret == Nil { + ret = zero + } else if rt != nil && rt != ret.Type() { + ret = ret.Convert(rt) + } + return ret + } + default: + var zero []r.Value + var rt []r.Type + for i, t := range last.Types { + if t != nil { + rt[i] = t.ReflectType() + zero[i] = r.Zero(rt[i]) + } + } + fun := last.AsXV(opts) + return func(env *Env) (r.Value, []r.Value) { + for _, f := range funs { + f(env) + } + _, rets := fun(env) + for i, ret := range rets { + if ret == Nil { + rets[i] = zero[i] + } else if rt != nil && rt[i] != ret.Type() { + rets[i] = ret.Convert(rt[i]) + } + } + return rets[0], rets + } + } + } +} + +// unwrapBind compiles a conversion from a "mis-typed" bind stored in env.Binds[] as reflect.Value +// into a correctly-typed expression +func unwrapBind(bind *Bind, t xr.Type) *Expr { + idx := bind.Desc.Index() + var ret I + switch t.Kind() { + case r.Bool: + ret = func(env *Env) bool { + return env.Binds[idx].Bool() + } + case r.Int: + ret = func(env *Env) int { + return int(env.Binds[idx].Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + return int8(env.Binds[idx].Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + return int16(env.Binds[idx].Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + return int32(env.Binds[idx].Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + return env.Binds[idx].Int() + } + case r.Uint: + ret = func(env *Env) uint { + return uint(env.Binds[idx].Uint()) + } + case r.Uint8: + ret = func(env *Env) uint8 { + return uint8(env.Binds[idx].Uint()) + } + case r.Uint16: + ret = func(env *Env) uint16 { + return uint16(env.Binds[idx].Uint()) + } + case r.Uint32: + ret = func(env *Env) uint32 { + return uint32(env.Binds[idx].Uint()) + } + case r.Uint64: + ret = func(env *Env) uint64 { + return env.Binds[idx].Uint() + } + case r.Uintptr: + ret = func(env *Env) uintptr { + return uintptr(env.Binds[idx].Uint()) + } + case r.Float32: + ret = func(env *Env) float32 { + return float32(env.Binds[idx].Float()) + } + case r.Float64: + ret = func(env *Env) float64 { + return env.Binds[idx].Float() + } + case r.Complex64: + ret = func(env *Env) complex64 { + return complex64(env.Binds[idx].Complex()) + } + case r.Complex128: + ret = func(env *Env) complex128 { + return env.Binds[idx].Complex() + } + case r.String: + ret = func(env *Env) string { + return env.Binds[idx].String() + } + default: + rtype := t.ReflectType() + zero := r.Zero(rtype) + ret = func(env *Env) r.Value { + v := env.Binds[idx] + if !v.IsValid() { + v = zero + } else if v.Type() != rtype { + v = v.Convert(rtype) + } + return v + } + } + return exprFun(t, ret) +} + +// unwrapBindUp1 compiles a conversion from a "mis-typed" bind stored in env.Outer.Binds[] as reflect.Value +// into a correctly-typed expression +func unwrapBindUp1(bind *Bind, t xr.Type) *Expr { + idx := bind.Desc.Index() + var ret I + switch t.Kind() { + case r.Bool: + ret = func(env *Env) bool { + return env.Outer.Binds[idx].Bool() + } + case r.Int: + ret = func(env *Env) int { + return int(env.Outer.Binds[idx].Int()) + } + case r.Int8: + ret = func(env *Env) int8 { + return int8(env.Outer.Binds[idx].Int()) + } + case r.Int16: + ret = func(env *Env) int16 { + return int16(env.Outer.Binds[idx].Int()) + } + case r.Int32: + ret = func(env *Env) int32 { + return int32(env.Outer.Binds[idx].Int()) + } + case r.Int64: + ret = func(env *Env) int64 { + return env.Outer.Binds[idx].Int() + } + case r.Uint: + ret = func(env *Env) uint { + return uint(env.Outer.Binds[idx].Uint()) + } + case r.Uint8: + ret = func(env *Env) uint8 { + return uint8(env.Outer.Binds[idx].Uint()) + } + case r.Uint16: + ret = func(env *Env) uint16 { + return uint16(env.Outer.Binds[idx].Uint()) + } + case r.Uint32: + ret = func(env *Env) uint32 { + return uint32(env.Outer.Binds[idx].Uint()) + } + case r.Uint64: + ret = func(env *Env) uint64 { + return env.Outer.Binds[idx].Uint() + } + case r.Uintptr: + ret = func(env *Env) uintptr { + return uintptr(env.Outer.Binds[idx].Uint()) + } + case r.Float32: + ret = func(env *Env) float32 { + return float32(env.Outer.Binds[idx].Float()) + } + case r.Float64: + ret = func(env *Env) float64 { + return env.Outer.Binds[idx].Float() + } + case r.Complex64: + ret = func(env *Env) complex64 { + return complex64(env.Outer.Binds[idx].Complex()) + } + case r.Complex128: + ret = func(env *Env) complex128 { + return env.Outer.Binds[idx].Complex() + } + case r.String: + ret = func(env *Env) string { + return env.Outer.Binds[idx].String() + } + default: + rtype := t.ReflectType() + zero := r.Zero(rtype) + ret = func(env *Env) r.Value { + v := env.Outer.Binds[idx] + if !v.IsValid() { + v = zero + } else if v.Type() != rtype { + v = v.Convert(rtype) + } + return v + } + } + return exprFun(t, ret) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_ops.go b/vendor/github.com/cosmos72/gomacro/fast/var_ops.go new file mode 100644 index 0000000..a4aad2e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/var_ops.go @@ -0,0 +1,14431 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * var_setops.go + * + * Created on Apr 09, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { + if isLiteralNumber(val, 0) || val == "" { + return + } + + { + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float32: + val := + + float32(r.ValueOf(val).Float()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float64: + val := r.ValueOf(val).Float() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex64: + val := + + complex64(r.ValueOf(val).Complex()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex128: + val := r.ValueOf(val).Complex() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetComplex(lhs.Complex() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := + + env.ThreadGlobals.FileEnv.Binds[index] + lhs.SetComplex(lhs.Complex() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case r.String: + val := r.ValueOf(val).String() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetString(lhs.String() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetString(lhs.String() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetString(lhs.String() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetString(lhs.String() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetString(lhs.String() + + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.ADD, t) + + } + c.append(ret) + } +} +func (c *Comp) varAddExpr(upn int, index int, t xr.Type, fun I) { + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) float32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) float64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) complex64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) complex128: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetComplex(lhs.Complex() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := + + env.ThreadGlobals.FileEnv.Binds[index] + lhs.SetComplex(lhs.Complex() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) string: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetString(lhs.String() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetString(lhs.String() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetString(lhs.String() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetString(lhs.String() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetString(lhs.String() + + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.ADD, t) + + } + c.append(ret) +} +func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { + if isLiteralNumber(val, 0) { + return + } + + { + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float32: + val := + + float32(r.ValueOf(val).Float()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float64: + val := r.ValueOf(val).Float() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex64: + val := + + complex64(r.ValueOf(val).Complex()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex128: + val := r.ValueOf(val).Complex() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() - + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetComplex(lhs.Complex() - + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := + + env.ThreadGlobals.FileEnv.Binds[index] + lhs.SetComplex(lhs.Complex() - + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.SUB, t) + + } + c.append(ret) + } +} +func (c *Comp) varSubExpr(upn int, index int, t xr.Type, fun I) { + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) float32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) float64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) complex64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) complex128: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := + + env.ThreadGlobals.FileEnv.Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.SUB, t) + + } + c.append(ret) +} +func (c *Comp) varMulConst(upn int, index int, t xr.Type, val I) { + if isLiteralNumber(val, 0) { + + c.varSetZero(upn, index, t) + return + } else if isLiteralNumber(val, 1) { + return + } + + { + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float32: + val := + + float32(r.ValueOf(val).Float()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float64: + val := r.ValueOf(val).Float() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex64: + val := + + complex64(r.ValueOf(val).Complex()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex128: + val := r.ValueOf(val).Complex() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := + + env.ThreadGlobals.FileEnv.Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.MUL, t) + + } + c.append(ret) + } +} +func (c *Comp) varMulExpr(upn int, index int, t xr.Type, fun I) { + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) float32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) float64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) complex64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) complex128: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := + + env.ThreadGlobals.FileEnv.Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.MUL, t) + + } + c.append(ret) +} +func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, t) + return false + } else if isLiteralNumber(val, 1) { + return true + } + + ypositive := true + yv := r.ValueOf(val) + var y uint64 + switch KindToCategory(yv.Kind()) { + case r.Int: + sy := yv.Int() + if sy < 0 { + ypositive = false + y = uint64(-sy) + } else { + y = uint64(sy) + } + + case r.Uint: + y = yv.Uint() + default: + return false + } + if !isPowerOfTwo(y) { + return false + } + + shift := integerLen(y) - 1 + var ret Stmt + + switch t.Kind() { + case r.Int: + switch upn { + case 0: + + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Int8: + switch upn { + case 0: + + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int8)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int8)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Int16: + switch upn { + case 0: + + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int16)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int16)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Int32: + switch upn { + case 0: + + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int32)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int32)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Int64: + switch upn { + case 0: + + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int64)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int64)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + + env.ThreadGlobals.FileEnv.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + } + if ret == nil { + return false + } + + c.append(ret) + return true +} +func (c *Comp) varQuoConst(upn int, index int, t xr.Type, val I) { + if c.varQuoPow2(upn, index, t, val) { + return + } + + { + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float32: + val := + + float32(r.ValueOf(val).Float()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Float64: + val := r.ValueOf(val).Float() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex64: + val := + + complex64(r.ValueOf(val).Complex()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Complex128: + val := r.ValueOf(val).Complex() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := + + env.ThreadGlobals.FileEnv.Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.QUO, t) + + } + c.append(ret) + } +} +func (c *Comp) varQuoExpr(upn int, index int, t xr.Type, fun I) { + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) float32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) float64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) complex64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) complex128: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := + + env.ThreadGlobals.FileEnv.Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.QUO, t) + + } + c.append(ret) +} +func (c *Comp) varRemConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, t) + return + } else if isLiteralNumber(val, 1) { + + c.varSetZero(upn, index, t) + return + } + } + + { + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] %= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.REM, t) + + } + c.append(ret) + } +} +func (c *Comp) varRemExpr(upn int, index int, t xr.Type, fun I) { + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.REM, t) + + } + c.append(ret) +} +func (c *Comp) varAndConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { + return + } else if isLiteralNumber(val, 0) { + + c.varSetZero(upn, index, t) + return + } + } + + { + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] &= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND, t) + + } + c.append(ret) + } +} +func (c *Comp) varAndExpr(upn int, index int, t xr.Type, fun I) { + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND, t) + + } + c.append(ret) +} +func (c *Comp) varOrConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + return + } + + { + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] |= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.OR, t) + + } + c.append(ret) + } +} +func (c *Comp) varOrExpr(upn int, index int, t xr.Type, fun I) { + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.OR, t) + + } + c.append(ret) +} +func (c *Comp) varXorConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + return + } + + { + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.XOR, t) + + } + c.append(ret) + } +} +func (c *Comp) varXorExpr(upn int, index int, t xr.Type, fun I) { + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.XOR, t) + + } + c.append(ret) +} +func (c *Comp) varAndnotConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { + + c.varSetZero(upn, index, t) + return + } else if isLiteralNumber(val, 0) { + return + } + } + + { + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND_NOT, t) + + } + c.append(ret) + } +} +func (c *Comp) varAndnotExpr(upn int, index int, t xr.Type, fun I) { + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND_NOT, t) + + } + c.append(ret) +} +func (c *Comp) SetVar(va *Var, op token.Token, init *Expr) { + t := va.Type + var ok, shift bool + switch op { + case token.SHL, token.SHL_ASSIGN, token.SHR, token.SHR_ASSIGN: + shift = true + if init.Untyped() { + init.ConstTo(c.TypeOfUint64()) + ok = true + } else { + ok = init.Type != nil && KindToCategory(init.Type.Kind()) == r.Uint + } + + default: + if init.Const() { + init.ConstTo(t) + ok = true + } else if init.Type == nil { + ok = op == token.ASSIGN && IsNillableKind(t.Kind()) + } else { + ok = init.Type.AssignableTo(t) + } + + } + if !ok { + c.Errorf("incompatible types in assignment: %v %s %v", t, op, init.Type) + return + } + class := va.Desc.Class() + if class != VarBind && class != IntBind { + c.Errorf("invalid operator %s on %v", op, class) + return + } + upn := va.Upn + index := va.Desc.Index() + if index == NoIndex { + if op != token.ASSIGN { + c.Errorf("invalid operator %s on _", op) + } + + if !init.Const() { + c.append(init.AsStmt()) + } + + return + } + if init.Const() { + rt := t.ReflectType() + val := init.Value + v := r.ValueOf(val) + if v == None || v == Nil { + v = r.Zero(rt) + val = v.Interface() + } else if v.Type() != rt && !shift { + v = v.Convert(rt) + val = v.Interface() + } + switch op { + case token.ASSIGN: + c.varSetConst(upn, index, t, val) + case token.ADD, token.ADD_ASSIGN: + c.varAddConst(upn, index, t, val) + case token.SUB, token.SUB_ASSIGN: + c.varSubConst(upn, index, t, val) + case token.MUL, token.MUL_ASSIGN: + c.varMulConst(upn, index, t, val) + case token.QUO, token.QUO_ASSIGN: + c.varQuoConst(upn, index, t, val) + case token.REM, token.REM_ASSIGN: + c.varRemConst(upn, index, t, val) + case token.AND, token.AND_ASSIGN: + c.varAndConst(upn, index, t, val) + case token.OR, token.OR_ASSIGN: + c.varOrConst(upn, index, t, val) + case token.XOR, token.XOR_ASSIGN: + c.varXorConst(upn, index, t, val) + case token.SHL, token.SHL_ASSIGN: + c.varShlConst(upn, index, t, val) + case token.SHR, token.SHR_ASSIGN: + c.varShrConst(upn, index, t, val) + case token.AND_NOT, token.AND_NOT_ASSIGN: + c.varAndnotConst(upn, index, t, val) + default: + c.Errorf("invalid operator %s", op) + } + } else { + fun := init.Fun + switch op { + case token.ASSIGN: + c.varSetExpr(upn, index, t, init) + case token.ADD, token.ADD_ASSIGN: + c.varAddExpr(upn, index, t, fun) + case token.SUB, token.SUB_ASSIGN: + c.varSubExpr(upn, index, t, fun) + case token.MUL, token.MUL_ASSIGN: + c.varMulExpr(upn, index, t, fun) + case token.QUO, token.QUO_ASSIGN: + c.varQuoExpr(upn, index, t, fun) + case token.REM, token.REM_ASSIGN: + c.varRemExpr(upn, index, t, fun) + case token.AND, token.AND_ASSIGN: + c.varAndExpr(upn, index, t, fun) + case token.OR, token.OR_ASSIGN: + c.varOrExpr(upn, index, t, fun) + case token.XOR, token.XOR_ASSIGN: + c.varXorExpr(upn, index, t, fun) + case token.SHL, token.SHL_ASSIGN: + c.varShlExpr(upn, index, t, fun) + case token.SHR, token.SHR_ASSIGN: + c.varShrExpr(upn, index, t, fun) + case token.AND_NOT, token.AND_NOT_ASSIGN: + c.varAndnotExpr(upn, index, t, fun) + default: + c.Errorf("invalid operator %s", op) + } + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_ops.gomacro b/vendor/github.com/cosmos72/gomacro/fast/var_ops.gomacro new file mode 100644 index 0000000..a59f4bd --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/var_ops.gomacro @@ -0,0 +1,680 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * var_setops.go + * + * Created on Apr 09, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + "fmt" + "go/ast" + "go/token" + r "reflect" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makekind(typ ast.Node) ast.Node { + t := EvalType(typ) + if t == nil { + return nil + } + // go/ast.SelectorExpr requires the foo in r.foo to be an *ast.Ident, cannot unquote there + kind := ~"{r . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(t.Name())} + return kind +} + + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +:func op_to_assign(op token.Token) token.Token { + switch op { + case token.ADD: + op = token.ADD_ASSIGN + case token.SUB: + op = token.SUB_ASSIGN + case token.MUL: + op = token.MUL_ASSIGN + case token.QUO: + op = token.QUO_ASSIGN + case token.REM: + op = token.REM_ASSIGN + case token.AND: + op = token.AND_ASSIGN + case token.OR: + op = token.OR_ASSIGN + case token.XOR: + op = token.XOR_ASSIGN + case token.SHL: + op = token.SHL_ASSIGN + case token.SHR: + op = token.SHR_ASSIGN + case token.AND_NOT: + op = token.AND_NOT_ASSIGN + default: + panic(fmt.Sprintf("cannot convert token %s to assignment token", op)) + } + return op +} + +:func fgetplace(depth, typ ast.Node) (/*loop*/ *ast.BlockStmt, /*bind*/ ast.Node) { + // the return type of Eval() and EvalType() varies. better check early. + upn := Eval(depth).(int) + var t r.Type = EvalType(typ) + var bind ast.Node + var loop *ast.BlockStmt + + if upn >= 0 { + bind = ~'{env} + for i := 0; i < upn; i++ { + bind = ~"{~,bind . Outer} + } + } else if upn == -2 { + bind = ~'{env.ThreadGlobals.FileEnv} + } else if upn == -3 { + bind = ~'{env.ThreadGlobals.TopEnv} + } else { + loop = ~'{ + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + } + bind = ~'o + } + return loop, bind +} + +:func fsetplace(opnode, depth, typ, expr, exprv ast.Node) ast.Node { + loop, bind := fgetplace(depth, typ) + // the return type of Eval() and EvalType() varies. better check early. + var t r.Type = EvalType(typ) + op := Eval(opnode).(token.Token) + opset := op_to_assign(op) + + switch t.Kind() { + case r.Complex128: + var result *ast.BinaryExpr = ~"{lhs.Complex() + ~,expr} + result.Op = op + bind = ~"{lhs := ~,bind . Binds[index]; lhs.SetComplex(~,result)} + case r.String: + var result *ast.BinaryExpr = ~"{lhs.String() + ~,expr} + result.Op = op + bind = ~"{lhs := ~,bind . Binds[index]; lhs.SetString(~,result)} + case r.Uint64: + var assign *ast.AssignStmt = ~"{~,bind . IntBinds[index] += ~,expr} + assign.Tok = opset + bind = assign + default: + var assign *ast.AssignStmt = ~"{*(*~,typ)(unsafe.Pointer(& ~,bind .IntBinds[index])) += ~,expr} + assign.Tok = opset + bind = assign + } + + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } +} + +:macro setplace_const(opnode, depth, typ ast.Node) ast.Node { + return fsetplace(opnode, depth, typ, ~'val, ~'v) +} + +:macro setplace_expr(opnode, depth, typ ast.Node) ast.Node { + return fsetplace(opnode, depth, typ, ~'{fun(env)}, ~'{fun(env).Convert(t)}) +} + +:macro setplace_depth_const(opnode, typ ast.Node) ast.Node { + return ~"{ + switch upn { + case 0: setplace_const; ~,opnode; 0; ~,typ + case 1: setplace_const; ~,opnode; 1; ~,typ + case 2: setplace_const; ~,opnode; 2; ~,typ + default: setplace_const; ~,opnode;-1; ~,typ + case c.Depth-1: setplace_const; ~,opnode;-2; ~,typ + } + } +} + +:macro setplace_depth_expr(opnode, typ ast.Node) ast.Node { + return ~"{ + switch upn { + case 0: setplace_expr; ~,opnode; 0; ~,typ + case 1: setplace_expr; ~,opnode; 1; ~,typ + case 2: setplace_expr; ~,opnode; 2; ~,typ + default: setplace_expr; ~,opnode;-1; ~,typ + case c.Depth-1: setplace_expr; ~,opnode;-2; ~,typ + } + } +} + +:func list_types(typelist []ast.Stmt) []ast.Node { + rets := make([]ast.Node, 0, len(typelist)) + for _, typ := range typelist { + t := EvalType(typ) + if t == nil { + rets = append(rets, ~'nil) + } else if t.Kind() == r.Int { + rets = append(rets, ~'int, ~'int8, ~'int16, ~'int32, ~'int64) + } else if t.Kind() == r.Uint { + rets = append(rets, ~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr) + } else if t.Kind() == r.Float64 { + rets = append(rets, ~'float32, ~'float64) + } else if t.Kind() == r.Complex128 { + rets = append(rets, ~'complex64, ~'complex128) + } else { + rets = append(rets, typ) + } + } + return rets +} + +:macro setplaces_depth_const(opnode, types ast.Node) ast.Node { + typelist := list_types(types.(*ast.BlockStmt).List) + caselist := make([]ast.Stmt, len(typelist)) + for i, typ := range typelist { + if EvalType(typ) == nil { + caselist[i] = ~"{default: c.Errorf(`invalid operator %s= on <%v>`, ~,opnode, t)} + } else { + kind := makekind(typ) + convertval := convertvalue1(typ, ~'{r.ValueOf(val)}) + caselist[i] = ~"{case ~,kind: val := ~,convertval; setplace_depth_const; ~,opnode; ~,typ} + } + } + return ~"{ + var ret Stmt + switch t.Kind() { + ~,@caselist + } + c.append(ret) + } +} + +:macro setplaces_depth_expr(opnode, types ast.Node) ast.Node { + typelist := list_types(types.(*ast.BlockStmt).List) + caselist := make([]ast.Stmt, len(typelist)) + for i, typ := range typelist { + if EvalType(typ) == nil { + caselist[i] = ~"{default: c.Errorf(`invalid operator %s= on <%v>`, ~,opnode, t)} + } else { + caselist[i] = ~"{~typecase func(*Env) ~,typ: setplace_depth_expr; ~,opnode; ~,typ} + } + } + return ~"{ + var ret Stmt + switch fun := fun.(type) { + ~,@caselist + } + c.append(ret) + } +} + +// varAddConst compiles 'variable += constant' +func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { + if isLiteralNumber(val, 0) || val == "" { + return + } + setplaces_depth_const; token.ADD; {int; uint; float64; complex128; string; nil} +} + +// varAddExpr compiles 'variable += expression' +func (c *Comp) varAddExpr(upn int, index int, t xr.Type, fun I) { + setplaces_depth_expr; token.ADD; {int; uint; float64; complex128; string; nil} +} + +// varSubConst compiles 'variable -= constant' +func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { + if isLiteralNumber(val, 0) { + return + } + setplaces_depth_const; token.SUB; {int; uint; float64; complex128; nil} +} + +// varSubExpr compiles 'variable -= expression' +func (c *Comp) varSubExpr(upn int, index int, t xr.Type, fun I) { + setplaces_depth_expr; token.SUB; {int; uint; float64; complex128; nil} +} + +// varMulConst compiles 'variable *= constant' +func (c *Comp) varMulConst(upn int, index int, t xr.Type, val I) { + if isLiteralNumber(val, 0) { + // variable *= 0 is equivalent to variable = 0 + c.varSetZero(upn, index, t) + return + } else if isLiteralNumber(val, 1) { + return + } + setplaces_depth_const; token.MUL; {int; uint; float64; complex128; nil} +} + +// varMulExpr compiles 'variable *= expression' +func (c *Comp) varMulExpr(upn int, index int, t xr.Type, fun I) { + setplaces_depth_expr; token.MUL; {int; uint; float64; complex128; nil} +} + +:macro place_quopow2(depth, typ ast.Node) ast.Node { + var t r.Type = EvalType(typ) + loop, bind := fgetplace(depth, typ) + + addr := ~"{(*~,typ)(unsafe.Pointer(& ~,bind .IntBinds[index]))} + + return ~"{ + y_1 := ~,typ(y - 1) // cannot overflow, y is the abs() value of a non-zero ~,typ + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + addr := ~,addr + n := *addr + if n < 0 { + n += y_1 + } + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + addr := ~,addr + n := *addr + if n < 0 { + n += y_1 + } + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + } +} + +:macro place_quopow2_u(depth, typ ast.Node) ast.Node { + var t r.Type = EvalType(typ) + loop, bind := fgetplace(depth, typ) + + if t.Kind() == r.Uint64 { + bind = ~"{~,bind . IntBinds[index]} + } else { + bind = ~"{*(*~,typ)(unsafe.Pointer(& ~,bind .IntBinds[index]))} + } + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind >>= shift + env.IP++ + return env.Code[env.IP], env + } + } +} + +:macro place_depth_quopow2(typ ast.Node) ast.Node { + return ~"{ + switch upn { + case 0: place_quopow2; 0; ~,typ + case 1: place_quopow2; 1; ~,typ + case 2: place_quopow2; 2; ~,typ + default: place_quopow2;-1; ~,typ + case c.Depth-1: place_quopow2;-2; ~,typ + } + } +} + +:macro place_depth_quopow2_u(typ ast.Node) ast.Node { + return ~"{ + switch upn { + case 0: place_quopow2_u; 0; ~,typ + case 1: place_quopow2_u; 1; ~,typ + case 2: place_quopow2_u; 2; ~,typ + default: place_quopow2_u;-1; ~,typ + case c.Depth-1: place_quopow2_u;-2; ~,typ + } + } +} + +// varQuoPow2 compiles 'variable /= constant-power-of-two' +func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, t) + return false + } else if isLiteralNumber(val, 1) { + return true // nothing to do + } + ypositive := true + yv := r.ValueOf(val) + var y uint64 + switch KindToCategory(yv.Kind()) { + case r.Int: + sy := yv.Int() + if sy < 0 { + ypositive = false + y = uint64(-sy) + } else { + y = uint64(sy) + } + case r.Uint: + y = yv.Uint() + default: + // floating point or complex division + return false + } + if !isPowerOfTwo(y) { + // division by multiplication and shift not implemented... + return false + } + // attention: xe / (2**n) and xe >> n have different truncation rules for negative xe: + // quotient / truncates toward zero + // right shift >> truncates toward negative infinity + // see quoPow2() in binary_ops.go for more details + shift := integerLen(y) - 1 + var ret Stmt + + switch t.Kind() { + case r.Int: {place_depth_quopow2; int} + case r.Int8: {place_depth_quopow2; int8} + case r.Int16: {place_depth_quopow2; int16} + case r.Int32: {place_depth_quopow2; int32} + case r.Int64: {place_depth_quopow2; int64} + case r.Uint: {place_depth_quopow2_u; uint} + case r.Uint8: {place_depth_quopow2_u; uint8} + case r.Uint16: {place_depth_quopow2_u; uint16} + case r.Uint32: {place_depth_quopow2_u; uint32} + case r.Uint64: {place_depth_quopow2_u; uint64} + case r.Uintptr: {place_depth_quopow2_u; uintptr} + } + if ret == nil { + return false + } + c.append(ret) + return true +} + +// varQuoConst compiles 'variable /= constant' +func (c *Comp) varQuoConst(upn int, index int, t xr.Type, val I) { + if c.varQuoPow2(upn, index, t, val) { + return + } + setplaces_depth_const; token.QUO; {int; uint; float64; complex128; nil} +} + +// varQuoExpr compiles 'variable /= expression' +func (c *Comp) varQuoExpr(upn int, index int, t xr.Type, fun I) { + setplaces_depth_expr; token.QUO; {int; uint; float64; complex128; nil} +} + +// varRemConst compiles 'variable %= constant' +func (c *Comp) varRemConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, t) + return + } else if isLiteralNumber(val, 1) { + // variable %= 1 is equivalent to variable = 0 + c.varSetZero(upn, index, t) + return + } + } + setplaces_depth_const; token.REM; {int; uint; nil} +} + +// varRemExpr compiles 'variable %= expression' +func (c *Comp) varRemExpr(upn int, index int, t xr.Type, fun I) { + setplaces_depth_expr; token.REM; {int; uint; nil} +} + +// varAndConst compiles 'variable &= constant' +func (c *Comp) varAndConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { + return + } else if isLiteralNumber(val, 0) { + // variable &= 0 is equivalent to variable = 0 + c.varSetZero(upn, index, t) + return + } + } + setplaces_depth_const; token.AND; {int; uint; nil} +} + +// varAndExpr compiles 'variable &= expression' +func (c *Comp) varAndExpr(upn int, index int, t xr.Type, fun I) { + setplaces_depth_expr; token.AND; {int; uint; nil} +} + +// varOrConst compiles 'variable |= constant' +func (c *Comp) varOrConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + return + } + setplaces_depth_const; token.OR; {int; uint; nil} +} + +// varOrExpr compiles 'variable |= expression' +func (c *Comp) varOrExpr(upn int, index int, t xr.Type, fun I) { + setplaces_depth_expr; token.OR; {int; uint; nil} +} + +// varXorConst compiles 'variable ^= constant' +func (c *Comp) varXorConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + return + } + setplaces_depth_const; token.XOR; {int; uint; nil} +} + +// varXorExpr compiles 'variable ^= expression' +func (c *Comp) varXorExpr(upn int, index int, t xr.Type, fun I) { + setplaces_depth_expr; token.XOR; {int; uint; nil} +} + +// varAndnotConst compiles 'variable &^= constant' +func (c *Comp) varAndnotConst(upn int, index int, t xr.Type, val I) { + if IsCategory(t.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { + // variable &^= -1 is equivalent to variable = 0 + c.varSetZero(upn, index, t) + return + } else if isLiteralNumber(val, 0) { + return + } + } + setplaces_depth_const; token.AND_NOT; {int; uint; nil} +} + +// varAndnotExpr compiles 'variable &^= expression' +func (c *Comp) varAndnotExpr(upn int, index int, t xr.Type, fun I) { + setplaces_depth_expr; token.AND_NOT; {int; uint; nil} +} + + +// SetVar compiles an assignment to a variable: +// 'variable op constant' and 'variable op expression' +func (c *Comp) SetVar(va *Var, op token.Token, init *Expr) { + t := va.Type + var ok, shift bool + switch op { + case token.SHL, token.SHL_ASSIGN, token.SHR, token.SHR_ASSIGN: + shift = true + if init.Untyped() { + init.ConstTo(c.TypeOfUint64()) + ok = true + } else { + ok = init.Type != nil && KindToCategory(init.Type.Kind()) == r.Uint + } + default: + if init.Const() { + init.ConstTo(t) + ok = true + } else if init.Type == nil { + ok = op == token.ASSIGN && IsNillableKind(t.Kind()) + } else { + ok = init.Type.AssignableTo(t) + } + } + if !ok { + c.Errorf("incompatible types in assignment: %v %s %v", t, op, init.Type) + return + } + class := va.Desc.Class() + if class != VarBind && class != IntBind { + c.Errorf("invalid operator %s on %v", op, class) + return + } + upn := va.Upn + index := va.Desc.Index() + if index == NoIndex { + if op != token.ASSIGN { + c.Errorf("invalid operator %s on _", op) + } + if !init.Const() { + // assigning an expression to _ + // only keep the expression side effects + c.append(init.AsStmt()) + } + return + } + if init.Const() { + rt := t.ReflectType() + val := init.Value + v := r.ValueOf(val) + if v == None || v == Nil { + v = r.Zero(rt) + val = v.Interface() + } else if v.Type() != rt && !shift { + v = v.Convert(rt) + val = v.Interface() + } + switch op { + case token.ASSIGN: + c.varSetConst(upn, index, t, val) + case token.ADD, token.ADD_ASSIGN: + c.varAddConst(upn, index, t, val) + case token.SUB, token.SUB_ASSIGN: + c.varSubConst(upn, index, t, val) + case token.MUL, token.MUL_ASSIGN: + c.varMulConst(upn, index, t, val) + case token.QUO, token.QUO_ASSIGN: + c.varQuoConst(upn, index, t, val) + case token.REM, token.REM_ASSIGN: + c.varRemConst(upn, index, t, val) + case token.AND, token.AND_ASSIGN: + c.varAndConst(upn, index, t, val) + case token.OR, token.OR_ASSIGN: + c.varOrConst(upn, index, t, val) + case token.XOR, token.XOR_ASSIGN: + c.varXorConst(upn, index, t, val) + case token.SHL, token.SHL_ASSIGN: + c.varShlConst(upn, index, t, val) + case token.SHR, token.SHR_ASSIGN: + c.varShrConst(upn, index, t, val) + case token.AND_NOT, token.AND_NOT_ASSIGN: + c.varAndnotConst(upn, index, t, val) + default: + c.Errorf("invalid operator %s", op) + } + } else { + fun := init.Fun + switch op { + case token.ASSIGN: + c.varSetExpr(upn, index, t, init) + case token.ADD, token.ADD_ASSIGN: + c.varAddExpr(upn, index, t, fun) + case token.SUB, token.SUB_ASSIGN: + c.varSubExpr(upn, index, t, fun) + case token.MUL, token.MUL_ASSIGN: + c.varMulExpr(upn, index, t, fun) + case token.QUO, token.QUO_ASSIGN: + c.varQuoExpr(upn, index, t, fun) + case token.REM, token.REM_ASSIGN: + c.varRemExpr(upn, index, t, fun) + case token.AND, token.AND_ASSIGN: + c.varAndExpr(upn, index, t, fun) + case token.OR, token.OR_ASSIGN: + c.varOrExpr(upn, index, t, fun) + case token.XOR, token.XOR_ASSIGN: + c.varXorExpr(upn, index, t, fun) + case token.SHL, token.SHL_ASSIGN: + c.varShlExpr(upn, index, t, fun) + case token.SHR, token.SHR_ASSIGN: + c.varShrExpr(upn, index, t, fun) + case token.AND_NOT, token.AND_NOT_ASSIGN: + c.varAndnotExpr(upn, index, t, fun) + default: + c.Errorf("invalid operator %s", op) + } + } +} + + diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_set.go b/vendor/github.com/cosmos72/gomacro/fast/var_set.go new file mode 100644 index 0000000..42a632d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/var_set.go @@ -0,0 +1,2718 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * var_set.go + * + * Created on Apr 09, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) varSetZero(upn int, index int, t xr.Type) { + zero := xr.Zero(t).Interface() + c.varSetConst(upn, index, t, zero) +} +func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { + v := r.ValueOf(val) + rt := t.ReflectType() + if ValueType(v) == nil { + v = r.Zero(rt) + } else { + v = v.Convert(rt) + } + + var ret func(env *Env) (Stmt, *Env) + switch upn { + case 0: + switch t.Kind() { + case r.Bool: + + { + val := v.Bool() + + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + { + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + { + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + val := + + uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + val := + + uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint16: + { + val := + + uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint32: + { + val := + + uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + val := + + uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + val := + + float32(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + val := + + complex64(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetComplex(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + val := v.String() + + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetString(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].Set(v, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + switch t.Kind() { + case r.Bool: + + { + val := v.Bool() + + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + { + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + { + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + val := + + uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + val := + + uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint16: + { + val := + + uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint32: + { + val := + + uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + val := + + uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + val := + + float32(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + val := + + complex64(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetComplex(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + val := v.String() + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetString(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].Set(v, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + switch t.Kind() { + case r.Bool: + + { + val := v.Bool() + + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + { + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + { + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + val := + + uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + val := + + uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint16: + { + val := + + uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint32: + { + val := + + uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + val := + + uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + val := + + float32(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + val := + + complex64(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetComplex(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + val := v.String() + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetString(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].Set(v, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + switch t.Kind() { + case r.Bool: + + { + val := v.Bool() + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*bool)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + { + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int8)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + { + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int16)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int32)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int64)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + val := + + uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uint)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + val := + + uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uint8)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint16: + { + val := + + uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uint16)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint32: + { + val := + + uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uint32)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + val := + + uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uintptr)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + val := + + float32(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*float32)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*float64)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + val := + + complex64(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*complex64)(unsafe.Pointer(&o. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetComplex(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + val := v.String() + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetString(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].Set(v, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + switch t.Kind() { + case r.Bool: + + { + val := v.Bool() + + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + val := int(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + { + val := int8(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + { + val := int16(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + val := int32(v.Int()) + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + val := v.Int() + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + val := + + uint(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + val := + + uint8(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint16: + { + val := + + uint16(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint32: + { + val := + + uint32(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + val := v.Uint() + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + val := + + uintptr(v.Uint()) + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + val := + + float32(v.Float()) + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + val := v.Float() + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + val := + + complex64(v.Complex()) + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + val := v.Complex() + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetComplex(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + val := v.String() + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetString(val, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].Set(v, + ) + + env.IP++ + return env.Code[env.IP], env + } + } + } + c.append(ret) +} +func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { + rt := t.ReflectType() + fun := e.Fun + var ret func(env *Env) (Stmt, *Env) + switch upn { + case 0: + switch t.Kind() { + case r.Bool: + + { + fun := fun.(func(*Env) bool) + + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + fun := fun.(func(*Env) int) + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + + { + fun := fun.(func(*Env) int8) + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + + { + fun := fun.(func(*Env) int16) + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + fun := fun.(func(*Env) int32) + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + fun := fun.(func(*Env) int64) + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + fun := fun.(func(*Env) uint) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + fun := fun.(func(*Env) uint8) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + { + fun := fun.(func(*Env) uint16) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + { + fun := fun.(func(*Env) uint32) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + fun := fun.(func(*Env) uint64) + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + fun := fun.(func(*Env) uintptr) + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + fun := fun.(func(*Env) float32) + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + fun := fun.(func(*Env) float64) + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + fun := fun.(func(*Env) complex64) + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + fun := fun.(func(*Env) complex128) + + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetComplex(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + fun := fun.(func(*Env) string) + + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetString(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + { + fun := e.AsX1() + + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].Set(fun(env).Convert(rt), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + switch t.Kind() { + case r.Bool: + + { + fun := fun.(func(*Env) bool) + + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + fun := fun.(func(*Env) int) + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + + { + fun := fun.(func(*Env) int8) + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + + { + fun := fun.(func(*Env) int16) + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + fun := fun.(func(*Env) int32) + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + fun := fun.(func(*Env) int64) + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + fun := fun.(func(*Env) uint) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + fun := fun.(func(*Env) uint8) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + { + fun := fun.(func(*Env) uint16) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + { + fun := fun.(func(*Env) uint32) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + fun := fun.(func(*Env) uint64) + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + fun := fun.(func(*Env) uintptr) + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + fun := fun.(func(*Env) float32) + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + fun := fun.(func(*Env) float64) + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + fun := fun.(func(*Env) complex64) + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + fun := fun.(func(*Env) complex128) + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetComplex(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + fun := fun.(func(*Env) string) + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetString(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + { + fun := e.AsX1() + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].Set(fun(env).Convert(rt), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + switch t.Kind() { + case r.Bool: + + { + fun := fun.(func(*Env) bool) + + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + fun := fun.(func(*Env) int) + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + + { + fun := fun.(func(*Env) int8) + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + + { + fun := fun.(func(*Env) int16) + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + fun := fun.(func(*Env) int32) + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + fun := fun.(func(*Env) int64) + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + fun := fun.(func(*Env) uint) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + fun := fun.(func(*Env) uint8) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + { + fun := fun.(func(*Env) uint16) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + { + fun := fun.(func(*Env) uint32) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + fun := fun.(func(*Env) uint64) + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + fun := fun.(func(*Env) uintptr) + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + fun := fun.(func(*Env) float32) + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + fun := fun.(func(*Env) float64) + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + fun := fun.(func(*Env) complex64) + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + fun := fun.(func(*Env) complex128) + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetComplex(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + fun := fun.(func(*Env) string) + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetString(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + { + fun := e.AsX1() + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].Set(fun(env).Convert(rt), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + switch t.Kind() { + case r.Bool: + + { + fun := fun.(func(*Env) bool) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*bool)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + fun := fun.(func(*Env) int) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + + { + fun := fun.(func(*Env) int8) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int8)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + + { + fun := fun.(func(*Env) int16) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int16)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + fun := fun.(func(*Env) int32) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int32)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + fun := fun.(func(*Env) int64) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*int64)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + fun := fun.(func(*Env) uint) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uint)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + fun := fun.(func(*Env) uint8) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uint8)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + { + fun := fun.(func(*Env) uint16) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uint16)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + { + fun := fun.(func(*Env) uint32) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uint32)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + fun := fun.(func(*Env) uint64) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + fun := fun.(func(*Env) uintptr) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*uintptr)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + fun := fun.(func(*Env) float32) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*float32)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + fun := fun.(func(*Env) float64) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*float64)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + fun := fun.(func(*Env) complex64) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + *(*complex64)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + fun := fun.(func(*Env) complex128) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetComplex(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + fun := fun.(func(*Env) string) + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetString(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + { + fun := e.AsX1() + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].Set(fun(env).Convert(rt), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + switch t.Kind() { + case r.Bool: + + { + fun := fun.(func(*Env) bool) + + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int: + + { + fun := fun.(func(*Env) int) + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + + { + fun := fun.(func(*Env) int8) + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + + { + fun := fun.(func(*Env) int16) + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + { + fun := fun.(func(*Env) int32) + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + { + fun := fun.(func(*Env) int64) + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + { + fun := fun.(func(*Env) uint) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + { + fun := fun.(func(*Env) uint8) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + { + fun := fun.(func(*Env) uint16) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + { + fun := fun.(func(*Env) uint32) + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + { + fun := fun.(func(*Env) uint64) + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + { + fun := fun.(func(*Env) uintptr) + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float32: + { + fun := fun.(func(*Env) float32) + + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Float64: + { + fun := fun.(func(*Env) float64) + + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex64: + { + fun := fun.(func(*Env) complex64) + + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Complex128: + { + fun := fun.(func(*Env) complex128) + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetComplex(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + case r.String: + { + fun := fun.(func(*Env) string) + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetString(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + default: + { + fun := e.AsX1() + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].Set(fun(env).Convert(rt), + ) + + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + c.append(ret) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_set.gomacro b/vendor/github.com/cosmos72/gomacro/fast/var_set.gomacro new file mode 100644 index 0000000..1be12d0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/var_set.gomacro @@ -0,0 +1,251 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * var_set.go + * + * Created on Apr 09, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + "go/ast" + r "reflect" +) + +:func fsetplace(depth, typ, expr, exprv ast.Node) ast.Node { + // the return type of Eval() and EvalType() varies. better check early. + upn := Eval(depth).(int) + var t r.Type = EvalType(typ) + + var loop, bind ast.Node + + if upn >= 0 { + bind = ~'{env} + for i := 0; i < upn; i++ { + bind = ~"{~,bind . Outer} + } + } else if upn == -2 { + bind = ~'{env.ThreadGlobals.FileEnv} + } else if upn == -3 { + bind = ~'{env.ThreadGlobals.TopEnv} + } else { + loop = ~'{ + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + } + bind = ~'o + } + + if t == nil { + bind = ~"{~,bind . Binds[index] .Set(~,exprv)} + } else { + switch t.Kind() { + case r.Complex128: + bind = ~"{~,bind . Binds[index] .SetComplex(~,expr)} + case r.String: + bind = ~"{~,bind . Binds[index] .SetString(~,expr)} + case r.Uint64: + bind = ~"{~,bind . IntBinds[index] = ~,expr} + default: + typename := &ast.Ident{Name: t.Name()} + bind = ~"{*(*~,typename)(unsafe.Pointer(& ~,bind .IntBinds[index])) = ~,expr} + } + } + + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } +} + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func convertconst(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + return val + } + + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +:macro setplace_const(depth, typ ast.Node) ast.Node { + ret := fsetplace(depth, typ, ~'val, ~'v) + if EvalType(typ) == nil { + return ret + } + convert := convertconst(typ, ~'v) + return ~"{ + val := ~,convert + ~,ret + } +} + +:macro setplace_expr(depth, typ ast.Node) ast.Node { + ret := fsetplace(depth, typ, ~'{fun(env)}, ~'{fun(env).Convert(rt)}) + if EvalType(typ) == nil { + return ~"{ + fun := e.AsX1() // we need the exact type! + ~,ret + } + } + return ~"{ + fun := fun.(func(*Env) ~,typ) + ~,ret + } +} + +:macro setplaces_const(depth ast.Node) ast.Node { + return ~"{ + switch t.Kind() { + case r.Bool: setplace_const; ~,depth; bool; + case r.Int: setplace_const; ~,depth; int; + case r.Int8: setplace_const; ~,depth; int8; + case r.Int16: setplace_const; ~,depth; int16; + case r.Int32: setplace_const; ~,depth; int32; + case r.Int64: setplace_const; ~,depth; int64; + case r.Uint: setplace_const; ~,depth; uint; + case r.Uint8: setplace_const; ~,depth; uint8; + case r.Uint16: setplace_const; ~,depth; uint16; + case r.Uint32: setplace_const; ~,depth; uint32; + case r.Uint64: setplace_const; ~,depth; uint64; + case r.Uintptr: setplace_const; ~,depth; uintptr; + case r.Float32: setplace_const; ~,depth; float32; + case r.Float64: setplace_const; ~,depth; float64; + case r.Complex64: setplace_const; ~,depth; complex64; + case r.Complex128: setplace_const; ~,depth; complex128; + case r.String: setplace_const; ~,depth; string; + default: setplace_const; ~,depth; nil; + } + } +} + +:macro setplaces_expr(depth ast.Node) ast.Node { + return ~"{ + switch t.Kind() { + case r.Bool: setplace_expr; ~,depth; bool; + case r.Int: setplace_expr; ~,depth; int; + case r.Int8: setplace_expr; ~,depth; int8; + case r.Int16: setplace_expr; ~,depth; int16; + case r.Int32: setplace_expr; ~,depth; int32; + case r.Int64: setplace_expr; ~,depth; int64; + case r.Uint: setplace_expr; ~,depth; uint; + case r.Uint8: setplace_expr; ~,depth; uint8; + case r.Uint16: setplace_expr; ~,depth; uint16; + case r.Uint32: setplace_expr; ~,depth; uint32; + case r.Uint64: setplace_expr; ~,depth; uint64; + case r.Uintptr: setplace_expr; ~,depth; uintptr; + case r.Float32: setplace_expr; ~,depth; float32; + case r.Float64: setplace_expr; ~,depth; float64; + case r.Complex64: setplace_expr; ~,depth; complex64; + case r.Complex128: setplace_expr; ~,depth; complex128; + case r.String: setplace_expr; ~,depth; string; + default: setplace_expr; ~,depth; nil; + } + } +} + +// varSetZero compiles 'variable = 0' +func (c *Comp) varSetZero(upn int, index int, t xr.Type) { + zero := xr.Zero(t).Interface() + c.varSetConst(upn, index, t, zero) +} + +// varSetConst compiles 'name = constant' +func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { + v := r.ValueOf(val) + rt := t.ReflectType() + if ValueType(v) == nil { + v = r.Zero(rt) + } else { + v = v.Convert(rt) + } + var ret func(env *Env) (Stmt, *Env) + switch upn { + case 0: setplaces_const; 0 + case 1: setplaces_const; 1 + case 2: setplaces_const; 2 + default: setplaces_const; -1 + case c.Depth-1: setplaces_const; -2 + } + c.append(ret) +} + +// varSetExpr compiles 'name = expression' +func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { + rt := t.ReflectType() + fun := e.Fun + var ret func(env *Env) (Stmt, *Env) + switch upn { + case 0: setplaces_expr; 0 + case 1: setplaces_expr; 1 + case 2: setplaces_expr; 2 + default: setplaces_expr; -1 + case c.Depth-1: setplaces_expr; -2 + } + c.append(ret) +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_set_value.go b/vendor/github.com/cosmos72/gomacro/fast/var_set_value.go new file mode 100644 index 0000000..f105f5f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/var_set_value.go @@ -0,0 +1,514 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * var_setter.go + * + * Created on Apr 09, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +// varSetValue compiles 'name = value' where value is a reflect.Value passed at runtime. +// Used to assign variables with the result of multi-valued expressions, +// and to implement multiple assignment var1, var2... = expr1, expr2... +func (c *Comp) varSetValue(va *Var) func(*Env, r.Value) { + t := va.Type + rt := t.ReflectType() + upn := va.Upn + desc := va.Desc + var ret func(env *Env, v r.Value) + + switch desc.Class() { + default: + c.Errorf("cannot assign to %v %s", desc.Class(), va.Name) + return nil + case VarBind: + index := desc.Index() + if index == NoIndex { + // assigning a value to _ has no effect at all + return nil + } + zero := xr.Zero(t) + switch upn { + case 0: + switch t.Kind() { + case r.Complex128: + ret = func(env *Env, v r.Value) { + env.Binds[index].SetComplex(v.Complex()) + } + case r.String: + ret = func(env *Env, v r.Value) { + if v.Kind() != r.String { + v = v.Convert(TypeOfString) + } + env.Binds[index].SetString(v.String()) + } + case r.Chan, r.Interface, r.Map, r.Ptr, r.Slice: + ret = func(env *Env, v r.Value) { + if v == Nil || v == None { + v = zero + } else if v.Type() != rt { + v = v.Convert(rt) + } + env.Binds[index].Set(v) + } + default: + ret = func(env *Env, v r.Value) { + if v.Type() != rt { + v = v.Convert(rt) + } + env.Binds[index].Set(v) + } + } + case 1: + switch t.Kind() { + case r.Complex128: + ret = func(env *Env, v r.Value) { + env.Outer.Binds[index].SetComplex(v.Complex()) + } + case r.String: + ret = func(env *Env, v r.Value) { + if v.Kind() != r.String { + v = v.Convert(TypeOfString) + } + env.Outer.Binds[index].SetString(v.String()) + } + case r.Chan, r.Interface, r.Map, r.Ptr, r.Slice: + ret = func(env *Env, v r.Value) { + if v == Nil || v == None { + v = zero + } else if v.Type() != rt { + v = v.Convert(rt) + } + env.Outer.Binds[index].Set(v) + } + default: + ret = func(env *Env, v r.Value) { + if v.Type() != rt { + v = v.Convert(rt) + } + env.Outer.Binds[index].Set(v) + } + } + case 2: + switch t.Kind() { + case r.Complex128: + ret = func(env *Env, v r.Value) { + env.Outer.Outer.Binds[index].SetComplex(v.Complex()) + } + case r.String: + ret = func(env *Env, v r.Value) { + if v.Kind() != r.String { + v = v.Convert(TypeOfString) + } + env.Outer.Outer.Binds[index].SetString(v.String()) + } + case r.Chan, r.Interface, r.Map, r.Ptr, r.Slice: + ret = func(env *Env, v r.Value) { + if v == Nil || v == None { + v = zero + } else if v.Type() != rt { + v = v.Convert(rt) + } + env.Outer.Outer.Binds[index].Set(v) + } + default: + ret = func(env *Env, v r.Value) { + if v.Type() != rt { + v = v.Convert(rt) + } + env.Outer.Outer.Binds[index].Set(v) + } + } + default: + switch t.Kind() { + case r.Complex128: + ret = func(env *Env, v r.Value) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + o.Binds[index].SetComplex(v.Complex()) + } + case r.String: + ret = func(env *Env, v r.Value) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + if v.Kind() != r.String { + v = v.Convert(TypeOfString) + } + o.Binds[index].SetString(v.String()) + } + case r.Chan, r.Interface, r.Map, r.Ptr, r.Slice: + ret = func(env *Env, v r.Value) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + if v == Nil || v == None { + v = zero + } else if v.Type() != rt { + v = v.Convert(rt) + } + o.Binds[index].Set(v) + } + default: + ret = func(env *Env, v r.Value) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + if v.Type() != rt { + v = v.Convert(rt) + } + o.Binds[index].Set(v) + } + } + } + case IntBind: + index := desc.Index() + if index == NoIndex { + // assigning a value to _ has no effect at all + return nil + } + switch upn { + case 0: + switch t.Kind() { + case r.Bool: + ret = func(env *Env, v r.Value) { + *(*bool)(unsafe.Pointer(&env.IntBinds[index])) = v.Bool() + } + case r.Int: + ret = func(env *Env, v r.Value) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) = int(v.Int()) + } + case r.Int8: + ret = func(env *Env, v r.Value) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) = int8(v.Int()) + } + case r.Int16: + ret = func(env *Env, v r.Value) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) = int16(v.Int()) + } + case r.Int32: + ret = func(env *Env, v r.Value) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) = int32(v.Int()) + } + case r.Int64: + ret = func(env *Env, v r.Value) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) = v.Int() + } + case r.Uint: + ret = func(env *Env, v r.Value) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) = uint(v.Uint()) + } + case r.Uint8: + ret = func(env *Env, v r.Value) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) = uint8(v.Uint()) + } + case r.Uint16: + ret = func(env *Env, v r.Value) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) = uint16(v.Uint()) + } + case r.Uint32: + ret = func(env *Env, v r.Value) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) = uint32(v.Uint()) + } + case r.Uint64: + ret = func(env *Env, v r.Value) { + env.IntBinds[index] = v.Uint() + } + case r.Uintptr: + ret = func(env *Env, v r.Value) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) = uintptr(v.Uint()) + } + case r.Float32: + ret = func(env *Env, v r.Value) { + *(*float32)(unsafe.Pointer(&env.IntBinds[index])) = float32(v.Float()) + } + case r.Float64: + ret = func(env *Env, v r.Value) { + *(*float64)(unsafe.Pointer(&env.IntBinds[index])) = v.Float() + } + case r.Complex64: + ret = func(env *Env, v r.Value) { + *(*complex64)(unsafe.Pointer(&env.IntBinds[index])) = complex64(v.Complex()) + } + default: + c.Errorf("unsupported type, cannot use for optimized assignment: %s <%v>", va.Name, t) + return nil + } + case 1: + switch t.Kind() { + case r.Bool: + ret = func(env *Env, v r.Value) { + *(*bool)(unsafe.Pointer(&env.Outer.IntBinds[index])) = v.Bool() + } + case r.Int: + ret = func(env *Env, v r.Value) { + *(*int)(unsafe.Pointer(&env.Outer.IntBinds[index])) = int(v.Int()) + } + case r.Int8: + ret = func(env *Env, v r.Value) { + *(*int8)(unsafe.Pointer(&env.Outer.IntBinds[index])) = int8(v.Int()) + } + case r.Int16: + ret = func(env *Env, v r.Value) { + *(*int16)(unsafe.Pointer(&env.Outer.IntBinds[index])) = int16(v.Int()) + } + case r.Int32: + ret = func(env *Env, v r.Value) { + *(*int32)(unsafe.Pointer(&env.Outer.IntBinds[index])) = int32(v.Int()) + } + case r.Int64: + ret = func(env *Env, v r.Value) { + *(*int64)(unsafe.Pointer(&env.Outer.IntBinds[index])) = v.Int() + } + case r.Uint: + ret = func(env *Env, v r.Value) { + *(*uint)(unsafe.Pointer(&env.Outer.IntBinds[index])) = uint(v.Uint()) + } + case r.Uint8: + ret = func(env *Env, v r.Value) { + *(*uint8)(unsafe.Pointer(&env.Outer.IntBinds[index])) = uint8(v.Uint()) + } + case r.Uint16: + ret = func(env *Env, v r.Value) { + *(*uint16)(unsafe.Pointer(&env.Outer.IntBinds[index])) = uint16(v.Uint()) + } + case r.Uint32: + ret = func(env *Env, v r.Value) { + *(*uint32)(unsafe.Pointer(&env.Outer.IntBinds[index])) = uint32(v.Uint()) + } + case r.Uint64: + ret = func(env *Env, v r.Value) { + env.Outer.IntBinds[index] = v.Uint() + } + case r.Uintptr: + ret = func(env *Env, v r.Value) { + *(*uintptr)(unsafe.Pointer(&env.Outer.IntBinds[index])) = uintptr(v.Uint()) + } + case r.Float32: + ret = func(env *Env, v r.Value) { + *(*float32)(unsafe.Pointer(&env.Outer.IntBinds[index])) = float32(v.Float()) + } + case r.Float64: + ret = func(env *Env, v r.Value) { + *(*float64)(unsafe.Pointer(&env.Outer.IntBinds[index])) = v.Float() + } + case r.Complex64: + ret = func(env *Env, v r.Value) { + *(*complex64)(unsafe.Pointer(&env.Outer.IntBinds[index])) = complex64(v.Complex()) + } + default: + c.Errorf("unsupported type, cannot use for optimized assignment: %s <%v>", va.Name, t) + return nil + } + case 2: + switch t.Kind() { + case r.Bool: + ret = func(env *Env, v r.Value) { + *(*bool)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = v.Bool() + } + case r.Int: + ret = func(env *Env, v r.Value) { + *(*int)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = int(v.Int()) + } + case r.Int8: + ret = func(env *Env, v r.Value) { + *(*int8)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = int8(v.Int()) + } + case r.Int16: + ret = func(env *Env, v r.Value) { + *(*int16)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = int16(v.Int()) + } + case r.Int32: + ret = func(env *Env, v r.Value) { + *(*int32)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = int32(v.Int()) + } + case r.Int64: + ret = func(env *Env, v r.Value) { + *(*int64)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = v.Int() + } + case r.Uint: + ret = func(env *Env, v r.Value) { + *(*uint)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = uint(v.Uint()) + } + case r.Uint8: + ret = func(env *Env, v r.Value) { + *(*uint8)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = uint8(v.Uint()) + } + case r.Uint16: + ret = func(env *Env, v r.Value) { + *(*uint16)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = uint16(v.Uint()) + } + case r.Uint32: + ret = func(env *Env, v r.Value) { + *(*uint32)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = uint32(v.Uint()) + } + case r.Uint64: + ret = func(env *Env, v r.Value) { + env.Outer.Outer.IntBinds[index] = v.Uint() + } + case r.Uintptr: + ret = func(env *Env, v r.Value) { + *(*uintptr)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = uintptr(v.Uint()) + } + case r.Float32: + ret = func(env *Env, v r.Value) { + *(*float32)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = float32(v.Float()) + } + case r.Float64: + ret = func(env *Env, v r.Value) { + *(*float64)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = v.Float() + } + case r.Complex64: + ret = func(env *Env, v r.Value) { + *(*complex64)(unsafe.Pointer(&env.Outer.Outer.IntBinds[index])) = complex64(v.Complex()) + } + default: + c.Errorf("unsupported type, cannot use for optimized assignment: %s <%v>", va.Name, t) + return nil + } + default: + switch t.Kind() { + case r.Bool: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*bool)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = v.Bool() + } + case r.Int: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*int)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = int(v.Int()) + } + case r.Int8: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*int8)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = int8(v.Int()) + } + case r.Int16: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*int16)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = int16(v.Int()) + } + case r.Int32: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*int32)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = int32(v.Int()) + } + case r.Int64: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*int64)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = v.Int() + } + case r.Uint: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*uint)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = uint(v.Uint()) + } + case r.Uint8: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*uint8)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = uint8(v.Uint()) + } + case r.Uint16: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*uint16)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = uint16(v.Uint()) + } + case r.Uint32: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*uint32)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = uint32(v.Uint()) + } + case r.Uint64: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + env.Outer.Outer.Outer.IntBinds[index] = v.Uint() + } + case r.Uintptr: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*uintptr)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = uintptr(v.Uint()) + } + case r.Float32: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*float32)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = float32(v.Float()) + } + case r.Float64: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*float64)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = v.Float() + } + case r.Complex64: + ret = func(env *Env, v r.Value) { + for i := 3; i < upn; i++ { + env = env.Outer + } + *(*complex64)(unsafe.Pointer(&env.Outer.Outer.Outer.IntBinds[index])) = complex64(v.Complex()) + } + default: + c.Errorf("unsupported type, cannot use for optimized assignment: %s <%v>", va.Name, t) + return nil + } + } + } + return ret +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_shifts.go b/vendor/github.com/cosmos72/gomacro/fast/var_shifts.go new file mode 100644 index 0000000..8cb8daa --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/var_shifts.go @@ -0,0 +1,2506 @@ +// ------------------------------------------------------------- +// DO NOT EDIT! this file was generated automatically by gomacro +// Any change will be lost when the file is re-generated +// ------------------------------------------------------------- + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * var_shifts.go + * + * Created on May 17, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +func (c *Comp) varShlConst(upn int, index int, t xr.Type, val I) { + t2 := r.TypeOf(val) + if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) + } + + if isLiteralNumber(val, 0) { + return + } + + { + val := r.ValueOf(val).Uint() + var ret Stmt + switch t.Kind() { + case r.Int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= val + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) + + } + c.append(ret) + } +} +func (c *Comp) varShlExpr(upn int, index int, t xr.Type, function I) { + t2 := funTypeOut(function) + if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) + } + + fun := asFunUint8(function) + + { + var ret Stmt + switch t.Kind() { + case r.Int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) <<= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) + + } + c.append(ret) + } +} +func (c *Comp) varShrConst(upn int, index int, t xr.Type, val I) { + t2 := r.TypeOf(val) + if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) + } + + if isLiteralNumber(val, 0) { + return + } + + { + val := r.ValueOf(val).Uint() + var ret Stmt + switch t.Kind() { + case r.Int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= val + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) + + } + c.append(ret) + } +} +func (c *Comp) varShrExpr(upn int, index int, t xr.Type, function I) { + t2 := funTypeOut(function) + if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) + } + + fun := asFunUint8(function) + + { + var ret Stmt + switch t.Kind() { + case r.Int: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Int64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + case r.Uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) >>= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) + + } + c.append(ret) + } +} +func asFunUint8(fun I) func(*Env) uint8 { + var f func(*Env) uint8 + switch fun := fun.(type) { + case func(*Env) uint: + return func(env *Env) uint8 { + val := fun(env) + if val > 255 { + val = 255 + } + return uint8(val) + } + case func(*Env) uint8: + f = fun + case func(*Env) uint16: + return func(env *Env) uint8 { + val := fun(env) + if val > 255 { + val = 255 + } + return uint8(val) + } + case func(*Env) uint32: + return func(env *Env) uint8 { + val := fun(env) + if val > 255 { + val = 255 + } + return uint8(val) + } + + case func(*Env) uint64: + return func(env *Env) uint8 { + val := fun(env) + if val > 255 { + val = 255 + } + return uint8(val) + } + + case func(*Env) uintptr: + return func(env *Env) uint8 { + val := fun(env) + if val > 255 { + val = 255 + } + return uint8(val) + } + + } + return f +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_shifts.gomacro b/vendor/github.com/cosmos72/gomacro/fast/var_shifts.gomacro new file mode 100644 index 0000000..4dd8cde --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/var_shifts.gomacro @@ -0,0 +1,360 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * var_shifts.go + * + * Created on May 17, 2017 + * Author Massimiliano Ghilardi + */ + +package fast + +import ( + "go/token" + r "reflect" + "unsafe" + + . "github.com/cosmos72/gomacro/base" + xr "github.com/cosmos72/gomacro/xreflect" +) + +:import ( + "fmt" + "go/ast" + "go/token" + r "reflect" +) + +:func upcasefirstbyte(str string) string { + if len(str) > 0 && str[0] >= 'a' && str[0] <= 'z' { + bytes := []byte(str) + bytes[0] -= 'a' - 'A' + return string(bytes) + } + return str +} + +:func makekind(typ ast.Node) ast.Node { + t := EvalType(typ) + if t == nil { + return nil + } + // go/ast.SelectorExpr requires the foo in r.foo to be an *ast.Ident, cannot unquote there + kind := ~"{r . foo} + kind.Sel = &ast.Ident{Name: upcasefirstbyte(t.Name())} + return kind +} + + +:func convertvalue1(typ, val ast.Node) ast.Node { + var t r.Type = EvalType(typ) + if t == nil { + return val + } + // unwrap the result + tname := t.Name() + // remove final digits from t.Name() + // needed to convert Uint64 -> Uint etc. to calls reflect.Value.{tname} + for len(tname) != 0 { + ch := tname[len(tname)-1] + if ch < '0' || ch > '9' { + break + } + tname = tname[0:len(tname)-1] + } + if tname == "uintptr" { + tname = "uint" // use reflect.Value.Uint() + } + sel := ~"{~,val . foo} // we modify it destructively + sel.Sel = &ast.Ident{Name: upcasefirstbyte(tname)} + + switch t.Kind() { + case r.Bool, r.Int64, r.Uint64, r.Float64, r.Complex128, r.String: + // result of reflect.Value.{tname} is already the correct type + val = ~"{~,sel ()} + default: + // convert int64, uint64... to the correct type + val = ~"{~,typ ( ~,sel () )} + } + return val +} + +:func op_to_assign(op token.Token) token.Token { + switch op { + case token.ADD: + op = token.ADD_ASSIGN + case token.SUB: + op = token.SUB_ASSIGN + case token.MUL: + op = token.MUL_ASSIGN + case token.QUO: + op = token.QUO_ASSIGN + case token.REM: + op = token.REM_ASSIGN + case token.AND: + op = token.AND_ASSIGN + case token.OR: + op = token.OR_ASSIGN + case token.XOR: + op = token.XOR_ASSIGN + case token.SHL: + op = token.SHL_ASSIGN + case token.SHR: + op = token.SHR_ASSIGN + case token.AND_NOT: + op = token.AND_NOT_ASSIGN + default: + panic(fmt.Sprintf("cannot convert token %s to assignment token", op)) + } + return op +} + +:func fgetplace(depth, typ ast.Node) (/*loop*/ *ast.BlockStmt, /*bind*/ ast.Node) { + // the return type of Eval() and EvalType() varies. better check early. + upn := Eval(depth).(int) + var t r.Type = EvalType(typ) + var bind ast.Node + var loop *ast.BlockStmt + + if upn >= 0 { + bind = ~'{env} + for i := 0; i < upn; i++ { + bind = ~"{~,bind . Outer} + } + } else if upn == -2 { + bind = ~'{env.ThreadGlobals.FileEnv} + } else if upn == -3 { + bind = ~'{env.ThreadGlobals.TopEnv} + } else { + loop = ~'{ + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + } + bind = ~'o + } + return loop, bind +} + +:func fsetplace(opnode, depth, typ, expr, exprv ast.Node) ast.Node { + loop, bind := fgetplace(depth, typ) + // the return type of Eval() and EvalType() varies. better check early. + var t r.Type = EvalType(typ) + op := Eval(opnode).(token.Token) + opset := op_to_assign(op) + + switch t.Kind() { + case r.Complex128: + var result *ast.BinaryExpr = ~"{lhs.Complex() + ~,expr} + result.Op = op + bind = ~"{lhs := ~,bind . Binds[index]; lhs.SetComplex(~,result)} + case r.String: + var result *ast.BinaryExpr = ~"{lhs.String() + ~,expr} + result.Op = op + bind = ~"{lhs := ~,bind . Binds[index]; lhs.SetString(~,result)} + case r.Uint64: + var assign *ast.AssignStmt = ~"{~,bind . IntBinds[index] += ~,expr} + assign.Tok = opset + bind = assign + default: + var assign *ast.AssignStmt = ~"{*(*~,typ)(unsafe.Pointer(& ~,bind .IntBinds[index])) += ~,expr} + assign.Tok = opset + bind = assign + } + + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } +} + +:macro setplace_const(opnode, depth, typ ast.Node) ast.Node { + return fsetplace(opnode, depth, typ, ~'val, ~'v) +} + +:macro setplace_expr(opnode, depth, typ ast.Node) ast.Node { + return fsetplace(opnode, depth, typ, ~'{fun(env)}, ~'{fun(env).Convert(t)}) +} + +:macro setplace_depth_const(opnode, typ ast.Node) ast.Node { + return ~"{ + switch upn { + case 0: setplace_const; ~,opnode; 0; ~,typ + case 1: setplace_const; ~,opnode; 1; ~,typ + case 2: setplace_const; ~,opnode; 2; ~,typ + default: setplace_const; ~,opnode;-1; ~,typ + case c.Depth-1: setplace_const; ~,opnode;-2; ~,typ + } + } +} + +:macro setplace_depth_expr(opnode, typ ast.Node) ast.Node { + return ~"{ + switch upn { + case 0: setplace_expr; ~,opnode; 0; ~,typ + case 1: setplace_expr; ~,opnode; 1; ~,typ + case 2: setplace_expr; ~,opnode; 2; ~,typ + default: setplace_expr; ~,opnode;-1; ~,typ + case c.Depth-1: setplace_expr; ~,opnode;-2; ~,typ + } + } +} + +:func list_types(typelist []ast.Stmt) []ast.Node { + rets := make([]ast.Node, 0, len(typelist)) + for _, typ := range typelist { + t := EvalType(typ) + if t == nil { + rets = append(rets, ~'nil) + } else if t.Kind() == r.Int { + rets = append(rets, ~'int, ~'int8, ~'int16, ~'int32, ~'int64) + } else if t.Kind() == r.Uint { + rets = append(rets, ~'uint, ~'uint8, ~'uint16, ~'uint32, ~'uint64, ~'uintptr) + } else if t.Kind() == r.Float64 { + rets = append(rets, ~'float32, ~'float64) + } else if t.Kind() == r.Complex128 { + rets = append(rets, ~'complex64, ~'complex128) + } else { + rets = append(rets, typ) + } + } + return rets +} + +:macro setplaces_depth_const(opnode, types ast.Node) ast.Node { + typelist := list_types(types.(*ast.BlockStmt).List) + caselist := make([]ast.Stmt, len(typelist)) + for i, typ := range typelist { + if EvalType(typ) == nil { + caselist[i] = ~"{default: c.Errorf(`invalid operator %s= between <%v> and <%v>`, ~,opnode, t, t2)} + } else { + kind := makekind(typ) + caselist[i] = ~"{case ~,kind: setplace_depth_const; ~,opnode; ~,typ} + } + } + return ~"{ + val := r.ValueOf(val).Uint() + var ret Stmt + switch t.Kind() { + ~,@caselist + } + c.append(ret) + } +} + +:macro setplaces_depth_expr(opnode, types ast.Node) ast.Node { + typelist := list_types(types.(*ast.BlockStmt).List) + caselist := make([]ast.Stmt, len(typelist)) + for i, typ := range typelist { + if EvalType(typ) == nil { + caselist[i] = ~"{default: c.Errorf(`invalid operator %s= between <%v> and <%v>`, ~,opnode, t, t2)} + } else { + kind := makekind(typ) + caselist[i] = ~"{case ~,kind: setplace_depth_expr; ~,opnode; ~,typ} + } + } + return ~"{ + var ret Stmt + switch t.Kind() { + ~,@caselist + } + c.append(ret) + } +} + +// varShlConst compiles 'variable <<= constant' +func (c *Comp) varShlConst(upn int, index int, t xr.Type, val I) { + t2 := r.TypeOf(val) + if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) + } + if isLiteralNumber(val, 0) { + return + } + setplaces_depth_const; token.SHL; {int; uint; nil} +} + +// varShlExpr compiles 'variable <<= expression' +func (c *Comp) varShlExpr(upn int, index int, t xr.Type, function I) { + t2 := funTypeOut(function) + if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) + } + fun := asFunUint8(function) + setplaces_depth_expr; token.SHL; {int; uint; nil} +} + +// varShrConst compiles 'variable >>= constant' +func (c *Comp) varShrConst(upn int, index int, t xr.Type, val I) { + t2 := r.TypeOf(val) + if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) + } + if isLiteralNumber(val, 0) { + return + } + setplaces_depth_const; token.SHR; {int; uint; nil} +} + +// varShrExpr compiles 'variable >>= expression' +func (c *Comp) varShrExpr(upn int, index int, t xr.Type, function I) { + t2 := funTypeOut(function) + if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { + c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) + } + fun := asFunUint8(function) + setplaces_depth_expr; token.SHR; {int; uint; nil} +} + +:macro mfun8() ast.Node { + return ~'{ + return func(env *Env) uint8 { + val := fun(env) + if val > 255 { + val = 255 + } + return uint8(val) + } + } +} + +func asFunUint8(fun I) func(*Env) uint8 { + var f func(*Env) uint8 + switch fun := fun.(type) { + case func(*Env) uint: + mfun8 + case func(*Env) uint8: + f = fun + case func(*Env) uint16: + mfun8 + case func(*Env) uint32: + mfun8 + case func(*Env) uint64: + mfun8 + case func(*Env) uintptr: + mfun8 + } + return f +} + diff --git a/vendor/github.com/cosmos72/gomacro/fast/x_package.go b/vendor/github.com/cosmos72/gomacro/fast/x_package.go new file mode 100644 index 0000000..45fe1ab --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/fast/x_package.go @@ -0,0 +1,80 @@ +// this file was generated by gomacro command: import _i "github.com/cosmos72/gomacro/fast" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package fast + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/imports" +) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/fast" +func init() { + imports.Packages["github.com/cosmos72/gomacro/fast"] = imports.Package{ + Binds: map[string]r.Value{ + "AnyDepth": r.ValueOf(AnyDepth), + "CompileDefaults": r.ValueOf(CompileDefaults), + "CompileKeepUntyped": r.ValueOf(CompileKeepUntyped), + "ConstBind": r.ValueOf(ConstBind), + "ConstBindDescriptor": r.ValueOf(ConstBindDescriptor), + "FileDepth": r.ValueOf(FileDepth), + "FuncBind": r.ValueOf(FuncBind), + "IntBind": r.ValueOf(IntBind), + "Interrupt": r.ValueOf(&Interrupt).Elem(), + "MakeBindDescriptor": r.ValueOf(MakeBindDescriptor), + "New": r.ValueOf(New), + "NewComp": r.ValueOf(NewComp), + "NewCompEnv": r.ValueOf(NewCompEnv), + "NewCompEnvTop": r.ValueOf(NewCompEnvTop), + "NewEnv": r.ValueOf(NewEnv), + "NewEnv4Func": r.ValueOf(NewEnv4Func), + "NewThreadGlobals": r.ValueOf(NewThreadGlobals), + "NoIndex": r.ValueOf(NoIndex), + "PlaceAddress": r.ValueOf(PlaceAddress), + "PlaceSettable": r.ValueOf(PlaceSettable), + "PoolCapacity": r.ValueOf(PoolCapacity), + "SigDefer": r.ValueOf(SigDefer), + "SigNone": r.ValueOf(SigNone), + "SigReturn": r.ValueOf(SigReturn), + "TopDepth": r.ValueOf(TopDepth), + "VarBind": r.ValueOf(VarBind), + }, + Types: map[string]r.Type{ + "Bind": r.TypeOf((*Bind)(nil)).Elem(), + "BindClass": r.TypeOf((*BindClass)(nil)).Elem(), + "BindDescriptor": r.TypeOf((*BindDescriptor)(nil)).Elem(), + "Builtin": r.TypeOf((*Builtin)(nil)).Elem(), + "Call": r.TypeOf((*Call)(nil)).Elem(), + "Code": r.TypeOf((*Code)(nil)).Elem(), + "Comp": r.TypeOf((*Comp)(nil)).Elem(), + "CompEnv": r.TypeOf((*Interp)(nil)).Elem(), + "CompThreadGlobals": r.TypeOf((*CompThreadGlobals)(nil)).Elem(), + "CompileOptions": r.TypeOf((*CompileOptions)(nil)).Elem(), + "Env": r.TypeOf((*Env)(nil)).Elem(), + "Expr": r.TypeOf((*Expr)(nil)).Elem(), + "FuncInfo": r.TypeOf((*FuncInfo)(nil)).Elem(), + "Function": r.TypeOf((*Function)(nil)).Elem(), + "I": r.TypeOf((*I)(nil)).Elem(), + "Lit": r.TypeOf((*Lit)(nil)).Elem(), + "LoopInfo": r.TypeOf((*LoopInfo)(nil)).Elem(), + "NamedType": r.TypeOf((*NamedType)(nil)).Elem(), + "Place": r.TypeOf((*Place)(nil)).Elem(), + "PlaceOption": r.TypeOf((*PlaceOption)(nil)).Elem(), + "Signal": r.TypeOf((*Signal)(nil)).Elem(), + "Stmt": r.TypeOf((*Stmt)(nil)).Elem(), + "Symbol": r.TypeOf((*Symbol)(nil)).Elem(), + "ThreadGlobals": r.TypeOf((*ThreadGlobals)(nil)).Elem(), + "TypeAssertionError": r.TypeOf((*TypeAssertionError)(nil)).Elem(), + "UntypedLit": r.TypeOf((*UntypedLit)(nil)).Elem(), + "Var": r.TypeOf((*Var)(nil)).Elem(), + }, + Proxies: map[string]r.Type{ + "I": r.TypeOf((*I_github_com_cosmos72_gomacro_fast)(nil)).Elem(), + }} +} + +// --------------- proxy for github.com/cosmos72/gomacro/fast.I --------------- +type I_github_com_cosmos72_gomacro_fast struct { + Object interface{} +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/archive_tar.go b/vendor/github.com/cosmos72/gomacro/imports/archive_tar.go new file mode 100644 index 0000000..c8b57e7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/archive_tar.go @@ -0,0 +1,57 @@ +// this file was generated by gomacro command: import _b "archive/tar" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "archive/tar" +) + +// reflection: allow interpreted code to import "archive/tar" +func init() { + Packages["archive/tar"] = Package{ + Binds: map[string]Value{ + "ErrFieldTooLong": ValueOf(&tar.ErrFieldTooLong).Elem(), + "ErrHeader": ValueOf(&tar.ErrHeader).Elem(), + "ErrWriteAfterClose": ValueOf(&tar.ErrWriteAfterClose).Elem(), + "ErrWriteTooLong": ValueOf(&tar.ErrWriteTooLong).Elem(), + "FileInfoHeader": ValueOf(tar.FileInfoHeader), + "NewReader": ValueOf(tar.NewReader), + "NewWriter": ValueOf(tar.NewWriter), + "TypeBlock": ValueOf(tar.TypeBlock), + "TypeChar": ValueOf(tar.TypeChar), + "TypeCont": ValueOf(tar.TypeCont), + "TypeDir": ValueOf(tar.TypeDir), + "TypeFifo": ValueOf(tar.TypeFifo), + "TypeGNULongLink": ValueOf(tar.TypeGNULongLink), + "TypeGNULongName": ValueOf(tar.TypeGNULongName), + "TypeGNUSparse": ValueOf(tar.TypeGNUSparse), + "TypeLink": ValueOf(tar.TypeLink), + "TypeReg": ValueOf(tar.TypeReg), + "TypeRegA": ValueOf(tar.TypeRegA), + "TypeSymlink": ValueOf(tar.TypeSymlink), + "TypeXGlobalHeader": ValueOf(tar.TypeXGlobalHeader), + "TypeXHeader": ValueOf(tar.TypeXHeader), + },Types: map[string]Type{ + "Header": TypeOf((*tar.Header)(nil)).Elem(), + "Reader": TypeOf((*tar.Reader)(nil)).Elem(), + "Writer": TypeOf((*tar.Writer)(nil)).Elem(), + },Untypeds: map[string]string{ + "TypeBlock": "rune:52", + "TypeChar": "rune:51", + "TypeCont": "rune:55", + "TypeDir": "rune:53", + "TypeFifo": "rune:54", + "TypeGNULongLink": "rune:75", + "TypeGNULongName": "rune:76", + "TypeGNUSparse": "rune:83", + "TypeLink": "rune:49", + "TypeReg": "rune:48", + "TypeRegA": "rune:0", + "TypeSymlink": "rune:50", + "TypeXGlobalHeader": "rune:103", + "TypeXHeader": "rune:120", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/archive_zip.go b/vendor/github.com/cosmos72/gomacro/imports/archive_zip.go new file mode 100644 index 0000000..10db346 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/archive_zip.go @@ -0,0 +1,39 @@ +// this file was generated by gomacro command: import _b "archive/zip" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "archive/zip" +) + +// reflection: allow interpreted code to import "archive/zip" +func init() { + Packages["archive/zip"] = Package{ + Binds: map[string]Value{ + "Deflate": ValueOf(zip.Deflate), + "ErrAlgorithm": ValueOf(&zip.ErrAlgorithm).Elem(), + "ErrChecksum": ValueOf(&zip.ErrChecksum).Elem(), + "ErrFormat": ValueOf(&zip.ErrFormat).Elem(), + "FileInfoHeader": ValueOf(zip.FileInfoHeader), + "NewReader": ValueOf(zip.NewReader), + "NewWriter": ValueOf(zip.NewWriter), + "OpenReader": ValueOf(zip.OpenReader), + "RegisterCompressor": ValueOf(zip.RegisterCompressor), + "RegisterDecompressor": ValueOf(zip.RegisterDecompressor), + "Store": ValueOf(zip.Store), + },Types: map[string]Type{ + "Compressor": TypeOf((*zip.Compressor)(nil)).Elem(), + "Decompressor": TypeOf((*zip.Decompressor)(nil)).Elem(), + "File": TypeOf((*zip.File)(nil)).Elem(), + "FileHeader": TypeOf((*zip.FileHeader)(nil)).Elem(), + "ReadCloser": TypeOf((*zip.ReadCloser)(nil)).Elem(), + "Reader": TypeOf((*zip.Reader)(nil)).Elem(), + "Writer": TypeOf((*zip.Writer)(nil)).Elem(), + },Wrappers: map[string][]string{ + "File": []string{"FileInfo","ModTime","Mode","SetModTime","SetMode",}, + "ReadCloser": []string{"RegisterDecompressor",}, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/bufio.go b/vendor/github.com/cosmos72/gomacro/imports/bufio.go new file mode 100644 index 0000000..c35c44f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/bufio.go @@ -0,0 +1,46 @@ +// this file was generated by gomacro command: import _b "bufio" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "bufio" +) + +// reflection: allow interpreted code to import "bufio" +func init() { + Packages["bufio"] = Package{ + Binds: map[string]Value{ + "ErrAdvanceTooFar": ValueOf(&bufio.ErrAdvanceTooFar).Elem(), + "ErrBufferFull": ValueOf(&bufio.ErrBufferFull).Elem(), + "ErrFinalToken": ValueOf(&bufio.ErrFinalToken).Elem(), + "ErrInvalidUnreadByte": ValueOf(&bufio.ErrInvalidUnreadByte).Elem(), + "ErrInvalidUnreadRune": ValueOf(&bufio.ErrInvalidUnreadRune).Elem(), + "ErrNegativeAdvance": ValueOf(&bufio.ErrNegativeAdvance).Elem(), + "ErrNegativeCount": ValueOf(&bufio.ErrNegativeCount).Elem(), + "ErrTooLong": ValueOf(&bufio.ErrTooLong).Elem(), + "MaxScanTokenSize": ValueOf(bufio.MaxScanTokenSize), + "NewReadWriter": ValueOf(bufio.NewReadWriter), + "NewReader": ValueOf(bufio.NewReader), + "NewReaderSize": ValueOf(bufio.NewReaderSize), + "NewScanner": ValueOf(bufio.NewScanner), + "NewWriter": ValueOf(bufio.NewWriter), + "NewWriterSize": ValueOf(bufio.NewWriterSize), + "ScanBytes": ValueOf(bufio.ScanBytes), + "ScanLines": ValueOf(bufio.ScanLines), + "ScanRunes": ValueOf(bufio.ScanRunes), + "ScanWords": ValueOf(bufio.ScanWords), + },Types: map[string]Type{ + "ReadWriter": TypeOf((*bufio.ReadWriter)(nil)).Elem(), + "Reader": TypeOf((*bufio.Reader)(nil)).Elem(), + "Scanner": TypeOf((*bufio.Scanner)(nil)).Elem(), + "SplitFunc": TypeOf((*bufio.SplitFunc)(nil)).Elem(), + "Writer": TypeOf((*bufio.Writer)(nil)).Elem(), + },Untypeds: map[string]string{ + "MaxScanTokenSize": "int:65536", + },Wrappers: map[string][]string{ + "ReadWriter": []string{"Available","Buffered","Discard","Flush","Peek","Read","ReadByte","ReadBytes","ReadFrom","ReadLine","ReadRune","ReadSlice","ReadString","Reset","UnreadByte","UnreadRune","Write","WriteByte","WriteRune","WriteString","WriteTo",}, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/bytes.go b/vendor/github.com/cosmos72/gomacro/imports/bytes.go new file mode 100644 index 0000000..63cef80 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/bytes.go @@ -0,0 +1,72 @@ +// this file was generated by gomacro command: import _b "bytes" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "bytes" +) + +// reflection: allow interpreted code to import "bytes" +func init() { + Packages["bytes"] = Package{ + Binds: map[string]Value{ + "Compare": ValueOf(bytes.Compare), + "Contains": ValueOf(bytes.Contains), + "ContainsAny": ValueOf(bytes.ContainsAny), + "ContainsRune": ValueOf(bytes.ContainsRune), + "Count": ValueOf(bytes.Count), + "Equal": ValueOf(bytes.Equal), + "EqualFold": ValueOf(bytes.EqualFold), + "ErrTooLarge": ValueOf(&bytes.ErrTooLarge).Elem(), + "Fields": ValueOf(bytes.Fields), + "FieldsFunc": ValueOf(bytes.FieldsFunc), + "HasPrefix": ValueOf(bytes.HasPrefix), + "HasSuffix": ValueOf(bytes.HasSuffix), + "Index": ValueOf(bytes.Index), + "IndexAny": ValueOf(bytes.IndexAny), + "IndexByte": ValueOf(bytes.IndexByte), + "IndexFunc": ValueOf(bytes.IndexFunc), + "IndexRune": ValueOf(bytes.IndexRune), + "Join": ValueOf(bytes.Join), + "LastIndex": ValueOf(bytes.LastIndex), + "LastIndexAny": ValueOf(bytes.LastIndexAny), + "LastIndexByte": ValueOf(bytes.LastIndexByte), + "LastIndexFunc": ValueOf(bytes.LastIndexFunc), + "Map": ValueOf(bytes.Map), + "MinRead": ValueOf(bytes.MinRead), + "NewBuffer": ValueOf(bytes.NewBuffer), + "NewBufferString": ValueOf(bytes.NewBufferString), + "NewReader": ValueOf(bytes.NewReader), + "Repeat": ValueOf(bytes.Repeat), + "Replace": ValueOf(bytes.Replace), + "Runes": ValueOf(bytes.Runes), + "Split": ValueOf(bytes.Split), + "SplitAfter": ValueOf(bytes.SplitAfter), + "SplitAfterN": ValueOf(bytes.SplitAfterN), + "SplitN": ValueOf(bytes.SplitN), + "Title": ValueOf(bytes.Title), + "ToLower": ValueOf(bytes.ToLower), + "ToLowerSpecial": ValueOf(bytes.ToLowerSpecial), + "ToTitle": ValueOf(bytes.ToTitle), + "ToTitleSpecial": ValueOf(bytes.ToTitleSpecial), + "ToUpper": ValueOf(bytes.ToUpper), + "ToUpperSpecial": ValueOf(bytes.ToUpperSpecial), + "Trim": ValueOf(bytes.Trim), + "TrimFunc": ValueOf(bytes.TrimFunc), + "TrimLeft": ValueOf(bytes.TrimLeft), + "TrimLeftFunc": ValueOf(bytes.TrimLeftFunc), + "TrimPrefix": ValueOf(bytes.TrimPrefix), + "TrimRight": ValueOf(bytes.TrimRight), + "TrimRightFunc": ValueOf(bytes.TrimRightFunc), + "TrimSpace": ValueOf(bytes.TrimSpace), + "TrimSuffix": ValueOf(bytes.TrimSuffix), + },Types: map[string]Type{ + "Buffer": TypeOf((*bytes.Buffer)(nil)).Elem(), + "Reader": TypeOf((*bytes.Reader)(nil)).Elem(), + },Untypeds: map[string]string{ + "MinRead": "int:512", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/compress_bzip2.go b/vendor/github.com/cosmos72/gomacro/imports/compress_bzip2.go new file mode 100644 index 0000000..2e5c3b3 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/compress_bzip2.go @@ -0,0 +1,20 @@ +// this file was generated by gomacro command: import _b "compress/bzip2" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "compress/bzip2" +) + +// reflection: allow interpreted code to import "compress/bzip2" +func init() { + Packages["compress/bzip2"] = Package{ + Binds: map[string]Value{ + "NewReader": ValueOf(bzip2.NewReader), + },Types: map[string]Type{ + "StructuralError": TypeOf((*bzip2.StructuralError)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/compress_flate.go b/vendor/github.com/cosmos72/gomacro/imports/compress_flate.go new file mode 100644 index 0000000..94bbcb4 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/compress_flate.go @@ -0,0 +1,66 @@ +// this file was generated by gomacro command: import _b "compress/flate" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "compress/flate" + "io" +) + +// reflection: allow interpreted code to import "compress/flate" +func init() { + Packages["compress/flate"] = Package{ + Binds: map[string]Value{ + "BestCompression": ValueOf(flate.BestCompression), + "BestSpeed": ValueOf(flate.BestSpeed), + "DefaultCompression": ValueOf(flate.DefaultCompression), + "HuffmanOnly": ValueOf(flate.HuffmanOnly), + "NewReader": ValueOf(flate.NewReader), + "NewReaderDict": ValueOf(flate.NewReaderDict), + "NewWriter": ValueOf(flate.NewWriter), + "NewWriterDict": ValueOf(flate.NewWriterDict), + "NoCompression": ValueOf(flate.NoCompression), + },Types: map[string]Type{ + "CorruptInputError": TypeOf((*flate.CorruptInputError)(nil)).Elem(), + "InternalError": TypeOf((*flate.InternalError)(nil)).Elem(), + "ReadError": TypeOf((*flate.ReadError)(nil)).Elem(), + "Reader": TypeOf((*flate.Reader)(nil)).Elem(), + "Resetter": TypeOf((*flate.Resetter)(nil)).Elem(), + "WriteError": TypeOf((*flate.WriteError)(nil)).Elem(), + "Writer": TypeOf((*flate.Writer)(nil)).Elem(), + },Proxies: map[string]Type{ + "Reader": TypeOf((*Reader_compress_flate)(nil)).Elem(), + "Resetter": TypeOf((*Resetter_compress_flate)(nil)).Elem(), + },Untypeds: map[string]string{ + "BestCompression": "int:9", + "BestSpeed": "int:1", + "DefaultCompression": "int:-1", + "HuffmanOnly": "int:-2", + "NoCompression": "int:0", + }, + } +} + +// --------------- proxy for compress/flate.Reader --------------- +type Reader_compress_flate struct { + Object interface{} + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) + ReadByte_ func(interface{}) (byte, error) +} +func (Proxy *Reader_compress_flate) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} +func (Proxy *Reader_compress_flate) ReadByte() (byte, error) { + return Proxy.ReadByte_(Proxy.Object) +} + +// --------------- proxy for compress/flate.Resetter --------------- +type Resetter_compress_flate struct { + Object interface{} + Reset_ func(_proxy_obj_ interface{}, r io.Reader, dict []byte) error +} +func (Proxy *Resetter_compress_flate) Reset(r io.Reader, dict []byte) error { + return Proxy.Reset_(Proxy.Object, r, dict) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/compress_gzip.go b/vendor/github.com/cosmos72/gomacro/imports/compress_gzip.go new file mode 100644 index 0000000..af1a1f8 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/compress_gzip.go @@ -0,0 +1,37 @@ +// this file was generated by gomacro command: import _b "compress/gzip" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "compress/gzip" +) + +// reflection: allow interpreted code to import "compress/gzip" +func init() { + Packages["compress/gzip"] = Package{ + Binds: map[string]Value{ + "BestCompression": ValueOf(gzip.BestCompression), + "BestSpeed": ValueOf(gzip.BestSpeed), + "DefaultCompression": ValueOf(gzip.DefaultCompression), + "ErrChecksum": ValueOf(&gzip.ErrChecksum).Elem(), + "ErrHeader": ValueOf(&gzip.ErrHeader).Elem(), + "HuffmanOnly": ValueOf(gzip.HuffmanOnly), + "NewReader": ValueOf(gzip.NewReader), + "NewWriter": ValueOf(gzip.NewWriter), + "NewWriterLevel": ValueOf(gzip.NewWriterLevel), + "NoCompression": ValueOf(gzip.NoCompression), + },Types: map[string]Type{ + "Header": TypeOf((*gzip.Header)(nil)).Elem(), + "Reader": TypeOf((*gzip.Reader)(nil)).Elem(), + "Writer": TypeOf((*gzip.Writer)(nil)).Elem(), + },Untypeds: map[string]string{ + "BestCompression": "int:9", + "BestSpeed": "int:1", + "DefaultCompression": "int:-1", + "HuffmanOnly": "int:-2", + "NoCompression": "int:0", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/compress_lzw.go b/vendor/github.com/cosmos72/gomacro/imports/compress_lzw.go new file mode 100644 index 0000000..0876660 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/compress_lzw.go @@ -0,0 +1,23 @@ +// this file was generated by gomacro command: import _b "compress/lzw" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "compress/lzw" +) + +// reflection: allow interpreted code to import "compress/lzw" +func init() { + Packages["compress/lzw"] = Package{ + Binds: map[string]Value{ + "LSB": ValueOf(lzw.LSB), + "MSB": ValueOf(lzw.MSB), + "NewReader": ValueOf(lzw.NewReader), + "NewWriter": ValueOf(lzw.NewWriter), + },Types: map[string]Type{ + "Order": TypeOf((*lzw.Order)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/compress_zlib.go b/vendor/github.com/cosmos72/gomacro/imports/compress_zlib.go new file mode 100644 index 0000000..08def98 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/compress_zlib.go @@ -0,0 +1,51 @@ +// this file was generated by gomacro command: import _b "compress/zlib" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "compress/zlib" + "io" +) + +// reflection: allow interpreted code to import "compress/zlib" +func init() { + Packages["compress/zlib"] = Package{ + Binds: map[string]Value{ + "BestCompression": ValueOf(zlib.BestCompression), + "BestSpeed": ValueOf(zlib.BestSpeed), + "DefaultCompression": ValueOf(zlib.DefaultCompression), + "ErrChecksum": ValueOf(&zlib.ErrChecksum).Elem(), + "ErrDictionary": ValueOf(&zlib.ErrDictionary).Elem(), + "ErrHeader": ValueOf(&zlib.ErrHeader).Elem(), + "HuffmanOnly": ValueOf(zlib.HuffmanOnly), + "NewReader": ValueOf(zlib.NewReader), + "NewReaderDict": ValueOf(zlib.NewReaderDict), + "NewWriter": ValueOf(zlib.NewWriter), + "NewWriterLevel": ValueOf(zlib.NewWriterLevel), + "NewWriterLevelDict": ValueOf(zlib.NewWriterLevelDict), + "NoCompression": ValueOf(zlib.NoCompression), + },Types: map[string]Type{ + "Resetter": TypeOf((*zlib.Resetter)(nil)).Elem(), + "Writer": TypeOf((*zlib.Writer)(nil)).Elem(), + },Proxies: map[string]Type{ + "Resetter": TypeOf((*Resetter_compress_zlib)(nil)).Elem(), + },Untypeds: map[string]string{ + "BestCompression": "int:9", + "BestSpeed": "int:1", + "DefaultCompression": "int:-1", + "HuffmanOnly": "int:-2", + "NoCompression": "int:0", + }, + } +} + +// --------------- proxy for compress/zlib.Resetter --------------- +type Resetter_compress_zlib struct { + Object interface{} + Reset_ func(_proxy_obj_ interface{}, r io.Reader, dict []byte) error +} +func (Proxy *Resetter_compress_zlib) Reset(r io.Reader, dict []byte) error { + return Proxy.Reset_(Proxy.Object, r, dict) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/container_heap.go b/vendor/github.com/cosmos72/gomacro/imports/container_heap.go new file mode 100644 index 0000000..c53f185 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/container_heap.go @@ -0,0 +1,51 @@ +// this file was generated by gomacro command: import _b "container/heap" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "container/heap" +) + +// reflection: allow interpreted code to import "container/heap" +func init() { + Packages["container/heap"] = Package{ + Binds: map[string]Value{ + "Fix": ValueOf(heap.Fix), + "Init": ValueOf(heap.Init), + "Pop": ValueOf(heap.Pop), + "Push": ValueOf(heap.Push), + "Remove": ValueOf(heap.Remove), + },Types: map[string]Type{ + "Interface": TypeOf((*heap.Interface)(nil)).Elem(), + },Proxies: map[string]Type{ + "Interface": TypeOf((*Interface_container_heap)(nil)).Elem(), + }, + } +} + +// --------------- proxy for container/heap.Interface --------------- +type Interface_container_heap struct { + Object interface{} + Len_ func(interface{}) int + Less_ func(_proxy_obj_ interface{}, i int, j int) bool + Pop_ func(interface{}) interface{} + Push_ func(_proxy_obj_ interface{}, x interface{}) + Swap_ func(_proxy_obj_ interface{}, i int, j int) +} +func (Proxy *Interface_container_heap) Len() int { + return Proxy.Len_(Proxy.Object) +} +func (Proxy *Interface_container_heap) Less(i int, j int) bool { + return Proxy.Less_(Proxy.Object, i, j) +} +func (Proxy *Interface_container_heap) Pop() interface{} { + return Proxy.Pop_(Proxy.Object) +} +func (Proxy *Interface_container_heap) Push(x interface{}) { + Proxy.Push_(Proxy.Object, x) +} +func (Proxy *Interface_container_heap) Swap(i int, j int) { + Proxy.Swap_(Proxy.Object, i, j) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/container_list.go b/vendor/github.com/cosmos72/gomacro/imports/container_list.go new file mode 100644 index 0000000..55b0543 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/container_list.go @@ -0,0 +1,21 @@ +// this file was generated by gomacro command: import _b "container/list" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "container/list" +) + +// reflection: allow interpreted code to import "container/list" +func init() { + Packages["container/list"] = Package{ + Binds: map[string]Value{ + "New": ValueOf(list.New), + },Types: map[string]Type{ + "Element": TypeOf((*list.Element)(nil)).Elem(), + "List": TypeOf((*list.List)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/container_ring.go b/vendor/github.com/cosmos72/gomacro/imports/container_ring.go new file mode 100644 index 0000000..f0197b9 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/container_ring.go @@ -0,0 +1,20 @@ +// this file was generated by gomacro command: import _b "container/ring" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "container/ring" +) + +// reflection: allow interpreted code to import "container/ring" +func init() { + Packages["container/ring"] = Package{ + Binds: map[string]Value{ + "New": ValueOf(ring.New), + },Types: map[string]Type{ + "Ring": TypeOf((*ring.Ring)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/context.go b/vendor/github.com/cosmos72/gomacro/imports/context.go new file mode 100644 index 0000000..cab3213 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/context.go @@ -0,0 +1,52 @@ +// this file was generated by gomacro command: import _b "context" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "context" + "time" +) + +// reflection: allow interpreted code to import "context" +func init() { + Packages["context"] = Package{ + Binds: map[string]Value{ + "Background": ValueOf(context.Background), + "Canceled": ValueOf(&context.Canceled).Elem(), + "DeadlineExceeded": ValueOf(&context.DeadlineExceeded).Elem(), + "TODO": ValueOf(context.TODO), + "WithCancel": ValueOf(context.WithCancel), + "WithDeadline": ValueOf(context.WithDeadline), + "WithTimeout": ValueOf(context.WithTimeout), + "WithValue": ValueOf(context.WithValue), + },Types: map[string]Type{ + "CancelFunc": TypeOf((*context.CancelFunc)(nil)).Elem(), + "Context": TypeOf((*context.Context)(nil)).Elem(), + },Proxies: map[string]Type{ + "Context": TypeOf((*Context_context)(nil)).Elem(), + }, + } +} + +// --------------- proxy for context.Context --------------- +type Context_context struct { + Object interface{} + Deadline_ func(interface{}) (deadline time.Time, ok bool) + Done_ func(interface{}) <-chan struct{} + Err_ func(interface{}) error + Value_ func(_proxy_obj_ interface{}, key interface{}) interface{} +} +func (Proxy *Context_context) Deadline() (deadline time.Time, ok bool) { + return Proxy.Deadline_(Proxy.Object) +} +func (Proxy *Context_context) Done() <-chan struct{} { + return Proxy.Done_(Proxy.Object) +} +func (Proxy *Context_context) Err() error { + return Proxy.Err_(Proxy.Object) +} +func (Proxy *Context_context) Value(key interface{}) interface{} { + return Proxy.Value_(Proxy.Object, key) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto.go b/vendor/github.com/cosmos72/gomacro/imports/crypto.go new file mode 100644 index 0000000..576dbd7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto.go @@ -0,0 +1,99 @@ +// this file was generated by gomacro command: import _b "crypto" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto" + "io" +) + +// reflection: allow interpreted code to import "crypto" +func init() { + Packages["crypto"] = Package{ + Binds: map[string]Value{ + "MD4": ValueOf(crypto.MD4), + "MD5": ValueOf(crypto.MD5), + "MD5SHA1": ValueOf(crypto.MD5SHA1), + "RIPEMD160": ValueOf(crypto.RIPEMD160), + "RegisterHash": ValueOf(crypto.RegisterHash), + "SHA1": ValueOf(crypto.SHA1), + "SHA224": ValueOf(crypto.SHA224), + "SHA256": ValueOf(crypto.SHA256), + "SHA384": ValueOf(crypto.SHA384), + "SHA3_224": ValueOf(crypto.SHA3_224), + "SHA3_256": ValueOf(crypto.SHA3_256), + "SHA3_384": ValueOf(crypto.SHA3_384), + "SHA3_512": ValueOf(crypto.SHA3_512), + "SHA512": ValueOf(crypto.SHA512), + "SHA512_224": ValueOf(crypto.SHA512_224), + "SHA512_256": ValueOf(crypto.SHA512_256), + },Types: map[string]Type{ + "Decrypter": TypeOf((*crypto.Decrypter)(nil)).Elem(), + "DecrypterOpts": TypeOf((*crypto.DecrypterOpts)(nil)).Elem(), + "Hash": TypeOf((*crypto.Hash)(nil)).Elem(), + "PrivateKey": TypeOf((*crypto.PrivateKey)(nil)).Elem(), + "PublicKey": TypeOf((*crypto.PublicKey)(nil)).Elem(), + "Signer": TypeOf((*crypto.Signer)(nil)).Elem(), + "SignerOpts": TypeOf((*crypto.SignerOpts)(nil)).Elem(), + },Proxies: map[string]Type{ + "Decrypter": TypeOf((*Decrypter_crypto)(nil)).Elem(), + "DecrypterOpts": TypeOf((*DecrypterOpts_crypto)(nil)).Elem(), + "PrivateKey": TypeOf((*PrivateKey_crypto)(nil)).Elem(), + "PublicKey": TypeOf((*PublicKey_crypto)(nil)).Elem(), + "Signer": TypeOf((*Signer_crypto)(nil)).Elem(), + "SignerOpts": TypeOf((*SignerOpts_crypto)(nil)).Elem(), + }, + } +} + +// --------------- proxy for crypto.Decrypter --------------- +type Decrypter_crypto struct { + Object interface{} + Decrypt_ func(_proxy_obj_ interface{}, rand io.Reader, msg []byte, opts crypto.DecrypterOpts) (plaintext []byte, err error) + Public_ func(interface{}) crypto.PublicKey +} +func (Proxy *Decrypter_crypto) Decrypt(rand io.Reader, msg []byte, opts crypto.DecrypterOpts) (plaintext []byte, err error) { + return Proxy.Decrypt_(Proxy.Object, rand, msg, opts) +} +func (Proxy *Decrypter_crypto) Public() crypto.PublicKey { + return Proxy.Public_(Proxy.Object) +} + +// --------------- proxy for crypto.DecrypterOpts --------------- +type DecrypterOpts_crypto struct { + Object interface{} +} + +// --------------- proxy for crypto.PrivateKey --------------- +type PrivateKey_crypto struct { + Object interface{} +} + +// --------------- proxy for crypto.PublicKey --------------- +type PublicKey_crypto struct { + Object interface{} +} + +// --------------- proxy for crypto.Signer --------------- +type Signer_crypto struct { + Object interface{} + Public_ func(interface{}) crypto.PublicKey + Sign_ func(_proxy_obj_ interface{}, rand io.Reader, digest []byte, opts crypto.SignerOpts) (signature []byte, err error) +} +func (Proxy *Signer_crypto) Public() crypto.PublicKey { + return Proxy.Public_(Proxy.Object) +} +func (Proxy *Signer_crypto) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) (signature []byte, err error) { + return Proxy.Sign_(Proxy.Object, rand, digest, opts) +} + +// --------------- proxy for crypto.SignerOpts --------------- +type SignerOpts_crypto struct { + Object interface{} + HashFunc_ func(interface{}) crypto.Hash +} +func (Proxy *SignerOpts_crypto) HashFunc() crypto.Hash { + return Proxy.HashFunc_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_aes.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_aes.go new file mode 100644 index 0000000..826d9ad --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_aes.go @@ -0,0 +1,23 @@ +// this file was generated by gomacro command: import _b "crypto/aes" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/aes" +) + +// reflection: allow interpreted code to import "crypto/aes" +func init() { + Packages["crypto/aes"] = Package{ + Binds: map[string]Value{ + "BlockSize": ValueOf(aes.BlockSize), + "NewCipher": ValueOf(aes.NewCipher), + },Types: map[string]Type{ + "KeySizeError": TypeOf((*aes.KeySizeError)(nil)).Elem(), + },Untypeds: map[string]string{ + "BlockSize": "int:16", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_cipher.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_cipher.go new file mode 100644 index 0000000..ad38f01 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_cipher.go @@ -0,0 +1,97 @@ +// this file was generated by gomacro command: import _b "crypto/cipher" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/cipher" +) + +// reflection: allow interpreted code to import "crypto/cipher" +func init() { + Packages["crypto/cipher"] = Package{ + Binds: map[string]Value{ + "NewCBCDecrypter": ValueOf(cipher.NewCBCDecrypter), + "NewCBCEncrypter": ValueOf(cipher.NewCBCEncrypter), + "NewCFBDecrypter": ValueOf(cipher.NewCFBDecrypter), + "NewCFBEncrypter": ValueOf(cipher.NewCFBEncrypter), + "NewCTR": ValueOf(cipher.NewCTR), + "NewGCM": ValueOf(cipher.NewGCM), + "NewGCMWithNonceSize": ValueOf(cipher.NewGCMWithNonceSize), + "NewOFB": ValueOf(cipher.NewOFB), + },Types: map[string]Type{ + "AEAD": TypeOf((*cipher.AEAD)(nil)).Elem(), + "Block": TypeOf((*cipher.Block)(nil)).Elem(), + "BlockMode": TypeOf((*cipher.BlockMode)(nil)).Elem(), + "Stream": TypeOf((*cipher.Stream)(nil)).Elem(), + "StreamReader": TypeOf((*cipher.StreamReader)(nil)).Elem(), + "StreamWriter": TypeOf((*cipher.StreamWriter)(nil)).Elem(), + },Proxies: map[string]Type{ + "AEAD": TypeOf((*AEAD_crypto_cipher)(nil)).Elem(), + "Block": TypeOf((*Block_crypto_cipher)(nil)).Elem(), + "BlockMode": TypeOf((*BlockMode_crypto_cipher)(nil)).Elem(), + "Stream": TypeOf((*Stream_crypto_cipher)(nil)).Elem(), + }, + } +} + +// --------------- proxy for crypto/cipher.AEAD --------------- +type AEAD_crypto_cipher struct { + Object interface{} + NonceSize_ func(interface{}) int + Open_ func(_proxy_obj_ interface{}, dst []byte, nonce []byte, ciphertext []byte, additionalData []byte) ([]byte, error) + Overhead_ func(interface{}) int + Seal_ func(_proxy_obj_ interface{}, dst []byte, nonce []byte, plaintext []byte, additionalData []byte) []byte +} +func (Proxy *AEAD_crypto_cipher) NonceSize() int { + return Proxy.NonceSize_(Proxy.Object) +} +func (Proxy *AEAD_crypto_cipher) Open(dst []byte, nonce []byte, ciphertext []byte, additionalData []byte) ([]byte, error) { + return Proxy.Open_(Proxy.Object, dst, nonce, ciphertext, additionalData) +} +func (Proxy *AEAD_crypto_cipher) Overhead() int { + return Proxy.Overhead_(Proxy.Object) +} +func (Proxy *AEAD_crypto_cipher) Seal(dst []byte, nonce []byte, plaintext []byte, additionalData []byte) []byte { + return Proxy.Seal_(Proxy.Object, dst, nonce, plaintext, additionalData) +} + +// --------------- proxy for crypto/cipher.Block --------------- +type Block_crypto_cipher struct { + Object interface{} + BlockSize_ func(interface{}) int + Decrypt_ func(_proxy_obj_ interface{}, dst []byte, src []byte) + Encrypt_ func(_proxy_obj_ interface{}, dst []byte, src []byte) +} +func (Proxy *Block_crypto_cipher) BlockSize() int { + return Proxy.BlockSize_(Proxy.Object) +} +func (Proxy *Block_crypto_cipher) Decrypt(dst []byte, src []byte) { + Proxy.Decrypt_(Proxy.Object, dst, src) +} +func (Proxy *Block_crypto_cipher) Encrypt(dst []byte, src []byte) { + Proxy.Encrypt_(Proxy.Object, dst, src) +} + +// --------------- proxy for crypto/cipher.BlockMode --------------- +type BlockMode_crypto_cipher struct { + Object interface{} + BlockSize_ func(interface{}) int + CryptBlocks_ func(_proxy_obj_ interface{}, dst []byte, src []byte) +} +func (Proxy *BlockMode_crypto_cipher) BlockSize() int { + return Proxy.BlockSize_(Proxy.Object) +} +func (Proxy *BlockMode_crypto_cipher) CryptBlocks(dst []byte, src []byte) { + Proxy.CryptBlocks_(Proxy.Object, dst, src) +} + +// --------------- proxy for crypto/cipher.Stream --------------- +type Stream_crypto_cipher struct { + Object interface{} + XORKeyStream_ func(_proxy_obj_ interface{}, dst []byte, src []byte) +} +func (Proxy *Stream_crypto_cipher) XORKeyStream(dst []byte, src []byte) { + Proxy.XORKeyStream_(Proxy.Object, dst, src) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_des.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_des.go new file mode 100644 index 0000000..c2d4834 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_des.go @@ -0,0 +1,24 @@ +// this file was generated by gomacro command: import _b "crypto/des" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/des" +) + +// reflection: allow interpreted code to import "crypto/des" +func init() { + Packages["crypto/des"] = Package{ + Binds: map[string]Value{ + "BlockSize": ValueOf(des.BlockSize), + "NewCipher": ValueOf(des.NewCipher), + "NewTripleDESCipher": ValueOf(des.NewTripleDESCipher), + },Types: map[string]Type{ + "KeySizeError": TypeOf((*des.KeySizeError)(nil)).Elem(), + },Untypeds: map[string]string{ + "BlockSize": "int:8", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_dsa.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_dsa.go new file mode 100644 index 0000000..0fa22ad --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_dsa.go @@ -0,0 +1,31 @@ +// this file was generated by gomacro command: import _b "crypto/dsa" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/dsa" +) + +// reflection: allow interpreted code to import "crypto/dsa" +func init() { + Packages["crypto/dsa"] = Package{ + Binds: map[string]Value{ + "ErrInvalidPublicKey": ValueOf(&dsa.ErrInvalidPublicKey).Elem(), + "GenerateKey": ValueOf(dsa.GenerateKey), + "GenerateParameters": ValueOf(dsa.GenerateParameters), + "L1024N160": ValueOf(dsa.L1024N160), + "L2048N224": ValueOf(dsa.L2048N224), + "L2048N256": ValueOf(dsa.L2048N256), + "L3072N256": ValueOf(dsa.L3072N256), + "Sign": ValueOf(dsa.Sign), + "Verify": ValueOf(dsa.Verify), + },Types: map[string]Type{ + "ParameterSizes": TypeOf((*dsa.ParameterSizes)(nil)).Elem(), + "Parameters": TypeOf((*dsa.Parameters)(nil)).Elem(), + "PrivateKey": TypeOf((*dsa.PrivateKey)(nil)).Elem(), + "PublicKey": TypeOf((*dsa.PublicKey)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_ecdsa.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_ecdsa.go new file mode 100644 index 0000000..feb6825 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_ecdsa.go @@ -0,0 +1,23 @@ +// this file was generated by gomacro command: import _b "crypto/ecdsa" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/ecdsa" +) + +// reflection: allow interpreted code to import "crypto/ecdsa" +func init() { + Packages["crypto/ecdsa"] = Package{ + Binds: map[string]Value{ + "GenerateKey": ValueOf(ecdsa.GenerateKey), + "Sign": ValueOf(ecdsa.Sign), + "Verify": ValueOf(ecdsa.Verify), + },Types: map[string]Type{ + "PrivateKey": TypeOf((*ecdsa.PrivateKey)(nil)).Elem(), + "PublicKey": TypeOf((*ecdsa.PublicKey)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_elliptic.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_elliptic.go new file mode 100644 index 0000000..0b4e510 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_elliptic.go @@ -0,0 +1,59 @@ +// this file was generated by gomacro command: import _b "crypto/elliptic" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/elliptic" + "math/big" +) + +// reflection: allow interpreted code to import "crypto/elliptic" +func init() { + Packages["crypto/elliptic"] = Package{ + Binds: map[string]Value{ + "GenerateKey": ValueOf(elliptic.GenerateKey), + "Marshal": ValueOf(elliptic.Marshal), + "P224": ValueOf(elliptic.P224), + "P256": ValueOf(elliptic.P256), + "P384": ValueOf(elliptic.P384), + "P521": ValueOf(elliptic.P521), + "Unmarshal": ValueOf(elliptic.Unmarshal), + },Types: map[string]Type{ + "Curve": TypeOf((*elliptic.Curve)(nil)).Elem(), + "CurveParams": TypeOf((*elliptic.CurveParams)(nil)).Elem(), + },Proxies: map[string]Type{ + "Curve": TypeOf((*Curve_crypto_elliptic)(nil)).Elem(), + }, + } +} + +// --------------- proxy for crypto/elliptic.Curve --------------- +type Curve_crypto_elliptic struct { + Object interface{} + Add_ func(_proxy_obj_ interface{}, x1 *big.Int, y1 *big.Int, x2 *big.Int, y2 *big.Int) (x *big.Int, y *big.Int) + Double_ func(_proxy_obj_ interface{}, x1 *big.Int, y1 *big.Int) (x *big.Int, y *big.Int) + IsOnCurve_ func(_proxy_obj_ interface{}, x *big.Int, y *big.Int) bool + Params_ func(interface{}) *elliptic.CurveParams + ScalarBaseMult_ func(_proxy_obj_ interface{}, k []byte) (x *big.Int, y *big.Int) + ScalarMult_ func(_proxy_obj_ interface{}, x1 *big.Int, y1 *big.Int, k []byte) (x *big.Int, y *big.Int) +} +func (Proxy *Curve_crypto_elliptic) Add(x1 *big.Int, y1 *big.Int, x2 *big.Int, y2 *big.Int) (x *big.Int, y *big.Int) { + return Proxy.Add_(Proxy.Object, x1, y1, x2, y2) +} +func (Proxy *Curve_crypto_elliptic) Double(x1 *big.Int, y1 *big.Int) (x *big.Int, y *big.Int) { + return Proxy.Double_(Proxy.Object, x1, y1) +} +func (Proxy *Curve_crypto_elliptic) IsOnCurve(x *big.Int, y *big.Int) bool { + return Proxy.IsOnCurve_(Proxy.Object, x, y) +} +func (Proxy *Curve_crypto_elliptic) Params() *elliptic.CurveParams { + return Proxy.Params_(Proxy.Object) +} +func (Proxy *Curve_crypto_elliptic) ScalarBaseMult(k []byte) (x *big.Int, y *big.Int) { + return Proxy.ScalarBaseMult_(Proxy.Object, k) +} +func (Proxy *Curve_crypto_elliptic) ScalarMult(x1 *big.Int, y1 *big.Int, k []byte) (x *big.Int, y *big.Int) { + return Proxy.ScalarMult_(Proxy.Object, x1, y1, k) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_hmac.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_hmac.go new file mode 100644 index 0000000..750f9b9 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_hmac.go @@ -0,0 +1,19 @@ +// this file was generated by gomacro command: import _b "crypto/hmac" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/hmac" +) + +// reflection: allow interpreted code to import "crypto/hmac" +func init() { + Packages["crypto/hmac"] = Package{ + Binds: map[string]Value{ + "Equal": ValueOf(hmac.Equal), + "New": ValueOf(hmac.New), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_md5.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_md5.go new file mode 100644 index 0000000..51b5b5b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_md5.go @@ -0,0 +1,24 @@ +// this file was generated by gomacro command: import _b "crypto/md5" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/md5" +) + +// reflection: allow interpreted code to import "crypto/md5" +func init() { + Packages["crypto/md5"] = Package{ + Binds: map[string]Value{ + "BlockSize": ValueOf(md5.BlockSize), + "New": ValueOf(md5.New), + "Size": ValueOf(md5.Size), + "Sum": ValueOf(md5.Sum), + },Untypeds: map[string]string{ + "BlockSize": "int:64", + "Size": "int:16", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_rand.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_rand.go new file mode 100644 index 0000000..4540e92 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_rand.go @@ -0,0 +1,21 @@ +// this file was generated by gomacro command: import _b "crypto/rand" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/rand" +) + +// reflection: allow interpreted code to import "crypto/rand" +func init() { + Packages["crypto/rand"] = Package{ + Binds: map[string]Value{ + "Int": ValueOf(rand.Int), + "Prime": ValueOf(rand.Prime), + "Read": ValueOf(rand.Read), + "Reader": ValueOf(&rand.Reader).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_rc4.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_rc4.go new file mode 100644 index 0000000..6e11e6e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_rc4.go @@ -0,0 +1,21 @@ +// this file was generated by gomacro command: import _b "crypto/rc4" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/rc4" +) + +// reflection: allow interpreted code to import "crypto/rc4" +func init() { + Packages["crypto/rc4"] = Package{ + Binds: map[string]Value{ + "NewCipher": ValueOf(rc4.NewCipher), + },Types: map[string]Type{ + "Cipher": TypeOf((*rc4.Cipher)(nil)).Elem(), + "KeySizeError": TypeOf((*rc4.KeySizeError)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_rsa.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_rsa.go new file mode 100644 index 0000000..d33285d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_rsa.go @@ -0,0 +1,44 @@ +// this file was generated by gomacro command: import _b "crypto/rsa" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/rsa" +) + +// reflection: allow interpreted code to import "crypto/rsa" +func init() { + Packages["crypto/rsa"] = Package{ + Binds: map[string]Value{ + "DecryptOAEP": ValueOf(rsa.DecryptOAEP), + "DecryptPKCS1v15": ValueOf(rsa.DecryptPKCS1v15), + "DecryptPKCS1v15SessionKey": ValueOf(rsa.DecryptPKCS1v15SessionKey), + "EncryptOAEP": ValueOf(rsa.EncryptOAEP), + "EncryptPKCS1v15": ValueOf(rsa.EncryptPKCS1v15), + "ErrDecryption": ValueOf(&rsa.ErrDecryption).Elem(), + "ErrMessageTooLong": ValueOf(&rsa.ErrMessageTooLong).Elem(), + "ErrVerification": ValueOf(&rsa.ErrVerification).Elem(), + "GenerateKey": ValueOf(rsa.GenerateKey), + "GenerateMultiPrimeKey": ValueOf(rsa.GenerateMultiPrimeKey), + "PSSSaltLengthAuto": ValueOf(rsa.PSSSaltLengthAuto), + "PSSSaltLengthEqualsHash": ValueOf(rsa.PSSSaltLengthEqualsHash), + "SignPKCS1v15": ValueOf(rsa.SignPKCS1v15), + "SignPSS": ValueOf(rsa.SignPSS), + "VerifyPKCS1v15": ValueOf(rsa.VerifyPKCS1v15), + "VerifyPSS": ValueOf(rsa.VerifyPSS), + },Types: map[string]Type{ + "CRTValue": TypeOf((*rsa.CRTValue)(nil)).Elem(), + "OAEPOptions": TypeOf((*rsa.OAEPOptions)(nil)).Elem(), + "PKCS1v15DecryptOptions": TypeOf((*rsa.PKCS1v15DecryptOptions)(nil)).Elem(), + "PSSOptions": TypeOf((*rsa.PSSOptions)(nil)).Elem(), + "PrecomputedValues": TypeOf((*rsa.PrecomputedValues)(nil)).Elem(), + "PrivateKey": TypeOf((*rsa.PrivateKey)(nil)).Elem(), + "PublicKey": TypeOf((*rsa.PublicKey)(nil)).Elem(), + },Untypeds: map[string]string{ + "PSSSaltLengthAuto": "int:0", + "PSSSaltLengthEqualsHash": "int:-1", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_sha1.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_sha1.go new file mode 100644 index 0000000..1ca71f6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_sha1.go @@ -0,0 +1,24 @@ +// this file was generated by gomacro command: import _b "crypto/sha1" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/sha1" +) + +// reflection: allow interpreted code to import "crypto/sha1" +func init() { + Packages["crypto/sha1"] = Package{ + Binds: map[string]Value{ + "BlockSize": ValueOf(sha1.BlockSize), + "New": ValueOf(sha1.New), + "Size": ValueOf(sha1.Size), + "Sum": ValueOf(sha1.Sum), + },Untypeds: map[string]string{ + "BlockSize": "int:64", + "Size": "int:20", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_sha256.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_sha256.go new file mode 100644 index 0000000..617e570 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_sha256.go @@ -0,0 +1,28 @@ +// this file was generated by gomacro command: import _b "crypto/sha256" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/sha256" +) + +// reflection: allow interpreted code to import "crypto/sha256" +func init() { + Packages["crypto/sha256"] = Package{ + Binds: map[string]Value{ + "BlockSize": ValueOf(sha256.BlockSize), + "New": ValueOf(sha256.New), + "New224": ValueOf(sha256.New224), + "Size": ValueOf(sha256.Size), + "Size224": ValueOf(sha256.Size224), + "Sum224": ValueOf(sha256.Sum224), + "Sum256": ValueOf(sha256.Sum256), + },Untypeds: map[string]string{ + "BlockSize": "int:64", + "Size": "int:32", + "Size224": "int:28", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_sha512.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_sha512.go new file mode 100644 index 0000000..ba2ef31 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_sha512.go @@ -0,0 +1,36 @@ +// this file was generated by gomacro command: import _b "crypto/sha512" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/sha512" +) + +// reflection: allow interpreted code to import "crypto/sha512" +func init() { + Packages["crypto/sha512"] = Package{ + Binds: map[string]Value{ + "BlockSize": ValueOf(sha512.BlockSize), + "New": ValueOf(sha512.New), + "New384": ValueOf(sha512.New384), + "New512_224": ValueOf(sha512.New512_224), + "New512_256": ValueOf(sha512.New512_256), + "Size": ValueOf(sha512.Size), + "Size224": ValueOf(sha512.Size224), + "Size256": ValueOf(sha512.Size256), + "Size384": ValueOf(sha512.Size384), + "Sum384": ValueOf(sha512.Sum384), + "Sum512": ValueOf(sha512.Sum512), + "Sum512_224": ValueOf(sha512.Sum512_224), + "Sum512_256": ValueOf(sha512.Sum512_256), + },Untypeds: map[string]string{ + "BlockSize": "int:128", + "Size": "int:64", + "Size224": "int:28", + "Size256": "int:32", + "Size384": "int:48", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_subtle.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_subtle.go new file mode 100644 index 0000000..037ad68 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_subtle.go @@ -0,0 +1,23 @@ +// this file was generated by gomacro command: import _b "crypto/subtle" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/subtle" +) + +// reflection: allow interpreted code to import "crypto/subtle" +func init() { + Packages["crypto/subtle"] = Package{ + Binds: map[string]Value{ + "ConstantTimeByteEq": ValueOf(subtle.ConstantTimeByteEq), + "ConstantTimeCompare": ValueOf(subtle.ConstantTimeCompare), + "ConstantTimeCopy": ValueOf(subtle.ConstantTimeCopy), + "ConstantTimeEq": ValueOf(subtle.ConstantTimeEq), + "ConstantTimeLessOrEq": ValueOf(subtle.ConstantTimeLessOrEq), + "ConstantTimeSelect": ValueOf(subtle.ConstantTimeSelect), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_tls.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_tls.go new file mode 100644 index 0000000..32e0020 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_tls.go @@ -0,0 +1,109 @@ +// this file was generated by gomacro command: import _b "crypto/tls" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/tls" +) + +// reflection: allow interpreted code to import "crypto/tls" +func init() { + Packages["crypto/tls"] = Package{ + Binds: map[string]Value{ + "Client": ValueOf(tls.Client), + "CurveP256": ValueOf(tls.CurveP256), + "CurveP384": ValueOf(tls.CurveP384), + "CurveP521": ValueOf(tls.CurveP521), + "Dial": ValueOf(tls.Dial), + "DialWithDialer": ValueOf(tls.DialWithDialer), + "ECDSAWithP256AndSHA256": ValueOf(tls.ECDSAWithP256AndSHA256), + "ECDSAWithP384AndSHA384": ValueOf(tls.ECDSAWithP384AndSHA384), + "ECDSAWithP521AndSHA512": ValueOf(tls.ECDSAWithP521AndSHA512), + "Listen": ValueOf(tls.Listen), + "LoadX509KeyPair": ValueOf(tls.LoadX509KeyPair), + "NewLRUClientSessionCache": ValueOf(tls.NewLRUClientSessionCache), + "NewListener": ValueOf(tls.NewListener), + "NoClientCert": ValueOf(tls.NoClientCert), + "PKCS1WithSHA1": ValueOf(tls.PKCS1WithSHA1), + "PKCS1WithSHA256": ValueOf(tls.PKCS1WithSHA256), + "PKCS1WithSHA384": ValueOf(tls.PKCS1WithSHA384), + "PKCS1WithSHA512": ValueOf(tls.PKCS1WithSHA512), + "PSSWithSHA256": ValueOf(tls.PSSWithSHA256), + "PSSWithSHA384": ValueOf(tls.PSSWithSHA384), + "PSSWithSHA512": ValueOf(tls.PSSWithSHA512), + "RenegotiateFreelyAsClient": ValueOf(tls.RenegotiateFreelyAsClient), + "RenegotiateNever": ValueOf(tls.RenegotiateNever), + "RenegotiateOnceAsClient": ValueOf(tls.RenegotiateOnceAsClient), + "RequestClientCert": ValueOf(tls.RequestClientCert), + "RequireAndVerifyClientCert": ValueOf(tls.RequireAndVerifyClientCert), + "RequireAnyClientCert": ValueOf(tls.RequireAnyClientCert), + "Server": ValueOf(tls.Server), + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA": ValueOf(tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA), + "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256": ValueOf(tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256), + "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256": ValueOf(tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256), + "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA": ValueOf(tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA), + "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384": ValueOf(tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384), + "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305": ValueOf(tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305), + "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA": ValueOf(tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA), + "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA": ValueOf(tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA), + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA": ValueOf(tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA), + "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256": ValueOf(tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256), + "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256": ValueOf(tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256), + "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA": ValueOf(tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA), + "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384": ValueOf(tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384), + "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305": ValueOf(tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305), + "TLS_ECDHE_RSA_WITH_RC4_128_SHA": ValueOf(tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA), + "TLS_FALLBACK_SCSV": ValueOf(tls.TLS_FALLBACK_SCSV), + "TLS_RSA_WITH_3DES_EDE_CBC_SHA": ValueOf(tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA), + "TLS_RSA_WITH_AES_128_CBC_SHA": ValueOf(tls.TLS_RSA_WITH_AES_128_CBC_SHA), + "TLS_RSA_WITH_AES_128_CBC_SHA256": ValueOf(tls.TLS_RSA_WITH_AES_128_CBC_SHA256), + "TLS_RSA_WITH_AES_128_GCM_SHA256": ValueOf(tls.TLS_RSA_WITH_AES_128_GCM_SHA256), + "TLS_RSA_WITH_AES_256_CBC_SHA": ValueOf(tls.TLS_RSA_WITH_AES_256_CBC_SHA), + "TLS_RSA_WITH_AES_256_GCM_SHA384": ValueOf(tls.TLS_RSA_WITH_AES_256_GCM_SHA384), + "TLS_RSA_WITH_RC4_128_SHA": ValueOf(tls.TLS_RSA_WITH_RC4_128_SHA), + "VerifyClientCertIfGiven": ValueOf(tls.VerifyClientCertIfGiven), + "VersionSSL30": ValueOf(tls.VersionSSL30), + "VersionTLS10": ValueOf(tls.VersionTLS10), + "VersionTLS11": ValueOf(tls.VersionTLS11), + "VersionTLS12": ValueOf(tls.VersionTLS12), + "X25519": ValueOf(tls.X25519), + "X509KeyPair": ValueOf(tls.X509KeyPair), + },Types: map[string]Type{ + "Certificate": TypeOf((*tls.Certificate)(nil)).Elem(), + "CertificateRequestInfo": TypeOf((*tls.CertificateRequestInfo)(nil)).Elem(), + "ClientAuthType": TypeOf((*tls.ClientAuthType)(nil)).Elem(), + "ClientHelloInfo": TypeOf((*tls.ClientHelloInfo)(nil)).Elem(), + "ClientSessionCache": TypeOf((*tls.ClientSessionCache)(nil)).Elem(), + "ClientSessionState": TypeOf((*tls.ClientSessionState)(nil)).Elem(), + "Config": TypeOf((*tls.Config)(nil)).Elem(), + "Conn": TypeOf((*tls.Conn)(nil)).Elem(), + "ConnectionState": TypeOf((*tls.ConnectionState)(nil)).Elem(), + "CurveID": TypeOf((*tls.CurveID)(nil)).Elem(), + "RecordHeaderError": TypeOf((*tls.RecordHeaderError)(nil)).Elem(), + "RenegotiationSupport": TypeOf((*tls.RenegotiationSupport)(nil)).Elem(), + "SignatureScheme": TypeOf((*tls.SignatureScheme)(nil)).Elem(), + },Proxies: map[string]Type{ + "ClientSessionCache": TypeOf((*ClientSessionCache_crypto_tls)(nil)).Elem(), + },Untypeds: map[string]string{ + "VersionSSL30": "int:768", + "VersionTLS10": "int:769", + "VersionTLS11": "int:770", + "VersionTLS12": "int:771", + }, + } +} + +// --------------- proxy for crypto/tls.ClientSessionCache --------------- +type ClientSessionCache_crypto_tls struct { + Object interface{} + Get_ func(_proxy_obj_ interface{}, sessionKey string) (session *tls.ClientSessionState, ok bool) + Put_ func(_proxy_obj_ interface{}, sessionKey string, cs *tls.ClientSessionState) +} +func (Proxy *ClientSessionCache_crypto_tls) Get(sessionKey string) (session *tls.ClientSessionState, ok bool) { + return Proxy.Get_(Proxy.Object, sessionKey) +} +func (Proxy *ClientSessionCache_crypto_tls) Put(sessionKey string, cs *tls.ClientSessionState) { + Proxy.Put_(Proxy.Object, sessionKey, cs) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_x509.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_x509.go new file mode 100644 index 0000000..9bee467 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_x509.go @@ -0,0 +1,108 @@ +// this file was generated by gomacro command: import _b "crypto/x509" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/x509" +) + +// reflection: allow interpreted code to import "crypto/x509" +func init() { + Packages["crypto/x509"] = Package{ + Binds: map[string]Value{ + "CANotAuthorizedForThisName": ValueOf(x509.CANotAuthorizedForThisName), + "CreateCertificate": ValueOf(x509.CreateCertificate), + "CreateCertificateRequest": ValueOf(x509.CreateCertificateRequest), + "DSA": ValueOf(x509.DSA), + "DSAWithSHA1": ValueOf(x509.DSAWithSHA1), + "DSAWithSHA256": ValueOf(x509.DSAWithSHA256), + "DecryptPEMBlock": ValueOf(x509.DecryptPEMBlock), + "ECDSA": ValueOf(x509.ECDSA), + "ECDSAWithSHA1": ValueOf(x509.ECDSAWithSHA1), + "ECDSAWithSHA256": ValueOf(x509.ECDSAWithSHA256), + "ECDSAWithSHA384": ValueOf(x509.ECDSAWithSHA384), + "ECDSAWithSHA512": ValueOf(x509.ECDSAWithSHA512), + "EncryptPEMBlock": ValueOf(x509.EncryptPEMBlock), + "ErrUnsupportedAlgorithm": ValueOf(&x509.ErrUnsupportedAlgorithm).Elem(), + "Expired": ValueOf(x509.Expired), + "ExtKeyUsageAny": ValueOf(x509.ExtKeyUsageAny), + "ExtKeyUsageClientAuth": ValueOf(x509.ExtKeyUsageClientAuth), + "ExtKeyUsageCodeSigning": ValueOf(x509.ExtKeyUsageCodeSigning), + "ExtKeyUsageEmailProtection": ValueOf(x509.ExtKeyUsageEmailProtection), + "ExtKeyUsageIPSECEndSystem": ValueOf(x509.ExtKeyUsageIPSECEndSystem), + "ExtKeyUsageIPSECTunnel": ValueOf(x509.ExtKeyUsageIPSECTunnel), + "ExtKeyUsageIPSECUser": ValueOf(x509.ExtKeyUsageIPSECUser), + "ExtKeyUsageMicrosoftServerGatedCrypto": ValueOf(x509.ExtKeyUsageMicrosoftServerGatedCrypto), + "ExtKeyUsageNetscapeServerGatedCrypto": ValueOf(x509.ExtKeyUsageNetscapeServerGatedCrypto), + "ExtKeyUsageOCSPSigning": ValueOf(x509.ExtKeyUsageOCSPSigning), + "ExtKeyUsageServerAuth": ValueOf(x509.ExtKeyUsageServerAuth), + "ExtKeyUsageTimeStamping": ValueOf(x509.ExtKeyUsageTimeStamping), + "IncompatibleUsage": ValueOf(x509.IncompatibleUsage), + "IncorrectPasswordError": ValueOf(&x509.IncorrectPasswordError).Elem(), + "IsEncryptedPEMBlock": ValueOf(x509.IsEncryptedPEMBlock), + "KeyUsageCRLSign": ValueOf(x509.KeyUsageCRLSign), + "KeyUsageCertSign": ValueOf(x509.KeyUsageCertSign), + "KeyUsageContentCommitment": ValueOf(x509.KeyUsageContentCommitment), + "KeyUsageDataEncipherment": ValueOf(x509.KeyUsageDataEncipherment), + "KeyUsageDecipherOnly": ValueOf(x509.KeyUsageDecipherOnly), + "KeyUsageDigitalSignature": ValueOf(x509.KeyUsageDigitalSignature), + "KeyUsageEncipherOnly": ValueOf(x509.KeyUsageEncipherOnly), + "KeyUsageKeyAgreement": ValueOf(x509.KeyUsageKeyAgreement), + "KeyUsageKeyEncipherment": ValueOf(x509.KeyUsageKeyEncipherment), + "MD2WithRSA": ValueOf(x509.MD2WithRSA), + "MD5WithRSA": ValueOf(x509.MD5WithRSA), + "MarshalECPrivateKey": ValueOf(x509.MarshalECPrivateKey), + "MarshalPKCS1PrivateKey": ValueOf(x509.MarshalPKCS1PrivateKey), + "MarshalPKIXPublicKey": ValueOf(x509.MarshalPKIXPublicKey), + "NameMismatch": ValueOf(x509.NameMismatch), + "NewCertPool": ValueOf(x509.NewCertPool), + "NotAuthorizedToSign": ValueOf(x509.NotAuthorizedToSign), + "PEMCipher3DES": ValueOf(x509.PEMCipher3DES), + "PEMCipherAES128": ValueOf(x509.PEMCipherAES128), + "PEMCipherAES192": ValueOf(x509.PEMCipherAES192), + "PEMCipherAES256": ValueOf(x509.PEMCipherAES256), + "PEMCipherDES": ValueOf(x509.PEMCipherDES), + "ParseCRL": ValueOf(x509.ParseCRL), + "ParseCertificate": ValueOf(x509.ParseCertificate), + "ParseCertificateRequest": ValueOf(x509.ParseCertificateRequest), + "ParseCertificates": ValueOf(x509.ParseCertificates), + "ParseDERCRL": ValueOf(x509.ParseDERCRL), + "ParseECPrivateKey": ValueOf(x509.ParseECPrivateKey), + "ParsePKCS1PrivateKey": ValueOf(x509.ParsePKCS1PrivateKey), + "ParsePKCS8PrivateKey": ValueOf(x509.ParsePKCS8PrivateKey), + "ParsePKIXPublicKey": ValueOf(x509.ParsePKIXPublicKey), + "RSA": ValueOf(x509.RSA), + "SHA1WithRSA": ValueOf(x509.SHA1WithRSA), + "SHA256WithRSA": ValueOf(x509.SHA256WithRSA), + "SHA256WithRSAPSS": ValueOf(x509.SHA256WithRSAPSS), + "SHA384WithRSA": ValueOf(x509.SHA384WithRSA), + "SHA384WithRSAPSS": ValueOf(x509.SHA384WithRSAPSS), + "SHA512WithRSA": ValueOf(x509.SHA512WithRSA), + "SHA512WithRSAPSS": ValueOf(x509.SHA512WithRSAPSS), + "SystemCertPool": ValueOf(x509.SystemCertPool), + "TooManyIntermediates": ValueOf(x509.TooManyIntermediates), + "UnknownPublicKeyAlgorithm": ValueOf(x509.UnknownPublicKeyAlgorithm), + "UnknownSignatureAlgorithm": ValueOf(x509.UnknownSignatureAlgorithm), + },Types: map[string]Type{ + "CertPool": TypeOf((*x509.CertPool)(nil)).Elem(), + "Certificate": TypeOf((*x509.Certificate)(nil)).Elem(), + "CertificateInvalidError": TypeOf((*x509.CertificateInvalidError)(nil)).Elem(), + "CertificateRequest": TypeOf((*x509.CertificateRequest)(nil)).Elem(), + "ConstraintViolationError": TypeOf((*x509.ConstraintViolationError)(nil)).Elem(), + "ExtKeyUsage": TypeOf((*x509.ExtKeyUsage)(nil)).Elem(), + "HostnameError": TypeOf((*x509.HostnameError)(nil)).Elem(), + "InsecureAlgorithmError": TypeOf((*x509.InsecureAlgorithmError)(nil)).Elem(), + "InvalidReason": TypeOf((*x509.InvalidReason)(nil)).Elem(), + "KeyUsage": TypeOf((*x509.KeyUsage)(nil)).Elem(), + "PEMCipher": TypeOf((*x509.PEMCipher)(nil)).Elem(), + "PublicKeyAlgorithm": TypeOf((*x509.PublicKeyAlgorithm)(nil)).Elem(), + "SignatureAlgorithm": TypeOf((*x509.SignatureAlgorithm)(nil)).Elem(), + "SystemRootsError": TypeOf((*x509.SystemRootsError)(nil)).Elem(), + "UnhandledCriticalExtension": TypeOf((*x509.UnhandledCriticalExtension)(nil)).Elem(), + "UnknownAuthorityError": TypeOf((*x509.UnknownAuthorityError)(nil)).Elem(), + "VerifyOptions": TypeOf((*x509.VerifyOptions)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/crypto_x509_pkix.go b/vendor/github.com/cosmos72/gomacro/imports/crypto_x509_pkix.go new file mode 100644 index 0000000..4c1fa75 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/crypto_x509_pkix.go @@ -0,0 +1,27 @@ +// this file was generated by gomacro command: import _b "crypto/x509/pkix" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "crypto/x509/pkix" +) + +// reflection: allow interpreted code to import "crypto/x509/pkix" +func init() { + Packages["crypto/x509/pkix"] = Package{ + Types: map[string]Type{ + "AlgorithmIdentifier": TypeOf((*pkix.AlgorithmIdentifier)(nil)).Elem(), + "AttributeTypeAndValue": TypeOf((*pkix.AttributeTypeAndValue)(nil)).Elem(), + "AttributeTypeAndValueSET": TypeOf((*pkix.AttributeTypeAndValueSET)(nil)).Elem(), + "CertificateList": TypeOf((*pkix.CertificateList)(nil)).Elem(), + "Extension": TypeOf((*pkix.Extension)(nil)).Elem(), + "Name": TypeOf((*pkix.Name)(nil)).Elem(), + "RDNSequence": TypeOf((*pkix.RDNSequence)(nil)).Elem(), + "RelativeDistinguishedNameSET": TypeOf((*pkix.RelativeDistinguishedNameSET)(nil)).Elem(), + "RevokedCertificate": TypeOf((*pkix.RevokedCertificate)(nil)).Elem(), + "TBSCertificateList": TypeOf((*pkix.TBSCertificateList)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/database_sql.go b/vendor/github.com/cosmos72/gomacro/imports/database_sql.go new file mode 100644 index 0000000..a996886 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/database_sql.go @@ -0,0 +1,74 @@ +// this file was generated by gomacro command: import _b "database/sql" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "database/sql" +) + +// reflection: allow interpreted code to import "database/sql" +func init() { + Packages["database/sql"] = Package{ + Binds: map[string]Value{ + "Drivers": ValueOf(sql.Drivers), + "ErrNoRows": ValueOf(&sql.ErrNoRows).Elem(), + "ErrTxDone": ValueOf(&sql.ErrTxDone).Elem(), + "LevelDefault": ValueOf(sql.LevelDefault), + "LevelLinearizable": ValueOf(sql.LevelLinearizable), + "LevelReadCommitted": ValueOf(sql.LevelReadCommitted), + "LevelReadUncommitted": ValueOf(sql.LevelReadUncommitted), + "LevelRepeatableRead": ValueOf(sql.LevelRepeatableRead), + "LevelSerializable": ValueOf(sql.LevelSerializable), + "LevelSnapshot": ValueOf(sql.LevelSnapshot), + "LevelWriteCommitted": ValueOf(sql.LevelWriteCommitted), + "Named": ValueOf(sql.Named), + "Open": ValueOf(sql.Open), + "Register": ValueOf(sql.Register), + },Types: map[string]Type{ + "ColumnType": TypeOf((*sql.ColumnType)(nil)).Elem(), + "DB": TypeOf((*sql.DB)(nil)).Elem(), + "DBStats": TypeOf((*sql.DBStats)(nil)).Elem(), + "IsolationLevel": TypeOf((*sql.IsolationLevel)(nil)).Elem(), + "NamedArg": TypeOf((*sql.NamedArg)(nil)).Elem(), + "NullBool": TypeOf((*sql.NullBool)(nil)).Elem(), + "NullFloat64": TypeOf((*sql.NullFloat64)(nil)).Elem(), + "NullInt64": TypeOf((*sql.NullInt64)(nil)).Elem(), + "NullString": TypeOf((*sql.NullString)(nil)).Elem(), + "RawBytes": TypeOf((*sql.RawBytes)(nil)).Elem(), + "Result": TypeOf((*sql.Result)(nil)).Elem(), + "Row": TypeOf((*sql.Row)(nil)).Elem(), + "Rows": TypeOf((*sql.Rows)(nil)).Elem(), + "Scanner": TypeOf((*sql.Scanner)(nil)).Elem(), + "Stmt": TypeOf((*sql.Stmt)(nil)).Elem(), + "Tx": TypeOf((*sql.Tx)(nil)).Elem(), + "TxOptions": TypeOf((*sql.TxOptions)(nil)).Elem(), + },Proxies: map[string]Type{ + "Result": TypeOf((*Result_database_sql)(nil)).Elem(), + "Scanner": TypeOf((*Scanner_database_sql)(nil)).Elem(), + }, + } +} + +// --------------- proxy for database/sql.Result --------------- +type Result_database_sql struct { + Object interface{} + LastInsertId_ func(interface{}) (int64, error) + RowsAffected_ func(interface{}) (int64, error) +} +func (Proxy *Result_database_sql) LastInsertId() (int64, error) { + return Proxy.LastInsertId_(Proxy.Object) +} +func (Proxy *Result_database_sql) RowsAffected() (int64, error) { + return Proxy.RowsAffected_(Proxy.Object) +} + +// --------------- proxy for database/sql.Scanner --------------- +type Scanner_database_sql struct { + Object interface{} + Scan_ func(_proxy_obj_ interface{}, src interface{}) error +} +func (Proxy *Scanner_database_sql) Scan(src interface{}) error { + return Proxy.Scan_(Proxy.Object, src) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/database_sql_driver.go b/vendor/github.com/cosmos72/gomacro/imports/database_sql_driver.go new file mode 100644 index 0000000..788433f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/database_sql_driver.go @@ -0,0 +1,419 @@ +// this file was generated by gomacro command: import _b "database/sql/driver" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "context" + "database/sql/driver" + "reflect" +) + +// reflection: allow interpreted code to import "database/sql/driver" +func init() { + Packages["database/sql/driver"] = Package{ + Binds: map[string]Value{ + "Bool": ValueOf(&driver.Bool).Elem(), + "DefaultParameterConverter": ValueOf(&driver.DefaultParameterConverter).Elem(), + "ErrBadConn": ValueOf(&driver.ErrBadConn).Elem(), + "ErrSkip": ValueOf(&driver.ErrSkip).Elem(), + "Int32": ValueOf(&driver.Int32).Elem(), + "IsScanValue": ValueOf(driver.IsScanValue), + "IsValue": ValueOf(driver.IsValue), + "ResultNoRows": ValueOf(&driver.ResultNoRows).Elem(), + "String": ValueOf(&driver.String).Elem(), + },Types: map[string]Type{ + "ColumnConverter": TypeOf((*driver.ColumnConverter)(nil)).Elem(), + "Conn": TypeOf((*driver.Conn)(nil)).Elem(), + "ConnBeginTx": TypeOf((*driver.ConnBeginTx)(nil)).Elem(), + "ConnPrepareContext": TypeOf((*driver.ConnPrepareContext)(nil)).Elem(), + "Driver": TypeOf((*driver.Driver)(nil)).Elem(), + "Execer": TypeOf((*driver.Execer)(nil)).Elem(), + "ExecerContext": TypeOf((*driver.ExecerContext)(nil)).Elem(), + "IsolationLevel": TypeOf((*driver.IsolationLevel)(nil)).Elem(), + "NamedValue": TypeOf((*driver.NamedValue)(nil)).Elem(), + "NotNull": TypeOf((*driver.NotNull)(nil)).Elem(), + "Null": TypeOf((*driver.Null)(nil)).Elem(), + "Pinger": TypeOf((*driver.Pinger)(nil)).Elem(), + "Queryer": TypeOf((*driver.Queryer)(nil)).Elem(), + "QueryerContext": TypeOf((*driver.QueryerContext)(nil)).Elem(), + "Result": TypeOf((*driver.Result)(nil)).Elem(), + "Rows": TypeOf((*driver.Rows)(nil)).Elem(), + "RowsAffected": TypeOf((*driver.RowsAffected)(nil)).Elem(), + "RowsColumnTypeDatabaseTypeName": TypeOf((*driver.RowsColumnTypeDatabaseTypeName)(nil)).Elem(), + "RowsColumnTypeLength": TypeOf((*driver.RowsColumnTypeLength)(nil)).Elem(), + "RowsColumnTypeNullable": TypeOf((*driver.RowsColumnTypeNullable)(nil)).Elem(), + "RowsColumnTypePrecisionScale": TypeOf((*driver.RowsColumnTypePrecisionScale)(nil)).Elem(), + "RowsColumnTypeScanType": TypeOf((*driver.RowsColumnTypeScanType)(nil)).Elem(), + "RowsNextResultSet": TypeOf((*driver.RowsNextResultSet)(nil)).Elem(), + "Stmt": TypeOf((*driver.Stmt)(nil)).Elem(), + "StmtExecContext": TypeOf((*driver.StmtExecContext)(nil)).Elem(), + "StmtQueryContext": TypeOf((*driver.StmtQueryContext)(nil)).Elem(), + "Tx": TypeOf((*driver.Tx)(nil)).Elem(), + "TxOptions": TypeOf((*driver.TxOptions)(nil)).Elem(), + "Value": TypeOf((*driver.Value)(nil)).Elem(), + "ValueConverter": TypeOf((*driver.ValueConverter)(nil)).Elem(), + "Valuer": TypeOf((*driver.Valuer)(nil)).Elem(), + },Proxies: map[string]Type{ + "ColumnConverter": TypeOf((*ColumnConverter_database_sql_driver)(nil)).Elem(), + "Conn": TypeOf((*Conn_database_sql_driver)(nil)).Elem(), + "ConnBeginTx": TypeOf((*ConnBeginTx_database_sql_driver)(nil)).Elem(), + "ConnPrepareContext": TypeOf((*ConnPrepareContext_database_sql_driver)(nil)).Elem(), + "Driver": TypeOf((*Driver_database_sql_driver)(nil)).Elem(), + "Execer": TypeOf((*Execer_database_sql_driver)(nil)).Elem(), + "ExecerContext": TypeOf((*ExecerContext_database_sql_driver)(nil)).Elem(), + "Pinger": TypeOf((*Pinger_database_sql_driver)(nil)).Elem(), + "Queryer": TypeOf((*Queryer_database_sql_driver)(nil)).Elem(), + "QueryerContext": TypeOf((*QueryerContext_database_sql_driver)(nil)).Elem(), + "Result": TypeOf((*Result_database_sql_driver)(nil)).Elem(), + "Rows": TypeOf((*Rows_database_sql_driver)(nil)).Elem(), + "RowsColumnTypeDatabaseTypeName": TypeOf((*RowsColumnTypeDatabaseTypeName_database_sql_driver)(nil)).Elem(), + "RowsColumnTypeLength": TypeOf((*RowsColumnTypeLength_database_sql_driver)(nil)).Elem(), + "RowsColumnTypeNullable": TypeOf((*RowsColumnTypeNullable_database_sql_driver)(nil)).Elem(), + "RowsColumnTypePrecisionScale": TypeOf((*RowsColumnTypePrecisionScale_database_sql_driver)(nil)).Elem(), + "RowsColumnTypeScanType": TypeOf((*RowsColumnTypeScanType_database_sql_driver)(nil)).Elem(), + "RowsNextResultSet": TypeOf((*RowsNextResultSet_database_sql_driver)(nil)).Elem(), + "Stmt": TypeOf((*Stmt_database_sql_driver)(nil)).Elem(), + "StmtExecContext": TypeOf((*StmtExecContext_database_sql_driver)(nil)).Elem(), + "StmtQueryContext": TypeOf((*StmtQueryContext_database_sql_driver)(nil)).Elem(), + "Tx": TypeOf((*Tx_database_sql_driver)(nil)).Elem(), + "Value": TypeOf((*Value_database_sql_driver)(nil)).Elem(), + "ValueConverter": TypeOf((*ValueConverter_database_sql_driver)(nil)).Elem(), + "Valuer": TypeOf((*Valuer_database_sql_driver)(nil)).Elem(), + }, + } +} + +// --------------- proxy for database/sql/driver.ColumnConverter --------------- +type ColumnConverter_database_sql_driver struct { + Object interface{} + ColumnConverter_ func(_proxy_obj_ interface{}, idx int) driver.ValueConverter +} +func (Proxy *ColumnConverter_database_sql_driver) ColumnConverter(idx int) driver.ValueConverter { + return Proxy.ColumnConverter_(Proxy.Object, idx) +} + +// --------------- proxy for database/sql/driver.Conn --------------- +type Conn_database_sql_driver struct { + Object interface{} + Begin_ func(interface{}) (driver.Tx, error) + Close_ func(interface{}) error + Prepare_ func(_proxy_obj_ interface{}, query string) (driver.Stmt, error) +} +func (Proxy *Conn_database_sql_driver) Begin() (driver.Tx, error) { + return Proxy.Begin_(Proxy.Object) +} +func (Proxy *Conn_database_sql_driver) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *Conn_database_sql_driver) Prepare(query string) (driver.Stmt, error) { + return Proxy.Prepare_(Proxy.Object, query) +} + +// --------------- proxy for database/sql/driver.ConnBeginTx --------------- +type ConnBeginTx_database_sql_driver struct { + Object interface{} + BeginTx_ func(_proxy_obj_ interface{}, ctx context.Context, opts driver.TxOptions) (driver.Tx, error) +} +func (Proxy *ConnBeginTx_database_sql_driver) BeginTx(ctx context.Context, opts driver.TxOptions) (driver.Tx, error) { + return Proxy.BeginTx_(Proxy.Object, ctx, opts) +} + +// --------------- proxy for database/sql/driver.ConnPrepareContext --------------- +type ConnPrepareContext_database_sql_driver struct { + Object interface{} + PrepareContext_ func(_proxy_obj_ interface{}, ctx context.Context, query string) (driver.Stmt, error) +} +func (Proxy *ConnPrepareContext_database_sql_driver) PrepareContext(ctx context.Context, query string) (driver.Stmt, error) { + return Proxy.PrepareContext_(Proxy.Object, ctx, query) +} + +// --------------- proxy for database/sql/driver.Driver --------------- +type Driver_database_sql_driver struct { + Object interface{} + Open_ func(_proxy_obj_ interface{}, name string) (driver.Conn, error) +} +func (Proxy *Driver_database_sql_driver) Open(name string) (driver.Conn, error) { + return Proxy.Open_(Proxy.Object, name) +} + +// --------------- proxy for database/sql/driver.Execer --------------- +type Execer_database_sql_driver struct { + Object interface{} + Exec_ func(_proxy_obj_ interface{}, query string, args []driver.Value) (driver.Result, error) +} +func (Proxy *Execer_database_sql_driver) Exec(query string, args []driver.Value) (driver.Result, error) { + return Proxy.Exec_(Proxy.Object, query, args) +} + +// --------------- proxy for database/sql/driver.ExecerContext --------------- +type ExecerContext_database_sql_driver struct { + Object interface{} + ExecContext_ func(_proxy_obj_ interface{}, ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) +} +func (Proxy *ExecerContext_database_sql_driver) ExecContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Result, error) { + return Proxy.ExecContext_(Proxy.Object, ctx, query, args) +} + +// --------------- proxy for database/sql/driver.Pinger --------------- +type Pinger_database_sql_driver struct { + Object interface{} + Ping_ func(_proxy_obj_ interface{}, ctx context.Context) error +} +func (Proxy *Pinger_database_sql_driver) Ping(ctx context.Context) error { + return Proxy.Ping_(Proxy.Object, ctx) +} + +// --------------- proxy for database/sql/driver.Queryer --------------- +type Queryer_database_sql_driver struct { + Object interface{} + Query_ func(_proxy_obj_ interface{}, query string, args []driver.Value) (driver.Rows, error) +} +func (Proxy *Queryer_database_sql_driver) Query(query string, args []driver.Value) (driver.Rows, error) { + return Proxy.Query_(Proxy.Object, query, args) +} + +// --------------- proxy for database/sql/driver.QueryerContext --------------- +type QueryerContext_database_sql_driver struct { + Object interface{} + QueryContext_ func(_proxy_obj_ interface{}, ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) +} +func (Proxy *QueryerContext_database_sql_driver) QueryContext(ctx context.Context, query string, args []driver.NamedValue) (driver.Rows, error) { + return Proxy.QueryContext_(Proxy.Object, ctx, query, args) +} + +// --------------- proxy for database/sql/driver.Result --------------- +type Result_database_sql_driver struct { + Object interface{} + LastInsertId_ func(interface{}) (int64, error) + RowsAffected_ func(interface{}) (int64, error) +} +func (Proxy *Result_database_sql_driver) LastInsertId() (int64, error) { + return Proxy.LastInsertId_(Proxy.Object) +} +func (Proxy *Result_database_sql_driver) RowsAffected() (int64, error) { + return Proxy.RowsAffected_(Proxy.Object) +} + +// --------------- proxy for database/sql/driver.Rows --------------- +type Rows_database_sql_driver struct { + Object interface{} + Close_ func(interface{}) error + Columns_ func(interface{}) []string + Next_ func(_proxy_obj_ interface{}, dest []driver.Value) error +} +func (Proxy *Rows_database_sql_driver) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *Rows_database_sql_driver) Columns() []string { + return Proxy.Columns_(Proxy.Object) +} +func (Proxy *Rows_database_sql_driver) Next(dest []driver.Value) error { + return Proxy.Next_(Proxy.Object, dest) +} + +// --------------- proxy for database/sql/driver.RowsColumnTypeDatabaseTypeName --------------- +type RowsColumnTypeDatabaseTypeName_database_sql_driver struct { + Object interface{} + Close_ func(interface{}) error + ColumnTypeDatabaseTypeName_ func(_proxy_obj_ interface{}, index int) string + Columns_ func(interface{}) []string + Next_ func(_proxy_obj_ interface{}, dest []driver.Value) error +} +func (Proxy *RowsColumnTypeDatabaseTypeName_database_sql_driver) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *RowsColumnTypeDatabaseTypeName_database_sql_driver) ColumnTypeDatabaseTypeName(index int) string { + return Proxy.ColumnTypeDatabaseTypeName_(Proxy.Object, index) +} +func (Proxy *RowsColumnTypeDatabaseTypeName_database_sql_driver) Columns() []string { + return Proxy.Columns_(Proxy.Object) +} +func (Proxy *RowsColumnTypeDatabaseTypeName_database_sql_driver) Next(dest []driver.Value) error { + return Proxy.Next_(Proxy.Object, dest) +} + +// --------------- proxy for database/sql/driver.RowsColumnTypeLength --------------- +type RowsColumnTypeLength_database_sql_driver struct { + Object interface{} + Close_ func(interface{}) error + ColumnTypeLength_ func(_proxy_obj_ interface{}, index int) (length int64, ok bool) + Columns_ func(interface{}) []string + Next_ func(_proxy_obj_ interface{}, dest []driver.Value) error +} +func (Proxy *RowsColumnTypeLength_database_sql_driver) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *RowsColumnTypeLength_database_sql_driver) ColumnTypeLength(index int) (length int64, ok bool) { + return Proxy.ColumnTypeLength_(Proxy.Object, index) +} +func (Proxy *RowsColumnTypeLength_database_sql_driver) Columns() []string { + return Proxy.Columns_(Proxy.Object) +} +func (Proxy *RowsColumnTypeLength_database_sql_driver) Next(dest []driver.Value) error { + return Proxy.Next_(Proxy.Object, dest) +} + +// --------------- proxy for database/sql/driver.RowsColumnTypeNullable --------------- +type RowsColumnTypeNullable_database_sql_driver struct { + Object interface{} + Close_ func(interface{}) error + ColumnTypeNullable_ func(_proxy_obj_ interface{}, index int) (nullable bool, ok bool) + Columns_ func(interface{}) []string + Next_ func(_proxy_obj_ interface{}, dest []driver.Value) error +} +func (Proxy *RowsColumnTypeNullable_database_sql_driver) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *RowsColumnTypeNullable_database_sql_driver) ColumnTypeNullable(index int) (nullable bool, ok bool) { + return Proxy.ColumnTypeNullable_(Proxy.Object, index) +} +func (Proxy *RowsColumnTypeNullable_database_sql_driver) Columns() []string { + return Proxy.Columns_(Proxy.Object) +} +func (Proxy *RowsColumnTypeNullable_database_sql_driver) Next(dest []driver.Value) error { + return Proxy.Next_(Proxy.Object, dest) +} + +// --------------- proxy for database/sql/driver.RowsColumnTypePrecisionScale --------------- +type RowsColumnTypePrecisionScale_database_sql_driver struct { + Object interface{} + Close_ func(interface{}) error + ColumnTypePrecisionScale_ func(_proxy_obj_ interface{}, index int) (precision int64, scale int64, ok bool) + Columns_ func(interface{}) []string + Next_ func(_proxy_obj_ interface{}, dest []driver.Value) error +} +func (Proxy *RowsColumnTypePrecisionScale_database_sql_driver) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *RowsColumnTypePrecisionScale_database_sql_driver) ColumnTypePrecisionScale(index int) (precision int64, scale int64, ok bool) { + return Proxy.ColumnTypePrecisionScale_(Proxy.Object, index) +} +func (Proxy *RowsColumnTypePrecisionScale_database_sql_driver) Columns() []string { + return Proxy.Columns_(Proxy.Object) +} +func (Proxy *RowsColumnTypePrecisionScale_database_sql_driver) Next(dest []driver.Value) error { + return Proxy.Next_(Proxy.Object, dest) +} + +// --------------- proxy for database/sql/driver.RowsColumnTypeScanType --------------- +type RowsColumnTypeScanType_database_sql_driver struct { + Object interface{} + Close_ func(interface{}) error + ColumnTypeScanType_ func(_proxy_obj_ interface{}, index int) reflect.Type + Columns_ func(interface{}) []string + Next_ func(_proxy_obj_ interface{}, dest []driver.Value) error +} +func (Proxy *RowsColumnTypeScanType_database_sql_driver) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *RowsColumnTypeScanType_database_sql_driver) ColumnTypeScanType(index int) reflect.Type { + return Proxy.ColumnTypeScanType_(Proxy.Object, index) +} +func (Proxy *RowsColumnTypeScanType_database_sql_driver) Columns() []string { + return Proxy.Columns_(Proxy.Object) +} +func (Proxy *RowsColumnTypeScanType_database_sql_driver) Next(dest []driver.Value) error { + return Proxy.Next_(Proxy.Object, dest) +} + +// --------------- proxy for database/sql/driver.RowsNextResultSet --------------- +type RowsNextResultSet_database_sql_driver struct { + Object interface{} + Close_ func(interface{}) error + Columns_ func(interface{}) []string + HasNextResultSet_ func(interface{}) bool + Next_ func(_proxy_obj_ interface{}, dest []driver.Value) error + NextResultSet_ func(interface{}) error +} +func (Proxy *RowsNextResultSet_database_sql_driver) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *RowsNextResultSet_database_sql_driver) Columns() []string { + return Proxy.Columns_(Proxy.Object) +} +func (Proxy *RowsNextResultSet_database_sql_driver) HasNextResultSet() bool { + return Proxy.HasNextResultSet_(Proxy.Object) +} +func (Proxy *RowsNextResultSet_database_sql_driver) Next(dest []driver.Value) error { + return Proxy.Next_(Proxy.Object, dest) +} +func (Proxy *RowsNextResultSet_database_sql_driver) NextResultSet() error { + return Proxy.NextResultSet_(Proxy.Object) +} + +// --------------- proxy for database/sql/driver.Stmt --------------- +type Stmt_database_sql_driver struct { + Object interface{} + Close_ func(interface{}) error + Exec_ func(_proxy_obj_ interface{}, args []driver.Value) (driver.Result, error) + NumInput_ func(interface{}) int + Query_ func(_proxy_obj_ interface{}, args []driver.Value) (driver.Rows, error) +} +func (Proxy *Stmt_database_sql_driver) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *Stmt_database_sql_driver) Exec(args []driver.Value) (driver.Result, error) { + return Proxy.Exec_(Proxy.Object, args) +} +func (Proxy *Stmt_database_sql_driver) NumInput() int { + return Proxy.NumInput_(Proxy.Object) +} +func (Proxy *Stmt_database_sql_driver) Query(args []driver.Value) (driver.Rows, error) { + return Proxy.Query_(Proxy.Object, args) +} + +// --------------- proxy for database/sql/driver.StmtExecContext --------------- +type StmtExecContext_database_sql_driver struct { + Object interface{} + ExecContext_ func(_proxy_obj_ interface{}, ctx context.Context, args []driver.NamedValue) (driver.Result, error) +} +func (Proxy *StmtExecContext_database_sql_driver) ExecContext(ctx context.Context, args []driver.NamedValue) (driver.Result, error) { + return Proxy.ExecContext_(Proxy.Object, ctx, args) +} + +// --------------- proxy for database/sql/driver.StmtQueryContext --------------- +type StmtQueryContext_database_sql_driver struct { + Object interface{} + QueryContext_ func(_proxy_obj_ interface{}, ctx context.Context, args []driver.NamedValue) (driver.Rows, error) +} +func (Proxy *StmtQueryContext_database_sql_driver) QueryContext(ctx context.Context, args []driver.NamedValue) (driver.Rows, error) { + return Proxy.QueryContext_(Proxy.Object, ctx, args) +} + +// --------------- proxy for database/sql/driver.Tx --------------- +type Tx_database_sql_driver struct { + Object interface{} + Commit_ func(interface{}) error + Rollback_ func(interface{}) error +} +func (Proxy *Tx_database_sql_driver) Commit() error { + return Proxy.Commit_(Proxy.Object) +} +func (Proxy *Tx_database_sql_driver) Rollback() error { + return Proxy.Rollback_(Proxy.Object) +} + +// --------------- proxy for database/sql/driver.Value --------------- +type Value_database_sql_driver struct { + Object interface{} +} + +// --------------- proxy for database/sql/driver.ValueConverter --------------- +type ValueConverter_database_sql_driver struct { + Object interface{} + ConvertValue_ func(_proxy_obj_ interface{}, v interface{}) (driver.Value, error) +} +func (Proxy *ValueConverter_database_sql_driver) ConvertValue(v interface{}) (driver.Value, error) { + return Proxy.ConvertValue_(Proxy.Object, v) +} + +// --------------- proxy for database/sql/driver.Valuer --------------- +type Valuer_database_sql_driver struct { + Object interface{} + Value_ func(interface{}) (driver.Value, error) +} +func (Proxy *Valuer_database_sql_driver) Value() (driver.Value, error) { + return Proxy.Value_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/debug_dwarf.go b/vendor/github.com/cosmos72/gomacro/imports/debug_dwarf.go new file mode 100644 index 0000000..96c3ca9 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/debug_dwarf.go @@ -0,0 +1,243 @@ +// this file was generated by gomacro command: import _b "debug/dwarf" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "debug/dwarf" +) + +// reflection: allow interpreted code to import "debug/dwarf" +func init() { + Packages["debug/dwarf"] = Package{ + Binds: map[string]Value{ + "AttrAbstractOrigin": ValueOf(dwarf.AttrAbstractOrigin), + "AttrAccessibility": ValueOf(dwarf.AttrAccessibility), + "AttrAddrClass": ValueOf(dwarf.AttrAddrClass), + "AttrAllocated": ValueOf(dwarf.AttrAllocated), + "AttrArtificial": ValueOf(dwarf.AttrArtificial), + "AttrAssociated": ValueOf(dwarf.AttrAssociated), + "AttrBaseTypes": ValueOf(dwarf.AttrBaseTypes), + "AttrBitOffset": ValueOf(dwarf.AttrBitOffset), + "AttrBitSize": ValueOf(dwarf.AttrBitSize), + "AttrByteSize": ValueOf(dwarf.AttrByteSize), + "AttrCallColumn": ValueOf(dwarf.AttrCallColumn), + "AttrCallFile": ValueOf(dwarf.AttrCallFile), + "AttrCallLine": ValueOf(dwarf.AttrCallLine), + "AttrCalling": ValueOf(dwarf.AttrCalling), + "AttrCommonRef": ValueOf(dwarf.AttrCommonRef), + "AttrCompDir": ValueOf(dwarf.AttrCompDir), + "AttrConstValue": ValueOf(dwarf.AttrConstValue), + "AttrContainingType": ValueOf(dwarf.AttrContainingType), + "AttrCount": ValueOf(dwarf.AttrCount), + "AttrDataLocation": ValueOf(dwarf.AttrDataLocation), + "AttrDataMemberLoc": ValueOf(dwarf.AttrDataMemberLoc), + "AttrDeclColumn": ValueOf(dwarf.AttrDeclColumn), + "AttrDeclFile": ValueOf(dwarf.AttrDeclFile), + "AttrDeclLine": ValueOf(dwarf.AttrDeclLine), + "AttrDeclaration": ValueOf(dwarf.AttrDeclaration), + "AttrDefaultValue": ValueOf(dwarf.AttrDefaultValue), + "AttrDescription": ValueOf(dwarf.AttrDescription), + "AttrDiscr": ValueOf(dwarf.AttrDiscr), + "AttrDiscrList": ValueOf(dwarf.AttrDiscrList), + "AttrDiscrValue": ValueOf(dwarf.AttrDiscrValue), + "AttrEncoding": ValueOf(dwarf.AttrEncoding), + "AttrEntrypc": ValueOf(dwarf.AttrEntrypc), + "AttrExtension": ValueOf(dwarf.AttrExtension), + "AttrExternal": ValueOf(dwarf.AttrExternal), + "AttrFrameBase": ValueOf(dwarf.AttrFrameBase), + "AttrFriend": ValueOf(dwarf.AttrFriend), + "AttrHighpc": ValueOf(dwarf.AttrHighpc), + "AttrIdentifierCase": ValueOf(dwarf.AttrIdentifierCase), + "AttrImport": ValueOf(dwarf.AttrImport), + "AttrInline": ValueOf(dwarf.AttrInline), + "AttrIsOptional": ValueOf(dwarf.AttrIsOptional), + "AttrLanguage": ValueOf(dwarf.AttrLanguage), + "AttrLocation": ValueOf(dwarf.AttrLocation), + "AttrLowerBound": ValueOf(dwarf.AttrLowerBound), + "AttrLowpc": ValueOf(dwarf.AttrLowpc), + "AttrMacroInfo": ValueOf(dwarf.AttrMacroInfo), + "AttrName": ValueOf(dwarf.AttrName), + "AttrNamelistItem": ValueOf(dwarf.AttrNamelistItem), + "AttrOrdering": ValueOf(dwarf.AttrOrdering), + "AttrPriority": ValueOf(dwarf.AttrPriority), + "AttrProducer": ValueOf(dwarf.AttrProducer), + "AttrPrototyped": ValueOf(dwarf.AttrPrototyped), + "AttrRanges": ValueOf(dwarf.AttrRanges), + "AttrReturnAddr": ValueOf(dwarf.AttrReturnAddr), + "AttrSegment": ValueOf(dwarf.AttrSegment), + "AttrSibling": ValueOf(dwarf.AttrSibling), + "AttrSpecification": ValueOf(dwarf.AttrSpecification), + "AttrStartScope": ValueOf(dwarf.AttrStartScope), + "AttrStaticLink": ValueOf(dwarf.AttrStaticLink), + "AttrStmtList": ValueOf(dwarf.AttrStmtList), + "AttrStride": ValueOf(dwarf.AttrStride), + "AttrStrideSize": ValueOf(dwarf.AttrStrideSize), + "AttrStringLength": ValueOf(dwarf.AttrStringLength), + "AttrTrampoline": ValueOf(dwarf.AttrTrampoline), + "AttrType": ValueOf(dwarf.AttrType), + "AttrUpperBound": ValueOf(dwarf.AttrUpperBound), + "AttrUseLocation": ValueOf(dwarf.AttrUseLocation), + "AttrUseUTF8": ValueOf(dwarf.AttrUseUTF8), + "AttrVarParam": ValueOf(dwarf.AttrVarParam), + "AttrVirtuality": ValueOf(dwarf.AttrVirtuality), + "AttrVisibility": ValueOf(dwarf.AttrVisibility), + "AttrVtableElemLoc": ValueOf(dwarf.AttrVtableElemLoc), + "ClassAddress": ValueOf(dwarf.ClassAddress), + "ClassBlock": ValueOf(dwarf.ClassBlock), + "ClassConstant": ValueOf(dwarf.ClassConstant), + "ClassExprLoc": ValueOf(dwarf.ClassExprLoc), + "ClassFlag": ValueOf(dwarf.ClassFlag), + "ClassLinePtr": ValueOf(dwarf.ClassLinePtr), + "ClassLocListPtr": ValueOf(dwarf.ClassLocListPtr), + "ClassMacPtr": ValueOf(dwarf.ClassMacPtr), + "ClassRangeListPtr": ValueOf(dwarf.ClassRangeListPtr), + "ClassReference": ValueOf(dwarf.ClassReference), + "ClassReferenceAlt": ValueOf(dwarf.ClassReferenceAlt), + "ClassReferenceSig": ValueOf(dwarf.ClassReferenceSig), + "ClassString": ValueOf(dwarf.ClassString), + "ClassStringAlt": ValueOf(dwarf.ClassStringAlt), + "ClassUnknown": ValueOf(dwarf.ClassUnknown), + "ErrUnknownPC": ValueOf(&dwarf.ErrUnknownPC).Elem(), + "New": ValueOf(dwarf.New), + "TagAccessDeclaration": ValueOf(dwarf.TagAccessDeclaration), + "TagArrayType": ValueOf(dwarf.TagArrayType), + "TagBaseType": ValueOf(dwarf.TagBaseType), + "TagCatchDwarfBlock": ValueOf(dwarf.TagCatchDwarfBlock), + "TagClassType": ValueOf(dwarf.TagClassType), + "TagCommonDwarfBlock": ValueOf(dwarf.TagCommonDwarfBlock), + "TagCommonInclusion": ValueOf(dwarf.TagCommonInclusion), + "TagCompileUnit": ValueOf(dwarf.TagCompileUnit), + "TagCondition": ValueOf(dwarf.TagCondition), + "TagConstType": ValueOf(dwarf.TagConstType), + "TagConstant": ValueOf(dwarf.TagConstant), + "TagDwarfProcedure": ValueOf(dwarf.TagDwarfProcedure), + "TagEntryPoint": ValueOf(dwarf.TagEntryPoint), + "TagEnumerationType": ValueOf(dwarf.TagEnumerationType), + "TagEnumerator": ValueOf(dwarf.TagEnumerator), + "TagFileType": ValueOf(dwarf.TagFileType), + "TagFormalParameter": ValueOf(dwarf.TagFormalParameter), + "TagFriend": ValueOf(dwarf.TagFriend), + "TagImportedDeclaration": ValueOf(dwarf.TagImportedDeclaration), + "TagImportedModule": ValueOf(dwarf.TagImportedModule), + "TagImportedUnit": ValueOf(dwarf.TagImportedUnit), + "TagInheritance": ValueOf(dwarf.TagInheritance), + "TagInlinedSubroutine": ValueOf(dwarf.TagInlinedSubroutine), + "TagInterfaceType": ValueOf(dwarf.TagInterfaceType), + "TagLabel": ValueOf(dwarf.TagLabel), + "TagLexDwarfBlock": ValueOf(dwarf.TagLexDwarfBlock), + "TagMember": ValueOf(dwarf.TagMember), + "TagModule": ValueOf(dwarf.TagModule), + "TagMutableType": ValueOf(dwarf.TagMutableType), + "TagNamelist": ValueOf(dwarf.TagNamelist), + "TagNamelistItem": ValueOf(dwarf.TagNamelistItem), + "TagNamespace": ValueOf(dwarf.TagNamespace), + "TagPackedType": ValueOf(dwarf.TagPackedType), + "TagPartialUnit": ValueOf(dwarf.TagPartialUnit), + "TagPointerType": ValueOf(dwarf.TagPointerType), + "TagPtrToMemberType": ValueOf(dwarf.TagPtrToMemberType), + "TagReferenceType": ValueOf(dwarf.TagReferenceType), + "TagRestrictType": ValueOf(dwarf.TagRestrictType), + "TagRvalueReferenceType": ValueOf(dwarf.TagRvalueReferenceType), + "TagSetType": ValueOf(dwarf.TagSetType), + "TagSharedType": ValueOf(dwarf.TagSharedType), + "TagStringType": ValueOf(dwarf.TagStringType), + "TagStructType": ValueOf(dwarf.TagStructType), + "TagSubprogram": ValueOf(dwarf.TagSubprogram), + "TagSubrangeType": ValueOf(dwarf.TagSubrangeType), + "TagSubroutineType": ValueOf(dwarf.TagSubroutineType), + "TagTemplateAlias": ValueOf(dwarf.TagTemplateAlias), + "TagTemplateTypeParameter": ValueOf(dwarf.TagTemplateTypeParameter), + "TagTemplateValueParameter": ValueOf(dwarf.TagTemplateValueParameter), + "TagThrownType": ValueOf(dwarf.TagThrownType), + "TagTryDwarfBlock": ValueOf(dwarf.TagTryDwarfBlock), + "TagTypeUnit": ValueOf(dwarf.TagTypeUnit), + "TagTypedef": ValueOf(dwarf.TagTypedef), + "TagUnionType": ValueOf(dwarf.TagUnionType), + "TagUnspecifiedParameters": ValueOf(dwarf.TagUnspecifiedParameters), + "TagUnspecifiedType": ValueOf(dwarf.TagUnspecifiedType), + "TagVariable": ValueOf(dwarf.TagVariable), + "TagVariant": ValueOf(dwarf.TagVariant), + "TagVariantPart": ValueOf(dwarf.TagVariantPart), + "TagVolatileType": ValueOf(dwarf.TagVolatileType), + "TagWithStmt": ValueOf(dwarf.TagWithStmt), + },Types: map[string]Type{ + "AddrType": TypeOf((*dwarf.AddrType)(nil)).Elem(), + "ArrayType": TypeOf((*dwarf.ArrayType)(nil)).Elem(), + "Attr": TypeOf((*dwarf.Attr)(nil)).Elem(), + "BasicType": TypeOf((*dwarf.BasicType)(nil)).Elem(), + "BoolType": TypeOf((*dwarf.BoolType)(nil)).Elem(), + "CharType": TypeOf((*dwarf.CharType)(nil)).Elem(), + "Class": TypeOf((*dwarf.Class)(nil)).Elem(), + "CommonType": TypeOf((*dwarf.CommonType)(nil)).Elem(), + "ComplexType": TypeOf((*dwarf.ComplexType)(nil)).Elem(), + "Data": TypeOf((*dwarf.Data)(nil)).Elem(), + "DecodeError": TypeOf((*dwarf.DecodeError)(nil)).Elem(), + "DotDotDotType": TypeOf((*dwarf.DotDotDotType)(nil)).Elem(), + "Entry": TypeOf((*dwarf.Entry)(nil)).Elem(), + "EnumType": TypeOf((*dwarf.EnumType)(nil)).Elem(), + "EnumValue": TypeOf((*dwarf.EnumValue)(nil)).Elem(), + "Field": TypeOf((*dwarf.Field)(nil)).Elem(), + "FloatType": TypeOf((*dwarf.FloatType)(nil)).Elem(), + "FuncType": TypeOf((*dwarf.FuncType)(nil)).Elem(), + "IntType": TypeOf((*dwarf.IntType)(nil)).Elem(), + "LineEntry": TypeOf((*dwarf.LineEntry)(nil)).Elem(), + "LineFile": TypeOf((*dwarf.LineFile)(nil)).Elem(), + "LineReader": TypeOf((*dwarf.LineReader)(nil)).Elem(), + "LineReaderPos": TypeOf((*dwarf.LineReaderPos)(nil)).Elem(), + "Offset": TypeOf((*dwarf.Offset)(nil)).Elem(), + "PtrType": TypeOf((*dwarf.PtrType)(nil)).Elem(), + "QualType": TypeOf((*dwarf.QualType)(nil)).Elem(), + "Reader": TypeOf((*dwarf.Reader)(nil)).Elem(), + "StructField": TypeOf((*dwarf.StructField)(nil)).Elem(), + "StructType": TypeOf((*dwarf.StructType)(nil)).Elem(), + "Tag": TypeOf((*dwarf.Tag)(nil)).Elem(), + "Type": TypeOf((*dwarf.Type)(nil)).Elem(), + "TypedefType": TypeOf((*dwarf.TypedefType)(nil)).Elem(), + "UcharType": TypeOf((*dwarf.UcharType)(nil)).Elem(), + "UintType": TypeOf((*dwarf.UintType)(nil)).Elem(), + "UnspecifiedType": TypeOf((*dwarf.UnspecifiedType)(nil)).Elem(), + "VoidType": TypeOf((*dwarf.VoidType)(nil)).Elem(), + },Proxies: map[string]Type{ + "Type": TypeOf((*Type_debug_dwarf)(nil)).Elem(), + },Wrappers: map[string][]string{ + "AddrType": []string{"Basic","Common","Size","String",}, + "ArrayType": []string{"Common",}, + "BasicType": []string{"Common","Size",}, + "BoolType": []string{"Basic","Common","Size","String",}, + "CharType": []string{"Basic","Common","Size","String",}, + "ComplexType": []string{"Basic","Common","Size","String",}, + "DotDotDotType": []string{"Common","Size",}, + "EnumType": []string{"Common","Size",}, + "FloatType": []string{"Basic","Common","Size","String",}, + "FuncType": []string{"Common","Size",}, + "IntType": []string{"Basic","Common","Size","String",}, + "PtrType": []string{"Common","Size",}, + "QualType": []string{"Common",}, + "StructType": []string{"Common","Size",}, + "TypedefType": []string{"Common",}, + "UcharType": []string{"Basic","Common","Size","String",}, + "UintType": []string{"Basic","Common","Size","String",}, + "UnspecifiedType": []string{"Basic","Common","Size","String",}, + "VoidType": []string{"Common","Size",}, + }, + } +} + +// --------------- proxy for debug/dwarf.Type --------------- +type Type_debug_dwarf struct { + Object interface{} + Common_ func(interface{}) *dwarf.CommonType + Size_ func(interface{}) int64 + String_ func(interface{}) string +} +func (Proxy *Type_debug_dwarf) Common() *dwarf.CommonType { + return Proxy.Common_(Proxy.Object) +} +func (Proxy *Type_debug_dwarf) Size() int64 { + return Proxy.Size_(Proxy.Object) +} +func (Proxy *Type_debug_dwarf) String() string { + return Proxy.String_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/debug_elf.go b/vendor/github.com/cosmos72/gomacro/imports/debug_elf.go new file mode 100644 index 0000000..8319587 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/debug_elf.go @@ -0,0 +1,894 @@ +// this file was generated by gomacro command: import _b "debug/elf" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "debug/elf" +) + +// reflection: allow interpreted code to import "debug/elf" +func init() { + Packages["debug/elf"] = Package{ + Binds: map[string]Value{ + "ARM_MAGIC_TRAMP_NUMBER": ValueOf(elf.ARM_MAGIC_TRAMP_NUMBER), + "COMPRESS_HIOS": ValueOf(elf.COMPRESS_HIOS), + "COMPRESS_HIPROC": ValueOf(elf.COMPRESS_HIPROC), + "COMPRESS_LOOS": ValueOf(elf.COMPRESS_LOOS), + "COMPRESS_LOPROC": ValueOf(elf.COMPRESS_LOPROC), + "COMPRESS_ZLIB": ValueOf(elf.COMPRESS_ZLIB), + "DF_BIND_NOW": ValueOf(elf.DF_BIND_NOW), + "DF_ORIGIN": ValueOf(elf.DF_ORIGIN), + "DF_STATIC_TLS": ValueOf(elf.DF_STATIC_TLS), + "DF_SYMBOLIC": ValueOf(elf.DF_SYMBOLIC), + "DF_TEXTREL": ValueOf(elf.DF_TEXTREL), + "DT_BIND_NOW": ValueOf(elf.DT_BIND_NOW), + "DT_DEBUG": ValueOf(elf.DT_DEBUG), + "DT_ENCODING": ValueOf(elf.DT_ENCODING), + "DT_FINI": ValueOf(elf.DT_FINI), + "DT_FINI_ARRAY": ValueOf(elf.DT_FINI_ARRAY), + "DT_FINI_ARRAYSZ": ValueOf(elf.DT_FINI_ARRAYSZ), + "DT_FLAGS": ValueOf(elf.DT_FLAGS), + "DT_HASH": ValueOf(elf.DT_HASH), + "DT_HIOS": ValueOf(elf.DT_HIOS), + "DT_HIPROC": ValueOf(elf.DT_HIPROC), + "DT_INIT": ValueOf(elf.DT_INIT), + "DT_INIT_ARRAY": ValueOf(elf.DT_INIT_ARRAY), + "DT_INIT_ARRAYSZ": ValueOf(elf.DT_INIT_ARRAYSZ), + "DT_JMPREL": ValueOf(elf.DT_JMPREL), + "DT_LOOS": ValueOf(elf.DT_LOOS), + "DT_LOPROC": ValueOf(elf.DT_LOPROC), + "DT_NEEDED": ValueOf(elf.DT_NEEDED), + "DT_NULL": ValueOf(elf.DT_NULL), + "DT_PLTGOT": ValueOf(elf.DT_PLTGOT), + "DT_PLTREL": ValueOf(elf.DT_PLTREL), + "DT_PLTRELSZ": ValueOf(elf.DT_PLTRELSZ), + "DT_PREINIT_ARRAY": ValueOf(elf.DT_PREINIT_ARRAY), + "DT_PREINIT_ARRAYSZ": ValueOf(elf.DT_PREINIT_ARRAYSZ), + "DT_REL": ValueOf(elf.DT_REL), + "DT_RELA": ValueOf(elf.DT_RELA), + "DT_RELAENT": ValueOf(elf.DT_RELAENT), + "DT_RELASZ": ValueOf(elf.DT_RELASZ), + "DT_RELENT": ValueOf(elf.DT_RELENT), + "DT_RELSZ": ValueOf(elf.DT_RELSZ), + "DT_RPATH": ValueOf(elf.DT_RPATH), + "DT_RUNPATH": ValueOf(elf.DT_RUNPATH), + "DT_SONAME": ValueOf(elf.DT_SONAME), + "DT_STRSZ": ValueOf(elf.DT_STRSZ), + "DT_STRTAB": ValueOf(elf.DT_STRTAB), + "DT_SYMBOLIC": ValueOf(elf.DT_SYMBOLIC), + "DT_SYMENT": ValueOf(elf.DT_SYMENT), + "DT_SYMTAB": ValueOf(elf.DT_SYMTAB), + "DT_TEXTREL": ValueOf(elf.DT_TEXTREL), + "DT_VERNEED": ValueOf(elf.DT_VERNEED), + "DT_VERNEEDNUM": ValueOf(elf.DT_VERNEEDNUM), + "DT_VERSYM": ValueOf(elf.DT_VERSYM), + "EI_ABIVERSION": ValueOf(elf.EI_ABIVERSION), + "EI_CLASS": ValueOf(elf.EI_CLASS), + "EI_DATA": ValueOf(elf.EI_DATA), + "EI_NIDENT": ValueOf(elf.EI_NIDENT), + "EI_OSABI": ValueOf(elf.EI_OSABI), + "EI_PAD": ValueOf(elf.EI_PAD), + "EI_VERSION": ValueOf(elf.EI_VERSION), + "ELFCLASS32": ValueOf(elf.ELFCLASS32), + "ELFCLASS64": ValueOf(elf.ELFCLASS64), + "ELFCLASSNONE": ValueOf(elf.ELFCLASSNONE), + "ELFDATA2LSB": ValueOf(elf.ELFDATA2LSB), + "ELFDATA2MSB": ValueOf(elf.ELFDATA2MSB), + "ELFDATANONE": ValueOf(elf.ELFDATANONE), + "ELFMAG": ValueOf(elf.ELFMAG), + "ELFOSABI_86OPEN": ValueOf(elf.ELFOSABI_86OPEN), + "ELFOSABI_AIX": ValueOf(elf.ELFOSABI_AIX), + "ELFOSABI_ARM": ValueOf(elf.ELFOSABI_ARM), + "ELFOSABI_FREEBSD": ValueOf(elf.ELFOSABI_FREEBSD), + "ELFOSABI_HPUX": ValueOf(elf.ELFOSABI_HPUX), + "ELFOSABI_HURD": ValueOf(elf.ELFOSABI_HURD), + "ELFOSABI_IRIX": ValueOf(elf.ELFOSABI_IRIX), + "ELFOSABI_LINUX": ValueOf(elf.ELFOSABI_LINUX), + "ELFOSABI_MODESTO": ValueOf(elf.ELFOSABI_MODESTO), + "ELFOSABI_NETBSD": ValueOf(elf.ELFOSABI_NETBSD), + "ELFOSABI_NONE": ValueOf(elf.ELFOSABI_NONE), + "ELFOSABI_NSK": ValueOf(elf.ELFOSABI_NSK), + "ELFOSABI_OPENBSD": ValueOf(elf.ELFOSABI_OPENBSD), + "ELFOSABI_OPENVMS": ValueOf(elf.ELFOSABI_OPENVMS), + "ELFOSABI_SOLARIS": ValueOf(elf.ELFOSABI_SOLARIS), + "ELFOSABI_STANDALONE": ValueOf(elf.ELFOSABI_STANDALONE), + "ELFOSABI_TRU64": ValueOf(elf.ELFOSABI_TRU64), + "EM_386": ValueOf(elf.EM_386), + "EM_486": ValueOf(elf.EM_486), + "EM_68HC12": ValueOf(elf.EM_68HC12), + "EM_68K": ValueOf(elf.EM_68K), + "EM_860": ValueOf(elf.EM_860), + "EM_88K": ValueOf(elf.EM_88K), + "EM_960": ValueOf(elf.EM_960), + "EM_AARCH64": ValueOf(elf.EM_AARCH64), + "EM_ALPHA": ValueOf(elf.EM_ALPHA), + "EM_ALPHA_STD": ValueOf(elf.EM_ALPHA_STD), + "EM_ARC": ValueOf(elf.EM_ARC), + "EM_ARM": ValueOf(elf.EM_ARM), + "EM_COLDFIRE": ValueOf(elf.EM_COLDFIRE), + "EM_FR20": ValueOf(elf.EM_FR20), + "EM_H8S": ValueOf(elf.EM_H8S), + "EM_H8_300": ValueOf(elf.EM_H8_300), + "EM_H8_300H": ValueOf(elf.EM_H8_300H), + "EM_H8_500": ValueOf(elf.EM_H8_500), + "EM_IA_64": ValueOf(elf.EM_IA_64), + "EM_M32": ValueOf(elf.EM_M32), + "EM_ME16": ValueOf(elf.EM_ME16), + "EM_MIPS": ValueOf(elf.EM_MIPS), + "EM_MIPS_RS3_LE": ValueOf(elf.EM_MIPS_RS3_LE), + "EM_MIPS_RS4_BE": ValueOf(elf.EM_MIPS_RS4_BE), + "EM_MIPS_X": ValueOf(elf.EM_MIPS_X), + "EM_MMA": ValueOf(elf.EM_MMA), + "EM_NCPU": ValueOf(elf.EM_NCPU), + "EM_NDR1": ValueOf(elf.EM_NDR1), + "EM_NONE": ValueOf(elf.EM_NONE), + "EM_PARISC": ValueOf(elf.EM_PARISC), + "EM_PCP": ValueOf(elf.EM_PCP), + "EM_PPC": ValueOf(elf.EM_PPC), + "EM_PPC64": ValueOf(elf.EM_PPC64), + "EM_RCE": ValueOf(elf.EM_RCE), + "EM_RH32": ValueOf(elf.EM_RH32), + "EM_S370": ValueOf(elf.EM_S370), + "EM_S390": ValueOf(elf.EM_S390), + "EM_SH": ValueOf(elf.EM_SH), + "EM_SPARC": ValueOf(elf.EM_SPARC), + "EM_SPARC32PLUS": ValueOf(elf.EM_SPARC32PLUS), + "EM_SPARCV9": ValueOf(elf.EM_SPARCV9), + "EM_ST100": ValueOf(elf.EM_ST100), + "EM_STARCORE": ValueOf(elf.EM_STARCORE), + "EM_TINYJ": ValueOf(elf.EM_TINYJ), + "EM_TRICORE": ValueOf(elf.EM_TRICORE), + "EM_V800": ValueOf(elf.EM_V800), + "EM_VPP500": ValueOf(elf.EM_VPP500), + "EM_X86_64": ValueOf(elf.EM_X86_64), + "ET_CORE": ValueOf(elf.ET_CORE), + "ET_DYN": ValueOf(elf.ET_DYN), + "ET_EXEC": ValueOf(elf.ET_EXEC), + "ET_HIOS": ValueOf(elf.ET_HIOS), + "ET_HIPROC": ValueOf(elf.ET_HIPROC), + "ET_LOOS": ValueOf(elf.ET_LOOS), + "ET_LOPROC": ValueOf(elf.ET_LOPROC), + "ET_NONE": ValueOf(elf.ET_NONE), + "ET_REL": ValueOf(elf.ET_REL), + "EV_CURRENT": ValueOf(elf.EV_CURRENT), + "EV_NONE": ValueOf(elf.EV_NONE), + "ErrNoSymbols": ValueOf(&elf.ErrNoSymbols).Elem(), + "NT_FPREGSET": ValueOf(elf.NT_FPREGSET), + "NT_PRPSINFO": ValueOf(elf.NT_PRPSINFO), + "NT_PRSTATUS": ValueOf(elf.NT_PRSTATUS), + "NewFile": ValueOf(elf.NewFile), + "Open": ValueOf(elf.Open), + "PF_MASKOS": ValueOf(elf.PF_MASKOS), + "PF_MASKPROC": ValueOf(elf.PF_MASKPROC), + "PF_R": ValueOf(elf.PF_R), + "PF_W": ValueOf(elf.PF_W), + "PF_X": ValueOf(elf.PF_X), + "PT_DYNAMIC": ValueOf(elf.PT_DYNAMIC), + "PT_HIOS": ValueOf(elf.PT_HIOS), + "PT_HIPROC": ValueOf(elf.PT_HIPROC), + "PT_INTERP": ValueOf(elf.PT_INTERP), + "PT_LOAD": ValueOf(elf.PT_LOAD), + "PT_LOOS": ValueOf(elf.PT_LOOS), + "PT_LOPROC": ValueOf(elf.PT_LOPROC), + "PT_NOTE": ValueOf(elf.PT_NOTE), + "PT_NULL": ValueOf(elf.PT_NULL), + "PT_PHDR": ValueOf(elf.PT_PHDR), + "PT_SHLIB": ValueOf(elf.PT_SHLIB), + "PT_TLS": ValueOf(elf.PT_TLS), + "R_386_32": ValueOf(elf.R_386_32), + "R_386_COPY": ValueOf(elf.R_386_COPY), + "R_386_GLOB_DAT": ValueOf(elf.R_386_GLOB_DAT), + "R_386_GOT32": ValueOf(elf.R_386_GOT32), + "R_386_GOTOFF": ValueOf(elf.R_386_GOTOFF), + "R_386_GOTPC": ValueOf(elf.R_386_GOTPC), + "R_386_JMP_SLOT": ValueOf(elf.R_386_JMP_SLOT), + "R_386_NONE": ValueOf(elf.R_386_NONE), + "R_386_PC32": ValueOf(elf.R_386_PC32), + "R_386_PLT32": ValueOf(elf.R_386_PLT32), + "R_386_RELATIVE": ValueOf(elf.R_386_RELATIVE), + "R_386_TLS_DTPMOD32": ValueOf(elf.R_386_TLS_DTPMOD32), + "R_386_TLS_DTPOFF32": ValueOf(elf.R_386_TLS_DTPOFF32), + "R_386_TLS_GD": ValueOf(elf.R_386_TLS_GD), + "R_386_TLS_GD_32": ValueOf(elf.R_386_TLS_GD_32), + "R_386_TLS_GD_CALL": ValueOf(elf.R_386_TLS_GD_CALL), + "R_386_TLS_GD_POP": ValueOf(elf.R_386_TLS_GD_POP), + "R_386_TLS_GD_PUSH": ValueOf(elf.R_386_TLS_GD_PUSH), + "R_386_TLS_GOTIE": ValueOf(elf.R_386_TLS_GOTIE), + "R_386_TLS_IE": ValueOf(elf.R_386_TLS_IE), + "R_386_TLS_IE_32": ValueOf(elf.R_386_TLS_IE_32), + "R_386_TLS_LDM": ValueOf(elf.R_386_TLS_LDM), + "R_386_TLS_LDM_32": ValueOf(elf.R_386_TLS_LDM_32), + "R_386_TLS_LDM_CALL": ValueOf(elf.R_386_TLS_LDM_CALL), + "R_386_TLS_LDM_POP": ValueOf(elf.R_386_TLS_LDM_POP), + "R_386_TLS_LDM_PUSH": ValueOf(elf.R_386_TLS_LDM_PUSH), + "R_386_TLS_LDO_32": ValueOf(elf.R_386_TLS_LDO_32), + "R_386_TLS_LE": ValueOf(elf.R_386_TLS_LE), + "R_386_TLS_LE_32": ValueOf(elf.R_386_TLS_LE_32), + "R_386_TLS_TPOFF": ValueOf(elf.R_386_TLS_TPOFF), + "R_386_TLS_TPOFF32": ValueOf(elf.R_386_TLS_TPOFF32), + "R_390_12": ValueOf(elf.R_390_12), + "R_390_16": ValueOf(elf.R_390_16), + "R_390_20": ValueOf(elf.R_390_20), + "R_390_32": ValueOf(elf.R_390_32), + "R_390_64": ValueOf(elf.R_390_64), + "R_390_8": ValueOf(elf.R_390_8), + "R_390_COPY": ValueOf(elf.R_390_COPY), + "R_390_GLOB_DAT": ValueOf(elf.R_390_GLOB_DAT), + "R_390_GOT12": ValueOf(elf.R_390_GOT12), + "R_390_GOT16": ValueOf(elf.R_390_GOT16), + "R_390_GOT20": ValueOf(elf.R_390_GOT20), + "R_390_GOT32": ValueOf(elf.R_390_GOT32), + "R_390_GOT64": ValueOf(elf.R_390_GOT64), + "R_390_GOTENT": ValueOf(elf.R_390_GOTENT), + "R_390_GOTOFF": ValueOf(elf.R_390_GOTOFF), + "R_390_GOTOFF16": ValueOf(elf.R_390_GOTOFF16), + "R_390_GOTOFF64": ValueOf(elf.R_390_GOTOFF64), + "R_390_GOTPC": ValueOf(elf.R_390_GOTPC), + "R_390_GOTPCDBL": ValueOf(elf.R_390_GOTPCDBL), + "R_390_GOTPLT12": ValueOf(elf.R_390_GOTPLT12), + "R_390_GOTPLT16": ValueOf(elf.R_390_GOTPLT16), + "R_390_GOTPLT20": ValueOf(elf.R_390_GOTPLT20), + "R_390_GOTPLT32": ValueOf(elf.R_390_GOTPLT32), + "R_390_GOTPLT64": ValueOf(elf.R_390_GOTPLT64), + "R_390_GOTPLTENT": ValueOf(elf.R_390_GOTPLTENT), + "R_390_GOTPLTOFF16": ValueOf(elf.R_390_GOTPLTOFF16), + "R_390_GOTPLTOFF32": ValueOf(elf.R_390_GOTPLTOFF32), + "R_390_GOTPLTOFF64": ValueOf(elf.R_390_GOTPLTOFF64), + "R_390_JMP_SLOT": ValueOf(elf.R_390_JMP_SLOT), + "R_390_NONE": ValueOf(elf.R_390_NONE), + "R_390_PC16": ValueOf(elf.R_390_PC16), + "R_390_PC16DBL": ValueOf(elf.R_390_PC16DBL), + "R_390_PC32": ValueOf(elf.R_390_PC32), + "R_390_PC32DBL": ValueOf(elf.R_390_PC32DBL), + "R_390_PC64": ValueOf(elf.R_390_PC64), + "R_390_PLT16DBL": ValueOf(elf.R_390_PLT16DBL), + "R_390_PLT32": ValueOf(elf.R_390_PLT32), + "R_390_PLT32DBL": ValueOf(elf.R_390_PLT32DBL), + "R_390_PLT64": ValueOf(elf.R_390_PLT64), + "R_390_RELATIVE": ValueOf(elf.R_390_RELATIVE), + "R_390_TLS_DTPMOD": ValueOf(elf.R_390_TLS_DTPMOD), + "R_390_TLS_DTPOFF": ValueOf(elf.R_390_TLS_DTPOFF), + "R_390_TLS_GD32": ValueOf(elf.R_390_TLS_GD32), + "R_390_TLS_GD64": ValueOf(elf.R_390_TLS_GD64), + "R_390_TLS_GDCALL": ValueOf(elf.R_390_TLS_GDCALL), + "R_390_TLS_GOTIE12": ValueOf(elf.R_390_TLS_GOTIE12), + "R_390_TLS_GOTIE20": ValueOf(elf.R_390_TLS_GOTIE20), + "R_390_TLS_GOTIE32": ValueOf(elf.R_390_TLS_GOTIE32), + "R_390_TLS_GOTIE64": ValueOf(elf.R_390_TLS_GOTIE64), + "R_390_TLS_IE32": ValueOf(elf.R_390_TLS_IE32), + "R_390_TLS_IE64": ValueOf(elf.R_390_TLS_IE64), + "R_390_TLS_IEENT": ValueOf(elf.R_390_TLS_IEENT), + "R_390_TLS_LDCALL": ValueOf(elf.R_390_TLS_LDCALL), + "R_390_TLS_LDM32": ValueOf(elf.R_390_TLS_LDM32), + "R_390_TLS_LDM64": ValueOf(elf.R_390_TLS_LDM64), + "R_390_TLS_LDO32": ValueOf(elf.R_390_TLS_LDO32), + "R_390_TLS_LDO64": ValueOf(elf.R_390_TLS_LDO64), + "R_390_TLS_LE32": ValueOf(elf.R_390_TLS_LE32), + "R_390_TLS_LE64": ValueOf(elf.R_390_TLS_LE64), + "R_390_TLS_LOAD": ValueOf(elf.R_390_TLS_LOAD), + "R_390_TLS_TPOFF": ValueOf(elf.R_390_TLS_TPOFF), + "R_AARCH64_ABS16": ValueOf(elf.R_AARCH64_ABS16), + "R_AARCH64_ABS32": ValueOf(elf.R_AARCH64_ABS32), + "R_AARCH64_ABS64": ValueOf(elf.R_AARCH64_ABS64), + "R_AARCH64_ADD_ABS_LO12_NC": ValueOf(elf.R_AARCH64_ADD_ABS_LO12_NC), + "R_AARCH64_ADR_GOT_PAGE": ValueOf(elf.R_AARCH64_ADR_GOT_PAGE), + "R_AARCH64_ADR_PREL_LO21": ValueOf(elf.R_AARCH64_ADR_PREL_LO21), + "R_AARCH64_ADR_PREL_PG_HI21": ValueOf(elf.R_AARCH64_ADR_PREL_PG_HI21), + "R_AARCH64_ADR_PREL_PG_HI21_NC": ValueOf(elf.R_AARCH64_ADR_PREL_PG_HI21_NC), + "R_AARCH64_CALL26": ValueOf(elf.R_AARCH64_CALL26), + "R_AARCH64_CONDBR19": ValueOf(elf.R_AARCH64_CONDBR19), + "R_AARCH64_COPY": ValueOf(elf.R_AARCH64_COPY), + "R_AARCH64_GLOB_DAT": ValueOf(elf.R_AARCH64_GLOB_DAT), + "R_AARCH64_GOT_LD_PREL19": ValueOf(elf.R_AARCH64_GOT_LD_PREL19), + "R_AARCH64_IRELATIVE": ValueOf(elf.R_AARCH64_IRELATIVE), + "R_AARCH64_JUMP26": ValueOf(elf.R_AARCH64_JUMP26), + "R_AARCH64_JUMP_SLOT": ValueOf(elf.R_AARCH64_JUMP_SLOT), + "R_AARCH64_LD64_GOT_LO12_NC": ValueOf(elf.R_AARCH64_LD64_GOT_LO12_NC), + "R_AARCH64_LDST128_ABS_LO12_NC": ValueOf(elf.R_AARCH64_LDST128_ABS_LO12_NC), + "R_AARCH64_LDST16_ABS_LO12_NC": ValueOf(elf.R_AARCH64_LDST16_ABS_LO12_NC), + "R_AARCH64_LDST32_ABS_LO12_NC": ValueOf(elf.R_AARCH64_LDST32_ABS_LO12_NC), + "R_AARCH64_LDST64_ABS_LO12_NC": ValueOf(elf.R_AARCH64_LDST64_ABS_LO12_NC), + "R_AARCH64_LDST8_ABS_LO12_NC": ValueOf(elf.R_AARCH64_LDST8_ABS_LO12_NC), + "R_AARCH64_LD_PREL_LO19": ValueOf(elf.R_AARCH64_LD_PREL_LO19), + "R_AARCH64_MOVW_SABS_G0": ValueOf(elf.R_AARCH64_MOVW_SABS_G0), + "R_AARCH64_MOVW_SABS_G1": ValueOf(elf.R_AARCH64_MOVW_SABS_G1), + "R_AARCH64_MOVW_SABS_G2": ValueOf(elf.R_AARCH64_MOVW_SABS_G2), + "R_AARCH64_MOVW_UABS_G0": ValueOf(elf.R_AARCH64_MOVW_UABS_G0), + "R_AARCH64_MOVW_UABS_G0_NC": ValueOf(elf.R_AARCH64_MOVW_UABS_G0_NC), + "R_AARCH64_MOVW_UABS_G1": ValueOf(elf.R_AARCH64_MOVW_UABS_G1), + "R_AARCH64_MOVW_UABS_G1_NC": ValueOf(elf.R_AARCH64_MOVW_UABS_G1_NC), + "R_AARCH64_MOVW_UABS_G2": ValueOf(elf.R_AARCH64_MOVW_UABS_G2), + "R_AARCH64_MOVW_UABS_G2_NC": ValueOf(elf.R_AARCH64_MOVW_UABS_G2_NC), + "R_AARCH64_MOVW_UABS_G3": ValueOf(elf.R_AARCH64_MOVW_UABS_G3), + "R_AARCH64_NONE": ValueOf(elf.R_AARCH64_NONE), + "R_AARCH64_NULL": ValueOf(elf.R_AARCH64_NULL), + "R_AARCH64_P32_ABS16": ValueOf(elf.R_AARCH64_P32_ABS16), + "R_AARCH64_P32_ABS32": ValueOf(elf.R_AARCH64_P32_ABS32), + "R_AARCH64_P32_ADD_ABS_LO12_NC": ValueOf(elf.R_AARCH64_P32_ADD_ABS_LO12_NC), + "R_AARCH64_P32_ADR_GOT_PAGE": ValueOf(elf.R_AARCH64_P32_ADR_GOT_PAGE), + "R_AARCH64_P32_ADR_PREL_LO21": ValueOf(elf.R_AARCH64_P32_ADR_PREL_LO21), + "R_AARCH64_P32_ADR_PREL_PG_HI21": ValueOf(elf.R_AARCH64_P32_ADR_PREL_PG_HI21), + "R_AARCH64_P32_CALL26": ValueOf(elf.R_AARCH64_P32_CALL26), + "R_AARCH64_P32_CONDBR19": ValueOf(elf.R_AARCH64_P32_CONDBR19), + "R_AARCH64_P32_COPY": ValueOf(elf.R_AARCH64_P32_COPY), + "R_AARCH64_P32_GLOB_DAT": ValueOf(elf.R_AARCH64_P32_GLOB_DAT), + "R_AARCH64_P32_GOT_LD_PREL19": ValueOf(elf.R_AARCH64_P32_GOT_LD_PREL19), + "R_AARCH64_P32_IRELATIVE": ValueOf(elf.R_AARCH64_P32_IRELATIVE), + "R_AARCH64_P32_JUMP26": ValueOf(elf.R_AARCH64_P32_JUMP26), + "R_AARCH64_P32_JUMP_SLOT": ValueOf(elf.R_AARCH64_P32_JUMP_SLOT), + "R_AARCH64_P32_LD32_GOT_LO12_NC": ValueOf(elf.R_AARCH64_P32_LD32_GOT_LO12_NC), + "R_AARCH64_P32_LDST128_ABS_LO12_NC": ValueOf(elf.R_AARCH64_P32_LDST128_ABS_LO12_NC), + "R_AARCH64_P32_LDST16_ABS_LO12_NC": ValueOf(elf.R_AARCH64_P32_LDST16_ABS_LO12_NC), + "R_AARCH64_P32_LDST32_ABS_LO12_NC": ValueOf(elf.R_AARCH64_P32_LDST32_ABS_LO12_NC), + "R_AARCH64_P32_LDST64_ABS_LO12_NC": ValueOf(elf.R_AARCH64_P32_LDST64_ABS_LO12_NC), + "R_AARCH64_P32_LDST8_ABS_LO12_NC": ValueOf(elf.R_AARCH64_P32_LDST8_ABS_LO12_NC), + "R_AARCH64_P32_LD_PREL_LO19": ValueOf(elf.R_AARCH64_P32_LD_PREL_LO19), + "R_AARCH64_P32_MOVW_SABS_G0": ValueOf(elf.R_AARCH64_P32_MOVW_SABS_G0), + "R_AARCH64_P32_MOVW_UABS_G0": ValueOf(elf.R_AARCH64_P32_MOVW_UABS_G0), + "R_AARCH64_P32_MOVW_UABS_G0_NC": ValueOf(elf.R_AARCH64_P32_MOVW_UABS_G0_NC), + "R_AARCH64_P32_MOVW_UABS_G1": ValueOf(elf.R_AARCH64_P32_MOVW_UABS_G1), + "R_AARCH64_P32_PREL16": ValueOf(elf.R_AARCH64_P32_PREL16), + "R_AARCH64_P32_PREL32": ValueOf(elf.R_AARCH64_P32_PREL32), + "R_AARCH64_P32_RELATIVE": ValueOf(elf.R_AARCH64_P32_RELATIVE), + "R_AARCH64_P32_TLSDESC": ValueOf(elf.R_AARCH64_P32_TLSDESC), + "R_AARCH64_P32_TLSDESC_ADD_LO12_NC": ValueOf(elf.R_AARCH64_P32_TLSDESC_ADD_LO12_NC), + "R_AARCH64_P32_TLSDESC_ADR_PAGE21": ValueOf(elf.R_AARCH64_P32_TLSDESC_ADR_PAGE21), + "R_AARCH64_P32_TLSDESC_ADR_PREL21": ValueOf(elf.R_AARCH64_P32_TLSDESC_ADR_PREL21), + "R_AARCH64_P32_TLSDESC_CALL": ValueOf(elf.R_AARCH64_P32_TLSDESC_CALL), + "R_AARCH64_P32_TLSDESC_LD32_LO12_NC": ValueOf(elf.R_AARCH64_P32_TLSDESC_LD32_LO12_NC), + "R_AARCH64_P32_TLSDESC_LD_PREL19": ValueOf(elf.R_AARCH64_P32_TLSDESC_LD_PREL19), + "R_AARCH64_P32_TLSGD_ADD_LO12_NC": ValueOf(elf.R_AARCH64_P32_TLSGD_ADD_LO12_NC), + "R_AARCH64_P32_TLSGD_ADR_PAGE21": ValueOf(elf.R_AARCH64_P32_TLSGD_ADR_PAGE21), + "R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21": ValueOf(elf.R_AARCH64_P32_TLSIE_ADR_GOTTPREL_PAGE21), + "R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC": ValueOf(elf.R_AARCH64_P32_TLSIE_LD32_GOTTPREL_LO12_NC), + "R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19": ValueOf(elf.R_AARCH64_P32_TLSIE_LD_GOTTPREL_PREL19), + "R_AARCH64_P32_TLSLE_ADD_TPREL_HI12": ValueOf(elf.R_AARCH64_P32_TLSLE_ADD_TPREL_HI12), + "R_AARCH64_P32_TLSLE_ADD_TPREL_LO12": ValueOf(elf.R_AARCH64_P32_TLSLE_ADD_TPREL_LO12), + "R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC": ValueOf(elf.R_AARCH64_P32_TLSLE_ADD_TPREL_LO12_NC), + "R_AARCH64_P32_TLSLE_MOVW_TPREL_G0": ValueOf(elf.R_AARCH64_P32_TLSLE_MOVW_TPREL_G0), + "R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC": ValueOf(elf.R_AARCH64_P32_TLSLE_MOVW_TPREL_G0_NC), + "R_AARCH64_P32_TLSLE_MOVW_TPREL_G1": ValueOf(elf.R_AARCH64_P32_TLSLE_MOVW_TPREL_G1), + "R_AARCH64_P32_TLS_DTPMOD": ValueOf(elf.R_AARCH64_P32_TLS_DTPMOD), + "R_AARCH64_P32_TLS_DTPREL": ValueOf(elf.R_AARCH64_P32_TLS_DTPREL), + "R_AARCH64_P32_TLS_TPREL": ValueOf(elf.R_AARCH64_P32_TLS_TPREL), + "R_AARCH64_P32_TSTBR14": ValueOf(elf.R_AARCH64_P32_TSTBR14), + "R_AARCH64_PREL16": ValueOf(elf.R_AARCH64_PREL16), + "R_AARCH64_PREL32": ValueOf(elf.R_AARCH64_PREL32), + "R_AARCH64_PREL64": ValueOf(elf.R_AARCH64_PREL64), + "R_AARCH64_RELATIVE": ValueOf(elf.R_AARCH64_RELATIVE), + "R_AARCH64_TLSDESC": ValueOf(elf.R_AARCH64_TLSDESC), + "R_AARCH64_TLSDESC_ADD": ValueOf(elf.R_AARCH64_TLSDESC_ADD), + "R_AARCH64_TLSDESC_ADD_LO12_NC": ValueOf(elf.R_AARCH64_TLSDESC_ADD_LO12_NC), + "R_AARCH64_TLSDESC_ADR_PAGE21": ValueOf(elf.R_AARCH64_TLSDESC_ADR_PAGE21), + "R_AARCH64_TLSDESC_ADR_PREL21": ValueOf(elf.R_AARCH64_TLSDESC_ADR_PREL21), + "R_AARCH64_TLSDESC_CALL": ValueOf(elf.R_AARCH64_TLSDESC_CALL), + "R_AARCH64_TLSDESC_LD64_LO12_NC": ValueOf(elf.R_AARCH64_TLSDESC_LD64_LO12_NC), + "R_AARCH64_TLSDESC_LDR": ValueOf(elf.R_AARCH64_TLSDESC_LDR), + "R_AARCH64_TLSDESC_LD_PREL19": ValueOf(elf.R_AARCH64_TLSDESC_LD_PREL19), + "R_AARCH64_TLSDESC_OFF_G0_NC": ValueOf(elf.R_AARCH64_TLSDESC_OFF_G0_NC), + "R_AARCH64_TLSDESC_OFF_G1": ValueOf(elf.R_AARCH64_TLSDESC_OFF_G1), + "R_AARCH64_TLSGD_ADD_LO12_NC": ValueOf(elf.R_AARCH64_TLSGD_ADD_LO12_NC), + "R_AARCH64_TLSGD_ADR_PAGE21": ValueOf(elf.R_AARCH64_TLSGD_ADR_PAGE21), + "R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21": ValueOf(elf.R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21), + "R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC": ValueOf(elf.R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC), + "R_AARCH64_TLSIE_LD_GOTTPREL_PREL19": ValueOf(elf.R_AARCH64_TLSIE_LD_GOTTPREL_PREL19), + "R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC": ValueOf(elf.R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC), + "R_AARCH64_TLSIE_MOVW_GOTTPREL_G1": ValueOf(elf.R_AARCH64_TLSIE_MOVW_GOTTPREL_G1), + "R_AARCH64_TLSLE_ADD_TPREL_HI12": ValueOf(elf.R_AARCH64_TLSLE_ADD_TPREL_HI12), + "R_AARCH64_TLSLE_ADD_TPREL_LO12": ValueOf(elf.R_AARCH64_TLSLE_ADD_TPREL_LO12), + "R_AARCH64_TLSLE_ADD_TPREL_LO12_NC": ValueOf(elf.R_AARCH64_TLSLE_ADD_TPREL_LO12_NC), + "R_AARCH64_TLSLE_MOVW_TPREL_G0": ValueOf(elf.R_AARCH64_TLSLE_MOVW_TPREL_G0), + "R_AARCH64_TLSLE_MOVW_TPREL_G0_NC": ValueOf(elf.R_AARCH64_TLSLE_MOVW_TPREL_G0_NC), + "R_AARCH64_TLSLE_MOVW_TPREL_G1": ValueOf(elf.R_AARCH64_TLSLE_MOVW_TPREL_G1), + "R_AARCH64_TLSLE_MOVW_TPREL_G1_NC": ValueOf(elf.R_AARCH64_TLSLE_MOVW_TPREL_G1_NC), + "R_AARCH64_TLSLE_MOVW_TPREL_G2": ValueOf(elf.R_AARCH64_TLSLE_MOVW_TPREL_G2), + "R_AARCH64_TLS_DTPMOD64": ValueOf(elf.R_AARCH64_TLS_DTPMOD64), + "R_AARCH64_TLS_DTPREL64": ValueOf(elf.R_AARCH64_TLS_DTPREL64), + "R_AARCH64_TLS_TPREL64": ValueOf(elf.R_AARCH64_TLS_TPREL64), + "R_AARCH64_TSTBR14": ValueOf(elf.R_AARCH64_TSTBR14), + "R_ALPHA_BRADDR": ValueOf(elf.R_ALPHA_BRADDR), + "R_ALPHA_COPY": ValueOf(elf.R_ALPHA_COPY), + "R_ALPHA_GLOB_DAT": ValueOf(elf.R_ALPHA_GLOB_DAT), + "R_ALPHA_GPDISP": ValueOf(elf.R_ALPHA_GPDISP), + "R_ALPHA_GPREL32": ValueOf(elf.R_ALPHA_GPREL32), + "R_ALPHA_GPRELHIGH": ValueOf(elf.R_ALPHA_GPRELHIGH), + "R_ALPHA_GPRELLOW": ValueOf(elf.R_ALPHA_GPRELLOW), + "R_ALPHA_GPVALUE": ValueOf(elf.R_ALPHA_GPVALUE), + "R_ALPHA_HINT": ValueOf(elf.R_ALPHA_HINT), + "R_ALPHA_IMMED_BR_HI32": ValueOf(elf.R_ALPHA_IMMED_BR_HI32), + "R_ALPHA_IMMED_GP_16": ValueOf(elf.R_ALPHA_IMMED_GP_16), + "R_ALPHA_IMMED_GP_HI32": ValueOf(elf.R_ALPHA_IMMED_GP_HI32), + "R_ALPHA_IMMED_LO32": ValueOf(elf.R_ALPHA_IMMED_LO32), + "R_ALPHA_IMMED_SCN_HI32": ValueOf(elf.R_ALPHA_IMMED_SCN_HI32), + "R_ALPHA_JMP_SLOT": ValueOf(elf.R_ALPHA_JMP_SLOT), + "R_ALPHA_LITERAL": ValueOf(elf.R_ALPHA_LITERAL), + "R_ALPHA_LITUSE": ValueOf(elf.R_ALPHA_LITUSE), + "R_ALPHA_NONE": ValueOf(elf.R_ALPHA_NONE), + "R_ALPHA_OP_PRSHIFT": ValueOf(elf.R_ALPHA_OP_PRSHIFT), + "R_ALPHA_OP_PSUB": ValueOf(elf.R_ALPHA_OP_PSUB), + "R_ALPHA_OP_PUSH": ValueOf(elf.R_ALPHA_OP_PUSH), + "R_ALPHA_OP_STORE": ValueOf(elf.R_ALPHA_OP_STORE), + "R_ALPHA_REFLONG": ValueOf(elf.R_ALPHA_REFLONG), + "R_ALPHA_REFQUAD": ValueOf(elf.R_ALPHA_REFQUAD), + "R_ALPHA_RELATIVE": ValueOf(elf.R_ALPHA_RELATIVE), + "R_ALPHA_SREL16": ValueOf(elf.R_ALPHA_SREL16), + "R_ALPHA_SREL32": ValueOf(elf.R_ALPHA_SREL32), + "R_ALPHA_SREL64": ValueOf(elf.R_ALPHA_SREL64), + "R_ARM_ABS12": ValueOf(elf.R_ARM_ABS12), + "R_ARM_ABS16": ValueOf(elf.R_ARM_ABS16), + "R_ARM_ABS32": ValueOf(elf.R_ARM_ABS32), + "R_ARM_ABS8": ValueOf(elf.R_ARM_ABS8), + "R_ARM_AMP_VCALL9": ValueOf(elf.R_ARM_AMP_VCALL9), + "R_ARM_COPY": ValueOf(elf.R_ARM_COPY), + "R_ARM_GLOB_DAT": ValueOf(elf.R_ARM_GLOB_DAT), + "R_ARM_GNU_VTENTRY": ValueOf(elf.R_ARM_GNU_VTENTRY), + "R_ARM_GNU_VTINHERIT": ValueOf(elf.R_ARM_GNU_VTINHERIT), + "R_ARM_GOT32": ValueOf(elf.R_ARM_GOT32), + "R_ARM_GOTOFF": ValueOf(elf.R_ARM_GOTOFF), + "R_ARM_GOTPC": ValueOf(elf.R_ARM_GOTPC), + "R_ARM_JUMP_SLOT": ValueOf(elf.R_ARM_JUMP_SLOT), + "R_ARM_NONE": ValueOf(elf.R_ARM_NONE), + "R_ARM_PC13": ValueOf(elf.R_ARM_PC13), + "R_ARM_PC24": ValueOf(elf.R_ARM_PC24), + "R_ARM_PLT32": ValueOf(elf.R_ARM_PLT32), + "R_ARM_RABS32": ValueOf(elf.R_ARM_RABS32), + "R_ARM_RBASE": ValueOf(elf.R_ARM_RBASE), + "R_ARM_REL32": ValueOf(elf.R_ARM_REL32), + "R_ARM_RELATIVE": ValueOf(elf.R_ARM_RELATIVE), + "R_ARM_RPC24": ValueOf(elf.R_ARM_RPC24), + "R_ARM_RREL32": ValueOf(elf.R_ARM_RREL32), + "R_ARM_RSBREL32": ValueOf(elf.R_ARM_RSBREL32), + "R_ARM_SBREL32": ValueOf(elf.R_ARM_SBREL32), + "R_ARM_SWI24": ValueOf(elf.R_ARM_SWI24), + "R_ARM_THM_ABS5": ValueOf(elf.R_ARM_THM_ABS5), + "R_ARM_THM_PC22": ValueOf(elf.R_ARM_THM_PC22), + "R_ARM_THM_PC8": ValueOf(elf.R_ARM_THM_PC8), + "R_ARM_THM_RPC22": ValueOf(elf.R_ARM_THM_RPC22), + "R_ARM_THM_SWI8": ValueOf(elf.R_ARM_THM_SWI8), + "R_ARM_THM_XPC22": ValueOf(elf.R_ARM_THM_XPC22), + "R_ARM_XPC25": ValueOf(elf.R_ARM_XPC25), + "R_INFO": ValueOf(elf.R_INFO), + "R_INFO32": ValueOf(elf.R_INFO32), + "R_MIPS_16": ValueOf(elf.R_MIPS_16), + "R_MIPS_26": ValueOf(elf.R_MIPS_26), + "R_MIPS_32": ValueOf(elf.R_MIPS_32), + "R_MIPS_64": ValueOf(elf.R_MIPS_64), + "R_MIPS_ADD_IMMEDIATE": ValueOf(elf.R_MIPS_ADD_IMMEDIATE), + "R_MIPS_CALL16": ValueOf(elf.R_MIPS_CALL16), + "R_MIPS_CALL_HI16": ValueOf(elf.R_MIPS_CALL_HI16), + "R_MIPS_CALL_LO16": ValueOf(elf.R_MIPS_CALL_LO16), + "R_MIPS_DELETE": ValueOf(elf.R_MIPS_DELETE), + "R_MIPS_GOT16": ValueOf(elf.R_MIPS_GOT16), + "R_MIPS_GOT_DISP": ValueOf(elf.R_MIPS_GOT_DISP), + "R_MIPS_GOT_HI16": ValueOf(elf.R_MIPS_GOT_HI16), + "R_MIPS_GOT_LO16": ValueOf(elf.R_MIPS_GOT_LO16), + "R_MIPS_GOT_OFST": ValueOf(elf.R_MIPS_GOT_OFST), + "R_MIPS_GOT_PAGE": ValueOf(elf.R_MIPS_GOT_PAGE), + "R_MIPS_GPREL16": ValueOf(elf.R_MIPS_GPREL16), + "R_MIPS_GPREL32": ValueOf(elf.R_MIPS_GPREL32), + "R_MIPS_HI16": ValueOf(elf.R_MIPS_HI16), + "R_MIPS_HIGHER": ValueOf(elf.R_MIPS_HIGHER), + "R_MIPS_HIGHEST": ValueOf(elf.R_MIPS_HIGHEST), + "R_MIPS_INSERT_A": ValueOf(elf.R_MIPS_INSERT_A), + "R_MIPS_INSERT_B": ValueOf(elf.R_MIPS_INSERT_B), + "R_MIPS_JALR": ValueOf(elf.R_MIPS_JALR), + "R_MIPS_LITERAL": ValueOf(elf.R_MIPS_LITERAL), + "R_MIPS_LO16": ValueOf(elf.R_MIPS_LO16), + "R_MIPS_NONE": ValueOf(elf.R_MIPS_NONE), + "R_MIPS_PC16": ValueOf(elf.R_MIPS_PC16), + "R_MIPS_PJUMP": ValueOf(elf.R_MIPS_PJUMP), + "R_MIPS_REL16": ValueOf(elf.R_MIPS_REL16), + "R_MIPS_REL32": ValueOf(elf.R_MIPS_REL32), + "R_MIPS_RELGOT": ValueOf(elf.R_MIPS_RELGOT), + "R_MIPS_SCN_DISP": ValueOf(elf.R_MIPS_SCN_DISP), + "R_MIPS_SHIFT5": ValueOf(elf.R_MIPS_SHIFT5), + "R_MIPS_SHIFT6": ValueOf(elf.R_MIPS_SHIFT6), + "R_MIPS_SUB": ValueOf(elf.R_MIPS_SUB), + "R_MIPS_TLS_DTPMOD32": ValueOf(elf.R_MIPS_TLS_DTPMOD32), + "R_MIPS_TLS_DTPMOD64": ValueOf(elf.R_MIPS_TLS_DTPMOD64), + "R_MIPS_TLS_DTPREL32": ValueOf(elf.R_MIPS_TLS_DTPREL32), + "R_MIPS_TLS_DTPREL64": ValueOf(elf.R_MIPS_TLS_DTPREL64), + "R_MIPS_TLS_DTPREL_HI16": ValueOf(elf.R_MIPS_TLS_DTPREL_HI16), + "R_MIPS_TLS_DTPREL_LO16": ValueOf(elf.R_MIPS_TLS_DTPREL_LO16), + "R_MIPS_TLS_GD": ValueOf(elf.R_MIPS_TLS_GD), + "R_MIPS_TLS_GOTTPREL": ValueOf(elf.R_MIPS_TLS_GOTTPREL), + "R_MIPS_TLS_LDM": ValueOf(elf.R_MIPS_TLS_LDM), + "R_MIPS_TLS_TPREL32": ValueOf(elf.R_MIPS_TLS_TPREL32), + "R_MIPS_TLS_TPREL64": ValueOf(elf.R_MIPS_TLS_TPREL64), + "R_MIPS_TLS_TPREL_HI16": ValueOf(elf.R_MIPS_TLS_TPREL_HI16), + "R_MIPS_TLS_TPREL_LO16": ValueOf(elf.R_MIPS_TLS_TPREL_LO16), + "R_PPC64_ADDR14": ValueOf(elf.R_PPC64_ADDR14), + "R_PPC64_ADDR14_BRNTAKEN": ValueOf(elf.R_PPC64_ADDR14_BRNTAKEN), + "R_PPC64_ADDR14_BRTAKEN": ValueOf(elf.R_PPC64_ADDR14_BRTAKEN), + "R_PPC64_ADDR16": ValueOf(elf.R_PPC64_ADDR16), + "R_PPC64_ADDR16_DS": ValueOf(elf.R_PPC64_ADDR16_DS), + "R_PPC64_ADDR16_HA": ValueOf(elf.R_PPC64_ADDR16_HA), + "R_PPC64_ADDR16_HI": ValueOf(elf.R_PPC64_ADDR16_HI), + "R_PPC64_ADDR16_HIGHER": ValueOf(elf.R_PPC64_ADDR16_HIGHER), + "R_PPC64_ADDR16_HIGHERA": ValueOf(elf.R_PPC64_ADDR16_HIGHERA), + "R_PPC64_ADDR16_HIGHEST": ValueOf(elf.R_PPC64_ADDR16_HIGHEST), + "R_PPC64_ADDR16_HIGHESTA": ValueOf(elf.R_PPC64_ADDR16_HIGHESTA), + "R_PPC64_ADDR16_LO": ValueOf(elf.R_PPC64_ADDR16_LO), + "R_PPC64_ADDR16_LO_DS": ValueOf(elf.R_PPC64_ADDR16_LO_DS), + "R_PPC64_ADDR24": ValueOf(elf.R_PPC64_ADDR24), + "R_PPC64_ADDR32": ValueOf(elf.R_PPC64_ADDR32), + "R_PPC64_ADDR64": ValueOf(elf.R_PPC64_ADDR64), + "R_PPC64_DTPMOD64": ValueOf(elf.R_PPC64_DTPMOD64), + "R_PPC64_DTPREL16": ValueOf(elf.R_PPC64_DTPREL16), + "R_PPC64_DTPREL16_DS": ValueOf(elf.R_PPC64_DTPREL16_DS), + "R_PPC64_DTPREL16_HA": ValueOf(elf.R_PPC64_DTPREL16_HA), + "R_PPC64_DTPREL16_HI": ValueOf(elf.R_PPC64_DTPREL16_HI), + "R_PPC64_DTPREL16_HIGHER": ValueOf(elf.R_PPC64_DTPREL16_HIGHER), + "R_PPC64_DTPREL16_HIGHERA": ValueOf(elf.R_PPC64_DTPREL16_HIGHERA), + "R_PPC64_DTPREL16_HIGHEST": ValueOf(elf.R_PPC64_DTPREL16_HIGHEST), + "R_PPC64_DTPREL16_HIGHESTA": ValueOf(elf.R_PPC64_DTPREL16_HIGHESTA), + "R_PPC64_DTPREL16_LO": ValueOf(elf.R_PPC64_DTPREL16_LO), + "R_PPC64_DTPREL16_LO_DS": ValueOf(elf.R_PPC64_DTPREL16_LO_DS), + "R_PPC64_DTPREL64": ValueOf(elf.R_PPC64_DTPREL64), + "R_PPC64_GOT16": ValueOf(elf.R_PPC64_GOT16), + "R_PPC64_GOT16_DS": ValueOf(elf.R_PPC64_GOT16_DS), + "R_PPC64_GOT16_HA": ValueOf(elf.R_PPC64_GOT16_HA), + "R_PPC64_GOT16_HI": ValueOf(elf.R_PPC64_GOT16_HI), + "R_PPC64_GOT16_LO": ValueOf(elf.R_PPC64_GOT16_LO), + "R_PPC64_GOT16_LO_DS": ValueOf(elf.R_PPC64_GOT16_LO_DS), + "R_PPC64_GOT_DTPREL16_DS": ValueOf(elf.R_PPC64_GOT_DTPREL16_DS), + "R_PPC64_GOT_DTPREL16_HA": ValueOf(elf.R_PPC64_GOT_DTPREL16_HA), + "R_PPC64_GOT_DTPREL16_HI": ValueOf(elf.R_PPC64_GOT_DTPREL16_HI), + "R_PPC64_GOT_DTPREL16_LO_DS": ValueOf(elf.R_PPC64_GOT_DTPREL16_LO_DS), + "R_PPC64_GOT_TLSGD16": ValueOf(elf.R_PPC64_GOT_TLSGD16), + "R_PPC64_GOT_TLSGD16_HA": ValueOf(elf.R_PPC64_GOT_TLSGD16_HA), + "R_PPC64_GOT_TLSGD16_HI": ValueOf(elf.R_PPC64_GOT_TLSGD16_HI), + "R_PPC64_GOT_TLSGD16_LO": ValueOf(elf.R_PPC64_GOT_TLSGD16_LO), + "R_PPC64_GOT_TLSLD16": ValueOf(elf.R_PPC64_GOT_TLSLD16), + "R_PPC64_GOT_TLSLD16_HA": ValueOf(elf.R_PPC64_GOT_TLSLD16_HA), + "R_PPC64_GOT_TLSLD16_HI": ValueOf(elf.R_PPC64_GOT_TLSLD16_HI), + "R_PPC64_GOT_TLSLD16_LO": ValueOf(elf.R_PPC64_GOT_TLSLD16_LO), + "R_PPC64_GOT_TPREL16_DS": ValueOf(elf.R_PPC64_GOT_TPREL16_DS), + "R_PPC64_GOT_TPREL16_HA": ValueOf(elf.R_PPC64_GOT_TPREL16_HA), + "R_PPC64_GOT_TPREL16_HI": ValueOf(elf.R_PPC64_GOT_TPREL16_HI), + "R_PPC64_GOT_TPREL16_LO_DS": ValueOf(elf.R_PPC64_GOT_TPREL16_LO_DS), + "R_PPC64_JMP_SLOT": ValueOf(elf.R_PPC64_JMP_SLOT), + "R_PPC64_NONE": ValueOf(elf.R_PPC64_NONE), + "R_PPC64_REL14": ValueOf(elf.R_PPC64_REL14), + "R_PPC64_REL14_BRNTAKEN": ValueOf(elf.R_PPC64_REL14_BRNTAKEN), + "R_PPC64_REL14_BRTAKEN": ValueOf(elf.R_PPC64_REL14_BRTAKEN), + "R_PPC64_REL16": ValueOf(elf.R_PPC64_REL16), + "R_PPC64_REL16_HA": ValueOf(elf.R_PPC64_REL16_HA), + "R_PPC64_REL16_HI": ValueOf(elf.R_PPC64_REL16_HI), + "R_PPC64_REL16_LO": ValueOf(elf.R_PPC64_REL16_LO), + "R_PPC64_REL24": ValueOf(elf.R_PPC64_REL24), + "R_PPC64_REL32": ValueOf(elf.R_PPC64_REL32), + "R_PPC64_REL64": ValueOf(elf.R_PPC64_REL64), + "R_PPC64_TLS": ValueOf(elf.R_PPC64_TLS), + "R_PPC64_TLSGD": ValueOf(elf.R_PPC64_TLSGD), + "R_PPC64_TLSLD": ValueOf(elf.R_PPC64_TLSLD), + "R_PPC64_TOC": ValueOf(elf.R_PPC64_TOC), + "R_PPC64_TOC16": ValueOf(elf.R_PPC64_TOC16), + "R_PPC64_TOC16_DS": ValueOf(elf.R_PPC64_TOC16_DS), + "R_PPC64_TOC16_HA": ValueOf(elf.R_PPC64_TOC16_HA), + "R_PPC64_TOC16_HI": ValueOf(elf.R_PPC64_TOC16_HI), + "R_PPC64_TOC16_LO": ValueOf(elf.R_PPC64_TOC16_LO), + "R_PPC64_TOC16_LO_DS": ValueOf(elf.R_PPC64_TOC16_LO_DS), + "R_PPC64_TPREL16": ValueOf(elf.R_PPC64_TPREL16), + "R_PPC64_TPREL16_DS": ValueOf(elf.R_PPC64_TPREL16_DS), + "R_PPC64_TPREL16_HA": ValueOf(elf.R_PPC64_TPREL16_HA), + "R_PPC64_TPREL16_HI": ValueOf(elf.R_PPC64_TPREL16_HI), + "R_PPC64_TPREL16_HIGHER": ValueOf(elf.R_PPC64_TPREL16_HIGHER), + "R_PPC64_TPREL16_HIGHERA": ValueOf(elf.R_PPC64_TPREL16_HIGHERA), + "R_PPC64_TPREL16_HIGHEST": ValueOf(elf.R_PPC64_TPREL16_HIGHEST), + "R_PPC64_TPREL16_HIGHESTA": ValueOf(elf.R_PPC64_TPREL16_HIGHESTA), + "R_PPC64_TPREL16_LO": ValueOf(elf.R_PPC64_TPREL16_LO), + "R_PPC64_TPREL16_LO_DS": ValueOf(elf.R_PPC64_TPREL16_LO_DS), + "R_PPC64_TPREL64": ValueOf(elf.R_PPC64_TPREL64), + "R_PPC_ADDR14": ValueOf(elf.R_PPC_ADDR14), + "R_PPC_ADDR14_BRNTAKEN": ValueOf(elf.R_PPC_ADDR14_BRNTAKEN), + "R_PPC_ADDR14_BRTAKEN": ValueOf(elf.R_PPC_ADDR14_BRTAKEN), + "R_PPC_ADDR16": ValueOf(elf.R_PPC_ADDR16), + "R_PPC_ADDR16_HA": ValueOf(elf.R_PPC_ADDR16_HA), + "R_PPC_ADDR16_HI": ValueOf(elf.R_PPC_ADDR16_HI), + "R_PPC_ADDR16_LO": ValueOf(elf.R_PPC_ADDR16_LO), + "R_PPC_ADDR24": ValueOf(elf.R_PPC_ADDR24), + "R_PPC_ADDR32": ValueOf(elf.R_PPC_ADDR32), + "R_PPC_COPY": ValueOf(elf.R_PPC_COPY), + "R_PPC_DTPMOD32": ValueOf(elf.R_PPC_DTPMOD32), + "R_PPC_DTPREL16": ValueOf(elf.R_PPC_DTPREL16), + "R_PPC_DTPREL16_HA": ValueOf(elf.R_PPC_DTPREL16_HA), + "R_PPC_DTPREL16_HI": ValueOf(elf.R_PPC_DTPREL16_HI), + "R_PPC_DTPREL16_LO": ValueOf(elf.R_PPC_DTPREL16_LO), + "R_PPC_DTPREL32": ValueOf(elf.R_PPC_DTPREL32), + "R_PPC_EMB_BIT_FLD": ValueOf(elf.R_PPC_EMB_BIT_FLD), + "R_PPC_EMB_MRKREF": ValueOf(elf.R_PPC_EMB_MRKREF), + "R_PPC_EMB_NADDR16": ValueOf(elf.R_PPC_EMB_NADDR16), + "R_PPC_EMB_NADDR16_HA": ValueOf(elf.R_PPC_EMB_NADDR16_HA), + "R_PPC_EMB_NADDR16_HI": ValueOf(elf.R_PPC_EMB_NADDR16_HI), + "R_PPC_EMB_NADDR16_LO": ValueOf(elf.R_PPC_EMB_NADDR16_LO), + "R_PPC_EMB_NADDR32": ValueOf(elf.R_PPC_EMB_NADDR32), + "R_PPC_EMB_RELSDA": ValueOf(elf.R_PPC_EMB_RELSDA), + "R_PPC_EMB_RELSEC16": ValueOf(elf.R_PPC_EMB_RELSEC16), + "R_PPC_EMB_RELST_HA": ValueOf(elf.R_PPC_EMB_RELST_HA), + "R_PPC_EMB_RELST_HI": ValueOf(elf.R_PPC_EMB_RELST_HI), + "R_PPC_EMB_RELST_LO": ValueOf(elf.R_PPC_EMB_RELST_LO), + "R_PPC_EMB_SDA21": ValueOf(elf.R_PPC_EMB_SDA21), + "R_PPC_EMB_SDA2I16": ValueOf(elf.R_PPC_EMB_SDA2I16), + "R_PPC_EMB_SDA2REL": ValueOf(elf.R_PPC_EMB_SDA2REL), + "R_PPC_EMB_SDAI16": ValueOf(elf.R_PPC_EMB_SDAI16), + "R_PPC_GLOB_DAT": ValueOf(elf.R_PPC_GLOB_DAT), + "R_PPC_GOT16": ValueOf(elf.R_PPC_GOT16), + "R_PPC_GOT16_HA": ValueOf(elf.R_PPC_GOT16_HA), + "R_PPC_GOT16_HI": ValueOf(elf.R_PPC_GOT16_HI), + "R_PPC_GOT16_LO": ValueOf(elf.R_PPC_GOT16_LO), + "R_PPC_GOT_TLSGD16": ValueOf(elf.R_PPC_GOT_TLSGD16), + "R_PPC_GOT_TLSGD16_HA": ValueOf(elf.R_PPC_GOT_TLSGD16_HA), + "R_PPC_GOT_TLSGD16_HI": ValueOf(elf.R_PPC_GOT_TLSGD16_HI), + "R_PPC_GOT_TLSGD16_LO": ValueOf(elf.R_PPC_GOT_TLSGD16_LO), + "R_PPC_GOT_TLSLD16": ValueOf(elf.R_PPC_GOT_TLSLD16), + "R_PPC_GOT_TLSLD16_HA": ValueOf(elf.R_PPC_GOT_TLSLD16_HA), + "R_PPC_GOT_TLSLD16_HI": ValueOf(elf.R_PPC_GOT_TLSLD16_HI), + "R_PPC_GOT_TLSLD16_LO": ValueOf(elf.R_PPC_GOT_TLSLD16_LO), + "R_PPC_GOT_TPREL16": ValueOf(elf.R_PPC_GOT_TPREL16), + "R_PPC_GOT_TPREL16_HA": ValueOf(elf.R_PPC_GOT_TPREL16_HA), + "R_PPC_GOT_TPREL16_HI": ValueOf(elf.R_PPC_GOT_TPREL16_HI), + "R_PPC_GOT_TPREL16_LO": ValueOf(elf.R_PPC_GOT_TPREL16_LO), + "R_PPC_JMP_SLOT": ValueOf(elf.R_PPC_JMP_SLOT), + "R_PPC_LOCAL24PC": ValueOf(elf.R_PPC_LOCAL24PC), + "R_PPC_NONE": ValueOf(elf.R_PPC_NONE), + "R_PPC_PLT16_HA": ValueOf(elf.R_PPC_PLT16_HA), + "R_PPC_PLT16_HI": ValueOf(elf.R_PPC_PLT16_HI), + "R_PPC_PLT16_LO": ValueOf(elf.R_PPC_PLT16_LO), + "R_PPC_PLT32": ValueOf(elf.R_PPC_PLT32), + "R_PPC_PLTREL24": ValueOf(elf.R_PPC_PLTREL24), + "R_PPC_PLTREL32": ValueOf(elf.R_PPC_PLTREL32), + "R_PPC_REL14": ValueOf(elf.R_PPC_REL14), + "R_PPC_REL14_BRNTAKEN": ValueOf(elf.R_PPC_REL14_BRNTAKEN), + "R_PPC_REL14_BRTAKEN": ValueOf(elf.R_PPC_REL14_BRTAKEN), + "R_PPC_REL24": ValueOf(elf.R_PPC_REL24), + "R_PPC_REL32": ValueOf(elf.R_PPC_REL32), + "R_PPC_RELATIVE": ValueOf(elf.R_PPC_RELATIVE), + "R_PPC_SDAREL16": ValueOf(elf.R_PPC_SDAREL16), + "R_PPC_SECTOFF": ValueOf(elf.R_PPC_SECTOFF), + "R_PPC_SECTOFF_HA": ValueOf(elf.R_PPC_SECTOFF_HA), + "R_PPC_SECTOFF_HI": ValueOf(elf.R_PPC_SECTOFF_HI), + "R_PPC_SECTOFF_LO": ValueOf(elf.R_PPC_SECTOFF_LO), + "R_PPC_TLS": ValueOf(elf.R_PPC_TLS), + "R_PPC_TPREL16": ValueOf(elf.R_PPC_TPREL16), + "R_PPC_TPREL16_HA": ValueOf(elf.R_PPC_TPREL16_HA), + "R_PPC_TPREL16_HI": ValueOf(elf.R_PPC_TPREL16_HI), + "R_PPC_TPREL16_LO": ValueOf(elf.R_PPC_TPREL16_LO), + "R_PPC_TPREL32": ValueOf(elf.R_PPC_TPREL32), + "R_PPC_UADDR16": ValueOf(elf.R_PPC_UADDR16), + "R_PPC_UADDR32": ValueOf(elf.R_PPC_UADDR32), + "R_SPARC_10": ValueOf(elf.R_SPARC_10), + "R_SPARC_11": ValueOf(elf.R_SPARC_11), + "R_SPARC_13": ValueOf(elf.R_SPARC_13), + "R_SPARC_16": ValueOf(elf.R_SPARC_16), + "R_SPARC_22": ValueOf(elf.R_SPARC_22), + "R_SPARC_32": ValueOf(elf.R_SPARC_32), + "R_SPARC_5": ValueOf(elf.R_SPARC_5), + "R_SPARC_6": ValueOf(elf.R_SPARC_6), + "R_SPARC_64": ValueOf(elf.R_SPARC_64), + "R_SPARC_7": ValueOf(elf.R_SPARC_7), + "R_SPARC_8": ValueOf(elf.R_SPARC_8), + "R_SPARC_COPY": ValueOf(elf.R_SPARC_COPY), + "R_SPARC_DISP16": ValueOf(elf.R_SPARC_DISP16), + "R_SPARC_DISP32": ValueOf(elf.R_SPARC_DISP32), + "R_SPARC_DISP64": ValueOf(elf.R_SPARC_DISP64), + "R_SPARC_DISP8": ValueOf(elf.R_SPARC_DISP8), + "R_SPARC_GLOB_DAT": ValueOf(elf.R_SPARC_GLOB_DAT), + "R_SPARC_GLOB_JMP": ValueOf(elf.R_SPARC_GLOB_JMP), + "R_SPARC_GOT10": ValueOf(elf.R_SPARC_GOT10), + "R_SPARC_GOT13": ValueOf(elf.R_SPARC_GOT13), + "R_SPARC_GOT22": ValueOf(elf.R_SPARC_GOT22), + "R_SPARC_H44": ValueOf(elf.R_SPARC_H44), + "R_SPARC_HH22": ValueOf(elf.R_SPARC_HH22), + "R_SPARC_HI22": ValueOf(elf.R_SPARC_HI22), + "R_SPARC_HIPLT22": ValueOf(elf.R_SPARC_HIPLT22), + "R_SPARC_HIX22": ValueOf(elf.R_SPARC_HIX22), + "R_SPARC_HM10": ValueOf(elf.R_SPARC_HM10), + "R_SPARC_JMP_SLOT": ValueOf(elf.R_SPARC_JMP_SLOT), + "R_SPARC_L44": ValueOf(elf.R_SPARC_L44), + "R_SPARC_LM22": ValueOf(elf.R_SPARC_LM22), + "R_SPARC_LO10": ValueOf(elf.R_SPARC_LO10), + "R_SPARC_LOPLT10": ValueOf(elf.R_SPARC_LOPLT10), + "R_SPARC_LOX10": ValueOf(elf.R_SPARC_LOX10), + "R_SPARC_M44": ValueOf(elf.R_SPARC_M44), + "R_SPARC_NONE": ValueOf(elf.R_SPARC_NONE), + "R_SPARC_OLO10": ValueOf(elf.R_SPARC_OLO10), + "R_SPARC_PC10": ValueOf(elf.R_SPARC_PC10), + "R_SPARC_PC22": ValueOf(elf.R_SPARC_PC22), + "R_SPARC_PCPLT10": ValueOf(elf.R_SPARC_PCPLT10), + "R_SPARC_PCPLT22": ValueOf(elf.R_SPARC_PCPLT22), + "R_SPARC_PCPLT32": ValueOf(elf.R_SPARC_PCPLT32), + "R_SPARC_PC_HH22": ValueOf(elf.R_SPARC_PC_HH22), + "R_SPARC_PC_HM10": ValueOf(elf.R_SPARC_PC_HM10), + "R_SPARC_PC_LM22": ValueOf(elf.R_SPARC_PC_LM22), + "R_SPARC_PLT32": ValueOf(elf.R_SPARC_PLT32), + "R_SPARC_PLT64": ValueOf(elf.R_SPARC_PLT64), + "R_SPARC_REGISTER": ValueOf(elf.R_SPARC_REGISTER), + "R_SPARC_RELATIVE": ValueOf(elf.R_SPARC_RELATIVE), + "R_SPARC_UA16": ValueOf(elf.R_SPARC_UA16), + "R_SPARC_UA32": ValueOf(elf.R_SPARC_UA32), + "R_SPARC_UA64": ValueOf(elf.R_SPARC_UA64), + "R_SPARC_WDISP16": ValueOf(elf.R_SPARC_WDISP16), + "R_SPARC_WDISP19": ValueOf(elf.R_SPARC_WDISP19), + "R_SPARC_WDISP22": ValueOf(elf.R_SPARC_WDISP22), + "R_SPARC_WDISP30": ValueOf(elf.R_SPARC_WDISP30), + "R_SPARC_WPLT30": ValueOf(elf.R_SPARC_WPLT30), + "R_SYM32": ValueOf(elf.R_SYM32), + "R_SYM64": ValueOf(elf.R_SYM64), + "R_TYPE32": ValueOf(elf.R_TYPE32), + "R_TYPE64": ValueOf(elf.R_TYPE64), + "R_X86_64_16": ValueOf(elf.R_X86_64_16), + "R_X86_64_32": ValueOf(elf.R_X86_64_32), + "R_X86_64_32S": ValueOf(elf.R_X86_64_32S), + "R_X86_64_64": ValueOf(elf.R_X86_64_64), + "R_X86_64_8": ValueOf(elf.R_X86_64_8), + "R_X86_64_COPY": ValueOf(elf.R_X86_64_COPY), + "R_X86_64_DTPMOD64": ValueOf(elf.R_X86_64_DTPMOD64), + "R_X86_64_DTPOFF32": ValueOf(elf.R_X86_64_DTPOFF32), + "R_X86_64_DTPOFF64": ValueOf(elf.R_X86_64_DTPOFF64), + "R_X86_64_GLOB_DAT": ValueOf(elf.R_X86_64_GLOB_DAT), + "R_X86_64_GOT32": ValueOf(elf.R_X86_64_GOT32), + "R_X86_64_GOTPCREL": ValueOf(elf.R_X86_64_GOTPCREL), + "R_X86_64_GOTTPOFF": ValueOf(elf.R_X86_64_GOTTPOFF), + "R_X86_64_JMP_SLOT": ValueOf(elf.R_X86_64_JMP_SLOT), + "R_X86_64_NONE": ValueOf(elf.R_X86_64_NONE), + "R_X86_64_PC16": ValueOf(elf.R_X86_64_PC16), + "R_X86_64_PC32": ValueOf(elf.R_X86_64_PC32), + "R_X86_64_PC8": ValueOf(elf.R_X86_64_PC8), + "R_X86_64_PLT32": ValueOf(elf.R_X86_64_PLT32), + "R_X86_64_RELATIVE": ValueOf(elf.R_X86_64_RELATIVE), + "R_X86_64_TLSGD": ValueOf(elf.R_X86_64_TLSGD), + "R_X86_64_TLSLD": ValueOf(elf.R_X86_64_TLSLD), + "R_X86_64_TPOFF32": ValueOf(elf.R_X86_64_TPOFF32), + "R_X86_64_TPOFF64": ValueOf(elf.R_X86_64_TPOFF64), + "SHF_ALLOC": ValueOf(elf.SHF_ALLOC), + "SHF_COMPRESSED": ValueOf(elf.SHF_COMPRESSED), + "SHF_EXECINSTR": ValueOf(elf.SHF_EXECINSTR), + "SHF_GROUP": ValueOf(elf.SHF_GROUP), + "SHF_INFO_LINK": ValueOf(elf.SHF_INFO_LINK), + "SHF_LINK_ORDER": ValueOf(elf.SHF_LINK_ORDER), + "SHF_MASKOS": ValueOf(elf.SHF_MASKOS), + "SHF_MASKPROC": ValueOf(elf.SHF_MASKPROC), + "SHF_MERGE": ValueOf(elf.SHF_MERGE), + "SHF_OS_NONCONFORMING": ValueOf(elf.SHF_OS_NONCONFORMING), + "SHF_STRINGS": ValueOf(elf.SHF_STRINGS), + "SHF_TLS": ValueOf(elf.SHF_TLS), + "SHF_WRITE": ValueOf(elf.SHF_WRITE), + "SHN_ABS": ValueOf(elf.SHN_ABS), + "SHN_COMMON": ValueOf(elf.SHN_COMMON), + "SHN_HIOS": ValueOf(elf.SHN_HIOS), + "SHN_HIPROC": ValueOf(elf.SHN_HIPROC), + "SHN_HIRESERVE": ValueOf(elf.SHN_HIRESERVE), + "SHN_LOOS": ValueOf(elf.SHN_LOOS), + "SHN_LOPROC": ValueOf(elf.SHN_LOPROC), + "SHN_LORESERVE": ValueOf(elf.SHN_LORESERVE), + "SHN_UNDEF": ValueOf(elf.SHN_UNDEF), + "SHN_XINDEX": ValueOf(elf.SHN_XINDEX), + "SHT_DYNAMIC": ValueOf(elf.SHT_DYNAMIC), + "SHT_DYNSYM": ValueOf(elf.SHT_DYNSYM), + "SHT_FINI_ARRAY": ValueOf(elf.SHT_FINI_ARRAY), + "SHT_GNU_ATTRIBUTES": ValueOf(elf.SHT_GNU_ATTRIBUTES), + "SHT_GNU_HASH": ValueOf(elf.SHT_GNU_HASH), + "SHT_GNU_LIBLIST": ValueOf(elf.SHT_GNU_LIBLIST), + "SHT_GNU_VERDEF": ValueOf(elf.SHT_GNU_VERDEF), + "SHT_GNU_VERNEED": ValueOf(elf.SHT_GNU_VERNEED), + "SHT_GNU_VERSYM": ValueOf(elf.SHT_GNU_VERSYM), + "SHT_GROUP": ValueOf(elf.SHT_GROUP), + "SHT_HASH": ValueOf(elf.SHT_HASH), + "SHT_HIOS": ValueOf(elf.SHT_HIOS), + "SHT_HIPROC": ValueOf(elf.SHT_HIPROC), + "SHT_HIUSER": ValueOf(elf.SHT_HIUSER), + "SHT_INIT_ARRAY": ValueOf(elf.SHT_INIT_ARRAY), + "SHT_LOOS": ValueOf(elf.SHT_LOOS), + "SHT_LOPROC": ValueOf(elf.SHT_LOPROC), + "SHT_LOUSER": ValueOf(elf.SHT_LOUSER), + "SHT_NOBITS": ValueOf(elf.SHT_NOBITS), + "SHT_NOTE": ValueOf(elf.SHT_NOTE), + "SHT_NULL": ValueOf(elf.SHT_NULL), + "SHT_PREINIT_ARRAY": ValueOf(elf.SHT_PREINIT_ARRAY), + "SHT_PROGBITS": ValueOf(elf.SHT_PROGBITS), + "SHT_REL": ValueOf(elf.SHT_REL), + "SHT_RELA": ValueOf(elf.SHT_RELA), + "SHT_SHLIB": ValueOf(elf.SHT_SHLIB), + "SHT_STRTAB": ValueOf(elf.SHT_STRTAB), + "SHT_SYMTAB": ValueOf(elf.SHT_SYMTAB), + "SHT_SYMTAB_SHNDX": ValueOf(elf.SHT_SYMTAB_SHNDX), + "STB_GLOBAL": ValueOf(elf.STB_GLOBAL), + "STB_HIOS": ValueOf(elf.STB_HIOS), + "STB_HIPROC": ValueOf(elf.STB_HIPROC), + "STB_LOCAL": ValueOf(elf.STB_LOCAL), + "STB_LOOS": ValueOf(elf.STB_LOOS), + "STB_LOPROC": ValueOf(elf.STB_LOPROC), + "STB_WEAK": ValueOf(elf.STB_WEAK), + "STT_COMMON": ValueOf(elf.STT_COMMON), + "STT_FILE": ValueOf(elf.STT_FILE), + "STT_FUNC": ValueOf(elf.STT_FUNC), + "STT_HIOS": ValueOf(elf.STT_HIOS), + "STT_HIPROC": ValueOf(elf.STT_HIPROC), + "STT_LOOS": ValueOf(elf.STT_LOOS), + "STT_LOPROC": ValueOf(elf.STT_LOPROC), + "STT_NOTYPE": ValueOf(elf.STT_NOTYPE), + "STT_OBJECT": ValueOf(elf.STT_OBJECT), + "STT_SECTION": ValueOf(elf.STT_SECTION), + "STT_TLS": ValueOf(elf.STT_TLS), + "STV_DEFAULT": ValueOf(elf.STV_DEFAULT), + "STV_HIDDEN": ValueOf(elf.STV_HIDDEN), + "STV_INTERNAL": ValueOf(elf.STV_INTERNAL), + "STV_PROTECTED": ValueOf(elf.STV_PROTECTED), + "ST_BIND": ValueOf(elf.ST_BIND), + "ST_INFO": ValueOf(elf.ST_INFO), + "ST_TYPE": ValueOf(elf.ST_TYPE), + "ST_VISIBILITY": ValueOf(elf.ST_VISIBILITY), + "Sym32Size": ValueOf(elf.Sym32Size), + "Sym64Size": ValueOf(elf.Sym64Size), + },Types: map[string]Type{ + "Chdr32": TypeOf((*elf.Chdr32)(nil)).Elem(), + "Chdr64": TypeOf((*elf.Chdr64)(nil)).Elem(), + "Class": TypeOf((*elf.Class)(nil)).Elem(), + "CompressionType": TypeOf((*elf.CompressionType)(nil)).Elem(), + "Data": TypeOf((*elf.Data)(nil)).Elem(), + "Dyn32": TypeOf((*elf.Dyn32)(nil)).Elem(), + "Dyn64": TypeOf((*elf.Dyn64)(nil)).Elem(), + "DynFlag": TypeOf((*elf.DynFlag)(nil)).Elem(), + "DynTag": TypeOf((*elf.DynTag)(nil)).Elem(), + "File": TypeOf((*elf.File)(nil)).Elem(), + "FileHeader": TypeOf((*elf.FileHeader)(nil)).Elem(), + "FormatError": TypeOf((*elf.FormatError)(nil)).Elem(), + "Header32": TypeOf((*elf.Header32)(nil)).Elem(), + "Header64": TypeOf((*elf.Header64)(nil)).Elem(), + "ImportedSymbol": TypeOf((*elf.ImportedSymbol)(nil)).Elem(), + "Machine": TypeOf((*elf.Machine)(nil)).Elem(), + "NType": TypeOf((*elf.NType)(nil)).Elem(), + "OSABI": TypeOf((*elf.OSABI)(nil)).Elem(), + "Prog": TypeOf((*elf.Prog)(nil)).Elem(), + "Prog32": TypeOf((*elf.Prog32)(nil)).Elem(), + "Prog64": TypeOf((*elf.Prog64)(nil)).Elem(), + "ProgFlag": TypeOf((*elf.ProgFlag)(nil)).Elem(), + "ProgHeader": TypeOf((*elf.ProgHeader)(nil)).Elem(), + "ProgType": TypeOf((*elf.ProgType)(nil)).Elem(), + "R_386": TypeOf((*elf.R_386)(nil)).Elem(), + "R_390": TypeOf((*elf.R_390)(nil)).Elem(), + "R_AARCH64": TypeOf((*elf.R_AARCH64)(nil)).Elem(), + "R_ALPHA": TypeOf((*elf.R_ALPHA)(nil)).Elem(), + "R_ARM": TypeOf((*elf.R_ARM)(nil)).Elem(), + "R_MIPS": TypeOf((*elf.R_MIPS)(nil)).Elem(), + "R_PPC": TypeOf((*elf.R_PPC)(nil)).Elem(), + "R_PPC64": TypeOf((*elf.R_PPC64)(nil)).Elem(), + "R_SPARC": TypeOf((*elf.R_SPARC)(nil)).Elem(), + "R_X86_64": TypeOf((*elf.R_X86_64)(nil)).Elem(), + "Rel32": TypeOf((*elf.Rel32)(nil)).Elem(), + "Rel64": TypeOf((*elf.Rel64)(nil)).Elem(), + "Rela32": TypeOf((*elf.Rela32)(nil)).Elem(), + "Rela64": TypeOf((*elf.Rela64)(nil)).Elem(), + "Section": TypeOf((*elf.Section)(nil)).Elem(), + "Section32": TypeOf((*elf.Section32)(nil)).Elem(), + "Section64": TypeOf((*elf.Section64)(nil)).Elem(), + "SectionFlag": TypeOf((*elf.SectionFlag)(nil)).Elem(), + "SectionHeader": TypeOf((*elf.SectionHeader)(nil)).Elem(), + "SectionIndex": TypeOf((*elf.SectionIndex)(nil)).Elem(), + "SectionType": TypeOf((*elf.SectionType)(nil)).Elem(), + "Sym32": TypeOf((*elf.Sym32)(nil)).Elem(), + "Sym64": TypeOf((*elf.Sym64)(nil)).Elem(), + "SymBind": TypeOf((*elf.SymBind)(nil)).Elem(), + "SymType": TypeOf((*elf.SymType)(nil)).Elem(), + "SymVis": TypeOf((*elf.SymVis)(nil)).Elem(), + "Symbol": TypeOf((*elf.Symbol)(nil)).Elem(), + "Type": TypeOf((*elf.Type)(nil)).Elem(), + "Version": TypeOf((*elf.Version)(nil)).Elem(), + },Untypeds: map[string]string{ + "ARM_MAGIC_TRAMP_NUMBER": "int:1543503875", + "EI_ABIVERSION": "int:8", + "EI_CLASS": "int:4", + "EI_DATA": "int:5", + "EI_NIDENT": "int:16", + "EI_OSABI": "int:7", + "EI_PAD": "int:9", + "EI_VERSION": "int:6", + "ELFMAG": "string:\u007fELF", + "Sym32Size": "int:16", + "Sym64Size": "int:24", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/debug_gosym.go b/vendor/github.com/cosmos72/gomacro/imports/debug_gosym.go new file mode 100644 index 0000000..7d9862d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/debug_gosym.go @@ -0,0 +1,30 @@ +// this file was generated by gomacro command: import _b "debug/gosym" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "debug/gosym" +) + +// reflection: allow interpreted code to import "debug/gosym" +func init() { + Packages["debug/gosym"] = Package{ + Binds: map[string]Value{ + "NewLineTable": ValueOf(gosym.NewLineTable), + "NewTable": ValueOf(gosym.NewTable), + },Types: map[string]Type{ + "DecodingError": TypeOf((*gosym.DecodingError)(nil)).Elem(), + "Func": TypeOf((*gosym.Func)(nil)).Elem(), + "LineTable": TypeOf((*gosym.LineTable)(nil)).Elem(), + "Obj": TypeOf((*gosym.Obj)(nil)).Elem(), + "Sym": TypeOf((*gosym.Sym)(nil)).Elem(), + "Table": TypeOf((*gosym.Table)(nil)).Elem(), + "UnknownFileError": TypeOf((*gosym.UnknownFileError)(nil)).Elem(), + "UnknownLineError": TypeOf((*gosym.UnknownLineError)(nil)).Elem(), + },Wrappers: map[string][]string{ + "Func": []string{"BaseName","PackageName","ReceiverName","Static",}, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/debug_macho.go b/vendor/github.com/cosmos72/gomacro/imports/debug_macho.go new file mode 100644 index 0000000..cfe4cb4 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/debug_macho.go @@ -0,0 +1,91 @@ +// this file was generated by gomacro command: import _b "debug/macho" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "debug/macho" +) + +// reflection: allow interpreted code to import "debug/macho" +func init() { + Packages["debug/macho"] = Package{ + Binds: map[string]Value{ + "Cpu386": ValueOf(macho.Cpu386), + "CpuAmd64": ValueOf(macho.CpuAmd64), + "CpuArm": ValueOf(macho.CpuArm), + "CpuPpc": ValueOf(macho.CpuPpc), + "CpuPpc64": ValueOf(macho.CpuPpc64), + "ErrNotFat": ValueOf(&macho.ErrNotFat).Elem(), + "LoadCmdDylib": ValueOf(macho.LoadCmdDylib), + "LoadCmdDylinker": ValueOf(macho.LoadCmdDylinker), + "LoadCmdDysymtab": ValueOf(macho.LoadCmdDysymtab), + "LoadCmdSegment": ValueOf(macho.LoadCmdSegment), + "LoadCmdSegment64": ValueOf(macho.LoadCmdSegment64), + "LoadCmdSymtab": ValueOf(macho.LoadCmdSymtab), + "LoadCmdThread": ValueOf(macho.LoadCmdThread), + "LoadCmdUnixThread": ValueOf(macho.LoadCmdUnixThread), + "Magic32": ValueOf(macho.Magic32), + "Magic64": ValueOf(macho.Magic64), + "MagicFat": ValueOf(macho.MagicFat), + "NewFatFile": ValueOf(macho.NewFatFile), + "NewFile": ValueOf(macho.NewFile), + "Open": ValueOf(macho.Open), + "OpenFat": ValueOf(macho.OpenFat), + "TypeBundle": ValueOf(macho.TypeBundle), + "TypeDylib": ValueOf(macho.TypeDylib), + "TypeExec": ValueOf(macho.TypeExec), + "TypeObj": ValueOf(macho.TypeObj), + },Types: map[string]Type{ + "Cpu": TypeOf((*macho.Cpu)(nil)).Elem(), + "Dylib": TypeOf((*macho.Dylib)(nil)).Elem(), + "DylibCmd": TypeOf((*macho.DylibCmd)(nil)).Elem(), + "Dysymtab": TypeOf((*macho.Dysymtab)(nil)).Elem(), + "DysymtabCmd": TypeOf((*macho.DysymtabCmd)(nil)).Elem(), + "FatArch": TypeOf((*macho.FatArch)(nil)).Elem(), + "FatArchHeader": TypeOf((*macho.FatArchHeader)(nil)).Elem(), + "FatFile": TypeOf((*macho.FatFile)(nil)).Elem(), + "File": TypeOf((*macho.File)(nil)).Elem(), + "FileHeader": TypeOf((*macho.FileHeader)(nil)).Elem(), + "FormatError": TypeOf((*macho.FormatError)(nil)).Elem(), + "Load": TypeOf((*macho.Load)(nil)).Elem(), + "LoadBytes": TypeOf((*macho.LoadBytes)(nil)).Elem(), + "LoadCmd": TypeOf((*macho.LoadCmd)(nil)).Elem(), + "Nlist32": TypeOf((*macho.Nlist32)(nil)).Elem(), + "Nlist64": TypeOf((*macho.Nlist64)(nil)).Elem(), + "Regs386": TypeOf((*macho.Regs386)(nil)).Elem(), + "RegsAMD64": TypeOf((*macho.RegsAMD64)(nil)).Elem(), + "Section": TypeOf((*macho.Section)(nil)).Elem(), + "Section32": TypeOf((*macho.Section32)(nil)).Elem(), + "Section64": TypeOf((*macho.Section64)(nil)).Elem(), + "SectionHeader": TypeOf((*macho.SectionHeader)(nil)).Elem(), + "Segment": TypeOf((*macho.Segment)(nil)).Elem(), + "Segment32": TypeOf((*macho.Segment32)(nil)).Elem(), + "Segment64": TypeOf((*macho.Segment64)(nil)).Elem(), + "SegmentHeader": TypeOf((*macho.SegmentHeader)(nil)).Elem(), + "Symbol": TypeOf((*macho.Symbol)(nil)).Elem(), + "Symtab": TypeOf((*macho.Symtab)(nil)).Elem(), + "SymtabCmd": TypeOf((*macho.SymtabCmd)(nil)).Elem(), + "Thread": TypeOf((*macho.Thread)(nil)).Elem(), + "Type": TypeOf((*macho.Type)(nil)).Elem(), + },Proxies: map[string]Type{ + "Load": TypeOf((*Load_debug_macho)(nil)).Elem(), + },Wrappers: map[string][]string{ + "Dylib": []string{"Raw",}, + "Dysymtab": []string{"Raw",}, + "FatArch": []string{"Close","DWARF","ImportedLibraries","ImportedSymbols","Section","Segment",}, + "Segment": []string{"Raw",}, + "Symtab": []string{"Raw",}, + }, + } +} + +// --------------- proxy for debug/macho.Load --------------- +type Load_debug_macho struct { + Object interface{} + Raw_ func(interface{}) []byte +} +func (Proxy *Load_debug_macho) Raw() []byte { + return Proxy.Raw_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/debug_pe.go b/vendor/github.com/cosmos72/gomacro/imports/debug_pe.go new file mode 100644 index 0000000..862e12b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/debug_pe.go @@ -0,0 +1,77 @@ +// this file was generated by gomacro command: import _b "debug/pe" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "debug/pe" +) + +// reflection: allow interpreted code to import "debug/pe" +func init() { + Packages["debug/pe"] = Package{ + Binds: map[string]Value{ + "COFFSymbolSize": ValueOf(pe.COFFSymbolSize), + "IMAGE_FILE_MACHINE_AM33": ValueOf(pe.IMAGE_FILE_MACHINE_AM33), + "IMAGE_FILE_MACHINE_AMD64": ValueOf(pe.IMAGE_FILE_MACHINE_AMD64), + "IMAGE_FILE_MACHINE_ARM": ValueOf(pe.IMAGE_FILE_MACHINE_ARM), + "IMAGE_FILE_MACHINE_EBC": ValueOf(pe.IMAGE_FILE_MACHINE_EBC), + "IMAGE_FILE_MACHINE_I386": ValueOf(pe.IMAGE_FILE_MACHINE_I386), + "IMAGE_FILE_MACHINE_IA64": ValueOf(pe.IMAGE_FILE_MACHINE_IA64), + "IMAGE_FILE_MACHINE_M32R": ValueOf(pe.IMAGE_FILE_MACHINE_M32R), + "IMAGE_FILE_MACHINE_MIPS16": ValueOf(pe.IMAGE_FILE_MACHINE_MIPS16), + "IMAGE_FILE_MACHINE_MIPSFPU": ValueOf(pe.IMAGE_FILE_MACHINE_MIPSFPU), + "IMAGE_FILE_MACHINE_MIPSFPU16": ValueOf(pe.IMAGE_FILE_MACHINE_MIPSFPU16), + "IMAGE_FILE_MACHINE_POWERPC": ValueOf(pe.IMAGE_FILE_MACHINE_POWERPC), + "IMAGE_FILE_MACHINE_POWERPCFP": ValueOf(pe.IMAGE_FILE_MACHINE_POWERPCFP), + "IMAGE_FILE_MACHINE_R4000": ValueOf(pe.IMAGE_FILE_MACHINE_R4000), + "IMAGE_FILE_MACHINE_SH3": ValueOf(pe.IMAGE_FILE_MACHINE_SH3), + "IMAGE_FILE_MACHINE_SH3DSP": ValueOf(pe.IMAGE_FILE_MACHINE_SH3DSP), + "IMAGE_FILE_MACHINE_SH4": ValueOf(pe.IMAGE_FILE_MACHINE_SH4), + "IMAGE_FILE_MACHINE_SH5": ValueOf(pe.IMAGE_FILE_MACHINE_SH5), + "IMAGE_FILE_MACHINE_THUMB": ValueOf(pe.IMAGE_FILE_MACHINE_THUMB), + "IMAGE_FILE_MACHINE_UNKNOWN": ValueOf(pe.IMAGE_FILE_MACHINE_UNKNOWN), + "IMAGE_FILE_MACHINE_WCEMIPSV2": ValueOf(pe.IMAGE_FILE_MACHINE_WCEMIPSV2), + "NewFile": ValueOf(pe.NewFile), + "Open": ValueOf(pe.Open), + },Types: map[string]Type{ + "COFFSymbol": TypeOf((*pe.COFFSymbol)(nil)).Elem(), + "DataDirectory": TypeOf((*pe.DataDirectory)(nil)).Elem(), + "File": TypeOf((*pe.File)(nil)).Elem(), + "FileHeader": TypeOf((*pe.FileHeader)(nil)).Elem(), + "FormatError": TypeOf((*pe.FormatError)(nil)).Elem(), + "ImportDirectory": TypeOf((*pe.ImportDirectory)(nil)).Elem(), + "OptionalHeader32": TypeOf((*pe.OptionalHeader32)(nil)).Elem(), + "OptionalHeader64": TypeOf((*pe.OptionalHeader64)(nil)).Elem(), + "Reloc": TypeOf((*pe.Reloc)(nil)).Elem(), + "Section": TypeOf((*pe.Section)(nil)).Elem(), + "SectionHeader": TypeOf((*pe.SectionHeader)(nil)).Elem(), + "SectionHeader32": TypeOf((*pe.SectionHeader32)(nil)).Elem(), + "StringTable": TypeOf((*pe.StringTable)(nil)).Elem(), + "Symbol": TypeOf((*pe.Symbol)(nil)).Elem(), + },Untypeds: map[string]string{ + "COFFSymbolSize": "int:18", + "IMAGE_FILE_MACHINE_AM33": "int:467", + "IMAGE_FILE_MACHINE_AMD64": "int:34404", + "IMAGE_FILE_MACHINE_ARM": "int:448", + "IMAGE_FILE_MACHINE_EBC": "int:3772", + "IMAGE_FILE_MACHINE_I386": "int:332", + "IMAGE_FILE_MACHINE_IA64": "int:512", + "IMAGE_FILE_MACHINE_M32R": "int:36929", + "IMAGE_FILE_MACHINE_MIPS16": "int:614", + "IMAGE_FILE_MACHINE_MIPSFPU": "int:870", + "IMAGE_FILE_MACHINE_MIPSFPU16": "int:1126", + "IMAGE_FILE_MACHINE_POWERPC": "int:496", + "IMAGE_FILE_MACHINE_POWERPCFP": "int:497", + "IMAGE_FILE_MACHINE_R4000": "int:358", + "IMAGE_FILE_MACHINE_SH3": "int:418", + "IMAGE_FILE_MACHINE_SH3DSP": "int:419", + "IMAGE_FILE_MACHINE_SH4": "int:422", + "IMAGE_FILE_MACHINE_SH5": "int:424", + "IMAGE_FILE_MACHINE_THUMB": "int:450", + "IMAGE_FILE_MACHINE_UNKNOWN": "int:0", + "IMAGE_FILE_MACHINE_WCEMIPSV2": "int:361", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/debug_plan9obj.go b/vendor/github.com/cosmos72/gomacro/imports/debug_plan9obj.go new file mode 100644 index 0000000..e102f2d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/debug_plan9obj.go @@ -0,0 +1,34 @@ +// this file was generated by gomacro command: import _b "debug/plan9obj" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "debug/plan9obj" +) + +// reflection: allow interpreted code to import "debug/plan9obj" +func init() { + Packages["debug/plan9obj"] = Package{ + Binds: map[string]Value{ + "Magic386": ValueOf(plan9obj.Magic386), + "Magic64": ValueOf(plan9obj.Magic64), + "MagicAMD64": ValueOf(plan9obj.MagicAMD64), + "MagicARM": ValueOf(plan9obj.MagicARM), + "NewFile": ValueOf(plan9obj.NewFile), + "Open": ValueOf(plan9obj.Open), + },Types: map[string]Type{ + "File": TypeOf((*plan9obj.File)(nil)).Elem(), + "FileHeader": TypeOf((*plan9obj.FileHeader)(nil)).Elem(), + "Section": TypeOf((*plan9obj.Section)(nil)).Elem(), + "SectionHeader": TypeOf((*plan9obj.SectionHeader)(nil)).Elem(), + "Sym": TypeOf((*plan9obj.Sym)(nil)).Elem(), + },Untypeds: map[string]string{ + "Magic386": "int:491", + "Magic64": "int:32768", + "MagicAMD64": "int:35479", + "MagicARM": "int:1607", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding.go b/vendor/github.com/cosmos72/gomacro/imports/encoding.go new file mode 100644 index 0000000..41f45f5 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding.go @@ -0,0 +1,62 @@ +// this file was generated by gomacro command: import _b "encoding" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding" +) + +// reflection: allow interpreted code to import "encoding" +func init() { + Packages["encoding"] = Package{ + Types: map[string]Type{ + "BinaryMarshaler": TypeOf((*encoding.BinaryMarshaler)(nil)).Elem(), + "BinaryUnmarshaler": TypeOf((*encoding.BinaryUnmarshaler)(nil)).Elem(), + "TextMarshaler": TypeOf((*encoding.TextMarshaler)(nil)).Elem(), + "TextUnmarshaler": TypeOf((*encoding.TextUnmarshaler)(nil)).Elem(), + },Proxies: map[string]Type{ + "BinaryMarshaler": TypeOf((*BinaryMarshaler_encoding)(nil)).Elem(), + "BinaryUnmarshaler": TypeOf((*BinaryUnmarshaler_encoding)(nil)).Elem(), + "TextMarshaler": TypeOf((*TextMarshaler_encoding)(nil)).Elem(), + "TextUnmarshaler": TypeOf((*TextUnmarshaler_encoding)(nil)).Elem(), + }, + } +} + +// --------------- proxy for encoding.BinaryMarshaler --------------- +type BinaryMarshaler_encoding struct { + Object interface{} + MarshalBinary_ func(interface{}) (data []byte, err error) +} +func (Proxy *BinaryMarshaler_encoding) MarshalBinary() (data []byte, err error) { + return Proxy.MarshalBinary_(Proxy.Object) +} + +// --------------- proxy for encoding.BinaryUnmarshaler --------------- +type BinaryUnmarshaler_encoding struct { + Object interface{} + UnmarshalBinary_ func(_proxy_obj_ interface{}, data []byte) error +} +func (Proxy *BinaryUnmarshaler_encoding) UnmarshalBinary(data []byte) error { + return Proxy.UnmarshalBinary_(Proxy.Object, data) +} + +// --------------- proxy for encoding.TextMarshaler --------------- +type TextMarshaler_encoding struct { + Object interface{} + MarshalText_ func(interface{}) (text []byte, err error) +} +func (Proxy *TextMarshaler_encoding) MarshalText() (text []byte, err error) { + return Proxy.MarshalText_(Proxy.Object) +} + +// --------------- proxy for encoding.TextUnmarshaler --------------- +type TextUnmarshaler_encoding struct { + Object interface{} + UnmarshalText_ func(_proxy_obj_ interface{}, text []byte) error +} +func (Proxy *TextUnmarshaler_encoding) UnmarshalText(text []byte) error { + return Proxy.UnmarshalText_(Proxy.Object, text) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_ascii85.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_ascii85.go new file mode 100644 index 0000000..82d80de --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_ascii85.go @@ -0,0 +1,24 @@ +// this file was generated by gomacro command: import _b "encoding/ascii85" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/ascii85" +) + +// reflection: allow interpreted code to import "encoding/ascii85" +func init() { + Packages["encoding/ascii85"] = Package{ + Binds: map[string]Value{ + "Decode": ValueOf(ascii85.Decode), + "Encode": ValueOf(ascii85.Encode), + "MaxEncodedLen": ValueOf(ascii85.MaxEncodedLen), + "NewDecoder": ValueOf(ascii85.NewDecoder), + "NewEncoder": ValueOf(ascii85.NewEncoder), + },Types: map[string]Type{ + "CorruptInputError": TypeOf((*ascii85.CorruptInputError)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_asn1.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_asn1.go new file mode 100644 index 0000000..cd97c75 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_asn1.go @@ -0,0 +1,68 @@ +// this file was generated by gomacro command: import _b "encoding/asn1" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/asn1" +) + +// reflection: allow interpreted code to import "encoding/asn1" +func init() { + Packages["encoding/asn1"] = Package{ + Binds: map[string]Value{ + "ClassApplication": ValueOf(asn1.ClassApplication), + "ClassContextSpecific": ValueOf(asn1.ClassContextSpecific), + "ClassPrivate": ValueOf(asn1.ClassPrivate), + "ClassUniversal": ValueOf(asn1.ClassUniversal), + "Marshal": ValueOf(asn1.Marshal), + "TagBitString": ValueOf(asn1.TagBitString), + "TagBoolean": ValueOf(asn1.TagBoolean), + "TagEnum": ValueOf(asn1.TagEnum), + "TagGeneralString": ValueOf(asn1.TagGeneralString), + "TagGeneralizedTime": ValueOf(asn1.TagGeneralizedTime), + "TagIA5String": ValueOf(asn1.TagIA5String), + "TagInteger": ValueOf(asn1.TagInteger), + "TagOID": ValueOf(asn1.TagOID), + "TagOctetString": ValueOf(asn1.TagOctetString), + "TagPrintableString": ValueOf(asn1.TagPrintableString), + "TagSequence": ValueOf(asn1.TagSequence), + "TagSet": ValueOf(asn1.TagSet), + "TagT61String": ValueOf(asn1.TagT61String), + "TagUTCTime": ValueOf(asn1.TagUTCTime), + "TagUTF8String": ValueOf(asn1.TagUTF8String), + "Unmarshal": ValueOf(asn1.Unmarshal), + "UnmarshalWithParams": ValueOf(asn1.UnmarshalWithParams), + },Types: map[string]Type{ + "BitString": TypeOf((*asn1.BitString)(nil)).Elem(), + "Enumerated": TypeOf((*asn1.Enumerated)(nil)).Elem(), + "Flag": TypeOf((*asn1.Flag)(nil)).Elem(), + "ObjectIdentifier": TypeOf((*asn1.ObjectIdentifier)(nil)).Elem(), + "RawContent": TypeOf((*asn1.RawContent)(nil)).Elem(), + "RawValue": TypeOf((*asn1.RawValue)(nil)).Elem(), + "StructuralError": TypeOf((*asn1.StructuralError)(nil)).Elem(), + "SyntaxError": TypeOf((*asn1.SyntaxError)(nil)).Elem(), + },Untypeds: map[string]string{ + "ClassApplication": "int:1", + "ClassContextSpecific": "int:2", + "ClassPrivate": "int:3", + "ClassUniversal": "int:0", + "TagBitString": "int:3", + "TagBoolean": "int:1", + "TagEnum": "int:10", + "TagGeneralString": "int:27", + "TagGeneralizedTime": "int:24", + "TagIA5String": "int:22", + "TagInteger": "int:2", + "TagOID": "int:6", + "TagOctetString": "int:4", + "TagPrintableString": "int:19", + "TagSequence": "int:16", + "TagSet": "int:17", + "TagT61String": "int:20", + "TagUTCTime": "int:23", + "TagUTF8String": "int:12", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_base32.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_base32.go new file mode 100644 index 0000000..0855789 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_base32.go @@ -0,0 +1,25 @@ +// this file was generated by gomacro command: import _b "encoding/base32" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/base32" +) + +// reflection: allow interpreted code to import "encoding/base32" +func init() { + Packages["encoding/base32"] = Package{ + Binds: map[string]Value{ + "HexEncoding": ValueOf(&base32.HexEncoding).Elem(), + "NewDecoder": ValueOf(base32.NewDecoder), + "NewEncoder": ValueOf(base32.NewEncoder), + "NewEncoding": ValueOf(base32.NewEncoding), + "StdEncoding": ValueOf(&base32.StdEncoding).Elem(), + },Types: map[string]Type{ + "CorruptInputError": TypeOf((*base32.CorruptInputError)(nil)).Elem(), + "Encoding": TypeOf((*base32.Encoding)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_base64.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_base64.go new file mode 100644 index 0000000..f241161 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_base64.go @@ -0,0 +1,29 @@ +// this file was generated by gomacro command: import _b "encoding/base64" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/base64" +) + +// reflection: allow interpreted code to import "encoding/base64" +func init() { + Packages["encoding/base64"] = Package{ + Binds: map[string]Value{ + "NewDecoder": ValueOf(base64.NewDecoder), + "NewEncoder": ValueOf(base64.NewEncoder), + "NewEncoding": ValueOf(base64.NewEncoding), + "NoPadding": ValueOf(base64.NoPadding), + "RawStdEncoding": ValueOf(&base64.RawStdEncoding).Elem(), + "RawURLEncoding": ValueOf(&base64.RawURLEncoding).Elem(), + "StdEncoding": ValueOf(&base64.StdEncoding).Elem(), + "StdPadding": ValueOf(base64.StdPadding), + "URLEncoding": ValueOf(&base64.URLEncoding).Elem(), + },Types: map[string]Type{ + "CorruptInputError": TypeOf((*base64.CorruptInputError)(nil)).Elem(), + "Encoding": TypeOf((*base64.Encoding)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_binary.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_binary.go new file mode 100644 index 0000000..de2368b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_binary.go @@ -0,0 +1,72 @@ +// this file was generated by gomacro command: import _b "encoding/binary" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/binary" +) + +// reflection: allow interpreted code to import "encoding/binary" +func init() { + Packages["encoding/binary"] = Package{ + Binds: map[string]Value{ + "BigEndian": ValueOf(&binary.BigEndian).Elem(), + "LittleEndian": ValueOf(&binary.LittleEndian).Elem(), + "MaxVarintLen16": ValueOf(binary.MaxVarintLen16), + "MaxVarintLen32": ValueOf(binary.MaxVarintLen32), + "MaxVarintLen64": ValueOf(binary.MaxVarintLen64), + "PutUvarint": ValueOf(binary.PutUvarint), + "PutVarint": ValueOf(binary.PutVarint), + "Read": ValueOf(binary.Read), + "ReadUvarint": ValueOf(binary.ReadUvarint), + "ReadVarint": ValueOf(binary.ReadVarint), + "Size": ValueOf(binary.Size), + "Uvarint": ValueOf(binary.Uvarint), + "Varint": ValueOf(binary.Varint), + "Write": ValueOf(binary.Write), + },Types: map[string]Type{ + "ByteOrder": TypeOf((*binary.ByteOrder)(nil)).Elem(), + },Proxies: map[string]Type{ + "ByteOrder": TypeOf((*ByteOrder_encoding_binary)(nil)).Elem(), + },Untypeds: map[string]string{ + "MaxVarintLen16": "int:3", + "MaxVarintLen32": "int:5", + "MaxVarintLen64": "int:10", + }, + } +} + +// --------------- proxy for encoding/binary.ByteOrder --------------- +type ByteOrder_encoding_binary struct { + Object interface{} + PutUint16_ func(interface{}, []byte, uint16) + PutUint32_ func(interface{}, []byte, uint32) + PutUint64_ func(interface{}, []byte, uint64) + String_ func(interface{}) string + Uint16_ func(interface{}, []byte) uint16 + Uint32_ func(interface{}, []byte) uint32 + Uint64_ func(interface{}, []byte) uint64 +} +func (Proxy *ByteOrder_encoding_binary) PutUint16(unnamed0 []byte, unnamed1 uint16) { + Proxy.PutUint16_(Proxy.Object, unnamed0, unnamed1) +} +func (Proxy *ByteOrder_encoding_binary) PutUint32(unnamed0 []byte, unnamed1 uint32) { + Proxy.PutUint32_(Proxy.Object, unnamed0, unnamed1) +} +func (Proxy *ByteOrder_encoding_binary) PutUint64(unnamed0 []byte, unnamed1 uint64) { + Proxy.PutUint64_(Proxy.Object, unnamed0, unnamed1) +} +func (Proxy *ByteOrder_encoding_binary) String() string { + return Proxy.String_(Proxy.Object) +} +func (Proxy *ByteOrder_encoding_binary) Uint16(unnamed0 []byte) uint16 { + return Proxy.Uint16_(Proxy.Object, unnamed0) +} +func (Proxy *ByteOrder_encoding_binary) Uint32(unnamed0 []byte) uint32 { + return Proxy.Uint32_(Proxy.Object, unnamed0) +} +func (Proxy *ByteOrder_encoding_binary) Uint64(unnamed0 []byte) uint64 { + return Proxy.Uint64_(Proxy.Object, unnamed0) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_csv.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_csv.go new file mode 100644 index 0000000..8ed0be1 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_csv.go @@ -0,0 +1,27 @@ +// this file was generated by gomacro command: import _b "encoding/csv" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/csv" +) + +// reflection: allow interpreted code to import "encoding/csv" +func init() { + Packages["encoding/csv"] = Package{ + Binds: map[string]Value{ + "ErrBareQuote": ValueOf(&csv.ErrBareQuote).Elem(), + "ErrFieldCount": ValueOf(&csv.ErrFieldCount).Elem(), + "ErrQuote": ValueOf(&csv.ErrQuote).Elem(), + "ErrTrailingComma": ValueOf(&csv.ErrTrailingComma).Elem(), + "NewReader": ValueOf(csv.NewReader), + "NewWriter": ValueOf(csv.NewWriter), + },Types: map[string]Type{ + "ParseError": TypeOf((*csv.ParseError)(nil)).Elem(), + "Reader": TypeOf((*csv.Reader)(nil)).Elem(), + "Writer": TypeOf((*csv.Writer)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_gob.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_gob.go new file mode 100644 index 0000000..cd3a04e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_gob.go @@ -0,0 +1,48 @@ +// this file was generated by gomacro command: import _b "encoding/gob" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/gob" +) + +// reflection: allow interpreted code to import "encoding/gob" +func init() { + Packages["encoding/gob"] = Package{ + Binds: map[string]Value{ + "NewDecoder": ValueOf(gob.NewDecoder), + "NewEncoder": ValueOf(gob.NewEncoder), + "Register": ValueOf(gob.Register), + "RegisterName": ValueOf(gob.RegisterName), + },Types: map[string]Type{ + "CommonType": TypeOf((*gob.CommonType)(nil)).Elem(), + "Decoder": TypeOf((*gob.Decoder)(nil)).Elem(), + "Encoder": TypeOf((*gob.Encoder)(nil)).Elem(), + "GobDecoder": TypeOf((*gob.GobDecoder)(nil)).Elem(), + "GobEncoder": TypeOf((*gob.GobEncoder)(nil)).Elem(), + },Proxies: map[string]Type{ + "GobDecoder": TypeOf((*GobDecoder_encoding_gob)(nil)).Elem(), + "GobEncoder": TypeOf((*GobEncoder_encoding_gob)(nil)).Elem(), + }, + } +} + +// --------------- proxy for encoding/gob.GobDecoder --------------- +type GobDecoder_encoding_gob struct { + Object interface{} + GobDecode_ func(interface{}, []byte) error +} +func (Proxy *GobDecoder_encoding_gob) GobDecode(unnamed0 []byte) error { + return Proxy.GobDecode_(Proxy.Object, unnamed0) +} + +// --------------- proxy for encoding/gob.GobEncoder --------------- +type GobEncoder_encoding_gob struct { + Object interface{} + GobEncode_ func(interface{}) ([]byte, error) +} +func (Proxy *GobEncoder_encoding_gob) GobEncode() ([]byte, error) { + return Proxy.GobEncode_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_hex.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_hex.go new file mode 100644 index 0000000..a268393 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_hex.go @@ -0,0 +1,28 @@ +// this file was generated by gomacro command: import _b "encoding/hex" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/hex" +) + +// reflection: allow interpreted code to import "encoding/hex" +func init() { + Packages["encoding/hex"] = Package{ + Binds: map[string]Value{ + "Decode": ValueOf(hex.Decode), + "DecodeString": ValueOf(hex.DecodeString), + "DecodedLen": ValueOf(hex.DecodedLen), + "Dump": ValueOf(hex.Dump), + "Dumper": ValueOf(hex.Dumper), + "Encode": ValueOf(hex.Encode), + "EncodeToString": ValueOf(hex.EncodeToString), + "EncodedLen": ValueOf(hex.EncodedLen), + "ErrLength": ValueOf(&hex.ErrLength).Elem(), + },Types: map[string]Type{ + "InvalidByteError": TypeOf((*hex.InvalidByteError)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_json.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_json.go new file mode 100644 index 0000000..cef7391 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_json.go @@ -0,0 +1,69 @@ +// this file was generated by gomacro command: import _b "encoding/json" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/json" +) + +// reflection: allow interpreted code to import "encoding/json" +func init() { + Packages["encoding/json"] = Package{ + Binds: map[string]Value{ + "Compact": ValueOf(json.Compact), + "HTMLEscape": ValueOf(json.HTMLEscape), + "Indent": ValueOf(json.Indent), + "Marshal": ValueOf(json.Marshal), + "MarshalIndent": ValueOf(json.MarshalIndent), + "NewDecoder": ValueOf(json.NewDecoder), + "NewEncoder": ValueOf(json.NewEncoder), + "Unmarshal": ValueOf(json.Unmarshal), + },Types: map[string]Type{ + "Decoder": TypeOf((*json.Decoder)(nil)).Elem(), + "Delim": TypeOf((*json.Delim)(nil)).Elem(), + "Encoder": TypeOf((*json.Encoder)(nil)).Elem(), + "InvalidUTF8Error": TypeOf((*json.InvalidUTF8Error)(nil)).Elem(), + "InvalidUnmarshalError": TypeOf((*json.InvalidUnmarshalError)(nil)).Elem(), + "Marshaler": TypeOf((*json.Marshaler)(nil)).Elem(), + "MarshalerError": TypeOf((*json.MarshalerError)(nil)).Elem(), + "Number": TypeOf((*json.Number)(nil)).Elem(), + "RawMessage": TypeOf((*json.RawMessage)(nil)).Elem(), + "SyntaxError": TypeOf((*json.SyntaxError)(nil)).Elem(), + "Token": TypeOf((*json.Token)(nil)).Elem(), + "UnmarshalFieldError": TypeOf((*json.UnmarshalFieldError)(nil)).Elem(), + "UnmarshalTypeError": TypeOf((*json.UnmarshalTypeError)(nil)).Elem(), + "Unmarshaler": TypeOf((*json.Unmarshaler)(nil)).Elem(), + "UnsupportedTypeError": TypeOf((*json.UnsupportedTypeError)(nil)).Elem(), + "UnsupportedValueError": TypeOf((*json.UnsupportedValueError)(nil)).Elem(), + },Proxies: map[string]Type{ + "Marshaler": TypeOf((*Marshaler_encoding_json)(nil)).Elem(), + "Token": TypeOf((*Token_encoding_json)(nil)).Elem(), + "Unmarshaler": TypeOf((*Unmarshaler_encoding_json)(nil)).Elem(), + }, + } +} + +// --------------- proxy for encoding/json.Marshaler --------------- +type Marshaler_encoding_json struct { + Object interface{} + MarshalJSON_ func(interface{}) ([]byte, error) +} +func (Proxy *Marshaler_encoding_json) MarshalJSON() ([]byte, error) { + return Proxy.MarshalJSON_(Proxy.Object) +} + +// --------------- proxy for encoding/json.Token --------------- +type Token_encoding_json struct { + Object interface{} +} + +// --------------- proxy for encoding/json.Unmarshaler --------------- +type Unmarshaler_encoding_json struct { + Object interface{} + UnmarshalJSON_ func(interface{}, []byte) error +} +func (Proxy *Unmarshaler_encoding_json) UnmarshalJSON(unnamed0 []byte) error { + return Proxy.UnmarshalJSON_(Proxy.Object, unnamed0) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_pem.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_pem.go new file mode 100644 index 0000000..762c2e7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_pem.go @@ -0,0 +1,22 @@ +// this file was generated by gomacro command: import _b "encoding/pem" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/pem" +) + +// reflection: allow interpreted code to import "encoding/pem" +func init() { + Packages["encoding/pem"] = Package{ + Binds: map[string]Value{ + "Decode": ValueOf(pem.Decode), + "Encode": ValueOf(pem.Encode), + "EncodeToMemory": ValueOf(pem.EncodeToMemory), + },Types: map[string]Type{ + "Block": TypeOf((*pem.Block)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/encoding_xml.go b/vendor/github.com/cosmos72/gomacro/imports/encoding_xml.go new file mode 100644 index 0000000..3fe9156 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/encoding_xml.go @@ -0,0 +1,97 @@ +// this file was generated by gomacro command: import _b "encoding/xml" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "encoding/xml" +) + +// reflection: allow interpreted code to import "encoding/xml" +func init() { + Packages["encoding/xml"] = Package{ + Binds: map[string]Value{ + "CopyToken": ValueOf(xml.CopyToken), + "Escape": ValueOf(xml.Escape), + "EscapeText": ValueOf(xml.EscapeText), + "HTMLAutoClose": ValueOf(&xml.HTMLAutoClose).Elem(), + "HTMLEntity": ValueOf(&xml.HTMLEntity).Elem(), + "Header": ValueOf(xml.Header), + "Marshal": ValueOf(xml.Marshal), + "MarshalIndent": ValueOf(xml.MarshalIndent), + "NewDecoder": ValueOf(xml.NewDecoder), + "NewEncoder": ValueOf(xml.NewEncoder), + "Unmarshal": ValueOf(xml.Unmarshal), + },Types: map[string]Type{ + "Attr": TypeOf((*xml.Attr)(nil)).Elem(), + "CharData": TypeOf((*xml.CharData)(nil)).Elem(), + "Comment": TypeOf((*xml.Comment)(nil)).Elem(), + "Decoder": TypeOf((*xml.Decoder)(nil)).Elem(), + "Directive": TypeOf((*xml.Directive)(nil)).Elem(), + "Encoder": TypeOf((*xml.Encoder)(nil)).Elem(), + "EndElement": TypeOf((*xml.EndElement)(nil)).Elem(), + "Marshaler": TypeOf((*xml.Marshaler)(nil)).Elem(), + "MarshalerAttr": TypeOf((*xml.MarshalerAttr)(nil)).Elem(), + "Name": TypeOf((*xml.Name)(nil)).Elem(), + "ProcInst": TypeOf((*xml.ProcInst)(nil)).Elem(), + "StartElement": TypeOf((*xml.StartElement)(nil)).Elem(), + "SyntaxError": TypeOf((*xml.SyntaxError)(nil)).Elem(), + "TagPathError": TypeOf((*xml.TagPathError)(nil)).Elem(), + "Token": TypeOf((*xml.Token)(nil)).Elem(), + "UnmarshalError": TypeOf((*xml.UnmarshalError)(nil)).Elem(), + "Unmarshaler": TypeOf((*xml.Unmarshaler)(nil)).Elem(), + "UnmarshalerAttr": TypeOf((*xml.UnmarshalerAttr)(nil)).Elem(), + "UnsupportedTypeError": TypeOf((*xml.UnsupportedTypeError)(nil)).Elem(), + },Proxies: map[string]Type{ + "Marshaler": TypeOf((*Marshaler_encoding_xml)(nil)).Elem(), + "MarshalerAttr": TypeOf((*MarshalerAttr_encoding_xml)(nil)).Elem(), + "Token": TypeOf((*Token_encoding_xml)(nil)).Elem(), + "Unmarshaler": TypeOf((*Unmarshaler_encoding_xml)(nil)).Elem(), + "UnmarshalerAttr": TypeOf((*UnmarshalerAttr_encoding_xml)(nil)).Elem(), + },Untypeds: map[string]string{ + "Header": "string:\n", + }, + } +} + +// --------------- proxy for encoding/xml.Marshaler --------------- +type Marshaler_encoding_xml struct { + Object interface{} + MarshalXML_ func(_proxy_obj_ interface{}, e *xml.Encoder, start xml.StartElement) error +} +func (Proxy *Marshaler_encoding_xml) MarshalXML(e *xml.Encoder, start xml.StartElement) error { + return Proxy.MarshalXML_(Proxy.Object, e, start) +} + +// --------------- proxy for encoding/xml.MarshalerAttr --------------- +type MarshalerAttr_encoding_xml struct { + Object interface{} + MarshalXMLAttr_ func(_proxy_obj_ interface{}, name xml.Name) (xml.Attr, error) +} +func (Proxy *MarshalerAttr_encoding_xml) MarshalXMLAttr(name xml.Name) (xml.Attr, error) { + return Proxy.MarshalXMLAttr_(Proxy.Object, name) +} + +// --------------- proxy for encoding/xml.Token --------------- +type Token_encoding_xml struct { + Object interface{} +} + +// --------------- proxy for encoding/xml.Unmarshaler --------------- +type Unmarshaler_encoding_xml struct { + Object interface{} + UnmarshalXML_ func(_proxy_obj_ interface{}, d *xml.Decoder, start xml.StartElement) error +} +func (Proxy *Unmarshaler_encoding_xml) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { + return Proxy.UnmarshalXML_(Proxy.Object, d, start) +} + +// --------------- proxy for encoding/xml.UnmarshalerAttr --------------- +type UnmarshalerAttr_encoding_xml struct { + Object interface{} + UnmarshalXMLAttr_ func(_proxy_obj_ interface{}, attr xml.Attr) error +} +func (Proxy *UnmarshalerAttr_encoding_xml) UnmarshalXMLAttr(attr xml.Attr) error { + return Proxy.UnmarshalXMLAttr_(Proxy.Object, attr) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/errors.go b/vendor/github.com/cosmos72/gomacro/imports/errors.go new file mode 100644 index 0000000..822ef33 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/errors.go @@ -0,0 +1,18 @@ +// this file was generated by gomacro command: import _b "errors" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "errors" +) + +// reflection: allow interpreted code to import "errors" +func init() { + Packages["errors"] = Package{ + Binds: map[string]Value{ + "New": ValueOf(errors.New), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/expvar.go b/vendor/github.com/cosmos72/gomacro/imports/expvar.go new file mode 100644 index 0000000..a2f235c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/expvar.go @@ -0,0 +1,44 @@ +// this file was generated by gomacro command: import _b "expvar" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "expvar" +) + +// reflection: allow interpreted code to import "expvar" +func init() { + Packages["expvar"] = Package{ + Binds: map[string]Value{ + "Do": ValueOf(expvar.Do), + "Get": ValueOf(expvar.Get), + "Handler": ValueOf(expvar.Handler), + "NewFloat": ValueOf(expvar.NewFloat), + "NewInt": ValueOf(expvar.NewInt), + "NewMap": ValueOf(expvar.NewMap), + "NewString": ValueOf(expvar.NewString), + "Publish": ValueOf(expvar.Publish), + },Types: map[string]Type{ + "Float": TypeOf((*expvar.Float)(nil)).Elem(), + "Func": TypeOf((*expvar.Func)(nil)).Elem(), + "Int": TypeOf((*expvar.Int)(nil)).Elem(), + "KeyValue": TypeOf((*expvar.KeyValue)(nil)).Elem(), + "Map": TypeOf((*expvar.Map)(nil)).Elem(), + "String": TypeOf((*expvar.String)(nil)).Elem(), + "Var": TypeOf((*expvar.Var)(nil)).Elem(), + },Proxies: map[string]Type{ + "Var": TypeOf((*Var_expvar)(nil)).Elem(), + }, + } +} + +// --------------- proxy for expvar.Var --------------- +type Var_expvar struct { + Object interface{} + String_ func(interface{}) string +} +func (Proxy *Var_expvar) String() string { + return Proxy.String_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/flag.go b/vendor/github.com/cosmos72/gomacro/imports/flag.go new file mode 100644 index 0000000..18e6ba0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/flag.go @@ -0,0 +1,92 @@ +// this file was generated by gomacro command: import _b "flag" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "flag" +) + +// reflection: allow interpreted code to import "flag" +func init() { + Packages["flag"] = Package{ + Binds: map[string]Value{ + "Arg": ValueOf(flag.Arg), + "Args": ValueOf(flag.Args), + "Bool": ValueOf(flag.Bool), + "BoolVar": ValueOf(flag.BoolVar), + "CommandLine": ValueOf(&flag.CommandLine).Elem(), + "ContinueOnError": ValueOf(flag.ContinueOnError), + "Duration": ValueOf(flag.Duration), + "DurationVar": ValueOf(flag.DurationVar), + "ErrHelp": ValueOf(&flag.ErrHelp).Elem(), + "ExitOnError": ValueOf(flag.ExitOnError), + "Float64": ValueOf(flag.Float64), + "Float64Var": ValueOf(flag.Float64Var), + "Int": ValueOf(flag.Int), + "Int64": ValueOf(flag.Int64), + "Int64Var": ValueOf(flag.Int64Var), + "IntVar": ValueOf(flag.IntVar), + "Lookup": ValueOf(flag.Lookup), + "NArg": ValueOf(flag.NArg), + "NFlag": ValueOf(flag.NFlag), + "NewFlagSet": ValueOf(flag.NewFlagSet), + "PanicOnError": ValueOf(flag.PanicOnError), + "Parse": ValueOf(flag.Parse), + "Parsed": ValueOf(flag.Parsed), + "PrintDefaults": ValueOf(flag.PrintDefaults), + "Set": ValueOf(flag.Set), + "String": ValueOf(flag.String), + "StringVar": ValueOf(flag.StringVar), + "Uint": ValueOf(flag.Uint), + "Uint64": ValueOf(flag.Uint64), + "Uint64Var": ValueOf(flag.Uint64Var), + "UintVar": ValueOf(flag.UintVar), + "UnquoteUsage": ValueOf(flag.UnquoteUsage), + "Usage": ValueOf(&flag.Usage).Elem(), + "Var": ValueOf(flag.Var), + "Visit": ValueOf(flag.Visit), + "VisitAll": ValueOf(flag.VisitAll), + },Types: map[string]Type{ + "ErrorHandling": TypeOf((*flag.ErrorHandling)(nil)).Elem(), + "Flag": TypeOf((*flag.Flag)(nil)).Elem(), + "FlagSet": TypeOf((*flag.FlagSet)(nil)).Elem(), + "Getter": TypeOf((*flag.Getter)(nil)).Elem(), + "Value": TypeOf((*flag.Value)(nil)).Elem(), + },Proxies: map[string]Type{ + "Getter": TypeOf((*Getter_flag)(nil)).Elem(), + "Value": TypeOf((*Value_flag)(nil)).Elem(), + }, + } +} + +// --------------- proxy for flag.Getter --------------- +type Getter_flag struct { + Object interface{} + Get_ func(interface{}) interface{} + Set_ func(interface{}, string) error + String_ func(interface{}) string +} +func (Proxy *Getter_flag) Get() interface{} { + return Proxy.Get_(Proxy.Object) +} +func (Proxy *Getter_flag) Set(unnamed0 string) error { + return Proxy.Set_(Proxy.Object, unnamed0) +} +func (Proxy *Getter_flag) String() string { + return Proxy.String_(Proxy.Object) +} + +// --------------- proxy for flag.Value --------------- +type Value_flag struct { + Object interface{} + Set_ func(interface{}, string) error + String_ func(interface{}) string +} +func (Proxy *Value_flag) Set(unnamed0 string) error { + return Proxy.Set_(Proxy.Object, unnamed0) +} +func (Proxy *Value_flag) String() string { + return Proxy.String_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/fmt.go b/vendor/github.com/cosmos72/gomacro/imports/fmt.go new file mode 100644 index 0000000..21a360d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/fmt.go @@ -0,0 +1,136 @@ +// this file was generated by gomacro command: import _b "fmt" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "fmt" +) + +// reflection: allow interpreted code to import "fmt" +func init() { + Packages["fmt"] = Package{ + Binds: map[string]Value{ + "Errorf": ValueOf(fmt.Errorf), + "Fprint": ValueOf(fmt.Fprint), + "Fprintf": ValueOf(fmt.Fprintf), + "Fprintln": ValueOf(fmt.Fprintln), + "Fscan": ValueOf(fmt.Fscan), + "Fscanf": ValueOf(fmt.Fscanf), + "Fscanln": ValueOf(fmt.Fscanln), + "Print": ValueOf(fmt.Print), + "Printf": ValueOf(fmt.Printf), + "Println": ValueOf(fmt.Println), + "Scan": ValueOf(fmt.Scan), + "Scanf": ValueOf(fmt.Scanf), + "Scanln": ValueOf(fmt.Scanln), + "Sprint": ValueOf(fmt.Sprint), + "Sprintf": ValueOf(fmt.Sprintf), + "Sprintln": ValueOf(fmt.Sprintln), + "Sscan": ValueOf(fmt.Sscan), + "Sscanf": ValueOf(fmt.Sscanf), + "Sscanln": ValueOf(fmt.Sscanln), + },Types: map[string]Type{ + "Formatter": TypeOf((*fmt.Formatter)(nil)).Elem(), + "GoStringer": TypeOf((*fmt.GoStringer)(nil)).Elem(), + "ScanState": TypeOf((*fmt.ScanState)(nil)).Elem(), + "Scanner": TypeOf((*fmt.Scanner)(nil)).Elem(), + "State": TypeOf((*fmt.State)(nil)).Elem(), + "Stringer": TypeOf((*fmt.Stringer)(nil)).Elem(), + },Proxies: map[string]Type{ + "Formatter": TypeOf((*Formatter_fmt)(nil)).Elem(), + "GoStringer": TypeOf((*GoStringer_fmt)(nil)).Elem(), + "ScanState": TypeOf((*ScanState_fmt)(nil)).Elem(), + "Scanner": TypeOf((*Scanner_fmt)(nil)).Elem(), + "State": TypeOf((*State_fmt)(nil)).Elem(), + "Stringer": TypeOf((*Stringer_fmt)(nil)).Elem(), + }, + } +} + +// --------------- proxy for fmt.Formatter --------------- +type Formatter_fmt struct { + Object interface{} + Format_ func(_proxy_obj_ interface{}, f fmt.State, c rune) +} +func (Proxy *Formatter_fmt) Format(f fmt.State, c rune) { + Proxy.Format_(Proxy.Object, f, c) +} + +// --------------- proxy for fmt.GoStringer --------------- +type GoStringer_fmt struct { + Object interface{} + GoString_ func(interface{}) string +} +func (Proxy *GoStringer_fmt) GoString() string { + return Proxy.GoString_(Proxy.Object) +} + +// --------------- proxy for fmt.ScanState --------------- +type ScanState_fmt struct { + Object interface{} + Read_ func(_proxy_obj_ interface{}, buf []byte) (n int, err error) + ReadRune_ func(interface{}) (r rune, size int, err error) + SkipSpace_ func(interface{}) + Token_ func(_proxy_obj_ interface{}, skipSpace bool, f func(rune) bool) (token []byte, err error) + UnreadRune_ func(interface{}) error + Width_ func(interface{}) (wid int, ok bool) +} +func (Proxy *ScanState_fmt) Read(buf []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, buf) +} +func (Proxy *ScanState_fmt) ReadRune() (r rune, size int, err error) { + return Proxy.ReadRune_(Proxy.Object) +} +func (Proxy *ScanState_fmt) SkipSpace() { + Proxy.SkipSpace_(Proxy.Object) +} +func (Proxy *ScanState_fmt) Token(skipSpace bool, f func(rune) bool) (token []byte, err error) { + return Proxy.Token_(Proxy.Object, skipSpace, f) +} +func (Proxy *ScanState_fmt) UnreadRune() error { + return Proxy.UnreadRune_(Proxy.Object) +} +func (Proxy *ScanState_fmt) Width() (wid int, ok bool) { + return Proxy.Width_(Proxy.Object) +} + +// --------------- proxy for fmt.Scanner --------------- +type Scanner_fmt struct { + Object interface{} + Scan_ func(_proxy_obj_ interface{}, state fmt.ScanState, verb rune) error +} +func (Proxy *Scanner_fmt) Scan(state fmt.ScanState, verb rune) error { + return Proxy.Scan_(Proxy.Object, state, verb) +} + +// --------------- proxy for fmt.State --------------- +type State_fmt struct { + Object interface{} + Flag_ func(_proxy_obj_ interface{}, c int) bool + Precision_ func(interface{}) (prec int, ok bool) + Width_ func(interface{}) (wid int, ok bool) + Write_ func(_proxy_obj_ interface{}, b []byte) (n int, err error) +} +func (Proxy *State_fmt) Flag(c int) bool { + return Proxy.Flag_(Proxy.Object, c) +} +func (Proxy *State_fmt) Precision() (prec int, ok bool) { + return Proxy.Precision_(Proxy.Object) +} +func (Proxy *State_fmt) Width() (wid int, ok bool) { + return Proxy.Width_(Proxy.Object) +} +func (Proxy *State_fmt) Write(b []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, b) +} + +// --------------- proxy for fmt.Stringer --------------- +type Stringer_fmt struct { + Object interface{} + String_ func(interface{}) string +} +func (Proxy *Stringer_fmt) String() string { + return Proxy.String_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_ast.go b/vendor/github.com/cosmos72/gomacro/imports/go_ast.go new file mode 100644 index 0000000..73efd04 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_ast.go @@ -0,0 +1,144 @@ +// this file was generated by gomacro command: import _b "go/ast" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/ast" + "go/token" +) + +// reflection: allow interpreted code to import "go/ast" +func init() { + Packages["go/ast"] = Package{ + Binds: map[string]Value{ + "Bad": ValueOf(ast.Bad), + "Con": ValueOf(ast.Con), + "FileExports": ValueOf(ast.FileExports), + "FilterDecl": ValueOf(ast.FilterDecl), + "FilterFile": ValueOf(ast.FilterFile), + "FilterFuncDuplicates": ValueOf(ast.FilterFuncDuplicates), + "FilterImportDuplicates": ValueOf(ast.FilterImportDuplicates), + "FilterPackage": ValueOf(ast.FilterPackage), + "FilterUnassociatedComments": ValueOf(ast.FilterUnassociatedComments), + "Fprint": ValueOf(ast.Fprint), + "Fun": ValueOf(ast.Fun), + "Inspect": ValueOf(ast.Inspect), + "IsExported": ValueOf(ast.IsExported), + "Lbl": ValueOf(ast.Lbl), + "MergePackageFiles": ValueOf(ast.MergePackageFiles), + "NewCommentMap": ValueOf(ast.NewCommentMap), + "NewIdent": ValueOf(ast.NewIdent), + "NewObj": ValueOf(ast.NewObj), + "NewPackage": ValueOf(ast.NewPackage), + "NewScope": ValueOf(ast.NewScope), + "NotNilFilter": ValueOf(ast.NotNilFilter), + "PackageExports": ValueOf(ast.PackageExports), + "Pkg": ValueOf(ast.Pkg), + "Print": ValueOf(ast.Print), + "RECV": ValueOf(ast.RECV), + "SEND": ValueOf(ast.SEND), + "SortImports": ValueOf(ast.SortImports), + "Typ": ValueOf(ast.Typ), + "Var": ValueOf(ast.Var), + "Walk": ValueOf(ast.Walk), + },Types: map[string]Type{ + "ArrayType": TypeOf((*ast.ArrayType)(nil)).Elem(), + "AssignStmt": TypeOf((*ast.AssignStmt)(nil)).Elem(), + "BadDecl": TypeOf((*ast.BadDecl)(nil)).Elem(), + "BadExpr": TypeOf((*ast.BadExpr)(nil)).Elem(), + "BadStmt": TypeOf((*ast.BadStmt)(nil)).Elem(), + "BasicLit": TypeOf((*ast.BasicLit)(nil)).Elem(), + "BinaryExpr": TypeOf((*ast.BinaryExpr)(nil)).Elem(), + "BlockStmt": TypeOf((*ast.BlockStmt)(nil)).Elem(), + "BranchStmt": TypeOf((*ast.BranchStmt)(nil)).Elem(), + "CallExpr": TypeOf((*ast.CallExpr)(nil)).Elem(), + "CaseClause": TypeOf((*ast.CaseClause)(nil)).Elem(), + "ChanDir": TypeOf((*ast.ChanDir)(nil)).Elem(), + "ChanType": TypeOf((*ast.ChanType)(nil)).Elem(), + "CommClause": TypeOf((*ast.CommClause)(nil)).Elem(), + "Comment": TypeOf((*ast.Comment)(nil)).Elem(), + "CommentGroup": TypeOf((*ast.CommentGroup)(nil)).Elem(), + "CommentMap": TypeOf((*ast.CommentMap)(nil)).Elem(), + "CompositeLit": TypeOf((*ast.CompositeLit)(nil)).Elem(), + "Decl": TypeOf((*ast.Decl)(nil)).Elem(), + "DeclStmt": TypeOf((*ast.DeclStmt)(nil)).Elem(), + "DeferStmt": TypeOf((*ast.DeferStmt)(nil)).Elem(), + "Ellipsis": TypeOf((*ast.Ellipsis)(nil)).Elem(), + "EmptyStmt": TypeOf((*ast.EmptyStmt)(nil)).Elem(), + "Expr": TypeOf((*ast.Expr)(nil)).Elem(), + "ExprStmt": TypeOf((*ast.ExprStmt)(nil)).Elem(), + "Field": TypeOf((*ast.Field)(nil)).Elem(), + "FieldFilter": TypeOf((*ast.FieldFilter)(nil)).Elem(), + "FieldList": TypeOf((*ast.FieldList)(nil)).Elem(), + "File": TypeOf((*ast.File)(nil)).Elem(), + "Filter": TypeOf((*ast.Filter)(nil)).Elem(), + "ForStmt": TypeOf((*ast.ForStmt)(nil)).Elem(), + "FuncDecl": TypeOf((*ast.FuncDecl)(nil)).Elem(), + "FuncLit": TypeOf((*ast.FuncLit)(nil)).Elem(), + "FuncType": TypeOf((*ast.FuncType)(nil)).Elem(), + "GenDecl": TypeOf((*ast.GenDecl)(nil)).Elem(), + "GoStmt": TypeOf((*ast.GoStmt)(nil)).Elem(), + "Ident": TypeOf((*ast.Ident)(nil)).Elem(), + "IfStmt": TypeOf((*ast.IfStmt)(nil)).Elem(), + "ImportSpec": TypeOf((*ast.ImportSpec)(nil)).Elem(), + "Importer": TypeOf((*ast.Importer)(nil)).Elem(), + "IncDecStmt": TypeOf((*ast.IncDecStmt)(nil)).Elem(), + "IndexExpr": TypeOf((*ast.IndexExpr)(nil)).Elem(), + "InterfaceType": TypeOf((*ast.InterfaceType)(nil)).Elem(), + "KeyValueExpr": TypeOf((*ast.KeyValueExpr)(nil)).Elem(), + "LabeledStmt": TypeOf((*ast.LabeledStmt)(nil)).Elem(), + "MapType": TypeOf((*ast.MapType)(nil)).Elem(), + "MergeMode": TypeOf((*ast.MergeMode)(nil)).Elem(), + "Node": TypeOf((*ast.Node)(nil)).Elem(), + "ObjKind": TypeOf((*ast.ObjKind)(nil)).Elem(), + "Object": TypeOf((*ast.Object)(nil)).Elem(), + "Package": TypeOf((*ast.Package)(nil)).Elem(), + "ParenExpr": TypeOf((*ast.ParenExpr)(nil)).Elem(), + "RangeStmt": TypeOf((*ast.RangeStmt)(nil)).Elem(), + "ReturnStmt": TypeOf((*ast.ReturnStmt)(nil)).Elem(), + "Scope": TypeOf((*ast.Scope)(nil)).Elem(), + "SelectStmt": TypeOf((*ast.SelectStmt)(nil)).Elem(), + "SelectorExpr": TypeOf((*ast.SelectorExpr)(nil)).Elem(), + "SendStmt": TypeOf((*ast.SendStmt)(nil)).Elem(), + "SliceExpr": TypeOf((*ast.SliceExpr)(nil)).Elem(), + "Spec": TypeOf((*ast.Spec)(nil)).Elem(), + "StarExpr": TypeOf((*ast.StarExpr)(nil)).Elem(), + "Stmt": TypeOf((*ast.Stmt)(nil)).Elem(), + "StructType": TypeOf((*ast.StructType)(nil)).Elem(), + "SwitchStmt": TypeOf((*ast.SwitchStmt)(nil)).Elem(), + "TypeAssertExpr": TypeOf((*ast.TypeAssertExpr)(nil)).Elem(), + "TypeSpec": TypeOf((*ast.TypeSpec)(nil)).Elem(), + "TypeSwitchStmt": TypeOf((*ast.TypeSwitchStmt)(nil)).Elem(), + "UnaryExpr": TypeOf((*ast.UnaryExpr)(nil)).Elem(), + "ValueSpec": TypeOf((*ast.ValueSpec)(nil)).Elem(), + "Visitor": TypeOf((*ast.Visitor)(nil)).Elem(), + },Proxies: map[string]Type{ + "Node": TypeOf((*Node_go_ast)(nil)).Elem(), + "Visitor": TypeOf((*Visitor_go_ast)(nil)).Elem(), + }, + } +} + +// --------------- proxy for go/ast.Node --------------- +type Node_go_ast struct { + Object interface{} + End_ func(interface{}) token.Pos + Pos_ func(interface{}) token.Pos +} +func (Proxy *Node_go_ast) End() token.Pos { + return Proxy.End_(Proxy.Object) +} +func (Proxy *Node_go_ast) Pos() token.Pos { + return Proxy.Pos_(Proxy.Object) +} + +// --------------- proxy for go/ast.Visitor --------------- +type Visitor_go_ast struct { + Object interface{} + Visit_ func(_proxy_obj_ interface{}, node ast.Node) (w ast.Visitor) +} +func (Proxy *Visitor_go_ast) Visit(node ast.Node) (w ast.Visitor) { + return Proxy.Visit_(Proxy.Object, node) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_build.go b/vendor/github.com/cosmos72/gomacro/imports/go_build.go new file mode 100644 index 0000000..031be9c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_build.go @@ -0,0 +1,33 @@ +// this file was generated by gomacro command: import _b "go/build" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/build" +) + +// reflection: allow interpreted code to import "go/build" +func init() { + Packages["go/build"] = Package{ + Binds: map[string]Value{ + "AllowBinary": ValueOf(build.AllowBinary), + "ArchChar": ValueOf(build.ArchChar), + "Default": ValueOf(&build.Default).Elem(), + "FindOnly": ValueOf(build.FindOnly), + "IgnoreVendor": ValueOf(build.IgnoreVendor), + "Import": ValueOf(build.Import), + "ImportComment": ValueOf(build.ImportComment), + "ImportDir": ValueOf(build.ImportDir), + "IsLocalImport": ValueOf(build.IsLocalImport), + "ToolDir": ValueOf(&build.ToolDir).Elem(), + },Types: map[string]Type{ + "Context": TypeOf((*build.Context)(nil)).Elem(), + "ImportMode": TypeOf((*build.ImportMode)(nil)).Elem(), + "MultiplePackageError": TypeOf((*build.MultiplePackageError)(nil)).Elem(), + "NoGoError": TypeOf((*build.NoGoError)(nil)).Elem(), + "Package": TypeOf((*build.Package)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_constant.go b/vendor/github.com/cosmos72/gomacro/imports/go_constant.go new file mode 100644 index 0000000..f2bf9a6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_constant.go @@ -0,0 +1,55 @@ +// this file was generated by gomacro command: import _b "go/constant" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/constant" +) + +// reflection: allow interpreted code to import "go/constant" +func init() { + Packages["go/constant"] = Package{ + Binds: map[string]Value{ + "BinaryOp": ValueOf(constant.BinaryOp), + "BitLen": ValueOf(constant.BitLen), + "Bool": ValueOf(constant.Bool), + "BoolVal": ValueOf(constant.BoolVal), + "Bytes": ValueOf(constant.Bytes), + "Compare": ValueOf(constant.Compare), + "Complex": ValueOf(constant.Complex), + "Denom": ValueOf(constant.Denom), + "Float": ValueOf(constant.Float), + "Float32Val": ValueOf(constant.Float32Val), + "Float64Val": ValueOf(constant.Float64Val), + "Imag": ValueOf(constant.Imag), + "Int": ValueOf(constant.Int), + "Int64Val": ValueOf(constant.Int64Val), + "MakeBool": ValueOf(constant.MakeBool), + "MakeFloat64": ValueOf(constant.MakeFloat64), + "MakeFromBytes": ValueOf(constant.MakeFromBytes), + "MakeFromLiteral": ValueOf(constant.MakeFromLiteral), + "MakeImag": ValueOf(constant.MakeImag), + "MakeInt64": ValueOf(constant.MakeInt64), + "MakeString": ValueOf(constant.MakeString), + "MakeUint64": ValueOf(constant.MakeUint64), + "MakeUnknown": ValueOf(constant.MakeUnknown), + "Num": ValueOf(constant.Num), + "Real": ValueOf(constant.Real), + "Shift": ValueOf(constant.Shift), + "Sign": ValueOf(constant.Sign), + "String": ValueOf(constant.String), + "StringVal": ValueOf(constant.StringVal), + "ToComplex": ValueOf(constant.ToComplex), + "ToFloat": ValueOf(constant.ToFloat), + "ToInt": ValueOf(constant.ToInt), + "Uint64Val": ValueOf(constant.Uint64Val), + "UnaryOp": ValueOf(constant.UnaryOp), + "Unknown": ValueOf(constant.Unknown), + },Types: map[string]Type{ + "Kind": TypeOf((*constant.Kind)(nil)).Elem(), + "Value": TypeOf((*constant.Value)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_doc.go b/vendor/github.com/cosmos72/gomacro/imports/go_doc.go new file mode 100644 index 0000000..6536109 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_doc.go @@ -0,0 +1,35 @@ +// this file was generated by gomacro command: import _b "go/doc" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/doc" +) + +// reflection: allow interpreted code to import "go/doc" +func init() { + Packages["go/doc"] = Package{ + Binds: map[string]Value{ + "AllDecls": ValueOf(doc.AllDecls), + "AllMethods": ValueOf(doc.AllMethods), + "Examples": ValueOf(doc.Examples), + "IllegalPrefixes": ValueOf(&doc.IllegalPrefixes).Elem(), + "IsPredeclared": ValueOf(doc.IsPredeclared), + "New": ValueOf(doc.New), + "Synopsis": ValueOf(doc.Synopsis), + "ToHTML": ValueOf(doc.ToHTML), + "ToText": ValueOf(doc.ToText), + },Types: map[string]Type{ + "Example": TypeOf((*doc.Example)(nil)).Elem(), + "Filter": TypeOf((*doc.Filter)(nil)).Elem(), + "Func": TypeOf((*doc.Func)(nil)).Elem(), + "Mode": TypeOf((*doc.Mode)(nil)).Elem(), + "Note": TypeOf((*doc.Note)(nil)).Elem(), + "Package": TypeOf((*doc.Package)(nil)).Elem(), + "Type": TypeOf((*doc.Type)(nil)).Elem(), + "Value": TypeOf((*doc.Value)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_format.go b/vendor/github.com/cosmos72/gomacro/imports/go_format.go new file mode 100644 index 0000000..ca49068 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_format.go @@ -0,0 +1,19 @@ +// this file was generated by gomacro command: import _b "go/format" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/format" +) + +// reflection: allow interpreted code to import "go/format" +func init() { + Packages["go/format"] = Package{ + Binds: map[string]Value{ + "Node": ValueOf(format.Node), + "Source": ValueOf(format.Source), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_importer.go b/vendor/github.com/cosmos72/gomacro/imports/go_importer.go new file mode 100644 index 0000000..58b7d16 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_importer.go @@ -0,0 +1,21 @@ +// this file was generated by gomacro command: import _b "go/importer" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/importer" +) + +// reflection: allow interpreted code to import "go/importer" +func init() { + Packages["go/importer"] = Package{ + Binds: map[string]Value{ + "Default": ValueOf(importer.Default), + "For": ValueOf(importer.For), + },Types: map[string]Type{ + "Lookup": TypeOf((*importer.Lookup)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_parser.go b/vendor/github.com/cosmos72/gomacro/imports/go_parser.go new file mode 100644 index 0000000..5dcd9ef --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_parser.go @@ -0,0 +1,30 @@ +// this file was generated by gomacro command: import _b "go/parser" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/parser" +) + +// reflection: allow interpreted code to import "go/parser" +func init() { + Packages["go/parser"] = Package{ + Binds: map[string]Value{ + "AllErrors": ValueOf(parser.AllErrors), + "DeclarationErrors": ValueOf(parser.DeclarationErrors), + "ImportsOnly": ValueOf(parser.ImportsOnly), + "PackageClauseOnly": ValueOf(parser.PackageClauseOnly), + "ParseComments": ValueOf(parser.ParseComments), + "ParseDir": ValueOf(parser.ParseDir), + "ParseExpr": ValueOf(parser.ParseExpr), + "ParseExprFrom": ValueOf(parser.ParseExprFrom), + "ParseFile": ValueOf(parser.ParseFile), + "SpuriousErrors": ValueOf(parser.SpuriousErrors), + "Trace": ValueOf(parser.Trace), + },Types: map[string]Type{ + "Mode": TypeOf((*parser.Mode)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_printer.go b/vendor/github.com/cosmos72/gomacro/imports/go_printer.go new file mode 100644 index 0000000..514ee41 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_printer.go @@ -0,0 +1,26 @@ +// this file was generated by gomacro command: import _b "go/printer" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/printer" +) + +// reflection: allow interpreted code to import "go/printer" +func init() { + Packages["go/printer"] = Package{ + Binds: map[string]Value{ + "Fprint": ValueOf(printer.Fprint), + "RawFormat": ValueOf(printer.RawFormat), + "SourcePos": ValueOf(printer.SourcePos), + "TabIndent": ValueOf(printer.TabIndent), + "UseSpaces": ValueOf(printer.UseSpaces), + },Types: map[string]Type{ + "CommentedNode": TypeOf((*printer.CommentedNode)(nil)).Elem(), + "Config": TypeOf((*printer.Config)(nil)).Elem(), + "Mode": TypeOf((*printer.Mode)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_scanner.go b/vendor/github.com/cosmos72/gomacro/imports/go_scanner.go new file mode 100644 index 0000000..102085a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_scanner.go @@ -0,0 +1,25 @@ +// this file was generated by gomacro command: import _b "go/scanner" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/scanner" +) + +// reflection: allow interpreted code to import "go/scanner" +func init() { + Packages["go/scanner"] = Package{ + Binds: map[string]Value{ + "PrintError": ValueOf(scanner.PrintError), + "ScanComments": ValueOf(scanner.ScanComments), + },Types: map[string]Type{ + "Error": TypeOf((*scanner.Error)(nil)).Elem(), + "ErrorHandler": TypeOf((*scanner.ErrorHandler)(nil)).Elem(), + "ErrorList": TypeOf((*scanner.ErrorList)(nil)).Elem(), + "Mode": TypeOf((*scanner.Mode)(nil)).Elem(), + "Scanner": TypeOf((*scanner.Scanner)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_token.go b/vendor/github.com/cosmos72/gomacro/imports/go_token.go new file mode 100644 index 0000000..b91e4d7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_token.go @@ -0,0 +1,114 @@ +// this file was generated by gomacro command: import _b "go/token" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/token" +) + +// reflection: allow interpreted code to import "go/token" +func init() { + Packages["go/token"] = Package{ + Binds: map[string]Value{ + "ADD": ValueOf(token.ADD), + "ADD_ASSIGN": ValueOf(token.ADD_ASSIGN), + "AND": ValueOf(token.AND), + "AND_ASSIGN": ValueOf(token.AND_ASSIGN), + "AND_NOT": ValueOf(token.AND_NOT), + "AND_NOT_ASSIGN": ValueOf(token.AND_NOT_ASSIGN), + "ARROW": ValueOf(token.ARROW), + "ASSIGN": ValueOf(token.ASSIGN), + "BREAK": ValueOf(token.BREAK), + "CASE": ValueOf(token.CASE), + "CHAN": ValueOf(token.CHAN), + "CHAR": ValueOf(token.CHAR), + "COLON": ValueOf(token.COLON), + "COMMA": ValueOf(token.COMMA), + "COMMENT": ValueOf(token.COMMENT), + "CONST": ValueOf(token.CONST), + "CONTINUE": ValueOf(token.CONTINUE), + "DEC": ValueOf(token.DEC), + "DEFAULT": ValueOf(token.DEFAULT), + "DEFER": ValueOf(token.DEFER), + "DEFINE": ValueOf(token.DEFINE), + "ELLIPSIS": ValueOf(token.ELLIPSIS), + "ELSE": ValueOf(token.ELSE), + "EOF": ValueOf(token.EOF), + "EQL": ValueOf(token.EQL), + "FALLTHROUGH": ValueOf(token.FALLTHROUGH), + "FLOAT": ValueOf(token.FLOAT), + "FOR": ValueOf(token.FOR), + "FUNC": ValueOf(token.FUNC), + "GEQ": ValueOf(token.GEQ), + "GO": ValueOf(token.GO), + "GOTO": ValueOf(token.GOTO), + "GTR": ValueOf(token.GTR), + "HighestPrec": ValueOf(token.HighestPrec), + "IDENT": ValueOf(token.IDENT), + "IF": ValueOf(token.IF), + "ILLEGAL": ValueOf(token.ILLEGAL), + "IMAG": ValueOf(token.IMAG), + "IMPORT": ValueOf(token.IMPORT), + "INC": ValueOf(token.INC), + "INT": ValueOf(token.INT), + "INTERFACE": ValueOf(token.INTERFACE), + "LAND": ValueOf(token.LAND), + "LBRACE": ValueOf(token.LBRACE), + "LBRACK": ValueOf(token.LBRACK), + "LEQ": ValueOf(token.LEQ), + "LOR": ValueOf(token.LOR), + "LPAREN": ValueOf(token.LPAREN), + "LSS": ValueOf(token.LSS), + "Lookup": ValueOf(token.Lookup), + "LowestPrec": ValueOf(token.LowestPrec), + "MAP": ValueOf(token.MAP), + "MUL": ValueOf(token.MUL), + "MUL_ASSIGN": ValueOf(token.MUL_ASSIGN), + "NEQ": ValueOf(token.NEQ), + "NOT": ValueOf(token.NOT), + "NewFileSet": ValueOf(token.NewFileSet), + "NoPos": ValueOf(token.NoPos), + "OR": ValueOf(token.OR), + "OR_ASSIGN": ValueOf(token.OR_ASSIGN), + "PACKAGE": ValueOf(token.PACKAGE), + "PERIOD": ValueOf(token.PERIOD), + "QUO": ValueOf(token.QUO), + "QUO_ASSIGN": ValueOf(token.QUO_ASSIGN), + "RANGE": ValueOf(token.RANGE), + "RBRACE": ValueOf(token.RBRACE), + "RBRACK": ValueOf(token.RBRACK), + "REM": ValueOf(token.REM), + "REM_ASSIGN": ValueOf(token.REM_ASSIGN), + "RETURN": ValueOf(token.RETURN), + "RPAREN": ValueOf(token.RPAREN), + "SELECT": ValueOf(token.SELECT), + "SEMICOLON": ValueOf(token.SEMICOLON), + "SHL": ValueOf(token.SHL), + "SHL_ASSIGN": ValueOf(token.SHL_ASSIGN), + "SHR": ValueOf(token.SHR), + "SHR_ASSIGN": ValueOf(token.SHR_ASSIGN), + "STRING": ValueOf(token.STRING), + "STRUCT": ValueOf(token.STRUCT), + "SUB": ValueOf(token.SUB), + "SUB_ASSIGN": ValueOf(token.SUB_ASSIGN), + "SWITCH": ValueOf(token.SWITCH), + "TYPE": ValueOf(token.TYPE), + "UnaryPrec": ValueOf(token.UnaryPrec), + "VAR": ValueOf(token.VAR), + "XOR": ValueOf(token.XOR), + "XOR_ASSIGN": ValueOf(token.XOR_ASSIGN), + },Types: map[string]Type{ + "File": TypeOf((*token.File)(nil)).Elem(), + "FileSet": TypeOf((*token.FileSet)(nil)).Elem(), + "Pos": TypeOf((*token.Pos)(nil)).Elem(), + "Position": TypeOf((*token.Position)(nil)).Elem(), + "Token": TypeOf((*token.Token)(nil)).Elem(), + },Untypeds: map[string]string{ + "HighestPrec": "int:7", + "LowestPrec": "int:0", + "UnaryPrec": "int:6", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/go_types.go b/vendor/github.com/cosmos72/gomacro/imports/go_types.go new file mode 100644 index 0000000..f5c9e8b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/go_types.go @@ -0,0 +1,217 @@ +// this file was generated by gomacro command: import _b "go/types" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "go/types" +) + +// reflection: allow interpreted code to import "go/types" +func init() { + Packages["go/types"] = Package{ + Binds: map[string]Value{ + "AssertableTo": ValueOf(types.AssertableTo), + "AssignableTo": ValueOf(types.AssignableTo), + "Bool": ValueOf(types.Bool), + "Byte": ValueOf(types.Byte), + "Comparable": ValueOf(types.Comparable), + "Complex128": ValueOf(types.Complex128), + "Complex64": ValueOf(types.Complex64), + "ConvertibleTo": ValueOf(types.ConvertibleTo), + "DefPredeclaredTestFuncs": ValueOf(types.DefPredeclaredTestFuncs), + "Default": ValueOf(types.Default), + "Eval": ValueOf(types.Eval), + "ExprString": ValueOf(types.ExprString), + "FieldVal": ValueOf(types.FieldVal), + "Float32": ValueOf(types.Float32), + "Float64": ValueOf(types.Float64), + "Id": ValueOf(types.Id), + "Identical": ValueOf(types.Identical), + "IdenticalIgnoreTags": ValueOf(types.IdenticalIgnoreTags), + "Implements": ValueOf(types.Implements), + "Int": ValueOf(types.Int), + "Int16": ValueOf(types.Int16), + "Int32": ValueOf(types.Int32), + "Int64": ValueOf(types.Int64), + "Int8": ValueOf(types.Int8), + "Invalid": ValueOf(types.Invalid), + "IsBoolean": ValueOf(types.IsBoolean), + "IsComplex": ValueOf(types.IsComplex), + "IsConstType": ValueOf(types.IsConstType), + "IsFloat": ValueOf(types.IsFloat), + "IsInteger": ValueOf(types.IsInteger), + "IsInterface": ValueOf(types.IsInterface), + "IsNumeric": ValueOf(types.IsNumeric), + "IsOrdered": ValueOf(types.IsOrdered), + "IsString": ValueOf(types.IsString), + "IsUnsigned": ValueOf(types.IsUnsigned), + "IsUntyped": ValueOf(types.IsUntyped), + "LookupFieldOrMethod": ValueOf(types.LookupFieldOrMethod), + "MethodExpr": ValueOf(types.MethodExpr), + "MethodVal": ValueOf(types.MethodVal), + "MissingMethod": ValueOf(types.MissingMethod), + "NewArray": ValueOf(types.NewArray), + "NewChan": ValueOf(types.NewChan), + "NewChecker": ValueOf(types.NewChecker), + "NewConst": ValueOf(types.NewConst), + "NewField": ValueOf(types.NewField), + "NewFunc": ValueOf(types.NewFunc), + "NewInterface": ValueOf(types.NewInterface), + "NewLabel": ValueOf(types.NewLabel), + "NewMap": ValueOf(types.NewMap), + "NewMethodSet": ValueOf(types.NewMethodSet), + "NewNamed": ValueOf(types.NewNamed), + "NewPackage": ValueOf(types.NewPackage), + "NewParam": ValueOf(types.NewParam), + "NewPkgName": ValueOf(types.NewPkgName), + "NewPointer": ValueOf(types.NewPointer), + "NewScope": ValueOf(types.NewScope), + "NewSignature": ValueOf(types.NewSignature), + "NewSlice": ValueOf(types.NewSlice), + "NewStruct": ValueOf(types.NewStruct), + "NewTuple": ValueOf(types.NewTuple), + "NewTypeName": ValueOf(types.NewTypeName), + "NewVar": ValueOf(types.NewVar), + "ObjectString": ValueOf(types.ObjectString), + "RecvOnly": ValueOf(types.RecvOnly), + "RelativeTo": ValueOf(types.RelativeTo), + "Rune": ValueOf(types.Rune), + "SelectionString": ValueOf(types.SelectionString), + "SendOnly": ValueOf(types.SendOnly), + "SendRecv": ValueOf(types.SendRecv), + "String": ValueOf(types.String), + "Typ": ValueOf(&types.Typ).Elem(), + "TypeString": ValueOf(types.TypeString), + "Uint": ValueOf(types.Uint), + "Uint16": ValueOf(types.Uint16), + "Uint32": ValueOf(types.Uint32), + "Uint64": ValueOf(types.Uint64), + "Uint8": ValueOf(types.Uint8), + "Uintptr": ValueOf(types.Uintptr), + "Universe": ValueOf(&types.Universe).Elem(), + "Unsafe": ValueOf(&types.Unsafe).Elem(), + "UnsafePointer": ValueOf(types.UnsafePointer), + "UntypedBool": ValueOf(types.UntypedBool), + "UntypedComplex": ValueOf(types.UntypedComplex), + "UntypedFloat": ValueOf(types.UntypedFloat), + "UntypedInt": ValueOf(types.UntypedInt), + "UntypedNil": ValueOf(types.UntypedNil), + "UntypedRune": ValueOf(types.UntypedRune), + "UntypedString": ValueOf(types.UntypedString), + "WriteExpr": ValueOf(types.WriteExpr), + "WriteSignature": ValueOf(types.WriteSignature), + "WriteType": ValueOf(types.WriteType), + },Types: map[string]Type{ + "Array": TypeOf((*types.Array)(nil)).Elem(), + "Basic": TypeOf((*types.Basic)(nil)).Elem(), + "BasicInfo": TypeOf((*types.BasicInfo)(nil)).Elem(), + "BasicKind": TypeOf((*types.BasicKind)(nil)).Elem(), + "Builtin": TypeOf((*types.Builtin)(nil)).Elem(), + "Chan": TypeOf((*types.Chan)(nil)).Elem(), + "ChanDir": TypeOf((*types.ChanDir)(nil)).Elem(), + "Checker": TypeOf((*types.Checker)(nil)).Elem(), + "Config": TypeOf((*types.Config)(nil)).Elem(), + "Const": TypeOf((*types.Const)(nil)).Elem(), + "Error": TypeOf((*types.Error)(nil)).Elem(), + "Func": TypeOf((*types.Func)(nil)).Elem(), + "ImportMode": TypeOf((*types.ImportMode)(nil)).Elem(), + "Importer": TypeOf((*types.Importer)(nil)).Elem(), + "ImporterFrom": TypeOf((*types.ImporterFrom)(nil)).Elem(), + "Info": TypeOf((*types.Info)(nil)).Elem(), + "Initializer": TypeOf((*types.Initializer)(nil)).Elem(), + "Interface": TypeOf((*types.Interface)(nil)).Elem(), + "Label": TypeOf((*types.Label)(nil)).Elem(), + "Map": TypeOf((*types.Map)(nil)).Elem(), + "MethodSet": TypeOf((*types.MethodSet)(nil)).Elem(), + "Named": TypeOf((*types.Named)(nil)).Elem(), + "Nil": TypeOf((*types.Nil)(nil)).Elem(), + "Object": TypeOf((*types.Object)(nil)).Elem(), + "Package": TypeOf((*types.Package)(nil)).Elem(), + "PkgName": TypeOf((*types.PkgName)(nil)).Elem(), + "Pointer": TypeOf((*types.Pointer)(nil)).Elem(), + "Qualifier": TypeOf((*types.Qualifier)(nil)).Elem(), + "Scope": TypeOf((*types.Scope)(nil)).Elem(), + "Selection": TypeOf((*types.Selection)(nil)).Elem(), + "SelectionKind": TypeOf((*types.SelectionKind)(nil)).Elem(), + "Signature": TypeOf((*types.Signature)(nil)).Elem(), + "Sizes": TypeOf((*types.Sizes)(nil)).Elem(), + "Slice": TypeOf((*types.Slice)(nil)).Elem(), + "StdSizes": TypeOf((*types.StdSizes)(nil)).Elem(), + "Struct": TypeOf((*types.Struct)(nil)).Elem(), + "Tuple": TypeOf((*types.Tuple)(nil)).Elem(), + "Type": TypeOf((*types.Type)(nil)).Elem(), + "TypeAndValue": TypeOf((*types.TypeAndValue)(nil)).Elem(), + "TypeName": TypeOf((*types.TypeName)(nil)).Elem(), + "Var": TypeOf((*types.Var)(nil)).Elem(), + },Proxies: map[string]Type{ + "Importer": TypeOf((*Importer_go_types)(nil)).Elem(), + "ImporterFrom": TypeOf((*ImporterFrom_go_types)(nil)).Elem(), + "Sizes": TypeOf((*Sizes_go_types)(nil)).Elem(), + "Type": TypeOf((*Type_go_types)(nil)).Elem(), + },Wrappers: map[string][]string{ + "Builtin": []string{"Exported","Id","Name","Parent","Pkg","Pos","Type",}, + "Checker": []string{"ObjectOf","TypeOf",}, + "Const": []string{"Exported","Id","Name","Parent","Pkg","Pos","Type",}, + "Func": []string{"Exported","Id","Name","Parent","Pkg","Pos","Type",}, + "Label": []string{"Exported","Id","Name","Parent","Pkg","Pos","Type",}, + "Nil": []string{"Exported","Id","Name","Parent","Pkg","Pos","Type",}, + "PkgName": []string{"Exported","Id","Name","Parent","Pkg","Pos","Type",}, + "TypeName": []string{"Exported","Id","Name","Parent","Pkg","Pos","Type",}, + "Var": []string{"Exported","Id","Name","Parent","Pkg","Pos","Type",}, + }, + } +} + +// --------------- proxy for go/types.Importer --------------- +type Importer_go_types struct { + Object interface{} + Import_ func(_proxy_obj_ interface{}, path string) (*types.Package, error) +} +func (Proxy *Importer_go_types) Import(path string) (*types.Package, error) { + return Proxy.Import_(Proxy.Object, path) +} + +// --------------- proxy for go/types.ImporterFrom --------------- +type ImporterFrom_go_types struct { + Object interface{} + Import_ func(_proxy_obj_ interface{}, path string) (*types.Package, error) + ImportFrom_ func(_proxy_obj_ interface{}, path string, srcDir string, mode types.ImportMode) (*types.Package, error) +} +func (Proxy *ImporterFrom_go_types) Import(path string) (*types.Package, error) { + return Proxy.Import_(Proxy.Object, path) +} +func (Proxy *ImporterFrom_go_types) ImportFrom(path string, srcDir string, mode types.ImportMode) (*types.Package, error) { + return Proxy.ImportFrom_(Proxy.Object, path, srcDir, mode) +} + +// --------------- proxy for go/types.Sizes --------------- +type Sizes_go_types struct { + Object interface{} + Alignof_ func(_proxy_obj_ interface{}, T types.Type) int64 + Offsetsof_ func(_proxy_obj_ interface{}, fields []*types.Var) []int64 + Sizeof_ func(_proxy_obj_ interface{}, T types.Type) int64 +} +func (Proxy *Sizes_go_types) Alignof(T types.Type) int64 { + return Proxy.Alignof_(Proxy.Object, T) +} +func (Proxy *Sizes_go_types) Offsetsof(fields []*types.Var) []int64 { + return Proxy.Offsetsof_(Proxy.Object, fields) +} +func (Proxy *Sizes_go_types) Sizeof(T types.Type) int64 { + return Proxy.Sizeof_(Proxy.Object, T) +} + +// --------------- proxy for go/types.Type --------------- +type Type_go_types struct { + Object interface{} + String_ func(interface{}) string + Underlying_ func(interface{}) types.Type +} +func (Proxy *Type_go_types) String() string { + return Proxy.String_(Proxy.Object) +} +func (Proxy *Type_go_types) Underlying() types.Type { + return Proxy.Underlying_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/hash.go b/vendor/github.com/cosmos72/gomacro/imports/hash.go new file mode 100644 index 0000000..12cde0b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/hash.go @@ -0,0 +1,107 @@ +// this file was generated by gomacro command: import _b "hash" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "hash" +) + +// reflection: allow interpreted code to import "hash" +func init() { + Packages["hash"] = Package{ + Types: map[string]Type{ + "Hash": TypeOf((*hash.Hash)(nil)).Elem(), + "Hash32": TypeOf((*hash.Hash32)(nil)).Elem(), + "Hash64": TypeOf((*hash.Hash64)(nil)).Elem(), + },Proxies: map[string]Type{ + "Hash": TypeOf((*Hash_hash)(nil)).Elem(), + "Hash32": TypeOf((*Hash32_hash)(nil)).Elem(), + "Hash64": TypeOf((*Hash64_hash)(nil)).Elem(), + }, + } +} + +// --------------- proxy for hash.Hash --------------- +type Hash_hash struct { + Object interface{} + BlockSize_ func(interface{}) int + Reset_ func(interface{}) + Size_ func(interface{}) int + Sum_ func(_proxy_obj_ interface{}, b []byte) []byte + Write_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *Hash_hash) BlockSize() int { + return Proxy.BlockSize_(Proxy.Object) +} +func (Proxy *Hash_hash) Reset() { + Proxy.Reset_(Proxy.Object) +} +func (Proxy *Hash_hash) Size() int { + return Proxy.Size_(Proxy.Object) +} +func (Proxy *Hash_hash) Sum(b []byte) []byte { + return Proxy.Sum_(Proxy.Object, b) +} +func (Proxy *Hash_hash) Write(p []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, p) +} + +// --------------- proxy for hash.Hash32 --------------- +type Hash32_hash struct { + Object interface{} + BlockSize_ func(interface{}) int + Reset_ func(interface{}) + Size_ func(interface{}) int + Sum_ func(_proxy_obj_ interface{}, b []byte) []byte + Sum32_ func(interface{}) uint32 + Write_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *Hash32_hash) BlockSize() int { + return Proxy.BlockSize_(Proxy.Object) +} +func (Proxy *Hash32_hash) Reset() { + Proxy.Reset_(Proxy.Object) +} +func (Proxy *Hash32_hash) Size() int { + return Proxy.Size_(Proxy.Object) +} +func (Proxy *Hash32_hash) Sum(b []byte) []byte { + return Proxy.Sum_(Proxy.Object, b) +} +func (Proxy *Hash32_hash) Sum32() uint32 { + return Proxy.Sum32_(Proxy.Object) +} +func (Proxy *Hash32_hash) Write(p []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, p) +} + +// --------------- proxy for hash.Hash64 --------------- +type Hash64_hash struct { + Object interface{} + BlockSize_ func(interface{}) int + Reset_ func(interface{}) + Size_ func(interface{}) int + Sum_ func(_proxy_obj_ interface{}, b []byte) []byte + Sum64_ func(interface{}) uint64 + Write_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *Hash64_hash) BlockSize() int { + return Proxy.BlockSize_(Proxy.Object) +} +func (Proxy *Hash64_hash) Reset() { + Proxy.Reset_(Proxy.Object) +} +func (Proxy *Hash64_hash) Size() int { + return Proxy.Size_(Proxy.Object) +} +func (Proxy *Hash64_hash) Sum(b []byte) []byte { + return Proxy.Sum_(Proxy.Object, b) +} +func (Proxy *Hash64_hash) Sum64() uint64 { + return Proxy.Sum64_(Proxy.Object) +} +func (Proxy *Hash64_hash) Write(p []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, p) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/hash_adler32.go b/vendor/github.com/cosmos72/gomacro/imports/hash_adler32.go new file mode 100644 index 0000000..fc615c1 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/hash_adler32.go @@ -0,0 +1,22 @@ +// this file was generated by gomacro command: import _b "hash/adler32" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "hash/adler32" +) + +// reflection: allow interpreted code to import "hash/adler32" +func init() { + Packages["hash/adler32"] = Package{ + Binds: map[string]Value{ + "Checksum": ValueOf(adler32.Checksum), + "New": ValueOf(adler32.New), + "Size": ValueOf(adler32.Size), + },Untypeds: map[string]string{ + "Size": "int:4", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/hash_crc32.go b/vendor/github.com/cosmos72/gomacro/imports/hash_crc32.go new file mode 100644 index 0000000..c0e0daa --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/hash_crc32.go @@ -0,0 +1,35 @@ +// this file was generated by gomacro command: import _b "hash/crc32" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "hash/crc32" +) + +// reflection: allow interpreted code to import "hash/crc32" +func init() { + Packages["hash/crc32"] = Package{ + Binds: map[string]Value{ + "Castagnoli": ValueOf(uint32(crc32.Castagnoli)), + "Checksum": ValueOf(crc32.Checksum), + "ChecksumIEEE": ValueOf(crc32.ChecksumIEEE), + "IEEE": ValueOf(uint32(crc32.IEEE)), + "IEEETable": ValueOf(&crc32.IEEETable).Elem(), + "Koopman": ValueOf(uint32(crc32.Koopman)), + "MakeTable": ValueOf(crc32.MakeTable), + "New": ValueOf(crc32.New), + "NewIEEE": ValueOf(crc32.NewIEEE), + "Size": ValueOf(crc32.Size), + "Update": ValueOf(crc32.Update), + },Types: map[string]Type{ + "Table": TypeOf((*crc32.Table)(nil)).Elem(), + },Untypeds: map[string]string{ + "Castagnoli": "int:2197175160", + "IEEE": "int:3988292384", + "Koopman": "int:3945912366", + "Size": "int:4", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/hash_crc64.go b/vendor/github.com/cosmos72/gomacro/imports/hash_crc64.go new file mode 100644 index 0000000..84ef28f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/hash_crc64.go @@ -0,0 +1,30 @@ +// this file was generated by gomacro command: import _b "hash/crc64" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "hash/crc64" +) + +// reflection: allow interpreted code to import "hash/crc64" +func init() { + Packages["hash/crc64"] = Package{ + Binds: map[string]Value{ + "Checksum": ValueOf(crc64.Checksum), + "ECMA": ValueOf(uint64(crc64.ECMA)), + "ISO": ValueOf(uint64(crc64.ISO)), + "MakeTable": ValueOf(crc64.MakeTable), + "New": ValueOf(crc64.New), + "Size": ValueOf(crc64.Size), + "Update": ValueOf(crc64.Update), + },Types: map[string]Type{ + "Table": TypeOf((*crc64.Table)(nil)).Elem(), + },Untypeds: map[string]string{ + "ECMA": "int:14514072000185962306", + "ISO": "int:15564440312192434176", + "Size": "int:8", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/hash_fnv.go b/vendor/github.com/cosmos72/gomacro/imports/hash_fnv.go new file mode 100644 index 0000000..198f0cc --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/hash_fnv.go @@ -0,0 +1,21 @@ +// this file was generated by gomacro command: import _b "hash/fnv" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "hash/fnv" +) + +// reflection: allow interpreted code to import "hash/fnv" +func init() { + Packages["hash/fnv"] = Package{ + Binds: map[string]Value{ + "New32": ValueOf(fnv.New32), + "New32a": ValueOf(fnv.New32a), + "New64": ValueOf(fnv.New64), + "New64a": ValueOf(fnv.New64a), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/html.go b/vendor/github.com/cosmos72/gomacro/imports/html.go new file mode 100644 index 0000000..8806c48 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/html.go @@ -0,0 +1,19 @@ +// this file was generated by gomacro command: import _b "html" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "html" +) + +// reflection: allow interpreted code to import "html" +func init() { + Packages["html"] = Package{ + Binds: map[string]Value{ + "EscapeString": ValueOf(html.EscapeString), + "UnescapeString": ValueOf(html.UnescapeString), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/html_template.go b/vendor/github.com/cosmos72/gomacro/imports/html_template.go new file mode 100644 index 0000000..65a2bff --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/html_template.go @@ -0,0 +1,51 @@ +// this file was generated by gomacro command: import _b "html/template" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "html/template" +) + +// reflection: allow interpreted code to import "html/template" +func init() { + Packages["html/template"] = Package{ + Binds: map[string]Value{ + "ErrAmbigContext": ValueOf(template.ErrAmbigContext), + "ErrBadHTML": ValueOf(template.ErrBadHTML), + "ErrBranchEnd": ValueOf(template.ErrBranchEnd), + "ErrEndContext": ValueOf(template.ErrEndContext), + "ErrNoSuchTemplate": ValueOf(template.ErrNoSuchTemplate), + "ErrOutputContext": ValueOf(template.ErrOutputContext), + "ErrPartialCharset": ValueOf(template.ErrPartialCharset), + "ErrPartialEscape": ValueOf(template.ErrPartialEscape), + "ErrRangeLoopReentry": ValueOf(template.ErrRangeLoopReentry), + "ErrSlashAmbig": ValueOf(template.ErrSlashAmbig), + "HTMLEscape": ValueOf(template.HTMLEscape), + "HTMLEscapeString": ValueOf(template.HTMLEscapeString), + "HTMLEscaper": ValueOf(template.HTMLEscaper), + "IsTrue": ValueOf(template.IsTrue), + "JSEscape": ValueOf(template.JSEscape), + "JSEscapeString": ValueOf(template.JSEscapeString), + "JSEscaper": ValueOf(template.JSEscaper), + "Must": ValueOf(template.Must), + "New": ValueOf(template.New), + "OK": ValueOf(template.OK), + "ParseFiles": ValueOf(template.ParseFiles), + "ParseGlob": ValueOf(template.ParseGlob), + "URLQueryEscaper": ValueOf(template.URLQueryEscaper), + },Types: map[string]Type{ + "CSS": TypeOf((*template.CSS)(nil)).Elem(), + "Error": TypeOf((*template.Error)(nil)).Elem(), + "ErrorCode": TypeOf((*template.ErrorCode)(nil)).Elem(), + "FuncMap": TypeOf((*template.FuncMap)(nil)).Elem(), + "HTML": TypeOf((*template.HTML)(nil)).Elem(), + "HTMLAttr": TypeOf((*template.HTMLAttr)(nil)).Elem(), + "JS": TypeOf((*template.JS)(nil)).Elem(), + "JSStr": TypeOf((*template.JSStr)(nil)).Elem(), + "Template": TypeOf((*template.Template)(nil)).Elem(), + "URL": TypeOf((*template.URL)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/image.go b/vendor/github.com/cosmos72/gomacro/imports/image.go new file mode 100644 index 0000000..9651536 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/image.go @@ -0,0 +1,112 @@ +// this file was generated by gomacro command: import _b "image" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "image" + "image/color" +) + +// reflection: allow interpreted code to import "image" +func init() { + Packages["image"] = Package{ + Binds: map[string]Value{ + "Black": ValueOf(&image.Black).Elem(), + "Decode": ValueOf(image.Decode), + "DecodeConfig": ValueOf(image.DecodeConfig), + "ErrFormat": ValueOf(&image.ErrFormat).Elem(), + "NewAlpha": ValueOf(image.NewAlpha), + "NewAlpha16": ValueOf(image.NewAlpha16), + "NewCMYK": ValueOf(image.NewCMYK), + "NewGray": ValueOf(image.NewGray), + "NewGray16": ValueOf(image.NewGray16), + "NewNRGBA": ValueOf(image.NewNRGBA), + "NewNRGBA64": ValueOf(image.NewNRGBA64), + "NewNYCbCrA": ValueOf(image.NewNYCbCrA), + "NewPaletted": ValueOf(image.NewPaletted), + "NewRGBA": ValueOf(image.NewRGBA), + "NewRGBA64": ValueOf(image.NewRGBA64), + "NewUniform": ValueOf(image.NewUniform), + "NewYCbCr": ValueOf(image.NewYCbCr), + "Opaque": ValueOf(&image.Opaque).Elem(), + "Pt": ValueOf(image.Pt), + "Rect": ValueOf(image.Rect), + "RegisterFormat": ValueOf(image.RegisterFormat), + "Transparent": ValueOf(&image.Transparent).Elem(), + "White": ValueOf(&image.White).Elem(), + "YCbCrSubsampleRatio410": ValueOf(image.YCbCrSubsampleRatio410), + "YCbCrSubsampleRatio411": ValueOf(image.YCbCrSubsampleRatio411), + "YCbCrSubsampleRatio420": ValueOf(image.YCbCrSubsampleRatio420), + "YCbCrSubsampleRatio422": ValueOf(image.YCbCrSubsampleRatio422), + "YCbCrSubsampleRatio440": ValueOf(image.YCbCrSubsampleRatio440), + "YCbCrSubsampleRatio444": ValueOf(image.YCbCrSubsampleRatio444), + "ZP": ValueOf(&image.ZP).Elem(), + "ZR": ValueOf(&image.ZR).Elem(), + },Types: map[string]Type{ + "Alpha": TypeOf((*image.Alpha)(nil)).Elem(), + "Alpha16": TypeOf((*image.Alpha16)(nil)).Elem(), + "CMYK": TypeOf((*image.CMYK)(nil)).Elem(), + "Config": TypeOf((*image.Config)(nil)).Elem(), + "Gray": TypeOf((*image.Gray)(nil)).Elem(), + "Gray16": TypeOf((*image.Gray16)(nil)).Elem(), + "Image": TypeOf((*image.Image)(nil)).Elem(), + "NRGBA": TypeOf((*image.NRGBA)(nil)).Elem(), + "NRGBA64": TypeOf((*image.NRGBA64)(nil)).Elem(), + "NYCbCrA": TypeOf((*image.NYCbCrA)(nil)).Elem(), + "Paletted": TypeOf((*image.Paletted)(nil)).Elem(), + "PalettedImage": TypeOf((*image.PalettedImage)(nil)).Elem(), + "Point": TypeOf((*image.Point)(nil)).Elem(), + "RGBA": TypeOf((*image.RGBA)(nil)).Elem(), + "RGBA64": TypeOf((*image.RGBA64)(nil)).Elem(), + "Rectangle": TypeOf((*image.Rectangle)(nil)).Elem(), + "Uniform": TypeOf((*image.Uniform)(nil)).Elem(), + "YCbCr": TypeOf((*image.YCbCr)(nil)).Elem(), + "YCbCrSubsampleRatio": TypeOf((*image.YCbCrSubsampleRatio)(nil)).Elem(), + },Proxies: map[string]Type{ + "Image": TypeOf((*Image_image)(nil)).Elem(), + "PalettedImage": TypeOf((*PalettedImage_image)(nil)).Elem(), + },Wrappers: map[string][]string{ + "NYCbCrA": []string{"Bounds","COffset","YCbCrAt","YOffset",}, + }, + } +} + +// --------------- proxy for image.Image --------------- +type Image_image struct { + Object interface{} + At_ func(_proxy_obj_ interface{}, x int, y int) color.Color + Bounds_ func(interface{}) image.Rectangle + ColorModel_ func(interface{}) color.Model +} +func (Proxy *Image_image) At(x int, y int) color.Color { + return Proxy.At_(Proxy.Object, x, y) +} +func (Proxy *Image_image) Bounds() image.Rectangle { + return Proxy.Bounds_(Proxy.Object) +} +func (Proxy *Image_image) ColorModel() color.Model { + return Proxy.ColorModel_(Proxy.Object) +} + +// --------------- proxy for image.PalettedImage --------------- +type PalettedImage_image struct { + Object interface{} + At_ func(_proxy_obj_ interface{}, x int, y int) color.Color + Bounds_ func(interface{}) image.Rectangle + ColorIndexAt_ func(_proxy_obj_ interface{}, x int, y int) uint8 + ColorModel_ func(interface{}) color.Model +} +func (Proxy *PalettedImage_image) At(x int, y int) color.Color { + return Proxy.At_(Proxy.Object, x, y) +} +func (Proxy *PalettedImage_image) Bounds() image.Rectangle { + return Proxy.Bounds_(Proxy.Object) +} +func (Proxy *PalettedImage_image) ColorIndexAt(x int, y int) uint8 { + return Proxy.ColorIndexAt_(Proxy.Object, x, y) +} +func (Proxy *PalettedImage_image) ColorModel() color.Model { + return Proxy.ColorModel_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/image_color.go b/vendor/github.com/cosmos72/gomacro/imports/image_color.go new file mode 100644 index 0000000..64820b0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/image_color.go @@ -0,0 +1,73 @@ +// this file was generated by gomacro command: import _b "image/color" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "image/color" +) + +// reflection: allow interpreted code to import "image/color" +func init() { + Packages["image/color"] = Package{ + Binds: map[string]Value{ + "Alpha16Model": ValueOf(&color.Alpha16Model).Elem(), + "AlphaModel": ValueOf(&color.AlphaModel).Elem(), + "Black": ValueOf(&color.Black).Elem(), + "CMYKModel": ValueOf(&color.CMYKModel).Elem(), + "CMYKToRGB": ValueOf(color.CMYKToRGB), + "Gray16Model": ValueOf(&color.Gray16Model).Elem(), + "GrayModel": ValueOf(&color.GrayModel).Elem(), + "ModelFunc": ValueOf(color.ModelFunc), + "NRGBA64Model": ValueOf(&color.NRGBA64Model).Elem(), + "NRGBAModel": ValueOf(&color.NRGBAModel).Elem(), + "NYCbCrAModel": ValueOf(&color.NYCbCrAModel).Elem(), + "Opaque": ValueOf(&color.Opaque).Elem(), + "RGBA64Model": ValueOf(&color.RGBA64Model).Elem(), + "RGBAModel": ValueOf(&color.RGBAModel).Elem(), + "RGBToCMYK": ValueOf(color.RGBToCMYK), + "RGBToYCbCr": ValueOf(color.RGBToYCbCr), + "Transparent": ValueOf(&color.Transparent).Elem(), + "White": ValueOf(&color.White).Elem(), + "YCbCrModel": ValueOf(&color.YCbCrModel).Elem(), + "YCbCrToRGB": ValueOf(color.YCbCrToRGB), + },Types: map[string]Type{ + "Alpha": TypeOf((*color.Alpha)(nil)).Elem(), + "Alpha16": TypeOf((*color.Alpha16)(nil)).Elem(), + "CMYK": TypeOf((*color.CMYK)(nil)).Elem(), + "Color": TypeOf((*color.Color)(nil)).Elem(), + "Gray": TypeOf((*color.Gray)(nil)).Elem(), + "Gray16": TypeOf((*color.Gray16)(nil)).Elem(), + "Model": TypeOf((*color.Model)(nil)).Elem(), + "NRGBA": TypeOf((*color.NRGBA)(nil)).Elem(), + "NRGBA64": TypeOf((*color.NRGBA64)(nil)).Elem(), + "NYCbCrA": TypeOf((*color.NYCbCrA)(nil)).Elem(), + "Palette": TypeOf((*color.Palette)(nil)).Elem(), + "RGBA": TypeOf((*color.RGBA)(nil)).Elem(), + "RGBA64": TypeOf((*color.RGBA64)(nil)).Elem(), + "YCbCr": TypeOf((*color.YCbCr)(nil)).Elem(), + },Proxies: map[string]Type{ + "Color": TypeOf((*Color_image_color)(nil)).Elem(), + "Model": TypeOf((*Model_image_color)(nil)).Elem(), + }, + } +} + +// --------------- proxy for image/color.Color --------------- +type Color_image_color struct { + Object interface{} + RGBA_ func(interface{}) (r uint32, g uint32, b uint32, a uint32) +} +func (Proxy *Color_image_color) RGBA() (r uint32, g uint32, b uint32, a uint32) { + return Proxy.RGBA_(Proxy.Object) +} + +// --------------- proxy for image/color.Model --------------- +type Model_image_color struct { + Object interface{} + Convert_ func(_proxy_obj_ interface{}, c color.Color) color.Color +} +func (Proxy *Model_image_color) Convert(c color.Color) color.Color { + return Proxy.Convert_(Proxy.Object, c) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/image_color_palette.go b/vendor/github.com/cosmos72/gomacro/imports/image_color_palette.go new file mode 100644 index 0000000..2e1a749 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/image_color_palette.go @@ -0,0 +1,19 @@ +// this file was generated by gomacro command: import _b "image/color/palette" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "image/color/palette" +) + +// reflection: allow interpreted code to import "image/color/palette" +func init() { + Packages["image/color/palette"] = Package{ + Binds: map[string]Value{ + "Plan9": ValueOf(&palette.Plan9).Elem(), + "WebSafe": ValueOf(&palette.WebSafe).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/image_draw.go b/vendor/github.com/cosmos72/gomacro/imports/image_draw.go new file mode 100644 index 0000000..ff0b71d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/image_draw.go @@ -0,0 +1,72 @@ +// this file was generated by gomacro command: import _b "image/draw" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "image" + "image/color" + "image/draw" +) + +// reflection: allow interpreted code to import "image/draw" +func init() { + Packages["image/draw"] = Package{ + Binds: map[string]Value{ + "Draw": ValueOf(draw.Draw), + "DrawMask": ValueOf(draw.DrawMask), + "FloydSteinberg": ValueOf(&draw.FloydSteinberg).Elem(), + "Over": ValueOf(draw.Over), + "Src": ValueOf(draw.Src), + },Types: map[string]Type{ + "Drawer": TypeOf((*draw.Drawer)(nil)).Elem(), + "Image": TypeOf((*draw.Image)(nil)).Elem(), + "Op": TypeOf((*draw.Op)(nil)).Elem(), + "Quantizer": TypeOf((*draw.Quantizer)(nil)).Elem(), + },Proxies: map[string]Type{ + "Drawer": TypeOf((*Drawer_image_draw)(nil)).Elem(), + "Image": TypeOf((*Image_image_draw)(nil)).Elem(), + "Quantizer": TypeOf((*Quantizer_image_draw)(nil)).Elem(), + }, + } +} + +// --------------- proxy for image/draw.Drawer --------------- +type Drawer_image_draw struct { + Object interface{} + Draw_ func(_proxy_obj_ interface{}, dst draw.Image, r image.Rectangle, src image.Image, sp image.Point) +} +func (Proxy *Drawer_image_draw) Draw(dst draw.Image, r image.Rectangle, src image.Image, sp image.Point) { + Proxy.Draw_(Proxy.Object, dst, r, src, sp) +} + +// --------------- proxy for image/draw.Image --------------- +type Image_image_draw struct { + Object interface{} + At_ func(_proxy_obj_ interface{}, x int, y int) color.Color + Bounds_ func(interface{}) image.Rectangle + ColorModel_ func(interface{}) color.Model + Set_ func(_proxy_obj_ interface{}, x int, y int, c color.Color) +} +func (Proxy *Image_image_draw) At(x int, y int) color.Color { + return Proxy.At_(Proxy.Object, x, y) +} +func (Proxy *Image_image_draw) Bounds() image.Rectangle { + return Proxy.Bounds_(Proxy.Object) +} +func (Proxy *Image_image_draw) ColorModel() color.Model { + return Proxy.ColorModel_(Proxy.Object) +} +func (Proxy *Image_image_draw) Set(x int, y int, c color.Color) { + Proxy.Set_(Proxy.Object, x, y, c) +} + +// --------------- proxy for image/draw.Quantizer --------------- +type Quantizer_image_draw struct { + Object interface{} + Quantize_ func(_proxy_obj_ interface{}, p color.Palette, m image.Image) color.Palette +} +func (Proxy *Quantizer_image_draw) Quantize(p color.Palette, m image.Image) color.Palette { + return Proxy.Quantize_(Proxy.Object, p, m) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/image_gif.go b/vendor/github.com/cosmos72/gomacro/imports/image_gif.go new file mode 100644 index 0000000..a39aba3 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/image_gif.go @@ -0,0 +1,32 @@ +// this file was generated by gomacro command: import _b "image/gif" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "image/gif" +) + +// reflection: allow interpreted code to import "image/gif" +func init() { + Packages["image/gif"] = Package{ + Binds: map[string]Value{ + "Decode": ValueOf(gif.Decode), + "DecodeAll": ValueOf(gif.DecodeAll), + "DecodeConfig": ValueOf(gif.DecodeConfig), + "DisposalBackground": ValueOf(gif.DisposalBackground), + "DisposalNone": ValueOf(gif.DisposalNone), + "DisposalPrevious": ValueOf(gif.DisposalPrevious), + "Encode": ValueOf(gif.Encode), + "EncodeAll": ValueOf(gif.EncodeAll), + },Types: map[string]Type{ + "GIF": TypeOf((*gif.GIF)(nil)).Elem(), + "Options": TypeOf((*gif.Options)(nil)).Elem(), + },Untypeds: map[string]string{ + "DisposalBackground": "int:2", + "DisposalNone": "int:1", + "DisposalPrevious": "int:3", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/image_jpeg.go b/vendor/github.com/cosmos72/gomacro/imports/image_jpeg.go new file mode 100644 index 0000000..e7f5ed5 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/image_jpeg.go @@ -0,0 +1,43 @@ +// this file was generated by gomacro command: import _b "image/jpeg" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "image/jpeg" +) + +// reflection: allow interpreted code to import "image/jpeg" +func init() { + Packages["image/jpeg"] = Package{ + Binds: map[string]Value{ + "Decode": ValueOf(jpeg.Decode), + "DecodeConfig": ValueOf(jpeg.DecodeConfig), + "DefaultQuality": ValueOf(jpeg.DefaultQuality), + "Encode": ValueOf(jpeg.Encode), + },Types: map[string]Type{ + "FormatError": TypeOf((*jpeg.FormatError)(nil)).Elem(), + "Options": TypeOf((*jpeg.Options)(nil)).Elem(), + "Reader": TypeOf((*jpeg.Reader)(nil)).Elem(), + "UnsupportedError": TypeOf((*jpeg.UnsupportedError)(nil)).Elem(), + },Proxies: map[string]Type{ + "Reader": TypeOf((*Reader_image_jpeg)(nil)).Elem(), + },Untypeds: map[string]string{ + "DefaultQuality": "int:75", + }, + } +} + +// --------------- proxy for image/jpeg.Reader --------------- +type Reader_image_jpeg struct { + Object interface{} + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) + ReadByte_ func(interface{}) (byte, error) +} +func (Proxy *Reader_image_jpeg) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} +func (Proxy *Reader_image_jpeg) ReadByte() (byte, error) { + return Proxy.ReadByte_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/image_png.go b/vendor/github.com/cosmos72/gomacro/imports/image_png.go new file mode 100644 index 0000000..8781c3a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/image_png.go @@ -0,0 +1,29 @@ +// this file was generated by gomacro command: import _b "image/png" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "image/png" +) + +// reflection: allow interpreted code to import "image/png" +func init() { + Packages["image/png"] = Package{ + Binds: map[string]Value{ + "BestCompression": ValueOf(png.BestCompression), + "BestSpeed": ValueOf(png.BestSpeed), + "Decode": ValueOf(png.Decode), + "DecodeConfig": ValueOf(png.DecodeConfig), + "DefaultCompression": ValueOf(png.DefaultCompression), + "Encode": ValueOf(png.Encode), + "NoCompression": ValueOf(png.NoCompression), + },Types: map[string]Type{ + "CompressionLevel": TypeOf((*png.CompressionLevel)(nil)).Elem(), + "Encoder": TypeOf((*png.Encoder)(nil)).Elem(), + "FormatError": TypeOf((*png.FormatError)(nil)).Elem(), + "UnsupportedError": TypeOf((*png.UnsupportedError)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/index_suffixarray.go b/vendor/github.com/cosmos72/gomacro/imports/index_suffixarray.go new file mode 100644 index 0000000..d1a801a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/index_suffixarray.go @@ -0,0 +1,20 @@ +// this file was generated by gomacro command: import _b "index/suffixarray" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "index/suffixarray" +) + +// reflection: allow interpreted code to import "index/suffixarray" +func init() { + Packages["index/suffixarray"] = Package{ + Binds: map[string]Value{ + "New": ValueOf(suffixarray.New), + },Types: map[string]Type{ + "Index": TypeOf((*suffixarray.Index)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/io.go b/vendor/github.com/cosmos72/gomacro/imports/io.go new file mode 100644 index 0000000..ed7d171 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/io.go @@ -0,0 +1,312 @@ +// this file was generated by gomacro command: import _b "io" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "io" +) + +// reflection: allow interpreted code to import "io" +func init() { + Packages["io"] = Package{ + Binds: map[string]Value{ + "Copy": ValueOf(io.Copy), + "CopyBuffer": ValueOf(io.CopyBuffer), + "CopyN": ValueOf(io.CopyN), + "EOF": ValueOf(&io.EOF).Elem(), + "ErrClosedPipe": ValueOf(&io.ErrClosedPipe).Elem(), + "ErrNoProgress": ValueOf(&io.ErrNoProgress).Elem(), + "ErrShortBuffer": ValueOf(&io.ErrShortBuffer).Elem(), + "ErrShortWrite": ValueOf(&io.ErrShortWrite).Elem(), + "ErrUnexpectedEOF": ValueOf(&io.ErrUnexpectedEOF).Elem(), + "LimitReader": ValueOf(io.LimitReader), + "MultiReader": ValueOf(io.MultiReader), + "MultiWriter": ValueOf(io.MultiWriter), + "NewSectionReader": ValueOf(io.NewSectionReader), + "Pipe": ValueOf(io.Pipe), + "ReadAtLeast": ValueOf(io.ReadAtLeast), + "ReadFull": ValueOf(io.ReadFull), + "SeekCurrent": ValueOf(io.SeekCurrent), + "SeekEnd": ValueOf(io.SeekEnd), + "SeekStart": ValueOf(io.SeekStart), + "TeeReader": ValueOf(io.TeeReader), + "WriteString": ValueOf(io.WriteString), + },Types: map[string]Type{ + "ByteReader": TypeOf((*io.ByteReader)(nil)).Elem(), + "ByteScanner": TypeOf((*io.ByteScanner)(nil)).Elem(), + "ByteWriter": TypeOf((*io.ByteWriter)(nil)).Elem(), + "Closer": TypeOf((*io.Closer)(nil)).Elem(), + "LimitedReader": TypeOf((*io.LimitedReader)(nil)).Elem(), + "PipeReader": TypeOf((*io.PipeReader)(nil)).Elem(), + "PipeWriter": TypeOf((*io.PipeWriter)(nil)).Elem(), + "ReadCloser": TypeOf((*io.ReadCloser)(nil)).Elem(), + "ReadSeeker": TypeOf((*io.ReadSeeker)(nil)).Elem(), + "ReadWriteCloser": TypeOf((*io.ReadWriteCloser)(nil)).Elem(), + "ReadWriteSeeker": TypeOf((*io.ReadWriteSeeker)(nil)).Elem(), + "ReadWriter": TypeOf((*io.ReadWriter)(nil)).Elem(), + "Reader": TypeOf((*io.Reader)(nil)).Elem(), + "ReaderAt": TypeOf((*io.ReaderAt)(nil)).Elem(), + "ReaderFrom": TypeOf((*io.ReaderFrom)(nil)).Elem(), + "RuneReader": TypeOf((*io.RuneReader)(nil)).Elem(), + "RuneScanner": TypeOf((*io.RuneScanner)(nil)).Elem(), + "SectionReader": TypeOf((*io.SectionReader)(nil)).Elem(), + "Seeker": TypeOf((*io.Seeker)(nil)).Elem(), + "WriteCloser": TypeOf((*io.WriteCloser)(nil)).Elem(), + "WriteSeeker": TypeOf((*io.WriteSeeker)(nil)).Elem(), + "Writer": TypeOf((*io.Writer)(nil)).Elem(), + "WriterAt": TypeOf((*io.WriterAt)(nil)).Elem(), + "WriterTo": TypeOf((*io.WriterTo)(nil)).Elem(), + },Proxies: map[string]Type{ + "ByteReader": TypeOf((*ByteReader_io)(nil)).Elem(), + "ByteScanner": TypeOf((*ByteScanner_io)(nil)).Elem(), + "ByteWriter": TypeOf((*ByteWriter_io)(nil)).Elem(), + "Closer": TypeOf((*Closer_io)(nil)).Elem(), + "ReadCloser": TypeOf((*ReadCloser_io)(nil)).Elem(), + "ReadSeeker": TypeOf((*ReadSeeker_io)(nil)).Elem(), + "ReadWriteCloser": TypeOf((*ReadWriteCloser_io)(nil)).Elem(), + "ReadWriteSeeker": TypeOf((*ReadWriteSeeker_io)(nil)).Elem(), + "ReadWriter": TypeOf((*ReadWriter_io)(nil)).Elem(), + "Reader": TypeOf((*Reader_io)(nil)).Elem(), + "ReaderAt": TypeOf((*ReaderAt_io)(nil)).Elem(), + "ReaderFrom": TypeOf((*ReaderFrom_io)(nil)).Elem(), + "RuneReader": TypeOf((*RuneReader_io)(nil)).Elem(), + "RuneScanner": TypeOf((*RuneScanner_io)(nil)).Elem(), + "Seeker": TypeOf((*Seeker_io)(nil)).Elem(), + "WriteCloser": TypeOf((*WriteCloser_io)(nil)).Elem(), + "WriteSeeker": TypeOf((*WriteSeeker_io)(nil)).Elem(), + "Writer": TypeOf((*Writer_io)(nil)).Elem(), + "WriterAt": TypeOf((*WriterAt_io)(nil)).Elem(), + "WriterTo": TypeOf((*WriterTo_io)(nil)).Elem(), + },Untypeds: map[string]string{ + "SeekCurrent": "int:1", + "SeekEnd": "int:2", + "SeekStart": "int:0", + }, + } +} + +// --------------- proxy for io.ByteReader --------------- +type ByteReader_io struct { + Object interface{} + ReadByte_ func(interface{}) (byte, error) +} +func (Proxy *ByteReader_io) ReadByte() (byte, error) { + return Proxy.ReadByte_(Proxy.Object) +} + +// --------------- proxy for io.ByteScanner --------------- +type ByteScanner_io struct { + Object interface{} + ReadByte_ func(interface{}) (byte, error) + UnreadByte_ func(interface{}) error +} +func (Proxy *ByteScanner_io) ReadByte() (byte, error) { + return Proxy.ReadByte_(Proxy.Object) +} +func (Proxy *ByteScanner_io) UnreadByte() error { + return Proxy.UnreadByte_(Proxy.Object) +} + +// --------------- proxy for io.ByteWriter --------------- +type ByteWriter_io struct { + Object interface{} + WriteByte_ func(_proxy_obj_ interface{}, c byte) error +} +func (Proxy *ByteWriter_io) WriteByte(c byte) error { + return Proxy.WriteByte_(Proxy.Object, c) +} + +// --------------- proxy for io.Closer --------------- +type Closer_io struct { + Object interface{} + Close_ func(interface{}) error +} +func (Proxy *Closer_io) Close() error { + return Proxy.Close_(Proxy.Object) +} + +// --------------- proxy for io.ReadCloser --------------- +type ReadCloser_io struct { + Object interface{} + Close_ func(interface{}) error + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *ReadCloser_io) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *ReadCloser_io) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} + +// --------------- proxy for io.ReadSeeker --------------- +type ReadSeeker_io struct { + Object interface{} + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) + Seek_ func(_proxy_obj_ interface{}, offset int64, whence int) (int64, error) +} +func (Proxy *ReadSeeker_io) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} +func (Proxy *ReadSeeker_io) Seek(offset int64, whence int) (int64, error) { + return Proxy.Seek_(Proxy.Object, offset, whence) +} + +// --------------- proxy for io.ReadWriteCloser --------------- +type ReadWriteCloser_io struct { + Object interface{} + Close_ func(interface{}) error + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) + Write_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *ReadWriteCloser_io) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *ReadWriteCloser_io) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} +func (Proxy *ReadWriteCloser_io) Write(p []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, p) +} + +// --------------- proxy for io.ReadWriteSeeker --------------- +type ReadWriteSeeker_io struct { + Object interface{} + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) + Seek_ func(_proxy_obj_ interface{}, offset int64, whence int) (int64, error) + Write_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *ReadWriteSeeker_io) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} +func (Proxy *ReadWriteSeeker_io) Seek(offset int64, whence int) (int64, error) { + return Proxy.Seek_(Proxy.Object, offset, whence) +} +func (Proxy *ReadWriteSeeker_io) Write(p []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, p) +} + +// --------------- proxy for io.ReadWriter --------------- +type ReadWriter_io struct { + Object interface{} + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) + Write_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *ReadWriter_io) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} +func (Proxy *ReadWriter_io) Write(p []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, p) +} + +// --------------- proxy for io.Reader --------------- +type Reader_io struct { + Object interface{} + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *Reader_io) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} + +// --------------- proxy for io.ReaderAt --------------- +type ReaderAt_io struct { + Object interface{} + ReadAt_ func(_proxy_obj_ interface{}, p []byte, off int64) (n int, err error) +} +func (Proxy *ReaderAt_io) ReadAt(p []byte, off int64) (n int, err error) { + return Proxy.ReadAt_(Proxy.Object, p, off) +} + +// --------------- proxy for io.ReaderFrom --------------- +type ReaderFrom_io struct { + Object interface{} + ReadFrom_ func(_proxy_obj_ interface{}, r io.Reader) (n int64, err error) +} +func (Proxy *ReaderFrom_io) ReadFrom(r io.Reader) (n int64, err error) { + return Proxy.ReadFrom_(Proxy.Object, r) +} + +// --------------- proxy for io.RuneReader --------------- +type RuneReader_io struct { + Object interface{} + ReadRune_ func(interface{}) (r rune, size int, err error) +} +func (Proxy *RuneReader_io) ReadRune() (r rune, size int, err error) { + return Proxy.ReadRune_(Proxy.Object) +} + +// --------------- proxy for io.RuneScanner --------------- +type RuneScanner_io struct { + Object interface{} + ReadRune_ func(interface{}) (r rune, size int, err error) + UnreadRune_ func(interface{}) error +} +func (Proxy *RuneScanner_io) ReadRune() (r rune, size int, err error) { + return Proxy.ReadRune_(Proxy.Object) +} +func (Proxy *RuneScanner_io) UnreadRune() error { + return Proxy.UnreadRune_(Proxy.Object) +} + +// --------------- proxy for io.Seeker --------------- +type Seeker_io struct { + Object interface{} + Seek_ func(_proxy_obj_ interface{}, offset int64, whence int) (int64, error) +} +func (Proxy *Seeker_io) Seek(offset int64, whence int) (int64, error) { + return Proxy.Seek_(Proxy.Object, offset, whence) +} + +// --------------- proxy for io.WriteCloser --------------- +type WriteCloser_io struct { + Object interface{} + Close_ func(interface{}) error + Write_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *WriteCloser_io) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *WriteCloser_io) Write(p []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, p) +} + +// --------------- proxy for io.WriteSeeker --------------- +type WriteSeeker_io struct { + Object interface{} + Seek_ func(_proxy_obj_ interface{}, offset int64, whence int) (int64, error) + Write_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *WriteSeeker_io) Seek(offset int64, whence int) (int64, error) { + return Proxy.Seek_(Proxy.Object, offset, whence) +} +func (Proxy *WriteSeeker_io) Write(p []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, p) +} + +// --------------- proxy for io.Writer --------------- +type Writer_io struct { + Object interface{} + Write_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) +} +func (Proxy *Writer_io) Write(p []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, p) +} + +// --------------- proxy for io.WriterAt --------------- +type WriterAt_io struct { + Object interface{} + WriteAt_ func(_proxy_obj_ interface{}, p []byte, off int64) (n int, err error) +} +func (Proxy *WriterAt_io) WriteAt(p []byte, off int64) (n int, err error) { + return Proxy.WriteAt_(Proxy.Object, p, off) +} + +// --------------- proxy for io.WriterTo --------------- +type WriterTo_io struct { + Object interface{} + WriteTo_ func(_proxy_obj_ interface{}, w io.Writer) (n int64, err error) +} +func (Proxy *WriterTo_io) WriteTo(w io.Writer) (n int64, err error) { + return Proxy.WriteTo_(Proxy.Object, w) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/io_ioutil.go b/vendor/github.com/cosmos72/gomacro/imports/io_ioutil.go new file mode 100644 index 0000000..d91a4a1 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/io_ioutil.go @@ -0,0 +1,25 @@ +// this file was generated by gomacro command: import _b "io/ioutil" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "io/ioutil" +) + +// reflection: allow interpreted code to import "io/ioutil" +func init() { + Packages["io/ioutil"] = Package{ + Binds: map[string]Value{ + "Discard": ValueOf(&ioutil.Discard).Elem(), + "NopCloser": ValueOf(ioutil.NopCloser), + "ReadAll": ValueOf(ioutil.ReadAll), + "ReadDir": ValueOf(ioutil.ReadDir), + "ReadFile": ValueOf(ioutil.ReadFile), + "TempDir": ValueOf(ioutil.TempDir), + "TempFile": ValueOf(ioutil.TempFile), + "WriteFile": ValueOf(ioutil.WriteFile), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/log.go b/vendor/github.com/cosmos72/gomacro/imports/log.go new file mode 100644 index 0000000..3c5213e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/log.go @@ -0,0 +1,50 @@ +// this file was generated by gomacro command: import _b "log" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "log" +) + +// reflection: allow interpreted code to import "log" +func init() { + Packages["log"] = Package{ + Binds: map[string]Value{ + "Fatal": ValueOf(log.Fatal), + "Fatalf": ValueOf(log.Fatalf), + "Fatalln": ValueOf(log.Fatalln), + "Flags": ValueOf(log.Flags), + "LUTC": ValueOf(log.LUTC), + "Ldate": ValueOf(log.Ldate), + "Llongfile": ValueOf(log.Llongfile), + "Lmicroseconds": ValueOf(log.Lmicroseconds), + "Lshortfile": ValueOf(log.Lshortfile), + "LstdFlags": ValueOf(log.LstdFlags), + "Ltime": ValueOf(log.Ltime), + "New": ValueOf(log.New), + "Output": ValueOf(log.Output), + "Panic": ValueOf(log.Panic), + "Panicf": ValueOf(log.Panicf), + "Panicln": ValueOf(log.Panicln), + "Prefix": ValueOf(log.Prefix), + "Print": ValueOf(log.Print), + "Printf": ValueOf(log.Printf), + "Println": ValueOf(log.Println), + "SetFlags": ValueOf(log.SetFlags), + "SetOutput": ValueOf(log.SetOutput), + "SetPrefix": ValueOf(log.SetPrefix), + },Types: map[string]Type{ + "Logger": TypeOf((*log.Logger)(nil)).Elem(), + },Untypeds: map[string]string{ + "LUTC": "int:32", + "Ldate": "int:1", + "Llongfile": "int:8", + "Lmicroseconds": "int:4", + "Lshortfile": "int:16", + "LstdFlags": "int:3", + "Ltime": "int:2", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/log_syslog.go b/vendor/github.com/cosmos72/gomacro/imports/log_syslog.go new file mode 100644 index 0000000..fe11c8f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/log_syslog.go @@ -0,0 +1,55 @@ +// this file was generated by gomacro command: import _b "log/syslog" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +// +build !nacl +// +build !plan9 +// +build !windows + +package imports + +import ( + . "reflect" + "log/syslog" +) + +// reflection: allow interpreted code to import "log/syslog" +func init() { + Packages["log/syslog"] = Package{ + Binds: map[string]Value{ + "Dial": ValueOf(syslog.Dial), + "LOG_ALERT": ValueOf(syslog.LOG_ALERT), + "LOG_AUTH": ValueOf(syslog.LOG_AUTH), + "LOG_AUTHPRIV": ValueOf(syslog.LOG_AUTHPRIV), + "LOG_CRIT": ValueOf(syslog.LOG_CRIT), + "LOG_CRON": ValueOf(syslog.LOG_CRON), + "LOG_DAEMON": ValueOf(syslog.LOG_DAEMON), + "LOG_DEBUG": ValueOf(syslog.LOG_DEBUG), + "LOG_EMERG": ValueOf(syslog.LOG_EMERG), + "LOG_ERR": ValueOf(syslog.LOG_ERR), + "LOG_FTP": ValueOf(syslog.LOG_FTP), + "LOG_INFO": ValueOf(syslog.LOG_INFO), + "LOG_KERN": ValueOf(syslog.LOG_KERN), + "LOG_LOCAL0": ValueOf(syslog.LOG_LOCAL0), + "LOG_LOCAL1": ValueOf(syslog.LOG_LOCAL1), + "LOG_LOCAL2": ValueOf(syslog.LOG_LOCAL2), + "LOG_LOCAL3": ValueOf(syslog.LOG_LOCAL3), + "LOG_LOCAL4": ValueOf(syslog.LOG_LOCAL4), + "LOG_LOCAL5": ValueOf(syslog.LOG_LOCAL5), + "LOG_LOCAL6": ValueOf(syslog.LOG_LOCAL6), + "LOG_LOCAL7": ValueOf(syslog.LOG_LOCAL7), + "LOG_LPR": ValueOf(syslog.LOG_LPR), + "LOG_MAIL": ValueOf(syslog.LOG_MAIL), + "LOG_NEWS": ValueOf(syslog.LOG_NEWS), + "LOG_NOTICE": ValueOf(syslog.LOG_NOTICE), + "LOG_SYSLOG": ValueOf(syslog.LOG_SYSLOG), + "LOG_USER": ValueOf(syslog.LOG_USER), + "LOG_UUCP": ValueOf(syslog.LOG_UUCP), + "LOG_WARNING": ValueOf(syslog.LOG_WARNING), + "New": ValueOf(syslog.New), + "NewLogger": ValueOf(syslog.NewLogger), + },Types: map[string]Type{ + "Priority": TypeOf((*syslog.Priority)(nil)).Elem(), + "Writer": TypeOf((*syslog.Writer)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/math.go b/vendor/github.com/cosmos72/gomacro/imports/math.go new file mode 100644 index 0000000..1e616dc --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/math.go @@ -0,0 +1,134 @@ +// this file was generated by gomacro command: import _b "math" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "math" +) + +// reflection: allow interpreted code to import "math" +func init() { + Packages["math"] = Package{ + Binds: map[string]Value{ + "Abs": ValueOf(math.Abs), + "Acos": ValueOf(math.Acos), + "Acosh": ValueOf(math.Acosh), + "Asin": ValueOf(math.Asin), + "Asinh": ValueOf(math.Asinh), + "Atan": ValueOf(math.Atan), + "Atan2": ValueOf(math.Atan2), + "Atanh": ValueOf(math.Atanh), + "Cbrt": ValueOf(math.Cbrt), + "Ceil": ValueOf(math.Ceil), + "Copysign": ValueOf(math.Copysign), + "Cos": ValueOf(math.Cos), + "Cosh": ValueOf(math.Cosh), + "Dim": ValueOf(math.Dim), + "E": ValueOf(math.E), + "Erf": ValueOf(math.Erf), + "Erfc": ValueOf(math.Erfc), + "Exp": ValueOf(math.Exp), + "Exp2": ValueOf(math.Exp2), + "Expm1": ValueOf(math.Expm1), + "Float32bits": ValueOf(math.Float32bits), + "Float32frombits": ValueOf(math.Float32frombits), + "Float64bits": ValueOf(math.Float64bits), + "Float64frombits": ValueOf(math.Float64frombits), + "Floor": ValueOf(math.Floor), + "Frexp": ValueOf(math.Frexp), + "Gamma": ValueOf(math.Gamma), + "Hypot": ValueOf(math.Hypot), + "Ilogb": ValueOf(math.Ilogb), + "Inf": ValueOf(math.Inf), + "IsInf": ValueOf(math.IsInf), + "IsNaN": ValueOf(math.IsNaN), + "J0": ValueOf(math.J0), + "J1": ValueOf(math.J1), + "Jn": ValueOf(math.Jn), + "Ldexp": ValueOf(math.Ldexp), + "Lgamma": ValueOf(math.Lgamma), + "Ln10": ValueOf(math.Ln10), + "Ln2": ValueOf(math.Ln2), + "Log": ValueOf(math.Log), + "Log10": ValueOf(math.Log10), + "Log10E": ValueOf(math.Log10E), + "Log1p": ValueOf(math.Log1p), + "Log2": ValueOf(math.Log2), + "Log2E": ValueOf(math.Log2E), + "Logb": ValueOf(math.Logb), + "Max": ValueOf(math.Max), + "MaxFloat32": ValueOf(float32(math.MaxFloat32)), + "MaxFloat64": ValueOf(float64(math.MaxFloat64)), + "MaxInt16": ValueOf(math.MaxInt16), + "MaxInt32": ValueOf(math.MaxInt32), + "MaxInt64": ValueOf(int64(math.MaxInt64)), + "MaxInt8": ValueOf(math.MaxInt8), + "MaxUint16": ValueOf(math.MaxUint16), + "MaxUint32": ValueOf(uint32(math.MaxUint32)), + "MaxUint64": ValueOf(uint64(math.MaxUint64)), + "MaxUint8": ValueOf(math.MaxUint8), + "Min": ValueOf(math.Min), + "MinInt16": ValueOf(math.MinInt16), + "MinInt32": ValueOf(math.MinInt32), + "MinInt64": ValueOf(int64(math.MinInt64)), + "MinInt8": ValueOf(math.MinInt8), + "Mod": ValueOf(math.Mod), + "Modf": ValueOf(math.Modf), + "NaN": ValueOf(math.NaN), + "Nextafter": ValueOf(math.Nextafter), + "Nextafter32": ValueOf(math.Nextafter32), + "Phi": ValueOf(math.Phi), + "Pi": ValueOf(math.Pi), + "Pow": ValueOf(math.Pow), + "Pow10": ValueOf(math.Pow10), + "Remainder": ValueOf(math.Remainder), + "Signbit": ValueOf(math.Signbit), + "Sin": ValueOf(math.Sin), + "Sincos": ValueOf(math.Sincos), + "Sinh": ValueOf(math.Sinh), + "SmallestNonzeroFloat32": ValueOf(math.SmallestNonzeroFloat32), + "SmallestNonzeroFloat64": ValueOf(math.SmallestNonzeroFloat64), + "Sqrt": ValueOf(math.Sqrt), + "Sqrt2": ValueOf(math.Sqrt2), + "SqrtE": ValueOf(math.SqrtE), + "SqrtPhi": ValueOf(math.SqrtPhi), + "SqrtPi": ValueOf(math.SqrtPi), + "Tan": ValueOf(math.Tan), + "Tanh": ValueOf(math.Tanh), + "Trunc": ValueOf(math.Trunc), + "Y0": ValueOf(math.Y0), + "Y1": ValueOf(math.Y1), + "Yn": ValueOf(math.Yn), + },Untypeds: map[string]string{ + "E": "float:9111550163858012281440901732746538838772262590143654133938674751170893736363860704678356685906435473285900222617098459660313571825500424586151709661124231/3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024", + "Ln10": "float:7718154667303294525535807123668701784088749544639269844330854713417502399132378792470215254015532173856280403153541607081951593465883977341501885089972609/3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024", + "Ln2": "float:1161698033016123487673055082581635139703829175621884955134501220495379707050587855317621548207870502811545419056917762934492002063302542007440018497053197/1675975991242824637446753124775730765934920727574049172215445180465220503759193372100234287270862928461253982273310756356719235351493321243304206125760512", + "Log10E": "float:11645873996785463169335113650913961638081378781380835843607526526887199042223674282440048773139860374459897757791791429659694786306613464090293660335282213/26815615859885194199148049996411692254958731641184786755447122887443528060147093953603748596333806855380063716372972101707507765623893139892867298012168192", + "Log2E": "float:9671689004859951471451510700966227821397578809549890556103133486120211484101236374917210827834571490990560020909793651977303669442567160330196651027673915/6703903964971298549787012499102923063739682910296196688861780721860882015036773488400937149083451713845015929093243025426876941405973284973216824503042048", + "MaxFloat32": "float:340282346638528859811704183484516925440", + "MaxFloat64": "float:179769313486231570814527423731704356798100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001726091719747851502452248840877809013992353692576760003314411346346787114201583914540245118557675136988317857687302483414838584368727290187675497882714112", + "MaxInt16": "int:32767", + "MaxInt32": "int:2147483647", + "MaxInt64": "int:9223372036854775807", + "MaxInt8": "int:127", + "MaxUint16": "int:65535", + "MaxUint32": "int:4294967295", + "MaxUint64": "int:18446744073709551615", + "MaxUint8": "int:255", + "MinInt16": "int:-32768", + "MinInt32": "int:-2147483648", + "MinInt64": "int:-9223372036854775808", + "MinInt8": "int:-128", + "Phi": "float:1355893059079843193030097015621153611996040418655586468942144325530191466769501318141688179946842310342863020505846766772662711907185210172534864277556413/837987995621412318723376562387865382967460363787024586107722590232610251879596686050117143635431464230626991136655378178359617675746660621652103062880256", + "Pi": "float:5265233861681329527430852685569923513156999664186156825699335632145130833652529926715379955630651875029455043336995646403337241248353639932329607400740841/1675975991242824637446753124775730765934920727574049172215445180465220503759193372100234287270862928461253982273310756356719235351493321243304206125760512", + "SmallestNonzeroFloat32": "float:13407807929942597099574024998205846127476859526281406305997157614053697519758116209723839542388419390837860564546892625342279307746235762181839259274038433/9568131466127621947163770315237577352582483950433331955534014747297500715462012198465648064079848065788579276806882658480425438483841942548911565191978080929321047135323978360596199778018349602045952", + "SmallestNonzeroFloat64": "float:837987995621412318723376562387865382967528542837591553054231272745319198424369655365935231952608328604793302723807080372339569516882534924689845329132395/169610658558250597457949882757253129256512582825232846524880306601538402823521241146029596619315984411186040958942601714115551210232864300981082979971362343290567722620469726473734686654453609615462992711162886914312002548467323965655079024463264900175579232518184090858573444982995938918601148906296146506082388046271954770533990741509051865409843001664221654092011338230906199419669398139261492786445466233786170361793273957887549496248290745722916589964061626271423952584704", + "Sqrt2": "float:2370187977027294181708131613913039815021135436007832465948110837130147201951018863264485267316490927583884794148767707476886477873843439514530955153130291/1675975991242824637446753124775730765934920727574049172215445180465220503759193372100234287270862928461253982273310756356719235351493321243304206125760512", + "SqrtE": "float:5526434531889553359100339527602551136535293759178014794854010166956579300433867493319128312730236202227030041787483535082815593803939658073242247126443667/3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024", + "SqrtPhi": "float:4263748785949384222047394170590505028114438860640840609262555507082501186239921195173529474565705679454046425697050803084649101634749198923578942876946925/3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024", + "SqrtPi": "float:5941180199407067869909325294831655792192555130773991214446196790352931403459697425080809383647149191660934688457292053536928055420572552259905515759885317/3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251521024", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/math_big.go b/vendor/github.com/cosmos72/gomacro/imports/math_big.go new file mode 100644 index 0000000..0bf0aed --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/math_big.go @@ -0,0 +1,48 @@ +// this file was generated by gomacro command: import _b "math/big" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "math/big" +) + +// reflection: allow interpreted code to import "math/big" +func init() { + Packages["math/big"] = Package{ + Binds: map[string]Value{ + "Above": ValueOf(big.Above), + "AwayFromZero": ValueOf(big.AwayFromZero), + "Below": ValueOf(big.Below), + "Exact": ValueOf(big.Exact), + "Jacobi": ValueOf(big.Jacobi), + "MaxBase": ValueOf(big.MaxBase), + "MaxExp": ValueOf(big.MaxExp), + "MaxPrec": ValueOf(uint32(big.MaxPrec)), + "MinExp": ValueOf(big.MinExp), + "NewFloat": ValueOf(big.NewFloat), + "NewInt": ValueOf(big.NewInt), + "NewRat": ValueOf(big.NewRat), + "ParseFloat": ValueOf(big.ParseFloat), + "ToNearestAway": ValueOf(big.ToNearestAway), + "ToNearestEven": ValueOf(big.ToNearestEven), + "ToNegativeInf": ValueOf(big.ToNegativeInf), + "ToPositiveInf": ValueOf(big.ToPositiveInf), + "ToZero": ValueOf(big.ToZero), + },Types: map[string]Type{ + "Accuracy": TypeOf((*big.Accuracy)(nil)).Elem(), + "ErrNaN": TypeOf((*big.ErrNaN)(nil)).Elem(), + "Float": TypeOf((*big.Float)(nil)).Elem(), + "Int": TypeOf((*big.Int)(nil)).Elem(), + "Rat": TypeOf((*big.Rat)(nil)).Elem(), + "RoundingMode": TypeOf((*big.RoundingMode)(nil)).Elem(), + "Word": TypeOf((*big.Word)(nil)).Elem(), + },Untypeds: map[string]string{ + "MaxBase": "rune:36", + "MaxExp": "int:2147483647", + "MaxPrec": "int:4294967295", + "MinExp": "int:-2147483648", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/math_cmplx.go b/vendor/github.com/cosmos72/gomacro/imports/math_cmplx.go new file mode 100644 index 0000000..b24939f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/math_cmplx.go @@ -0,0 +1,44 @@ +// this file was generated by gomacro command: import _b "math/cmplx" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "math/cmplx" +) + +// reflection: allow interpreted code to import "math/cmplx" +func init() { + Packages["math/cmplx"] = Package{ + Binds: map[string]Value{ + "Abs": ValueOf(cmplx.Abs), + "Acos": ValueOf(cmplx.Acos), + "Acosh": ValueOf(cmplx.Acosh), + "Asin": ValueOf(cmplx.Asin), + "Asinh": ValueOf(cmplx.Asinh), + "Atan": ValueOf(cmplx.Atan), + "Atanh": ValueOf(cmplx.Atanh), + "Conj": ValueOf(cmplx.Conj), + "Cos": ValueOf(cmplx.Cos), + "Cosh": ValueOf(cmplx.Cosh), + "Cot": ValueOf(cmplx.Cot), + "Exp": ValueOf(cmplx.Exp), + "Inf": ValueOf(cmplx.Inf), + "IsInf": ValueOf(cmplx.IsInf), + "IsNaN": ValueOf(cmplx.IsNaN), + "Log": ValueOf(cmplx.Log), + "Log10": ValueOf(cmplx.Log10), + "NaN": ValueOf(cmplx.NaN), + "Phase": ValueOf(cmplx.Phase), + "Polar": ValueOf(cmplx.Polar), + "Pow": ValueOf(cmplx.Pow), + "Rect": ValueOf(cmplx.Rect), + "Sin": ValueOf(cmplx.Sin), + "Sinh": ValueOf(cmplx.Sinh), + "Sqrt": ValueOf(cmplx.Sqrt), + "Tan": ValueOf(cmplx.Tan), + "Tanh": ValueOf(cmplx.Tanh), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/math_rand.go b/vendor/github.com/cosmos72/gomacro/imports/math_rand.go new file mode 100644 index 0000000..735c33b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/math_rand.go @@ -0,0 +1,73 @@ +// this file was generated by gomacro command: import _b "math/rand" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "math/rand" +) + +// reflection: allow interpreted code to import "math/rand" +func init() { + Packages["math/rand"] = Package{ + Binds: map[string]Value{ + "ExpFloat64": ValueOf(rand.ExpFloat64), + "Float32": ValueOf(rand.Float32), + "Float64": ValueOf(rand.Float64), + "Int": ValueOf(rand.Int), + "Int31": ValueOf(rand.Int31), + "Int31n": ValueOf(rand.Int31n), + "Int63": ValueOf(rand.Int63), + "Int63n": ValueOf(rand.Int63n), + "Intn": ValueOf(rand.Intn), + "New": ValueOf(rand.New), + "NewSource": ValueOf(rand.NewSource), + "NewZipf": ValueOf(rand.NewZipf), + "NormFloat64": ValueOf(rand.NormFloat64), + "Perm": ValueOf(rand.Perm), + "Read": ValueOf(rand.Read), + "Seed": ValueOf(rand.Seed), + "Uint32": ValueOf(rand.Uint32), + "Uint64": ValueOf(rand.Uint64), + },Types: map[string]Type{ + "Rand": TypeOf((*rand.Rand)(nil)).Elem(), + "Source": TypeOf((*rand.Source)(nil)).Elem(), + "Source64": TypeOf((*rand.Source64)(nil)).Elem(), + "Zipf": TypeOf((*rand.Zipf)(nil)).Elem(), + },Proxies: map[string]Type{ + "Source": TypeOf((*Source_math_rand)(nil)).Elem(), + "Source64": TypeOf((*Source64_math_rand)(nil)).Elem(), + }, + } +} + +// --------------- proxy for math/rand.Source --------------- +type Source_math_rand struct { + Object interface{} + Int63_ func(interface{}) int64 + Seed_ func(_proxy_obj_ interface{}, seed int64) +} +func (Proxy *Source_math_rand) Int63() int64 { + return Proxy.Int63_(Proxy.Object) +} +func (Proxy *Source_math_rand) Seed(seed int64) { + Proxy.Seed_(Proxy.Object, seed) +} + +// --------------- proxy for math/rand.Source64 --------------- +type Source64_math_rand struct { + Object interface{} + Int63_ func(interface{}) int64 + Seed_ func(_proxy_obj_ interface{}, seed int64) + Uint64_ func(interface{}) uint64 +} +func (Proxy *Source64_math_rand) Int63() int64 { + return Proxy.Int63_(Proxy.Object) +} +func (Proxy *Source64_math_rand) Seed(seed int64) { + Proxy.Seed_(Proxy.Object, seed) +} +func (Proxy *Source64_math_rand) Uint64() uint64 { + return Proxy.Uint64_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/mime.go b/vendor/github.com/cosmos72/gomacro/imports/mime.go new file mode 100644 index 0000000..9fb683b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/mime.go @@ -0,0 +1,27 @@ +// this file was generated by gomacro command: import _b "mime" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "mime" +) + +// reflection: allow interpreted code to import "mime" +func init() { + Packages["mime"] = Package{ + Binds: map[string]Value{ + "AddExtensionType": ValueOf(mime.AddExtensionType), + "BEncoding": ValueOf(mime.BEncoding), + "ExtensionsByType": ValueOf(mime.ExtensionsByType), + "FormatMediaType": ValueOf(mime.FormatMediaType), + "ParseMediaType": ValueOf(mime.ParseMediaType), + "QEncoding": ValueOf(mime.QEncoding), + "TypeByExtension": ValueOf(mime.TypeByExtension), + },Types: map[string]Type{ + "WordDecoder": TypeOf((*mime.WordDecoder)(nil)).Elem(), + "WordEncoder": TypeOf((*mime.WordEncoder)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/mime_multipart.go b/vendor/github.com/cosmos72/gomacro/imports/mime_multipart.go new file mode 100644 index 0000000..73bc4da --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/mime_multipart.go @@ -0,0 +1,49 @@ +// this file was generated by gomacro command: import _b "mime/multipart" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "mime/multipart" +) + +// reflection: allow interpreted code to import "mime/multipart" +func init() { + Packages["mime/multipart"] = Package{ + Binds: map[string]Value{ + "NewReader": ValueOf(multipart.NewReader), + "NewWriter": ValueOf(multipart.NewWriter), + },Types: map[string]Type{ + "File": TypeOf((*multipart.File)(nil)).Elem(), + "FileHeader": TypeOf((*multipart.FileHeader)(nil)).Elem(), + "Form": TypeOf((*multipart.Form)(nil)).Elem(), + "Part": TypeOf((*multipart.Part)(nil)).Elem(), + "Reader": TypeOf((*multipart.Reader)(nil)).Elem(), + "Writer": TypeOf((*multipart.Writer)(nil)).Elem(), + },Proxies: map[string]Type{ + "File": TypeOf((*File_mime_multipart)(nil)).Elem(), + }, + } +} + +// --------------- proxy for mime/multipart.File --------------- +type File_mime_multipart struct { + Object interface{} + Close_ func(interface{}) error + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) + ReadAt_ func(_proxy_obj_ interface{}, p []byte, off int64) (n int, err error) + Seek_ func(_proxy_obj_ interface{}, offset int64, whence int) (int64, error) +} +func (Proxy *File_mime_multipart) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *File_mime_multipart) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} +func (Proxy *File_mime_multipart) ReadAt(p []byte, off int64) (n int, err error) { + return Proxy.ReadAt_(Proxy.Object, p, off) +} +func (Proxy *File_mime_multipart) Seek(offset int64, whence int) (int64, error) { + return Proxy.Seek_(Proxy.Object, offset, whence) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/mime_quotedprintable.go b/vendor/github.com/cosmos72/gomacro/imports/mime_quotedprintable.go new file mode 100644 index 0000000..3a46c3b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/mime_quotedprintable.go @@ -0,0 +1,22 @@ +// this file was generated by gomacro command: import _b "mime/quotedprintable" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "mime/quotedprintable" +) + +// reflection: allow interpreted code to import "mime/quotedprintable" +func init() { + Packages["mime/quotedprintable"] = Package{ + Binds: map[string]Value{ + "NewReader": ValueOf(quotedprintable.NewReader), + "NewWriter": ValueOf(quotedprintable.NewWriter), + },Types: map[string]Type{ + "Reader": TypeOf((*quotedprintable.Reader)(nil)).Elem(), + "Writer": TypeOf((*quotedprintable.Writer)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net.go b/vendor/github.com/cosmos72/gomacro/imports/net.go new file mode 100644 index 0000000..57273fa --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net.go @@ -0,0 +1,246 @@ +// this file was generated by gomacro command: import _b "net" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net" + "time" +) + +// reflection: allow interpreted code to import "net" +func init() { + Packages["net"] = Package{ + Binds: map[string]Value{ + "CIDRMask": ValueOf(net.CIDRMask), + "DefaultResolver": ValueOf(&net.DefaultResolver).Elem(), + "Dial": ValueOf(net.Dial), + "DialIP": ValueOf(net.DialIP), + "DialTCP": ValueOf(net.DialTCP), + "DialTimeout": ValueOf(net.DialTimeout), + "DialUDP": ValueOf(net.DialUDP), + "DialUnix": ValueOf(net.DialUnix), + "ErrWriteToConnected": ValueOf(&net.ErrWriteToConnected).Elem(), + "FileConn": ValueOf(net.FileConn), + "FileListener": ValueOf(net.FileListener), + "FilePacketConn": ValueOf(net.FilePacketConn), + "FlagBroadcast": ValueOf(net.FlagBroadcast), + "FlagLoopback": ValueOf(net.FlagLoopback), + "FlagMulticast": ValueOf(net.FlagMulticast), + "FlagPointToPoint": ValueOf(net.FlagPointToPoint), + "FlagUp": ValueOf(net.FlagUp), + "IPv4": ValueOf(net.IPv4), + "IPv4Mask": ValueOf(net.IPv4Mask), + "IPv4allrouter": ValueOf(&net.IPv4allrouter).Elem(), + "IPv4allsys": ValueOf(&net.IPv4allsys).Elem(), + "IPv4bcast": ValueOf(&net.IPv4bcast).Elem(), + "IPv4len": ValueOf(net.IPv4len), + "IPv4zero": ValueOf(&net.IPv4zero).Elem(), + "IPv6interfacelocalallnodes": ValueOf(&net.IPv6interfacelocalallnodes).Elem(), + "IPv6len": ValueOf(net.IPv6len), + "IPv6linklocalallnodes": ValueOf(&net.IPv6linklocalallnodes).Elem(), + "IPv6linklocalallrouters": ValueOf(&net.IPv6linklocalallrouters).Elem(), + "IPv6loopback": ValueOf(&net.IPv6loopback).Elem(), + "IPv6unspecified": ValueOf(&net.IPv6unspecified).Elem(), + "IPv6zero": ValueOf(&net.IPv6zero).Elem(), + "InterfaceAddrs": ValueOf(net.InterfaceAddrs), + "InterfaceByIndex": ValueOf(net.InterfaceByIndex), + "InterfaceByName": ValueOf(net.InterfaceByName), + "Interfaces": ValueOf(net.Interfaces), + "JoinHostPort": ValueOf(net.JoinHostPort), + "Listen": ValueOf(net.Listen), + "ListenIP": ValueOf(net.ListenIP), + "ListenMulticastUDP": ValueOf(net.ListenMulticastUDP), + "ListenPacket": ValueOf(net.ListenPacket), + "ListenTCP": ValueOf(net.ListenTCP), + "ListenUDP": ValueOf(net.ListenUDP), + "ListenUnix": ValueOf(net.ListenUnix), + "ListenUnixgram": ValueOf(net.ListenUnixgram), + "LookupAddr": ValueOf(net.LookupAddr), + "LookupCNAME": ValueOf(net.LookupCNAME), + "LookupHost": ValueOf(net.LookupHost), + "LookupIP": ValueOf(net.LookupIP), + "LookupMX": ValueOf(net.LookupMX), + "LookupNS": ValueOf(net.LookupNS), + "LookupPort": ValueOf(net.LookupPort), + "LookupSRV": ValueOf(net.LookupSRV), + "LookupTXT": ValueOf(net.LookupTXT), + "ParseCIDR": ValueOf(net.ParseCIDR), + "ParseIP": ValueOf(net.ParseIP), + "ParseMAC": ValueOf(net.ParseMAC), + "Pipe": ValueOf(net.Pipe), + "ResolveIPAddr": ValueOf(net.ResolveIPAddr), + "ResolveTCPAddr": ValueOf(net.ResolveTCPAddr), + "ResolveUDPAddr": ValueOf(net.ResolveUDPAddr), + "ResolveUnixAddr": ValueOf(net.ResolveUnixAddr), + "SplitHostPort": ValueOf(net.SplitHostPort), + },Types: map[string]Type{ + "Addr": TypeOf((*net.Addr)(nil)).Elem(), + "AddrError": TypeOf((*net.AddrError)(nil)).Elem(), + "Buffers": TypeOf((*net.Buffers)(nil)).Elem(), + "Conn": TypeOf((*net.Conn)(nil)).Elem(), + "DNSConfigError": TypeOf((*net.DNSConfigError)(nil)).Elem(), + "DNSError": TypeOf((*net.DNSError)(nil)).Elem(), + "Dialer": TypeOf((*net.Dialer)(nil)).Elem(), + "Error": TypeOf((*net.Error)(nil)).Elem(), + "Flags": TypeOf((*net.Flags)(nil)).Elem(), + "HardwareAddr": TypeOf((*net.HardwareAddr)(nil)).Elem(), + "IP": TypeOf((*net.IP)(nil)).Elem(), + "IPAddr": TypeOf((*net.IPAddr)(nil)).Elem(), + "IPConn": TypeOf((*net.IPConn)(nil)).Elem(), + "IPMask": TypeOf((*net.IPMask)(nil)).Elem(), + "IPNet": TypeOf((*net.IPNet)(nil)).Elem(), + "Interface": TypeOf((*net.Interface)(nil)).Elem(), + "InvalidAddrError": TypeOf((*net.InvalidAddrError)(nil)).Elem(), + "Listener": TypeOf((*net.Listener)(nil)).Elem(), + "MX": TypeOf((*net.MX)(nil)).Elem(), + "NS": TypeOf((*net.NS)(nil)).Elem(), + "OpError": TypeOf((*net.OpError)(nil)).Elem(), + "PacketConn": TypeOf((*net.PacketConn)(nil)).Elem(), + "ParseError": TypeOf((*net.ParseError)(nil)).Elem(), + "Resolver": TypeOf((*net.Resolver)(nil)).Elem(), + "SRV": TypeOf((*net.SRV)(nil)).Elem(), + "TCPAddr": TypeOf((*net.TCPAddr)(nil)).Elem(), + "TCPConn": TypeOf((*net.TCPConn)(nil)).Elem(), + "TCPListener": TypeOf((*net.TCPListener)(nil)).Elem(), + "UDPAddr": TypeOf((*net.UDPAddr)(nil)).Elem(), + "UDPConn": TypeOf((*net.UDPConn)(nil)).Elem(), + "UnixAddr": TypeOf((*net.UnixAddr)(nil)).Elem(), + "UnixConn": TypeOf((*net.UnixConn)(nil)).Elem(), + "UnixListener": TypeOf((*net.UnixListener)(nil)).Elem(), + "UnknownNetworkError": TypeOf((*net.UnknownNetworkError)(nil)).Elem(), + },Proxies: map[string]Type{ + "Addr": TypeOf((*Addr_net)(nil)).Elem(), + "Conn": TypeOf((*Conn_net)(nil)).Elem(), + "Error": TypeOf((*Error_net)(nil)).Elem(), + "Listener": TypeOf((*Listener_net)(nil)).Elem(), + "PacketConn": TypeOf((*PacketConn_net)(nil)).Elem(), + },Untypeds: map[string]string{ + "IPv4len": "int:4", + "IPv6len": "int:16", + },Wrappers: map[string][]string{ + "IPConn": []string{"Close","File","LocalAddr","Read","RemoteAddr","SetDeadline","SetReadBuffer","SetReadDeadline","SetWriteBuffer","SetWriteDeadline","Write",}, + "TCPConn": []string{"Close","File","LocalAddr","Read","RemoteAddr","SetDeadline","SetReadBuffer","SetReadDeadline","SetWriteBuffer","SetWriteDeadline","Write",}, + "UDPConn": []string{"Close","File","LocalAddr","Read","RemoteAddr","SetDeadline","SetReadBuffer","SetReadDeadline","SetWriteBuffer","SetWriteDeadline","Write",}, + "UnixConn": []string{"Close","File","LocalAddr","Read","RemoteAddr","SetDeadline","SetReadBuffer","SetReadDeadline","SetWriteBuffer","SetWriteDeadline","Write",}, + }, + } +} + +// --------------- proxy for net.Addr --------------- +type Addr_net struct { + Object interface{} + Network_ func(interface{}) string + String_ func(interface{}) string +} +func (Proxy *Addr_net) Network() string { + return Proxy.Network_(Proxy.Object) +} +func (Proxy *Addr_net) String() string { + return Proxy.String_(Proxy.Object) +} + +// --------------- proxy for net.Conn --------------- +type Conn_net struct { + Object interface{} + Close_ func(interface{}) error + LocalAddr_ func(interface{}) net.Addr + Read_ func(_proxy_obj_ interface{}, b []byte) (n int, err error) + RemoteAddr_ func(interface{}) net.Addr + SetDeadline_ func(_proxy_obj_ interface{}, t time.Time) error + SetReadDeadline_ func(_proxy_obj_ interface{}, t time.Time) error + SetWriteDeadline_ func(_proxy_obj_ interface{}, t time.Time) error + Write_ func(_proxy_obj_ interface{}, b []byte) (n int, err error) +} +func (Proxy *Conn_net) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *Conn_net) LocalAddr() net.Addr { + return Proxy.LocalAddr_(Proxy.Object) +} +func (Proxy *Conn_net) Read(b []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, b) +} +func (Proxy *Conn_net) RemoteAddr() net.Addr { + return Proxy.RemoteAddr_(Proxy.Object) +} +func (Proxy *Conn_net) SetDeadline(t time.Time) error { + return Proxy.SetDeadline_(Proxy.Object, t) +} +func (Proxy *Conn_net) SetReadDeadline(t time.Time) error { + return Proxy.SetReadDeadline_(Proxy.Object, t) +} +func (Proxy *Conn_net) SetWriteDeadline(t time.Time) error { + return Proxy.SetWriteDeadline_(Proxy.Object, t) +} +func (Proxy *Conn_net) Write(b []byte) (n int, err error) { + return Proxy.Write_(Proxy.Object, b) +} + +// --------------- proxy for net.Error --------------- +type Error_net struct { + Object interface{} + Error_ func(interface{}) string + Temporary_ func(interface{}) bool + Timeout_ func(interface{}) bool +} +func (Proxy *Error_net) Error() string { + return Proxy.Error_(Proxy.Object) +} +func (Proxy *Error_net) Temporary() bool { + return Proxy.Temporary_(Proxy.Object) +} +func (Proxy *Error_net) Timeout() bool { + return Proxy.Timeout_(Proxy.Object) +} + +// --------------- proxy for net.Listener --------------- +type Listener_net struct { + Object interface{} + Accept_ func(interface{}) (net.Conn, error) + Addr_ func(interface{}) net.Addr + Close_ func(interface{}) error +} +func (Proxy *Listener_net) Accept() (net.Conn, error) { + return Proxy.Accept_(Proxy.Object) +} +func (Proxy *Listener_net) Addr() net.Addr { + return Proxy.Addr_(Proxy.Object) +} +func (Proxy *Listener_net) Close() error { + return Proxy.Close_(Proxy.Object) +} + +// --------------- proxy for net.PacketConn --------------- +type PacketConn_net struct { + Object interface{} + Close_ func(interface{}) error + LocalAddr_ func(interface{}) net.Addr + ReadFrom_ func(_proxy_obj_ interface{}, b []byte) (n int, addr net.Addr, err error) + SetDeadline_ func(_proxy_obj_ interface{}, t time.Time) error + SetReadDeadline_ func(_proxy_obj_ interface{}, t time.Time) error + SetWriteDeadline_ func(_proxy_obj_ interface{}, t time.Time) error + WriteTo_ func(_proxy_obj_ interface{}, b []byte, addr net.Addr) (n int, err error) +} +func (Proxy *PacketConn_net) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *PacketConn_net) LocalAddr() net.Addr { + return Proxy.LocalAddr_(Proxy.Object) +} +func (Proxy *PacketConn_net) ReadFrom(b []byte) (n int, addr net.Addr, err error) { + return Proxy.ReadFrom_(Proxy.Object, b) +} +func (Proxy *PacketConn_net) SetDeadline(t time.Time) error { + return Proxy.SetDeadline_(Proxy.Object, t) +} +func (Proxy *PacketConn_net) SetReadDeadline(t time.Time) error { + return Proxy.SetReadDeadline_(Proxy.Object, t) +} +func (Proxy *PacketConn_net) SetWriteDeadline(t time.Time) error { + return Proxy.SetWriteDeadline_(Proxy.Object, t) +} +func (Proxy *PacketConn_net) WriteTo(b []byte, addr net.Addr) (n int, err error) { + return Proxy.WriteTo_(Proxy.Object, b, addr) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_http.go b/vendor/github.com/cosmos72/gomacro/imports/net_http.go new file mode 100644 index 0000000..450c1e4 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_http.go @@ -0,0 +1,384 @@ +// this file was generated by gomacro command: import _b "net/http" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "bufio" + "net" + "net/http" + "net/url" + "os" +) + +// reflection: allow interpreted code to import "net/http" +func init() { + Packages["net/http"] = Package{ + Binds: map[string]Value{ + "CanonicalHeaderKey": ValueOf(http.CanonicalHeaderKey), + "DefaultClient": ValueOf(&http.DefaultClient).Elem(), + "DefaultMaxHeaderBytes": ValueOf(http.DefaultMaxHeaderBytes), + "DefaultMaxIdleConnsPerHost": ValueOf(http.DefaultMaxIdleConnsPerHost), + "DefaultServeMux": ValueOf(&http.DefaultServeMux).Elem(), + "DefaultTransport": ValueOf(&http.DefaultTransport).Elem(), + "DetectContentType": ValueOf(http.DetectContentType), + "ErrAbortHandler": ValueOf(&http.ErrAbortHandler).Elem(), + "ErrBodyNotAllowed": ValueOf(&http.ErrBodyNotAllowed).Elem(), + "ErrBodyReadAfterClose": ValueOf(&http.ErrBodyReadAfterClose).Elem(), + "ErrContentLength": ValueOf(&http.ErrContentLength).Elem(), + "ErrHandlerTimeout": ValueOf(&http.ErrHandlerTimeout).Elem(), + "ErrHeaderTooLong": ValueOf(&http.ErrHeaderTooLong).Elem(), + "ErrHijacked": ValueOf(&http.ErrHijacked).Elem(), + "ErrLineTooLong": ValueOf(&http.ErrLineTooLong).Elem(), + "ErrMissingBoundary": ValueOf(&http.ErrMissingBoundary).Elem(), + "ErrMissingContentLength": ValueOf(&http.ErrMissingContentLength).Elem(), + "ErrMissingFile": ValueOf(&http.ErrMissingFile).Elem(), + "ErrNoCookie": ValueOf(&http.ErrNoCookie).Elem(), + "ErrNoLocation": ValueOf(&http.ErrNoLocation).Elem(), + "ErrNotMultipart": ValueOf(&http.ErrNotMultipart).Elem(), + "ErrNotSupported": ValueOf(&http.ErrNotSupported).Elem(), + "ErrServerClosed": ValueOf(&http.ErrServerClosed).Elem(), + "ErrShortBody": ValueOf(&http.ErrShortBody).Elem(), + "ErrSkipAltProtocol": ValueOf(&http.ErrSkipAltProtocol).Elem(), + "ErrUnexpectedTrailer": ValueOf(&http.ErrUnexpectedTrailer).Elem(), + "ErrUseLastResponse": ValueOf(&http.ErrUseLastResponse).Elem(), + "ErrWriteAfterFlush": ValueOf(&http.ErrWriteAfterFlush).Elem(), + "Error": ValueOf(http.Error), + "FileServer": ValueOf(http.FileServer), + "Get": ValueOf(http.Get), + "Handle": ValueOf(http.Handle), + "HandleFunc": ValueOf(http.HandleFunc), + "Head": ValueOf(http.Head), + "ListenAndServe": ValueOf(http.ListenAndServe), + "ListenAndServeTLS": ValueOf(http.ListenAndServeTLS), + "LocalAddrContextKey": ValueOf(&http.LocalAddrContextKey).Elem(), + "MaxBytesReader": ValueOf(http.MaxBytesReader), + "MethodConnect": ValueOf(http.MethodConnect), + "MethodDelete": ValueOf(http.MethodDelete), + "MethodGet": ValueOf(http.MethodGet), + "MethodHead": ValueOf(http.MethodHead), + "MethodOptions": ValueOf(http.MethodOptions), + "MethodPatch": ValueOf(http.MethodPatch), + "MethodPost": ValueOf(http.MethodPost), + "MethodPut": ValueOf(http.MethodPut), + "MethodTrace": ValueOf(http.MethodTrace), + "NewFileTransport": ValueOf(http.NewFileTransport), + "NewRequest": ValueOf(http.NewRequest), + "NewServeMux": ValueOf(http.NewServeMux), + "NoBody": ValueOf(&http.NoBody).Elem(), + "NotFound": ValueOf(http.NotFound), + "NotFoundHandler": ValueOf(http.NotFoundHandler), + "ParseHTTPVersion": ValueOf(http.ParseHTTPVersion), + "ParseTime": ValueOf(http.ParseTime), + "Post": ValueOf(http.Post), + "PostForm": ValueOf(http.PostForm), + "ProxyFromEnvironment": ValueOf(http.ProxyFromEnvironment), + "ProxyURL": ValueOf(http.ProxyURL), + "ReadRequest": ValueOf(http.ReadRequest), + "ReadResponse": ValueOf(http.ReadResponse), + "Redirect": ValueOf(http.Redirect), + "RedirectHandler": ValueOf(http.RedirectHandler), + "Serve": ValueOf(http.Serve), + "ServeContent": ValueOf(http.ServeContent), + "ServeFile": ValueOf(http.ServeFile), + "ServerContextKey": ValueOf(&http.ServerContextKey).Elem(), + "SetCookie": ValueOf(http.SetCookie), + "StateActive": ValueOf(http.StateActive), + "StateClosed": ValueOf(http.StateClosed), + "StateHijacked": ValueOf(http.StateHijacked), + "StateIdle": ValueOf(http.StateIdle), + "StateNew": ValueOf(http.StateNew), + "StatusAccepted": ValueOf(http.StatusAccepted), + "StatusAlreadyReported": ValueOf(http.StatusAlreadyReported), + "StatusBadGateway": ValueOf(http.StatusBadGateway), + "StatusBadRequest": ValueOf(http.StatusBadRequest), + "StatusConflict": ValueOf(http.StatusConflict), + "StatusContinue": ValueOf(http.StatusContinue), + "StatusCreated": ValueOf(http.StatusCreated), + "StatusExpectationFailed": ValueOf(http.StatusExpectationFailed), + "StatusFailedDependency": ValueOf(http.StatusFailedDependency), + "StatusForbidden": ValueOf(http.StatusForbidden), + "StatusFound": ValueOf(http.StatusFound), + "StatusGatewayTimeout": ValueOf(http.StatusGatewayTimeout), + "StatusGone": ValueOf(http.StatusGone), + "StatusHTTPVersionNotSupported": ValueOf(http.StatusHTTPVersionNotSupported), + "StatusIMUsed": ValueOf(http.StatusIMUsed), + "StatusInsufficientStorage": ValueOf(http.StatusInsufficientStorage), + "StatusInternalServerError": ValueOf(http.StatusInternalServerError), + "StatusLengthRequired": ValueOf(http.StatusLengthRequired), + "StatusLocked": ValueOf(http.StatusLocked), + "StatusLoopDetected": ValueOf(http.StatusLoopDetected), + "StatusMethodNotAllowed": ValueOf(http.StatusMethodNotAllowed), + "StatusMovedPermanently": ValueOf(http.StatusMovedPermanently), + "StatusMultiStatus": ValueOf(http.StatusMultiStatus), + "StatusMultipleChoices": ValueOf(http.StatusMultipleChoices), + "StatusNetworkAuthenticationRequired": ValueOf(http.StatusNetworkAuthenticationRequired), + "StatusNoContent": ValueOf(http.StatusNoContent), + "StatusNonAuthoritativeInfo": ValueOf(http.StatusNonAuthoritativeInfo), + "StatusNotAcceptable": ValueOf(http.StatusNotAcceptable), + "StatusNotExtended": ValueOf(http.StatusNotExtended), + "StatusNotFound": ValueOf(http.StatusNotFound), + "StatusNotImplemented": ValueOf(http.StatusNotImplemented), + "StatusNotModified": ValueOf(http.StatusNotModified), + "StatusOK": ValueOf(http.StatusOK), + "StatusPartialContent": ValueOf(http.StatusPartialContent), + "StatusPaymentRequired": ValueOf(http.StatusPaymentRequired), + "StatusPermanentRedirect": ValueOf(http.StatusPermanentRedirect), + "StatusPreconditionFailed": ValueOf(http.StatusPreconditionFailed), + "StatusPreconditionRequired": ValueOf(http.StatusPreconditionRequired), + "StatusProcessing": ValueOf(http.StatusProcessing), + "StatusProxyAuthRequired": ValueOf(http.StatusProxyAuthRequired), + "StatusRequestEntityTooLarge": ValueOf(http.StatusRequestEntityTooLarge), + "StatusRequestHeaderFieldsTooLarge": ValueOf(http.StatusRequestHeaderFieldsTooLarge), + "StatusRequestTimeout": ValueOf(http.StatusRequestTimeout), + "StatusRequestURITooLong": ValueOf(http.StatusRequestURITooLong), + "StatusRequestedRangeNotSatisfiable": ValueOf(http.StatusRequestedRangeNotSatisfiable), + "StatusResetContent": ValueOf(http.StatusResetContent), + "StatusSeeOther": ValueOf(http.StatusSeeOther), + "StatusServiceUnavailable": ValueOf(http.StatusServiceUnavailable), + "StatusSwitchingProtocols": ValueOf(http.StatusSwitchingProtocols), + "StatusTeapot": ValueOf(http.StatusTeapot), + "StatusTemporaryRedirect": ValueOf(http.StatusTemporaryRedirect), + "StatusText": ValueOf(http.StatusText), + "StatusTooManyRequests": ValueOf(http.StatusTooManyRequests), + "StatusUnauthorized": ValueOf(http.StatusUnauthorized), + "StatusUnavailableForLegalReasons": ValueOf(http.StatusUnavailableForLegalReasons), + "StatusUnprocessableEntity": ValueOf(http.StatusUnprocessableEntity), + "StatusUnsupportedMediaType": ValueOf(http.StatusUnsupportedMediaType), + "StatusUpgradeRequired": ValueOf(http.StatusUpgradeRequired), + "StatusUseProxy": ValueOf(http.StatusUseProxy), + "StatusVariantAlsoNegotiates": ValueOf(http.StatusVariantAlsoNegotiates), + "StripPrefix": ValueOf(http.StripPrefix), + "TimeFormat": ValueOf(http.TimeFormat), + "TimeoutHandler": ValueOf(http.TimeoutHandler), + "TrailerPrefix": ValueOf(http.TrailerPrefix), + },Types: map[string]Type{ + "Client": TypeOf((*http.Client)(nil)).Elem(), + "CloseNotifier": TypeOf((*http.CloseNotifier)(nil)).Elem(), + "ConnState": TypeOf((*http.ConnState)(nil)).Elem(), + "Cookie": TypeOf((*http.Cookie)(nil)).Elem(), + "CookieJar": TypeOf((*http.CookieJar)(nil)).Elem(), + "Dir": TypeOf((*http.Dir)(nil)).Elem(), + "File": TypeOf((*http.File)(nil)).Elem(), + "FileSystem": TypeOf((*http.FileSystem)(nil)).Elem(), + "Flusher": TypeOf((*http.Flusher)(nil)).Elem(), + "Handler": TypeOf((*http.Handler)(nil)).Elem(), + "HandlerFunc": TypeOf((*http.HandlerFunc)(nil)).Elem(), + "Header": TypeOf((*http.Header)(nil)).Elem(), + "Hijacker": TypeOf((*http.Hijacker)(nil)).Elem(), + "ProtocolError": TypeOf((*http.ProtocolError)(nil)).Elem(), + "PushOptions": TypeOf((*http.PushOptions)(nil)).Elem(), + "Pusher": TypeOf((*http.Pusher)(nil)).Elem(), + "Request": TypeOf((*http.Request)(nil)).Elem(), + "Response": TypeOf((*http.Response)(nil)).Elem(), + "ResponseWriter": TypeOf((*http.ResponseWriter)(nil)).Elem(), + "RoundTripper": TypeOf((*http.RoundTripper)(nil)).Elem(), + "ServeMux": TypeOf((*http.ServeMux)(nil)).Elem(), + "Server": TypeOf((*http.Server)(nil)).Elem(), + "Transport": TypeOf((*http.Transport)(nil)).Elem(), + },Proxies: map[string]Type{ + "CloseNotifier": TypeOf((*CloseNotifier_net_http)(nil)).Elem(), + "CookieJar": TypeOf((*CookieJar_net_http)(nil)).Elem(), + "File": TypeOf((*File_net_http)(nil)).Elem(), + "FileSystem": TypeOf((*FileSystem_net_http)(nil)).Elem(), + "Flusher": TypeOf((*Flusher_net_http)(nil)).Elem(), + "Handler": TypeOf((*Handler_net_http)(nil)).Elem(), + "Hijacker": TypeOf((*Hijacker_net_http)(nil)).Elem(), + "Pusher": TypeOf((*Pusher_net_http)(nil)).Elem(), + "ResponseWriter": TypeOf((*ResponseWriter_net_http)(nil)).Elem(), + "RoundTripper": TypeOf((*RoundTripper_net_http)(nil)).Elem(), + },Untypeds: map[string]string{ + "DefaultMaxHeaderBytes": "int:1048576", + "DefaultMaxIdleConnsPerHost": "int:2", + "MethodConnect": "string:CONNECT", + "MethodDelete": "string:DELETE", + "MethodGet": "string:GET", + "MethodHead": "string:HEAD", + "MethodOptions": "string:OPTIONS", + "MethodPatch": "string:PATCH", + "MethodPost": "string:POST", + "MethodPut": "string:PUT", + "MethodTrace": "string:TRACE", + "StatusAccepted": "int:202", + "StatusAlreadyReported": "int:208", + "StatusBadGateway": "int:502", + "StatusBadRequest": "int:400", + "StatusConflict": "int:409", + "StatusContinue": "int:100", + "StatusCreated": "int:201", + "StatusExpectationFailed": "int:417", + "StatusFailedDependency": "int:424", + "StatusForbidden": "int:403", + "StatusFound": "int:302", + "StatusGatewayTimeout": "int:504", + "StatusGone": "int:410", + "StatusHTTPVersionNotSupported": "int:505", + "StatusIMUsed": "int:226", + "StatusInsufficientStorage": "int:507", + "StatusInternalServerError": "int:500", + "StatusLengthRequired": "int:411", + "StatusLocked": "int:423", + "StatusLoopDetected": "int:508", + "StatusMethodNotAllowed": "int:405", + "StatusMovedPermanently": "int:301", + "StatusMultiStatus": "int:207", + "StatusMultipleChoices": "int:300", + "StatusNetworkAuthenticationRequired": "int:511", + "StatusNoContent": "int:204", + "StatusNonAuthoritativeInfo": "int:203", + "StatusNotAcceptable": "int:406", + "StatusNotExtended": "int:510", + "StatusNotFound": "int:404", + "StatusNotImplemented": "int:501", + "StatusNotModified": "int:304", + "StatusOK": "int:200", + "StatusPartialContent": "int:206", + "StatusPaymentRequired": "int:402", + "StatusPermanentRedirect": "int:308", + "StatusPreconditionFailed": "int:412", + "StatusPreconditionRequired": "int:428", + "StatusProcessing": "int:102", + "StatusProxyAuthRequired": "int:407", + "StatusRequestEntityTooLarge": "int:413", + "StatusRequestHeaderFieldsTooLarge": "int:431", + "StatusRequestTimeout": "int:408", + "StatusRequestURITooLong": "int:414", + "StatusRequestedRangeNotSatisfiable": "int:416", + "StatusResetContent": "int:205", + "StatusSeeOther": "int:303", + "StatusServiceUnavailable": "int:503", + "StatusSwitchingProtocols": "int:101", + "StatusTeapot": "int:418", + "StatusTemporaryRedirect": "int:307", + "StatusTooManyRequests": "int:429", + "StatusUnauthorized": "int:401", + "StatusUnavailableForLegalReasons": "int:451", + "StatusUnprocessableEntity": "int:422", + "StatusUnsupportedMediaType": "int:415", + "StatusUpgradeRequired": "int:426", + "StatusUseProxy": "int:305", + "StatusVariantAlsoNegotiates": "int:506", + "TimeFormat": "string:Mon, 02 Jan 2006 15:04:05 GMT", + "TrailerPrefix": "string:Trailer:", + }, + } +} + +// --------------- proxy for net/http.CloseNotifier --------------- +type CloseNotifier_net_http struct { + Object interface{} + CloseNotify_ func(interface{}) <-chan bool +} +func (Proxy *CloseNotifier_net_http) CloseNotify() <-chan bool { + return Proxy.CloseNotify_(Proxy.Object) +} + +// --------------- proxy for net/http.CookieJar --------------- +type CookieJar_net_http struct { + Object interface{} + Cookies_ func(_proxy_obj_ interface{}, u *url.URL) []*http.Cookie + SetCookies_ func(_proxy_obj_ interface{}, u *url.URL, cookies []*http.Cookie) +} +func (Proxy *CookieJar_net_http) Cookies(u *url.URL) []*http.Cookie { + return Proxy.Cookies_(Proxy.Object, u) +} +func (Proxy *CookieJar_net_http) SetCookies(u *url.URL, cookies []*http.Cookie) { + Proxy.SetCookies_(Proxy.Object, u, cookies) +} + +// --------------- proxy for net/http.File --------------- +type File_net_http struct { + Object interface{} + Close_ func(interface{}) error + Read_ func(_proxy_obj_ interface{}, p []byte) (n int, err error) + Readdir_ func(_proxy_obj_ interface{}, count int) ([]os.FileInfo, error) + Seek_ func(_proxy_obj_ interface{}, offset int64, whence int) (int64, error) + Stat_ func(interface{}) (os.FileInfo, error) +} +func (Proxy *File_net_http) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *File_net_http) Read(p []byte) (n int, err error) { + return Proxy.Read_(Proxy.Object, p) +} +func (Proxy *File_net_http) Readdir(count int) ([]os.FileInfo, error) { + return Proxy.Readdir_(Proxy.Object, count) +} +func (Proxy *File_net_http) Seek(offset int64, whence int) (int64, error) { + return Proxy.Seek_(Proxy.Object, offset, whence) +} +func (Proxy *File_net_http) Stat() (os.FileInfo, error) { + return Proxy.Stat_(Proxy.Object) +} + +// --------------- proxy for net/http.FileSystem --------------- +type FileSystem_net_http struct { + Object interface{} + Open_ func(_proxy_obj_ interface{}, name string) (http.File, error) +} +func (Proxy *FileSystem_net_http) Open(name string) (http.File, error) { + return Proxy.Open_(Proxy.Object, name) +} + +// --------------- proxy for net/http.Flusher --------------- +type Flusher_net_http struct { + Object interface{} + Flush_ func(interface{}) +} +func (Proxy *Flusher_net_http) Flush() { + Proxy.Flush_(Proxy.Object) +} + +// --------------- proxy for net/http.Handler --------------- +type Handler_net_http struct { + Object interface{} + ServeHTTP_ func(interface{}, http.ResponseWriter, *http.Request) +} +func (Proxy *Handler_net_http) ServeHTTP(unnamed0 http.ResponseWriter, unnamed1 *http.Request) { + Proxy.ServeHTTP_(Proxy.Object, unnamed0, unnamed1) +} + +// --------------- proxy for net/http.Hijacker --------------- +type Hijacker_net_http struct { + Object interface{} + Hijack_ func(interface{}) (net.Conn, *bufio.ReadWriter, error) +} +func (Proxy *Hijacker_net_http) Hijack() (net.Conn, *bufio.ReadWriter, error) { + return Proxy.Hijack_(Proxy.Object) +} + +// --------------- proxy for net/http.Pusher --------------- +type Pusher_net_http struct { + Object interface{} + Push_ func(_proxy_obj_ interface{}, target string, opts *http.PushOptions) error +} +func (Proxy *Pusher_net_http) Push(target string, opts *http.PushOptions) error { + return Proxy.Push_(Proxy.Object, target, opts) +} + +// --------------- proxy for net/http.ResponseWriter --------------- +type ResponseWriter_net_http struct { + Object interface{} + Header_ func(interface{}) http.Header + Write_ func(interface{}, []byte) (int, error) + WriteHeader_ func(interface{}, int) +} +func (Proxy *ResponseWriter_net_http) Header() http.Header { + return Proxy.Header_(Proxy.Object) +} +func (Proxy *ResponseWriter_net_http) Write(unnamed0 []byte) (int, error) { + return Proxy.Write_(Proxy.Object, unnamed0) +} +func (Proxy *ResponseWriter_net_http) WriteHeader(unnamed0 int) { + Proxy.WriteHeader_(Proxy.Object, unnamed0) +} + +// --------------- proxy for net/http.RoundTripper --------------- +type RoundTripper_net_http struct { + Object interface{} + RoundTrip_ func(interface{}, *http.Request) (*http.Response, error) +} +func (Proxy *RoundTripper_net_http) RoundTrip(unnamed0 *http.Request) (*http.Response, error) { + return Proxy.RoundTrip_(Proxy.Object, unnamed0) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_http_cgi.go b/vendor/github.com/cosmos72/gomacro/imports/net_http_cgi.go new file mode 100644 index 0000000..038eed2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_http_cgi.go @@ -0,0 +1,22 @@ +// this file was generated by gomacro command: import _b "net/http/cgi" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/http/cgi" +) + +// reflection: allow interpreted code to import "net/http/cgi" +func init() { + Packages["net/http/cgi"] = Package{ + Binds: map[string]Value{ + "Request": ValueOf(cgi.Request), + "RequestFromMap": ValueOf(cgi.RequestFromMap), + "Serve": ValueOf(cgi.Serve), + },Types: map[string]Type{ + "Handler": TypeOf((*cgi.Handler)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_http_cookiejar.go b/vendor/github.com/cosmos72/gomacro/imports/net_http_cookiejar.go new file mode 100644 index 0000000..c1d5329 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_http_cookiejar.go @@ -0,0 +1,37 @@ +// this file was generated by gomacro command: import _b "net/http/cookiejar" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/http/cookiejar" +) + +// reflection: allow interpreted code to import "net/http/cookiejar" +func init() { + Packages["net/http/cookiejar"] = Package{ + Binds: map[string]Value{ + "New": ValueOf(cookiejar.New), + },Types: map[string]Type{ + "Jar": TypeOf((*cookiejar.Jar)(nil)).Elem(), + "Options": TypeOf((*cookiejar.Options)(nil)).Elem(), + "PublicSuffixList": TypeOf((*cookiejar.PublicSuffixList)(nil)).Elem(), + },Proxies: map[string]Type{ + "PublicSuffixList": TypeOf((*PublicSuffixList_net_http_cookiejar)(nil)).Elem(), + }, + } +} + +// --------------- proxy for net/http/cookiejar.PublicSuffixList --------------- +type PublicSuffixList_net_http_cookiejar struct { + Object interface{} + PublicSuffix_ func(_proxy_obj_ interface{}, domain string) string + String_ func(interface{}) string +} +func (Proxy *PublicSuffixList_net_http_cookiejar) PublicSuffix(domain string) string { + return Proxy.PublicSuffix_(Proxy.Object, domain) +} +func (Proxy *PublicSuffixList_net_http_cookiejar) String() string { + return Proxy.String_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_http_fcgi.go b/vendor/github.com/cosmos72/gomacro/imports/net_http_fcgi.go new file mode 100644 index 0000000..0bf78e5 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_http_fcgi.go @@ -0,0 +1,20 @@ +// this file was generated by gomacro command: import _b "net/http/fcgi" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/http/fcgi" +) + +// reflection: allow interpreted code to import "net/http/fcgi" +func init() { + Packages["net/http/fcgi"] = Package{ + Binds: map[string]Value{ + "ErrConnClosed": ValueOf(&fcgi.ErrConnClosed).Elem(), + "ErrRequestAborted": ValueOf(&fcgi.ErrRequestAborted).Elem(), + "Serve": ValueOf(fcgi.Serve), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_http_httptest.go b/vendor/github.com/cosmos72/gomacro/imports/net_http_httptest.go new file mode 100644 index 0000000..61d2507 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_http_httptest.go @@ -0,0 +1,28 @@ +// this file was generated by gomacro command: import _b "net/http/httptest" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/http/httptest" +) + +// reflection: allow interpreted code to import "net/http/httptest" +func init() { + Packages["net/http/httptest"] = Package{ + Binds: map[string]Value{ + "DefaultRemoteAddr": ValueOf(httptest.DefaultRemoteAddr), + "NewRecorder": ValueOf(httptest.NewRecorder), + "NewRequest": ValueOf(httptest.NewRequest), + "NewServer": ValueOf(httptest.NewServer), + "NewTLSServer": ValueOf(httptest.NewTLSServer), + "NewUnstartedServer": ValueOf(httptest.NewUnstartedServer), + },Types: map[string]Type{ + "ResponseRecorder": TypeOf((*httptest.ResponseRecorder)(nil)).Elem(), + "Server": TypeOf((*httptest.Server)(nil)).Elem(), + },Untypeds: map[string]string{ + "DefaultRemoteAddr": "string:1.2.3.4", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_http_httptrace.go b/vendor/github.com/cosmos72/gomacro/imports/net_http_httptrace.go new file mode 100644 index 0000000..7f48d98 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_http_httptrace.go @@ -0,0 +1,25 @@ +// this file was generated by gomacro command: import _b "net/http/httptrace" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/http/httptrace" +) + +// reflection: allow interpreted code to import "net/http/httptrace" +func init() { + Packages["net/http/httptrace"] = Package{ + Binds: map[string]Value{ + "ContextClientTrace": ValueOf(httptrace.ContextClientTrace), + "WithClientTrace": ValueOf(httptrace.WithClientTrace), + },Types: map[string]Type{ + "ClientTrace": TypeOf((*httptrace.ClientTrace)(nil)).Elem(), + "DNSDoneInfo": TypeOf((*httptrace.DNSDoneInfo)(nil)).Elem(), + "DNSStartInfo": TypeOf((*httptrace.DNSStartInfo)(nil)).Elem(), + "GotConnInfo": TypeOf((*httptrace.GotConnInfo)(nil)).Elem(), + "WroteRequestInfo": TypeOf((*httptrace.WroteRequestInfo)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_http_httputil.go b/vendor/github.com/cosmos72/gomacro/imports/net_http_httputil.go new file mode 100644 index 0000000..12df7b6 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_http_httputil.go @@ -0,0 +1,50 @@ +// this file was generated by gomacro command: import _b "net/http/httputil" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/http/httputil" +) + +// reflection: allow interpreted code to import "net/http/httputil" +func init() { + Packages["net/http/httputil"] = Package{ + Binds: map[string]Value{ + "DumpRequest": ValueOf(httputil.DumpRequest), + "DumpRequestOut": ValueOf(httputil.DumpRequestOut), + "DumpResponse": ValueOf(httputil.DumpResponse), + "ErrClosed": ValueOf(&httputil.ErrClosed).Elem(), + "ErrLineTooLong": ValueOf(&httputil.ErrLineTooLong).Elem(), + "ErrPersistEOF": ValueOf(&httputil.ErrPersistEOF).Elem(), + "ErrPipeline": ValueOf(&httputil.ErrPipeline).Elem(), + "NewChunkedReader": ValueOf(httputil.NewChunkedReader), + "NewChunkedWriter": ValueOf(httputil.NewChunkedWriter), + "NewClientConn": ValueOf(httputil.NewClientConn), + "NewProxyClientConn": ValueOf(httputil.NewProxyClientConn), + "NewServerConn": ValueOf(httputil.NewServerConn), + "NewSingleHostReverseProxy": ValueOf(httputil.NewSingleHostReverseProxy), + },Types: map[string]Type{ + "BufferPool": TypeOf((*httputil.BufferPool)(nil)).Elem(), + "ClientConn": TypeOf((*httputil.ClientConn)(nil)).Elem(), + "ReverseProxy": TypeOf((*httputil.ReverseProxy)(nil)).Elem(), + "ServerConn": TypeOf((*httputil.ServerConn)(nil)).Elem(), + },Proxies: map[string]Type{ + "BufferPool": TypeOf((*BufferPool_net_http_httputil)(nil)).Elem(), + }, + } +} + +// --------------- proxy for net/http/httputil.BufferPool --------------- +type BufferPool_net_http_httputil struct { + Object interface{} + Get_ func(interface{}) []byte + Put_ func(interface{}, []byte) +} +func (Proxy *BufferPool_net_http_httputil) Get() []byte { + return Proxy.Get_(Proxy.Object) +} +func (Proxy *BufferPool_net_http_httputil) Put(unnamed0 []byte) { + Proxy.Put_(Proxy.Object, unnamed0) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_http_pprof.go b/vendor/github.com/cosmos72/gomacro/imports/net_http_pprof.go new file mode 100644 index 0000000..03cd526 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_http_pprof.go @@ -0,0 +1,23 @@ +// this file was generated by gomacro command: import _b "net/http/pprof" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/http/pprof" +) + +// reflection: allow interpreted code to import "net/http/pprof" +func init() { + Packages["net/http/pprof"] = Package{ + Binds: map[string]Value{ + "Cmdline": ValueOf(pprof.Cmdline), + "Handler": ValueOf(pprof.Handler), + "Index": ValueOf(pprof.Index), + "Profile": ValueOf(pprof.Profile), + "Symbol": ValueOf(pprof.Symbol), + "Trace": ValueOf(pprof.Trace), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_mail.go b/vendor/github.com/cosmos72/gomacro/imports/net_mail.go new file mode 100644 index 0000000..96ad085 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_mail.go @@ -0,0 +1,27 @@ +// this file was generated by gomacro command: import _b "net/mail" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/mail" +) + +// reflection: allow interpreted code to import "net/mail" +func init() { + Packages["net/mail"] = Package{ + Binds: map[string]Value{ + "ErrHeaderNotPresent": ValueOf(&mail.ErrHeaderNotPresent).Elem(), + "ParseAddress": ValueOf(mail.ParseAddress), + "ParseAddressList": ValueOf(mail.ParseAddressList), + "ParseDate": ValueOf(mail.ParseDate), + "ReadMessage": ValueOf(mail.ReadMessage), + },Types: map[string]Type{ + "Address": TypeOf((*mail.Address)(nil)).Elem(), + "AddressParser": TypeOf((*mail.AddressParser)(nil)).Elem(), + "Header": TypeOf((*mail.Header)(nil)).Elem(), + "Message": TypeOf((*mail.Message)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_rpc.go b/vendor/github.com/cosmos72/gomacro/imports/net_rpc.go new file mode 100644 index 0000000..f1a30b5 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_rpc.go @@ -0,0 +1,91 @@ +// this file was generated by gomacro command: import _b "net/rpc" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/rpc" +) + +// reflection: allow interpreted code to import "net/rpc" +func init() { + Packages["net/rpc"] = Package{ + Binds: map[string]Value{ + "Accept": ValueOf(rpc.Accept), + "DefaultDebugPath": ValueOf(rpc.DefaultDebugPath), + "DefaultRPCPath": ValueOf(rpc.DefaultRPCPath), + "DefaultServer": ValueOf(&rpc.DefaultServer).Elem(), + "Dial": ValueOf(rpc.Dial), + "DialHTTP": ValueOf(rpc.DialHTTP), + "DialHTTPPath": ValueOf(rpc.DialHTTPPath), + "ErrShutdown": ValueOf(&rpc.ErrShutdown).Elem(), + "HandleHTTP": ValueOf(rpc.HandleHTTP), + "NewClient": ValueOf(rpc.NewClient), + "NewClientWithCodec": ValueOf(rpc.NewClientWithCodec), + "NewServer": ValueOf(rpc.NewServer), + "Register": ValueOf(rpc.Register), + "RegisterName": ValueOf(rpc.RegisterName), + "ServeCodec": ValueOf(rpc.ServeCodec), + "ServeConn": ValueOf(rpc.ServeConn), + "ServeRequest": ValueOf(rpc.ServeRequest), + },Types: map[string]Type{ + "Call": TypeOf((*rpc.Call)(nil)).Elem(), + "Client": TypeOf((*rpc.Client)(nil)).Elem(), + "ClientCodec": TypeOf((*rpc.ClientCodec)(nil)).Elem(), + "Request": TypeOf((*rpc.Request)(nil)).Elem(), + "Response": TypeOf((*rpc.Response)(nil)).Elem(), + "Server": TypeOf((*rpc.Server)(nil)).Elem(), + "ServerCodec": TypeOf((*rpc.ServerCodec)(nil)).Elem(), + "ServerError": TypeOf((*rpc.ServerError)(nil)).Elem(), + },Proxies: map[string]Type{ + "ClientCodec": TypeOf((*ClientCodec_net_rpc)(nil)).Elem(), + "ServerCodec": TypeOf((*ServerCodec_net_rpc)(nil)).Elem(), + },Untypeds: map[string]string{ + "DefaultDebugPath": "string:/debug/rpc", + "DefaultRPCPath": "string:/_goRPC_", + }, + } +} + +// --------------- proxy for net/rpc.ClientCodec --------------- +type ClientCodec_net_rpc struct { + Object interface{} + Close_ func(interface{}) error + ReadResponseBody_ func(interface{}, interface{}) error + ReadResponseHeader_ func(interface{}, *rpc.Response) error + WriteRequest_ func(interface{}, *rpc.Request, interface{}) error +} +func (Proxy *ClientCodec_net_rpc) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *ClientCodec_net_rpc) ReadResponseBody(unnamed0 interface{}) error { + return Proxy.ReadResponseBody_(Proxy.Object, unnamed0) +} +func (Proxy *ClientCodec_net_rpc) ReadResponseHeader(unnamed0 *rpc.Response) error { + return Proxy.ReadResponseHeader_(Proxy.Object, unnamed0) +} +func (Proxy *ClientCodec_net_rpc) WriteRequest(unnamed0 *rpc.Request, unnamed1 interface{}) error { + return Proxy.WriteRequest_(Proxy.Object, unnamed0, unnamed1) +} + +// --------------- proxy for net/rpc.ServerCodec --------------- +type ServerCodec_net_rpc struct { + Object interface{} + Close_ func(interface{}) error + ReadRequestBody_ func(interface{}, interface{}) error + ReadRequestHeader_ func(interface{}, *rpc.Request) error + WriteResponse_ func(interface{}, *rpc.Response, interface{}) error +} +func (Proxy *ServerCodec_net_rpc) Close() error { + return Proxy.Close_(Proxy.Object) +} +func (Proxy *ServerCodec_net_rpc) ReadRequestBody(unnamed0 interface{}) error { + return Proxy.ReadRequestBody_(Proxy.Object, unnamed0) +} +func (Proxy *ServerCodec_net_rpc) ReadRequestHeader(unnamed0 *rpc.Request) error { + return Proxy.ReadRequestHeader_(Proxy.Object, unnamed0) +} +func (Proxy *ServerCodec_net_rpc) WriteResponse(unnamed0 *rpc.Response, unnamed1 interface{}) error { + return Proxy.WriteResponse_(Proxy.Object, unnamed0, unnamed1) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_rpc_jsonrpc.go b/vendor/github.com/cosmos72/gomacro/imports/net_rpc_jsonrpc.go new file mode 100644 index 0000000..b5a6905 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_rpc_jsonrpc.go @@ -0,0 +1,22 @@ +// this file was generated by gomacro command: import _b "net/rpc/jsonrpc" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/rpc/jsonrpc" +) + +// reflection: allow interpreted code to import "net/rpc/jsonrpc" +func init() { + Packages["net/rpc/jsonrpc"] = Package{ + Binds: map[string]Value{ + "Dial": ValueOf(jsonrpc.Dial), + "NewClient": ValueOf(jsonrpc.NewClient), + "NewClientCodec": ValueOf(jsonrpc.NewClientCodec), + "NewServerCodec": ValueOf(jsonrpc.NewServerCodec), + "ServeConn": ValueOf(jsonrpc.ServeConn), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_smtp.go b/vendor/github.com/cosmos72/gomacro/imports/net_smtp.go new file mode 100644 index 0000000..889895c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_smtp.go @@ -0,0 +1,41 @@ +// this file was generated by gomacro command: import _b "net/smtp" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/smtp" +) + +// reflection: allow interpreted code to import "net/smtp" +func init() { + Packages["net/smtp"] = Package{ + Binds: map[string]Value{ + "CRAMMD5Auth": ValueOf(smtp.CRAMMD5Auth), + "Dial": ValueOf(smtp.Dial), + "NewClient": ValueOf(smtp.NewClient), + "PlainAuth": ValueOf(smtp.PlainAuth), + "SendMail": ValueOf(smtp.SendMail), + },Types: map[string]Type{ + "Auth": TypeOf((*smtp.Auth)(nil)).Elem(), + "Client": TypeOf((*smtp.Client)(nil)).Elem(), + "ServerInfo": TypeOf((*smtp.ServerInfo)(nil)).Elem(), + },Proxies: map[string]Type{ + "Auth": TypeOf((*Auth_net_smtp)(nil)).Elem(), + }, + } +} + +// --------------- proxy for net/smtp.Auth --------------- +type Auth_net_smtp struct { + Object interface{} + Next_ func(_proxy_obj_ interface{}, fromServer []byte, more bool) (toServer []byte, err error) + Start_ func(_proxy_obj_ interface{}, server *smtp.ServerInfo) (proto string, toServer []byte, err error) +} +func (Proxy *Auth_net_smtp) Next(fromServer []byte, more bool) (toServer []byte, err error) { + return Proxy.Next_(Proxy.Object, fromServer, more) +} +func (Proxy *Auth_net_smtp) Start(server *smtp.ServerInfo) (proto string, toServer []byte, err error) { + return Proxy.Start_(Proxy.Object, server) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_textproto.go b/vendor/github.com/cosmos72/gomacro/imports/net_textproto.go new file mode 100644 index 0000000..ed20e96 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_textproto.go @@ -0,0 +1,34 @@ +// this file was generated by gomacro command: import _b "net/textproto" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/textproto" +) + +// reflection: allow interpreted code to import "net/textproto" +func init() { + Packages["net/textproto"] = Package{ + Binds: map[string]Value{ + "CanonicalMIMEHeaderKey": ValueOf(textproto.CanonicalMIMEHeaderKey), + "Dial": ValueOf(textproto.Dial), + "NewConn": ValueOf(textproto.NewConn), + "NewReader": ValueOf(textproto.NewReader), + "NewWriter": ValueOf(textproto.NewWriter), + "TrimBytes": ValueOf(textproto.TrimBytes), + "TrimString": ValueOf(textproto.TrimString), + },Types: map[string]Type{ + "Conn": TypeOf((*textproto.Conn)(nil)).Elem(), + "Error": TypeOf((*textproto.Error)(nil)).Elem(), + "MIMEHeader": TypeOf((*textproto.MIMEHeader)(nil)).Elem(), + "Pipeline": TypeOf((*textproto.Pipeline)(nil)).Elem(), + "ProtocolError": TypeOf((*textproto.ProtocolError)(nil)).Elem(), + "Reader": TypeOf((*textproto.Reader)(nil)).Elem(), + "Writer": TypeOf((*textproto.Writer)(nil)).Elem(), + },Wrappers: map[string][]string{ + "Conn": []string{"DotReader","DotWriter","EndRequest","EndResponse","Next","PrintfLine","ReadCodeLine","ReadContinuedLine","ReadContinuedLineBytes","ReadDotBytes","ReadDotLines","ReadLine","ReadLineBytes","ReadMIMEHeader","ReadResponse","StartRequest","StartResponse",}, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/net_url.go b/vendor/github.com/cosmos72/gomacro/imports/net_url.go new file mode 100644 index 0000000..e0c1610 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/net_url.go @@ -0,0 +1,33 @@ +// this file was generated by gomacro command: import _b "net/url" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "net/url" +) + +// reflection: allow interpreted code to import "net/url" +func init() { + Packages["net/url"] = Package{ + Binds: map[string]Value{ + "Parse": ValueOf(url.Parse), + "ParseQuery": ValueOf(url.ParseQuery), + "ParseRequestURI": ValueOf(url.ParseRequestURI), + "PathEscape": ValueOf(url.PathEscape), + "PathUnescape": ValueOf(url.PathUnescape), + "QueryEscape": ValueOf(url.QueryEscape), + "QueryUnescape": ValueOf(url.QueryUnescape), + "User": ValueOf(url.User), + "UserPassword": ValueOf(url.UserPassword), + },Types: map[string]Type{ + "Error": TypeOf((*url.Error)(nil)).Elem(), + "EscapeError": TypeOf((*url.EscapeError)(nil)).Elem(), + "InvalidHostError": TypeOf((*url.InvalidHostError)(nil)).Elem(), + "URL": TypeOf((*url.URL)(nil)).Elem(), + "Userinfo": TypeOf((*url.Userinfo)(nil)).Elem(), + "Values": TypeOf((*url.Values)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/os.go b/vendor/github.com/cosmos72/gomacro/imports/os.go new file mode 100644 index 0000000..5a59dae --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/os.go @@ -0,0 +1,167 @@ +// this file was generated by gomacro command: import _b "os" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "os" + "time" +) + +// reflection: allow interpreted code to import "os" +func init() { + Packages["os"] = Package{ + Binds: map[string]Value{ + "Args": ValueOf(&os.Args).Elem(), + "Chdir": ValueOf(os.Chdir), + "Chmod": ValueOf(os.Chmod), + "Chown": ValueOf(os.Chown), + "Chtimes": ValueOf(os.Chtimes), + "Clearenv": ValueOf(os.Clearenv), + "Create": ValueOf(os.Create), + "DevNull": ValueOf(os.DevNull), + "Environ": ValueOf(os.Environ), + "ErrClosed": ValueOf(&os.ErrClosed).Elem(), + "ErrExist": ValueOf(&os.ErrExist).Elem(), + "ErrInvalid": ValueOf(&os.ErrInvalid).Elem(), + "ErrNotExist": ValueOf(&os.ErrNotExist).Elem(), + "ErrPermission": ValueOf(&os.ErrPermission).Elem(), + "Executable": ValueOf(os.Executable), + "Exit": ValueOf(os.Exit), + "Expand": ValueOf(os.Expand), + "ExpandEnv": ValueOf(os.ExpandEnv), + "FindProcess": ValueOf(os.FindProcess), + "Getegid": ValueOf(os.Getegid), + "Getenv": ValueOf(os.Getenv), + "Geteuid": ValueOf(os.Geteuid), + "Getgid": ValueOf(os.Getgid), + "Getgroups": ValueOf(os.Getgroups), + "Getpagesize": ValueOf(os.Getpagesize), + "Getpid": ValueOf(os.Getpid), + "Getppid": ValueOf(os.Getppid), + "Getuid": ValueOf(os.Getuid), + "Getwd": ValueOf(os.Getwd), + "Hostname": ValueOf(os.Hostname), + "Interrupt": ValueOf(&os.Interrupt).Elem(), + "IsExist": ValueOf(os.IsExist), + "IsNotExist": ValueOf(os.IsNotExist), + "IsPathSeparator": ValueOf(os.IsPathSeparator), + "IsPermission": ValueOf(os.IsPermission), + "Kill": ValueOf(&os.Kill).Elem(), + "Lchown": ValueOf(os.Lchown), + "Link": ValueOf(os.Link), + "LookupEnv": ValueOf(os.LookupEnv), + "Lstat": ValueOf(os.Lstat), + "Mkdir": ValueOf(os.Mkdir), + "MkdirAll": ValueOf(os.MkdirAll), + "ModeAppend": ValueOf(os.ModeAppend), + "ModeCharDevice": ValueOf(os.ModeCharDevice), + "ModeDevice": ValueOf(os.ModeDevice), + "ModeDir": ValueOf(os.ModeDir), + "ModeExclusive": ValueOf(os.ModeExclusive), + "ModeNamedPipe": ValueOf(os.ModeNamedPipe), + "ModePerm": ValueOf(os.ModePerm), + "ModeSetgid": ValueOf(os.ModeSetgid), + "ModeSetuid": ValueOf(os.ModeSetuid), + "ModeSocket": ValueOf(os.ModeSocket), + "ModeSticky": ValueOf(os.ModeSticky), + "ModeSymlink": ValueOf(os.ModeSymlink), + "ModeTemporary": ValueOf(os.ModeTemporary), + "ModeType": ValueOf(os.ModeType), + "NewFile": ValueOf(os.NewFile), + "NewSyscallError": ValueOf(os.NewSyscallError), + "O_APPEND": ValueOf(os.O_APPEND), + "O_CREATE": ValueOf(os.O_CREATE), + "O_EXCL": ValueOf(os.O_EXCL), + "O_RDONLY": ValueOf(os.O_RDONLY), + "O_RDWR": ValueOf(os.O_RDWR), + "O_SYNC": ValueOf(os.O_SYNC), + "O_TRUNC": ValueOf(os.O_TRUNC), + "O_WRONLY": ValueOf(os.O_WRONLY), + "Open": ValueOf(os.Open), + "OpenFile": ValueOf(os.OpenFile), + "PathListSeparator": ValueOf(os.PathListSeparator), + "PathSeparator": ValueOf(os.PathSeparator), + "Pipe": ValueOf(os.Pipe), + "Readlink": ValueOf(os.Readlink), + "Remove": ValueOf(os.Remove), + "RemoveAll": ValueOf(os.RemoveAll), + "Rename": ValueOf(os.Rename), + "SEEK_CUR": ValueOf(os.SEEK_CUR), + "SEEK_END": ValueOf(os.SEEK_END), + "SEEK_SET": ValueOf(os.SEEK_SET), + "SameFile": ValueOf(os.SameFile), + "Setenv": ValueOf(os.Setenv), + "StartProcess": ValueOf(os.StartProcess), + "Stat": ValueOf(os.Stat), + "Stderr": ValueOf(&os.Stderr).Elem(), + "Stdin": ValueOf(&os.Stdin).Elem(), + "Stdout": ValueOf(&os.Stdout).Elem(), + "Symlink": ValueOf(os.Symlink), + "TempDir": ValueOf(os.TempDir), + "Truncate": ValueOf(os.Truncate), + "Unsetenv": ValueOf(os.Unsetenv), + },Types: map[string]Type{ + "File": TypeOf((*os.File)(nil)).Elem(), + "FileInfo": TypeOf((*os.FileInfo)(nil)).Elem(), + "FileMode": TypeOf((*os.FileMode)(nil)).Elem(), + "LinkError": TypeOf((*os.LinkError)(nil)).Elem(), + "PathError": TypeOf((*os.PathError)(nil)).Elem(), + "ProcAttr": TypeOf((*os.ProcAttr)(nil)).Elem(), + "Process": TypeOf((*os.Process)(nil)).Elem(), + "ProcessState": TypeOf((*os.ProcessState)(nil)).Elem(), + "Signal": TypeOf((*os.Signal)(nil)).Elem(), + "SyscallError": TypeOf((*os.SyscallError)(nil)).Elem(), + },Proxies: map[string]Type{ + "FileInfo": TypeOf((*FileInfo_os)(nil)).Elem(), + "Signal": TypeOf((*Signal_os)(nil)).Elem(), + },Untypeds: map[string]string{ + "DevNull": "string:/dev/null", + "PathListSeparator": "rune:58", + "PathSeparator": "rune:47", + }, + } +} + +// --------------- proxy for os.FileInfo --------------- +type FileInfo_os struct { + Object interface{} + IsDir_ func(interface{}) bool + ModTime_ func(interface{}) time.Time + Mode_ func(interface{}) os.FileMode + Name_ func(interface{}) string + Size_ func(interface{}) int64 + Sys_ func(interface{}) interface{} +} +func (Proxy *FileInfo_os) IsDir() bool { + return Proxy.IsDir_(Proxy.Object) +} +func (Proxy *FileInfo_os) ModTime() time.Time { + return Proxy.ModTime_(Proxy.Object) +} +func (Proxy *FileInfo_os) Mode() os.FileMode { + return Proxy.Mode_(Proxy.Object) +} +func (Proxy *FileInfo_os) Name() string { + return Proxy.Name_(Proxy.Object) +} +func (Proxy *FileInfo_os) Size() int64 { + return Proxy.Size_(Proxy.Object) +} +func (Proxy *FileInfo_os) Sys() interface{} { + return Proxy.Sys_(Proxy.Object) +} + +// --------------- proxy for os.Signal --------------- +type Signal_os struct { + Object interface{} + Signal_ func(interface{}) + String_ func(interface{}) string +} +func (Proxy *Signal_os) Signal() { + Proxy.Signal_(Proxy.Object) +} +func (Proxy *Signal_os) String() string { + return Proxy.String_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/os_exec.go b/vendor/github.com/cosmos72/gomacro/imports/os_exec.go new file mode 100644 index 0000000..7273b5f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/os_exec.go @@ -0,0 +1,27 @@ +// this file was generated by gomacro command: import _b "os/exec" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "os/exec" +) + +// reflection: allow interpreted code to import "os/exec" +func init() { + Packages["os/exec"] = Package{ + Binds: map[string]Value{ + "Command": ValueOf(exec.Command), + "CommandContext": ValueOf(exec.CommandContext), + "ErrNotFound": ValueOf(&exec.ErrNotFound).Elem(), + "LookPath": ValueOf(exec.LookPath), + },Types: map[string]Type{ + "Cmd": TypeOf((*exec.Cmd)(nil)).Elem(), + "Error": TypeOf((*exec.Error)(nil)).Elem(), + "ExitError": TypeOf((*exec.ExitError)(nil)).Elem(), + },Wrappers: map[string][]string{ + "ExitError": []string{"Exited","Pid","String","Success","Sys","SysUsage","SystemTime","UserTime",}, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/os_signal.go b/vendor/github.com/cosmos72/gomacro/imports/os_signal.go new file mode 100644 index 0000000..c034382 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/os_signal.go @@ -0,0 +1,21 @@ +// this file was generated by gomacro command: import _b "os/signal" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "os/signal" +) + +// reflection: allow interpreted code to import "os/signal" +func init() { + Packages["os/signal"] = Package{ + Binds: map[string]Value{ + "Ignore": ValueOf(signal.Ignore), + "Notify": ValueOf(signal.Notify), + "Reset": ValueOf(signal.Reset), + "Stop": ValueOf(signal.Stop), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/os_user.go b/vendor/github.com/cosmos72/gomacro/imports/os_user.go new file mode 100644 index 0000000..4767944 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/os_user.go @@ -0,0 +1,29 @@ +// this file was generated by gomacro command: import _b "os/user" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "os/user" +) + +// reflection: allow interpreted code to import "os/user" +func init() { + Packages["os/user"] = Package{ + Binds: map[string]Value{ + "Current": ValueOf(user.Current), + "Lookup": ValueOf(user.Lookup), + "LookupGroup": ValueOf(user.LookupGroup), + "LookupGroupId": ValueOf(user.LookupGroupId), + "LookupId": ValueOf(user.LookupId), + },Types: map[string]Type{ + "Group": TypeOf((*user.Group)(nil)).Elem(), + "UnknownGroupError": TypeOf((*user.UnknownGroupError)(nil)).Elem(), + "UnknownGroupIdError": TypeOf((*user.UnknownGroupIdError)(nil)).Elem(), + "UnknownUserError": TypeOf((*user.UnknownUserError)(nil)).Elem(), + "UnknownUserIdError": TypeOf((*user.UnknownUserIdError)(nil)).Elem(), + "User": TypeOf((*user.User)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/package.go b/vendor/github.com/cosmos72/gomacro/imports/package.go new file mode 100644 index 0000000..49027cf --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/package.go @@ -0,0 +1,98 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * import.go + * + * Created on: Feb 28, 2017 + * Author: Massimiliano Ghilardi + */ + +package imports + +import ( + . "reflect" +) + +type Package struct { + Binds map[string]Value + Types map[string]Type + Proxies map[string]Type + // Untypeds contains a string representation of untyped constants, + // stored without loss of precision + Untypeds map[string]string + // Wrappers is the list of wrapper methods for named types. + // Stored explicitly because reflect package cannot distinguish + // between explicit methods and wrapper methods for embedded fields + Wrappers map[string][]string +} + +var Packages = make(map[string]Package) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/imports" +func init() { + Packages["github.com/cosmos72/gomacro/imports"] = Package{ + Binds: map[string]Value{ + "Packages": ValueOf(&Packages).Elem(), + }, + Types: map[string]Type{ + "Package": TypeOf((*Package)(nil)).Elem(), + }, + Proxies: map[string]Type{}, + Untypeds: map[string]string{}, + Wrappers: map[string][]string{}, + } +} + +func (pkg *Package) Init() { + pkg.Binds = make(map[string]Value) + pkg.Types = make(map[string]Type) + pkg.Proxies = make(map[string]Type) + pkg.Untypeds = make(map[string]string) + pkg.Wrappers = make(map[string][]string) +} + +func (pkg Package) SaveToPackages(path string) { + // exploit the fact that maps are actually handles + dst, ok := Packages[path] + if !ok { + dst = Package{} + dst.Init() + Packages[path] = dst + } + dst.Merge(pkg) +} + +func (dst Package) Merge(src Package) { + // exploit the fact that maps are actually handles + for k, v := range src.Binds { + dst.Binds[k] = v + } + for k, v := range src.Types { + dst.Types[k] = v + } + for k, v := range src.Proxies { + dst.Proxies[k] = v + } + for k, v := range src.Untypeds { + dst.Untypeds[k] = v + } + for k, v := range src.Wrappers { + dst.Wrappers[k] = v + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/path.go b/vendor/github.com/cosmos72/gomacro/imports/path.go new file mode 100644 index 0000000..0587c76 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/path.go @@ -0,0 +1,26 @@ +// this file was generated by gomacro command: import _b "path" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "path" +) + +// reflection: allow interpreted code to import "path" +func init() { + Packages["path"] = Package{ + Binds: map[string]Value{ + "Base": ValueOf(path.Base), + "Clean": ValueOf(path.Clean), + "Dir": ValueOf(path.Dir), + "ErrBadPattern": ValueOf(&path.ErrBadPattern).Elem(), + "Ext": ValueOf(path.Ext), + "IsAbs": ValueOf(path.IsAbs), + "Join": ValueOf(path.Join), + "Match": ValueOf(path.Match), + "Split": ValueOf(path.Split), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/path_filepath.go b/vendor/github.com/cosmos72/gomacro/imports/path_filepath.go new file mode 100644 index 0000000..d2824a4 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/path_filepath.go @@ -0,0 +1,44 @@ +// this file was generated by gomacro command: import _b "path/filepath" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "path/filepath" +) + +// reflection: allow interpreted code to import "path/filepath" +func init() { + Packages["path/filepath"] = Package{ + Binds: map[string]Value{ + "Abs": ValueOf(filepath.Abs), + "Base": ValueOf(filepath.Base), + "Clean": ValueOf(filepath.Clean), + "Dir": ValueOf(filepath.Dir), + "ErrBadPattern": ValueOf(&filepath.ErrBadPattern).Elem(), + "EvalSymlinks": ValueOf(filepath.EvalSymlinks), + "Ext": ValueOf(filepath.Ext), + "FromSlash": ValueOf(filepath.FromSlash), + "Glob": ValueOf(filepath.Glob), + "HasPrefix": ValueOf(filepath.HasPrefix), + "IsAbs": ValueOf(filepath.IsAbs), + "Join": ValueOf(filepath.Join), + "ListSeparator": ValueOf(filepath.ListSeparator), + "Match": ValueOf(filepath.Match), + "Rel": ValueOf(filepath.Rel), + "Separator": ValueOf(filepath.Separator), + "SkipDir": ValueOf(&filepath.SkipDir).Elem(), + "Split": ValueOf(filepath.Split), + "SplitList": ValueOf(filepath.SplitList), + "ToSlash": ValueOf(filepath.ToSlash), + "VolumeName": ValueOf(filepath.VolumeName), + "Walk": ValueOf(filepath.Walk), + },Types: map[string]Type{ + "WalkFunc": TypeOf((*filepath.WalkFunc)(nil)).Elem(), + },Untypeds: map[string]string{ + "ListSeparator": "rune:58", + "Separator": "rune:47", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/plugin.go b/vendor/github.com/cosmos72/gomacro/imports/plugin.go new file mode 100644 index 0000000..d1389f7 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/plugin.go @@ -0,0 +1,30 @@ +// +build go1.8,!gccgo + +// this file was generated by gomacro command: import _b "plugin" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "plugin" +) + +// reflection: allow interpreted code to import "plugin" +func init() { + Packages["plugin"] = Package{ + Binds: map[string]Value{ + "Open": ValueOf(plugin.Open), + },Types: map[string]Type{ + "Plugin": TypeOf((*plugin.Plugin)(nil)).Elem(), + "Symbol": TypeOf((*plugin.Symbol)(nil)).Elem(), + },Proxies: map[string]Type{ + "Symbol": TypeOf((*Symbol_plugin)(nil)).Elem(), + }, + } +} + +// --------------- proxy for plugin.Symbol --------------- +type Symbol_plugin struct { + Object interface{} +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/reflect.go b/vendor/github.com/cosmos72/gomacro/imports/reflect.go new file mode 100644 index 0000000..edbe006 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/reflect.go @@ -0,0 +1,86 @@ +// this file was generated by gomacro command: import _b "reflect" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "reflect" +) + +// reflection: allow interpreted code to import "reflect" +func init() { + Packages["reflect"] = Package{ + Binds: map[string]Value{ + "Append": ValueOf(reflect.Append), + "AppendSlice": ValueOf(reflect.AppendSlice), + "Array": ValueOf(reflect.Array), + "ArrayOf": ValueOf(reflect.ArrayOf), + "Bool": ValueOf(reflect.Bool), + "BothDir": ValueOf(reflect.BothDir), + "Chan": ValueOf(reflect.Chan), + "ChanOf": ValueOf(reflect.ChanOf), + "Complex128": ValueOf(reflect.Complex128), + "Complex64": ValueOf(reflect.Complex64), + "Copy": ValueOf(reflect.Copy), + "DeepEqual": ValueOf(reflect.DeepEqual), + "Float32": ValueOf(reflect.Float32), + "Float64": ValueOf(reflect.Float64), + "Func": ValueOf(reflect.Func), + "FuncOf": ValueOf(reflect.FuncOf), + "Indirect": ValueOf(reflect.Indirect), + "Int": ValueOf(reflect.Int), + "Int16": ValueOf(reflect.Int16), + "Int32": ValueOf(reflect.Int32), + "Int64": ValueOf(reflect.Int64), + "Int8": ValueOf(reflect.Int8), + "Interface": ValueOf(reflect.Interface), + "Invalid": ValueOf(reflect.Invalid), + "MakeChan": ValueOf(reflect.MakeChan), + "MakeFunc": ValueOf(reflect.MakeFunc), + "MakeMap": ValueOf(reflect.MakeMap), + "MakeSlice": ValueOf(reflect.MakeSlice), + "Map": ValueOf(reflect.Map), + "MapOf": ValueOf(reflect.MapOf), + "New": ValueOf(reflect.New), + "NewAt": ValueOf(reflect.NewAt), + "Ptr": ValueOf(reflect.Ptr), + "PtrTo": ValueOf(reflect.PtrTo), + "RecvDir": ValueOf(reflect.RecvDir), + "Select": ValueOf(reflect.Select), + "SelectDefault": ValueOf(reflect.SelectDefault), + "SelectRecv": ValueOf(reflect.SelectRecv), + "SelectSend": ValueOf(reflect.SelectSend), + "SendDir": ValueOf(reflect.SendDir), + "Slice": ValueOf(reflect.Slice), + "SliceOf": ValueOf(reflect.SliceOf), + "String": ValueOf(reflect.String), + "Struct": ValueOf(reflect.Struct), + "StructOf": ValueOf(reflect.StructOf), + "Swapper": ValueOf(reflect.Swapper), + "TypeOf": ValueOf(reflect.TypeOf), + "Uint": ValueOf(reflect.Uint), + "Uint16": ValueOf(reflect.Uint16), + "Uint32": ValueOf(reflect.Uint32), + "Uint64": ValueOf(reflect.Uint64), + "Uint8": ValueOf(reflect.Uint8), + "Uintptr": ValueOf(reflect.Uintptr), + "UnsafePointer": ValueOf(reflect.UnsafePointer), + "ValueOf": ValueOf(reflect.ValueOf), + "Zero": ValueOf(reflect.Zero), + },Types: map[string]Type{ + "ChanDir": TypeOf((*reflect.ChanDir)(nil)).Elem(), + "Kind": TypeOf((*reflect.Kind)(nil)).Elem(), + "Method": TypeOf((*reflect.Method)(nil)).Elem(), + "SelectCase": TypeOf((*reflect.SelectCase)(nil)).Elem(), + "SelectDir": TypeOf((*reflect.SelectDir)(nil)).Elem(), + "SliceHeader": TypeOf((*reflect.SliceHeader)(nil)).Elem(), + "StringHeader": TypeOf((*reflect.StringHeader)(nil)).Elem(), + "StructField": TypeOf((*reflect.StructField)(nil)).Elem(), + "StructTag": TypeOf((*reflect.StructTag)(nil)).Elem(), + "Type": TypeOf((*reflect.Type)(nil)).Elem(), + "Value": TypeOf((*reflect.Value)(nil)).Elem(), + "ValueError": TypeOf((*reflect.ValueError)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/regexp.go b/vendor/github.com/cosmos72/gomacro/imports/regexp.go new file mode 100644 index 0000000..a0e929a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/regexp.go @@ -0,0 +1,27 @@ +// this file was generated by gomacro command: import _b "regexp" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "regexp" +) + +// reflection: allow interpreted code to import "regexp" +func init() { + Packages["regexp"] = Package{ + Binds: map[string]Value{ + "Compile": ValueOf(regexp.Compile), + "CompilePOSIX": ValueOf(regexp.CompilePOSIX), + "Match": ValueOf(regexp.Match), + "MatchReader": ValueOf(regexp.MatchReader), + "MatchString": ValueOf(regexp.MatchString), + "MustCompile": ValueOf(regexp.MustCompile), + "MustCompilePOSIX": ValueOf(regexp.MustCompilePOSIX), + "QuoteMeta": ValueOf(regexp.QuoteMeta), + },Types: map[string]Type{ + "Regexp": TypeOf((*regexp.Regexp)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/regexp_syntax.go b/vendor/github.com/cosmos72/gomacro/imports/regexp_syntax.go new file mode 100644 index 0000000..7a6eb22 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/regexp_syntax.go @@ -0,0 +1,94 @@ +// this file was generated by gomacro command: import _b "regexp/syntax" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "regexp/syntax" +) + +// reflection: allow interpreted code to import "regexp/syntax" +func init() { + Packages["regexp/syntax"] = Package{ + Binds: map[string]Value{ + "ClassNL": ValueOf(syntax.ClassNL), + "Compile": ValueOf(syntax.Compile), + "DotNL": ValueOf(syntax.DotNL), + "EmptyBeginLine": ValueOf(syntax.EmptyBeginLine), + "EmptyBeginText": ValueOf(syntax.EmptyBeginText), + "EmptyEndLine": ValueOf(syntax.EmptyEndLine), + "EmptyEndText": ValueOf(syntax.EmptyEndText), + "EmptyNoWordBoundary": ValueOf(syntax.EmptyNoWordBoundary), + "EmptyOpContext": ValueOf(syntax.EmptyOpContext), + "EmptyWordBoundary": ValueOf(syntax.EmptyWordBoundary), + "ErrInternalError": ValueOf(syntax.ErrInternalError), + "ErrInvalidCharClass": ValueOf(syntax.ErrInvalidCharClass), + "ErrInvalidCharRange": ValueOf(syntax.ErrInvalidCharRange), + "ErrInvalidEscape": ValueOf(syntax.ErrInvalidEscape), + "ErrInvalidNamedCapture": ValueOf(syntax.ErrInvalidNamedCapture), + "ErrInvalidPerlOp": ValueOf(syntax.ErrInvalidPerlOp), + "ErrInvalidRepeatOp": ValueOf(syntax.ErrInvalidRepeatOp), + "ErrInvalidRepeatSize": ValueOf(syntax.ErrInvalidRepeatSize), + "ErrInvalidUTF8": ValueOf(syntax.ErrInvalidUTF8), + "ErrMissingBracket": ValueOf(syntax.ErrMissingBracket), + "ErrMissingParen": ValueOf(syntax.ErrMissingParen), + "ErrMissingRepeatArgument": ValueOf(syntax.ErrMissingRepeatArgument), + "ErrTrailingBackslash": ValueOf(syntax.ErrTrailingBackslash), + "ErrUnexpectedParen": ValueOf(syntax.ErrUnexpectedParen), + "FoldCase": ValueOf(syntax.FoldCase), + "InstAlt": ValueOf(syntax.InstAlt), + "InstAltMatch": ValueOf(syntax.InstAltMatch), + "InstCapture": ValueOf(syntax.InstCapture), + "InstEmptyWidth": ValueOf(syntax.InstEmptyWidth), + "InstFail": ValueOf(syntax.InstFail), + "InstMatch": ValueOf(syntax.InstMatch), + "InstNop": ValueOf(syntax.InstNop), + "InstRune": ValueOf(syntax.InstRune), + "InstRune1": ValueOf(syntax.InstRune1), + "InstRuneAny": ValueOf(syntax.InstRuneAny), + "InstRuneAnyNotNL": ValueOf(syntax.InstRuneAnyNotNL), + "IsWordChar": ValueOf(syntax.IsWordChar), + "Literal": ValueOf(syntax.Literal), + "MatchNL": ValueOf(syntax.MatchNL), + "NonGreedy": ValueOf(syntax.NonGreedy), + "OneLine": ValueOf(syntax.OneLine), + "OpAlternate": ValueOf(syntax.OpAlternate), + "OpAnyChar": ValueOf(syntax.OpAnyChar), + "OpAnyCharNotNL": ValueOf(syntax.OpAnyCharNotNL), + "OpBeginLine": ValueOf(syntax.OpBeginLine), + "OpBeginText": ValueOf(syntax.OpBeginText), + "OpCapture": ValueOf(syntax.OpCapture), + "OpCharClass": ValueOf(syntax.OpCharClass), + "OpConcat": ValueOf(syntax.OpConcat), + "OpEmptyMatch": ValueOf(syntax.OpEmptyMatch), + "OpEndLine": ValueOf(syntax.OpEndLine), + "OpEndText": ValueOf(syntax.OpEndText), + "OpLiteral": ValueOf(syntax.OpLiteral), + "OpNoMatch": ValueOf(syntax.OpNoMatch), + "OpNoWordBoundary": ValueOf(syntax.OpNoWordBoundary), + "OpPlus": ValueOf(syntax.OpPlus), + "OpQuest": ValueOf(syntax.OpQuest), + "OpRepeat": ValueOf(syntax.OpRepeat), + "OpStar": ValueOf(syntax.OpStar), + "OpWordBoundary": ValueOf(syntax.OpWordBoundary), + "POSIX": ValueOf(syntax.POSIX), + "Parse": ValueOf(syntax.Parse), + "Perl": ValueOf(syntax.Perl), + "PerlX": ValueOf(syntax.PerlX), + "Simple": ValueOf(syntax.Simple), + "UnicodeGroups": ValueOf(syntax.UnicodeGroups), + "WasDollar": ValueOf(syntax.WasDollar), + },Types: map[string]Type{ + "EmptyOp": TypeOf((*syntax.EmptyOp)(nil)).Elem(), + "Error": TypeOf((*syntax.Error)(nil)).Elem(), + "ErrorCode": TypeOf((*syntax.ErrorCode)(nil)).Elem(), + "Flags": TypeOf((*syntax.Flags)(nil)).Elem(), + "Inst": TypeOf((*syntax.Inst)(nil)).Elem(), + "InstOp": TypeOf((*syntax.InstOp)(nil)).Elem(), + "Op": TypeOf((*syntax.Op)(nil)).Elem(), + "Prog": TypeOf((*syntax.Prog)(nil)).Elem(), + "Regexp": TypeOf((*syntax.Regexp)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/runtime.go b/vendor/github.com/cosmos72/gomacro/imports/runtime.go new file mode 100644 index 0000000..44d880f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/runtime.go @@ -0,0 +1,85 @@ +// +build !gccgo + +// this file was generated by gomacro command: import _b "runtime" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "runtime" +) + +// reflection: allow interpreted code to import "runtime" +func init() { + Packages["runtime"] = Package{ + Binds: map[string]Value{ + "BlockProfile": ValueOf(runtime.BlockProfile), + "Breakpoint": ValueOf(runtime.Breakpoint), + "CPUProfile": ValueOf(runtime.CPUProfile), + "Caller": ValueOf(runtime.Caller), + "Callers": ValueOf(runtime.Callers), + "CallersFrames": ValueOf(runtime.CallersFrames), + "Compiler": ValueOf(runtime.Compiler), + "FuncForPC": ValueOf(runtime.FuncForPC), + "GC": ValueOf(runtime.GC), + "GOARCH": ValueOf(runtime.GOARCH), + "GOMAXPROCS": ValueOf(runtime.GOMAXPROCS), + "GOOS": ValueOf(runtime.GOOS), + "GOROOT": ValueOf(runtime.GOROOT), + "Goexit": ValueOf(runtime.Goexit), + "GoroutineProfile": ValueOf(runtime.GoroutineProfile), + "Gosched": ValueOf(runtime.Gosched), + "KeepAlive": ValueOf(runtime.KeepAlive), + "LockOSThread": ValueOf(runtime.LockOSThread), + "MemProfile": ValueOf(runtime.MemProfile), + "MemProfileRate": ValueOf(&runtime.MemProfileRate).Elem(), + "MutexProfile": ValueOf(runtime.MutexProfile), + "NumCPU": ValueOf(runtime.NumCPU), + "NumCgoCall": ValueOf(runtime.NumCgoCall), + "NumGoroutine": ValueOf(runtime.NumGoroutine), + "ReadMemStats": ValueOf(runtime.ReadMemStats), + "ReadTrace": ValueOf(runtime.ReadTrace), + "SetBlockProfileRate": ValueOf(runtime.SetBlockProfileRate), + "SetCPUProfileRate": ValueOf(runtime.SetCPUProfileRate), + "SetCgoTraceback": ValueOf(runtime.SetCgoTraceback), + "SetFinalizer": ValueOf(runtime.SetFinalizer), + "SetMutexProfileFraction": ValueOf(runtime.SetMutexProfileFraction), + "Stack": ValueOf(runtime.Stack), + "StartTrace": ValueOf(runtime.StartTrace), + "StopTrace": ValueOf(runtime.StopTrace), + "ThreadCreateProfile": ValueOf(runtime.ThreadCreateProfile), + "UnlockOSThread": ValueOf(runtime.UnlockOSThread), + "Version": ValueOf(runtime.Version), + },Types: map[string]Type{ + "BlockProfileRecord": TypeOf((*runtime.BlockProfileRecord)(nil)).Elem(), + "Error": TypeOf((*runtime.Error)(nil)).Elem(), + "Frame": TypeOf((*runtime.Frame)(nil)).Elem(), + "Frames": TypeOf((*runtime.Frames)(nil)).Elem(), + "Func": TypeOf((*runtime.Func)(nil)).Elem(), + "MemProfileRecord": TypeOf((*runtime.MemProfileRecord)(nil)).Elem(), + "MemStats": TypeOf((*runtime.MemStats)(nil)).Elem(), + "StackRecord": TypeOf((*runtime.StackRecord)(nil)).Elem(), + "TypeAssertionError": TypeOf((*runtime.TypeAssertionError)(nil)).Elem(), + },Proxies: map[string]Type{ + "Error": TypeOf((*Error_runtime)(nil)).Elem(), + },Untypeds: map[string]string{ + "Compiler": "string:gc", + },Wrappers: map[string][]string{ + "BlockProfileRecord": []string{"Stack",}, + }, + } +} + +// --------------- proxy for runtime.Error --------------- +type Error_runtime struct { + Object interface{} + Error_ func(interface{}) string + RuntimeError_ func(interface{}) +} +func (Proxy *Error_runtime) Error() string { + return Proxy.Error_(Proxy.Object) +} +func (Proxy *Error_runtime) RuntimeError() { + Proxy.RuntimeError_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/runtime_debug.go b/vendor/github.com/cosmos72/gomacro/imports/runtime_debug.go new file mode 100644 index 0000000..16af4cf --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/runtime_debug.go @@ -0,0 +1,29 @@ +// this file was generated by gomacro command: import _b "runtime/debug" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "runtime/debug" +) + +// reflection: allow interpreted code to import "runtime/debug" +func init() { + Packages["runtime/debug"] = Package{ + Binds: map[string]Value{ + "FreeOSMemory": ValueOf(debug.FreeOSMemory), + "PrintStack": ValueOf(debug.PrintStack), + "ReadGCStats": ValueOf(debug.ReadGCStats), + "SetGCPercent": ValueOf(debug.SetGCPercent), + "SetMaxStack": ValueOf(debug.SetMaxStack), + "SetMaxThreads": ValueOf(debug.SetMaxThreads), + "SetPanicOnFault": ValueOf(debug.SetPanicOnFault), + "SetTraceback": ValueOf(debug.SetTraceback), + "Stack": ValueOf(debug.Stack), + "WriteHeapDump": ValueOf(debug.WriteHeapDump), + },Types: map[string]Type{ + "GCStats": TypeOf((*debug.GCStats)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/runtime_pprof.go b/vendor/github.com/cosmos72/gomacro/imports/runtime_pprof.go new file mode 100644 index 0000000..42de895 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/runtime_pprof.go @@ -0,0 +1,25 @@ +// this file was generated by gomacro command: import _b "runtime/pprof" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "runtime/pprof" +) + +// reflection: allow interpreted code to import "runtime/pprof" +func init() { + Packages["runtime/pprof"] = Package{ + Binds: map[string]Value{ + "Lookup": ValueOf(pprof.Lookup), + "NewProfile": ValueOf(pprof.NewProfile), + "Profiles": ValueOf(pprof.Profiles), + "StartCPUProfile": ValueOf(pprof.StartCPUProfile), + "StopCPUProfile": ValueOf(pprof.StopCPUProfile), + "WriteHeapProfile": ValueOf(pprof.WriteHeapProfile), + },Types: map[string]Type{ + "Profile": TypeOf((*pprof.Profile)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/runtime_trace.go b/vendor/github.com/cosmos72/gomacro/imports/runtime_trace.go new file mode 100644 index 0000000..5af064d --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/runtime_trace.go @@ -0,0 +1,19 @@ +// this file was generated by gomacro command: import _b "runtime/trace" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "runtime/trace" +) + +// reflection: allow interpreted code to import "runtime/trace" +func init() { + Packages["runtime/trace"] = Package{ + Binds: map[string]Value{ + "Start": ValueOf(trace.Start), + "Stop": ValueOf(trace.Stop), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/sort.go b/vendor/github.com/cosmos72/gomacro/imports/sort.go new file mode 100644 index 0000000..719fb02 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/sort.go @@ -0,0 +1,58 @@ +// this file was generated by gomacro command: import _b "sort" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "sort" +) + +// reflection: allow interpreted code to import "sort" +func init() { + Packages["sort"] = Package{ + Binds: map[string]Value{ + "Float64s": ValueOf(sort.Float64s), + "Float64sAreSorted": ValueOf(sort.Float64sAreSorted), + "Ints": ValueOf(sort.Ints), + "IntsAreSorted": ValueOf(sort.IntsAreSorted), + "IsSorted": ValueOf(sort.IsSorted), + "Reverse": ValueOf(sort.Reverse), + "Search": ValueOf(sort.Search), + "SearchFloat64s": ValueOf(sort.SearchFloat64s), + "SearchInts": ValueOf(sort.SearchInts), + "SearchStrings": ValueOf(sort.SearchStrings), + "Slice": ValueOf(sort.Slice), + "SliceIsSorted": ValueOf(sort.SliceIsSorted), + "SliceStable": ValueOf(sort.SliceStable), + "Sort": ValueOf(sort.Sort), + "Stable": ValueOf(sort.Stable), + "Strings": ValueOf(sort.Strings), + "StringsAreSorted": ValueOf(sort.StringsAreSorted), + },Types: map[string]Type{ + "Float64Slice": TypeOf((*sort.Float64Slice)(nil)).Elem(), + "IntSlice": TypeOf((*sort.IntSlice)(nil)).Elem(), + "Interface": TypeOf((*sort.Interface)(nil)).Elem(), + "StringSlice": TypeOf((*sort.StringSlice)(nil)).Elem(), + },Proxies: map[string]Type{ + "Interface": TypeOf((*Interface_sort)(nil)).Elem(), + }, + } +} + +// --------------- proxy for sort.Interface --------------- +type Interface_sort struct { + Object interface{} + Len_ func(interface{}) int + Less_ func(_proxy_obj_ interface{}, i int, j int) bool + Swap_ func(_proxy_obj_ interface{}, i int, j int) +} +func (Proxy *Interface_sort) Len() int { + return Proxy.Len_(Proxy.Object) +} +func (Proxy *Interface_sort) Less(i int, j int) bool { + return Proxy.Less_(Proxy.Object, i, j) +} +func (Proxy *Interface_sort) Swap(i int, j int) { + Proxy.Swap_(Proxy.Object, i, j) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/strconv.go b/vendor/github.com/cosmos72/gomacro/imports/strconv.go new file mode 100644 index 0000000..8f9f3df --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/strconv.go @@ -0,0 +1,55 @@ +// this file was generated by gomacro command: import _b "strconv" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "strconv" +) + +// reflection: allow interpreted code to import "strconv" +func init() { + Packages["strconv"] = Package{ + Binds: map[string]Value{ + "AppendBool": ValueOf(strconv.AppendBool), + "AppendFloat": ValueOf(strconv.AppendFloat), + "AppendInt": ValueOf(strconv.AppendInt), + "AppendQuote": ValueOf(strconv.AppendQuote), + "AppendQuoteRune": ValueOf(strconv.AppendQuoteRune), + "AppendQuoteRuneToASCII": ValueOf(strconv.AppendQuoteRuneToASCII), + "AppendQuoteRuneToGraphic": ValueOf(strconv.AppendQuoteRuneToGraphic), + "AppendQuoteToASCII": ValueOf(strconv.AppendQuoteToASCII), + "AppendQuoteToGraphic": ValueOf(strconv.AppendQuoteToGraphic), + "AppendUint": ValueOf(strconv.AppendUint), + "Atoi": ValueOf(strconv.Atoi), + "CanBackquote": ValueOf(strconv.CanBackquote), + "ErrRange": ValueOf(&strconv.ErrRange).Elem(), + "ErrSyntax": ValueOf(&strconv.ErrSyntax).Elem(), + "FormatBool": ValueOf(strconv.FormatBool), + "FormatFloat": ValueOf(strconv.FormatFloat), + "FormatInt": ValueOf(strconv.FormatInt), + "FormatUint": ValueOf(strconv.FormatUint), + "IntSize": ValueOf(strconv.IntSize), + "IsGraphic": ValueOf(strconv.IsGraphic), + "IsPrint": ValueOf(strconv.IsPrint), + "Itoa": ValueOf(strconv.Itoa), + "ParseBool": ValueOf(strconv.ParseBool), + "ParseFloat": ValueOf(strconv.ParseFloat), + "ParseInt": ValueOf(strconv.ParseInt), + "ParseUint": ValueOf(strconv.ParseUint), + "Quote": ValueOf(strconv.Quote), + "QuoteRune": ValueOf(strconv.QuoteRune), + "QuoteRuneToASCII": ValueOf(strconv.QuoteRuneToASCII), + "QuoteRuneToGraphic": ValueOf(strconv.QuoteRuneToGraphic), + "QuoteToASCII": ValueOf(strconv.QuoteToASCII), + "QuoteToGraphic": ValueOf(strconv.QuoteToGraphic), + "Unquote": ValueOf(strconv.Unquote), + "UnquoteChar": ValueOf(strconv.UnquoteChar), + },Types: map[string]Type{ + "NumError": TypeOf((*strconv.NumError)(nil)).Elem(), + },Untypeds: map[string]string{ + "IntSize": "int:64", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/strings.go b/vendor/github.com/cosmos72/gomacro/imports/strings.go new file mode 100644 index 0000000..0d98ec3 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/strings.go @@ -0,0 +1,65 @@ +// this file was generated by gomacro command: import _b "strings" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "strings" +) + +// reflection: allow interpreted code to import "strings" +func init() { + Packages["strings"] = Package{ + Binds: map[string]Value{ + "Compare": ValueOf(strings.Compare), + "Contains": ValueOf(strings.Contains), + "ContainsAny": ValueOf(strings.ContainsAny), + "ContainsRune": ValueOf(strings.ContainsRune), + "Count": ValueOf(strings.Count), + "EqualFold": ValueOf(strings.EqualFold), + "Fields": ValueOf(strings.Fields), + "FieldsFunc": ValueOf(strings.FieldsFunc), + "HasPrefix": ValueOf(strings.HasPrefix), + "HasSuffix": ValueOf(strings.HasSuffix), + "Index": ValueOf(strings.Index), + "IndexAny": ValueOf(strings.IndexAny), + "IndexByte": ValueOf(strings.IndexByte), + "IndexFunc": ValueOf(strings.IndexFunc), + "IndexRune": ValueOf(strings.IndexRune), + "Join": ValueOf(strings.Join), + "LastIndex": ValueOf(strings.LastIndex), + "LastIndexAny": ValueOf(strings.LastIndexAny), + "LastIndexByte": ValueOf(strings.LastIndexByte), + "LastIndexFunc": ValueOf(strings.LastIndexFunc), + "Map": ValueOf(strings.Map), + "NewReader": ValueOf(strings.NewReader), + "NewReplacer": ValueOf(strings.NewReplacer), + "Repeat": ValueOf(strings.Repeat), + "Replace": ValueOf(strings.Replace), + "Split": ValueOf(strings.Split), + "SplitAfter": ValueOf(strings.SplitAfter), + "SplitAfterN": ValueOf(strings.SplitAfterN), + "SplitN": ValueOf(strings.SplitN), + "Title": ValueOf(strings.Title), + "ToLower": ValueOf(strings.ToLower), + "ToLowerSpecial": ValueOf(strings.ToLowerSpecial), + "ToTitle": ValueOf(strings.ToTitle), + "ToTitleSpecial": ValueOf(strings.ToTitleSpecial), + "ToUpper": ValueOf(strings.ToUpper), + "ToUpperSpecial": ValueOf(strings.ToUpperSpecial), + "Trim": ValueOf(strings.Trim), + "TrimFunc": ValueOf(strings.TrimFunc), + "TrimLeft": ValueOf(strings.TrimLeft), + "TrimLeftFunc": ValueOf(strings.TrimLeftFunc), + "TrimPrefix": ValueOf(strings.TrimPrefix), + "TrimRight": ValueOf(strings.TrimRight), + "TrimRightFunc": ValueOf(strings.TrimRightFunc), + "TrimSpace": ValueOf(strings.TrimSpace), + "TrimSuffix": ValueOf(strings.TrimSuffix), + },Types: map[string]Type{ + "Reader": TypeOf((*strings.Reader)(nil)).Elem(), + "Replacer": TypeOf((*strings.Replacer)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/sync.go b/vendor/github.com/cosmos72/gomacro/imports/sync.go new file mode 100644 index 0000000..395757e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/sync.go @@ -0,0 +1,41 @@ +// this file was generated by gomacro command: import _b "sync" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "sync" +) + +// reflection: allow interpreted code to import "sync" +func init() { + Packages["sync"] = Package{ + Binds: map[string]Value{ + "NewCond": ValueOf(sync.NewCond), + },Types: map[string]Type{ + "Cond": TypeOf((*sync.Cond)(nil)).Elem(), + "Locker": TypeOf((*sync.Locker)(nil)).Elem(), + "Mutex": TypeOf((*sync.Mutex)(nil)).Elem(), + "Once": TypeOf((*sync.Once)(nil)).Elem(), + "Pool": TypeOf((*sync.Pool)(nil)).Elem(), + "RWMutex": TypeOf((*sync.RWMutex)(nil)).Elem(), + "WaitGroup": TypeOf((*sync.WaitGroup)(nil)).Elem(), + },Proxies: map[string]Type{ + "Locker": TypeOf((*Locker_sync)(nil)).Elem(), + }, + } +} + +// --------------- proxy for sync.Locker --------------- +type Locker_sync struct { + Object interface{} + Lock_ func(interface{}) + Unlock_ func(interface{}) +} +func (Proxy *Locker_sync) Lock() { + Proxy.Lock_(Proxy.Object) +} +func (Proxy *Locker_sync) Unlock() { + Proxy.Unlock_(Proxy.Object) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/sync_atomic.go b/vendor/github.com/cosmos72/gomacro/imports/sync_atomic.go new file mode 100644 index 0000000..df02d6a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/sync_atomic.go @@ -0,0 +1,48 @@ +// this file was generated by gomacro command: import _b "sync/atomic" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "sync/atomic" +) + +// reflection: allow interpreted code to import "sync/atomic" +func init() { + Packages["sync/atomic"] = Package{ + Binds: map[string]Value{ + "AddInt32": ValueOf(atomic.AddInt32), + "AddInt64": ValueOf(atomic.AddInt64), + "AddUint32": ValueOf(atomic.AddUint32), + "AddUint64": ValueOf(atomic.AddUint64), + "AddUintptr": ValueOf(atomic.AddUintptr), + "CompareAndSwapInt32": ValueOf(atomic.CompareAndSwapInt32), + "CompareAndSwapInt64": ValueOf(atomic.CompareAndSwapInt64), + "CompareAndSwapPointer": ValueOf(atomic.CompareAndSwapPointer), + "CompareAndSwapUint32": ValueOf(atomic.CompareAndSwapUint32), + "CompareAndSwapUint64": ValueOf(atomic.CompareAndSwapUint64), + "CompareAndSwapUintptr": ValueOf(atomic.CompareAndSwapUintptr), + "LoadInt32": ValueOf(atomic.LoadInt32), + "LoadInt64": ValueOf(atomic.LoadInt64), + "LoadPointer": ValueOf(atomic.LoadPointer), + "LoadUint32": ValueOf(atomic.LoadUint32), + "LoadUint64": ValueOf(atomic.LoadUint64), + "LoadUintptr": ValueOf(atomic.LoadUintptr), + "StoreInt32": ValueOf(atomic.StoreInt32), + "StoreInt64": ValueOf(atomic.StoreInt64), + "StorePointer": ValueOf(atomic.StorePointer), + "StoreUint32": ValueOf(atomic.StoreUint32), + "StoreUint64": ValueOf(atomic.StoreUint64), + "StoreUintptr": ValueOf(atomic.StoreUintptr), + "SwapInt32": ValueOf(atomic.SwapInt32), + "SwapInt64": ValueOf(atomic.SwapInt64), + "SwapPointer": ValueOf(atomic.SwapPointer), + "SwapUint32": ValueOf(atomic.SwapUint32), + "SwapUint64": ValueOf(atomic.SwapUint64), + "SwapUintptr": ValueOf(atomic.SwapUintptr), + },Types: map[string]Type{ + "Value": TypeOf((*atomic.Value)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/syscall_darwin_386.go b/vendor/github.com/cosmos72/gomacro/imports/syscall_darwin_386.go new file mode 100644 index 0000000..4e316cd --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/syscall_darwin_386.go @@ -0,0 +1,1918 @@ +// +build !gccgo + +// this file was generated by gomacro command: import "syscall" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "syscall" +) + +func init() { + Packages["syscall"] = Package{ + Binds: map[string]Value{ + "AF_APPLETALK": ValueOf(syscall.AF_APPLETALK), + "AF_CCITT": ValueOf(syscall.AF_CCITT), + "AF_CHAOS": ValueOf(syscall.AF_CHAOS), + "AF_CNT": ValueOf(syscall.AF_CNT), + "AF_COIP": ValueOf(syscall.AF_COIP), + "AF_DATAKIT": ValueOf(syscall.AF_DATAKIT), + "AF_DECnet": ValueOf(syscall.AF_DECnet), + "AF_DLI": ValueOf(syscall.AF_DLI), + "AF_E164": ValueOf(syscall.AF_E164), + "AF_ECMA": ValueOf(syscall.AF_ECMA), + "AF_HYLINK": ValueOf(syscall.AF_HYLINK), + "AF_IEEE80211": ValueOf(syscall.AF_IEEE80211), + "AF_IMPLINK": ValueOf(syscall.AF_IMPLINK), + "AF_INET": ValueOf(syscall.AF_INET), + "AF_INET6": ValueOf(syscall.AF_INET6), + "AF_IPX": ValueOf(syscall.AF_IPX), + "AF_ISDN": ValueOf(syscall.AF_ISDN), + "AF_ISO": ValueOf(syscall.AF_ISO), + "AF_LAT": ValueOf(syscall.AF_LAT), + "AF_LINK": ValueOf(syscall.AF_LINK), + "AF_LOCAL": ValueOf(syscall.AF_LOCAL), + "AF_MAX": ValueOf(syscall.AF_MAX), + "AF_NATM": ValueOf(syscall.AF_NATM), + "AF_NDRV": ValueOf(syscall.AF_NDRV), + "AF_NETBIOS": ValueOf(syscall.AF_NETBIOS), + "AF_NS": ValueOf(syscall.AF_NS), + "AF_OSI": ValueOf(syscall.AF_OSI), + "AF_PPP": ValueOf(syscall.AF_PPP), + "AF_PUP": ValueOf(syscall.AF_PUP), + "AF_RESERVED_36": ValueOf(syscall.AF_RESERVED_36), + "AF_ROUTE": ValueOf(syscall.AF_ROUTE), + "AF_SIP": ValueOf(syscall.AF_SIP), + "AF_SNA": ValueOf(syscall.AF_SNA), + "AF_SYSTEM": ValueOf(syscall.AF_SYSTEM), + "AF_UNIX": ValueOf(syscall.AF_UNIX), + "AF_UNSPEC": ValueOf(syscall.AF_UNSPEC), + "Accept": ValueOf(syscall.Accept), + "Access": ValueOf(syscall.Access), + "Adjtime": ValueOf(syscall.Adjtime), + "B0": ValueOf(syscall.B0), + "B110": ValueOf(syscall.B110), + "B115200": ValueOf(syscall.B115200), + "B1200": ValueOf(syscall.B1200), + "B134": ValueOf(syscall.B134), + "B14400": ValueOf(syscall.B14400), + "B150": ValueOf(syscall.B150), + "B1800": ValueOf(syscall.B1800), + "B19200": ValueOf(syscall.B19200), + "B200": ValueOf(syscall.B200), + "B230400": ValueOf(syscall.B230400), + "B2400": ValueOf(syscall.B2400), + "B28800": ValueOf(syscall.B28800), + "B300": ValueOf(syscall.B300), + "B38400": ValueOf(syscall.B38400), + "B4800": ValueOf(syscall.B4800), + "B50": ValueOf(syscall.B50), + "B57600": ValueOf(syscall.B57600), + "B600": ValueOf(syscall.B600), + "B7200": ValueOf(syscall.B7200), + "B75": ValueOf(syscall.B75), + "B76800": ValueOf(syscall.B76800), + "B9600": ValueOf(syscall.B9600), + "BIOCFLUSH": ValueOf(syscall.BIOCFLUSH), + "BIOCGBLEN": ValueOf(syscall.BIOCGBLEN), + "BIOCGDLT": ValueOf(syscall.BIOCGDLT), + "BIOCGDLTLIST": ValueOf(uint64(syscall.BIOCGDLTLIST)), + "BIOCGETIF": ValueOf(syscall.BIOCGETIF), + "BIOCGHDRCMPLT": ValueOf(syscall.BIOCGHDRCMPLT), + "BIOCGRSIG": ValueOf(syscall.BIOCGRSIG), + "BIOCGRTIMEOUT": ValueOf(syscall.BIOCGRTIMEOUT), + "BIOCGSEESENT": ValueOf(syscall.BIOCGSEESENT), + "BIOCGSTATS": ValueOf(syscall.BIOCGSTATS), + "BIOCIMMEDIATE": ValueOf(uint64(syscall.BIOCIMMEDIATE)), + "BIOCPROMISC": ValueOf(syscall.BIOCPROMISC), + "BIOCSBLEN": ValueOf(uint64(syscall.BIOCSBLEN)), + "BIOCSDLT": ValueOf(uint64(syscall.BIOCSDLT)), + "BIOCSETF": ValueOf(uint64(syscall.BIOCSETF)), + "BIOCSETIF": ValueOf(uint64(syscall.BIOCSETIF)), + "BIOCSHDRCMPLT": ValueOf(uint64(syscall.BIOCSHDRCMPLT)), + "BIOCSRSIG": ValueOf(uint64(syscall.BIOCSRSIG)), + "BIOCSRTIMEOUT": ValueOf(uint64(syscall.BIOCSRTIMEOUT)), + "BIOCSSEESENT": ValueOf(uint64(syscall.BIOCSSEESENT)), + "BIOCVERSION": ValueOf(syscall.BIOCVERSION), + "BPF_A": ValueOf(syscall.BPF_A), + "BPF_ABS": ValueOf(syscall.BPF_ABS), + "BPF_ADD": ValueOf(syscall.BPF_ADD), + "BPF_ALIGNMENT": ValueOf(syscall.BPF_ALIGNMENT), + "BPF_ALU": ValueOf(syscall.BPF_ALU), + "BPF_AND": ValueOf(syscall.BPF_AND), + "BPF_B": ValueOf(syscall.BPF_B), + "BPF_DIV": ValueOf(syscall.BPF_DIV), + "BPF_H": ValueOf(syscall.BPF_H), + "BPF_IMM": ValueOf(syscall.BPF_IMM), + "BPF_IND": ValueOf(syscall.BPF_IND), + "BPF_JA": ValueOf(syscall.BPF_JA), + "BPF_JEQ": ValueOf(syscall.BPF_JEQ), + "BPF_JGE": ValueOf(syscall.BPF_JGE), + "BPF_JGT": ValueOf(syscall.BPF_JGT), + "BPF_JMP": ValueOf(syscall.BPF_JMP), + "BPF_JSET": ValueOf(syscall.BPF_JSET), + "BPF_K": ValueOf(syscall.BPF_K), + "BPF_LD": ValueOf(syscall.BPF_LD), + "BPF_LDX": ValueOf(syscall.BPF_LDX), + "BPF_LEN": ValueOf(syscall.BPF_LEN), + "BPF_LSH": ValueOf(syscall.BPF_LSH), + "BPF_MAJOR_VERSION": ValueOf(syscall.BPF_MAJOR_VERSION), + "BPF_MAXBUFSIZE": ValueOf(syscall.BPF_MAXBUFSIZE), + "BPF_MAXINSNS": ValueOf(syscall.BPF_MAXINSNS), + "BPF_MEM": ValueOf(syscall.BPF_MEM), + "BPF_MEMWORDS": ValueOf(syscall.BPF_MEMWORDS), + "BPF_MINBUFSIZE": ValueOf(syscall.BPF_MINBUFSIZE), + "BPF_MINOR_VERSION": ValueOf(syscall.BPF_MINOR_VERSION), + "BPF_MISC": ValueOf(syscall.BPF_MISC), + "BPF_MSH": ValueOf(syscall.BPF_MSH), + "BPF_MUL": ValueOf(syscall.BPF_MUL), + "BPF_NEG": ValueOf(syscall.BPF_NEG), + "BPF_OR": ValueOf(syscall.BPF_OR), + "BPF_RELEASE": ValueOf(syscall.BPF_RELEASE), + "BPF_RET": ValueOf(syscall.BPF_RET), + "BPF_RSH": ValueOf(syscall.BPF_RSH), + "BPF_ST": ValueOf(syscall.BPF_ST), + "BPF_STX": ValueOf(syscall.BPF_STX), + "BPF_SUB": ValueOf(syscall.BPF_SUB), + "BPF_TAX": ValueOf(syscall.BPF_TAX), + "BPF_TXA": ValueOf(syscall.BPF_TXA), + "BPF_W": ValueOf(syscall.BPF_W), + "BPF_X": ValueOf(syscall.BPF_X), + "BRKINT": ValueOf(syscall.BRKINT), + "Bind": ValueOf(syscall.Bind), + "BpfBuflen": ValueOf(syscall.BpfBuflen), + "BpfDatalink": ValueOf(syscall.BpfDatalink), + "BpfHeadercmpl": ValueOf(syscall.BpfHeadercmpl), + "BpfInterface": ValueOf(syscall.BpfInterface), + "BpfJump": ValueOf(syscall.BpfJump), + "BpfStats": ValueOf(syscall.BpfStats), + "BpfStmt": ValueOf(syscall.BpfStmt), + "BpfTimeout": ValueOf(syscall.BpfTimeout), + "BytePtrFromString": ValueOf(syscall.BytePtrFromString), + "ByteSliceFromString": ValueOf(syscall.ByteSliceFromString), + "CFLUSH": ValueOf(syscall.CFLUSH), + "CLOCAL": ValueOf(syscall.CLOCAL), + "CREAD": ValueOf(syscall.CREAD), + "CS5": ValueOf(syscall.CS5), + "CS6": ValueOf(syscall.CS6), + "CS7": ValueOf(syscall.CS7), + "CS8": ValueOf(syscall.CS8), + "CSIZE": ValueOf(syscall.CSIZE), + "CSTART": ValueOf(syscall.CSTART), + "CSTATUS": ValueOf(syscall.CSTATUS), + "CSTOP": ValueOf(syscall.CSTOP), + "CSTOPB": ValueOf(syscall.CSTOPB), + "CSUSP": ValueOf(syscall.CSUSP), + "CTL_MAXNAME": ValueOf(syscall.CTL_MAXNAME), + "CTL_NET": ValueOf(syscall.CTL_NET), + "Chdir": ValueOf(syscall.Chdir), + "CheckBpfVersion": ValueOf(syscall.CheckBpfVersion), + "Chflags": ValueOf(syscall.Chflags), + "Chmod": ValueOf(syscall.Chmod), + "Chown": ValueOf(syscall.Chown), + "Chroot": ValueOf(syscall.Chroot), + "Clearenv": ValueOf(syscall.Clearenv), + "Close": ValueOf(syscall.Close), + "CloseOnExec": ValueOf(syscall.CloseOnExec), + "CmsgLen": ValueOf(syscall.CmsgLen), + "CmsgSpace": ValueOf(syscall.CmsgSpace), + "Connect": ValueOf(syscall.Connect), + "DLT_APPLE_IP_OVER_IEEE1394": ValueOf(syscall.DLT_APPLE_IP_OVER_IEEE1394), + "DLT_ARCNET": ValueOf(syscall.DLT_ARCNET), + "DLT_ATM_CLIP": ValueOf(syscall.DLT_ATM_CLIP), + "DLT_ATM_RFC1483": ValueOf(syscall.DLT_ATM_RFC1483), + "DLT_AX25": ValueOf(syscall.DLT_AX25), + "DLT_CHAOS": ValueOf(syscall.DLT_CHAOS), + "DLT_CHDLC": ValueOf(syscall.DLT_CHDLC), + "DLT_C_HDLC": ValueOf(syscall.DLT_C_HDLC), + "DLT_EN10MB": ValueOf(syscall.DLT_EN10MB), + "DLT_EN3MB": ValueOf(syscall.DLT_EN3MB), + "DLT_FDDI": ValueOf(syscall.DLT_FDDI), + "DLT_IEEE802": ValueOf(syscall.DLT_IEEE802), + "DLT_IEEE802_11": ValueOf(syscall.DLT_IEEE802_11), + "DLT_IEEE802_11_RADIO": ValueOf(syscall.DLT_IEEE802_11_RADIO), + "DLT_IEEE802_11_RADIO_AVS": ValueOf(syscall.DLT_IEEE802_11_RADIO_AVS), + "DLT_LINUX_SLL": ValueOf(syscall.DLT_LINUX_SLL), + "DLT_LOOP": ValueOf(syscall.DLT_LOOP), + "DLT_NULL": ValueOf(syscall.DLT_NULL), + "DLT_PFLOG": ValueOf(syscall.DLT_PFLOG), + "DLT_PFSYNC": ValueOf(syscall.DLT_PFSYNC), + "DLT_PPP": ValueOf(syscall.DLT_PPP), + "DLT_PPP_BSDOS": ValueOf(syscall.DLT_PPP_BSDOS), + "DLT_PPP_SERIAL": ValueOf(syscall.DLT_PPP_SERIAL), + "DLT_PRONET": ValueOf(syscall.DLT_PRONET), + "DLT_RAW": ValueOf(syscall.DLT_RAW), + "DLT_SLIP": ValueOf(syscall.DLT_SLIP), + "DLT_SLIP_BSDOS": ValueOf(syscall.DLT_SLIP_BSDOS), + "DT_BLK": ValueOf(syscall.DT_BLK), + "DT_CHR": ValueOf(syscall.DT_CHR), + "DT_DIR": ValueOf(syscall.DT_DIR), + "DT_FIFO": ValueOf(syscall.DT_FIFO), + "DT_LNK": ValueOf(syscall.DT_LNK), + "DT_REG": ValueOf(syscall.DT_REG), + "DT_SOCK": ValueOf(syscall.DT_SOCK), + "DT_UNKNOWN": ValueOf(syscall.DT_UNKNOWN), + "DT_WHT": ValueOf(syscall.DT_WHT), + "Dup": ValueOf(syscall.Dup), + "Dup2": ValueOf(syscall.Dup2), + "E2BIG": ValueOf(syscall.E2BIG), + "EACCES": ValueOf(syscall.EACCES), + "EADDRINUSE": ValueOf(syscall.EADDRINUSE), + "EADDRNOTAVAIL": ValueOf(syscall.EADDRNOTAVAIL), + "EAFNOSUPPORT": ValueOf(syscall.EAFNOSUPPORT), + "EAGAIN": ValueOf(syscall.EAGAIN), + "EALREADY": ValueOf(syscall.EALREADY), + "EAUTH": ValueOf(syscall.EAUTH), + "EBADARCH": ValueOf(syscall.EBADARCH), + "EBADEXEC": ValueOf(syscall.EBADEXEC), + "EBADF": ValueOf(syscall.EBADF), + "EBADMACHO": ValueOf(syscall.EBADMACHO), + "EBADMSG": ValueOf(syscall.EBADMSG), + "EBADRPC": ValueOf(syscall.EBADRPC), + "EBUSY": ValueOf(syscall.EBUSY), + "ECANCELED": ValueOf(syscall.ECANCELED), + "ECHILD": ValueOf(syscall.ECHILD), + "ECHO": ValueOf(syscall.ECHO), + "ECHOCTL": ValueOf(syscall.ECHOCTL), + "ECHOE": ValueOf(syscall.ECHOE), + "ECHOK": ValueOf(syscall.ECHOK), + "ECHOKE": ValueOf(syscall.ECHOKE), + "ECHONL": ValueOf(syscall.ECHONL), + "ECHOPRT": ValueOf(syscall.ECHOPRT), + "ECONNABORTED": ValueOf(syscall.ECONNABORTED), + "ECONNREFUSED": ValueOf(syscall.ECONNREFUSED), + "ECONNRESET": ValueOf(syscall.ECONNRESET), + "EDEADLK": ValueOf(syscall.EDEADLK), + "EDESTADDRREQ": ValueOf(syscall.EDESTADDRREQ), + "EDEVERR": ValueOf(syscall.EDEVERR), + "EDOM": ValueOf(syscall.EDOM), + "EDQUOT": ValueOf(syscall.EDQUOT), + "EEXIST": ValueOf(syscall.EEXIST), + "EFAULT": ValueOf(syscall.EFAULT), + "EFBIG": ValueOf(syscall.EFBIG), + "EFTYPE": ValueOf(syscall.EFTYPE), + "EHOSTDOWN": ValueOf(syscall.EHOSTDOWN), + "EHOSTUNREACH": ValueOf(syscall.EHOSTUNREACH), + "EIDRM": ValueOf(syscall.EIDRM), + "EILSEQ": ValueOf(syscall.EILSEQ), + "EINPROGRESS": ValueOf(syscall.EINPROGRESS), + "EINTR": ValueOf(syscall.EINTR), + "EINVAL": ValueOf(syscall.EINVAL), + "EIO": ValueOf(syscall.EIO), + "EISCONN": ValueOf(syscall.EISCONN), + "EISDIR": ValueOf(syscall.EISDIR), + "ELAST": ValueOf(syscall.ELAST), + "ELOOP": ValueOf(syscall.ELOOP), + "EMFILE": ValueOf(syscall.EMFILE), + "EMLINK": ValueOf(syscall.EMLINK), + "EMSGSIZE": ValueOf(syscall.EMSGSIZE), + "EMULTIHOP": ValueOf(syscall.EMULTIHOP), + "ENAMETOOLONG": ValueOf(syscall.ENAMETOOLONG), + "ENEEDAUTH": ValueOf(syscall.ENEEDAUTH), + "ENETDOWN": ValueOf(syscall.ENETDOWN), + "ENETRESET": ValueOf(syscall.ENETRESET), + "ENETUNREACH": ValueOf(syscall.ENETUNREACH), + "ENFILE": ValueOf(syscall.ENFILE), + "ENOATTR": ValueOf(syscall.ENOATTR), + "ENOBUFS": ValueOf(syscall.ENOBUFS), + "ENODATA": ValueOf(syscall.ENODATA), + "ENODEV": ValueOf(syscall.ENODEV), + "ENOENT": ValueOf(syscall.ENOENT), + "ENOEXEC": ValueOf(syscall.ENOEXEC), + "ENOLCK": ValueOf(syscall.ENOLCK), + "ENOLINK": ValueOf(syscall.ENOLINK), + "ENOMEM": ValueOf(syscall.ENOMEM), + "ENOMSG": ValueOf(syscall.ENOMSG), + "ENOPOLICY": ValueOf(syscall.ENOPOLICY), + "ENOPROTOOPT": ValueOf(syscall.ENOPROTOOPT), + "ENOSPC": ValueOf(syscall.ENOSPC), + "ENOSR": ValueOf(syscall.ENOSR), + "ENOSTR": ValueOf(syscall.ENOSTR), + "ENOSYS": ValueOf(syscall.ENOSYS), + "ENOTBLK": ValueOf(syscall.ENOTBLK), + "ENOTCONN": ValueOf(syscall.ENOTCONN), + "ENOTDIR": ValueOf(syscall.ENOTDIR), + "ENOTEMPTY": ValueOf(syscall.ENOTEMPTY), + "ENOTRECOVERABLE": ValueOf(syscall.ENOTRECOVERABLE), + "ENOTSOCK": ValueOf(syscall.ENOTSOCK), + "ENOTSUP": ValueOf(syscall.ENOTSUP), + "ENOTTY": ValueOf(syscall.ENOTTY), + "ENXIO": ValueOf(syscall.ENXIO), + "EOPNOTSUPP": ValueOf(syscall.EOPNOTSUPP), + "EOVERFLOW": ValueOf(syscall.EOVERFLOW), + "EOWNERDEAD": ValueOf(syscall.EOWNERDEAD), + "EPERM": ValueOf(syscall.EPERM), + "EPFNOSUPPORT": ValueOf(syscall.EPFNOSUPPORT), + "EPIPE": ValueOf(syscall.EPIPE), + "EPROCLIM": ValueOf(syscall.EPROCLIM), + "EPROCUNAVAIL": ValueOf(syscall.EPROCUNAVAIL), + "EPROGMISMATCH": ValueOf(syscall.EPROGMISMATCH), + "EPROGUNAVAIL": ValueOf(syscall.EPROGUNAVAIL), + "EPROTO": ValueOf(syscall.EPROTO), + "EPROTONOSUPPORT": ValueOf(syscall.EPROTONOSUPPORT), + "EPROTOTYPE": ValueOf(syscall.EPROTOTYPE), + "EPWROFF": ValueOf(syscall.EPWROFF), + "ERANGE": ValueOf(syscall.ERANGE), + "EREMOTE": ValueOf(syscall.EREMOTE), + "EROFS": ValueOf(syscall.EROFS), + "ERPCMISMATCH": ValueOf(syscall.ERPCMISMATCH), + "ESHLIBVERS": ValueOf(syscall.ESHLIBVERS), + "ESHUTDOWN": ValueOf(syscall.ESHUTDOWN), + "ESOCKTNOSUPPORT": ValueOf(syscall.ESOCKTNOSUPPORT), + "ESPIPE": ValueOf(syscall.ESPIPE), + "ESRCH": ValueOf(syscall.ESRCH), + "ESTALE": ValueOf(syscall.ESTALE), + "ETIME": ValueOf(syscall.ETIME), + "ETIMEDOUT": ValueOf(syscall.ETIMEDOUT), + "ETOOMANYREFS": ValueOf(syscall.ETOOMANYREFS), + "ETXTBSY": ValueOf(syscall.ETXTBSY), + "EUSERS": ValueOf(syscall.EUSERS), + "EVFILT_AIO": ValueOf(syscall.EVFILT_AIO), + "EVFILT_FS": ValueOf(syscall.EVFILT_FS), + "EVFILT_MACHPORT": ValueOf(syscall.EVFILT_MACHPORT), + "EVFILT_PROC": ValueOf(syscall.EVFILT_PROC), + "EVFILT_READ": ValueOf(syscall.EVFILT_READ), + "EVFILT_SIGNAL": ValueOf(syscall.EVFILT_SIGNAL), + "EVFILT_SYSCOUNT": ValueOf(syscall.EVFILT_SYSCOUNT), + "EVFILT_THREADMARKER": ValueOf(syscall.EVFILT_THREADMARKER), + "EVFILT_TIMER": ValueOf(syscall.EVFILT_TIMER), + "EVFILT_USER": ValueOf(syscall.EVFILT_USER), + "EVFILT_VM": ValueOf(syscall.EVFILT_VM), + "EVFILT_VNODE": ValueOf(syscall.EVFILT_VNODE), + "EVFILT_WRITE": ValueOf(syscall.EVFILT_WRITE), + "EV_ADD": ValueOf(syscall.EV_ADD), + "EV_CLEAR": ValueOf(syscall.EV_CLEAR), + "EV_DELETE": ValueOf(syscall.EV_DELETE), + "EV_DISABLE": ValueOf(syscall.EV_DISABLE), + "EV_DISPATCH": ValueOf(syscall.EV_DISPATCH), + "EV_ENABLE": ValueOf(syscall.EV_ENABLE), + "EV_EOF": ValueOf(syscall.EV_EOF), + "EV_ERROR": ValueOf(syscall.EV_ERROR), + "EV_FLAG0": ValueOf(syscall.EV_FLAG0), + "EV_FLAG1": ValueOf(syscall.EV_FLAG1), + "EV_ONESHOT": ValueOf(syscall.EV_ONESHOT), + "EV_OOBAND": ValueOf(syscall.EV_OOBAND), + "EV_POLL": ValueOf(syscall.EV_POLL), + "EV_RECEIPT": ValueOf(syscall.EV_RECEIPT), + "EV_SYSFLAGS": ValueOf(syscall.EV_SYSFLAGS), + "EWOULDBLOCK": ValueOf(syscall.EWOULDBLOCK), + "EXDEV": ValueOf(syscall.EXDEV), + "EXTA": ValueOf(syscall.EXTA), + "EXTB": ValueOf(syscall.EXTB), + "EXTPROC": ValueOf(syscall.EXTPROC), + "Environ": ValueOf(syscall.Environ), + "Exchangedata": ValueOf(syscall.Exchangedata), + "Exec": ValueOf(syscall.Exec), + "Exit": ValueOf(syscall.Exit), + "FD_CLOEXEC": ValueOf(syscall.FD_CLOEXEC), + "FD_SETSIZE": ValueOf(syscall.FD_SETSIZE), + "FLUSHO": ValueOf(syscall.FLUSHO), + "F_ADDFILESIGS": ValueOf(syscall.F_ADDFILESIGS), + "F_ADDSIGS": ValueOf(syscall.F_ADDSIGS), + "F_ALLOCATEALL": ValueOf(syscall.F_ALLOCATEALL), + "F_ALLOCATECONTIG": ValueOf(syscall.F_ALLOCATECONTIG), + "F_CHKCLEAN": ValueOf(syscall.F_CHKCLEAN), + "F_DUPFD": ValueOf(syscall.F_DUPFD), + "F_DUPFD_CLOEXEC": ValueOf(syscall.F_DUPFD_CLOEXEC), + "F_FLUSH_DATA": ValueOf(syscall.F_FLUSH_DATA), + "F_FREEZE_FS": ValueOf(syscall.F_FREEZE_FS), + "F_FULLFSYNC": ValueOf(syscall.F_FULLFSYNC), + "F_GETFD": ValueOf(syscall.F_GETFD), + "F_GETFL": ValueOf(syscall.F_GETFL), + "F_GETLK": ValueOf(syscall.F_GETLK), + "F_GETLKPID": ValueOf(syscall.F_GETLKPID), + "F_GETNOSIGPIPE": ValueOf(syscall.F_GETNOSIGPIPE), + "F_GETOWN": ValueOf(syscall.F_GETOWN), + "F_GETPATH": ValueOf(syscall.F_GETPATH), + "F_GETPATH_MTMINFO": ValueOf(syscall.F_GETPATH_MTMINFO), + "F_GETPROTECTIONCLASS": ValueOf(syscall.F_GETPROTECTIONCLASS), + "F_GLOBAL_NOCACHE": ValueOf(syscall.F_GLOBAL_NOCACHE), + "F_LOG2PHYS": ValueOf(syscall.F_LOG2PHYS), + "F_LOG2PHYS_EXT": ValueOf(syscall.F_LOG2PHYS_EXT), + "F_MARKDEPENDENCY": ValueOf(syscall.F_MARKDEPENDENCY), + "F_NOCACHE": ValueOf(syscall.F_NOCACHE), + "F_NODIRECT": ValueOf(syscall.F_NODIRECT), + "F_OK": ValueOf(syscall.F_OK), + "F_PATHPKG_CHECK": ValueOf(syscall.F_PATHPKG_CHECK), + "F_PEOFPOSMODE": ValueOf(syscall.F_PEOFPOSMODE), + "F_PREALLOCATE": ValueOf(syscall.F_PREALLOCATE), + "F_RDADVISE": ValueOf(syscall.F_RDADVISE), + "F_RDAHEAD": ValueOf(syscall.F_RDAHEAD), + "F_RDLCK": ValueOf(syscall.F_RDLCK), + "F_READBOOTSTRAP": ValueOf(syscall.F_READBOOTSTRAP), + "F_SETBACKINGSTORE": ValueOf(syscall.F_SETBACKINGSTORE), + "F_SETFD": ValueOf(syscall.F_SETFD), + "F_SETFL": ValueOf(syscall.F_SETFL), + "F_SETLK": ValueOf(syscall.F_SETLK), + "F_SETLKW": ValueOf(syscall.F_SETLKW), + "F_SETNOSIGPIPE": ValueOf(syscall.F_SETNOSIGPIPE), + "F_SETOWN": ValueOf(syscall.F_SETOWN), + "F_SETPROTECTIONCLASS": ValueOf(syscall.F_SETPROTECTIONCLASS), + "F_SETSIZE": ValueOf(syscall.F_SETSIZE), + "F_THAW_FS": ValueOf(syscall.F_THAW_FS), + "F_UNLCK": ValueOf(syscall.F_UNLCK), + "F_VOLPOSMODE": ValueOf(syscall.F_VOLPOSMODE), + "F_WRITEBOOTSTRAP": ValueOf(syscall.F_WRITEBOOTSTRAP), + "F_WRLCK": ValueOf(syscall.F_WRLCK), + "Fchdir": ValueOf(syscall.Fchdir), + "Fchflags": ValueOf(syscall.Fchflags), + "Fchmod": ValueOf(syscall.Fchmod), + "Fchown": ValueOf(syscall.Fchown), + "FcntlFlock": ValueOf(syscall.FcntlFlock), + "Flock": ValueOf(syscall.Flock), + "FlushBpf": ValueOf(syscall.FlushBpf), + "ForkExec": ValueOf(syscall.ForkExec), + "ForkLock": ValueOf(&syscall.ForkLock).Elem(), + "Fpathconf": ValueOf(syscall.Fpathconf), + "Fstat": ValueOf(syscall.Fstat), + "Fstatfs": ValueOf(syscall.Fstatfs), + "Fsync": ValueOf(syscall.Fsync), + "Ftruncate": ValueOf(syscall.Ftruncate), + "Futimes": ValueOf(syscall.Futimes), + "Getdirentries": ValueOf(syscall.Getdirentries), + "Getdtablesize": ValueOf(syscall.Getdtablesize), + "Getegid": ValueOf(syscall.Getegid), + "Getenv": ValueOf(syscall.Getenv), + "Geteuid": ValueOf(syscall.Geteuid), + "Getfsstat": ValueOf(syscall.Getfsstat), + "Getgid": ValueOf(syscall.Getgid), + "Getgroups": ValueOf(syscall.Getgroups), + "Getpagesize": ValueOf(syscall.Getpagesize), + "Getpeername": ValueOf(syscall.Getpeername), + "Getpgid": ValueOf(syscall.Getpgid), + "Getpgrp": ValueOf(syscall.Getpgrp), + "Getpid": ValueOf(syscall.Getpid), + "Getppid": ValueOf(syscall.Getppid), + "Getpriority": ValueOf(syscall.Getpriority), + "Getrlimit": ValueOf(syscall.Getrlimit), + "Getrusage": ValueOf(syscall.Getrusage), + "Getsid": ValueOf(syscall.Getsid), + "Getsockname": ValueOf(syscall.Getsockname), + "GetsockoptByte": ValueOf(syscall.GetsockoptByte), + "GetsockoptICMPv6Filter": ValueOf(syscall.GetsockoptICMPv6Filter), + "GetsockoptIPMreq": ValueOf(syscall.GetsockoptIPMreq), + "GetsockoptIPv6MTUInfo": ValueOf(syscall.GetsockoptIPv6MTUInfo), + "GetsockoptIPv6Mreq": ValueOf(syscall.GetsockoptIPv6Mreq), + "GetsockoptInet4Addr": ValueOf(syscall.GetsockoptInet4Addr), + "GetsockoptInt": ValueOf(syscall.GetsockoptInt), + "Gettimeofday": ValueOf(syscall.Gettimeofday), + "Getuid": ValueOf(syscall.Getuid), + "Getwd": ValueOf(syscall.Getwd), + "HUPCL": ValueOf(syscall.HUPCL), + "ICANON": ValueOf(syscall.ICANON), + "ICMP6_FILTER": ValueOf(syscall.ICMP6_FILTER), + "ICRNL": ValueOf(syscall.ICRNL), + "IEXTEN": ValueOf(syscall.IEXTEN), + "IFF_ALLMULTI": ValueOf(syscall.IFF_ALLMULTI), + "IFF_ALTPHYS": ValueOf(syscall.IFF_ALTPHYS), + "IFF_BROADCAST": ValueOf(syscall.IFF_BROADCAST), + "IFF_DEBUG": ValueOf(syscall.IFF_DEBUG), + "IFF_LINK0": ValueOf(syscall.IFF_LINK0), + "IFF_LINK1": ValueOf(syscall.IFF_LINK1), + "IFF_LINK2": ValueOf(syscall.IFF_LINK2), + "IFF_LOOPBACK": ValueOf(syscall.IFF_LOOPBACK), + "IFF_MULTICAST": ValueOf(syscall.IFF_MULTICAST), + "IFF_NOARP": ValueOf(syscall.IFF_NOARP), + "IFF_NOTRAILERS": ValueOf(syscall.IFF_NOTRAILERS), + "IFF_OACTIVE": ValueOf(syscall.IFF_OACTIVE), + "IFF_POINTOPOINT": ValueOf(syscall.IFF_POINTOPOINT), + "IFF_PROMISC": ValueOf(syscall.IFF_PROMISC), + "IFF_RUNNING": ValueOf(syscall.IFF_RUNNING), + "IFF_SIMPLEX": ValueOf(syscall.IFF_SIMPLEX), + "IFF_UP": ValueOf(syscall.IFF_UP), + "IFNAMSIZ": ValueOf(syscall.IFNAMSIZ), + "IFT_1822": ValueOf(syscall.IFT_1822), + "IFT_AAL5": ValueOf(syscall.IFT_AAL5), + "IFT_ARCNET": ValueOf(syscall.IFT_ARCNET), + "IFT_ARCNETPLUS": ValueOf(syscall.IFT_ARCNETPLUS), + "IFT_ATM": ValueOf(syscall.IFT_ATM), + "IFT_BRIDGE": ValueOf(syscall.IFT_BRIDGE), + "IFT_CARP": ValueOf(syscall.IFT_CARP), + "IFT_CELLULAR": ValueOf(syscall.IFT_CELLULAR), + "IFT_CEPT": ValueOf(syscall.IFT_CEPT), + "IFT_DS3": ValueOf(syscall.IFT_DS3), + "IFT_ENC": ValueOf(syscall.IFT_ENC), + "IFT_EON": ValueOf(syscall.IFT_EON), + "IFT_ETHER": ValueOf(syscall.IFT_ETHER), + "IFT_FAITH": ValueOf(syscall.IFT_FAITH), + "IFT_FDDI": ValueOf(syscall.IFT_FDDI), + "IFT_FRELAY": ValueOf(syscall.IFT_FRELAY), + "IFT_FRELAYDCE": ValueOf(syscall.IFT_FRELAYDCE), + "IFT_GIF": ValueOf(syscall.IFT_GIF), + "IFT_HDH1822": ValueOf(syscall.IFT_HDH1822), + "IFT_HIPPI": ValueOf(syscall.IFT_HIPPI), + "IFT_HSSI": ValueOf(syscall.IFT_HSSI), + "IFT_HY": ValueOf(syscall.IFT_HY), + "IFT_IEEE1394": ValueOf(syscall.IFT_IEEE1394), + "IFT_IEEE8023ADLAG": ValueOf(syscall.IFT_IEEE8023ADLAG), + "IFT_ISDNBASIC": ValueOf(syscall.IFT_ISDNBASIC), + "IFT_ISDNPRIMARY": ValueOf(syscall.IFT_ISDNPRIMARY), + "IFT_ISO88022LLC": ValueOf(syscall.IFT_ISO88022LLC), + "IFT_ISO88023": ValueOf(syscall.IFT_ISO88023), + "IFT_ISO88024": ValueOf(syscall.IFT_ISO88024), + "IFT_ISO88025": ValueOf(syscall.IFT_ISO88025), + "IFT_ISO88026": ValueOf(syscall.IFT_ISO88026), + "IFT_L2VLAN": ValueOf(syscall.IFT_L2VLAN), + "IFT_LAPB": ValueOf(syscall.IFT_LAPB), + "IFT_LOCALTALK": ValueOf(syscall.IFT_LOCALTALK), + "IFT_LOOP": ValueOf(syscall.IFT_LOOP), + "IFT_MIOX25": ValueOf(syscall.IFT_MIOX25), + "IFT_MODEM": ValueOf(syscall.IFT_MODEM), + "IFT_NSIP": ValueOf(syscall.IFT_NSIP), + "IFT_OTHER": ValueOf(syscall.IFT_OTHER), + "IFT_P10": ValueOf(syscall.IFT_P10), + "IFT_P80": ValueOf(syscall.IFT_P80), + "IFT_PARA": ValueOf(syscall.IFT_PARA), + "IFT_PDP": ValueOf(syscall.IFT_PDP), + "IFT_PFLOG": ValueOf(syscall.IFT_PFLOG), + "IFT_PFSYNC": ValueOf(syscall.IFT_PFSYNC), + "IFT_PPP": ValueOf(syscall.IFT_PPP), + "IFT_PROPMUX": ValueOf(syscall.IFT_PROPMUX), + "IFT_PROPVIRTUAL": ValueOf(syscall.IFT_PROPVIRTUAL), + "IFT_PTPSERIAL": ValueOf(syscall.IFT_PTPSERIAL), + "IFT_RS232": ValueOf(syscall.IFT_RS232), + "IFT_SDLC": ValueOf(syscall.IFT_SDLC), + "IFT_SIP": ValueOf(syscall.IFT_SIP), + "IFT_SLIP": ValueOf(syscall.IFT_SLIP), + "IFT_SMDSDXI": ValueOf(syscall.IFT_SMDSDXI), + "IFT_SMDSICIP": ValueOf(syscall.IFT_SMDSICIP), + "IFT_SONET": ValueOf(syscall.IFT_SONET), + "IFT_SONETPATH": ValueOf(syscall.IFT_SONETPATH), + "IFT_SONETVT": ValueOf(syscall.IFT_SONETVT), + "IFT_STARLAN": ValueOf(syscall.IFT_STARLAN), + "IFT_STF": ValueOf(syscall.IFT_STF), + "IFT_T1": ValueOf(syscall.IFT_T1), + "IFT_ULTRA": ValueOf(syscall.IFT_ULTRA), + "IFT_V35": ValueOf(syscall.IFT_V35), + "IFT_X25": ValueOf(syscall.IFT_X25), + "IFT_X25DDN": ValueOf(syscall.IFT_X25DDN), + "IFT_X25PLE": ValueOf(syscall.IFT_X25PLE), + "IFT_XETHER": ValueOf(syscall.IFT_XETHER), + "IGNBRK": ValueOf(syscall.IGNBRK), + "IGNCR": ValueOf(syscall.IGNCR), + "IGNPAR": ValueOf(syscall.IGNPAR), + "IMAXBEL": ValueOf(syscall.IMAXBEL), + "INLCR": ValueOf(syscall.INLCR), + "INPCK": ValueOf(syscall.INPCK), + "IN_CLASSA_HOST": ValueOf(syscall.IN_CLASSA_HOST), + "IN_CLASSA_MAX": ValueOf(syscall.IN_CLASSA_MAX), + "IN_CLASSA_NET": ValueOf(uint64(syscall.IN_CLASSA_NET)), + "IN_CLASSA_NSHIFT": ValueOf(syscall.IN_CLASSA_NSHIFT), + "IN_CLASSB_HOST": ValueOf(syscall.IN_CLASSB_HOST), + "IN_CLASSB_MAX": ValueOf(syscall.IN_CLASSB_MAX), + "IN_CLASSB_NET": ValueOf(uint64(syscall.IN_CLASSB_NET)), + "IN_CLASSB_NSHIFT": ValueOf(syscall.IN_CLASSB_NSHIFT), + "IN_CLASSC_HOST": ValueOf(syscall.IN_CLASSC_HOST), + "IN_CLASSC_NET": ValueOf(uint64(syscall.IN_CLASSC_NET)), + "IN_CLASSC_NSHIFT": ValueOf(syscall.IN_CLASSC_NSHIFT), + "IN_CLASSD_HOST": ValueOf(syscall.IN_CLASSD_HOST), + "IN_CLASSD_NET": ValueOf(uint64(syscall.IN_CLASSD_NET)), + "IN_CLASSD_NSHIFT": ValueOf(syscall.IN_CLASSD_NSHIFT), + "IN_LINKLOCALNETNUM": ValueOf(uint64(syscall.IN_LINKLOCALNETNUM)), + "IN_LOOPBACKNET": ValueOf(syscall.IN_LOOPBACKNET), + "IPPROTO_3PC": ValueOf(syscall.IPPROTO_3PC), + "IPPROTO_ADFS": ValueOf(syscall.IPPROTO_ADFS), + "IPPROTO_AH": ValueOf(syscall.IPPROTO_AH), + "IPPROTO_AHIP": ValueOf(syscall.IPPROTO_AHIP), + "IPPROTO_APES": ValueOf(syscall.IPPROTO_APES), + "IPPROTO_ARGUS": ValueOf(syscall.IPPROTO_ARGUS), + "IPPROTO_AX25": ValueOf(syscall.IPPROTO_AX25), + "IPPROTO_BHA": ValueOf(syscall.IPPROTO_BHA), + "IPPROTO_BLT": ValueOf(syscall.IPPROTO_BLT), + "IPPROTO_BRSATMON": ValueOf(syscall.IPPROTO_BRSATMON), + "IPPROTO_CFTP": ValueOf(syscall.IPPROTO_CFTP), + "IPPROTO_CHAOS": ValueOf(syscall.IPPROTO_CHAOS), + "IPPROTO_CMTP": ValueOf(syscall.IPPROTO_CMTP), + "IPPROTO_CPHB": ValueOf(syscall.IPPROTO_CPHB), + "IPPROTO_CPNX": ValueOf(syscall.IPPROTO_CPNX), + "IPPROTO_DDP": ValueOf(syscall.IPPROTO_DDP), + "IPPROTO_DGP": ValueOf(syscall.IPPROTO_DGP), + "IPPROTO_DIVERT": ValueOf(syscall.IPPROTO_DIVERT), + "IPPROTO_DONE": ValueOf(syscall.IPPROTO_DONE), + "IPPROTO_DSTOPTS": ValueOf(syscall.IPPROTO_DSTOPTS), + "IPPROTO_EGP": ValueOf(syscall.IPPROTO_EGP), + "IPPROTO_EMCON": ValueOf(syscall.IPPROTO_EMCON), + "IPPROTO_ENCAP": ValueOf(syscall.IPPROTO_ENCAP), + "IPPROTO_EON": ValueOf(syscall.IPPROTO_EON), + "IPPROTO_ESP": ValueOf(syscall.IPPROTO_ESP), + "IPPROTO_ETHERIP": ValueOf(syscall.IPPROTO_ETHERIP), + "IPPROTO_FRAGMENT": ValueOf(syscall.IPPROTO_FRAGMENT), + "IPPROTO_GGP": ValueOf(syscall.IPPROTO_GGP), + "IPPROTO_GMTP": ValueOf(syscall.IPPROTO_GMTP), + "IPPROTO_GRE": ValueOf(syscall.IPPROTO_GRE), + "IPPROTO_HELLO": ValueOf(syscall.IPPROTO_HELLO), + "IPPROTO_HMP": ValueOf(syscall.IPPROTO_HMP), + "IPPROTO_HOPOPTS": ValueOf(syscall.IPPROTO_HOPOPTS), + "IPPROTO_ICMP": ValueOf(syscall.IPPROTO_ICMP), + "IPPROTO_ICMPV6": ValueOf(syscall.IPPROTO_ICMPV6), + "IPPROTO_IDP": ValueOf(syscall.IPPROTO_IDP), + "IPPROTO_IDPR": ValueOf(syscall.IPPROTO_IDPR), + "IPPROTO_IDRP": ValueOf(syscall.IPPROTO_IDRP), + "IPPROTO_IGMP": ValueOf(syscall.IPPROTO_IGMP), + "IPPROTO_IGP": ValueOf(syscall.IPPROTO_IGP), + "IPPROTO_IGRP": ValueOf(syscall.IPPROTO_IGRP), + "IPPROTO_IL": ValueOf(syscall.IPPROTO_IL), + "IPPROTO_INLSP": ValueOf(syscall.IPPROTO_INLSP), + "IPPROTO_INP": ValueOf(syscall.IPPROTO_INP), + "IPPROTO_IP": ValueOf(syscall.IPPROTO_IP), + "IPPROTO_IPCOMP": ValueOf(syscall.IPPROTO_IPCOMP), + "IPPROTO_IPCV": ValueOf(syscall.IPPROTO_IPCV), + "IPPROTO_IPEIP": ValueOf(syscall.IPPROTO_IPEIP), + "IPPROTO_IPIP": ValueOf(syscall.IPPROTO_IPIP), + "IPPROTO_IPPC": ValueOf(syscall.IPPROTO_IPPC), + "IPPROTO_IPV4": ValueOf(syscall.IPPROTO_IPV4), + "IPPROTO_IPV6": ValueOf(syscall.IPPROTO_IPV6), + "IPPROTO_IRTP": ValueOf(syscall.IPPROTO_IRTP), + "IPPROTO_KRYPTOLAN": ValueOf(syscall.IPPROTO_KRYPTOLAN), + "IPPROTO_LARP": ValueOf(syscall.IPPROTO_LARP), + "IPPROTO_LEAF1": ValueOf(syscall.IPPROTO_LEAF1), + "IPPROTO_LEAF2": ValueOf(syscall.IPPROTO_LEAF2), + "IPPROTO_MAX": ValueOf(syscall.IPPROTO_MAX), + "IPPROTO_MAXID": ValueOf(syscall.IPPROTO_MAXID), + "IPPROTO_MEAS": ValueOf(syscall.IPPROTO_MEAS), + "IPPROTO_MHRP": ValueOf(syscall.IPPROTO_MHRP), + "IPPROTO_MICP": ValueOf(syscall.IPPROTO_MICP), + "IPPROTO_MTP": ValueOf(syscall.IPPROTO_MTP), + "IPPROTO_MUX": ValueOf(syscall.IPPROTO_MUX), + "IPPROTO_ND": ValueOf(syscall.IPPROTO_ND), + "IPPROTO_NHRP": ValueOf(syscall.IPPROTO_NHRP), + "IPPROTO_NONE": ValueOf(syscall.IPPROTO_NONE), + "IPPROTO_NSP": ValueOf(syscall.IPPROTO_NSP), + "IPPROTO_NVPII": ValueOf(syscall.IPPROTO_NVPII), + "IPPROTO_OSPFIGP": ValueOf(syscall.IPPROTO_OSPFIGP), + "IPPROTO_PGM": ValueOf(syscall.IPPROTO_PGM), + "IPPROTO_PIGP": ValueOf(syscall.IPPROTO_PIGP), + "IPPROTO_PIM": ValueOf(syscall.IPPROTO_PIM), + "IPPROTO_PRM": ValueOf(syscall.IPPROTO_PRM), + "IPPROTO_PUP": ValueOf(syscall.IPPROTO_PUP), + "IPPROTO_PVP": ValueOf(syscall.IPPROTO_PVP), + "IPPROTO_RAW": ValueOf(syscall.IPPROTO_RAW), + "IPPROTO_RCCMON": ValueOf(syscall.IPPROTO_RCCMON), + "IPPROTO_RDP": ValueOf(syscall.IPPROTO_RDP), + "IPPROTO_ROUTING": ValueOf(syscall.IPPROTO_ROUTING), + "IPPROTO_RSVP": ValueOf(syscall.IPPROTO_RSVP), + "IPPROTO_RVD": ValueOf(syscall.IPPROTO_RVD), + "IPPROTO_SATEXPAK": ValueOf(syscall.IPPROTO_SATEXPAK), + "IPPROTO_SATMON": ValueOf(syscall.IPPROTO_SATMON), + "IPPROTO_SCCSP": ValueOf(syscall.IPPROTO_SCCSP), + "IPPROTO_SCTP": ValueOf(syscall.IPPROTO_SCTP), + "IPPROTO_SDRP": ValueOf(syscall.IPPROTO_SDRP), + "IPPROTO_SEP": ValueOf(syscall.IPPROTO_SEP), + "IPPROTO_SRPC": ValueOf(syscall.IPPROTO_SRPC), + "IPPROTO_ST": ValueOf(syscall.IPPROTO_ST), + "IPPROTO_SVMTP": ValueOf(syscall.IPPROTO_SVMTP), + "IPPROTO_SWIPE": ValueOf(syscall.IPPROTO_SWIPE), + "IPPROTO_TCF": ValueOf(syscall.IPPROTO_TCF), + "IPPROTO_TCP": ValueOf(syscall.IPPROTO_TCP), + "IPPROTO_TP": ValueOf(syscall.IPPROTO_TP), + "IPPROTO_TPXX": ValueOf(syscall.IPPROTO_TPXX), + "IPPROTO_TRUNK1": ValueOf(syscall.IPPROTO_TRUNK1), + "IPPROTO_TRUNK2": ValueOf(syscall.IPPROTO_TRUNK2), + "IPPROTO_TTP": ValueOf(syscall.IPPROTO_TTP), + "IPPROTO_UDP": ValueOf(syscall.IPPROTO_UDP), + "IPPROTO_VINES": ValueOf(syscall.IPPROTO_VINES), + "IPPROTO_VISA": ValueOf(syscall.IPPROTO_VISA), + "IPPROTO_VMTP": ValueOf(syscall.IPPROTO_VMTP), + "IPPROTO_WBEXPAK": ValueOf(syscall.IPPROTO_WBEXPAK), + "IPPROTO_WBMON": ValueOf(syscall.IPPROTO_WBMON), + "IPPROTO_WSN": ValueOf(syscall.IPPROTO_WSN), + "IPPROTO_XNET": ValueOf(syscall.IPPROTO_XNET), + "IPPROTO_XTP": ValueOf(syscall.IPPROTO_XTP), + "IPV6_2292DSTOPTS": ValueOf(syscall.IPV6_2292DSTOPTS), + "IPV6_2292HOPLIMIT": ValueOf(syscall.IPV6_2292HOPLIMIT), + "IPV6_2292HOPOPTS": ValueOf(syscall.IPV6_2292HOPOPTS), + "IPV6_2292NEXTHOP": ValueOf(syscall.IPV6_2292NEXTHOP), + "IPV6_2292PKTINFO": ValueOf(syscall.IPV6_2292PKTINFO), + "IPV6_2292PKTOPTIONS": ValueOf(syscall.IPV6_2292PKTOPTIONS), + "IPV6_2292RTHDR": ValueOf(syscall.IPV6_2292RTHDR), + "IPV6_BINDV6ONLY": ValueOf(syscall.IPV6_BINDV6ONLY), + "IPV6_BOUND_IF": ValueOf(syscall.IPV6_BOUND_IF), + "IPV6_CHECKSUM": ValueOf(syscall.IPV6_CHECKSUM), + "IPV6_DEFAULT_MULTICAST_HOPS": ValueOf(syscall.IPV6_DEFAULT_MULTICAST_HOPS), + "IPV6_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IPV6_DEFAULT_MULTICAST_LOOP), + "IPV6_DEFHLIM": ValueOf(syscall.IPV6_DEFHLIM), + "IPV6_FAITH": ValueOf(syscall.IPV6_FAITH), + "IPV6_FLOWINFO_MASK": ValueOf(uint64(syscall.IPV6_FLOWINFO_MASK)), + "IPV6_FLOWLABEL_MASK": ValueOf(uint64(syscall.IPV6_FLOWLABEL_MASK)), + "IPV6_FRAGTTL": ValueOf(syscall.IPV6_FRAGTTL), + "IPV6_FW_ADD": ValueOf(syscall.IPV6_FW_ADD), + "IPV6_FW_DEL": ValueOf(syscall.IPV6_FW_DEL), + "IPV6_FW_FLUSH": ValueOf(syscall.IPV6_FW_FLUSH), + "IPV6_FW_GET": ValueOf(syscall.IPV6_FW_GET), + "IPV6_FW_ZERO": ValueOf(syscall.IPV6_FW_ZERO), + "IPV6_HLIMDEC": ValueOf(syscall.IPV6_HLIMDEC), + "IPV6_IPSEC_POLICY": ValueOf(syscall.IPV6_IPSEC_POLICY), + "IPV6_JOIN_GROUP": ValueOf(syscall.IPV6_JOIN_GROUP), + "IPV6_LEAVE_GROUP": ValueOf(syscall.IPV6_LEAVE_GROUP), + "IPV6_MAXHLIM": ValueOf(syscall.IPV6_MAXHLIM), + "IPV6_MAXOPTHDR": ValueOf(syscall.IPV6_MAXOPTHDR), + "IPV6_MAXPACKET": ValueOf(syscall.IPV6_MAXPACKET), + "IPV6_MAX_GROUP_SRC_FILTER": ValueOf(syscall.IPV6_MAX_GROUP_SRC_FILTER), + "IPV6_MAX_MEMBERSHIPS": ValueOf(syscall.IPV6_MAX_MEMBERSHIPS), + "IPV6_MAX_SOCK_SRC_FILTER": ValueOf(syscall.IPV6_MAX_SOCK_SRC_FILTER), + "IPV6_MIN_MEMBERSHIPS": ValueOf(syscall.IPV6_MIN_MEMBERSHIPS), + "IPV6_MMTU": ValueOf(syscall.IPV6_MMTU), + "IPV6_MULTICAST_HOPS": ValueOf(syscall.IPV6_MULTICAST_HOPS), + "IPV6_MULTICAST_IF": ValueOf(syscall.IPV6_MULTICAST_IF), + "IPV6_MULTICAST_LOOP": ValueOf(syscall.IPV6_MULTICAST_LOOP), + "IPV6_PORTRANGE": ValueOf(syscall.IPV6_PORTRANGE), + "IPV6_PORTRANGE_DEFAULT": ValueOf(syscall.IPV6_PORTRANGE_DEFAULT), + "IPV6_PORTRANGE_HIGH": ValueOf(syscall.IPV6_PORTRANGE_HIGH), + "IPV6_PORTRANGE_LOW": ValueOf(syscall.IPV6_PORTRANGE_LOW), + "IPV6_RECVTCLASS": ValueOf(syscall.IPV6_RECVTCLASS), + "IPV6_RTHDR_LOOSE": ValueOf(syscall.IPV6_RTHDR_LOOSE), + "IPV6_RTHDR_STRICT": ValueOf(syscall.IPV6_RTHDR_STRICT), + "IPV6_RTHDR_TYPE_0": ValueOf(syscall.IPV6_RTHDR_TYPE_0), + "IPV6_SOCKOPT_RESERVED1": ValueOf(syscall.IPV6_SOCKOPT_RESERVED1), + "IPV6_TCLASS": ValueOf(syscall.IPV6_TCLASS), + "IPV6_UNICAST_HOPS": ValueOf(syscall.IPV6_UNICAST_HOPS), + "IPV6_V6ONLY": ValueOf(syscall.IPV6_V6ONLY), + "IPV6_VERSION": ValueOf(syscall.IPV6_VERSION), + "IPV6_VERSION_MASK": ValueOf(syscall.IPV6_VERSION_MASK), + "IP_ADD_MEMBERSHIP": ValueOf(syscall.IP_ADD_MEMBERSHIP), + "IP_ADD_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_ADD_SOURCE_MEMBERSHIP), + "IP_BLOCK_SOURCE": ValueOf(syscall.IP_BLOCK_SOURCE), + "IP_BOUND_IF": ValueOf(syscall.IP_BOUND_IF), + "IP_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IP_DEFAULT_MULTICAST_LOOP), + "IP_DEFAULT_MULTICAST_TTL": ValueOf(syscall.IP_DEFAULT_MULTICAST_TTL), + "IP_DF": ValueOf(syscall.IP_DF), + "IP_DROP_MEMBERSHIP": ValueOf(syscall.IP_DROP_MEMBERSHIP), + "IP_DROP_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_DROP_SOURCE_MEMBERSHIP), + "IP_DUMMYNET_CONFIGURE": ValueOf(syscall.IP_DUMMYNET_CONFIGURE), + "IP_DUMMYNET_DEL": ValueOf(syscall.IP_DUMMYNET_DEL), + "IP_DUMMYNET_FLUSH": ValueOf(syscall.IP_DUMMYNET_FLUSH), + "IP_DUMMYNET_GET": ValueOf(syscall.IP_DUMMYNET_GET), + "IP_FAITH": ValueOf(syscall.IP_FAITH), + "IP_FW_ADD": ValueOf(syscall.IP_FW_ADD), + "IP_FW_DEL": ValueOf(syscall.IP_FW_DEL), + "IP_FW_FLUSH": ValueOf(syscall.IP_FW_FLUSH), + "IP_FW_GET": ValueOf(syscall.IP_FW_GET), + "IP_FW_RESETLOG": ValueOf(syscall.IP_FW_RESETLOG), + "IP_FW_ZERO": ValueOf(syscall.IP_FW_ZERO), + "IP_HDRINCL": ValueOf(syscall.IP_HDRINCL), + "IP_IPSEC_POLICY": ValueOf(syscall.IP_IPSEC_POLICY), + "IP_MAXPACKET": ValueOf(syscall.IP_MAXPACKET), + "IP_MAX_GROUP_SRC_FILTER": ValueOf(syscall.IP_MAX_GROUP_SRC_FILTER), + "IP_MAX_MEMBERSHIPS": ValueOf(syscall.IP_MAX_MEMBERSHIPS), + "IP_MAX_SOCK_MUTE_FILTER": ValueOf(syscall.IP_MAX_SOCK_MUTE_FILTER), + "IP_MAX_SOCK_SRC_FILTER": ValueOf(syscall.IP_MAX_SOCK_SRC_FILTER), + "IP_MF": ValueOf(syscall.IP_MF), + "IP_MIN_MEMBERSHIPS": ValueOf(syscall.IP_MIN_MEMBERSHIPS), + "IP_MSFILTER": ValueOf(syscall.IP_MSFILTER), + "IP_MSS": ValueOf(syscall.IP_MSS), + "IP_MULTICAST_IF": ValueOf(syscall.IP_MULTICAST_IF), + "IP_MULTICAST_IFINDEX": ValueOf(syscall.IP_MULTICAST_IFINDEX), + "IP_MULTICAST_LOOP": ValueOf(syscall.IP_MULTICAST_LOOP), + "IP_MULTICAST_TTL": ValueOf(syscall.IP_MULTICAST_TTL), + "IP_MULTICAST_VIF": ValueOf(syscall.IP_MULTICAST_VIF), + "IP_NAT__XXX": ValueOf(syscall.IP_NAT__XXX), + "IP_OFFMASK": ValueOf(syscall.IP_OFFMASK), + "IP_OLD_FW_ADD": ValueOf(syscall.IP_OLD_FW_ADD), + "IP_OLD_FW_DEL": ValueOf(syscall.IP_OLD_FW_DEL), + "IP_OLD_FW_FLUSH": ValueOf(syscall.IP_OLD_FW_FLUSH), + "IP_OLD_FW_GET": ValueOf(syscall.IP_OLD_FW_GET), + "IP_OLD_FW_RESETLOG": ValueOf(syscall.IP_OLD_FW_RESETLOG), + "IP_OLD_FW_ZERO": ValueOf(syscall.IP_OLD_FW_ZERO), + "IP_OPTIONS": ValueOf(syscall.IP_OPTIONS), + "IP_PKTINFO": ValueOf(syscall.IP_PKTINFO), + "IP_PORTRANGE": ValueOf(syscall.IP_PORTRANGE), + "IP_PORTRANGE_DEFAULT": ValueOf(syscall.IP_PORTRANGE_DEFAULT), + "IP_PORTRANGE_HIGH": ValueOf(syscall.IP_PORTRANGE_HIGH), + "IP_PORTRANGE_LOW": ValueOf(syscall.IP_PORTRANGE_LOW), + "IP_RECVDSTADDR": ValueOf(syscall.IP_RECVDSTADDR), + "IP_RECVIF": ValueOf(syscall.IP_RECVIF), + "IP_RECVOPTS": ValueOf(syscall.IP_RECVOPTS), + "IP_RECVPKTINFO": ValueOf(syscall.IP_RECVPKTINFO), + "IP_RECVRETOPTS": ValueOf(syscall.IP_RECVRETOPTS), + "IP_RECVTTL": ValueOf(syscall.IP_RECVTTL), + "IP_RETOPTS": ValueOf(syscall.IP_RETOPTS), + "IP_RF": ValueOf(syscall.IP_RF), + "IP_RSVP_OFF": ValueOf(syscall.IP_RSVP_OFF), + "IP_RSVP_ON": ValueOf(syscall.IP_RSVP_ON), + "IP_RSVP_VIF_OFF": ValueOf(syscall.IP_RSVP_VIF_OFF), + "IP_RSVP_VIF_ON": ValueOf(syscall.IP_RSVP_VIF_ON), + "IP_STRIPHDR": ValueOf(syscall.IP_STRIPHDR), + "IP_TOS": ValueOf(syscall.IP_TOS), + "IP_TRAFFIC_MGT_BACKGROUND": ValueOf(syscall.IP_TRAFFIC_MGT_BACKGROUND), + "IP_TTL": ValueOf(syscall.IP_TTL), + "IP_UNBLOCK_SOURCE": ValueOf(syscall.IP_UNBLOCK_SOURCE), + "ISIG": ValueOf(syscall.ISIG), + "ISTRIP": ValueOf(syscall.ISTRIP), + "IUTF8": ValueOf(syscall.IUTF8), + "IXANY": ValueOf(syscall.IXANY), + "IXOFF": ValueOf(syscall.IXOFF), + "IXON": ValueOf(syscall.IXON), + "ImplementsGetwd": ValueOf(syscall.ImplementsGetwd), + "Issetugid": ValueOf(syscall.Issetugid), + "Kevent": ValueOf(syscall.Kevent), + "Kill": ValueOf(syscall.Kill), + "Kqueue": ValueOf(syscall.Kqueue), + "LOCK_EX": ValueOf(syscall.LOCK_EX), + "LOCK_NB": ValueOf(syscall.LOCK_NB), + "LOCK_SH": ValueOf(syscall.LOCK_SH), + "LOCK_UN": ValueOf(syscall.LOCK_UN), + "Lchown": ValueOf(syscall.Lchown), + "Link": ValueOf(syscall.Link), + "Listen": ValueOf(syscall.Listen), + "Lstat": ValueOf(syscall.Lstat), + "MADV_CAN_REUSE": ValueOf(syscall.MADV_CAN_REUSE), + "MADV_DONTNEED": ValueOf(syscall.MADV_DONTNEED), + "MADV_FREE": ValueOf(syscall.MADV_FREE), + "MADV_FREE_REUSABLE": ValueOf(syscall.MADV_FREE_REUSABLE), + "MADV_FREE_REUSE": ValueOf(syscall.MADV_FREE_REUSE), + "MADV_NORMAL": ValueOf(syscall.MADV_NORMAL), + "MADV_RANDOM": ValueOf(syscall.MADV_RANDOM), + "MADV_SEQUENTIAL": ValueOf(syscall.MADV_SEQUENTIAL), + "MADV_WILLNEED": ValueOf(syscall.MADV_WILLNEED), + "MADV_ZERO_WIRED_PAGES": ValueOf(syscall.MADV_ZERO_WIRED_PAGES), + "MAP_ANON": ValueOf(syscall.MAP_ANON), + "MAP_COPY": ValueOf(syscall.MAP_COPY), + "MAP_FILE": ValueOf(syscall.MAP_FILE), + "MAP_FIXED": ValueOf(syscall.MAP_FIXED), + "MAP_HASSEMAPHORE": ValueOf(syscall.MAP_HASSEMAPHORE), + "MAP_JIT": ValueOf(syscall.MAP_JIT), + "MAP_NOCACHE": ValueOf(syscall.MAP_NOCACHE), + "MAP_NOEXTEND": ValueOf(syscall.MAP_NOEXTEND), + "MAP_NORESERVE": ValueOf(syscall.MAP_NORESERVE), + "MAP_PRIVATE": ValueOf(syscall.MAP_PRIVATE), + "MAP_RENAME": ValueOf(syscall.MAP_RENAME), + "MAP_RESERVED0080": ValueOf(syscall.MAP_RESERVED0080), + "MAP_SHARED": ValueOf(syscall.MAP_SHARED), + "MCL_CURRENT": ValueOf(syscall.MCL_CURRENT), + "MCL_FUTURE": ValueOf(syscall.MCL_FUTURE), + "MSG_CTRUNC": ValueOf(syscall.MSG_CTRUNC), + "MSG_DONTROUTE": ValueOf(syscall.MSG_DONTROUTE), + "MSG_DONTWAIT": ValueOf(syscall.MSG_DONTWAIT), + "MSG_EOF": ValueOf(syscall.MSG_EOF), + "MSG_EOR": ValueOf(syscall.MSG_EOR), + "MSG_FLUSH": ValueOf(syscall.MSG_FLUSH), + "MSG_HAVEMORE": ValueOf(syscall.MSG_HAVEMORE), + "MSG_HOLD": ValueOf(syscall.MSG_HOLD), + "MSG_NEEDSA": ValueOf(syscall.MSG_NEEDSA), + "MSG_OOB": ValueOf(syscall.MSG_OOB), + "MSG_PEEK": ValueOf(syscall.MSG_PEEK), + "MSG_RCVMORE": ValueOf(syscall.MSG_RCVMORE), + "MSG_SEND": ValueOf(syscall.MSG_SEND), + "MSG_TRUNC": ValueOf(syscall.MSG_TRUNC), + "MSG_WAITALL": ValueOf(syscall.MSG_WAITALL), + "MSG_WAITSTREAM": ValueOf(syscall.MSG_WAITSTREAM), + "MS_ASYNC": ValueOf(syscall.MS_ASYNC), + "MS_DEACTIVATE": ValueOf(syscall.MS_DEACTIVATE), + "MS_INVALIDATE": ValueOf(syscall.MS_INVALIDATE), + "MS_KILLPAGES": ValueOf(syscall.MS_KILLPAGES), + "MS_SYNC": ValueOf(syscall.MS_SYNC), + "Mkdir": ValueOf(syscall.Mkdir), + "Mkfifo": ValueOf(syscall.Mkfifo), + "Mknod": ValueOf(syscall.Mknod), + "Mlock": ValueOf(syscall.Mlock), + "Mlockall": ValueOf(syscall.Mlockall), + "Mmap": ValueOf(syscall.Mmap), + "Mprotect": ValueOf(syscall.Mprotect), + "Munlock": ValueOf(syscall.Munlock), + "Munlockall": ValueOf(syscall.Munlockall), + "Munmap": ValueOf(syscall.Munmap), + "NAME_MAX": ValueOf(syscall.NAME_MAX), + "NET_RT_DUMP": ValueOf(syscall.NET_RT_DUMP), + "NET_RT_DUMP2": ValueOf(syscall.NET_RT_DUMP2), + "NET_RT_FLAGS": ValueOf(syscall.NET_RT_FLAGS), + "NET_RT_IFLIST": ValueOf(syscall.NET_RT_IFLIST), + "NET_RT_IFLIST2": ValueOf(syscall.NET_RT_IFLIST2), + "NET_RT_MAXID": ValueOf(syscall.NET_RT_MAXID), + "NET_RT_STAT": ValueOf(syscall.NET_RT_STAT), + "NET_RT_TRASH": ValueOf(syscall.NET_RT_TRASH), + "NOFLSH": ValueOf(uint64(syscall.NOFLSH)), + "NOTE_ABSOLUTE": ValueOf(syscall.NOTE_ABSOLUTE), + "NOTE_ATTRIB": ValueOf(syscall.NOTE_ATTRIB), + "NOTE_CHILD": ValueOf(syscall.NOTE_CHILD), + "NOTE_DELETE": ValueOf(syscall.NOTE_DELETE), + "NOTE_EXEC": ValueOf(syscall.NOTE_EXEC), + "NOTE_EXIT": ValueOf(uint64(syscall.NOTE_EXIT)), + "NOTE_EXITSTATUS": ValueOf(syscall.NOTE_EXITSTATUS), + "NOTE_EXTEND": ValueOf(syscall.NOTE_EXTEND), + "NOTE_FFAND": ValueOf(syscall.NOTE_FFAND), + "NOTE_FFCOPY": ValueOf(uint64(syscall.NOTE_FFCOPY)), + "NOTE_FFCTRLMASK": ValueOf(uint64(syscall.NOTE_FFCTRLMASK)), + "NOTE_FFLAGSMASK": ValueOf(syscall.NOTE_FFLAGSMASK), + "NOTE_FFNOP": ValueOf(syscall.NOTE_FFNOP), + "NOTE_FFOR": ValueOf(uint64(syscall.NOTE_FFOR)), + "NOTE_FORK": ValueOf(syscall.NOTE_FORK), + "NOTE_LINK": ValueOf(syscall.NOTE_LINK), + "NOTE_LOWAT": ValueOf(syscall.NOTE_LOWAT), + "NOTE_NONE": ValueOf(syscall.NOTE_NONE), + "NOTE_NSECONDS": ValueOf(syscall.NOTE_NSECONDS), + "NOTE_PCTRLMASK": ValueOf(syscall.NOTE_PCTRLMASK), + "NOTE_PDATAMASK": ValueOf(syscall.NOTE_PDATAMASK), + "NOTE_REAP": ValueOf(syscall.NOTE_REAP), + "NOTE_RENAME": ValueOf(syscall.NOTE_RENAME), + "NOTE_RESOURCEEND": ValueOf(syscall.NOTE_RESOURCEEND), + "NOTE_REVOKE": ValueOf(syscall.NOTE_REVOKE), + "NOTE_SECONDS": ValueOf(syscall.NOTE_SECONDS), + "NOTE_SIGNAL": ValueOf(syscall.NOTE_SIGNAL), + "NOTE_TRACK": ValueOf(syscall.NOTE_TRACK), + "NOTE_TRACKERR": ValueOf(syscall.NOTE_TRACKERR), + "NOTE_TRIGGER": ValueOf(syscall.NOTE_TRIGGER), + "NOTE_USECONDS": ValueOf(syscall.NOTE_USECONDS), + "NOTE_VM_ERROR": ValueOf(syscall.NOTE_VM_ERROR), + "NOTE_VM_PRESSURE": ValueOf(uint64(syscall.NOTE_VM_PRESSURE)), + "NOTE_VM_PRESSURE_SUDDEN_TERMINATE": ValueOf(syscall.NOTE_VM_PRESSURE_SUDDEN_TERMINATE), + "NOTE_VM_PRESSURE_TERMINATE": ValueOf(syscall.NOTE_VM_PRESSURE_TERMINATE), + "NOTE_WRITE": ValueOf(syscall.NOTE_WRITE), + "NsecToTimespec": ValueOf(syscall.NsecToTimespec), + "NsecToTimeval": ValueOf(syscall.NsecToTimeval), + "OCRNL": ValueOf(syscall.OCRNL), + "OFDEL": ValueOf(syscall.OFDEL), + "OFILL": ValueOf(syscall.OFILL), + "ONLCR": ValueOf(syscall.ONLCR), + "ONLRET": ValueOf(syscall.ONLRET), + "ONOCR": ValueOf(syscall.ONOCR), + "ONOEOT": ValueOf(syscall.ONOEOT), + "OPOST": ValueOf(syscall.OPOST), + "O_ACCMODE": ValueOf(syscall.O_ACCMODE), + "O_ALERT": ValueOf(syscall.O_ALERT), + "O_APPEND": ValueOf(syscall.O_APPEND), + "O_ASYNC": ValueOf(syscall.O_ASYNC), + "O_CLOEXEC": ValueOf(syscall.O_CLOEXEC), + "O_CREAT": ValueOf(syscall.O_CREAT), + "O_DIRECTORY": ValueOf(syscall.O_DIRECTORY), + "O_DSYNC": ValueOf(syscall.O_DSYNC), + "O_EVTONLY": ValueOf(syscall.O_EVTONLY), + "O_EXCL": ValueOf(syscall.O_EXCL), + "O_EXLOCK": ValueOf(syscall.O_EXLOCK), + "O_FSYNC": ValueOf(syscall.O_FSYNC), + "O_NDELAY": ValueOf(syscall.O_NDELAY), + "O_NOCTTY": ValueOf(syscall.O_NOCTTY), + "O_NOFOLLOW": ValueOf(syscall.O_NOFOLLOW), + "O_NONBLOCK": ValueOf(syscall.O_NONBLOCK), + "O_POPUP": ValueOf(uint64(syscall.O_POPUP)), + "O_RDONLY": ValueOf(syscall.O_RDONLY), + "O_RDWR": ValueOf(syscall.O_RDWR), + "O_SHLOCK": ValueOf(syscall.O_SHLOCK), + "O_SYMLINK": ValueOf(syscall.O_SYMLINK), + "O_SYNC": ValueOf(syscall.O_SYNC), + "O_TRUNC": ValueOf(syscall.O_TRUNC), + "O_WRONLY": ValueOf(syscall.O_WRONLY), + "Open": ValueOf(syscall.Open), + "PARENB": ValueOf(syscall.PARENB), + "PARMRK": ValueOf(syscall.PARMRK), + "PARODD": ValueOf(syscall.PARODD), + "PENDIN": ValueOf(syscall.PENDIN), + "PRIO_PGRP": ValueOf(syscall.PRIO_PGRP), + "PRIO_PROCESS": ValueOf(syscall.PRIO_PROCESS), + "PRIO_USER": ValueOf(syscall.PRIO_USER), + "PROT_EXEC": ValueOf(syscall.PROT_EXEC), + "PROT_NONE": ValueOf(syscall.PROT_NONE), + "PROT_READ": ValueOf(syscall.PROT_READ), + "PROT_WRITE": ValueOf(syscall.PROT_WRITE), + "PTRACE_CONT": ValueOf(syscall.PTRACE_CONT), + "PTRACE_KILL": ValueOf(syscall.PTRACE_KILL), + "PTRACE_TRACEME": ValueOf(syscall.PTRACE_TRACEME), + "PT_ATTACH": ValueOf(syscall.PT_ATTACH), + "PT_ATTACHEXC": ValueOf(syscall.PT_ATTACHEXC), + "PT_CONTINUE": ValueOf(syscall.PT_CONTINUE), + "PT_DENY_ATTACH": ValueOf(syscall.PT_DENY_ATTACH), + "PT_DETACH": ValueOf(syscall.PT_DETACH), + "PT_FIRSTMACH": ValueOf(syscall.PT_FIRSTMACH), + "PT_FORCEQUOTA": ValueOf(syscall.PT_FORCEQUOTA), + "PT_KILL": ValueOf(syscall.PT_KILL), + "PT_READ_D": ValueOf(syscall.PT_READ_D), + "PT_READ_I": ValueOf(syscall.PT_READ_I), + "PT_READ_U": ValueOf(syscall.PT_READ_U), + "PT_SIGEXC": ValueOf(syscall.PT_SIGEXC), + "PT_STEP": ValueOf(syscall.PT_STEP), + "PT_THUPDATE": ValueOf(syscall.PT_THUPDATE), + "PT_TRACE_ME": ValueOf(syscall.PT_TRACE_ME), + "PT_WRITE_D": ValueOf(syscall.PT_WRITE_D), + "PT_WRITE_I": ValueOf(syscall.PT_WRITE_I), + "PT_WRITE_U": ValueOf(syscall.PT_WRITE_U), + "ParseDirent": ValueOf(syscall.ParseDirent), + "ParseRoutingMessage": ValueOf(syscall.ParseRoutingMessage), + "ParseRoutingSockaddr": ValueOf(syscall.ParseRoutingSockaddr), + "ParseSocketControlMessage": ValueOf(syscall.ParseSocketControlMessage), + "ParseUnixRights": ValueOf(syscall.ParseUnixRights), + "Pathconf": ValueOf(syscall.Pathconf), + "Pipe": ValueOf(syscall.Pipe), + "Pread": ValueOf(syscall.Pread), + "PtraceAttach": ValueOf(syscall.PtraceAttach), + "PtraceDetach": ValueOf(syscall.PtraceDetach), + "Pwrite": ValueOf(syscall.Pwrite), + "RLIMIT_AS": ValueOf(syscall.RLIMIT_AS), + "RLIMIT_CORE": ValueOf(syscall.RLIMIT_CORE), + "RLIMIT_CPU": ValueOf(syscall.RLIMIT_CPU), + "RLIMIT_DATA": ValueOf(syscall.RLIMIT_DATA), + "RLIMIT_FSIZE": ValueOf(syscall.RLIMIT_FSIZE), + "RLIMIT_NOFILE": ValueOf(syscall.RLIMIT_NOFILE), + "RLIMIT_STACK": ValueOf(syscall.RLIMIT_STACK), + "RLIM_INFINITY": ValueOf(int64(syscall.RLIM_INFINITY)), + "RTAX_AUTHOR": ValueOf(syscall.RTAX_AUTHOR), + "RTAX_BRD": ValueOf(syscall.RTAX_BRD), + "RTAX_DST": ValueOf(syscall.RTAX_DST), + "RTAX_GATEWAY": ValueOf(syscall.RTAX_GATEWAY), + "RTAX_GENMASK": ValueOf(syscall.RTAX_GENMASK), + "RTAX_IFA": ValueOf(syscall.RTAX_IFA), + "RTAX_IFP": ValueOf(syscall.RTAX_IFP), + "RTAX_MAX": ValueOf(syscall.RTAX_MAX), + "RTAX_NETMASK": ValueOf(syscall.RTAX_NETMASK), + "RTA_AUTHOR": ValueOf(syscall.RTA_AUTHOR), + "RTA_BRD": ValueOf(syscall.RTA_BRD), + "RTA_DST": ValueOf(syscall.RTA_DST), + "RTA_GATEWAY": ValueOf(syscall.RTA_GATEWAY), + "RTA_GENMASK": ValueOf(syscall.RTA_GENMASK), + "RTA_IFA": ValueOf(syscall.RTA_IFA), + "RTA_IFP": ValueOf(syscall.RTA_IFP), + "RTA_NETMASK": ValueOf(syscall.RTA_NETMASK), + "RTF_BLACKHOLE": ValueOf(syscall.RTF_BLACKHOLE), + "RTF_BROADCAST": ValueOf(syscall.RTF_BROADCAST), + "RTF_CLONING": ValueOf(syscall.RTF_CLONING), + "RTF_CONDEMNED": ValueOf(syscall.RTF_CONDEMNED), + "RTF_DELCLONE": ValueOf(syscall.RTF_DELCLONE), + "RTF_DONE": ValueOf(syscall.RTF_DONE), + "RTF_DYNAMIC": ValueOf(syscall.RTF_DYNAMIC), + "RTF_GATEWAY": ValueOf(syscall.RTF_GATEWAY), + "RTF_HOST": ValueOf(syscall.RTF_HOST), + "RTF_IFREF": ValueOf(syscall.RTF_IFREF), + "RTF_IFSCOPE": ValueOf(syscall.RTF_IFSCOPE), + "RTF_LLINFO": ValueOf(syscall.RTF_LLINFO), + "RTF_LOCAL": ValueOf(syscall.RTF_LOCAL), + "RTF_MODIFIED": ValueOf(syscall.RTF_MODIFIED), + "RTF_MULTICAST": ValueOf(syscall.RTF_MULTICAST), + "RTF_PINNED": ValueOf(syscall.RTF_PINNED), + "RTF_PRCLONING": ValueOf(syscall.RTF_PRCLONING), + "RTF_PROTO1": ValueOf(syscall.RTF_PROTO1), + "RTF_PROTO2": ValueOf(syscall.RTF_PROTO2), + "RTF_PROTO3": ValueOf(syscall.RTF_PROTO3), + "RTF_REJECT": ValueOf(syscall.RTF_REJECT), + "RTF_STATIC": ValueOf(syscall.RTF_STATIC), + "RTF_UP": ValueOf(syscall.RTF_UP), + "RTF_WASCLONED": ValueOf(syscall.RTF_WASCLONED), + "RTF_XRESOLVE": ValueOf(syscall.RTF_XRESOLVE), + "RTM_ADD": ValueOf(syscall.RTM_ADD), + "RTM_CHANGE": ValueOf(syscall.RTM_CHANGE), + "RTM_DELADDR": ValueOf(syscall.RTM_DELADDR), + "RTM_DELETE": ValueOf(syscall.RTM_DELETE), + "RTM_DELMADDR": ValueOf(syscall.RTM_DELMADDR), + "RTM_GET": ValueOf(syscall.RTM_GET), + "RTM_GET2": ValueOf(syscall.RTM_GET2), + "RTM_IFINFO": ValueOf(syscall.RTM_IFINFO), + "RTM_IFINFO2": ValueOf(syscall.RTM_IFINFO2), + "RTM_LOCK": ValueOf(syscall.RTM_LOCK), + "RTM_LOSING": ValueOf(syscall.RTM_LOSING), + "RTM_MISS": ValueOf(syscall.RTM_MISS), + "RTM_NEWADDR": ValueOf(syscall.RTM_NEWADDR), + "RTM_NEWMADDR": ValueOf(syscall.RTM_NEWMADDR), + "RTM_NEWMADDR2": ValueOf(syscall.RTM_NEWMADDR2), + "RTM_OLDADD": ValueOf(syscall.RTM_OLDADD), + "RTM_OLDDEL": ValueOf(syscall.RTM_OLDDEL), + "RTM_REDIRECT": ValueOf(syscall.RTM_REDIRECT), + "RTM_RESOLVE": ValueOf(syscall.RTM_RESOLVE), + "RTM_RTTUNIT": ValueOf(syscall.RTM_RTTUNIT), + "RTM_VERSION": ValueOf(syscall.RTM_VERSION), + "RTV_EXPIRE": ValueOf(syscall.RTV_EXPIRE), + "RTV_HOPCOUNT": ValueOf(syscall.RTV_HOPCOUNT), + "RTV_MTU": ValueOf(syscall.RTV_MTU), + "RTV_RPIPE": ValueOf(syscall.RTV_RPIPE), + "RTV_RTT": ValueOf(syscall.RTV_RTT), + "RTV_RTTVAR": ValueOf(syscall.RTV_RTTVAR), + "RTV_SPIPE": ValueOf(syscall.RTV_SPIPE), + "RTV_SSTHRESH": ValueOf(syscall.RTV_SSTHRESH), + "RUSAGE_CHILDREN": ValueOf(syscall.RUSAGE_CHILDREN), + "RUSAGE_SELF": ValueOf(syscall.RUSAGE_SELF), + "RawSyscall": ValueOf(syscall.RawSyscall), + "RawSyscall6": ValueOf(syscall.RawSyscall6), + "Read": ValueOf(syscall.Read), + "ReadDirent": ValueOf(syscall.ReadDirent), + "Readlink": ValueOf(syscall.Readlink), + "Recvfrom": ValueOf(syscall.Recvfrom), + "Recvmsg": ValueOf(syscall.Recvmsg), + "Rename": ValueOf(syscall.Rename), + "Revoke": ValueOf(syscall.Revoke), + "Rmdir": ValueOf(syscall.Rmdir), + "RouteRIB": ValueOf(syscall.RouteRIB), + "SCM_CREDS": ValueOf(syscall.SCM_CREDS), + "SCM_RIGHTS": ValueOf(syscall.SCM_RIGHTS), + "SCM_TIMESTAMP": ValueOf(syscall.SCM_TIMESTAMP), + "SCM_TIMESTAMP_MONOTONIC": ValueOf(syscall.SCM_TIMESTAMP_MONOTONIC), + "SHUT_RD": ValueOf(syscall.SHUT_RD), + "SHUT_RDWR": ValueOf(syscall.SHUT_RDWR), + "SHUT_WR": ValueOf(syscall.SHUT_WR), + "SIGABRT": ValueOf(syscall.SIGABRT), + "SIGALRM": ValueOf(syscall.SIGALRM), + "SIGBUS": ValueOf(syscall.SIGBUS), + "SIGCHLD": ValueOf(syscall.SIGCHLD), + "SIGCONT": ValueOf(syscall.SIGCONT), + "SIGEMT": ValueOf(syscall.SIGEMT), + "SIGFPE": ValueOf(syscall.SIGFPE), + "SIGHUP": ValueOf(syscall.SIGHUP), + "SIGILL": ValueOf(syscall.SIGILL), + "SIGINFO": ValueOf(syscall.SIGINFO), + "SIGINT": ValueOf(syscall.SIGINT), + "SIGIO": ValueOf(syscall.SIGIO), + "SIGIOT": ValueOf(syscall.SIGIOT), + "SIGKILL": ValueOf(syscall.SIGKILL), + "SIGPIPE": ValueOf(syscall.SIGPIPE), + "SIGPROF": ValueOf(syscall.SIGPROF), + "SIGQUIT": ValueOf(syscall.SIGQUIT), + "SIGSEGV": ValueOf(syscall.SIGSEGV), + "SIGSTOP": ValueOf(syscall.SIGSTOP), + "SIGSYS": ValueOf(syscall.SIGSYS), + "SIGTERM": ValueOf(syscall.SIGTERM), + "SIGTRAP": ValueOf(syscall.SIGTRAP), + "SIGTSTP": ValueOf(syscall.SIGTSTP), + "SIGTTIN": ValueOf(syscall.SIGTTIN), + "SIGTTOU": ValueOf(syscall.SIGTTOU), + "SIGURG": ValueOf(syscall.SIGURG), + "SIGUSR1": ValueOf(syscall.SIGUSR1), + "SIGUSR2": ValueOf(syscall.SIGUSR2), + "SIGVTALRM": ValueOf(syscall.SIGVTALRM), + "SIGWINCH": ValueOf(syscall.SIGWINCH), + "SIGXCPU": ValueOf(syscall.SIGXCPU), + "SIGXFSZ": ValueOf(syscall.SIGXFSZ), + "SIOCADDMULTI": ValueOf(uint64(syscall.SIOCADDMULTI)), + "SIOCAIFADDR": ValueOf(uint64(syscall.SIOCAIFADDR)), + "SIOCALIFADDR": ValueOf(uint64(syscall.SIOCALIFADDR)), + "SIOCARPIPLL": ValueOf(uint64(syscall.SIOCARPIPLL)), + "SIOCATMARK": ValueOf(syscall.SIOCATMARK), + "SIOCAUTOADDR": ValueOf(uint64(syscall.SIOCAUTOADDR)), + "SIOCAUTONETMASK": ValueOf(uint64(syscall.SIOCAUTONETMASK)), + "SIOCDELMULTI": ValueOf(uint64(syscall.SIOCDELMULTI)), + "SIOCDIFADDR": ValueOf(uint64(syscall.SIOCDIFADDR)), + "SIOCDIFPHYADDR": ValueOf(uint64(syscall.SIOCDIFPHYADDR)), + "SIOCDLIFADDR": ValueOf(uint64(syscall.SIOCDLIFADDR)), + "SIOCGDRVSPEC": ValueOf(uint64(syscall.SIOCGDRVSPEC)), + "SIOCGETSGCNT": ValueOf(uint64(syscall.SIOCGETSGCNT)), + "SIOCGETVIFCNT": ValueOf(uint64(syscall.SIOCGETVIFCNT)), + "SIOCGETVLAN": ValueOf(uint64(syscall.SIOCGETVLAN)), + "SIOCGHIWAT": ValueOf(syscall.SIOCGHIWAT), + "SIOCGIFADDR": ValueOf(uint64(syscall.SIOCGIFADDR)), + "SIOCGIFALTMTU": ValueOf(uint64(syscall.SIOCGIFALTMTU)), + "SIOCGIFASYNCMAP": ValueOf(uint64(syscall.SIOCGIFASYNCMAP)), + "SIOCGIFBOND": ValueOf(uint64(syscall.SIOCGIFBOND)), + "SIOCGIFBRDADDR": ValueOf(uint64(syscall.SIOCGIFBRDADDR)), + "SIOCGIFCAP": ValueOf(uint64(syscall.SIOCGIFCAP)), + "SIOCGIFCONF": ValueOf(uint64(syscall.SIOCGIFCONF)), + "SIOCGIFDEVMTU": ValueOf(uint64(syscall.SIOCGIFDEVMTU)), + "SIOCGIFDSTADDR": ValueOf(uint64(syscall.SIOCGIFDSTADDR)), + "SIOCGIFFLAGS": ValueOf(uint64(syscall.SIOCGIFFLAGS)), + "SIOCGIFGENERIC": ValueOf(uint64(syscall.SIOCGIFGENERIC)), + "SIOCGIFKPI": ValueOf(uint64(syscall.SIOCGIFKPI)), + "SIOCGIFMAC": ValueOf(uint64(syscall.SIOCGIFMAC)), + "SIOCGIFMEDIA": ValueOf(uint64(syscall.SIOCGIFMEDIA)), + "SIOCGIFMETRIC": ValueOf(uint64(syscall.SIOCGIFMETRIC)), + "SIOCGIFMTU": ValueOf(uint64(syscall.SIOCGIFMTU)), + "SIOCGIFNETMASK": ValueOf(uint64(syscall.SIOCGIFNETMASK)), + "SIOCGIFPDSTADDR": ValueOf(uint64(syscall.SIOCGIFPDSTADDR)), + "SIOCGIFPHYS": ValueOf(uint64(syscall.SIOCGIFPHYS)), + "SIOCGIFPSRCADDR": ValueOf(uint64(syscall.SIOCGIFPSRCADDR)), + "SIOCGIFSTATUS": ValueOf(uint64(syscall.SIOCGIFSTATUS)), + "SIOCGIFVLAN": ValueOf(uint64(syscall.SIOCGIFVLAN)), + "SIOCGIFWAKEFLAGS": ValueOf(uint64(syscall.SIOCGIFWAKEFLAGS)), + "SIOCGLIFADDR": ValueOf(uint64(syscall.SIOCGLIFADDR)), + "SIOCGLIFPHYADDR": ValueOf(uint64(syscall.SIOCGLIFPHYADDR)), + "SIOCGLOWAT": ValueOf(syscall.SIOCGLOWAT), + "SIOCGPGRP": ValueOf(syscall.SIOCGPGRP), + "SIOCIFCREATE": ValueOf(uint64(syscall.SIOCIFCREATE)), + "SIOCIFCREATE2": ValueOf(uint64(syscall.SIOCIFCREATE2)), + "SIOCIFDESTROY": ValueOf(uint64(syscall.SIOCIFDESTROY)), + "SIOCRSLVMULTI": ValueOf(uint64(syscall.SIOCRSLVMULTI)), + "SIOCSDRVSPEC": ValueOf(uint64(syscall.SIOCSDRVSPEC)), + "SIOCSETVLAN": ValueOf(uint64(syscall.SIOCSETVLAN)), + "SIOCSHIWAT": ValueOf(uint64(syscall.SIOCSHIWAT)), + "SIOCSIFADDR": ValueOf(uint64(syscall.SIOCSIFADDR)), + "SIOCSIFALTMTU": ValueOf(uint64(syscall.SIOCSIFALTMTU)), + "SIOCSIFASYNCMAP": ValueOf(uint64(syscall.SIOCSIFASYNCMAP)), + "SIOCSIFBOND": ValueOf(uint64(syscall.SIOCSIFBOND)), + "SIOCSIFBRDADDR": ValueOf(uint64(syscall.SIOCSIFBRDADDR)), + "SIOCSIFCAP": ValueOf(uint64(syscall.SIOCSIFCAP)), + "SIOCSIFDSTADDR": ValueOf(uint64(syscall.SIOCSIFDSTADDR)), + "SIOCSIFFLAGS": ValueOf(uint64(syscall.SIOCSIFFLAGS)), + "SIOCSIFGENERIC": ValueOf(uint64(syscall.SIOCSIFGENERIC)), + "SIOCSIFKPI": ValueOf(uint64(syscall.SIOCSIFKPI)), + "SIOCSIFLLADDR": ValueOf(uint64(syscall.SIOCSIFLLADDR)), + "SIOCSIFMAC": ValueOf(uint64(syscall.SIOCSIFMAC)), + "SIOCSIFMEDIA": ValueOf(uint64(syscall.SIOCSIFMEDIA)), + "SIOCSIFMETRIC": ValueOf(uint64(syscall.SIOCSIFMETRIC)), + "SIOCSIFMTU": ValueOf(uint64(syscall.SIOCSIFMTU)), + "SIOCSIFNETMASK": ValueOf(uint64(syscall.SIOCSIFNETMASK)), + "SIOCSIFPHYADDR": ValueOf(uint64(syscall.SIOCSIFPHYADDR)), + "SIOCSIFPHYS": ValueOf(uint64(syscall.SIOCSIFPHYS)), + "SIOCSIFVLAN": ValueOf(uint64(syscall.SIOCSIFVLAN)), + "SIOCSLIFPHYADDR": ValueOf(uint64(syscall.SIOCSLIFPHYADDR)), + "SIOCSLOWAT": ValueOf(uint64(syscall.SIOCSLOWAT)), + "SIOCSPGRP": ValueOf(uint64(syscall.SIOCSPGRP)), + "SOCK_DGRAM": ValueOf(syscall.SOCK_DGRAM), + "SOCK_MAXADDRLEN": ValueOf(syscall.SOCK_MAXADDRLEN), + "SOCK_RAW": ValueOf(syscall.SOCK_RAW), + "SOCK_RDM": ValueOf(syscall.SOCK_RDM), + "SOCK_SEQPACKET": ValueOf(syscall.SOCK_SEQPACKET), + "SOCK_STREAM": ValueOf(syscall.SOCK_STREAM), + "SOL_SOCKET": ValueOf(syscall.SOL_SOCKET), + "SOMAXCONN": ValueOf(syscall.SOMAXCONN), + "SO_ACCEPTCONN": ValueOf(syscall.SO_ACCEPTCONN), + "SO_BROADCAST": ValueOf(syscall.SO_BROADCAST), + "SO_DEBUG": ValueOf(syscall.SO_DEBUG), + "SO_DONTROUTE": ValueOf(syscall.SO_DONTROUTE), + "SO_DONTTRUNC": ValueOf(syscall.SO_DONTTRUNC), + "SO_ERROR": ValueOf(syscall.SO_ERROR), + "SO_KEEPALIVE": ValueOf(syscall.SO_KEEPALIVE), + "SO_LABEL": ValueOf(syscall.SO_LABEL), + "SO_LINGER": ValueOf(syscall.SO_LINGER), + "SO_LINGER_SEC": ValueOf(syscall.SO_LINGER_SEC), + "SO_NKE": ValueOf(syscall.SO_NKE), + "SO_NOADDRERR": ValueOf(syscall.SO_NOADDRERR), + "SO_NOSIGPIPE": ValueOf(syscall.SO_NOSIGPIPE), + "SO_NOTIFYCONFLICT": ValueOf(syscall.SO_NOTIFYCONFLICT), + "SO_NP_EXTENSIONS": ValueOf(syscall.SO_NP_EXTENSIONS), + "SO_NREAD": ValueOf(syscall.SO_NREAD), + "SO_NWRITE": ValueOf(syscall.SO_NWRITE), + "SO_OOBINLINE": ValueOf(syscall.SO_OOBINLINE), + "SO_PEERLABEL": ValueOf(syscall.SO_PEERLABEL), + "SO_RANDOMPORT": ValueOf(syscall.SO_RANDOMPORT), + "SO_RCVBUF": ValueOf(syscall.SO_RCVBUF), + "SO_RCVLOWAT": ValueOf(syscall.SO_RCVLOWAT), + "SO_RCVTIMEO": ValueOf(syscall.SO_RCVTIMEO), + "SO_RESTRICTIONS": ValueOf(syscall.SO_RESTRICTIONS), + "SO_RESTRICT_DENYIN": ValueOf(syscall.SO_RESTRICT_DENYIN), + "SO_RESTRICT_DENYOUT": ValueOf(syscall.SO_RESTRICT_DENYOUT), + "SO_RESTRICT_DENYSET": ValueOf(uint64(syscall.SO_RESTRICT_DENYSET)), + "SO_REUSEADDR": ValueOf(syscall.SO_REUSEADDR), + "SO_REUSEPORT": ValueOf(syscall.SO_REUSEPORT), + "SO_REUSESHAREUID": ValueOf(syscall.SO_REUSESHAREUID), + "SO_SNDBUF": ValueOf(syscall.SO_SNDBUF), + "SO_SNDLOWAT": ValueOf(syscall.SO_SNDLOWAT), + "SO_SNDTIMEO": ValueOf(syscall.SO_SNDTIMEO), + "SO_TIMESTAMP": ValueOf(syscall.SO_TIMESTAMP), + "SO_TIMESTAMP_MONOTONIC": ValueOf(syscall.SO_TIMESTAMP_MONOTONIC), + "SO_TYPE": ValueOf(syscall.SO_TYPE), + "SO_UPCALLCLOSEWAIT": ValueOf(syscall.SO_UPCALLCLOSEWAIT), + "SO_USELOOPBACK": ValueOf(syscall.SO_USELOOPBACK), + "SO_WANTMORE": ValueOf(syscall.SO_WANTMORE), + "SO_WANTOOBFLAG": ValueOf(syscall.SO_WANTOOBFLAG), + "SYS_ACCEPT": ValueOf(syscall.SYS_ACCEPT), + "SYS_ACCEPT_NOCANCEL": ValueOf(syscall.SYS_ACCEPT_NOCANCEL), + "SYS_ACCESS": ValueOf(syscall.SYS_ACCESS), + "SYS_ACCESS_EXTENDED": ValueOf(syscall.SYS_ACCESS_EXTENDED), + "SYS_ACCT": ValueOf(syscall.SYS_ACCT), + "SYS_ADD_PROFIL": ValueOf(syscall.SYS_ADD_PROFIL), + "SYS_ADJTIME": ValueOf(syscall.SYS_ADJTIME), + "SYS_AIO_CANCEL": ValueOf(syscall.SYS_AIO_CANCEL), + "SYS_AIO_ERROR": ValueOf(syscall.SYS_AIO_ERROR), + "SYS_AIO_FSYNC": ValueOf(syscall.SYS_AIO_FSYNC), + "SYS_AIO_READ": ValueOf(syscall.SYS_AIO_READ), + "SYS_AIO_RETURN": ValueOf(syscall.SYS_AIO_RETURN), + "SYS_AIO_SUSPEND": ValueOf(syscall.SYS_AIO_SUSPEND), + "SYS_AIO_SUSPEND_NOCANCEL": ValueOf(syscall.SYS_AIO_SUSPEND_NOCANCEL), + "SYS_AIO_WRITE": ValueOf(syscall.SYS_AIO_WRITE), + "SYS_ATGETMSG": ValueOf(syscall.SYS_ATGETMSG), + "SYS_ATPGETREQ": ValueOf(syscall.SYS_ATPGETREQ), + "SYS_ATPGETRSP": ValueOf(syscall.SYS_ATPGETRSP), + "SYS_ATPSNDREQ": ValueOf(syscall.SYS_ATPSNDREQ), + "SYS_ATPSNDRSP": ValueOf(syscall.SYS_ATPSNDRSP), + "SYS_ATPUTMSG": ValueOf(syscall.SYS_ATPUTMSG), + "SYS_ATSOCKET": ValueOf(syscall.SYS_ATSOCKET), + "SYS_AUDIT": ValueOf(syscall.SYS_AUDIT), + "SYS_AUDITCTL": ValueOf(syscall.SYS_AUDITCTL), + "SYS_AUDITON": ValueOf(syscall.SYS_AUDITON), + "SYS_AUDIT_SESSION_JOIN": ValueOf(syscall.SYS_AUDIT_SESSION_JOIN), + "SYS_AUDIT_SESSION_PORT": ValueOf(syscall.SYS_AUDIT_SESSION_PORT), + "SYS_AUDIT_SESSION_SELF": ValueOf(syscall.SYS_AUDIT_SESSION_SELF), + "SYS_BIND": ValueOf(syscall.SYS_BIND), + "SYS_BSDTHREAD_CREATE": ValueOf(syscall.SYS_BSDTHREAD_CREATE), + "SYS_BSDTHREAD_REGISTER": ValueOf(syscall.SYS_BSDTHREAD_REGISTER), + "SYS_BSDTHREAD_TERMINATE": ValueOf(syscall.SYS_BSDTHREAD_TERMINATE), + "SYS_CHDIR": ValueOf(syscall.SYS_CHDIR), + "SYS_CHFLAGS": ValueOf(syscall.SYS_CHFLAGS), + "SYS_CHMOD": ValueOf(syscall.SYS_CHMOD), + "SYS_CHMOD_EXTENDED": ValueOf(syscall.SYS_CHMOD_EXTENDED), + "SYS_CHOWN": ValueOf(syscall.SYS_CHOWN), + "SYS_CHROOT": ValueOf(syscall.SYS_CHROOT), + "SYS_CHUD": ValueOf(syscall.SYS_CHUD), + "SYS_CLOSE": ValueOf(syscall.SYS_CLOSE), + "SYS_CLOSE_NOCANCEL": ValueOf(syscall.SYS_CLOSE_NOCANCEL), + "SYS_CONNECT": ValueOf(syscall.SYS_CONNECT), + "SYS_CONNECT_NOCANCEL": ValueOf(syscall.SYS_CONNECT_NOCANCEL), + "SYS_COPYFILE": ValueOf(syscall.SYS_COPYFILE), + "SYS_CSOPS": ValueOf(syscall.SYS_CSOPS), + "SYS_DELETE": ValueOf(syscall.SYS_DELETE), + "SYS_DUP": ValueOf(syscall.SYS_DUP), + "SYS_DUP2": ValueOf(syscall.SYS_DUP2), + "SYS_EXCHANGEDATA": ValueOf(syscall.SYS_EXCHANGEDATA), + "SYS_EXECVE": ValueOf(syscall.SYS_EXECVE), + "SYS_EXIT": ValueOf(syscall.SYS_EXIT), + "SYS_FCHDIR": ValueOf(syscall.SYS_FCHDIR), + "SYS_FCHFLAGS": ValueOf(syscall.SYS_FCHFLAGS), + "SYS_FCHMOD": ValueOf(syscall.SYS_FCHMOD), + "SYS_FCHMOD_EXTENDED": ValueOf(syscall.SYS_FCHMOD_EXTENDED), + "SYS_FCHOWN": ValueOf(syscall.SYS_FCHOWN), + "SYS_FCNTL": ValueOf(syscall.SYS_FCNTL), + "SYS_FCNTL_NOCANCEL": ValueOf(syscall.SYS_FCNTL_NOCANCEL), + "SYS_FDATASYNC": ValueOf(syscall.SYS_FDATASYNC), + "SYS_FFSCTL": ValueOf(syscall.SYS_FFSCTL), + "SYS_FGETATTRLIST": ValueOf(syscall.SYS_FGETATTRLIST), + "SYS_FGETXATTR": ValueOf(syscall.SYS_FGETXATTR), + "SYS_FHOPEN": ValueOf(syscall.SYS_FHOPEN), + "SYS_FILEPORT_MAKEFD": ValueOf(syscall.SYS_FILEPORT_MAKEFD), + "SYS_FILEPORT_MAKEPORT": ValueOf(syscall.SYS_FILEPORT_MAKEPORT), + "SYS_FLISTXATTR": ValueOf(syscall.SYS_FLISTXATTR), + "SYS_FLOCK": ValueOf(syscall.SYS_FLOCK), + "SYS_FORK": ValueOf(syscall.SYS_FORK), + "SYS_FPATHCONF": ValueOf(syscall.SYS_FPATHCONF), + "SYS_FREMOVEXATTR": ValueOf(syscall.SYS_FREMOVEXATTR), + "SYS_FSCTL": ValueOf(syscall.SYS_FSCTL), + "SYS_FSETATTRLIST": ValueOf(syscall.SYS_FSETATTRLIST), + "SYS_FSETXATTR": ValueOf(syscall.SYS_FSETXATTR), + "SYS_FSGETPATH": ValueOf(syscall.SYS_FSGETPATH), + "SYS_FSTAT": ValueOf(syscall.SYS_FSTAT), + "SYS_FSTAT64": ValueOf(syscall.SYS_FSTAT64), + "SYS_FSTAT64_EXTENDED": ValueOf(syscall.SYS_FSTAT64_EXTENDED), + "SYS_FSTATFS": ValueOf(syscall.SYS_FSTATFS), + "SYS_FSTATFS64": ValueOf(syscall.SYS_FSTATFS64), + "SYS_FSTATV": ValueOf(syscall.SYS_FSTATV), + "SYS_FSTAT_EXTENDED": ValueOf(syscall.SYS_FSTAT_EXTENDED), + "SYS_FSYNC": ValueOf(syscall.SYS_FSYNC), + "SYS_FSYNC_NOCANCEL": ValueOf(syscall.SYS_FSYNC_NOCANCEL), + "SYS_FTRUNCATE": ValueOf(syscall.SYS_FTRUNCATE), + "SYS_FUTIMES": ValueOf(syscall.SYS_FUTIMES), + "SYS_GETATTRLIST": ValueOf(syscall.SYS_GETATTRLIST), + "SYS_GETAUDIT": ValueOf(syscall.SYS_GETAUDIT), + "SYS_GETAUDIT_ADDR": ValueOf(syscall.SYS_GETAUDIT_ADDR), + "SYS_GETAUID": ValueOf(syscall.SYS_GETAUID), + "SYS_GETDIRENTRIES": ValueOf(syscall.SYS_GETDIRENTRIES), + "SYS_GETDIRENTRIES64": ValueOf(syscall.SYS_GETDIRENTRIES64), + "SYS_GETDIRENTRIESATTR": ValueOf(syscall.SYS_GETDIRENTRIESATTR), + "SYS_GETDTABLESIZE": ValueOf(syscall.SYS_GETDTABLESIZE), + "SYS_GETEGID": ValueOf(syscall.SYS_GETEGID), + "SYS_GETEUID": ValueOf(syscall.SYS_GETEUID), + "SYS_GETFH": ValueOf(syscall.SYS_GETFH), + "SYS_GETFSSTAT": ValueOf(syscall.SYS_GETFSSTAT), + "SYS_GETFSSTAT64": ValueOf(syscall.SYS_GETFSSTAT64), + "SYS_GETGID": ValueOf(syscall.SYS_GETGID), + "SYS_GETGROUPS": ValueOf(syscall.SYS_GETGROUPS), + "SYS_GETHOSTUUID": ValueOf(syscall.SYS_GETHOSTUUID), + "SYS_GETITIMER": ValueOf(syscall.SYS_GETITIMER), + "SYS_GETLCID": ValueOf(syscall.SYS_GETLCID), + "SYS_GETLOGIN": ValueOf(syscall.SYS_GETLOGIN), + "SYS_GETPEERNAME": ValueOf(syscall.SYS_GETPEERNAME), + "SYS_GETPGID": ValueOf(syscall.SYS_GETPGID), + "SYS_GETPGRP": ValueOf(syscall.SYS_GETPGRP), + "SYS_GETPID": ValueOf(syscall.SYS_GETPID), + "SYS_GETPPID": ValueOf(syscall.SYS_GETPPID), + "SYS_GETPRIORITY": ValueOf(syscall.SYS_GETPRIORITY), + "SYS_GETRLIMIT": ValueOf(syscall.SYS_GETRLIMIT), + "SYS_GETRUSAGE": ValueOf(syscall.SYS_GETRUSAGE), + "SYS_GETSGROUPS": ValueOf(syscall.SYS_GETSGROUPS), + "SYS_GETSID": ValueOf(syscall.SYS_GETSID), + "SYS_GETSOCKNAME": ValueOf(syscall.SYS_GETSOCKNAME), + "SYS_GETSOCKOPT": ValueOf(syscall.SYS_GETSOCKOPT), + "SYS_GETTID": ValueOf(syscall.SYS_GETTID), + "SYS_GETTIMEOFDAY": ValueOf(syscall.SYS_GETTIMEOFDAY), + "SYS_GETUID": ValueOf(syscall.SYS_GETUID), + "SYS_GETWGROUPS": ValueOf(syscall.SYS_GETWGROUPS), + "SYS_GETXATTR": ValueOf(syscall.SYS_GETXATTR), + "SYS_IDENTITYSVC": ValueOf(syscall.SYS_IDENTITYSVC), + "SYS_INITGROUPS": ValueOf(syscall.SYS_INITGROUPS), + "SYS_IOCTL": ValueOf(syscall.SYS_IOCTL), + "SYS_IOPOLICYSYS": ValueOf(syscall.SYS_IOPOLICYSYS), + "SYS_ISSETUGID": ValueOf(syscall.SYS_ISSETUGID), + "SYS_KDEBUG_TRACE": ValueOf(syscall.SYS_KDEBUG_TRACE), + "SYS_KEVENT": ValueOf(syscall.SYS_KEVENT), + "SYS_KEVENT64": ValueOf(syscall.SYS_KEVENT64), + "SYS_KILL": ValueOf(syscall.SYS_KILL), + "SYS_KQUEUE": ValueOf(syscall.SYS_KQUEUE), + "SYS_LCHOWN": ValueOf(syscall.SYS_LCHOWN), + "SYS_LINK": ValueOf(syscall.SYS_LINK), + "SYS_LIO_LISTIO": ValueOf(syscall.SYS_LIO_LISTIO), + "SYS_LISTEN": ValueOf(syscall.SYS_LISTEN), + "SYS_LISTXATTR": ValueOf(syscall.SYS_LISTXATTR), + "SYS_LSEEK": ValueOf(syscall.SYS_LSEEK), + "SYS_LSTAT": ValueOf(syscall.SYS_LSTAT), + "SYS_LSTAT64": ValueOf(syscall.SYS_LSTAT64), + "SYS_LSTAT64_EXTENDED": ValueOf(syscall.SYS_LSTAT64_EXTENDED), + "SYS_LSTATV": ValueOf(syscall.SYS_LSTATV), + "SYS_LSTAT_EXTENDED": ValueOf(syscall.SYS_LSTAT_EXTENDED), + "SYS_MADVISE": ValueOf(syscall.SYS_MADVISE), + "SYS_MAXSYSCALL": ValueOf(syscall.SYS_MAXSYSCALL), + "SYS_MINCORE": ValueOf(syscall.SYS_MINCORE), + "SYS_MINHERIT": ValueOf(syscall.SYS_MINHERIT), + "SYS_MKCOMPLEX": ValueOf(syscall.SYS_MKCOMPLEX), + "SYS_MKDIR": ValueOf(syscall.SYS_MKDIR), + "SYS_MKDIR_EXTENDED": ValueOf(syscall.SYS_MKDIR_EXTENDED), + "SYS_MKFIFO": ValueOf(syscall.SYS_MKFIFO), + "SYS_MKFIFO_EXTENDED": ValueOf(syscall.SYS_MKFIFO_EXTENDED), + "SYS_MKNOD": ValueOf(syscall.SYS_MKNOD), + "SYS_MLOCK": ValueOf(syscall.SYS_MLOCK), + "SYS_MLOCKALL": ValueOf(syscall.SYS_MLOCKALL), + "SYS_MMAP": ValueOf(syscall.SYS_MMAP), + "SYS_MODWATCH": ValueOf(syscall.SYS_MODWATCH), + "SYS_MOUNT": ValueOf(syscall.SYS_MOUNT), + "SYS_MPROTECT": ValueOf(syscall.SYS_MPROTECT), + "SYS_MSGCTL": ValueOf(syscall.SYS_MSGCTL), + "SYS_MSGGET": ValueOf(syscall.SYS_MSGGET), + "SYS_MSGRCV": ValueOf(syscall.SYS_MSGRCV), + "SYS_MSGRCV_NOCANCEL": ValueOf(syscall.SYS_MSGRCV_NOCANCEL), + "SYS_MSGSND": ValueOf(syscall.SYS_MSGSND), + "SYS_MSGSND_NOCANCEL": ValueOf(syscall.SYS_MSGSND_NOCANCEL), + "SYS_MSGSYS": ValueOf(syscall.SYS_MSGSYS), + "SYS_MSYNC": ValueOf(syscall.SYS_MSYNC), + "SYS_MSYNC_NOCANCEL": ValueOf(syscall.SYS_MSYNC_NOCANCEL), + "SYS_MUNLOCK": ValueOf(syscall.SYS_MUNLOCK), + "SYS_MUNLOCKALL": ValueOf(syscall.SYS_MUNLOCKALL), + "SYS_MUNMAP": ValueOf(syscall.SYS_MUNMAP), + "SYS_NFSCLNT": ValueOf(syscall.SYS_NFSCLNT), + "SYS_NFSSVC": ValueOf(syscall.SYS_NFSSVC), + "SYS_OPEN": ValueOf(syscall.SYS_OPEN), + "SYS_OPEN_EXTENDED": ValueOf(syscall.SYS_OPEN_EXTENDED), + "SYS_OPEN_NOCANCEL": ValueOf(syscall.SYS_OPEN_NOCANCEL), + "SYS_PATHCONF": ValueOf(syscall.SYS_PATHCONF), + "SYS_PID_HIBERNATE": ValueOf(syscall.SYS_PID_HIBERNATE), + "SYS_PID_RESUME": ValueOf(syscall.SYS_PID_RESUME), + "SYS_PID_SHUTDOWN_SOCKETS": ValueOf(syscall.SYS_PID_SHUTDOWN_SOCKETS), + "SYS_PID_SUSPEND": ValueOf(syscall.SYS_PID_SUSPEND), + "SYS_PIPE": ValueOf(syscall.SYS_PIPE), + "SYS_POLL": ValueOf(syscall.SYS_POLL), + "SYS_POLL_NOCANCEL": ValueOf(syscall.SYS_POLL_NOCANCEL), + "SYS_POSIX_SPAWN": ValueOf(syscall.SYS_POSIX_SPAWN), + "SYS_PREAD": ValueOf(syscall.SYS_PREAD), + "SYS_PREAD_NOCANCEL": ValueOf(syscall.SYS_PREAD_NOCANCEL), + "SYS_PROCESS_POLICY": ValueOf(syscall.SYS_PROCESS_POLICY), + "SYS_PROC_INFO": ValueOf(syscall.SYS_PROC_INFO), + "SYS_PROFIL": ValueOf(syscall.SYS_PROFIL), + "SYS_PSYNCH_CVBROAD": ValueOf(syscall.SYS_PSYNCH_CVBROAD), + "SYS_PSYNCH_CVCLRPREPOST": ValueOf(syscall.SYS_PSYNCH_CVCLRPREPOST), + "SYS_PSYNCH_CVSIGNAL": ValueOf(syscall.SYS_PSYNCH_CVSIGNAL), + "SYS_PSYNCH_CVWAIT": ValueOf(syscall.SYS_PSYNCH_CVWAIT), + "SYS_PSYNCH_MUTEXDROP": ValueOf(syscall.SYS_PSYNCH_MUTEXDROP), + "SYS_PSYNCH_MUTEXWAIT": ValueOf(syscall.SYS_PSYNCH_MUTEXWAIT), + "SYS_PSYNCH_RW_DOWNGRADE": ValueOf(syscall.SYS_PSYNCH_RW_DOWNGRADE), + "SYS_PSYNCH_RW_LONGRDLOCK": ValueOf(syscall.SYS_PSYNCH_RW_LONGRDLOCK), + "SYS_PSYNCH_RW_RDLOCK": ValueOf(syscall.SYS_PSYNCH_RW_RDLOCK), + "SYS_PSYNCH_RW_UNLOCK": ValueOf(syscall.SYS_PSYNCH_RW_UNLOCK), + "SYS_PSYNCH_RW_UNLOCK2": ValueOf(syscall.SYS_PSYNCH_RW_UNLOCK2), + "SYS_PSYNCH_RW_UPGRADE": ValueOf(syscall.SYS_PSYNCH_RW_UPGRADE), + "SYS_PSYNCH_RW_WRLOCK": ValueOf(syscall.SYS_PSYNCH_RW_WRLOCK), + "SYS_PSYNCH_RW_YIELDWRLOCK": ValueOf(syscall.SYS_PSYNCH_RW_YIELDWRLOCK), + "SYS_PTRACE": ValueOf(syscall.SYS_PTRACE), + "SYS_PWRITE": ValueOf(syscall.SYS_PWRITE), + "SYS_PWRITE_NOCANCEL": ValueOf(syscall.SYS_PWRITE_NOCANCEL), + "SYS_QUOTACTL": ValueOf(syscall.SYS_QUOTACTL), + "SYS_READ": ValueOf(syscall.SYS_READ), + "SYS_READLINK": ValueOf(syscall.SYS_READLINK), + "SYS_READV": ValueOf(syscall.SYS_READV), + "SYS_READV_NOCANCEL": ValueOf(syscall.SYS_READV_NOCANCEL), + "SYS_READ_NOCANCEL": ValueOf(syscall.SYS_READ_NOCANCEL), + "SYS_REBOOT": ValueOf(syscall.SYS_REBOOT), + "SYS_RECVFROM": ValueOf(syscall.SYS_RECVFROM), + "SYS_RECVFROM_NOCANCEL": ValueOf(syscall.SYS_RECVFROM_NOCANCEL), + "SYS_RECVMSG": ValueOf(syscall.SYS_RECVMSG), + "SYS_RECVMSG_NOCANCEL": ValueOf(syscall.SYS_RECVMSG_NOCANCEL), + "SYS_REMOVEXATTR": ValueOf(syscall.SYS_REMOVEXATTR), + "SYS_RENAME": ValueOf(syscall.SYS_RENAME), + "SYS_REVOKE": ValueOf(syscall.SYS_REVOKE), + "SYS_RMDIR": ValueOf(syscall.SYS_RMDIR), + "SYS_SEARCHFS": ValueOf(syscall.SYS_SEARCHFS), + "SYS_SELECT": ValueOf(syscall.SYS_SELECT), + "SYS_SELECT_NOCANCEL": ValueOf(syscall.SYS_SELECT_NOCANCEL), + "SYS_SEMCTL": ValueOf(syscall.SYS_SEMCTL), + "SYS_SEMGET": ValueOf(syscall.SYS_SEMGET), + "SYS_SEMOP": ValueOf(syscall.SYS_SEMOP), + "SYS_SEMSYS": ValueOf(syscall.SYS_SEMSYS), + "SYS_SEM_CLOSE": ValueOf(syscall.SYS_SEM_CLOSE), + "SYS_SEM_DESTROY": ValueOf(syscall.SYS_SEM_DESTROY), + "SYS_SEM_GETVALUE": ValueOf(syscall.SYS_SEM_GETVALUE), + "SYS_SEM_INIT": ValueOf(syscall.SYS_SEM_INIT), + "SYS_SEM_OPEN": ValueOf(syscall.SYS_SEM_OPEN), + "SYS_SEM_POST": ValueOf(syscall.SYS_SEM_POST), + "SYS_SEM_TRYWAIT": ValueOf(syscall.SYS_SEM_TRYWAIT), + "SYS_SEM_UNLINK": ValueOf(syscall.SYS_SEM_UNLINK), + "SYS_SEM_WAIT": ValueOf(syscall.SYS_SEM_WAIT), + "SYS_SEM_WAIT_NOCANCEL": ValueOf(syscall.SYS_SEM_WAIT_NOCANCEL), + "SYS_SENDFILE": ValueOf(syscall.SYS_SENDFILE), + "SYS_SENDMSG": ValueOf(syscall.SYS_SENDMSG), + "SYS_SENDMSG_NOCANCEL": ValueOf(syscall.SYS_SENDMSG_NOCANCEL), + "SYS_SENDTO": ValueOf(syscall.SYS_SENDTO), + "SYS_SENDTO_NOCANCEL": ValueOf(syscall.SYS_SENDTO_NOCANCEL), + "SYS_SETATTRLIST": ValueOf(syscall.SYS_SETATTRLIST), + "SYS_SETAUDIT": ValueOf(syscall.SYS_SETAUDIT), + "SYS_SETAUDIT_ADDR": ValueOf(syscall.SYS_SETAUDIT_ADDR), + "SYS_SETAUID": ValueOf(syscall.SYS_SETAUID), + "SYS_SETEGID": ValueOf(syscall.SYS_SETEGID), + "SYS_SETEUID": ValueOf(syscall.SYS_SETEUID), + "SYS_SETGID": ValueOf(syscall.SYS_SETGID), + "SYS_SETGROUPS": ValueOf(syscall.SYS_SETGROUPS), + "SYS_SETITIMER": ValueOf(syscall.SYS_SETITIMER), + "SYS_SETLCID": ValueOf(syscall.SYS_SETLCID), + "SYS_SETLOGIN": ValueOf(syscall.SYS_SETLOGIN), + "SYS_SETPGID": ValueOf(syscall.SYS_SETPGID), + "SYS_SETPRIORITY": ValueOf(syscall.SYS_SETPRIORITY), + "SYS_SETPRIVEXEC": ValueOf(syscall.SYS_SETPRIVEXEC), + "SYS_SETREGID": ValueOf(syscall.SYS_SETREGID), + "SYS_SETREUID": ValueOf(syscall.SYS_SETREUID), + "SYS_SETRLIMIT": ValueOf(syscall.SYS_SETRLIMIT), + "SYS_SETSGROUPS": ValueOf(syscall.SYS_SETSGROUPS), + "SYS_SETSID": ValueOf(syscall.SYS_SETSID), + "SYS_SETSOCKOPT": ValueOf(syscall.SYS_SETSOCKOPT), + "SYS_SETTID": ValueOf(syscall.SYS_SETTID), + "SYS_SETTID_WITH_PID": ValueOf(syscall.SYS_SETTID_WITH_PID), + "SYS_SETTIMEOFDAY": ValueOf(syscall.SYS_SETTIMEOFDAY), + "SYS_SETUID": ValueOf(syscall.SYS_SETUID), + "SYS_SETWGROUPS": ValueOf(syscall.SYS_SETWGROUPS), + "SYS_SETXATTR": ValueOf(syscall.SYS_SETXATTR), + "SYS_SHARED_REGION_CHECK_NP": ValueOf(syscall.SYS_SHARED_REGION_CHECK_NP), + "SYS_SHARED_REGION_MAP_AND_SLIDE_NP": ValueOf(syscall.SYS_SHARED_REGION_MAP_AND_SLIDE_NP), + "SYS_SHMAT": ValueOf(syscall.SYS_SHMAT), + "SYS_SHMCTL": ValueOf(syscall.SYS_SHMCTL), + "SYS_SHMDT": ValueOf(syscall.SYS_SHMDT), + "SYS_SHMGET": ValueOf(syscall.SYS_SHMGET), + "SYS_SHMSYS": ValueOf(syscall.SYS_SHMSYS), + "SYS_SHM_OPEN": ValueOf(syscall.SYS_SHM_OPEN), + "SYS_SHM_UNLINK": ValueOf(syscall.SYS_SHM_UNLINK), + "SYS_SHUTDOWN": ValueOf(syscall.SYS_SHUTDOWN), + "SYS_SIGACTION": ValueOf(syscall.SYS_SIGACTION), + "SYS_SIGALTSTACK": ValueOf(syscall.SYS_SIGALTSTACK), + "SYS_SIGPENDING": ValueOf(syscall.SYS_SIGPENDING), + "SYS_SIGPROCMASK": ValueOf(syscall.SYS_SIGPROCMASK), + "SYS_SIGRETURN": ValueOf(syscall.SYS_SIGRETURN), + "SYS_SIGSUSPEND": ValueOf(syscall.SYS_SIGSUSPEND), + "SYS_SIGSUSPEND_NOCANCEL": ValueOf(syscall.SYS_SIGSUSPEND_NOCANCEL), + "SYS_SOCKET": ValueOf(syscall.SYS_SOCKET), + "SYS_SOCKETPAIR": ValueOf(syscall.SYS_SOCKETPAIR), + "SYS_STACK_SNAPSHOT": ValueOf(syscall.SYS_STACK_SNAPSHOT), + "SYS_STAT": ValueOf(syscall.SYS_STAT), + "SYS_STAT64": ValueOf(syscall.SYS_STAT64), + "SYS_STAT64_EXTENDED": ValueOf(syscall.SYS_STAT64_EXTENDED), + "SYS_STATFS": ValueOf(syscall.SYS_STATFS), + "SYS_STATFS64": ValueOf(syscall.SYS_STATFS64), + "SYS_STATV": ValueOf(syscall.SYS_STATV), + "SYS_STAT_EXTENDED": ValueOf(syscall.SYS_STAT_EXTENDED), + "SYS_SWAPON": ValueOf(syscall.SYS_SWAPON), + "SYS_SYMLINK": ValueOf(syscall.SYS_SYMLINK), + "SYS_SYNC": ValueOf(syscall.SYS_SYNC), + "SYS_SYSCALL": ValueOf(syscall.SYS_SYSCALL), + "SYS_THREAD_SELFID": ValueOf(syscall.SYS_THREAD_SELFID), + "SYS_TRUNCATE": ValueOf(syscall.SYS_TRUNCATE), + "SYS_UMASK": ValueOf(syscall.SYS_UMASK), + "SYS_UMASK_EXTENDED": ValueOf(syscall.SYS_UMASK_EXTENDED), + "SYS_UNDELETE": ValueOf(syscall.SYS_UNDELETE), + "SYS_UNLINK": ValueOf(syscall.SYS_UNLINK), + "SYS_UNMOUNT": ValueOf(syscall.SYS_UNMOUNT), + "SYS_UTIMES": ValueOf(syscall.SYS_UTIMES), + "SYS_VFORK": ValueOf(syscall.SYS_VFORK), + "SYS_VM_PRESSURE_MONITOR": ValueOf(syscall.SYS_VM_PRESSURE_MONITOR), + "SYS_WAIT4": ValueOf(syscall.SYS_WAIT4), + "SYS_WAIT4_NOCANCEL": ValueOf(syscall.SYS_WAIT4_NOCANCEL), + "SYS_WAITEVENT": ValueOf(syscall.SYS_WAITEVENT), + "SYS_WAITID": ValueOf(syscall.SYS_WAITID), + "SYS_WAITID_NOCANCEL": ValueOf(syscall.SYS_WAITID_NOCANCEL), + "SYS_WATCHEVENT": ValueOf(syscall.SYS_WATCHEVENT), + "SYS_WORKQ_KERNRETURN": ValueOf(syscall.SYS_WORKQ_KERNRETURN), + "SYS_WORKQ_OPEN": ValueOf(syscall.SYS_WORKQ_OPEN), + "SYS_WRITE": ValueOf(syscall.SYS_WRITE), + "SYS_WRITEV": ValueOf(syscall.SYS_WRITEV), + "SYS_WRITEV_NOCANCEL": ValueOf(syscall.SYS_WRITEV_NOCANCEL), + "SYS_WRITE_NOCANCEL": ValueOf(syscall.SYS_WRITE_NOCANCEL), + "SYS___DISABLE_THREADSIGNAL": ValueOf(syscall.SYS___DISABLE_THREADSIGNAL), + "SYS___MAC_EXECVE": ValueOf(syscall.SYS___MAC_EXECVE), + "SYS___MAC_GETFSSTAT": ValueOf(syscall.SYS___MAC_GETFSSTAT), + "SYS___MAC_GET_FD": ValueOf(syscall.SYS___MAC_GET_FD), + "SYS___MAC_GET_FILE": ValueOf(syscall.SYS___MAC_GET_FILE), + "SYS___MAC_GET_LCID": ValueOf(syscall.SYS___MAC_GET_LCID), + "SYS___MAC_GET_LCTX": ValueOf(syscall.SYS___MAC_GET_LCTX), + "SYS___MAC_GET_LINK": ValueOf(syscall.SYS___MAC_GET_LINK), + "SYS___MAC_GET_MOUNT": ValueOf(syscall.SYS___MAC_GET_MOUNT), + "SYS___MAC_GET_PID": ValueOf(syscall.SYS___MAC_GET_PID), + "SYS___MAC_GET_PROC": ValueOf(syscall.SYS___MAC_GET_PROC), + "SYS___MAC_MOUNT": ValueOf(syscall.SYS___MAC_MOUNT), + "SYS___MAC_SET_FD": ValueOf(syscall.SYS___MAC_SET_FD), + "SYS___MAC_SET_FILE": ValueOf(syscall.SYS___MAC_SET_FILE), + "SYS___MAC_SET_LCTX": ValueOf(syscall.SYS___MAC_SET_LCTX), + "SYS___MAC_SET_LINK": ValueOf(syscall.SYS___MAC_SET_LINK), + "SYS___MAC_SET_PROC": ValueOf(syscall.SYS___MAC_SET_PROC), + "SYS___MAC_SYSCALL": ValueOf(syscall.SYS___MAC_SYSCALL), + "SYS___OLD_SEMWAIT_SIGNAL": ValueOf(syscall.SYS___OLD_SEMWAIT_SIGNAL), + "SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL": ValueOf(syscall.SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL), + "SYS___PTHREAD_CANCELED": ValueOf(syscall.SYS___PTHREAD_CANCELED), + "SYS___PTHREAD_CHDIR": ValueOf(syscall.SYS___PTHREAD_CHDIR), + "SYS___PTHREAD_FCHDIR": ValueOf(syscall.SYS___PTHREAD_FCHDIR), + "SYS___PTHREAD_KILL": ValueOf(syscall.SYS___PTHREAD_KILL), + "SYS___PTHREAD_MARKCANCEL": ValueOf(syscall.SYS___PTHREAD_MARKCANCEL), + "SYS___PTHREAD_SIGMASK": ValueOf(syscall.SYS___PTHREAD_SIGMASK), + "SYS___SEMWAIT_SIGNAL": ValueOf(syscall.SYS___SEMWAIT_SIGNAL), + "SYS___SEMWAIT_SIGNAL_NOCANCEL": ValueOf(syscall.SYS___SEMWAIT_SIGNAL_NOCANCEL), + "SYS___SIGWAIT": ValueOf(syscall.SYS___SIGWAIT), + "SYS___SIGWAIT_NOCANCEL": ValueOf(syscall.SYS___SIGWAIT_NOCANCEL), + "SYS___SYSCTL": ValueOf(syscall.SYS___SYSCTL), + "S_IEXEC": ValueOf(syscall.S_IEXEC), + "S_IFBLK": ValueOf(syscall.S_IFBLK), + "S_IFCHR": ValueOf(syscall.S_IFCHR), + "S_IFDIR": ValueOf(syscall.S_IFDIR), + "S_IFIFO": ValueOf(syscall.S_IFIFO), + "S_IFLNK": ValueOf(syscall.S_IFLNK), + "S_IFMT": ValueOf(syscall.S_IFMT), + "S_IFREG": ValueOf(syscall.S_IFREG), + "S_IFSOCK": ValueOf(syscall.S_IFSOCK), + "S_IFWHT": ValueOf(syscall.S_IFWHT), + "S_IREAD": ValueOf(syscall.S_IREAD), + "S_IRGRP": ValueOf(syscall.S_IRGRP), + "S_IROTH": ValueOf(syscall.S_IROTH), + "S_IRUSR": ValueOf(syscall.S_IRUSR), + "S_IRWXG": ValueOf(syscall.S_IRWXG), + "S_IRWXO": ValueOf(syscall.S_IRWXO), + "S_IRWXU": ValueOf(syscall.S_IRWXU), + "S_ISGID": ValueOf(syscall.S_ISGID), + "S_ISTXT": ValueOf(syscall.S_ISTXT), + "S_ISUID": ValueOf(syscall.S_ISUID), + "S_ISVTX": ValueOf(syscall.S_ISVTX), + "S_IWGRP": ValueOf(syscall.S_IWGRP), + "S_IWOTH": ValueOf(syscall.S_IWOTH), + "S_IWRITE": ValueOf(syscall.S_IWRITE), + "S_IWUSR": ValueOf(syscall.S_IWUSR), + "S_IXGRP": ValueOf(syscall.S_IXGRP), + "S_IXOTH": ValueOf(syscall.S_IXOTH), + "S_IXUSR": ValueOf(syscall.S_IXUSR), + "Seek": ValueOf(syscall.Seek), + "Select": ValueOf(syscall.Select), + "Sendfile": ValueOf(syscall.Sendfile), + "Sendmsg": ValueOf(syscall.Sendmsg), + "SendmsgN": ValueOf(syscall.SendmsgN), + "Sendto": ValueOf(syscall.Sendto), + "SetBpf": ValueOf(syscall.SetBpf), + "SetBpfBuflen": ValueOf(syscall.SetBpfBuflen), + "SetBpfDatalink": ValueOf(syscall.SetBpfDatalink), + "SetBpfHeadercmpl": ValueOf(syscall.SetBpfHeadercmpl), + "SetBpfImmediate": ValueOf(syscall.SetBpfImmediate), + "SetBpfInterface": ValueOf(syscall.SetBpfInterface), + "SetBpfPromisc": ValueOf(syscall.SetBpfPromisc), + "SetBpfTimeout": ValueOf(syscall.SetBpfTimeout), + "SetKevent": ValueOf(syscall.SetKevent), + "SetNonblock": ValueOf(syscall.SetNonblock), + "Setegid": ValueOf(syscall.Setegid), + "Setenv": ValueOf(syscall.Setenv), + "Seteuid": ValueOf(syscall.Seteuid), + "Setgid": ValueOf(syscall.Setgid), + "Setgroups": ValueOf(syscall.Setgroups), + "Setlogin": ValueOf(syscall.Setlogin), + "Setpgid": ValueOf(syscall.Setpgid), + "Setpriority": ValueOf(syscall.Setpriority), + "Setprivexec": ValueOf(syscall.Setprivexec), + "Setregid": ValueOf(syscall.Setregid), + "Setreuid": ValueOf(syscall.Setreuid), + "Setrlimit": ValueOf(syscall.Setrlimit), + "Setsid": ValueOf(syscall.Setsid), + "SetsockoptByte": ValueOf(syscall.SetsockoptByte), + "SetsockoptICMPv6Filter": ValueOf(syscall.SetsockoptICMPv6Filter), + "SetsockoptIPMreq": ValueOf(syscall.SetsockoptIPMreq), + "SetsockoptIPv6Mreq": ValueOf(syscall.SetsockoptIPv6Mreq), + "SetsockoptInet4Addr": ValueOf(syscall.SetsockoptInet4Addr), + "SetsockoptInt": ValueOf(syscall.SetsockoptInt), + "SetsockoptLinger": ValueOf(syscall.SetsockoptLinger), + "SetsockoptString": ValueOf(syscall.SetsockoptString), + "SetsockoptTimeval": ValueOf(syscall.SetsockoptTimeval), + "Settimeofday": ValueOf(syscall.Settimeofday), + "Setuid": ValueOf(syscall.Setuid), + "Shutdown": ValueOf(syscall.Shutdown), + "SizeofBpfHdr": ValueOf(syscall.SizeofBpfHdr), + "SizeofBpfInsn": ValueOf(syscall.SizeofBpfInsn), + "SizeofBpfProgram": ValueOf(syscall.SizeofBpfProgram), + "SizeofBpfStat": ValueOf(syscall.SizeofBpfStat), + "SizeofBpfVersion": ValueOf(syscall.SizeofBpfVersion), + "SizeofCmsghdr": ValueOf(syscall.SizeofCmsghdr), + "SizeofICMPv6Filter": ValueOf(syscall.SizeofICMPv6Filter), + "SizeofIPMreq": ValueOf(syscall.SizeofIPMreq), + "SizeofIPv6MTUInfo": ValueOf(syscall.SizeofIPv6MTUInfo), + "SizeofIPv6Mreq": ValueOf(syscall.SizeofIPv6Mreq), + "SizeofIfData": ValueOf(syscall.SizeofIfData), + "SizeofIfMsghdr": ValueOf(syscall.SizeofIfMsghdr), + "SizeofIfaMsghdr": ValueOf(syscall.SizeofIfaMsghdr), + "SizeofIfmaMsghdr": ValueOf(syscall.SizeofIfmaMsghdr), + "SizeofIfmaMsghdr2": ValueOf(syscall.SizeofIfmaMsghdr2), + "SizeofInet4Pktinfo": ValueOf(syscall.SizeofInet4Pktinfo), + "SizeofInet6Pktinfo": ValueOf(syscall.SizeofInet6Pktinfo), + "SizeofLinger": ValueOf(syscall.SizeofLinger), + "SizeofMsghdr": ValueOf(syscall.SizeofMsghdr), + "SizeofRtMetrics": ValueOf(syscall.SizeofRtMetrics), + "SizeofRtMsghdr": ValueOf(syscall.SizeofRtMsghdr), + "SizeofSockaddrAny": ValueOf(syscall.SizeofSockaddrAny), + "SizeofSockaddrDatalink": ValueOf(syscall.SizeofSockaddrDatalink), + "SizeofSockaddrInet4": ValueOf(syscall.SizeofSockaddrInet4), + "SizeofSockaddrInet6": ValueOf(syscall.SizeofSockaddrInet6), + "SizeofSockaddrUnix": ValueOf(syscall.SizeofSockaddrUnix), + "SlicePtrFromStrings": ValueOf(syscall.SlicePtrFromStrings), + "Socket": ValueOf(syscall.Socket), + "SocketDisableIPv6": ValueOf(&syscall.SocketDisableIPv6).Elem(), + "Socketpair": ValueOf(syscall.Socketpair), + "StartProcess": ValueOf(syscall.StartProcess), + "Stat": ValueOf(syscall.Stat), + "Statfs": ValueOf(syscall.Statfs), + "Stderr": ValueOf(&syscall.Stderr).Elem(), + "Stdin": ValueOf(&syscall.Stdin).Elem(), + "Stdout": ValueOf(&syscall.Stdout).Elem(), + "StringBytePtr": ValueOf(syscall.StringBytePtr), + "StringByteSlice": ValueOf(syscall.StringByteSlice), + "StringSlicePtr": ValueOf(syscall.StringSlicePtr), + "Symlink": ValueOf(syscall.Symlink), + "Sync": ValueOf(syscall.Sync), + "Syscall": ValueOf(syscall.Syscall), + "Syscall6": ValueOf(syscall.Syscall6), + "Syscall9": ValueOf(syscall.Syscall9), + "Sysctl": ValueOf(syscall.Sysctl), + "SysctlUint32": ValueOf(syscall.SysctlUint32), + "TCIFLUSH": ValueOf(syscall.TCIFLUSH), + "TCIOFLUSH": ValueOf(syscall.TCIOFLUSH), + "TCOFLUSH": ValueOf(syscall.TCOFLUSH), + "TCP_CONNECTIONTIMEOUT": ValueOf(syscall.TCP_CONNECTIONTIMEOUT), + "TCP_KEEPALIVE": ValueOf(syscall.TCP_KEEPALIVE), + "TCP_MAXHLEN": ValueOf(syscall.TCP_MAXHLEN), + "TCP_MAXOLEN": ValueOf(syscall.TCP_MAXOLEN), + "TCP_MAXSEG": ValueOf(syscall.TCP_MAXSEG), + "TCP_MAXWIN": ValueOf(syscall.TCP_MAXWIN), + "TCP_MAX_SACK": ValueOf(syscall.TCP_MAX_SACK), + "TCP_MAX_WINSHIFT": ValueOf(syscall.TCP_MAX_WINSHIFT), + "TCP_MINMSS": ValueOf(syscall.TCP_MINMSS), + "TCP_MINMSSOVERLOAD": ValueOf(syscall.TCP_MINMSSOVERLOAD), + "TCP_MSS": ValueOf(syscall.TCP_MSS), + "TCP_NODELAY": ValueOf(syscall.TCP_NODELAY), + "TCP_NOOPT": ValueOf(syscall.TCP_NOOPT), + "TCP_NOPUSH": ValueOf(syscall.TCP_NOPUSH), + "TCP_RXT_CONNDROPTIME": ValueOf(syscall.TCP_RXT_CONNDROPTIME), + "TCP_RXT_FINDROP": ValueOf(syscall.TCP_RXT_FINDROP), + "TCSAFLUSH": ValueOf(syscall.TCSAFLUSH), + "TIOCCBRK": ValueOf(syscall.TIOCCBRK), + "TIOCCDTR": ValueOf(syscall.TIOCCDTR), + "TIOCCONS": ValueOf(uint64(syscall.TIOCCONS)), + "TIOCDCDTIMESTAMP": ValueOf(syscall.TIOCDCDTIMESTAMP), + "TIOCDRAIN": ValueOf(syscall.TIOCDRAIN), + "TIOCDSIMICROCODE": ValueOf(syscall.TIOCDSIMICROCODE), + "TIOCEXCL": ValueOf(syscall.TIOCEXCL), + "TIOCEXT": ValueOf(uint64(syscall.TIOCEXT)), + "TIOCFLUSH": ValueOf(uint64(syscall.TIOCFLUSH)), + "TIOCGDRAINWAIT": ValueOf(syscall.TIOCGDRAINWAIT), + "TIOCGETA": ValueOf(syscall.TIOCGETA), + "TIOCGETD": ValueOf(syscall.TIOCGETD), + "TIOCGPGRP": ValueOf(syscall.TIOCGPGRP), + "TIOCGWINSZ": ValueOf(syscall.TIOCGWINSZ), + "TIOCIXOFF": ValueOf(syscall.TIOCIXOFF), + "TIOCIXON": ValueOf(syscall.TIOCIXON), + "TIOCMBIC": ValueOf(uint64(syscall.TIOCMBIC)), + "TIOCMBIS": ValueOf(uint64(syscall.TIOCMBIS)), + "TIOCMGDTRWAIT": ValueOf(syscall.TIOCMGDTRWAIT), + "TIOCMGET": ValueOf(syscall.TIOCMGET), + "TIOCMODG": ValueOf(syscall.TIOCMODG), + "TIOCMODS": ValueOf(uint64(syscall.TIOCMODS)), + "TIOCMSDTRWAIT": ValueOf(uint64(syscall.TIOCMSDTRWAIT)), + "TIOCMSET": ValueOf(uint64(syscall.TIOCMSET)), + "TIOCM_CAR": ValueOf(syscall.TIOCM_CAR), + "TIOCM_CD": ValueOf(syscall.TIOCM_CD), + "TIOCM_CTS": ValueOf(syscall.TIOCM_CTS), + "TIOCM_DSR": ValueOf(syscall.TIOCM_DSR), + "TIOCM_DTR": ValueOf(syscall.TIOCM_DTR), + "TIOCM_LE": ValueOf(syscall.TIOCM_LE), + "TIOCM_RI": ValueOf(syscall.TIOCM_RI), + "TIOCM_RNG": ValueOf(syscall.TIOCM_RNG), + "TIOCM_RTS": ValueOf(syscall.TIOCM_RTS), + "TIOCM_SR": ValueOf(syscall.TIOCM_SR), + "TIOCM_ST": ValueOf(syscall.TIOCM_ST), + "TIOCNOTTY": ValueOf(syscall.TIOCNOTTY), + "TIOCNXCL": ValueOf(syscall.TIOCNXCL), + "TIOCOUTQ": ValueOf(syscall.TIOCOUTQ), + "TIOCPKT": ValueOf(uint64(syscall.TIOCPKT)), + "TIOCPKT_DATA": ValueOf(syscall.TIOCPKT_DATA), + "TIOCPKT_DOSTOP": ValueOf(syscall.TIOCPKT_DOSTOP), + "TIOCPKT_FLUSHREAD": ValueOf(syscall.TIOCPKT_FLUSHREAD), + "TIOCPKT_FLUSHWRITE": ValueOf(syscall.TIOCPKT_FLUSHWRITE), + "TIOCPKT_IOCTL": ValueOf(syscall.TIOCPKT_IOCTL), + "TIOCPKT_NOSTOP": ValueOf(syscall.TIOCPKT_NOSTOP), + "TIOCPKT_START": ValueOf(syscall.TIOCPKT_START), + "TIOCPKT_STOP": ValueOf(syscall.TIOCPKT_STOP), + "TIOCPTYGNAME": ValueOf(syscall.TIOCPTYGNAME), + "TIOCPTYGRANT": ValueOf(syscall.TIOCPTYGRANT), + "TIOCPTYUNLK": ValueOf(syscall.TIOCPTYUNLK), + "TIOCREMOTE": ValueOf(uint64(syscall.TIOCREMOTE)), + "TIOCSBRK": ValueOf(syscall.TIOCSBRK), + "TIOCSCONS": ValueOf(syscall.TIOCSCONS), + "TIOCSCTTY": ValueOf(syscall.TIOCSCTTY), + "TIOCSDRAINWAIT": ValueOf(uint64(syscall.TIOCSDRAINWAIT)), + "TIOCSDTR": ValueOf(syscall.TIOCSDTR), + "TIOCSETA": ValueOf(uint64(syscall.TIOCSETA)), + "TIOCSETAF": ValueOf(uint64(syscall.TIOCSETAF)), + "TIOCSETAW": ValueOf(uint64(syscall.TIOCSETAW)), + "TIOCSETD": ValueOf(uint64(syscall.TIOCSETD)), + "TIOCSIG": ValueOf(syscall.TIOCSIG), + "TIOCSPGRP": ValueOf(uint64(syscall.TIOCSPGRP)), + "TIOCSTART": ValueOf(syscall.TIOCSTART), + "TIOCSTAT": ValueOf(syscall.TIOCSTAT), + "TIOCSTI": ValueOf(uint64(syscall.TIOCSTI)), + "TIOCSTOP": ValueOf(syscall.TIOCSTOP), + "TIOCSWINSZ": ValueOf(uint64(syscall.TIOCSWINSZ)), + "TIOCTIMESTAMP": ValueOf(syscall.TIOCTIMESTAMP), + "TIOCUCNTL": ValueOf(uint64(syscall.TIOCUCNTL)), + "TOSTOP": ValueOf(syscall.TOSTOP), + "TimespecToNsec": ValueOf(syscall.TimespecToNsec), + "TimevalToNsec": ValueOf(syscall.TimevalToNsec), + "Truncate": ValueOf(syscall.Truncate), + "Umask": ValueOf(syscall.Umask), + "Undelete": ValueOf(syscall.Undelete), + "UnixRights": ValueOf(syscall.UnixRights), + "Unlink": ValueOf(syscall.Unlink), + "Unmount": ValueOf(syscall.Unmount), + "Unsetenv": ValueOf(syscall.Unsetenv), + "Utimes": ValueOf(syscall.Utimes), + "UtimesNano": ValueOf(syscall.UtimesNano), + "VDISCARD": ValueOf(syscall.VDISCARD), + "VDSUSP": ValueOf(syscall.VDSUSP), + "VEOF": ValueOf(syscall.VEOF), + "VEOL": ValueOf(syscall.VEOL), + "VEOL2": ValueOf(syscall.VEOL2), + "VERASE": ValueOf(syscall.VERASE), + "VINTR": ValueOf(syscall.VINTR), + "VKILL": ValueOf(syscall.VKILL), + "VLNEXT": ValueOf(syscall.VLNEXT), + "VMIN": ValueOf(syscall.VMIN), + "VQUIT": ValueOf(syscall.VQUIT), + "VREPRINT": ValueOf(syscall.VREPRINT), + "VSTART": ValueOf(syscall.VSTART), + "VSTATUS": ValueOf(syscall.VSTATUS), + "VSTOP": ValueOf(syscall.VSTOP), + "VSUSP": ValueOf(syscall.VSUSP), + "VT0": ValueOf(syscall.VT0), + "VT1": ValueOf(syscall.VT1), + "VTDLY": ValueOf(syscall.VTDLY), + "VTIME": ValueOf(syscall.VTIME), + "VWERASE": ValueOf(syscall.VWERASE), + "WCONTINUED": ValueOf(syscall.WCONTINUED), + "WCOREFLAG": ValueOf(syscall.WCOREFLAG), + "WEXITED": ValueOf(syscall.WEXITED), + "WNOHANG": ValueOf(syscall.WNOHANG), + "WNOWAIT": ValueOf(syscall.WNOWAIT), + "WORDSIZE": ValueOf(syscall.WORDSIZE), + "WSTOPPED": ValueOf(syscall.WSTOPPED), + "WUNTRACED": ValueOf(syscall.WUNTRACED), + "Wait4": ValueOf(syscall.Wait4), + "Write": ValueOf(syscall.Write), + }, + Types: map[string]Type{ + "BpfHdr": TypeOf((*syscall.BpfHdr)(nil)).Elem(), + "BpfInsn": TypeOf((*syscall.BpfInsn)(nil)).Elem(), + "BpfProgram": TypeOf((*syscall.BpfProgram)(nil)).Elem(), + "BpfStat": TypeOf((*syscall.BpfStat)(nil)).Elem(), + "BpfVersion": TypeOf((*syscall.BpfVersion)(nil)).Elem(), + "Cmsghdr": TypeOf((*syscall.Cmsghdr)(nil)).Elem(), + "Credential": TypeOf((*syscall.Credential)(nil)).Elem(), + "Dirent": TypeOf((*syscall.Dirent)(nil)).Elem(), + "Errno": TypeOf((*syscall.Errno)(nil)).Elem(), + "Fbootstraptransfer_t": TypeOf((*syscall.Fbootstraptransfer_t)(nil)).Elem(), + "FdSet": TypeOf((*syscall.FdSet)(nil)).Elem(), + "Flock_t": TypeOf((*syscall.Flock_t)(nil)).Elem(), + "Fsid": TypeOf((*syscall.Fsid)(nil)).Elem(), + "Fstore_t": TypeOf((*syscall.Fstore_t)(nil)).Elem(), + "ICMPv6Filter": TypeOf((*syscall.ICMPv6Filter)(nil)).Elem(), + "IPMreq": TypeOf((*syscall.IPMreq)(nil)).Elem(), + "IPv6MTUInfo": TypeOf((*syscall.IPv6MTUInfo)(nil)).Elem(), + "IPv6Mreq": TypeOf((*syscall.IPv6Mreq)(nil)).Elem(), + "IfData": TypeOf((*syscall.IfData)(nil)).Elem(), + "IfMsghdr": TypeOf((*syscall.IfMsghdr)(nil)).Elem(), + "IfaMsghdr": TypeOf((*syscall.IfaMsghdr)(nil)).Elem(), + "IfmaMsghdr": TypeOf((*syscall.IfmaMsghdr)(nil)).Elem(), + "IfmaMsghdr2": TypeOf((*syscall.IfmaMsghdr2)(nil)).Elem(), + "Inet4Pktinfo": TypeOf((*syscall.Inet4Pktinfo)(nil)).Elem(), + "Inet6Pktinfo": TypeOf((*syscall.Inet6Pktinfo)(nil)).Elem(), + "InterfaceAddrMessage": TypeOf((*syscall.InterfaceAddrMessage)(nil)).Elem(), + "InterfaceMessage": TypeOf((*syscall.InterfaceMessage)(nil)).Elem(), + "InterfaceMulticastAddrMessage": TypeOf((*syscall.InterfaceMulticastAddrMessage)(nil)).Elem(), + "Iovec": TypeOf((*syscall.Iovec)(nil)).Elem(), + "Kevent_t": TypeOf((*syscall.Kevent_t)(nil)).Elem(), + "Linger": TypeOf((*syscall.Linger)(nil)).Elem(), + "Log2phys_t": TypeOf((*syscall.Log2phys_t)(nil)).Elem(), + "Msghdr": TypeOf((*syscall.Msghdr)(nil)).Elem(), + "ProcAttr": TypeOf((*syscall.ProcAttr)(nil)).Elem(), + "Radvisory_t": TypeOf((*syscall.Radvisory_t)(nil)).Elem(), + "RawSockaddr": TypeOf((*syscall.RawSockaddr)(nil)).Elem(), + "RawSockaddrAny": TypeOf((*syscall.RawSockaddrAny)(nil)).Elem(), + "RawSockaddrDatalink": TypeOf((*syscall.RawSockaddrDatalink)(nil)).Elem(), + "RawSockaddrInet4": TypeOf((*syscall.RawSockaddrInet4)(nil)).Elem(), + "RawSockaddrInet6": TypeOf((*syscall.RawSockaddrInet6)(nil)).Elem(), + "RawSockaddrUnix": TypeOf((*syscall.RawSockaddrUnix)(nil)).Elem(), + "Rlimit": TypeOf((*syscall.Rlimit)(nil)).Elem(), + "RouteMessage": TypeOf((*syscall.RouteMessage)(nil)).Elem(), + "RoutingMessage": TypeOf((*syscall.RoutingMessage)(nil)).Elem(), + "RtMetrics": TypeOf((*syscall.RtMetrics)(nil)).Elem(), + "RtMsghdr": TypeOf((*syscall.RtMsghdr)(nil)).Elem(), + "Rusage": TypeOf((*syscall.Rusage)(nil)).Elem(), + "Signal": TypeOf((*syscall.Signal)(nil)).Elem(), + "Sockaddr": TypeOf((*syscall.Sockaddr)(nil)).Elem(), + "SockaddrDatalink": TypeOf((*syscall.SockaddrDatalink)(nil)).Elem(), + "SockaddrInet4": TypeOf((*syscall.SockaddrInet4)(nil)).Elem(), + "SockaddrInet6": TypeOf((*syscall.SockaddrInet6)(nil)).Elem(), + "SockaddrUnix": TypeOf((*syscall.SockaddrUnix)(nil)).Elem(), + "SocketControlMessage": TypeOf((*syscall.SocketControlMessage)(nil)).Elem(), + "Stat_t": TypeOf((*syscall.Stat_t)(nil)).Elem(), + "Statfs_t": TypeOf((*syscall.Statfs_t)(nil)).Elem(), + "SysProcAttr": TypeOf((*syscall.SysProcAttr)(nil)).Elem(), + "Termios": TypeOf((*syscall.Termios)(nil)).Elem(), + "Timespec": TypeOf((*syscall.Timespec)(nil)).Elem(), + "Timeval": TypeOf((*syscall.Timeval)(nil)).Elem(), + "Timeval32": TypeOf((*syscall.Timeval32)(nil)).Elem(), + "WaitStatus": TypeOf((*syscall.WaitStatus)(nil)).Elem(), + }, + Proxies: map[string]Type{ + } } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/syscall_darwin_amd64.go b/vendor/github.com/cosmos72/gomacro/imports/syscall_darwin_amd64.go new file mode 100644 index 0000000..9e418e0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/syscall_darwin_amd64.go @@ -0,0 +1,1918 @@ +// +build !gccgo + +// this file was generated by gomacro command: import "syscall" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "syscall" +) + +func init() { + Packages["syscall"] = Package{ + Binds: map[string]Value{ + "AF_APPLETALK": ValueOf(syscall.AF_APPLETALK), + "AF_CCITT": ValueOf(syscall.AF_CCITT), + "AF_CHAOS": ValueOf(syscall.AF_CHAOS), + "AF_CNT": ValueOf(syscall.AF_CNT), + "AF_COIP": ValueOf(syscall.AF_COIP), + "AF_DATAKIT": ValueOf(syscall.AF_DATAKIT), + "AF_DECnet": ValueOf(syscall.AF_DECnet), + "AF_DLI": ValueOf(syscall.AF_DLI), + "AF_E164": ValueOf(syscall.AF_E164), + "AF_ECMA": ValueOf(syscall.AF_ECMA), + "AF_HYLINK": ValueOf(syscall.AF_HYLINK), + "AF_IEEE80211": ValueOf(syscall.AF_IEEE80211), + "AF_IMPLINK": ValueOf(syscall.AF_IMPLINK), + "AF_INET": ValueOf(syscall.AF_INET), + "AF_INET6": ValueOf(syscall.AF_INET6), + "AF_IPX": ValueOf(syscall.AF_IPX), + "AF_ISDN": ValueOf(syscall.AF_ISDN), + "AF_ISO": ValueOf(syscall.AF_ISO), + "AF_LAT": ValueOf(syscall.AF_LAT), + "AF_LINK": ValueOf(syscall.AF_LINK), + "AF_LOCAL": ValueOf(syscall.AF_LOCAL), + "AF_MAX": ValueOf(syscall.AF_MAX), + "AF_NATM": ValueOf(syscall.AF_NATM), + "AF_NDRV": ValueOf(syscall.AF_NDRV), + "AF_NETBIOS": ValueOf(syscall.AF_NETBIOS), + "AF_NS": ValueOf(syscall.AF_NS), + "AF_OSI": ValueOf(syscall.AF_OSI), + "AF_PPP": ValueOf(syscall.AF_PPP), + "AF_PUP": ValueOf(syscall.AF_PUP), + "AF_RESERVED_36": ValueOf(syscall.AF_RESERVED_36), + "AF_ROUTE": ValueOf(syscall.AF_ROUTE), + "AF_SIP": ValueOf(syscall.AF_SIP), + "AF_SNA": ValueOf(syscall.AF_SNA), + "AF_SYSTEM": ValueOf(syscall.AF_SYSTEM), + "AF_UNIX": ValueOf(syscall.AF_UNIX), + "AF_UNSPEC": ValueOf(syscall.AF_UNSPEC), + "Accept": ValueOf(syscall.Accept), + "Access": ValueOf(syscall.Access), + "Adjtime": ValueOf(syscall.Adjtime), + "B0": ValueOf(syscall.B0), + "B110": ValueOf(syscall.B110), + "B115200": ValueOf(syscall.B115200), + "B1200": ValueOf(syscall.B1200), + "B134": ValueOf(syscall.B134), + "B14400": ValueOf(syscall.B14400), + "B150": ValueOf(syscall.B150), + "B1800": ValueOf(syscall.B1800), + "B19200": ValueOf(syscall.B19200), + "B200": ValueOf(syscall.B200), + "B230400": ValueOf(syscall.B230400), + "B2400": ValueOf(syscall.B2400), + "B28800": ValueOf(syscall.B28800), + "B300": ValueOf(syscall.B300), + "B38400": ValueOf(syscall.B38400), + "B4800": ValueOf(syscall.B4800), + "B50": ValueOf(syscall.B50), + "B57600": ValueOf(syscall.B57600), + "B600": ValueOf(syscall.B600), + "B7200": ValueOf(syscall.B7200), + "B75": ValueOf(syscall.B75), + "B76800": ValueOf(syscall.B76800), + "B9600": ValueOf(syscall.B9600), + "BIOCFLUSH": ValueOf(syscall.BIOCFLUSH), + "BIOCGBLEN": ValueOf(syscall.BIOCGBLEN), + "BIOCGDLT": ValueOf(syscall.BIOCGDLT), + "BIOCGDLTLIST": ValueOf(uint32(syscall.BIOCGDLTLIST)), + "BIOCGETIF": ValueOf(syscall.BIOCGETIF), + "BIOCGHDRCMPLT": ValueOf(syscall.BIOCGHDRCMPLT), + "BIOCGRSIG": ValueOf(syscall.BIOCGRSIG), + "BIOCGRTIMEOUT": ValueOf(syscall.BIOCGRTIMEOUT), + "BIOCGSEESENT": ValueOf(syscall.BIOCGSEESENT), + "BIOCGSTATS": ValueOf(syscall.BIOCGSTATS), + "BIOCIMMEDIATE": ValueOf(uint32(syscall.BIOCIMMEDIATE)), + "BIOCPROMISC": ValueOf(syscall.BIOCPROMISC), + "BIOCSBLEN": ValueOf(uint32(syscall.BIOCSBLEN)), + "BIOCSDLT": ValueOf(uint32(syscall.BIOCSDLT)), + "BIOCSETF": ValueOf(uint32(syscall.BIOCSETF)), + "BIOCSETIF": ValueOf(uint32(syscall.BIOCSETIF)), + "BIOCSHDRCMPLT": ValueOf(uint32(syscall.BIOCSHDRCMPLT)), + "BIOCSRSIG": ValueOf(uint32(syscall.BIOCSRSIG)), + "BIOCSRTIMEOUT": ValueOf(uint32(syscall.BIOCSRTIMEOUT)), + "BIOCSSEESENT": ValueOf(uint32(syscall.BIOCSSEESENT)), + "BIOCVERSION": ValueOf(syscall.BIOCVERSION), + "BPF_A": ValueOf(syscall.BPF_A), + "BPF_ABS": ValueOf(syscall.BPF_ABS), + "BPF_ADD": ValueOf(syscall.BPF_ADD), + "BPF_ALIGNMENT": ValueOf(syscall.BPF_ALIGNMENT), + "BPF_ALU": ValueOf(syscall.BPF_ALU), + "BPF_AND": ValueOf(syscall.BPF_AND), + "BPF_B": ValueOf(syscall.BPF_B), + "BPF_DIV": ValueOf(syscall.BPF_DIV), + "BPF_H": ValueOf(syscall.BPF_H), + "BPF_IMM": ValueOf(syscall.BPF_IMM), + "BPF_IND": ValueOf(syscall.BPF_IND), + "BPF_JA": ValueOf(syscall.BPF_JA), + "BPF_JEQ": ValueOf(syscall.BPF_JEQ), + "BPF_JGE": ValueOf(syscall.BPF_JGE), + "BPF_JGT": ValueOf(syscall.BPF_JGT), + "BPF_JMP": ValueOf(syscall.BPF_JMP), + "BPF_JSET": ValueOf(syscall.BPF_JSET), + "BPF_K": ValueOf(syscall.BPF_K), + "BPF_LD": ValueOf(syscall.BPF_LD), + "BPF_LDX": ValueOf(syscall.BPF_LDX), + "BPF_LEN": ValueOf(syscall.BPF_LEN), + "BPF_LSH": ValueOf(syscall.BPF_LSH), + "BPF_MAJOR_VERSION": ValueOf(syscall.BPF_MAJOR_VERSION), + "BPF_MAXBUFSIZE": ValueOf(syscall.BPF_MAXBUFSIZE), + "BPF_MAXINSNS": ValueOf(syscall.BPF_MAXINSNS), + "BPF_MEM": ValueOf(syscall.BPF_MEM), + "BPF_MEMWORDS": ValueOf(syscall.BPF_MEMWORDS), + "BPF_MINBUFSIZE": ValueOf(syscall.BPF_MINBUFSIZE), + "BPF_MINOR_VERSION": ValueOf(syscall.BPF_MINOR_VERSION), + "BPF_MISC": ValueOf(syscall.BPF_MISC), + "BPF_MSH": ValueOf(syscall.BPF_MSH), + "BPF_MUL": ValueOf(syscall.BPF_MUL), + "BPF_NEG": ValueOf(syscall.BPF_NEG), + "BPF_OR": ValueOf(syscall.BPF_OR), + "BPF_RELEASE": ValueOf(syscall.BPF_RELEASE), + "BPF_RET": ValueOf(syscall.BPF_RET), + "BPF_RSH": ValueOf(syscall.BPF_RSH), + "BPF_ST": ValueOf(syscall.BPF_ST), + "BPF_STX": ValueOf(syscall.BPF_STX), + "BPF_SUB": ValueOf(syscall.BPF_SUB), + "BPF_TAX": ValueOf(syscall.BPF_TAX), + "BPF_TXA": ValueOf(syscall.BPF_TXA), + "BPF_W": ValueOf(syscall.BPF_W), + "BPF_X": ValueOf(syscall.BPF_X), + "BRKINT": ValueOf(syscall.BRKINT), + "Bind": ValueOf(syscall.Bind), + "BpfBuflen": ValueOf(syscall.BpfBuflen), + "BpfDatalink": ValueOf(syscall.BpfDatalink), + "BpfHeadercmpl": ValueOf(syscall.BpfHeadercmpl), + "BpfInterface": ValueOf(syscall.BpfInterface), + "BpfJump": ValueOf(syscall.BpfJump), + "BpfStats": ValueOf(syscall.BpfStats), + "BpfStmt": ValueOf(syscall.BpfStmt), + "BpfTimeout": ValueOf(syscall.BpfTimeout), + "BytePtrFromString": ValueOf(syscall.BytePtrFromString), + "ByteSliceFromString": ValueOf(syscall.ByteSliceFromString), + "CFLUSH": ValueOf(syscall.CFLUSH), + "CLOCAL": ValueOf(syscall.CLOCAL), + "CREAD": ValueOf(syscall.CREAD), + "CS5": ValueOf(syscall.CS5), + "CS6": ValueOf(syscall.CS6), + "CS7": ValueOf(syscall.CS7), + "CS8": ValueOf(syscall.CS8), + "CSIZE": ValueOf(syscall.CSIZE), + "CSTART": ValueOf(syscall.CSTART), + "CSTATUS": ValueOf(syscall.CSTATUS), + "CSTOP": ValueOf(syscall.CSTOP), + "CSTOPB": ValueOf(syscall.CSTOPB), + "CSUSP": ValueOf(syscall.CSUSP), + "CTL_MAXNAME": ValueOf(syscall.CTL_MAXNAME), + "CTL_NET": ValueOf(syscall.CTL_NET), + "Chdir": ValueOf(syscall.Chdir), + "CheckBpfVersion": ValueOf(syscall.CheckBpfVersion), + "Chflags": ValueOf(syscall.Chflags), + "Chmod": ValueOf(syscall.Chmod), + "Chown": ValueOf(syscall.Chown), + "Chroot": ValueOf(syscall.Chroot), + "Clearenv": ValueOf(syscall.Clearenv), + "Close": ValueOf(syscall.Close), + "CloseOnExec": ValueOf(syscall.CloseOnExec), + "CmsgLen": ValueOf(syscall.CmsgLen), + "CmsgSpace": ValueOf(syscall.CmsgSpace), + "Connect": ValueOf(syscall.Connect), + "DLT_APPLE_IP_OVER_IEEE1394": ValueOf(syscall.DLT_APPLE_IP_OVER_IEEE1394), + "DLT_ARCNET": ValueOf(syscall.DLT_ARCNET), + "DLT_ATM_CLIP": ValueOf(syscall.DLT_ATM_CLIP), + "DLT_ATM_RFC1483": ValueOf(syscall.DLT_ATM_RFC1483), + "DLT_AX25": ValueOf(syscall.DLT_AX25), + "DLT_CHAOS": ValueOf(syscall.DLT_CHAOS), + "DLT_CHDLC": ValueOf(syscall.DLT_CHDLC), + "DLT_C_HDLC": ValueOf(syscall.DLT_C_HDLC), + "DLT_EN10MB": ValueOf(syscall.DLT_EN10MB), + "DLT_EN3MB": ValueOf(syscall.DLT_EN3MB), + "DLT_FDDI": ValueOf(syscall.DLT_FDDI), + "DLT_IEEE802": ValueOf(syscall.DLT_IEEE802), + "DLT_IEEE802_11": ValueOf(syscall.DLT_IEEE802_11), + "DLT_IEEE802_11_RADIO": ValueOf(syscall.DLT_IEEE802_11_RADIO), + "DLT_IEEE802_11_RADIO_AVS": ValueOf(syscall.DLT_IEEE802_11_RADIO_AVS), + "DLT_LINUX_SLL": ValueOf(syscall.DLT_LINUX_SLL), + "DLT_LOOP": ValueOf(syscall.DLT_LOOP), + "DLT_NULL": ValueOf(syscall.DLT_NULL), + "DLT_PFLOG": ValueOf(syscall.DLT_PFLOG), + "DLT_PFSYNC": ValueOf(syscall.DLT_PFSYNC), + "DLT_PPP": ValueOf(syscall.DLT_PPP), + "DLT_PPP_BSDOS": ValueOf(syscall.DLT_PPP_BSDOS), + "DLT_PPP_SERIAL": ValueOf(syscall.DLT_PPP_SERIAL), + "DLT_PRONET": ValueOf(syscall.DLT_PRONET), + "DLT_RAW": ValueOf(syscall.DLT_RAW), + "DLT_SLIP": ValueOf(syscall.DLT_SLIP), + "DLT_SLIP_BSDOS": ValueOf(syscall.DLT_SLIP_BSDOS), + "DT_BLK": ValueOf(syscall.DT_BLK), + "DT_CHR": ValueOf(syscall.DT_CHR), + "DT_DIR": ValueOf(syscall.DT_DIR), + "DT_FIFO": ValueOf(syscall.DT_FIFO), + "DT_LNK": ValueOf(syscall.DT_LNK), + "DT_REG": ValueOf(syscall.DT_REG), + "DT_SOCK": ValueOf(syscall.DT_SOCK), + "DT_UNKNOWN": ValueOf(syscall.DT_UNKNOWN), + "DT_WHT": ValueOf(syscall.DT_WHT), + "Dup": ValueOf(syscall.Dup), + "Dup2": ValueOf(syscall.Dup2), + "E2BIG": ValueOf(syscall.E2BIG), + "EACCES": ValueOf(syscall.EACCES), + "EADDRINUSE": ValueOf(syscall.EADDRINUSE), + "EADDRNOTAVAIL": ValueOf(syscall.EADDRNOTAVAIL), + "EAFNOSUPPORT": ValueOf(syscall.EAFNOSUPPORT), + "EAGAIN": ValueOf(syscall.EAGAIN), + "EALREADY": ValueOf(syscall.EALREADY), + "EAUTH": ValueOf(syscall.EAUTH), + "EBADARCH": ValueOf(syscall.EBADARCH), + "EBADEXEC": ValueOf(syscall.EBADEXEC), + "EBADF": ValueOf(syscall.EBADF), + "EBADMACHO": ValueOf(syscall.EBADMACHO), + "EBADMSG": ValueOf(syscall.EBADMSG), + "EBADRPC": ValueOf(syscall.EBADRPC), + "EBUSY": ValueOf(syscall.EBUSY), + "ECANCELED": ValueOf(syscall.ECANCELED), + "ECHILD": ValueOf(syscall.ECHILD), + "ECHO": ValueOf(syscall.ECHO), + "ECHOCTL": ValueOf(syscall.ECHOCTL), + "ECHOE": ValueOf(syscall.ECHOE), + "ECHOK": ValueOf(syscall.ECHOK), + "ECHOKE": ValueOf(syscall.ECHOKE), + "ECHONL": ValueOf(syscall.ECHONL), + "ECHOPRT": ValueOf(syscall.ECHOPRT), + "ECONNABORTED": ValueOf(syscall.ECONNABORTED), + "ECONNREFUSED": ValueOf(syscall.ECONNREFUSED), + "ECONNRESET": ValueOf(syscall.ECONNRESET), + "EDEADLK": ValueOf(syscall.EDEADLK), + "EDESTADDRREQ": ValueOf(syscall.EDESTADDRREQ), + "EDEVERR": ValueOf(syscall.EDEVERR), + "EDOM": ValueOf(syscall.EDOM), + "EDQUOT": ValueOf(syscall.EDQUOT), + "EEXIST": ValueOf(syscall.EEXIST), + "EFAULT": ValueOf(syscall.EFAULT), + "EFBIG": ValueOf(syscall.EFBIG), + "EFTYPE": ValueOf(syscall.EFTYPE), + "EHOSTDOWN": ValueOf(syscall.EHOSTDOWN), + "EHOSTUNREACH": ValueOf(syscall.EHOSTUNREACH), + "EIDRM": ValueOf(syscall.EIDRM), + "EILSEQ": ValueOf(syscall.EILSEQ), + "EINPROGRESS": ValueOf(syscall.EINPROGRESS), + "EINTR": ValueOf(syscall.EINTR), + "EINVAL": ValueOf(syscall.EINVAL), + "EIO": ValueOf(syscall.EIO), + "EISCONN": ValueOf(syscall.EISCONN), + "EISDIR": ValueOf(syscall.EISDIR), + "ELAST": ValueOf(syscall.ELAST), + "ELOOP": ValueOf(syscall.ELOOP), + "EMFILE": ValueOf(syscall.EMFILE), + "EMLINK": ValueOf(syscall.EMLINK), + "EMSGSIZE": ValueOf(syscall.EMSGSIZE), + "EMULTIHOP": ValueOf(syscall.EMULTIHOP), + "ENAMETOOLONG": ValueOf(syscall.ENAMETOOLONG), + "ENEEDAUTH": ValueOf(syscall.ENEEDAUTH), + "ENETDOWN": ValueOf(syscall.ENETDOWN), + "ENETRESET": ValueOf(syscall.ENETRESET), + "ENETUNREACH": ValueOf(syscall.ENETUNREACH), + "ENFILE": ValueOf(syscall.ENFILE), + "ENOATTR": ValueOf(syscall.ENOATTR), + "ENOBUFS": ValueOf(syscall.ENOBUFS), + "ENODATA": ValueOf(syscall.ENODATA), + "ENODEV": ValueOf(syscall.ENODEV), + "ENOENT": ValueOf(syscall.ENOENT), + "ENOEXEC": ValueOf(syscall.ENOEXEC), + "ENOLCK": ValueOf(syscall.ENOLCK), + "ENOLINK": ValueOf(syscall.ENOLINK), + "ENOMEM": ValueOf(syscall.ENOMEM), + "ENOMSG": ValueOf(syscall.ENOMSG), + "ENOPOLICY": ValueOf(syscall.ENOPOLICY), + "ENOPROTOOPT": ValueOf(syscall.ENOPROTOOPT), + "ENOSPC": ValueOf(syscall.ENOSPC), + "ENOSR": ValueOf(syscall.ENOSR), + "ENOSTR": ValueOf(syscall.ENOSTR), + "ENOSYS": ValueOf(syscall.ENOSYS), + "ENOTBLK": ValueOf(syscall.ENOTBLK), + "ENOTCONN": ValueOf(syscall.ENOTCONN), + "ENOTDIR": ValueOf(syscall.ENOTDIR), + "ENOTEMPTY": ValueOf(syscall.ENOTEMPTY), + "ENOTRECOVERABLE": ValueOf(syscall.ENOTRECOVERABLE), + "ENOTSOCK": ValueOf(syscall.ENOTSOCK), + "ENOTSUP": ValueOf(syscall.ENOTSUP), + "ENOTTY": ValueOf(syscall.ENOTTY), + "ENXIO": ValueOf(syscall.ENXIO), + "EOPNOTSUPP": ValueOf(syscall.EOPNOTSUPP), + "EOVERFLOW": ValueOf(syscall.EOVERFLOW), + "EOWNERDEAD": ValueOf(syscall.EOWNERDEAD), + "EPERM": ValueOf(syscall.EPERM), + "EPFNOSUPPORT": ValueOf(syscall.EPFNOSUPPORT), + "EPIPE": ValueOf(syscall.EPIPE), + "EPROCLIM": ValueOf(syscall.EPROCLIM), + "EPROCUNAVAIL": ValueOf(syscall.EPROCUNAVAIL), + "EPROGMISMATCH": ValueOf(syscall.EPROGMISMATCH), + "EPROGUNAVAIL": ValueOf(syscall.EPROGUNAVAIL), + "EPROTO": ValueOf(syscall.EPROTO), + "EPROTONOSUPPORT": ValueOf(syscall.EPROTONOSUPPORT), + "EPROTOTYPE": ValueOf(syscall.EPROTOTYPE), + "EPWROFF": ValueOf(syscall.EPWROFF), + "ERANGE": ValueOf(syscall.ERANGE), + "EREMOTE": ValueOf(syscall.EREMOTE), + "EROFS": ValueOf(syscall.EROFS), + "ERPCMISMATCH": ValueOf(syscall.ERPCMISMATCH), + "ESHLIBVERS": ValueOf(syscall.ESHLIBVERS), + "ESHUTDOWN": ValueOf(syscall.ESHUTDOWN), + "ESOCKTNOSUPPORT": ValueOf(syscall.ESOCKTNOSUPPORT), + "ESPIPE": ValueOf(syscall.ESPIPE), + "ESRCH": ValueOf(syscall.ESRCH), + "ESTALE": ValueOf(syscall.ESTALE), + "ETIME": ValueOf(syscall.ETIME), + "ETIMEDOUT": ValueOf(syscall.ETIMEDOUT), + "ETOOMANYREFS": ValueOf(syscall.ETOOMANYREFS), + "ETXTBSY": ValueOf(syscall.ETXTBSY), + "EUSERS": ValueOf(syscall.EUSERS), + "EVFILT_AIO": ValueOf(syscall.EVFILT_AIO), + "EVFILT_FS": ValueOf(syscall.EVFILT_FS), + "EVFILT_MACHPORT": ValueOf(syscall.EVFILT_MACHPORT), + "EVFILT_PROC": ValueOf(syscall.EVFILT_PROC), + "EVFILT_READ": ValueOf(syscall.EVFILT_READ), + "EVFILT_SIGNAL": ValueOf(syscall.EVFILT_SIGNAL), + "EVFILT_SYSCOUNT": ValueOf(syscall.EVFILT_SYSCOUNT), + "EVFILT_THREADMARKER": ValueOf(syscall.EVFILT_THREADMARKER), + "EVFILT_TIMER": ValueOf(syscall.EVFILT_TIMER), + "EVFILT_USER": ValueOf(syscall.EVFILT_USER), + "EVFILT_VM": ValueOf(syscall.EVFILT_VM), + "EVFILT_VNODE": ValueOf(syscall.EVFILT_VNODE), + "EVFILT_WRITE": ValueOf(syscall.EVFILT_WRITE), + "EV_ADD": ValueOf(syscall.EV_ADD), + "EV_CLEAR": ValueOf(syscall.EV_CLEAR), + "EV_DELETE": ValueOf(syscall.EV_DELETE), + "EV_DISABLE": ValueOf(syscall.EV_DISABLE), + "EV_DISPATCH": ValueOf(syscall.EV_DISPATCH), + "EV_ENABLE": ValueOf(syscall.EV_ENABLE), + "EV_EOF": ValueOf(syscall.EV_EOF), + "EV_ERROR": ValueOf(syscall.EV_ERROR), + "EV_FLAG0": ValueOf(syscall.EV_FLAG0), + "EV_FLAG1": ValueOf(syscall.EV_FLAG1), + "EV_ONESHOT": ValueOf(syscall.EV_ONESHOT), + "EV_OOBAND": ValueOf(syscall.EV_OOBAND), + "EV_POLL": ValueOf(syscall.EV_POLL), + "EV_RECEIPT": ValueOf(syscall.EV_RECEIPT), + "EV_SYSFLAGS": ValueOf(syscall.EV_SYSFLAGS), + "EWOULDBLOCK": ValueOf(syscall.EWOULDBLOCK), + "EXDEV": ValueOf(syscall.EXDEV), + "EXTA": ValueOf(syscall.EXTA), + "EXTB": ValueOf(syscall.EXTB), + "EXTPROC": ValueOf(syscall.EXTPROC), + "Environ": ValueOf(syscall.Environ), + "Exchangedata": ValueOf(syscall.Exchangedata), + "Exec": ValueOf(syscall.Exec), + "Exit": ValueOf(syscall.Exit), + "FD_CLOEXEC": ValueOf(syscall.FD_CLOEXEC), + "FD_SETSIZE": ValueOf(syscall.FD_SETSIZE), + "FLUSHO": ValueOf(syscall.FLUSHO), + "F_ADDFILESIGS": ValueOf(syscall.F_ADDFILESIGS), + "F_ADDSIGS": ValueOf(syscall.F_ADDSIGS), + "F_ALLOCATEALL": ValueOf(syscall.F_ALLOCATEALL), + "F_ALLOCATECONTIG": ValueOf(syscall.F_ALLOCATECONTIG), + "F_CHKCLEAN": ValueOf(syscall.F_CHKCLEAN), + "F_DUPFD": ValueOf(syscall.F_DUPFD), + "F_DUPFD_CLOEXEC": ValueOf(syscall.F_DUPFD_CLOEXEC), + "F_FLUSH_DATA": ValueOf(syscall.F_FLUSH_DATA), + "F_FREEZE_FS": ValueOf(syscall.F_FREEZE_FS), + "F_FULLFSYNC": ValueOf(syscall.F_FULLFSYNC), + "F_GETFD": ValueOf(syscall.F_GETFD), + "F_GETFL": ValueOf(syscall.F_GETFL), + "F_GETLK": ValueOf(syscall.F_GETLK), + "F_GETLKPID": ValueOf(syscall.F_GETLKPID), + "F_GETNOSIGPIPE": ValueOf(syscall.F_GETNOSIGPIPE), + "F_GETOWN": ValueOf(syscall.F_GETOWN), + "F_GETPATH": ValueOf(syscall.F_GETPATH), + "F_GETPATH_MTMINFO": ValueOf(syscall.F_GETPATH_MTMINFO), + "F_GETPROTECTIONCLASS": ValueOf(syscall.F_GETPROTECTIONCLASS), + "F_GLOBAL_NOCACHE": ValueOf(syscall.F_GLOBAL_NOCACHE), + "F_LOG2PHYS": ValueOf(syscall.F_LOG2PHYS), + "F_LOG2PHYS_EXT": ValueOf(syscall.F_LOG2PHYS_EXT), + "F_MARKDEPENDENCY": ValueOf(syscall.F_MARKDEPENDENCY), + "F_NOCACHE": ValueOf(syscall.F_NOCACHE), + "F_NODIRECT": ValueOf(syscall.F_NODIRECT), + "F_OK": ValueOf(syscall.F_OK), + "F_PATHPKG_CHECK": ValueOf(syscall.F_PATHPKG_CHECK), + "F_PEOFPOSMODE": ValueOf(syscall.F_PEOFPOSMODE), + "F_PREALLOCATE": ValueOf(syscall.F_PREALLOCATE), + "F_RDADVISE": ValueOf(syscall.F_RDADVISE), + "F_RDAHEAD": ValueOf(syscall.F_RDAHEAD), + "F_RDLCK": ValueOf(syscall.F_RDLCK), + "F_READBOOTSTRAP": ValueOf(syscall.F_READBOOTSTRAP), + "F_SETBACKINGSTORE": ValueOf(syscall.F_SETBACKINGSTORE), + "F_SETFD": ValueOf(syscall.F_SETFD), + "F_SETFL": ValueOf(syscall.F_SETFL), + "F_SETLK": ValueOf(syscall.F_SETLK), + "F_SETLKW": ValueOf(syscall.F_SETLKW), + "F_SETNOSIGPIPE": ValueOf(syscall.F_SETNOSIGPIPE), + "F_SETOWN": ValueOf(syscall.F_SETOWN), + "F_SETPROTECTIONCLASS": ValueOf(syscall.F_SETPROTECTIONCLASS), + "F_SETSIZE": ValueOf(syscall.F_SETSIZE), + "F_THAW_FS": ValueOf(syscall.F_THAW_FS), + "F_UNLCK": ValueOf(syscall.F_UNLCK), + "F_VOLPOSMODE": ValueOf(syscall.F_VOLPOSMODE), + "F_WRITEBOOTSTRAP": ValueOf(syscall.F_WRITEBOOTSTRAP), + "F_WRLCK": ValueOf(syscall.F_WRLCK), + "Fchdir": ValueOf(syscall.Fchdir), + "Fchflags": ValueOf(syscall.Fchflags), + "Fchmod": ValueOf(syscall.Fchmod), + "Fchown": ValueOf(syscall.Fchown), + "FcntlFlock": ValueOf(syscall.FcntlFlock), + "Flock": ValueOf(syscall.Flock), + "FlushBpf": ValueOf(syscall.FlushBpf), + "ForkExec": ValueOf(syscall.ForkExec), + "ForkLock": ValueOf(&syscall.ForkLock).Elem(), + "Fpathconf": ValueOf(syscall.Fpathconf), + "Fstat": ValueOf(syscall.Fstat), + "Fstatfs": ValueOf(syscall.Fstatfs), + "Fsync": ValueOf(syscall.Fsync), + "Ftruncate": ValueOf(syscall.Ftruncate), + "Futimes": ValueOf(syscall.Futimes), + "Getdirentries": ValueOf(syscall.Getdirentries), + "Getdtablesize": ValueOf(syscall.Getdtablesize), + "Getegid": ValueOf(syscall.Getegid), + "Getenv": ValueOf(syscall.Getenv), + "Geteuid": ValueOf(syscall.Geteuid), + "Getfsstat": ValueOf(syscall.Getfsstat), + "Getgid": ValueOf(syscall.Getgid), + "Getgroups": ValueOf(syscall.Getgroups), + "Getpagesize": ValueOf(syscall.Getpagesize), + "Getpeername": ValueOf(syscall.Getpeername), + "Getpgid": ValueOf(syscall.Getpgid), + "Getpgrp": ValueOf(syscall.Getpgrp), + "Getpid": ValueOf(syscall.Getpid), + "Getppid": ValueOf(syscall.Getppid), + "Getpriority": ValueOf(syscall.Getpriority), + "Getrlimit": ValueOf(syscall.Getrlimit), + "Getrusage": ValueOf(syscall.Getrusage), + "Getsid": ValueOf(syscall.Getsid), + "Getsockname": ValueOf(syscall.Getsockname), + "GetsockoptByte": ValueOf(syscall.GetsockoptByte), + "GetsockoptICMPv6Filter": ValueOf(syscall.GetsockoptICMPv6Filter), + "GetsockoptIPMreq": ValueOf(syscall.GetsockoptIPMreq), + "GetsockoptIPv6MTUInfo": ValueOf(syscall.GetsockoptIPv6MTUInfo), + "GetsockoptIPv6Mreq": ValueOf(syscall.GetsockoptIPv6Mreq), + "GetsockoptInet4Addr": ValueOf(syscall.GetsockoptInet4Addr), + "GetsockoptInt": ValueOf(syscall.GetsockoptInt), + "Gettimeofday": ValueOf(syscall.Gettimeofday), + "Getuid": ValueOf(syscall.Getuid), + "Getwd": ValueOf(syscall.Getwd), + "HUPCL": ValueOf(syscall.HUPCL), + "ICANON": ValueOf(syscall.ICANON), + "ICMP6_FILTER": ValueOf(syscall.ICMP6_FILTER), + "ICRNL": ValueOf(syscall.ICRNL), + "IEXTEN": ValueOf(syscall.IEXTEN), + "IFF_ALLMULTI": ValueOf(syscall.IFF_ALLMULTI), + "IFF_ALTPHYS": ValueOf(syscall.IFF_ALTPHYS), + "IFF_BROADCAST": ValueOf(syscall.IFF_BROADCAST), + "IFF_DEBUG": ValueOf(syscall.IFF_DEBUG), + "IFF_LINK0": ValueOf(syscall.IFF_LINK0), + "IFF_LINK1": ValueOf(syscall.IFF_LINK1), + "IFF_LINK2": ValueOf(syscall.IFF_LINK2), + "IFF_LOOPBACK": ValueOf(syscall.IFF_LOOPBACK), + "IFF_MULTICAST": ValueOf(syscall.IFF_MULTICAST), + "IFF_NOARP": ValueOf(syscall.IFF_NOARP), + "IFF_NOTRAILERS": ValueOf(syscall.IFF_NOTRAILERS), + "IFF_OACTIVE": ValueOf(syscall.IFF_OACTIVE), + "IFF_POINTOPOINT": ValueOf(syscall.IFF_POINTOPOINT), + "IFF_PROMISC": ValueOf(syscall.IFF_PROMISC), + "IFF_RUNNING": ValueOf(syscall.IFF_RUNNING), + "IFF_SIMPLEX": ValueOf(syscall.IFF_SIMPLEX), + "IFF_UP": ValueOf(syscall.IFF_UP), + "IFNAMSIZ": ValueOf(syscall.IFNAMSIZ), + "IFT_1822": ValueOf(syscall.IFT_1822), + "IFT_AAL5": ValueOf(syscall.IFT_AAL5), + "IFT_ARCNET": ValueOf(syscall.IFT_ARCNET), + "IFT_ARCNETPLUS": ValueOf(syscall.IFT_ARCNETPLUS), + "IFT_ATM": ValueOf(syscall.IFT_ATM), + "IFT_BRIDGE": ValueOf(syscall.IFT_BRIDGE), + "IFT_CARP": ValueOf(syscall.IFT_CARP), + "IFT_CELLULAR": ValueOf(syscall.IFT_CELLULAR), + "IFT_CEPT": ValueOf(syscall.IFT_CEPT), + "IFT_DS3": ValueOf(syscall.IFT_DS3), + "IFT_ENC": ValueOf(syscall.IFT_ENC), + "IFT_EON": ValueOf(syscall.IFT_EON), + "IFT_ETHER": ValueOf(syscall.IFT_ETHER), + "IFT_FAITH": ValueOf(syscall.IFT_FAITH), + "IFT_FDDI": ValueOf(syscall.IFT_FDDI), + "IFT_FRELAY": ValueOf(syscall.IFT_FRELAY), + "IFT_FRELAYDCE": ValueOf(syscall.IFT_FRELAYDCE), + "IFT_GIF": ValueOf(syscall.IFT_GIF), + "IFT_HDH1822": ValueOf(syscall.IFT_HDH1822), + "IFT_HIPPI": ValueOf(syscall.IFT_HIPPI), + "IFT_HSSI": ValueOf(syscall.IFT_HSSI), + "IFT_HY": ValueOf(syscall.IFT_HY), + "IFT_IEEE1394": ValueOf(syscall.IFT_IEEE1394), + "IFT_IEEE8023ADLAG": ValueOf(syscall.IFT_IEEE8023ADLAG), + "IFT_ISDNBASIC": ValueOf(syscall.IFT_ISDNBASIC), + "IFT_ISDNPRIMARY": ValueOf(syscall.IFT_ISDNPRIMARY), + "IFT_ISO88022LLC": ValueOf(syscall.IFT_ISO88022LLC), + "IFT_ISO88023": ValueOf(syscall.IFT_ISO88023), + "IFT_ISO88024": ValueOf(syscall.IFT_ISO88024), + "IFT_ISO88025": ValueOf(syscall.IFT_ISO88025), + "IFT_ISO88026": ValueOf(syscall.IFT_ISO88026), + "IFT_L2VLAN": ValueOf(syscall.IFT_L2VLAN), + "IFT_LAPB": ValueOf(syscall.IFT_LAPB), + "IFT_LOCALTALK": ValueOf(syscall.IFT_LOCALTALK), + "IFT_LOOP": ValueOf(syscall.IFT_LOOP), + "IFT_MIOX25": ValueOf(syscall.IFT_MIOX25), + "IFT_MODEM": ValueOf(syscall.IFT_MODEM), + "IFT_NSIP": ValueOf(syscall.IFT_NSIP), + "IFT_OTHER": ValueOf(syscall.IFT_OTHER), + "IFT_P10": ValueOf(syscall.IFT_P10), + "IFT_P80": ValueOf(syscall.IFT_P80), + "IFT_PARA": ValueOf(syscall.IFT_PARA), + "IFT_PDP": ValueOf(syscall.IFT_PDP), + "IFT_PFLOG": ValueOf(syscall.IFT_PFLOG), + "IFT_PFSYNC": ValueOf(syscall.IFT_PFSYNC), + "IFT_PPP": ValueOf(syscall.IFT_PPP), + "IFT_PROPMUX": ValueOf(syscall.IFT_PROPMUX), + "IFT_PROPVIRTUAL": ValueOf(syscall.IFT_PROPVIRTUAL), + "IFT_PTPSERIAL": ValueOf(syscall.IFT_PTPSERIAL), + "IFT_RS232": ValueOf(syscall.IFT_RS232), + "IFT_SDLC": ValueOf(syscall.IFT_SDLC), + "IFT_SIP": ValueOf(syscall.IFT_SIP), + "IFT_SLIP": ValueOf(syscall.IFT_SLIP), + "IFT_SMDSDXI": ValueOf(syscall.IFT_SMDSDXI), + "IFT_SMDSICIP": ValueOf(syscall.IFT_SMDSICIP), + "IFT_SONET": ValueOf(syscall.IFT_SONET), + "IFT_SONETPATH": ValueOf(syscall.IFT_SONETPATH), + "IFT_SONETVT": ValueOf(syscall.IFT_SONETVT), + "IFT_STARLAN": ValueOf(syscall.IFT_STARLAN), + "IFT_STF": ValueOf(syscall.IFT_STF), + "IFT_T1": ValueOf(syscall.IFT_T1), + "IFT_ULTRA": ValueOf(syscall.IFT_ULTRA), + "IFT_V35": ValueOf(syscall.IFT_V35), + "IFT_X25": ValueOf(syscall.IFT_X25), + "IFT_X25DDN": ValueOf(syscall.IFT_X25DDN), + "IFT_X25PLE": ValueOf(syscall.IFT_X25PLE), + "IFT_XETHER": ValueOf(syscall.IFT_XETHER), + "IGNBRK": ValueOf(syscall.IGNBRK), + "IGNCR": ValueOf(syscall.IGNCR), + "IGNPAR": ValueOf(syscall.IGNPAR), + "IMAXBEL": ValueOf(syscall.IMAXBEL), + "INLCR": ValueOf(syscall.INLCR), + "INPCK": ValueOf(syscall.INPCK), + "IN_CLASSA_HOST": ValueOf(syscall.IN_CLASSA_HOST), + "IN_CLASSA_MAX": ValueOf(syscall.IN_CLASSA_MAX), + "IN_CLASSA_NET": ValueOf(uint32(syscall.IN_CLASSA_NET)), + "IN_CLASSA_NSHIFT": ValueOf(syscall.IN_CLASSA_NSHIFT), + "IN_CLASSB_HOST": ValueOf(syscall.IN_CLASSB_HOST), + "IN_CLASSB_MAX": ValueOf(syscall.IN_CLASSB_MAX), + "IN_CLASSB_NET": ValueOf(uint32(syscall.IN_CLASSB_NET)), + "IN_CLASSB_NSHIFT": ValueOf(syscall.IN_CLASSB_NSHIFT), + "IN_CLASSC_HOST": ValueOf(syscall.IN_CLASSC_HOST), + "IN_CLASSC_NET": ValueOf(uint32(syscall.IN_CLASSC_NET)), + "IN_CLASSC_NSHIFT": ValueOf(syscall.IN_CLASSC_NSHIFT), + "IN_CLASSD_HOST": ValueOf(syscall.IN_CLASSD_HOST), + "IN_CLASSD_NET": ValueOf(uint32(syscall.IN_CLASSD_NET)), + "IN_CLASSD_NSHIFT": ValueOf(syscall.IN_CLASSD_NSHIFT), + "IN_LINKLOCALNETNUM": ValueOf(uint32(syscall.IN_LINKLOCALNETNUM)), + "IN_LOOPBACKNET": ValueOf(syscall.IN_LOOPBACKNET), + "IPPROTO_3PC": ValueOf(syscall.IPPROTO_3PC), + "IPPROTO_ADFS": ValueOf(syscall.IPPROTO_ADFS), + "IPPROTO_AH": ValueOf(syscall.IPPROTO_AH), + "IPPROTO_AHIP": ValueOf(syscall.IPPROTO_AHIP), + "IPPROTO_APES": ValueOf(syscall.IPPROTO_APES), + "IPPROTO_ARGUS": ValueOf(syscall.IPPROTO_ARGUS), + "IPPROTO_AX25": ValueOf(syscall.IPPROTO_AX25), + "IPPROTO_BHA": ValueOf(syscall.IPPROTO_BHA), + "IPPROTO_BLT": ValueOf(syscall.IPPROTO_BLT), + "IPPROTO_BRSATMON": ValueOf(syscall.IPPROTO_BRSATMON), + "IPPROTO_CFTP": ValueOf(syscall.IPPROTO_CFTP), + "IPPROTO_CHAOS": ValueOf(syscall.IPPROTO_CHAOS), + "IPPROTO_CMTP": ValueOf(syscall.IPPROTO_CMTP), + "IPPROTO_CPHB": ValueOf(syscall.IPPROTO_CPHB), + "IPPROTO_CPNX": ValueOf(syscall.IPPROTO_CPNX), + "IPPROTO_DDP": ValueOf(syscall.IPPROTO_DDP), + "IPPROTO_DGP": ValueOf(syscall.IPPROTO_DGP), + "IPPROTO_DIVERT": ValueOf(syscall.IPPROTO_DIVERT), + "IPPROTO_DONE": ValueOf(syscall.IPPROTO_DONE), + "IPPROTO_DSTOPTS": ValueOf(syscall.IPPROTO_DSTOPTS), + "IPPROTO_EGP": ValueOf(syscall.IPPROTO_EGP), + "IPPROTO_EMCON": ValueOf(syscall.IPPROTO_EMCON), + "IPPROTO_ENCAP": ValueOf(syscall.IPPROTO_ENCAP), + "IPPROTO_EON": ValueOf(syscall.IPPROTO_EON), + "IPPROTO_ESP": ValueOf(syscall.IPPROTO_ESP), + "IPPROTO_ETHERIP": ValueOf(syscall.IPPROTO_ETHERIP), + "IPPROTO_FRAGMENT": ValueOf(syscall.IPPROTO_FRAGMENT), + "IPPROTO_GGP": ValueOf(syscall.IPPROTO_GGP), + "IPPROTO_GMTP": ValueOf(syscall.IPPROTO_GMTP), + "IPPROTO_GRE": ValueOf(syscall.IPPROTO_GRE), + "IPPROTO_HELLO": ValueOf(syscall.IPPROTO_HELLO), + "IPPROTO_HMP": ValueOf(syscall.IPPROTO_HMP), + "IPPROTO_HOPOPTS": ValueOf(syscall.IPPROTO_HOPOPTS), + "IPPROTO_ICMP": ValueOf(syscall.IPPROTO_ICMP), + "IPPROTO_ICMPV6": ValueOf(syscall.IPPROTO_ICMPV6), + "IPPROTO_IDP": ValueOf(syscall.IPPROTO_IDP), + "IPPROTO_IDPR": ValueOf(syscall.IPPROTO_IDPR), + "IPPROTO_IDRP": ValueOf(syscall.IPPROTO_IDRP), + "IPPROTO_IGMP": ValueOf(syscall.IPPROTO_IGMP), + "IPPROTO_IGP": ValueOf(syscall.IPPROTO_IGP), + "IPPROTO_IGRP": ValueOf(syscall.IPPROTO_IGRP), + "IPPROTO_IL": ValueOf(syscall.IPPROTO_IL), + "IPPROTO_INLSP": ValueOf(syscall.IPPROTO_INLSP), + "IPPROTO_INP": ValueOf(syscall.IPPROTO_INP), + "IPPROTO_IP": ValueOf(syscall.IPPROTO_IP), + "IPPROTO_IPCOMP": ValueOf(syscall.IPPROTO_IPCOMP), + "IPPROTO_IPCV": ValueOf(syscall.IPPROTO_IPCV), + "IPPROTO_IPEIP": ValueOf(syscall.IPPROTO_IPEIP), + "IPPROTO_IPIP": ValueOf(syscall.IPPROTO_IPIP), + "IPPROTO_IPPC": ValueOf(syscall.IPPROTO_IPPC), + "IPPROTO_IPV4": ValueOf(syscall.IPPROTO_IPV4), + "IPPROTO_IPV6": ValueOf(syscall.IPPROTO_IPV6), + "IPPROTO_IRTP": ValueOf(syscall.IPPROTO_IRTP), + "IPPROTO_KRYPTOLAN": ValueOf(syscall.IPPROTO_KRYPTOLAN), + "IPPROTO_LARP": ValueOf(syscall.IPPROTO_LARP), + "IPPROTO_LEAF1": ValueOf(syscall.IPPROTO_LEAF1), + "IPPROTO_LEAF2": ValueOf(syscall.IPPROTO_LEAF2), + "IPPROTO_MAX": ValueOf(syscall.IPPROTO_MAX), + "IPPROTO_MAXID": ValueOf(syscall.IPPROTO_MAXID), + "IPPROTO_MEAS": ValueOf(syscall.IPPROTO_MEAS), + "IPPROTO_MHRP": ValueOf(syscall.IPPROTO_MHRP), + "IPPROTO_MICP": ValueOf(syscall.IPPROTO_MICP), + "IPPROTO_MTP": ValueOf(syscall.IPPROTO_MTP), + "IPPROTO_MUX": ValueOf(syscall.IPPROTO_MUX), + "IPPROTO_ND": ValueOf(syscall.IPPROTO_ND), + "IPPROTO_NHRP": ValueOf(syscall.IPPROTO_NHRP), + "IPPROTO_NONE": ValueOf(syscall.IPPROTO_NONE), + "IPPROTO_NSP": ValueOf(syscall.IPPROTO_NSP), + "IPPROTO_NVPII": ValueOf(syscall.IPPROTO_NVPII), + "IPPROTO_OSPFIGP": ValueOf(syscall.IPPROTO_OSPFIGP), + "IPPROTO_PGM": ValueOf(syscall.IPPROTO_PGM), + "IPPROTO_PIGP": ValueOf(syscall.IPPROTO_PIGP), + "IPPROTO_PIM": ValueOf(syscall.IPPROTO_PIM), + "IPPROTO_PRM": ValueOf(syscall.IPPROTO_PRM), + "IPPROTO_PUP": ValueOf(syscall.IPPROTO_PUP), + "IPPROTO_PVP": ValueOf(syscall.IPPROTO_PVP), + "IPPROTO_RAW": ValueOf(syscall.IPPROTO_RAW), + "IPPROTO_RCCMON": ValueOf(syscall.IPPROTO_RCCMON), + "IPPROTO_RDP": ValueOf(syscall.IPPROTO_RDP), + "IPPROTO_ROUTING": ValueOf(syscall.IPPROTO_ROUTING), + "IPPROTO_RSVP": ValueOf(syscall.IPPROTO_RSVP), + "IPPROTO_RVD": ValueOf(syscall.IPPROTO_RVD), + "IPPROTO_SATEXPAK": ValueOf(syscall.IPPROTO_SATEXPAK), + "IPPROTO_SATMON": ValueOf(syscall.IPPROTO_SATMON), + "IPPROTO_SCCSP": ValueOf(syscall.IPPROTO_SCCSP), + "IPPROTO_SCTP": ValueOf(syscall.IPPROTO_SCTP), + "IPPROTO_SDRP": ValueOf(syscall.IPPROTO_SDRP), + "IPPROTO_SEP": ValueOf(syscall.IPPROTO_SEP), + "IPPROTO_SRPC": ValueOf(syscall.IPPROTO_SRPC), + "IPPROTO_ST": ValueOf(syscall.IPPROTO_ST), + "IPPROTO_SVMTP": ValueOf(syscall.IPPROTO_SVMTP), + "IPPROTO_SWIPE": ValueOf(syscall.IPPROTO_SWIPE), + "IPPROTO_TCF": ValueOf(syscall.IPPROTO_TCF), + "IPPROTO_TCP": ValueOf(syscall.IPPROTO_TCP), + "IPPROTO_TP": ValueOf(syscall.IPPROTO_TP), + "IPPROTO_TPXX": ValueOf(syscall.IPPROTO_TPXX), + "IPPROTO_TRUNK1": ValueOf(syscall.IPPROTO_TRUNK1), + "IPPROTO_TRUNK2": ValueOf(syscall.IPPROTO_TRUNK2), + "IPPROTO_TTP": ValueOf(syscall.IPPROTO_TTP), + "IPPROTO_UDP": ValueOf(syscall.IPPROTO_UDP), + "IPPROTO_VINES": ValueOf(syscall.IPPROTO_VINES), + "IPPROTO_VISA": ValueOf(syscall.IPPROTO_VISA), + "IPPROTO_VMTP": ValueOf(syscall.IPPROTO_VMTP), + "IPPROTO_WBEXPAK": ValueOf(syscall.IPPROTO_WBEXPAK), + "IPPROTO_WBMON": ValueOf(syscall.IPPROTO_WBMON), + "IPPROTO_WSN": ValueOf(syscall.IPPROTO_WSN), + "IPPROTO_XNET": ValueOf(syscall.IPPROTO_XNET), + "IPPROTO_XTP": ValueOf(syscall.IPPROTO_XTP), + "IPV6_2292DSTOPTS": ValueOf(syscall.IPV6_2292DSTOPTS), + "IPV6_2292HOPLIMIT": ValueOf(syscall.IPV6_2292HOPLIMIT), + "IPV6_2292HOPOPTS": ValueOf(syscall.IPV6_2292HOPOPTS), + "IPV6_2292NEXTHOP": ValueOf(syscall.IPV6_2292NEXTHOP), + "IPV6_2292PKTINFO": ValueOf(syscall.IPV6_2292PKTINFO), + "IPV6_2292PKTOPTIONS": ValueOf(syscall.IPV6_2292PKTOPTIONS), + "IPV6_2292RTHDR": ValueOf(syscall.IPV6_2292RTHDR), + "IPV6_BINDV6ONLY": ValueOf(syscall.IPV6_BINDV6ONLY), + "IPV6_BOUND_IF": ValueOf(syscall.IPV6_BOUND_IF), + "IPV6_CHECKSUM": ValueOf(syscall.IPV6_CHECKSUM), + "IPV6_DEFAULT_MULTICAST_HOPS": ValueOf(syscall.IPV6_DEFAULT_MULTICAST_HOPS), + "IPV6_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IPV6_DEFAULT_MULTICAST_LOOP), + "IPV6_DEFHLIM": ValueOf(syscall.IPV6_DEFHLIM), + "IPV6_FAITH": ValueOf(syscall.IPV6_FAITH), + "IPV6_FLOWINFO_MASK": ValueOf(uint32(syscall.IPV6_FLOWINFO_MASK)), + "IPV6_FLOWLABEL_MASK": ValueOf(uint32(syscall.IPV6_FLOWLABEL_MASK)), + "IPV6_FRAGTTL": ValueOf(syscall.IPV6_FRAGTTL), + "IPV6_FW_ADD": ValueOf(syscall.IPV6_FW_ADD), + "IPV6_FW_DEL": ValueOf(syscall.IPV6_FW_DEL), + "IPV6_FW_FLUSH": ValueOf(syscall.IPV6_FW_FLUSH), + "IPV6_FW_GET": ValueOf(syscall.IPV6_FW_GET), + "IPV6_FW_ZERO": ValueOf(syscall.IPV6_FW_ZERO), + "IPV6_HLIMDEC": ValueOf(syscall.IPV6_HLIMDEC), + "IPV6_IPSEC_POLICY": ValueOf(syscall.IPV6_IPSEC_POLICY), + "IPV6_JOIN_GROUP": ValueOf(syscall.IPV6_JOIN_GROUP), + "IPV6_LEAVE_GROUP": ValueOf(syscall.IPV6_LEAVE_GROUP), + "IPV6_MAXHLIM": ValueOf(syscall.IPV6_MAXHLIM), + "IPV6_MAXOPTHDR": ValueOf(syscall.IPV6_MAXOPTHDR), + "IPV6_MAXPACKET": ValueOf(syscall.IPV6_MAXPACKET), + "IPV6_MAX_GROUP_SRC_FILTER": ValueOf(syscall.IPV6_MAX_GROUP_SRC_FILTER), + "IPV6_MAX_MEMBERSHIPS": ValueOf(syscall.IPV6_MAX_MEMBERSHIPS), + "IPV6_MAX_SOCK_SRC_FILTER": ValueOf(syscall.IPV6_MAX_SOCK_SRC_FILTER), + "IPV6_MIN_MEMBERSHIPS": ValueOf(syscall.IPV6_MIN_MEMBERSHIPS), + "IPV6_MMTU": ValueOf(syscall.IPV6_MMTU), + "IPV6_MULTICAST_HOPS": ValueOf(syscall.IPV6_MULTICAST_HOPS), + "IPV6_MULTICAST_IF": ValueOf(syscall.IPV6_MULTICAST_IF), + "IPV6_MULTICAST_LOOP": ValueOf(syscall.IPV6_MULTICAST_LOOP), + "IPV6_PORTRANGE": ValueOf(syscall.IPV6_PORTRANGE), + "IPV6_PORTRANGE_DEFAULT": ValueOf(syscall.IPV6_PORTRANGE_DEFAULT), + "IPV6_PORTRANGE_HIGH": ValueOf(syscall.IPV6_PORTRANGE_HIGH), + "IPV6_PORTRANGE_LOW": ValueOf(syscall.IPV6_PORTRANGE_LOW), + "IPV6_RECVTCLASS": ValueOf(syscall.IPV6_RECVTCLASS), + "IPV6_RTHDR_LOOSE": ValueOf(syscall.IPV6_RTHDR_LOOSE), + "IPV6_RTHDR_STRICT": ValueOf(syscall.IPV6_RTHDR_STRICT), + "IPV6_RTHDR_TYPE_0": ValueOf(syscall.IPV6_RTHDR_TYPE_0), + "IPV6_SOCKOPT_RESERVED1": ValueOf(syscall.IPV6_SOCKOPT_RESERVED1), + "IPV6_TCLASS": ValueOf(syscall.IPV6_TCLASS), + "IPV6_UNICAST_HOPS": ValueOf(syscall.IPV6_UNICAST_HOPS), + "IPV6_V6ONLY": ValueOf(syscall.IPV6_V6ONLY), + "IPV6_VERSION": ValueOf(syscall.IPV6_VERSION), + "IPV6_VERSION_MASK": ValueOf(syscall.IPV6_VERSION_MASK), + "IP_ADD_MEMBERSHIP": ValueOf(syscall.IP_ADD_MEMBERSHIP), + "IP_ADD_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_ADD_SOURCE_MEMBERSHIP), + "IP_BLOCK_SOURCE": ValueOf(syscall.IP_BLOCK_SOURCE), + "IP_BOUND_IF": ValueOf(syscall.IP_BOUND_IF), + "IP_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IP_DEFAULT_MULTICAST_LOOP), + "IP_DEFAULT_MULTICAST_TTL": ValueOf(syscall.IP_DEFAULT_MULTICAST_TTL), + "IP_DF": ValueOf(syscall.IP_DF), + "IP_DROP_MEMBERSHIP": ValueOf(syscall.IP_DROP_MEMBERSHIP), + "IP_DROP_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_DROP_SOURCE_MEMBERSHIP), + "IP_DUMMYNET_CONFIGURE": ValueOf(syscall.IP_DUMMYNET_CONFIGURE), + "IP_DUMMYNET_DEL": ValueOf(syscall.IP_DUMMYNET_DEL), + "IP_DUMMYNET_FLUSH": ValueOf(syscall.IP_DUMMYNET_FLUSH), + "IP_DUMMYNET_GET": ValueOf(syscall.IP_DUMMYNET_GET), + "IP_FAITH": ValueOf(syscall.IP_FAITH), + "IP_FW_ADD": ValueOf(syscall.IP_FW_ADD), + "IP_FW_DEL": ValueOf(syscall.IP_FW_DEL), + "IP_FW_FLUSH": ValueOf(syscall.IP_FW_FLUSH), + "IP_FW_GET": ValueOf(syscall.IP_FW_GET), + "IP_FW_RESETLOG": ValueOf(syscall.IP_FW_RESETLOG), + "IP_FW_ZERO": ValueOf(syscall.IP_FW_ZERO), + "IP_HDRINCL": ValueOf(syscall.IP_HDRINCL), + "IP_IPSEC_POLICY": ValueOf(syscall.IP_IPSEC_POLICY), + "IP_MAXPACKET": ValueOf(syscall.IP_MAXPACKET), + "IP_MAX_GROUP_SRC_FILTER": ValueOf(syscall.IP_MAX_GROUP_SRC_FILTER), + "IP_MAX_MEMBERSHIPS": ValueOf(syscall.IP_MAX_MEMBERSHIPS), + "IP_MAX_SOCK_MUTE_FILTER": ValueOf(syscall.IP_MAX_SOCK_MUTE_FILTER), + "IP_MAX_SOCK_SRC_FILTER": ValueOf(syscall.IP_MAX_SOCK_SRC_FILTER), + "IP_MF": ValueOf(syscall.IP_MF), + "IP_MIN_MEMBERSHIPS": ValueOf(syscall.IP_MIN_MEMBERSHIPS), + "IP_MSFILTER": ValueOf(syscall.IP_MSFILTER), + "IP_MSS": ValueOf(syscall.IP_MSS), + "IP_MULTICAST_IF": ValueOf(syscall.IP_MULTICAST_IF), + "IP_MULTICAST_IFINDEX": ValueOf(syscall.IP_MULTICAST_IFINDEX), + "IP_MULTICAST_LOOP": ValueOf(syscall.IP_MULTICAST_LOOP), + "IP_MULTICAST_TTL": ValueOf(syscall.IP_MULTICAST_TTL), + "IP_MULTICAST_VIF": ValueOf(syscall.IP_MULTICAST_VIF), + "IP_NAT__XXX": ValueOf(syscall.IP_NAT__XXX), + "IP_OFFMASK": ValueOf(syscall.IP_OFFMASK), + "IP_OLD_FW_ADD": ValueOf(syscall.IP_OLD_FW_ADD), + "IP_OLD_FW_DEL": ValueOf(syscall.IP_OLD_FW_DEL), + "IP_OLD_FW_FLUSH": ValueOf(syscall.IP_OLD_FW_FLUSH), + "IP_OLD_FW_GET": ValueOf(syscall.IP_OLD_FW_GET), + "IP_OLD_FW_RESETLOG": ValueOf(syscall.IP_OLD_FW_RESETLOG), + "IP_OLD_FW_ZERO": ValueOf(syscall.IP_OLD_FW_ZERO), + "IP_OPTIONS": ValueOf(syscall.IP_OPTIONS), + "IP_PKTINFO": ValueOf(syscall.IP_PKTINFO), + "IP_PORTRANGE": ValueOf(syscall.IP_PORTRANGE), + "IP_PORTRANGE_DEFAULT": ValueOf(syscall.IP_PORTRANGE_DEFAULT), + "IP_PORTRANGE_HIGH": ValueOf(syscall.IP_PORTRANGE_HIGH), + "IP_PORTRANGE_LOW": ValueOf(syscall.IP_PORTRANGE_LOW), + "IP_RECVDSTADDR": ValueOf(syscall.IP_RECVDSTADDR), + "IP_RECVIF": ValueOf(syscall.IP_RECVIF), + "IP_RECVOPTS": ValueOf(syscall.IP_RECVOPTS), + "IP_RECVPKTINFO": ValueOf(syscall.IP_RECVPKTINFO), + "IP_RECVRETOPTS": ValueOf(syscall.IP_RECVRETOPTS), + "IP_RECVTTL": ValueOf(syscall.IP_RECVTTL), + "IP_RETOPTS": ValueOf(syscall.IP_RETOPTS), + "IP_RF": ValueOf(syscall.IP_RF), + "IP_RSVP_OFF": ValueOf(syscall.IP_RSVP_OFF), + "IP_RSVP_ON": ValueOf(syscall.IP_RSVP_ON), + "IP_RSVP_VIF_OFF": ValueOf(syscall.IP_RSVP_VIF_OFF), + "IP_RSVP_VIF_ON": ValueOf(syscall.IP_RSVP_VIF_ON), + "IP_STRIPHDR": ValueOf(syscall.IP_STRIPHDR), + "IP_TOS": ValueOf(syscall.IP_TOS), + "IP_TRAFFIC_MGT_BACKGROUND": ValueOf(syscall.IP_TRAFFIC_MGT_BACKGROUND), + "IP_TTL": ValueOf(syscall.IP_TTL), + "IP_UNBLOCK_SOURCE": ValueOf(syscall.IP_UNBLOCK_SOURCE), + "ISIG": ValueOf(syscall.ISIG), + "ISTRIP": ValueOf(syscall.ISTRIP), + "IUTF8": ValueOf(syscall.IUTF8), + "IXANY": ValueOf(syscall.IXANY), + "IXOFF": ValueOf(syscall.IXOFF), + "IXON": ValueOf(syscall.IXON), + "ImplementsGetwd": ValueOf(syscall.ImplementsGetwd), + "Issetugid": ValueOf(syscall.Issetugid), + "Kevent": ValueOf(syscall.Kevent), + "Kill": ValueOf(syscall.Kill), + "Kqueue": ValueOf(syscall.Kqueue), + "LOCK_EX": ValueOf(syscall.LOCK_EX), + "LOCK_NB": ValueOf(syscall.LOCK_NB), + "LOCK_SH": ValueOf(syscall.LOCK_SH), + "LOCK_UN": ValueOf(syscall.LOCK_UN), + "Lchown": ValueOf(syscall.Lchown), + "Link": ValueOf(syscall.Link), + "Listen": ValueOf(syscall.Listen), + "Lstat": ValueOf(syscall.Lstat), + "MADV_CAN_REUSE": ValueOf(syscall.MADV_CAN_REUSE), + "MADV_DONTNEED": ValueOf(syscall.MADV_DONTNEED), + "MADV_FREE": ValueOf(syscall.MADV_FREE), + "MADV_FREE_REUSABLE": ValueOf(syscall.MADV_FREE_REUSABLE), + "MADV_FREE_REUSE": ValueOf(syscall.MADV_FREE_REUSE), + "MADV_NORMAL": ValueOf(syscall.MADV_NORMAL), + "MADV_RANDOM": ValueOf(syscall.MADV_RANDOM), + "MADV_SEQUENTIAL": ValueOf(syscall.MADV_SEQUENTIAL), + "MADV_WILLNEED": ValueOf(syscall.MADV_WILLNEED), + "MADV_ZERO_WIRED_PAGES": ValueOf(syscall.MADV_ZERO_WIRED_PAGES), + "MAP_ANON": ValueOf(syscall.MAP_ANON), + "MAP_COPY": ValueOf(syscall.MAP_COPY), + "MAP_FILE": ValueOf(syscall.MAP_FILE), + "MAP_FIXED": ValueOf(syscall.MAP_FIXED), + "MAP_HASSEMAPHORE": ValueOf(syscall.MAP_HASSEMAPHORE), + "MAP_JIT": ValueOf(syscall.MAP_JIT), + "MAP_NOCACHE": ValueOf(syscall.MAP_NOCACHE), + "MAP_NOEXTEND": ValueOf(syscall.MAP_NOEXTEND), + "MAP_NORESERVE": ValueOf(syscall.MAP_NORESERVE), + "MAP_PRIVATE": ValueOf(syscall.MAP_PRIVATE), + "MAP_RENAME": ValueOf(syscall.MAP_RENAME), + "MAP_RESERVED0080": ValueOf(syscall.MAP_RESERVED0080), + "MAP_SHARED": ValueOf(syscall.MAP_SHARED), + "MCL_CURRENT": ValueOf(syscall.MCL_CURRENT), + "MCL_FUTURE": ValueOf(syscall.MCL_FUTURE), + "MSG_CTRUNC": ValueOf(syscall.MSG_CTRUNC), + "MSG_DONTROUTE": ValueOf(syscall.MSG_DONTROUTE), + "MSG_DONTWAIT": ValueOf(syscall.MSG_DONTWAIT), + "MSG_EOF": ValueOf(syscall.MSG_EOF), + "MSG_EOR": ValueOf(syscall.MSG_EOR), + "MSG_FLUSH": ValueOf(syscall.MSG_FLUSH), + "MSG_HAVEMORE": ValueOf(syscall.MSG_HAVEMORE), + "MSG_HOLD": ValueOf(syscall.MSG_HOLD), + "MSG_NEEDSA": ValueOf(syscall.MSG_NEEDSA), + "MSG_OOB": ValueOf(syscall.MSG_OOB), + "MSG_PEEK": ValueOf(syscall.MSG_PEEK), + "MSG_RCVMORE": ValueOf(syscall.MSG_RCVMORE), + "MSG_SEND": ValueOf(syscall.MSG_SEND), + "MSG_TRUNC": ValueOf(syscall.MSG_TRUNC), + "MSG_WAITALL": ValueOf(syscall.MSG_WAITALL), + "MSG_WAITSTREAM": ValueOf(syscall.MSG_WAITSTREAM), + "MS_ASYNC": ValueOf(syscall.MS_ASYNC), + "MS_DEACTIVATE": ValueOf(syscall.MS_DEACTIVATE), + "MS_INVALIDATE": ValueOf(syscall.MS_INVALIDATE), + "MS_KILLPAGES": ValueOf(syscall.MS_KILLPAGES), + "MS_SYNC": ValueOf(syscall.MS_SYNC), + "Mkdir": ValueOf(syscall.Mkdir), + "Mkfifo": ValueOf(syscall.Mkfifo), + "Mknod": ValueOf(syscall.Mknod), + "Mlock": ValueOf(syscall.Mlock), + "Mlockall": ValueOf(syscall.Mlockall), + "Mmap": ValueOf(syscall.Mmap), + "Mprotect": ValueOf(syscall.Mprotect), + "Munlock": ValueOf(syscall.Munlock), + "Munlockall": ValueOf(syscall.Munlockall), + "Munmap": ValueOf(syscall.Munmap), + "NAME_MAX": ValueOf(syscall.NAME_MAX), + "NET_RT_DUMP": ValueOf(syscall.NET_RT_DUMP), + "NET_RT_DUMP2": ValueOf(syscall.NET_RT_DUMP2), + "NET_RT_FLAGS": ValueOf(syscall.NET_RT_FLAGS), + "NET_RT_IFLIST": ValueOf(syscall.NET_RT_IFLIST), + "NET_RT_IFLIST2": ValueOf(syscall.NET_RT_IFLIST2), + "NET_RT_MAXID": ValueOf(syscall.NET_RT_MAXID), + "NET_RT_STAT": ValueOf(syscall.NET_RT_STAT), + "NET_RT_TRASH": ValueOf(syscall.NET_RT_TRASH), + "NOFLSH": ValueOf(uint32(syscall.NOFLSH)), + "NOTE_ABSOLUTE": ValueOf(syscall.NOTE_ABSOLUTE), + "NOTE_ATTRIB": ValueOf(syscall.NOTE_ATTRIB), + "NOTE_CHILD": ValueOf(syscall.NOTE_CHILD), + "NOTE_DELETE": ValueOf(syscall.NOTE_DELETE), + "NOTE_EXEC": ValueOf(syscall.NOTE_EXEC), + "NOTE_EXIT": ValueOf(uint32(syscall.NOTE_EXIT)), + "NOTE_EXITSTATUS": ValueOf(syscall.NOTE_EXITSTATUS), + "NOTE_EXTEND": ValueOf(syscall.NOTE_EXTEND), + "NOTE_FFAND": ValueOf(syscall.NOTE_FFAND), + "NOTE_FFCOPY": ValueOf(uint32(syscall.NOTE_FFCOPY)), + "NOTE_FFCTRLMASK": ValueOf(uint32(syscall.NOTE_FFCTRLMASK)), + "NOTE_FFLAGSMASK": ValueOf(syscall.NOTE_FFLAGSMASK), + "NOTE_FFNOP": ValueOf(syscall.NOTE_FFNOP), + "NOTE_FFOR": ValueOf(uint32(syscall.NOTE_FFOR)), + "NOTE_FORK": ValueOf(syscall.NOTE_FORK), + "NOTE_LINK": ValueOf(syscall.NOTE_LINK), + "NOTE_LOWAT": ValueOf(syscall.NOTE_LOWAT), + "NOTE_NONE": ValueOf(syscall.NOTE_NONE), + "NOTE_NSECONDS": ValueOf(syscall.NOTE_NSECONDS), + "NOTE_PCTRLMASK": ValueOf(syscall.NOTE_PCTRLMASK), + "NOTE_PDATAMASK": ValueOf(syscall.NOTE_PDATAMASK), + "NOTE_REAP": ValueOf(syscall.NOTE_REAP), + "NOTE_RENAME": ValueOf(syscall.NOTE_RENAME), + "NOTE_RESOURCEEND": ValueOf(syscall.NOTE_RESOURCEEND), + "NOTE_REVOKE": ValueOf(syscall.NOTE_REVOKE), + "NOTE_SECONDS": ValueOf(syscall.NOTE_SECONDS), + "NOTE_SIGNAL": ValueOf(syscall.NOTE_SIGNAL), + "NOTE_TRACK": ValueOf(syscall.NOTE_TRACK), + "NOTE_TRACKERR": ValueOf(syscall.NOTE_TRACKERR), + "NOTE_TRIGGER": ValueOf(syscall.NOTE_TRIGGER), + "NOTE_USECONDS": ValueOf(syscall.NOTE_USECONDS), + "NOTE_VM_ERROR": ValueOf(syscall.NOTE_VM_ERROR), + "NOTE_VM_PRESSURE": ValueOf(uint32(syscall.NOTE_VM_PRESSURE)), + "NOTE_VM_PRESSURE_SUDDEN_TERMINATE": ValueOf(syscall.NOTE_VM_PRESSURE_SUDDEN_TERMINATE), + "NOTE_VM_PRESSURE_TERMINATE": ValueOf(syscall.NOTE_VM_PRESSURE_TERMINATE), + "NOTE_WRITE": ValueOf(syscall.NOTE_WRITE), + "NsecToTimespec": ValueOf(syscall.NsecToTimespec), + "NsecToTimeval": ValueOf(syscall.NsecToTimeval), + "OCRNL": ValueOf(syscall.OCRNL), + "OFDEL": ValueOf(syscall.OFDEL), + "OFILL": ValueOf(syscall.OFILL), + "ONLCR": ValueOf(syscall.ONLCR), + "ONLRET": ValueOf(syscall.ONLRET), + "ONOCR": ValueOf(syscall.ONOCR), + "ONOEOT": ValueOf(syscall.ONOEOT), + "OPOST": ValueOf(syscall.OPOST), + "O_ACCMODE": ValueOf(syscall.O_ACCMODE), + "O_ALERT": ValueOf(syscall.O_ALERT), + "O_APPEND": ValueOf(syscall.O_APPEND), + "O_ASYNC": ValueOf(syscall.O_ASYNC), + "O_CLOEXEC": ValueOf(syscall.O_CLOEXEC), + "O_CREAT": ValueOf(syscall.O_CREAT), + "O_DIRECTORY": ValueOf(syscall.O_DIRECTORY), + "O_DSYNC": ValueOf(syscall.O_DSYNC), + "O_EVTONLY": ValueOf(syscall.O_EVTONLY), + "O_EXCL": ValueOf(syscall.O_EXCL), + "O_EXLOCK": ValueOf(syscall.O_EXLOCK), + "O_FSYNC": ValueOf(syscall.O_FSYNC), + "O_NDELAY": ValueOf(syscall.O_NDELAY), + "O_NOCTTY": ValueOf(syscall.O_NOCTTY), + "O_NOFOLLOW": ValueOf(syscall.O_NOFOLLOW), + "O_NONBLOCK": ValueOf(syscall.O_NONBLOCK), + "O_POPUP": ValueOf(uint32(syscall.O_POPUP)), + "O_RDONLY": ValueOf(syscall.O_RDONLY), + "O_RDWR": ValueOf(syscall.O_RDWR), + "O_SHLOCK": ValueOf(syscall.O_SHLOCK), + "O_SYMLINK": ValueOf(syscall.O_SYMLINK), + "O_SYNC": ValueOf(syscall.O_SYNC), + "O_TRUNC": ValueOf(syscall.O_TRUNC), + "O_WRONLY": ValueOf(syscall.O_WRONLY), + "Open": ValueOf(syscall.Open), + "PARENB": ValueOf(syscall.PARENB), + "PARMRK": ValueOf(syscall.PARMRK), + "PARODD": ValueOf(syscall.PARODD), + "PENDIN": ValueOf(syscall.PENDIN), + "PRIO_PGRP": ValueOf(syscall.PRIO_PGRP), + "PRIO_PROCESS": ValueOf(syscall.PRIO_PROCESS), + "PRIO_USER": ValueOf(syscall.PRIO_USER), + "PROT_EXEC": ValueOf(syscall.PROT_EXEC), + "PROT_NONE": ValueOf(syscall.PROT_NONE), + "PROT_READ": ValueOf(syscall.PROT_READ), + "PROT_WRITE": ValueOf(syscall.PROT_WRITE), + "PTRACE_CONT": ValueOf(syscall.PTRACE_CONT), + "PTRACE_KILL": ValueOf(syscall.PTRACE_KILL), + "PTRACE_TRACEME": ValueOf(syscall.PTRACE_TRACEME), + "PT_ATTACH": ValueOf(syscall.PT_ATTACH), + "PT_ATTACHEXC": ValueOf(syscall.PT_ATTACHEXC), + "PT_CONTINUE": ValueOf(syscall.PT_CONTINUE), + "PT_DENY_ATTACH": ValueOf(syscall.PT_DENY_ATTACH), + "PT_DETACH": ValueOf(syscall.PT_DETACH), + "PT_FIRSTMACH": ValueOf(syscall.PT_FIRSTMACH), + "PT_FORCEQUOTA": ValueOf(syscall.PT_FORCEQUOTA), + "PT_KILL": ValueOf(syscall.PT_KILL), + "PT_READ_D": ValueOf(syscall.PT_READ_D), + "PT_READ_I": ValueOf(syscall.PT_READ_I), + "PT_READ_U": ValueOf(syscall.PT_READ_U), + "PT_SIGEXC": ValueOf(syscall.PT_SIGEXC), + "PT_STEP": ValueOf(syscall.PT_STEP), + "PT_THUPDATE": ValueOf(syscall.PT_THUPDATE), + "PT_TRACE_ME": ValueOf(syscall.PT_TRACE_ME), + "PT_WRITE_D": ValueOf(syscall.PT_WRITE_D), + "PT_WRITE_I": ValueOf(syscall.PT_WRITE_I), + "PT_WRITE_U": ValueOf(syscall.PT_WRITE_U), + "ParseDirent": ValueOf(syscall.ParseDirent), + "ParseRoutingMessage": ValueOf(syscall.ParseRoutingMessage), + "ParseRoutingSockaddr": ValueOf(syscall.ParseRoutingSockaddr), + "ParseSocketControlMessage": ValueOf(syscall.ParseSocketControlMessage), + "ParseUnixRights": ValueOf(syscall.ParseUnixRights), + "Pathconf": ValueOf(syscall.Pathconf), + "Pipe": ValueOf(syscall.Pipe), + "Pread": ValueOf(syscall.Pread), + "PtraceAttach": ValueOf(syscall.PtraceAttach), + "PtraceDetach": ValueOf(syscall.PtraceDetach), + "Pwrite": ValueOf(syscall.Pwrite), + "RLIMIT_AS": ValueOf(syscall.RLIMIT_AS), + "RLIMIT_CORE": ValueOf(syscall.RLIMIT_CORE), + "RLIMIT_CPU": ValueOf(syscall.RLIMIT_CPU), + "RLIMIT_DATA": ValueOf(syscall.RLIMIT_DATA), + "RLIMIT_FSIZE": ValueOf(syscall.RLIMIT_FSIZE), + "RLIMIT_NOFILE": ValueOf(syscall.RLIMIT_NOFILE), + "RLIMIT_STACK": ValueOf(syscall.RLIMIT_STACK), + "RLIM_INFINITY": ValueOf(int64(syscall.RLIM_INFINITY)), + "RTAX_AUTHOR": ValueOf(syscall.RTAX_AUTHOR), + "RTAX_BRD": ValueOf(syscall.RTAX_BRD), + "RTAX_DST": ValueOf(syscall.RTAX_DST), + "RTAX_GATEWAY": ValueOf(syscall.RTAX_GATEWAY), + "RTAX_GENMASK": ValueOf(syscall.RTAX_GENMASK), + "RTAX_IFA": ValueOf(syscall.RTAX_IFA), + "RTAX_IFP": ValueOf(syscall.RTAX_IFP), + "RTAX_MAX": ValueOf(syscall.RTAX_MAX), + "RTAX_NETMASK": ValueOf(syscall.RTAX_NETMASK), + "RTA_AUTHOR": ValueOf(syscall.RTA_AUTHOR), + "RTA_BRD": ValueOf(syscall.RTA_BRD), + "RTA_DST": ValueOf(syscall.RTA_DST), + "RTA_GATEWAY": ValueOf(syscall.RTA_GATEWAY), + "RTA_GENMASK": ValueOf(syscall.RTA_GENMASK), + "RTA_IFA": ValueOf(syscall.RTA_IFA), + "RTA_IFP": ValueOf(syscall.RTA_IFP), + "RTA_NETMASK": ValueOf(syscall.RTA_NETMASK), + "RTF_BLACKHOLE": ValueOf(syscall.RTF_BLACKHOLE), + "RTF_BROADCAST": ValueOf(syscall.RTF_BROADCAST), + "RTF_CLONING": ValueOf(syscall.RTF_CLONING), + "RTF_CONDEMNED": ValueOf(syscall.RTF_CONDEMNED), + "RTF_DELCLONE": ValueOf(syscall.RTF_DELCLONE), + "RTF_DONE": ValueOf(syscall.RTF_DONE), + "RTF_DYNAMIC": ValueOf(syscall.RTF_DYNAMIC), + "RTF_GATEWAY": ValueOf(syscall.RTF_GATEWAY), + "RTF_HOST": ValueOf(syscall.RTF_HOST), + "RTF_IFREF": ValueOf(syscall.RTF_IFREF), + "RTF_IFSCOPE": ValueOf(syscall.RTF_IFSCOPE), + "RTF_LLINFO": ValueOf(syscall.RTF_LLINFO), + "RTF_LOCAL": ValueOf(syscall.RTF_LOCAL), + "RTF_MODIFIED": ValueOf(syscall.RTF_MODIFIED), + "RTF_MULTICAST": ValueOf(syscall.RTF_MULTICAST), + "RTF_PINNED": ValueOf(syscall.RTF_PINNED), + "RTF_PRCLONING": ValueOf(syscall.RTF_PRCLONING), + "RTF_PROTO1": ValueOf(syscall.RTF_PROTO1), + "RTF_PROTO2": ValueOf(syscall.RTF_PROTO2), + "RTF_PROTO3": ValueOf(syscall.RTF_PROTO3), + "RTF_REJECT": ValueOf(syscall.RTF_REJECT), + "RTF_STATIC": ValueOf(syscall.RTF_STATIC), + "RTF_UP": ValueOf(syscall.RTF_UP), + "RTF_WASCLONED": ValueOf(syscall.RTF_WASCLONED), + "RTF_XRESOLVE": ValueOf(syscall.RTF_XRESOLVE), + "RTM_ADD": ValueOf(syscall.RTM_ADD), + "RTM_CHANGE": ValueOf(syscall.RTM_CHANGE), + "RTM_DELADDR": ValueOf(syscall.RTM_DELADDR), + "RTM_DELETE": ValueOf(syscall.RTM_DELETE), + "RTM_DELMADDR": ValueOf(syscall.RTM_DELMADDR), + "RTM_GET": ValueOf(syscall.RTM_GET), + "RTM_GET2": ValueOf(syscall.RTM_GET2), + "RTM_IFINFO": ValueOf(syscall.RTM_IFINFO), + "RTM_IFINFO2": ValueOf(syscall.RTM_IFINFO2), + "RTM_LOCK": ValueOf(syscall.RTM_LOCK), + "RTM_LOSING": ValueOf(syscall.RTM_LOSING), + "RTM_MISS": ValueOf(syscall.RTM_MISS), + "RTM_NEWADDR": ValueOf(syscall.RTM_NEWADDR), + "RTM_NEWMADDR": ValueOf(syscall.RTM_NEWMADDR), + "RTM_NEWMADDR2": ValueOf(syscall.RTM_NEWMADDR2), + "RTM_OLDADD": ValueOf(syscall.RTM_OLDADD), + "RTM_OLDDEL": ValueOf(syscall.RTM_OLDDEL), + "RTM_REDIRECT": ValueOf(syscall.RTM_REDIRECT), + "RTM_RESOLVE": ValueOf(syscall.RTM_RESOLVE), + "RTM_RTTUNIT": ValueOf(syscall.RTM_RTTUNIT), + "RTM_VERSION": ValueOf(syscall.RTM_VERSION), + "RTV_EXPIRE": ValueOf(syscall.RTV_EXPIRE), + "RTV_HOPCOUNT": ValueOf(syscall.RTV_HOPCOUNT), + "RTV_MTU": ValueOf(syscall.RTV_MTU), + "RTV_RPIPE": ValueOf(syscall.RTV_RPIPE), + "RTV_RTT": ValueOf(syscall.RTV_RTT), + "RTV_RTTVAR": ValueOf(syscall.RTV_RTTVAR), + "RTV_SPIPE": ValueOf(syscall.RTV_SPIPE), + "RTV_SSTHRESH": ValueOf(syscall.RTV_SSTHRESH), + "RUSAGE_CHILDREN": ValueOf(syscall.RUSAGE_CHILDREN), + "RUSAGE_SELF": ValueOf(syscall.RUSAGE_SELF), + "RawSyscall": ValueOf(syscall.RawSyscall), + "RawSyscall6": ValueOf(syscall.RawSyscall6), + "Read": ValueOf(syscall.Read), + "ReadDirent": ValueOf(syscall.ReadDirent), + "Readlink": ValueOf(syscall.Readlink), + "Recvfrom": ValueOf(syscall.Recvfrom), + "Recvmsg": ValueOf(syscall.Recvmsg), + "Rename": ValueOf(syscall.Rename), + "Revoke": ValueOf(syscall.Revoke), + "Rmdir": ValueOf(syscall.Rmdir), + "RouteRIB": ValueOf(syscall.RouteRIB), + "SCM_CREDS": ValueOf(syscall.SCM_CREDS), + "SCM_RIGHTS": ValueOf(syscall.SCM_RIGHTS), + "SCM_TIMESTAMP": ValueOf(syscall.SCM_TIMESTAMP), + "SCM_TIMESTAMP_MONOTONIC": ValueOf(syscall.SCM_TIMESTAMP_MONOTONIC), + "SHUT_RD": ValueOf(syscall.SHUT_RD), + "SHUT_RDWR": ValueOf(syscall.SHUT_RDWR), + "SHUT_WR": ValueOf(syscall.SHUT_WR), + "SIGABRT": ValueOf(syscall.SIGABRT), + "SIGALRM": ValueOf(syscall.SIGALRM), + "SIGBUS": ValueOf(syscall.SIGBUS), + "SIGCHLD": ValueOf(syscall.SIGCHLD), + "SIGCONT": ValueOf(syscall.SIGCONT), + "SIGEMT": ValueOf(syscall.SIGEMT), + "SIGFPE": ValueOf(syscall.SIGFPE), + "SIGHUP": ValueOf(syscall.SIGHUP), + "SIGILL": ValueOf(syscall.SIGILL), + "SIGINFO": ValueOf(syscall.SIGINFO), + "SIGINT": ValueOf(syscall.SIGINT), + "SIGIO": ValueOf(syscall.SIGIO), + "SIGIOT": ValueOf(syscall.SIGIOT), + "SIGKILL": ValueOf(syscall.SIGKILL), + "SIGPIPE": ValueOf(syscall.SIGPIPE), + "SIGPROF": ValueOf(syscall.SIGPROF), + "SIGQUIT": ValueOf(syscall.SIGQUIT), + "SIGSEGV": ValueOf(syscall.SIGSEGV), + "SIGSTOP": ValueOf(syscall.SIGSTOP), + "SIGSYS": ValueOf(syscall.SIGSYS), + "SIGTERM": ValueOf(syscall.SIGTERM), + "SIGTRAP": ValueOf(syscall.SIGTRAP), + "SIGTSTP": ValueOf(syscall.SIGTSTP), + "SIGTTIN": ValueOf(syscall.SIGTTIN), + "SIGTTOU": ValueOf(syscall.SIGTTOU), + "SIGURG": ValueOf(syscall.SIGURG), + "SIGUSR1": ValueOf(syscall.SIGUSR1), + "SIGUSR2": ValueOf(syscall.SIGUSR2), + "SIGVTALRM": ValueOf(syscall.SIGVTALRM), + "SIGWINCH": ValueOf(syscall.SIGWINCH), + "SIGXCPU": ValueOf(syscall.SIGXCPU), + "SIGXFSZ": ValueOf(syscall.SIGXFSZ), + "SIOCADDMULTI": ValueOf(uint32(syscall.SIOCADDMULTI)), + "SIOCAIFADDR": ValueOf(uint32(syscall.SIOCAIFADDR)), + "SIOCALIFADDR": ValueOf(uint32(syscall.SIOCALIFADDR)), + "SIOCARPIPLL": ValueOf(uint32(syscall.SIOCARPIPLL)), + "SIOCATMARK": ValueOf(syscall.SIOCATMARK), + "SIOCAUTOADDR": ValueOf(uint32(syscall.SIOCAUTOADDR)), + "SIOCAUTONETMASK": ValueOf(uint32(syscall.SIOCAUTONETMASK)), + "SIOCDELMULTI": ValueOf(uint32(syscall.SIOCDELMULTI)), + "SIOCDIFADDR": ValueOf(uint32(syscall.SIOCDIFADDR)), + "SIOCDIFPHYADDR": ValueOf(uint32(syscall.SIOCDIFPHYADDR)), + "SIOCDLIFADDR": ValueOf(uint32(syscall.SIOCDLIFADDR)), + "SIOCGDRVSPEC": ValueOf(uint32(syscall.SIOCGDRVSPEC)), + "SIOCGETSGCNT": ValueOf(uint32(syscall.SIOCGETSGCNT)), + "SIOCGETVIFCNT": ValueOf(uint32(syscall.SIOCGETVIFCNT)), + "SIOCGETVLAN": ValueOf(uint32(syscall.SIOCGETVLAN)), + "SIOCGHIWAT": ValueOf(syscall.SIOCGHIWAT), + "SIOCGIFADDR": ValueOf(uint32(syscall.SIOCGIFADDR)), + "SIOCGIFALTMTU": ValueOf(uint32(syscall.SIOCGIFALTMTU)), + "SIOCGIFASYNCMAP": ValueOf(uint32(syscall.SIOCGIFASYNCMAP)), + "SIOCGIFBOND": ValueOf(uint32(syscall.SIOCGIFBOND)), + "SIOCGIFBRDADDR": ValueOf(uint32(syscall.SIOCGIFBRDADDR)), + "SIOCGIFCAP": ValueOf(uint32(syscall.SIOCGIFCAP)), + "SIOCGIFCONF": ValueOf(uint32(syscall.SIOCGIFCONF)), + "SIOCGIFDEVMTU": ValueOf(uint32(syscall.SIOCGIFDEVMTU)), + "SIOCGIFDSTADDR": ValueOf(uint32(syscall.SIOCGIFDSTADDR)), + "SIOCGIFFLAGS": ValueOf(uint32(syscall.SIOCGIFFLAGS)), + "SIOCGIFGENERIC": ValueOf(uint32(syscall.SIOCGIFGENERIC)), + "SIOCGIFKPI": ValueOf(uint32(syscall.SIOCGIFKPI)), + "SIOCGIFMAC": ValueOf(uint32(syscall.SIOCGIFMAC)), + "SIOCGIFMEDIA": ValueOf(uint32(syscall.SIOCGIFMEDIA)), + "SIOCGIFMETRIC": ValueOf(uint32(syscall.SIOCGIFMETRIC)), + "SIOCGIFMTU": ValueOf(uint32(syscall.SIOCGIFMTU)), + "SIOCGIFNETMASK": ValueOf(uint32(syscall.SIOCGIFNETMASK)), + "SIOCGIFPDSTADDR": ValueOf(uint32(syscall.SIOCGIFPDSTADDR)), + "SIOCGIFPHYS": ValueOf(uint32(syscall.SIOCGIFPHYS)), + "SIOCGIFPSRCADDR": ValueOf(uint32(syscall.SIOCGIFPSRCADDR)), + "SIOCGIFSTATUS": ValueOf(uint32(syscall.SIOCGIFSTATUS)), + "SIOCGIFVLAN": ValueOf(uint32(syscall.SIOCGIFVLAN)), + "SIOCGIFWAKEFLAGS": ValueOf(uint32(syscall.SIOCGIFWAKEFLAGS)), + "SIOCGLIFADDR": ValueOf(uint32(syscall.SIOCGLIFADDR)), + "SIOCGLIFPHYADDR": ValueOf(uint32(syscall.SIOCGLIFPHYADDR)), + "SIOCGLOWAT": ValueOf(syscall.SIOCGLOWAT), + "SIOCGPGRP": ValueOf(syscall.SIOCGPGRP), + "SIOCIFCREATE": ValueOf(uint32(syscall.SIOCIFCREATE)), + "SIOCIFCREATE2": ValueOf(uint32(syscall.SIOCIFCREATE2)), + "SIOCIFDESTROY": ValueOf(uint32(syscall.SIOCIFDESTROY)), + "SIOCRSLVMULTI": ValueOf(uint32(syscall.SIOCRSLVMULTI)), + "SIOCSDRVSPEC": ValueOf(uint32(syscall.SIOCSDRVSPEC)), + "SIOCSETVLAN": ValueOf(uint32(syscall.SIOCSETVLAN)), + "SIOCSHIWAT": ValueOf(uint32(syscall.SIOCSHIWAT)), + "SIOCSIFADDR": ValueOf(uint32(syscall.SIOCSIFADDR)), + "SIOCSIFALTMTU": ValueOf(uint32(syscall.SIOCSIFALTMTU)), + "SIOCSIFASYNCMAP": ValueOf(uint32(syscall.SIOCSIFASYNCMAP)), + "SIOCSIFBOND": ValueOf(uint32(syscall.SIOCSIFBOND)), + "SIOCSIFBRDADDR": ValueOf(uint32(syscall.SIOCSIFBRDADDR)), + "SIOCSIFCAP": ValueOf(uint32(syscall.SIOCSIFCAP)), + "SIOCSIFDSTADDR": ValueOf(uint32(syscall.SIOCSIFDSTADDR)), + "SIOCSIFFLAGS": ValueOf(uint32(syscall.SIOCSIFFLAGS)), + "SIOCSIFGENERIC": ValueOf(uint32(syscall.SIOCSIFGENERIC)), + "SIOCSIFKPI": ValueOf(uint32(syscall.SIOCSIFKPI)), + "SIOCSIFLLADDR": ValueOf(uint32(syscall.SIOCSIFLLADDR)), + "SIOCSIFMAC": ValueOf(uint32(syscall.SIOCSIFMAC)), + "SIOCSIFMEDIA": ValueOf(uint32(syscall.SIOCSIFMEDIA)), + "SIOCSIFMETRIC": ValueOf(uint32(syscall.SIOCSIFMETRIC)), + "SIOCSIFMTU": ValueOf(uint32(syscall.SIOCSIFMTU)), + "SIOCSIFNETMASK": ValueOf(uint32(syscall.SIOCSIFNETMASK)), + "SIOCSIFPHYADDR": ValueOf(uint32(syscall.SIOCSIFPHYADDR)), + "SIOCSIFPHYS": ValueOf(uint32(syscall.SIOCSIFPHYS)), + "SIOCSIFVLAN": ValueOf(uint32(syscall.SIOCSIFVLAN)), + "SIOCSLIFPHYADDR": ValueOf(uint32(syscall.SIOCSLIFPHYADDR)), + "SIOCSLOWAT": ValueOf(uint32(syscall.SIOCSLOWAT)), + "SIOCSPGRP": ValueOf(uint32(syscall.SIOCSPGRP)), + "SOCK_DGRAM": ValueOf(syscall.SOCK_DGRAM), + "SOCK_MAXADDRLEN": ValueOf(syscall.SOCK_MAXADDRLEN), + "SOCK_RAW": ValueOf(syscall.SOCK_RAW), + "SOCK_RDM": ValueOf(syscall.SOCK_RDM), + "SOCK_SEQPACKET": ValueOf(syscall.SOCK_SEQPACKET), + "SOCK_STREAM": ValueOf(syscall.SOCK_STREAM), + "SOL_SOCKET": ValueOf(syscall.SOL_SOCKET), + "SOMAXCONN": ValueOf(syscall.SOMAXCONN), + "SO_ACCEPTCONN": ValueOf(syscall.SO_ACCEPTCONN), + "SO_BROADCAST": ValueOf(syscall.SO_BROADCAST), + "SO_DEBUG": ValueOf(syscall.SO_DEBUG), + "SO_DONTROUTE": ValueOf(syscall.SO_DONTROUTE), + "SO_DONTTRUNC": ValueOf(syscall.SO_DONTTRUNC), + "SO_ERROR": ValueOf(syscall.SO_ERROR), + "SO_KEEPALIVE": ValueOf(syscall.SO_KEEPALIVE), + "SO_LABEL": ValueOf(syscall.SO_LABEL), + "SO_LINGER": ValueOf(syscall.SO_LINGER), + "SO_LINGER_SEC": ValueOf(syscall.SO_LINGER_SEC), + "SO_NKE": ValueOf(syscall.SO_NKE), + "SO_NOADDRERR": ValueOf(syscall.SO_NOADDRERR), + "SO_NOSIGPIPE": ValueOf(syscall.SO_NOSIGPIPE), + "SO_NOTIFYCONFLICT": ValueOf(syscall.SO_NOTIFYCONFLICT), + "SO_NP_EXTENSIONS": ValueOf(syscall.SO_NP_EXTENSIONS), + "SO_NREAD": ValueOf(syscall.SO_NREAD), + "SO_NWRITE": ValueOf(syscall.SO_NWRITE), + "SO_OOBINLINE": ValueOf(syscall.SO_OOBINLINE), + "SO_PEERLABEL": ValueOf(syscall.SO_PEERLABEL), + "SO_RANDOMPORT": ValueOf(syscall.SO_RANDOMPORT), + "SO_RCVBUF": ValueOf(syscall.SO_RCVBUF), + "SO_RCVLOWAT": ValueOf(syscall.SO_RCVLOWAT), + "SO_RCVTIMEO": ValueOf(syscall.SO_RCVTIMEO), + "SO_RESTRICTIONS": ValueOf(syscall.SO_RESTRICTIONS), + "SO_RESTRICT_DENYIN": ValueOf(syscall.SO_RESTRICT_DENYIN), + "SO_RESTRICT_DENYOUT": ValueOf(syscall.SO_RESTRICT_DENYOUT), + "SO_RESTRICT_DENYSET": ValueOf(uint32(syscall.SO_RESTRICT_DENYSET)), + "SO_REUSEADDR": ValueOf(syscall.SO_REUSEADDR), + "SO_REUSEPORT": ValueOf(syscall.SO_REUSEPORT), + "SO_REUSESHAREUID": ValueOf(syscall.SO_REUSESHAREUID), + "SO_SNDBUF": ValueOf(syscall.SO_SNDBUF), + "SO_SNDLOWAT": ValueOf(syscall.SO_SNDLOWAT), + "SO_SNDTIMEO": ValueOf(syscall.SO_SNDTIMEO), + "SO_TIMESTAMP": ValueOf(syscall.SO_TIMESTAMP), + "SO_TIMESTAMP_MONOTONIC": ValueOf(syscall.SO_TIMESTAMP_MONOTONIC), + "SO_TYPE": ValueOf(syscall.SO_TYPE), + "SO_UPCALLCLOSEWAIT": ValueOf(syscall.SO_UPCALLCLOSEWAIT), + "SO_USELOOPBACK": ValueOf(syscall.SO_USELOOPBACK), + "SO_WANTMORE": ValueOf(syscall.SO_WANTMORE), + "SO_WANTOOBFLAG": ValueOf(syscall.SO_WANTOOBFLAG), + "SYS_ACCEPT": ValueOf(syscall.SYS_ACCEPT), + "SYS_ACCEPT_NOCANCEL": ValueOf(syscall.SYS_ACCEPT_NOCANCEL), + "SYS_ACCESS": ValueOf(syscall.SYS_ACCESS), + "SYS_ACCESS_EXTENDED": ValueOf(syscall.SYS_ACCESS_EXTENDED), + "SYS_ACCT": ValueOf(syscall.SYS_ACCT), + "SYS_ADD_PROFIL": ValueOf(syscall.SYS_ADD_PROFIL), + "SYS_ADJTIME": ValueOf(syscall.SYS_ADJTIME), + "SYS_AIO_CANCEL": ValueOf(syscall.SYS_AIO_CANCEL), + "SYS_AIO_ERROR": ValueOf(syscall.SYS_AIO_ERROR), + "SYS_AIO_FSYNC": ValueOf(syscall.SYS_AIO_FSYNC), + "SYS_AIO_READ": ValueOf(syscall.SYS_AIO_READ), + "SYS_AIO_RETURN": ValueOf(syscall.SYS_AIO_RETURN), + "SYS_AIO_SUSPEND": ValueOf(syscall.SYS_AIO_SUSPEND), + "SYS_AIO_SUSPEND_NOCANCEL": ValueOf(syscall.SYS_AIO_SUSPEND_NOCANCEL), + "SYS_AIO_WRITE": ValueOf(syscall.SYS_AIO_WRITE), + "SYS_ATGETMSG": ValueOf(syscall.SYS_ATGETMSG), + "SYS_ATPGETREQ": ValueOf(syscall.SYS_ATPGETREQ), + "SYS_ATPGETRSP": ValueOf(syscall.SYS_ATPGETRSP), + "SYS_ATPSNDREQ": ValueOf(syscall.SYS_ATPSNDREQ), + "SYS_ATPSNDRSP": ValueOf(syscall.SYS_ATPSNDRSP), + "SYS_ATPUTMSG": ValueOf(syscall.SYS_ATPUTMSG), + "SYS_ATSOCKET": ValueOf(syscall.SYS_ATSOCKET), + "SYS_AUDIT": ValueOf(syscall.SYS_AUDIT), + "SYS_AUDITCTL": ValueOf(syscall.SYS_AUDITCTL), + "SYS_AUDITON": ValueOf(syscall.SYS_AUDITON), + "SYS_AUDIT_SESSION_JOIN": ValueOf(syscall.SYS_AUDIT_SESSION_JOIN), + "SYS_AUDIT_SESSION_PORT": ValueOf(syscall.SYS_AUDIT_SESSION_PORT), + "SYS_AUDIT_SESSION_SELF": ValueOf(syscall.SYS_AUDIT_SESSION_SELF), + "SYS_BIND": ValueOf(syscall.SYS_BIND), + "SYS_BSDTHREAD_CREATE": ValueOf(syscall.SYS_BSDTHREAD_CREATE), + "SYS_BSDTHREAD_REGISTER": ValueOf(syscall.SYS_BSDTHREAD_REGISTER), + "SYS_BSDTHREAD_TERMINATE": ValueOf(syscall.SYS_BSDTHREAD_TERMINATE), + "SYS_CHDIR": ValueOf(syscall.SYS_CHDIR), + "SYS_CHFLAGS": ValueOf(syscall.SYS_CHFLAGS), + "SYS_CHMOD": ValueOf(syscall.SYS_CHMOD), + "SYS_CHMOD_EXTENDED": ValueOf(syscall.SYS_CHMOD_EXTENDED), + "SYS_CHOWN": ValueOf(syscall.SYS_CHOWN), + "SYS_CHROOT": ValueOf(syscall.SYS_CHROOT), + "SYS_CHUD": ValueOf(syscall.SYS_CHUD), + "SYS_CLOSE": ValueOf(syscall.SYS_CLOSE), + "SYS_CLOSE_NOCANCEL": ValueOf(syscall.SYS_CLOSE_NOCANCEL), + "SYS_CONNECT": ValueOf(syscall.SYS_CONNECT), + "SYS_CONNECT_NOCANCEL": ValueOf(syscall.SYS_CONNECT_NOCANCEL), + "SYS_COPYFILE": ValueOf(syscall.SYS_COPYFILE), + "SYS_CSOPS": ValueOf(syscall.SYS_CSOPS), + "SYS_DELETE": ValueOf(syscall.SYS_DELETE), + "SYS_DUP": ValueOf(syscall.SYS_DUP), + "SYS_DUP2": ValueOf(syscall.SYS_DUP2), + "SYS_EXCHANGEDATA": ValueOf(syscall.SYS_EXCHANGEDATA), + "SYS_EXECVE": ValueOf(syscall.SYS_EXECVE), + "SYS_EXIT": ValueOf(syscall.SYS_EXIT), + "SYS_FCHDIR": ValueOf(syscall.SYS_FCHDIR), + "SYS_FCHFLAGS": ValueOf(syscall.SYS_FCHFLAGS), + "SYS_FCHMOD": ValueOf(syscall.SYS_FCHMOD), + "SYS_FCHMOD_EXTENDED": ValueOf(syscall.SYS_FCHMOD_EXTENDED), + "SYS_FCHOWN": ValueOf(syscall.SYS_FCHOWN), + "SYS_FCNTL": ValueOf(syscall.SYS_FCNTL), + "SYS_FCNTL_NOCANCEL": ValueOf(syscall.SYS_FCNTL_NOCANCEL), + "SYS_FDATASYNC": ValueOf(syscall.SYS_FDATASYNC), + "SYS_FFSCTL": ValueOf(syscall.SYS_FFSCTL), + "SYS_FGETATTRLIST": ValueOf(syscall.SYS_FGETATTRLIST), + "SYS_FGETXATTR": ValueOf(syscall.SYS_FGETXATTR), + "SYS_FHOPEN": ValueOf(syscall.SYS_FHOPEN), + "SYS_FILEPORT_MAKEFD": ValueOf(syscall.SYS_FILEPORT_MAKEFD), + "SYS_FILEPORT_MAKEPORT": ValueOf(syscall.SYS_FILEPORT_MAKEPORT), + "SYS_FLISTXATTR": ValueOf(syscall.SYS_FLISTXATTR), + "SYS_FLOCK": ValueOf(syscall.SYS_FLOCK), + "SYS_FORK": ValueOf(syscall.SYS_FORK), + "SYS_FPATHCONF": ValueOf(syscall.SYS_FPATHCONF), + "SYS_FREMOVEXATTR": ValueOf(syscall.SYS_FREMOVEXATTR), + "SYS_FSCTL": ValueOf(syscall.SYS_FSCTL), + "SYS_FSETATTRLIST": ValueOf(syscall.SYS_FSETATTRLIST), + "SYS_FSETXATTR": ValueOf(syscall.SYS_FSETXATTR), + "SYS_FSGETPATH": ValueOf(syscall.SYS_FSGETPATH), + "SYS_FSTAT": ValueOf(syscall.SYS_FSTAT), + "SYS_FSTAT64": ValueOf(syscall.SYS_FSTAT64), + "SYS_FSTAT64_EXTENDED": ValueOf(syscall.SYS_FSTAT64_EXTENDED), + "SYS_FSTATFS": ValueOf(syscall.SYS_FSTATFS), + "SYS_FSTATFS64": ValueOf(syscall.SYS_FSTATFS64), + "SYS_FSTATV": ValueOf(syscall.SYS_FSTATV), + "SYS_FSTAT_EXTENDED": ValueOf(syscall.SYS_FSTAT_EXTENDED), + "SYS_FSYNC": ValueOf(syscall.SYS_FSYNC), + "SYS_FSYNC_NOCANCEL": ValueOf(syscall.SYS_FSYNC_NOCANCEL), + "SYS_FTRUNCATE": ValueOf(syscall.SYS_FTRUNCATE), + "SYS_FUTIMES": ValueOf(syscall.SYS_FUTIMES), + "SYS_GETATTRLIST": ValueOf(syscall.SYS_GETATTRLIST), + "SYS_GETAUDIT": ValueOf(syscall.SYS_GETAUDIT), + "SYS_GETAUDIT_ADDR": ValueOf(syscall.SYS_GETAUDIT_ADDR), + "SYS_GETAUID": ValueOf(syscall.SYS_GETAUID), + "SYS_GETDIRENTRIES": ValueOf(syscall.SYS_GETDIRENTRIES), + "SYS_GETDIRENTRIES64": ValueOf(syscall.SYS_GETDIRENTRIES64), + "SYS_GETDIRENTRIESATTR": ValueOf(syscall.SYS_GETDIRENTRIESATTR), + "SYS_GETDTABLESIZE": ValueOf(syscall.SYS_GETDTABLESIZE), + "SYS_GETEGID": ValueOf(syscall.SYS_GETEGID), + "SYS_GETEUID": ValueOf(syscall.SYS_GETEUID), + "SYS_GETFH": ValueOf(syscall.SYS_GETFH), + "SYS_GETFSSTAT": ValueOf(syscall.SYS_GETFSSTAT), + "SYS_GETFSSTAT64": ValueOf(syscall.SYS_GETFSSTAT64), + "SYS_GETGID": ValueOf(syscall.SYS_GETGID), + "SYS_GETGROUPS": ValueOf(syscall.SYS_GETGROUPS), + "SYS_GETHOSTUUID": ValueOf(syscall.SYS_GETHOSTUUID), + "SYS_GETITIMER": ValueOf(syscall.SYS_GETITIMER), + "SYS_GETLCID": ValueOf(syscall.SYS_GETLCID), + "SYS_GETLOGIN": ValueOf(syscall.SYS_GETLOGIN), + "SYS_GETPEERNAME": ValueOf(syscall.SYS_GETPEERNAME), + "SYS_GETPGID": ValueOf(syscall.SYS_GETPGID), + "SYS_GETPGRP": ValueOf(syscall.SYS_GETPGRP), + "SYS_GETPID": ValueOf(syscall.SYS_GETPID), + "SYS_GETPPID": ValueOf(syscall.SYS_GETPPID), + "SYS_GETPRIORITY": ValueOf(syscall.SYS_GETPRIORITY), + "SYS_GETRLIMIT": ValueOf(syscall.SYS_GETRLIMIT), + "SYS_GETRUSAGE": ValueOf(syscall.SYS_GETRUSAGE), + "SYS_GETSGROUPS": ValueOf(syscall.SYS_GETSGROUPS), + "SYS_GETSID": ValueOf(syscall.SYS_GETSID), + "SYS_GETSOCKNAME": ValueOf(syscall.SYS_GETSOCKNAME), + "SYS_GETSOCKOPT": ValueOf(syscall.SYS_GETSOCKOPT), + "SYS_GETTID": ValueOf(syscall.SYS_GETTID), + "SYS_GETTIMEOFDAY": ValueOf(syscall.SYS_GETTIMEOFDAY), + "SYS_GETUID": ValueOf(syscall.SYS_GETUID), + "SYS_GETWGROUPS": ValueOf(syscall.SYS_GETWGROUPS), + "SYS_GETXATTR": ValueOf(syscall.SYS_GETXATTR), + "SYS_IDENTITYSVC": ValueOf(syscall.SYS_IDENTITYSVC), + "SYS_INITGROUPS": ValueOf(syscall.SYS_INITGROUPS), + "SYS_IOCTL": ValueOf(syscall.SYS_IOCTL), + "SYS_IOPOLICYSYS": ValueOf(syscall.SYS_IOPOLICYSYS), + "SYS_ISSETUGID": ValueOf(syscall.SYS_ISSETUGID), + "SYS_KDEBUG_TRACE": ValueOf(syscall.SYS_KDEBUG_TRACE), + "SYS_KEVENT": ValueOf(syscall.SYS_KEVENT), + "SYS_KEVENT64": ValueOf(syscall.SYS_KEVENT64), + "SYS_KILL": ValueOf(syscall.SYS_KILL), + "SYS_KQUEUE": ValueOf(syscall.SYS_KQUEUE), + "SYS_LCHOWN": ValueOf(syscall.SYS_LCHOWN), + "SYS_LINK": ValueOf(syscall.SYS_LINK), + "SYS_LIO_LISTIO": ValueOf(syscall.SYS_LIO_LISTIO), + "SYS_LISTEN": ValueOf(syscall.SYS_LISTEN), + "SYS_LISTXATTR": ValueOf(syscall.SYS_LISTXATTR), + "SYS_LSEEK": ValueOf(syscall.SYS_LSEEK), + "SYS_LSTAT": ValueOf(syscall.SYS_LSTAT), + "SYS_LSTAT64": ValueOf(syscall.SYS_LSTAT64), + "SYS_LSTAT64_EXTENDED": ValueOf(syscall.SYS_LSTAT64_EXTENDED), + "SYS_LSTATV": ValueOf(syscall.SYS_LSTATV), + "SYS_LSTAT_EXTENDED": ValueOf(syscall.SYS_LSTAT_EXTENDED), + "SYS_MADVISE": ValueOf(syscall.SYS_MADVISE), + "SYS_MAXSYSCALL": ValueOf(syscall.SYS_MAXSYSCALL), + "SYS_MINCORE": ValueOf(syscall.SYS_MINCORE), + "SYS_MINHERIT": ValueOf(syscall.SYS_MINHERIT), + "SYS_MKCOMPLEX": ValueOf(syscall.SYS_MKCOMPLEX), + "SYS_MKDIR": ValueOf(syscall.SYS_MKDIR), + "SYS_MKDIR_EXTENDED": ValueOf(syscall.SYS_MKDIR_EXTENDED), + "SYS_MKFIFO": ValueOf(syscall.SYS_MKFIFO), + "SYS_MKFIFO_EXTENDED": ValueOf(syscall.SYS_MKFIFO_EXTENDED), + "SYS_MKNOD": ValueOf(syscall.SYS_MKNOD), + "SYS_MLOCK": ValueOf(syscall.SYS_MLOCK), + "SYS_MLOCKALL": ValueOf(syscall.SYS_MLOCKALL), + "SYS_MMAP": ValueOf(syscall.SYS_MMAP), + "SYS_MODWATCH": ValueOf(syscall.SYS_MODWATCH), + "SYS_MOUNT": ValueOf(syscall.SYS_MOUNT), + "SYS_MPROTECT": ValueOf(syscall.SYS_MPROTECT), + "SYS_MSGCTL": ValueOf(syscall.SYS_MSGCTL), + "SYS_MSGGET": ValueOf(syscall.SYS_MSGGET), + "SYS_MSGRCV": ValueOf(syscall.SYS_MSGRCV), + "SYS_MSGRCV_NOCANCEL": ValueOf(syscall.SYS_MSGRCV_NOCANCEL), + "SYS_MSGSND": ValueOf(syscall.SYS_MSGSND), + "SYS_MSGSND_NOCANCEL": ValueOf(syscall.SYS_MSGSND_NOCANCEL), + "SYS_MSGSYS": ValueOf(syscall.SYS_MSGSYS), + "SYS_MSYNC": ValueOf(syscall.SYS_MSYNC), + "SYS_MSYNC_NOCANCEL": ValueOf(syscall.SYS_MSYNC_NOCANCEL), + "SYS_MUNLOCK": ValueOf(syscall.SYS_MUNLOCK), + "SYS_MUNLOCKALL": ValueOf(syscall.SYS_MUNLOCKALL), + "SYS_MUNMAP": ValueOf(syscall.SYS_MUNMAP), + "SYS_NFSCLNT": ValueOf(syscall.SYS_NFSCLNT), + "SYS_NFSSVC": ValueOf(syscall.SYS_NFSSVC), + "SYS_OPEN": ValueOf(syscall.SYS_OPEN), + "SYS_OPEN_EXTENDED": ValueOf(syscall.SYS_OPEN_EXTENDED), + "SYS_OPEN_NOCANCEL": ValueOf(syscall.SYS_OPEN_NOCANCEL), + "SYS_PATHCONF": ValueOf(syscall.SYS_PATHCONF), + "SYS_PID_HIBERNATE": ValueOf(syscall.SYS_PID_HIBERNATE), + "SYS_PID_RESUME": ValueOf(syscall.SYS_PID_RESUME), + "SYS_PID_SHUTDOWN_SOCKETS": ValueOf(syscall.SYS_PID_SHUTDOWN_SOCKETS), + "SYS_PID_SUSPEND": ValueOf(syscall.SYS_PID_SUSPEND), + "SYS_PIPE": ValueOf(syscall.SYS_PIPE), + "SYS_POLL": ValueOf(syscall.SYS_POLL), + "SYS_POLL_NOCANCEL": ValueOf(syscall.SYS_POLL_NOCANCEL), + "SYS_POSIX_SPAWN": ValueOf(syscall.SYS_POSIX_SPAWN), + "SYS_PREAD": ValueOf(syscall.SYS_PREAD), + "SYS_PREAD_NOCANCEL": ValueOf(syscall.SYS_PREAD_NOCANCEL), + "SYS_PROCESS_POLICY": ValueOf(syscall.SYS_PROCESS_POLICY), + "SYS_PROC_INFO": ValueOf(syscall.SYS_PROC_INFO), + "SYS_PROFIL": ValueOf(syscall.SYS_PROFIL), + "SYS_PSYNCH_CVBROAD": ValueOf(syscall.SYS_PSYNCH_CVBROAD), + "SYS_PSYNCH_CVCLRPREPOST": ValueOf(syscall.SYS_PSYNCH_CVCLRPREPOST), + "SYS_PSYNCH_CVSIGNAL": ValueOf(syscall.SYS_PSYNCH_CVSIGNAL), + "SYS_PSYNCH_CVWAIT": ValueOf(syscall.SYS_PSYNCH_CVWAIT), + "SYS_PSYNCH_MUTEXDROP": ValueOf(syscall.SYS_PSYNCH_MUTEXDROP), + "SYS_PSYNCH_MUTEXWAIT": ValueOf(syscall.SYS_PSYNCH_MUTEXWAIT), + "SYS_PSYNCH_RW_DOWNGRADE": ValueOf(syscall.SYS_PSYNCH_RW_DOWNGRADE), + "SYS_PSYNCH_RW_LONGRDLOCK": ValueOf(syscall.SYS_PSYNCH_RW_LONGRDLOCK), + "SYS_PSYNCH_RW_RDLOCK": ValueOf(syscall.SYS_PSYNCH_RW_RDLOCK), + "SYS_PSYNCH_RW_UNLOCK": ValueOf(syscall.SYS_PSYNCH_RW_UNLOCK), + "SYS_PSYNCH_RW_UNLOCK2": ValueOf(syscall.SYS_PSYNCH_RW_UNLOCK2), + "SYS_PSYNCH_RW_UPGRADE": ValueOf(syscall.SYS_PSYNCH_RW_UPGRADE), + "SYS_PSYNCH_RW_WRLOCK": ValueOf(syscall.SYS_PSYNCH_RW_WRLOCK), + "SYS_PSYNCH_RW_YIELDWRLOCK": ValueOf(syscall.SYS_PSYNCH_RW_YIELDWRLOCK), + "SYS_PTRACE": ValueOf(syscall.SYS_PTRACE), + "SYS_PWRITE": ValueOf(syscall.SYS_PWRITE), + "SYS_PWRITE_NOCANCEL": ValueOf(syscall.SYS_PWRITE_NOCANCEL), + "SYS_QUOTACTL": ValueOf(syscall.SYS_QUOTACTL), + "SYS_READ": ValueOf(syscall.SYS_READ), + "SYS_READLINK": ValueOf(syscall.SYS_READLINK), + "SYS_READV": ValueOf(syscall.SYS_READV), + "SYS_READV_NOCANCEL": ValueOf(syscall.SYS_READV_NOCANCEL), + "SYS_READ_NOCANCEL": ValueOf(syscall.SYS_READ_NOCANCEL), + "SYS_REBOOT": ValueOf(syscall.SYS_REBOOT), + "SYS_RECVFROM": ValueOf(syscall.SYS_RECVFROM), + "SYS_RECVFROM_NOCANCEL": ValueOf(syscall.SYS_RECVFROM_NOCANCEL), + "SYS_RECVMSG": ValueOf(syscall.SYS_RECVMSG), + "SYS_RECVMSG_NOCANCEL": ValueOf(syscall.SYS_RECVMSG_NOCANCEL), + "SYS_REMOVEXATTR": ValueOf(syscall.SYS_REMOVEXATTR), + "SYS_RENAME": ValueOf(syscall.SYS_RENAME), + "SYS_REVOKE": ValueOf(syscall.SYS_REVOKE), + "SYS_RMDIR": ValueOf(syscall.SYS_RMDIR), + "SYS_SEARCHFS": ValueOf(syscall.SYS_SEARCHFS), + "SYS_SELECT": ValueOf(syscall.SYS_SELECT), + "SYS_SELECT_NOCANCEL": ValueOf(syscall.SYS_SELECT_NOCANCEL), + "SYS_SEMCTL": ValueOf(syscall.SYS_SEMCTL), + "SYS_SEMGET": ValueOf(syscall.SYS_SEMGET), + "SYS_SEMOP": ValueOf(syscall.SYS_SEMOP), + "SYS_SEMSYS": ValueOf(syscall.SYS_SEMSYS), + "SYS_SEM_CLOSE": ValueOf(syscall.SYS_SEM_CLOSE), + "SYS_SEM_DESTROY": ValueOf(syscall.SYS_SEM_DESTROY), + "SYS_SEM_GETVALUE": ValueOf(syscall.SYS_SEM_GETVALUE), + "SYS_SEM_INIT": ValueOf(syscall.SYS_SEM_INIT), + "SYS_SEM_OPEN": ValueOf(syscall.SYS_SEM_OPEN), + "SYS_SEM_POST": ValueOf(syscall.SYS_SEM_POST), + "SYS_SEM_TRYWAIT": ValueOf(syscall.SYS_SEM_TRYWAIT), + "SYS_SEM_UNLINK": ValueOf(syscall.SYS_SEM_UNLINK), + "SYS_SEM_WAIT": ValueOf(syscall.SYS_SEM_WAIT), + "SYS_SEM_WAIT_NOCANCEL": ValueOf(syscall.SYS_SEM_WAIT_NOCANCEL), + "SYS_SENDFILE": ValueOf(syscall.SYS_SENDFILE), + "SYS_SENDMSG": ValueOf(syscall.SYS_SENDMSG), + "SYS_SENDMSG_NOCANCEL": ValueOf(syscall.SYS_SENDMSG_NOCANCEL), + "SYS_SENDTO": ValueOf(syscall.SYS_SENDTO), + "SYS_SENDTO_NOCANCEL": ValueOf(syscall.SYS_SENDTO_NOCANCEL), + "SYS_SETATTRLIST": ValueOf(syscall.SYS_SETATTRLIST), + "SYS_SETAUDIT": ValueOf(syscall.SYS_SETAUDIT), + "SYS_SETAUDIT_ADDR": ValueOf(syscall.SYS_SETAUDIT_ADDR), + "SYS_SETAUID": ValueOf(syscall.SYS_SETAUID), + "SYS_SETEGID": ValueOf(syscall.SYS_SETEGID), + "SYS_SETEUID": ValueOf(syscall.SYS_SETEUID), + "SYS_SETGID": ValueOf(syscall.SYS_SETGID), + "SYS_SETGROUPS": ValueOf(syscall.SYS_SETGROUPS), + "SYS_SETITIMER": ValueOf(syscall.SYS_SETITIMER), + "SYS_SETLCID": ValueOf(syscall.SYS_SETLCID), + "SYS_SETLOGIN": ValueOf(syscall.SYS_SETLOGIN), + "SYS_SETPGID": ValueOf(syscall.SYS_SETPGID), + "SYS_SETPRIORITY": ValueOf(syscall.SYS_SETPRIORITY), + "SYS_SETPRIVEXEC": ValueOf(syscall.SYS_SETPRIVEXEC), + "SYS_SETREGID": ValueOf(syscall.SYS_SETREGID), + "SYS_SETREUID": ValueOf(syscall.SYS_SETREUID), + "SYS_SETRLIMIT": ValueOf(syscall.SYS_SETRLIMIT), + "SYS_SETSGROUPS": ValueOf(syscall.SYS_SETSGROUPS), + "SYS_SETSID": ValueOf(syscall.SYS_SETSID), + "SYS_SETSOCKOPT": ValueOf(syscall.SYS_SETSOCKOPT), + "SYS_SETTID": ValueOf(syscall.SYS_SETTID), + "SYS_SETTID_WITH_PID": ValueOf(syscall.SYS_SETTID_WITH_PID), + "SYS_SETTIMEOFDAY": ValueOf(syscall.SYS_SETTIMEOFDAY), + "SYS_SETUID": ValueOf(syscall.SYS_SETUID), + "SYS_SETWGROUPS": ValueOf(syscall.SYS_SETWGROUPS), + "SYS_SETXATTR": ValueOf(syscall.SYS_SETXATTR), + "SYS_SHARED_REGION_CHECK_NP": ValueOf(syscall.SYS_SHARED_REGION_CHECK_NP), + "SYS_SHARED_REGION_MAP_AND_SLIDE_NP": ValueOf(syscall.SYS_SHARED_REGION_MAP_AND_SLIDE_NP), + "SYS_SHMAT": ValueOf(syscall.SYS_SHMAT), + "SYS_SHMCTL": ValueOf(syscall.SYS_SHMCTL), + "SYS_SHMDT": ValueOf(syscall.SYS_SHMDT), + "SYS_SHMGET": ValueOf(syscall.SYS_SHMGET), + "SYS_SHMSYS": ValueOf(syscall.SYS_SHMSYS), + "SYS_SHM_OPEN": ValueOf(syscall.SYS_SHM_OPEN), + "SYS_SHM_UNLINK": ValueOf(syscall.SYS_SHM_UNLINK), + "SYS_SHUTDOWN": ValueOf(syscall.SYS_SHUTDOWN), + "SYS_SIGACTION": ValueOf(syscall.SYS_SIGACTION), + "SYS_SIGALTSTACK": ValueOf(syscall.SYS_SIGALTSTACK), + "SYS_SIGPENDING": ValueOf(syscall.SYS_SIGPENDING), + "SYS_SIGPROCMASK": ValueOf(syscall.SYS_SIGPROCMASK), + "SYS_SIGRETURN": ValueOf(syscall.SYS_SIGRETURN), + "SYS_SIGSUSPEND": ValueOf(syscall.SYS_SIGSUSPEND), + "SYS_SIGSUSPEND_NOCANCEL": ValueOf(syscall.SYS_SIGSUSPEND_NOCANCEL), + "SYS_SOCKET": ValueOf(syscall.SYS_SOCKET), + "SYS_SOCKETPAIR": ValueOf(syscall.SYS_SOCKETPAIR), + "SYS_STACK_SNAPSHOT": ValueOf(syscall.SYS_STACK_SNAPSHOT), + "SYS_STAT": ValueOf(syscall.SYS_STAT), + "SYS_STAT64": ValueOf(syscall.SYS_STAT64), + "SYS_STAT64_EXTENDED": ValueOf(syscall.SYS_STAT64_EXTENDED), + "SYS_STATFS": ValueOf(syscall.SYS_STATFS), + "SYS_STATFS64": ValueOf(syscall.SYS_STATFS64), + "SYS_STATV": ValueOf(syscall.SYS_STATV), + "SYS_STAT_EXTENDED": ValueOf(syscall.SYS_STAT_EXTENDED), + "SYS_SWAPON": ValueOf(syscall.SYS_SWAPON), + "SYS_SYMLINK": ValueOf(syscall.SYS_SYMLINK), + "SYS_SYNC": ValueOf(syscall.SYS_SYNC), + "SYS_SYSCALL": ValueOf(syscall.SYS_SYSCALL), + "SYS_THREAD_SELFID": ValueOf(syscall.SYS_THREAD_SELFID), + "SYS_TRUNCATE": ValueOf(syscall.SYS_TRUNCATE), + "SYS_UMASK": ValueOf(syscall.SYS_UMASK), + "SYS_UMASK_EXTENDED": ValueOf(syscall.SYS_UMASK_EXTENDED), + "SYS_UNDELETE": ValueOf(syscall.SYS_UNDELETE), + "SYS_UNLINK": ValueOf(syscall.SYS_UNLINK), + "SYS_UNMOUNT": ValueOf(syscall.SYS_UNMOUNT), + "SYS_UTIMES": ValueOf(syscall.SYS_UTIMES), + "SYS_VFORK": ValueOf(syscall.SYS_VFORK), + "SYS_VM_PRESSURE_MONITOR": ValueOf(syscall.SYS_VM_PRESSURE_MONITOR), + "SYS_WAIT4": ValueOf(syscall.SYS_WAIT4), + "SYS_WAIT4_NOCANCEL": ValueOf(syscall.SYS_WAIT4_NOCANCEL), + "SYS_WAITEVENT": ValueOf(syscall.SYS_WAITEVENT), + "SYS_WAITID": ValueOf(syscall.SYS_WAITID), + "SYS_WAITID_NOCANCEL": ValueOf(syscall.SYS_WAITID_NOCANCEL), + "SYS_WATCHEVENT": ValueOf(syscall.SYS_WATCHEVENT), + "SYS_WORKQ_KERNRETURN": ValueOf(syscall.SYS_WORKQ_KERNRETURN), + "SYS_WORKQ_OPEN": ValueOf(syscall.SYS_WORKQ_OPEN), + "SYS_WRITE": ValueOf(syscall.SYS_WRITE), + "SYS_WRITEV": ValueOf(syscall.SYS_WRITEV), + "SYS_WRITEV_NOCANCEL": ValueOf(syscall.SYS_WRITEV_NOCANCEL), + "SYS_WRITE_NOCANCEL": ValueOf(syscall.SYS_WRITE_NOCANCEL), + "SYS___DISABLE_THREADSIGNAL": ValueOf(syscall.SYS___DISABLE_THREADSIGNAL), + "SYS___MAC_EXECVE": ValueOf(syscall.SYS___MAC_EXECVE), + "SYS___MAC_GETFSSTAT": ValueOf(syscall.SYS___MAC_GETFSSTAT), + "SYS___MAC_GET_FD": ValueOf(syscall.SYS___MAC_GET_FD), + "SYS___MAC_GET_FILE": ValueOf(syscall.SYS___MAC_GET_FILE), + "SYS___MAC_GET_LCID": ValueOf(syscall.SYS___MAC_GET_LCID), + "SYS___MAC_GET_LCTX": ValueOf(syscall.SYS___MAC_GET_LCTX), + "SYS___MAC_GET_LINK": ValueOf(syscall.SYS___MAC_GET_LINK), + "SYS___MAC_GET_MOUNT": ValueOf(syscall.SYS___MAC_GET_MOUNT), + "SYS___MAC_GET_PID": ValueOf(syscall.SYS___MAC_GET_PID), + "SYS___MAC_GET_PROC": ValueOf(syscall.SYS___MAC_GET_PROC), + "SYS___MAC_MOUNT": ValueOf(syscall.SYS___MAC_MOUNT), + "SYS___MAC_SET_FD": ValueOf(syscall.SYS___MAC_SET_FD), + "SYS___MAC_SET_FILE": ValueOf(syscall.SYS___MAC_SET_FILE), + "SYS___MAC_SET_LCTX": ValueOf(syscall.SYS___MAC_SET_LCTX), + "SYS___MAC_SET_LINK": ValueOf(syscall.SYS___MAC_SET_LINK), + "SYS___MAC_SET_PROC": ValueOf(syscall.SYS___MAC_SET_PROC), + "SYS___MAC_SYSCALL": ValueOf(syscall.SYS___MAC_SYSCALL), + "SYS___OLD_SEMWAIT_SIGNAL": ValueOf(syscall.SYS___OLD_SEMWAIT_SIGNAL), + "SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL": ValueOf(syscall.SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL), + "SYS___PTHREAD_CANCELED": ValueOf(syscall.SYS___PTHREAD_CANCELED), + "SYS___PTHREAD_CHDIR": ValueOf(syscall.SYS___PTHREAD_CHDIR), + "SYS___PTHREAD_FCHDIR": ValueOf(syscall.SYS___PTHREAD_FCHDIR), + "SYS___PTHREAD_KILL": ValueOf(syscall.SYS___PTHREAD_KILL), + "SYS___PTHREAD_MARKCANCEL": ValueOf(syscall.SYS___PTHREAD_MARKCANCEL), + "SYS___PTHREAD_SIGMASK": ValueOf(syscall.SYS___PTHREAD_SIGMASK), + "SYS___SEMWAIT_SIGNAL": ValueOf(syscall.SYS___SEMWAIT_SIGNAL), + "SYS___SEMWAIT_SIGNAL_NOCANCEL": ValueOf(syscall.SYS___SEMWAIT_SIGNAL_NOCANCEL), + "SYS___SIGWAIT": ValueOf(syscall.SYS___SIGWAIT), + "SYS___SIGWAIT_NOCANCEL": ValueOf(syscall.SYS___SIGWAIT_NOCANCEL), + "SYS___SYSCTL": ValueOf(syscall.SYS___SYSCTL), + "S_IEXEC": ValueOf(syscall.S_IEXEC), + "S_IFBLK": ValueOf(syscall.S_IFBLK), + "S_IFCHR": ValueOf(syscall.S_IFCHR), + "S_IFDIR": ValueOf(syscall.S_IFDIR), + "S_IFIFO": ValueOf(syscall.S_IFIFO), + "S_IFLNK": ValueOf(syscall.S_IFLNK), + "S_IFMT": ValueOf(syscall.S_IFMT), + "S_IFREG": ValueOf(syscall.S_IFREG), + "S_IFSOCK": ValueOf(syscall.S_IFSOCK), + "S_IFWHT": ValueOf(syscall.S_IFWHT), + "S_IREAD": ValueOf(syscall.S_IREAD), + "S_IRGRP": ValueOf(syscall.S_IRGRP), + "S_IROTH": ValueOf(syscall.S_IROTH), + "S_IRUSR": ValueOf(syscall.S_IRUSR), + "S_IRWXG": ValueOf(syscall.S_IRWXG), + "S_IRWXO": ValueOf(syscall.S_IRWXO), + "S_IRWXU": ValueOf(syscall.S_IRWXU), + "S_ISGID": ValueOf(syscall.S_ISGID), + "S_ISTXT": ValueOf(syscall.S_ISTXT), + "S_ISUID": ValueOf(syscall.S_ISUID), + "S_ISVTX": ValueOf(syscall.S_ISVTX), + "S_IWGRP": ValueOf(syscall.S_IWGRP), + "S_IWOTH": ValueOf(syscall.S_IWOTH), + "S_IWRITE": ValueOf(syscall.S_IWRITE), + "S_IWUSR": ValueOf(syscall.S_IWUSR), + "S_IXGRP": ValueOf(syscall.S_IXGRP), + "S_IXOTH": ValueOf(syscall.S_IXOTH), + "S_IXUSR": ValueOf(syscall.S_IXUSR), + "Seek": ValueOf(syscall.Seek), + "Select": ValueOf(syscall.Select), + "Sendfile": ValueOf(syscall.Sendfile), + "Sendmsg": ValueOf(syscall.Sendmsg), + "SendmsgN": ValueOf(syscall.SendmsgN), + "Sendto": ValueOf(syscall.Sendto), + "SetBpf": ValueOf(syscall.SetBpf), + "SetBpfBuflen": ValueOf(syscall.SetBpfBuflen), + "SetBpfDatalink": ValueOf(syscall.SetBpfDatalink), + "SetBpfHeadercmpl": ValueOf(syscall.SetBpfHeadercmpl), + "SetBpfImmediate": ValueOf(syscall.SetBpfImmediate), + "SetBpfInterface": ValueOf(syscall.SetBpfInterface), + "SetBpfPromisc": ValueOf(syscall.SetBpfPromisc), + "SetBpfTimeout": ValueOf(syscall.SetBpfTimeout), + "SetKevent": ValueOf(syscall.SetKevent), + "SetNonblock": ValueOf(syscall.SetNonblock), + "Setegid": ValueOf(syscall.Setegid), + "Setenv": ValueOf(syscall.Setenv), + "Seteuid": ValueOf(syscall.Seteuid), + "Setgid": ValueOf(syscall.Setgid), + "Setgroups": ValueOf(syscall.Setgroups), + "Setlogin": ValueOf(syscall.Setlogin), + "Setpgid": ValueOf(syscall.Setpgid), + "Setpriority": ValueOf(syscall.Setpriority), + "Setprivexec": ValueOf(syscall.Setprivexec), + "Setregid": ValueOf(syscall.Setregid), + "Setreuid": ValueOf(syscall.Setreuid), + "Setrlimit": ValueOf(syscall.Setrlimit), + "Setsid": ValueOf(syscall.Setsid), + "SetsockoptByte": ValueOf(syscall.SetsockoptByte), + "SetsockoptICMPv6Filter": ValueOf(syscall.SetsockoptICMPv6Filter), + "SetsockoptIPMreq": ValueOf(syscall.SetsockoptIPMreq), + "SetsockoptIPv6Mreq": ValueOf(syscall.SetsockoptIPv6Mreq), + "SetsockoptInet4Addr": ValueOf(syscall.SetsockoptInet4Addr), + "SetsockoptInt": ValueOf(syscall.SetsockoptInt), + "SetsockoptLinger": ValueOf(syscall.SetsockoptLinger), + "SetsockoptString": ValueOf(syscall.SetsockoptString), + "SetsockoptTimeval": ValueOf(syscall.SetsockoptTimeval), + "Settimeofday": ValueOf(syscall.Settimeofday), + "Setuid": ValueOf(syscall.Setuid), + "Shutdown": ValueOf(syscall.Shutdown), + "SizeofBpfHdr": ValueOf(syscall.SizeofBpfHdr), + "SizeofBpfInsn": ValueOf(syscall.SizeofBpfInsn), + "SizeofBpfProgram": ValueOf(syscall.SizeofBpfProgram), + "SizeofBpfStat": ValueOf(syscall.SizeofBpfStat), + "SizeofBpfVersion": ValueOf(syscall.SizeofBpfVersion), + "SizeofCmsghdr": ValueOf(syscall.SizeofCmsghdr), + "SizeofICMPv6Filter": ValueOf(syscall.SizeofICMPv6Filter), + "SizeofIPMreq": ValueOf(syscall.SizeofIPMreq), + "SizeofIPv6MTUInfo": ValueOf(syscall.SizeofIPv6MTUInfo), + "SizeofIPv6Mreq": ValueOf(syscall.SizeofIPv6Mreq), + "SizeofIfData": ValueOf(syscall.SizeofIfData), + "SizeofIfMsghdr": ValueOf(syscall.SizeofIfMsghdr), + "SizeofIfaMsghdr": ValueOf(syscall.SizeofIfaMsghdr), + "SizeofIfmaMsghdr": ValueOf(syscall.SizeofIfmaMsghdr), + "SizeofIfmaMsghdr2": ValueOf(syscall.SizeofIfmaMsghdr2), + "SizeofInet4Pktinfo": ValueOf(syscall.SizeofInet4Pktinfo), + "SizeofInet6Pktinfo": ValueOf(syscall.SizeofInet6Pktinfo), + "SizeofLinger": ValueOf(syscall.SizeofLinger), + "SizeofMsghdr": ValueOf(syscall.SizeofMsghdr), + "SizeofRtMetrics": ValueOf(syscall.SizeofRtMetrics), + "SizeofRtMsghdr": ValueOf(syscall.SizeofRtMsghdr), + "SizeofSockaddrAny": ValueOf(syscall.SizeofSockaddrAny), + "SizeofSockaddrDatalink": ValueOf(syscall.SizeofSockaddrDatalink), + "SizeofSockaddrInet4": ValueOf(syscall.SizeofSockaddrInet4), + "SizeofSockaddrInet6": ValueOf(syscall.SizeofSockaddrInet6), + "SizeofSockaddrUnix": ValueOf(syscall.SizeofSockaddrUnix), + "SlicePtrFromStrings": ValueOf(syscall.SlicePtrFromStrings), + "Socket": ValueOf(syscall.Socket), + "SocketDisableIPv6": ValueOf(&syscall.SocketDisableIPv6).Elem(), + "Socketpair": ValueOf(syscall.Socketpair), + "StartProcess": ValueOf(syscall.StartProcess), + "Stat": ValueOf(syscall.Stat), + "Statfs": ValueOf(syscall.Statfs), + "Stderr": ValueOf(&syscall.Stderr).Elem(), + "Stdin": ValueOf(&syscall.Stdin).Elem(), + "Stdout": ValueOf(&syscall.Stdout).Elem(), + "StringBytePtr": ValueOf(syscall.StringBytePtr), + "StringByteSlice": ValueOf(syscall.StringByteSlice), + "StringSlicePtr": ValueOf(syscall.StringSlicePtr), + "Symlink": ValueOf(syscall.Symlink), + "Sync": ValueOf(syscall.Sync), + "Syscall": ValueOf(syscall.Syscall), + "Syscall6": ValueOf(syscall.Syscall6), + "Syscall9": ValueOf(syscall.Syscall9), + "Sysctl": ValueOf(syscall.Sysctl), + "SysctlUint32": ValueOf(syscall.SysctlUint32), + "TCIFLUSH": ValueOf(syscall.TCIFLUSH), + "TCIOFLUSH": ValueOf(syscall.TCIOFLUSH), + "TCOFLUSH": ValueOf(syscall.TCOFLUSH), + "TCP_CONNECTIONTIMEOUT": ValueOf(syscall.TCP_CONNECTIONTIMEOUT), + "TCP_KEEPALIVE": ValueOf(syscall.TCP_KEEPALIVE), + "TCP_MAXHLEN": ValueOf(syscall.TCP_MAXHLEN), + "TCP_MAXOLEN": ValueOf(syscall.TCP_MAXOLEN), + "TCP_MAXSEG": ValueOf(syscall.TCP_MAXSEG), + "TCP_MAXWIN": ValueOf(syscall.TCP_MAXWIN), + "TCP_MAX_SACK": ValueOf(syscall.TCP_MAX_SACK), + "TCP_MAX_WINSHIFT": ValueOf(syscall.TCP_MAX_WINSHIFT), + "TCP_MINMSS": ValueOf(syscall.TCP_MINMSS), + "TCP_MINMSSOVERLOAD": ValueOf(syscall.TCP_MINMSSOVERLOAD), + "TCP_MSS": ValueOf(syscall.TCP_MSS), + "TCP_NODELAY": ValueOf(syscall.TCP_NODELAY), + "TCP_NOOPT": ValueOf(syscall.TCP_NOOPT), + "TCP_NOPUSH": ValueOf(syscall.TCP_NOPUSH), + "TCP_RXT_CONNDROPTIME": ValueOf(syscall.TCP_RXT_CONNDROPTIME), + "TCP_RXT_FINDROP": ValueOf(syscall.TCP_RXT_FINDROP), + "TCSAFLUSH": ValueOf(syscall.TCSAFLUSH), + "TIOCCBRK": ValueOf(syscall.TIOCCBRK), + "TIOCCDTR": ValueOf(syscall.TIOCCDTR), + "TIOCCONS": ValueOf(uint32(syscall.TIOCCONS)), + "TIOCDCDTIMESTAMP": ValueOf(syscall.TIOCDCDTIMESTAMP), + "TIOCDRAIN": ValueOf(syscall.TIOCDRAIN), + "TIOCDSIMICROCODE": ValueOf(syscall.TIOCDSIMICROCODE), + "TIOCEXCL": ValueOf(syscall.TIOCEXCL), + "TIOCEXT": ValueOf(uint32(syscall.TIOCEXT)), + "TIOCFLUSH": ValueOf(uint32(syscall.TIOCFLUSH)), + "TIOCGDRAINWAIT": ValueOf(syscall.TIOCGDRAINWAIT), + "TIOCGETA": ValueOf(syscall.TIOCGETA), + "TIOCGETD": ValueOf(syscall.TIOCGETD), + "TIOCGPGRP": ValueOf(syscall.TIOCGPGRP), + "TIOCGWINSZ": ValueOf(syscall.TIOCGWINSZ), + "TIOCIXOFF": ValueOf(syscall.TIOCIXOFF), + "TIOCIXON": ValueOf(syscall.TIOCIXON), + "TIOCMBIC": ValueOf(uint32(syscall.TIOCMBIC)), + "TIOCMBIS": ValueOf(uint32(syscall.TIOCMBIS)), + "TIOCMGDTRWAIT": ValueOf(syscall.TIOCMGDTRWAIT), + "TIOCMGET": ValueOf(syscall.TIOCMGET), + "TIOCMODG": ValueOf(syscall.TIOCMODG), + "TIOCMODS": ValueOf(uint32(syscall.TIOCMODS)), + "TIOCMSDTRWAIT": ValueOf(uint32(syscall.TIOCMSDTRWAIT)), + "TIOCMSET": ValueOf(uint32(syscall.TIOCMSET)), + "TIOCM_CAR": ValueOf(syscall.TIOCM_CAR), + "TIOCM_CD": ValueOf(syscall.TIOCM_CD), + "TIOCM_CTS": ValueOf(syscall.TIOCM_CTS), + "TIOCM_DSR": ValueOf(syscall.TIOCM_DSR), + "TIOCM_DTR": ValueOf(syscall.TIOCM_DTR), + "TIOCM_LE": ValueOf(syscall.TIOCM_LE), + "TIOCM_RI": ValueOf(syscall.TIOCM_RI), + "TIOCM_RNG": ValueOf(syscall.TIOCM_RNG), + "TIOCM_RTS": ValueOf(syscall.TIOCM_RTS), + "TIOCM_SR": ValueOf(syscall.TIOCM_SR), + "TIOCM_ST": ValueOf(syscall.TIOCM_ST), + "TIOCNOTTY": ValueOf(syscall.TIOCNOTTY), + "TIOCNXCL": ValueOf(syscall.TIOCNXCL), + "TIOCOUTQ": ValueOf(syscall.TIOCOUTQ), + "TIOCPKT": ValueOf(uint32(syscall.TIOCPKT)), + "TIOCPKT_DATA": ValueOf(syscall.TIOCPKT_DATA), + "TIOCPKT_DOSTOP": ValueOf(syscall.TIOCPKT_DOSTOP), + "TIOCPKT_FLUSHREAD": ValueOf(syscall.TIOCPKT_FLUSHREAD), + "TIOCPKT_FLUSHWRITE": ValueOf(syscall.TIOCPKT_FLUSHWRITE), + "TIOCPKT_IOCTL": ValueOf(syscall.TIOCPKT_IOCTL), + "TIOCPKT_NOSTOP": ValueOf(syscall.TIOCPKT_NOSTOP), + "TIOCPKT_START": ValueOf(syscall.TIOCPKT_START), + "TIOCPKT_STOP": ValueOf(syscall.TIOCPKT_STOP), + "TIOCPTYGNAME": ValueOf(syscall.TIOCPTYGNAME), + "TIOCPTYGRANT": ValueOf(syscall.TIOCPTYGRANT), + "TIOCPTYUNLK": ValueOf(syscall.TIOCPTYUNLK), + "TIOCREMOTE": ValueOf(uint32(syscall.TIOCREMOTE)), + "TIOCSBRK": ValueOf(syscall.TIOCSBRK), + "TIOCSCONS": ValueOf(syscall.TIOCSCONS), + "TIOCSCTTY": ValueOf(syscall.TIOCSCTTY), + "TIOCSDRAINWAIT": ValueOf(uint32(syscall.TIOCSDRAINWAIT)), + "TIOCSDTR": ValueOf(syscall.TIOCSDTR), + "TIOCSETA": ValueOf(uint32(syscall.TIOCSETA)), + "TIOCSETAF": ValueOf(uint32(syscall.TIOCSETAF)), + "TIOCSETAW": ValueOf(uint32(syscall.TIOCSETAW)), + "TIOCSETD": ValueOf(uint32(syscall.TIOCSETD)), + "TIOCSIG": ValueOf(syscall.TIOCSIG), + "TIOCSPGRP": ValueOf(uint32(syscall.TIOCSPGRP)), + "TIOCSTART": ValueOf(syscall.TIOCSTART), + "TIOCSTAT": ValueOf(syscall.TIOCSTAT), + "TIOCSTI": ValueOf(uint32(syscall.TIOCSTI)), + "TIOCSTOP": ValueOf(syscall.TIOCSTOP), + "TIOCSWINSZ": ValueOf(uint32(syscall.TIOCSWINSZ)), + "TIOCTIMESTAMP": ValueOf(syscall.TIOCTIMESTAMP), + "TIOCUCNTL": ValueOf(uint32(syscall.TIOCUCNTL)), + "TOSTOP": ValueOf(syscall.TOSTOP), + "TimespecToNsec": ValueOf(syscall.TimespecToNsec), + "TimevalToNsec": ValueOf(syscall.TimevalToNsec), + "Truncate": ValueOf(syscall.Truncate), + "Umask": ValueOf(syscall.Umask), + "Undelete": ValueOf(syscall.Undelete), + "UnixRights": ValueOf(syscall.UnixRights), + "Unlink": ValueOf(syscall.Unlink), + "Unmount": ValueOf(syscall.Unmount), + "Unsetenv": ValueOf(syscall.Unsetenv), + "Utimes": ValueOf(syscall.Utimes), + "UtimesNano": ValueOf(syscall.UtimesNano), + "VDISCARD": ValueOf(syscall.VDISCARD), + "VDSUSP": ValueOf(syscall.VDSUSP), + "VEOF": ValueOf(syscall.VEOF), + "VEOL": ValueOf(syscall.VEOL), + "VEOL2": ValueOf(syscall.VEOL2), + "VERASE": ValueOf(syscall.VERASE), + "VINTR": ValueOf(syscall.VINTR), + "VKILL": ValueOf(syscall.VKILL), + "VLNEXT": ValueOf(syscall.VLNEXT), + "VMIN": ValueOf(syscall.VMIN), + "VQUIT": ValueOf(syscall.VQUIT), + "VREPRINT": ValueOf(syscall.VREPRINT), + "VSTART": ValueOf(syscall.VSTART), + "VSTATUS": ValueOf(syscall.VSTATUS), + "VSTOP": ValueOf(syscall.VSTOP), + "VSUSP": ValueOf(syscall.VSUSP), + "VT0": ValueOf(syscall.VT0), + "VT1": ValueOf(syscall.VT1), + "VTDLY": ValueOf(syscall.VTDLY), + "VTIME": ValueOf(syscall.VTIME), + "VWERASE": ValueOf(syscall.VWERASE), + "WCONTINUED": ValueOf(syscall.WCONTINUED), + "WCOREFLAG": ValueOf(syscall.WCOREFLAG), + "WEXITED": ValueOf(syscall.WEXITED), + "WNOHANG": ValueOf(syscall.WNOHANG), + "WNOWAIT": ValueOf(syscall.WNOWAIT), + "WORDSIZE": ValueOf(syscall.WORDSIZE), + "WSTOPPED": ValueOf(syscall.WSTOPPED), + "WUNTRACED": ValueOf(syscall.WUNTRACED), + "Wait4": ValueOf(syscall.Wait4), + "Write": ValueOf(syscall.Write), + }, + Types: map[string]Type{ + "BpfHdr": TypeOf((*syscall.BpfHdr)(nil)).Elem(), + "BpfInsn": TypeOf((*syscall.BpfInsn)(nil)).Elem(), + "BpfProgram": TypeOf((*syscall.BpfProgram)(nil)).Elem(), + "BpfStat": TypeOf((*syscall.BpfStat)(nil)).Elem(), + "BpfVersion": TypeOf((*syscall.BpfVersion)(nil)).Elem(), + "Cmsghdr": TypeOf((*syscall.Cmsghdr)(nil)).Elem(), + "Credential": TypeOf((*syscall.Credential)(nil)).Elem(), + "Dirent": TypeOf((*syscall.Dirent)(nil)).Elem(), + "Errno": TypeOf((*syscall.Errno)(nil)).Elem(), + "Fbootstraptransfer_t": TypeOf((*syscall.Fbootstraptransfer_t)(nil)).Elem(), + "FdSet": TypeOf((*syscall.FdSet)(nil)).Elem(), + "Flock_t": TypeOf((*syscall.Flock_t)(nil)).Elem(), + "Fsid": TypeOf((*syscall.Fsid)(nil)).Elem(), + "Fstore_t": TypeOf((*syscall.Fstore_t)(nil)).Elem(), + "ICMPv6Filter": TypeOf((*syscall.ICMPv6Filter)(nil)).Elem(), + "IPMreq": TypeOf((*syscall.IPMreq)(nil)).Elem(), + "IPv6MTUInfo": TypeOf((*syscall.IPv6MTUInfo)(nil)).Elem(), + "IPv6Mreq": TypeOf((*syscall.IPv6Mreq)(nil)).Elem(), + "IfData": TypeOf((*syscall.IfData)(nil)).Elem(), + "IfMsghdr": TypeOf((*syscall.IfMsghdr)(nil)).Elem(), + "IfaMsghdr": TypeOf((*syscall.IfaMsghdr)(nil)).Elem(), + "IfmaMsghdr": TypeOf((*syscall.IfmaMsghdr)(nil)).Elem(), + "IfmaMsghdr2": TypeOf((*syscall.IfmaMsghdr2)(nil)).Elem(), + "Inet4Pktinfo": TypeOf((*syscall.Inet4Pktinfo)(nil)).Elem(), + "Inet6Pktinfo": TypeOf((*syscall.Inet6Pktinfo)(nil)).Elem(), + "InterfaceAddrMessage": TypeOf((*syscall.InterfaceAddrMessage)(nil)).Elem(), + "InterfaceMessage": TypeOf((*syscall.InterfaceMessage)(nil)).Elem(), + "InterfaceMulticastAddrMessage": TypeOf((*syscall.InterfaceMulticastAddrMessage)(nil)).Elem(), + "Iovec": TypeOf((*syscall.Iovec)(nil)).Elem(), + "Kevent_t": TypeOf((*syscall.Kevent_t)(nil)).Elem(), + "Linger": TypeOf((*syscall.Linger)(nil)).Elem(), + "Log2phys_t": TypeOf((*syscall.Log2phys_t)(nil)).Elem(), + "Msghdr": TypeOf((*syscall.Msghdr)(nil)).Elem(), + "ProcAttr": TypeOf((*syscall.ProcAttr)(nil)).Elem(), + "Radvisory_t": TypeOf((*syscall.Radvisory_t)(nil)).Elem(), + "RawSockaddr": TypeOf((*syscall.RawSockaddr)(nil)).Elem(), + "RawSockaddrAny": TypeOf((*syscall.RawSockaddrAny)(nil)).Elem(), + "RawSockaddrDatalink": TypeOf((*syscall.RawSockaddrDatalink)(nil)).Elem(), + "RawSockaddrInet4": TypeOf((*syscall.RawSockaddrInet4)(nil)).Elem(), + "RawSockaddrInet6": TypeOf((*syscall.RawSockaddrInet6)(nil)).Elem(), + "RawSockaddrUnix": TypeOf((*syscall.RawSockaddrUnix)(nil)).Elem(), + "Rlimit": TypeOf((*syscall.Rlimit)(nil)).Elem(), + "RouteMessage": TypeOf((*syscall.RouteMessage)(nil)).Elem(), + "RoutingMessage": TypeOf((*syscall.RoutingMessage)(nil)).Elem(), + "RtMetrics": TypeOf((*syscall.RtMetrics)(nil)).Elem(), + "RtMsghdr": TypeOf((*syscall.RtMsghdr)(nil)).Elem(), + "Rusage": TypeOf((*syscall.Rusage)(nil)).Elem(), + "Signal": TypeOf((*syscall.Signal)(nil)).Elem(), + "Sockaddr": TypeOf((*syscall.Sockaddr)(nil)).Elem(), + "SockaddrDatalink": TypeOf((*syscall.SockaddrDatalink)(nil)).Elem(), + "SockaddrInet4": TypeOf((*syscall.SockaddrInet4)(nil)).Elem(), + "SockaddrInet6": TypeOf((*syscall.SockaddrInet6)(nil)).Elem(), + "SockaddrUnix": TypeOf((*syscall.SockaddrUnix)(nil)).Elem(), + "SocketControlMessage": TypeOf((*syscall.SocketControlMessage)(nil)).Elem(), + "Stat_t": TypeOf((*syscall.Stat_t)(nil)).Elem(), + "Statfs_t": TypeOf((*syscall.Statfs_t)(nil)).Elem(), + "SysProcAttr": TypeOf((*syscall.SysProcAttr)(nil)).Elem(), + "Termios": TypeOf((*syscall.Termios)(nil)).Elem(), + "Timespec": TypeOf((*syscall.Timespec)(nil)).Elem(), + "Timeval": TypeOf((*syscall.Timeval)(nil)).Elem(), + "Timeval32": TypeOf((*syscall.Timeval32)(nil)).Elem(), + "WaitStatus": TypeOf((*syscall.WaitStatus)(nil)).Elem(), + }, + Proxies: map[string]Type{ + } } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/syscall_freebsd_386.go b/vendor/github.com/cosmos72/gomacro/imports/syscall_freebsd_386.go new file mode 100644 index 0000000..275f315 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/syscall_freebsd_386.go @@ -0,0 +1,4027 @@ +// +build !gccgo + +// this file was generated by gomacro command: import _b "syscall" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "syscall" +) + +// reflection: allow interpreted code to import "syscall" +func init() { + Packages["syscall"] = Package{ + Binds: map[string]Value{ + "AF_APPLETALK": ValueOf(syscall.AF_APPLETALK), + "AF_ARP": ValueOf(syscall.AF_ARP), + "AF_ATM": ValueOf(syscall.AF_ATM), + "AF_BLUETOOTH": ValueOf(syscall.AF_BLUETOOTH), + "AF_CCITT": ValueOf(syscall.AF_CCITT), + "AF_CHAOS": ValueOf(syscall.AF_CHAOS), + "AF_CNT": ValueOf(syscall.AF_CNT), + "AF_COIP": ValueOf(syscall.AF_COIP), + "AF_DATAKIT": ValueOf(syscall.AF_DATAKIT), + "AF_DECnet": ValueOf(syscall.AF_DECnet), + "AF_DLI": ValueOf(syscall.AF_DLI), + "AF_E164": ValueOf(syscall.AF_E164), + "AF_ECMA": ValueOf(syscall.AF_ECMA), + "AF_HYLINK": ValueOf(syscall.AF_HYLINK), + "AF_IEEE80211": ValueOf(syscall.AF_IEEE80211), + "AF_IMPLINK": ValueOf(syscall.AF_IMPLINK), + "AF_INET": ValueOf(syscall.AF_INET), + "AF_INET6": ValueOf(syscall.AF_INET6), + "AF_INET6_SDP": ValueOf(syscall.AF_INET6_SDP), + "AF_INET_SDP": ValueOf(syscall.AF_INET_SDP), + "AF_IPX": ValueOf(syscall.AF_IPX), + "AF_ISDN": ValueOf(syscall.AF_ISDN), + "AF_ISO": ValueOf(syscall.AF_ISO), + "AF_LAT": ValueOf(syscall.AF_LAT), + "AF_LINK": ValueOf(syscall.AF_LINK), + "AF_LOCAL": ValueOf(syscall.AF_LOCAL), + "AF_MAX": ValueOf(syscall.AF_MAX), + "AF_NATM": ValueOf(syscall.AF_NATM), + "AF_NETBIOS": ValueOf(syscall.AF_NETBIOS), + "AF_NETGRAPH": ValueOf(syscall.AF_NETGRAPH), + "AF_OSI": ValueOf(syscall.AF_OSI), + "AF_PUP": ValueOf(syscall.AF_PUP), + "AF_ROUTE": ValueOf(syscall.AF_ROUTE), + "AF_SCLUSTER": ValueOf(syscall.AF_SCLUSTER), + "AF_SIP": ValueOf(syscall.AF_SIP), + "AF_SLOW": ValueOf(syscall.AF_SLOW), + "AF_SNA": ValueOf(syscall.AF_SNA), + "AF_UNIX": ValueOf(syscall.AF_UNIX), + "AF_UNSPEC": ValueOf(syscall.AF_UNSPEC), + "AF_VENDOR00": ValueOf(syscall.AF_VENDOR00), + "AF_VENDOR01": ValueOf(syscall.AF_VENDOR01), + "AF_VENDOR02": ValueOf(syscall.AF_VENDOR02), + "AF_VENDOR03": ValueOf(syscall.AF_VENDOR03), + "AF_VENDOR04": ValueOf(syscall.AF_VENDOR04), + "AF_VENDOR05": ValueOf(syscall.AF_VENDOR05), + "AF_VENDOR06": ValueOf(syscall.AF_VENDOR06), + "AF_VENDOR07": ValueOf(syscall.AF_VENDOR07), + "AF_VENDOR08": ValueOf(syscall.AF_VENDOR08), + "AF_VENDOR09": ValueOf(syscall.AF_VENDOR09), + "AF_VENDOR10": ValueOf(syscall.AF_VENDOR10), + "AF_VENDOR11": ValueOf(syscall.AF_VENDOR11), + "AF_VENDOR12": ValueOf(syscall.AF_VENDOR12), + "AF_VENDOR13": ValueOf(syscall.AF_VENDOR13), + "AF_VENDOR14": ValueOf(syscall.AF_VENDOR14), + "AF_VENDOR15": ValueOf(syscall.AF_VENDOR15), + "AF_VENDOR16": ValueOf(syscall.AF_VENDOR16), + "AF_VENDOR17": ValueOf(syscall.AF_VENDOR17), + "AF_VENDOR18": ValueOf(syscall.AF_VENDOR18), + "AF_VENDOR19": ValueOf(syscall.AF_VENDOR19), + "AF_VENDOR20": ValueOf(syscall.AF_VENDOR20), + "AF_VENDOR21": ValueOf(syscall.AF_VENDOR21), + "AF_VENDOR22": ValueOf(syscall.AF_VENDOR22), + "AF_VENDOR23": ValueOf(syscall.AF_VENDOR23), + "AF_VENDOR24": ValueOf(syscall.AF_VENDOR24), + "AF_VENDOR25": ValueOf(syscall.AF_VENDOR25), + "AF_VENDOR26": ValueOf(syscall.AF_VENDOR26), + "AF_VENDOR27": ValueOf(syscall.AF_VENDOR27), + "AF_VENDOR28": ValueOf(syscall.AF_VENDOR28), + "AF_VENDOR29": ValueOf(syscall.AF_VENDOR29), + "AF_VENDOR30": ValueOf(syscall.AF_VENDOR30), + "AF_VENDOR31": ValueOf(syscall.AF_VENDOR31), + "AF_VENDOR32": ValueOf(syscall.AF_VENDOR32), + "AF_VENDOR33": ValueOf(syscall.AF_VENDOR33), + "AF_VENDOR34": ValueOf(syscall.AF_VENDOR34), + "AF_VENDOR35": ValueOf(syscall.AF_VENDOR35), + "AF_VENDOR36": ValueOf(syscall.AF_VENDOR36), + "AF_VENDOR37": ValueOf(syscall.AF_VENDOR37), + "AF_VENDOR38": ValueOf(syscall.AF_VENDOR38), + "AF_VENDOR39": ValueOf(syscall.AF_VENDOR39), + "AF_VENDOR40": ValueOf(syscall.AF_VENDOR40), + "AF_VENDOR41": ValueOf(syscall.AF_VENDOR41), + "AF_VENDOR42": ValueOf(syscall.AF_VENDOR42), + "AF_VENDOR43": ValueOf(syscall.AF_VENDOR43), + "AF_VENDOR44": ValueOf(syscall.AF_VENDOR44), + "AF_VENDOR45": ValueOf(syscall.AF_VENDOR45), + "AF_VENDOR46": ValueOf(syscall.AF_VENDOR46), + "AF_VENDOR47": ValueOf(syscall.AF_VENDOR47), + "Accept": ValueOf(syscall.Accept), + "Accept4": ValueOf(syscall.Accept4), + "Access": ValueOf(syscall.Access), + "Adjtime": ValueOf(syscall.Adjtime), + "B0": ValueOf(syscall.B0), + "B110": ValueOf(syscall.B110), + "B115200": ValueOf(syscall.B115200), + "B1200": ValueOf(syscall.B1200), + "B134": ValueOf(syscall.B134), + "B14400": ValueOf(syscall.B14400), + "B150": ValueOf(syscall.B150), + "B1800": ValueOf(syscall.B1800), + "B19200": ValueOf(syscall.B19200), + "B200": ValueOf(syscall.B200), + "B230400": ValueOf(syscall.B230400), + "B2400": ValueOf(syscall.B2400), + "B28800": ValueOf(syscall.B28800), + "B300": ValueOf(syscall.B300), + "B38400": ValueOf(syscall.B38400), + "B460800": ValueOf(syscall.B460800), + "B4800": ValueOf(syscall.B4800), + "B50": ValueOf(syscall.B50), + "B57600": ValueOf(syscall.B57600), + "B600": ValueOf(syscall.B600), + "B7200": ValueOf(syscall.B7200), + "B75": ValueOf(syscall.B75), + "B76800": ValueOf(syscall.B76800), + "B921600": ValueOf(syscall.B921600), + "B9600": ValueOf(syscall.B9600), + "BIOCFEEDBACK": ValueOf(uint32(syscall.BIOCFEEDBACK)), + "BIOCFLUSH": ValueOf(syscall.BIOCFLUSH), + "BIOCGBLEN": ValueOf(syscall.BIOCGBLEN), + "BIOCGDIRECTION": ValueOf(syscall.BIOCGDIRECTION), + "BIOCGDLT": ValueOf(syscall.BIOCGDLT), + "BIOCGDLTLIST": ValueOf(uint32(syscall.BIOCGDLTLIST)), + "BIOCGETBUFMODE": ValueOf(syscall.BIOCGETBUFMODE), + "BIOCGETIF": ValueOf(syscall.BIOCGETIF), + "BIOCGETZMAX": ValueOf(syscall.BIOCGETZMAX), + "BIOCGHDRCMPLT": ValueOf(syscall.BIOCGHDRCMPLT), + "BIOCGRSIG": ValueOf(syscall.BIOCGRSIG), + "BIOCGRTIMEOUT": ValueOf(syscall.BIOCGRTIMEOUT), + "BIOCGSEESENT": ValueOf(syscall.BIOCGSEESENT), + "BIOCGSTATS": ValueOf(syscall.BIOCGSTATS), + "BIOCGTSTAMP": ValueOf(syscall.BIOCGTSTAMP), + "BIOCIMMEDIATE": ValueOf(uint32(syscall.BIOCIMMEDIATE)), + "BIOCLOCK": ValueOf(syscall.BIOCLOCK), + "BIOCPROMISC": ValueOf(syscall.BIOCPROMISC), + "BIOCROTZBUF": ValueOf(syscall.BIOCROTZBUF), + "BIOCSBLEN": ValueOf(uint32(syscall.BIOCSBLEN)), + "BIOCSDIRECTION": ValueOf(uint32(syscall.BIOCSDIRECTION)), + "BIOCSDLT": ValueOf(uint32(syscall.BIOCSDLT)), + "BIOCSETBUFMODE": ValueOf(uint32(syscall.BIOCSETBUFMODE)), + "BIOCSETF": ValueOf(uint32(syscall.BIOCSETF)), + "BIOCSETFNR": ValueOf(uint32(syscall.BIOCSETFNR)), + "BIOCSETIF": ValueOf(uint32(syscall.BIOCSETIF)), + "BIOCSETWF": ValueOf(uint32(syscall.BIOCSETWF)), + "BIOCSETZBUF": ValueOf(uint32(syscall.BIOCSETZBUF)), + "BIOCSHDRCMPLT": ValueOf(uint32(syscall.BIOCSHDRCMPLT)), + "BIOCSRSIG": ValueOf(uint32(syscall.BIOCSRSIG)), + "BIOCSRTIMEOUT": ValueOf(uint32(syscall.BIOCSRTIMEOUT)), + "BIOCSSEESENT": ValueOf(uint32(syscall.BIOCSSEESENT)), + "BIOCSTSTAMP": ValueOf(uint32(syscall.BIOCSTSTAMP)), + "BIOCVERSION": ValueOf(syscall.BIOCVERSION), + "BPF_A": ValueOf(syscall.BPF_A), + "BPF_ABS": ValueOf(syscall.BPF_ABS), + "BPF_ADD": ValueOf(syscall.BPF_ADD), + "BPF_ALIGNMENT": ValueOf(syscall.BPF_ALIGNMENT), + "BPF_ALU": ValueOf(syscall.BPF_ALU), + "BPF_AND": ValueOf(syscall.BPF_AND), + "BPF_B": ValueOf(syscall.BPF_B), + "BPF_BUFMODE_BUFFER": ValueOf(syscall.BPF_BUFMODE_BUFFER), + "BPF_BUFMODE_ZBUF": ValueOf(syscall.BPF_BUFMODE_ZBUF), + "BPF_DIV": ValueOf(syscall.BPF_DIV), + "BPF_H": ValueOf(syscall.BPF_H), + "BPF_IMM": ValueOf(syscall.BPF_IMM), + "BPF_IND": ValueOf(syscall.BPF_IND), + "BPF_JA": ValueOf(syscall.BPF_JA), + "BPF_JEQ": ValueOf(syscall.BPF_JEQ), + "BPF_JGE": ValueOf(syscall.BPF_JGE), + "BPF_JGT": ValueOf(syscall.BPF_JGT), + "BPF_JMP": ValueOf(syscall.BPF_JMP), + "BPF_JSET": ValueOf(syscall.BPF_JSET), + "BPF_K": ValueOf(syscall.BPF_K), + "BPF_LD": ValueOf(syscall.BPF_LD), + "BPF_LDX": ValueOf(syscall.BPF_LDX), + "BPF_LEN": ValueOf(syscall.BPF_LEN), + "BPF_LSH": ValueOf(syscall.BPF_LSH), + "BPF_MAJOR_VERSION": ValueOf(syscall.BPF_MAJOR_VERSION), + "BPF_MAXBUFSIZE": ValueOf(syscall.BPF_MAXBUFSIZE), + "BPF_MAXINSNS": ValueOf(syscall.BPF_MAXINSNS), + "BPF_MEM": ValueOf(syscall.BPF_MEM), + "BPF_MEMWORDS": ValueOf(syscall.BPF_MEMWORDS), + "BPF_MINBUFSIZE": ValueOf(syscall.BPF_MINBUFSIZE), + "BPF_MINOR_VERSION": ValueOf(syscall.BPF_MINOR_VERSION), + "BPF_MISC": ValueOf(syscall.BPF_MISC), + "BPF_MSH": ValueOf(syscall.BPF_MSH), + "BPF_MUL": ValueOf(syscall.BPF_MUL), + "BPF_NEG": ValueOf(syscall.BPF_NEG), + "BPF_OR": ValueOf(syscall.BPF_OR), + "BPF_RELEASE": ValueOf(syscall.BPF_RELEASE), + "BPF_RET": ValueOf(syscall.BPF_RET), + "BPF_RSH": ValueOf(syscall.BPF_RSH), + "BPF_ST": ValueOf(syscall.BPF_ST), + "BPF_STX": ValueOf(syscall.BPF_STX), + "BPF_SUB": ValueOf(syscall.BPF_SUB), + "BPF_TAX": ValueOf(syscall.BPF_TAX), + "BPF_TXA": ValueOf(syscall.BPF_TXA), + "BPF_T_BINTIME": ValueOf(syscall.BPF_T_BINTIME), + "BPF_T_BINTIME_FAST": ValueOf(syscall.BPF_T_BINTIME_FAST), + "BPF_T_BINTIME_MONOTONIC": ValueOf(syscall.BPF_T_BINTIME_MONOTONIC), + "BPF_T_BINTIME_MONOTONIC_FAST": ValueOf(syscall.BPF_T_BINTIME_MONOTONIC_FAST), + "BPF_T_FAST": ValueOf(syscall.BPF_T_FAST), + "BPF_T_FLAG_MASK": ValueOf(syscall.BPF_T_FLAG_MASK), + "BPF_T_FORMAT_MASK": ValueOf(syscall.BPF_T_FORMAT_MASK), + "BPF_T_MICROTIME": ValueOf(syscall.BPF_T_MICROTIME), + "BPF_T_MICROTIME_FAST": ValueOf(syscall.BPF_T_MICROTIME_FAST), + "BPF_T_MICROTIME_MONOTONIC": ValueOf(syscall.BPF_T_MICROTIME_MONOTONIC), + "BPF_T_MICROTIME_MONOTONIC_FAST": ValueOf(syscall.BPF_T_MICROTIME_MONOTONIC_FAST), + "BPF_T_MONOTONIC": ValueOf(syscall.BPF_T_MONOTONIC), + "BPF_T_MONOTONIC_FAST": ValueOf(syscall.BPF_T_MONOTONIC_FAST), + "BPF_T_NANOTIME": ValueOf(syscall.BPF_T_NANOTIME), + "BPF_T_NANOTIME_FAST": ValueOf(syscall.BPF_T_NANOTIME_FAST), + "BPF_T_NANOTIME_MONOTONIC": ValueOf(syscall.BPF_T_NANOTIME_MONOTONIC), + "BPF_T_NANOTIME_MONOTONIC_FAST": ValueOf(syscall.BPF_T_NANOTIME_MONOTONIC_FAST), + "BPF_T_NONE": ValueOf(syscall.BPF_T_NONE), + "BPF_T_NORMAL": ValueOf(syscall.BPF_T_NORMAL), + "BPF_W": ValueOf(syscall.BPF_W), + "BPF_X": ValueOf(syscall.BPF_X), + "BRKINT": ValueOf(syscall.BRKINT), + "Bind": ValueOf(syscall.Bind), + "BpfBuflen": ValueOf(syscall.BpfBuflen), + "BpfDatalink": ValueOf(syscall.BpfDatalink), + "BpfHeadercmpl": ValueOf(syscall.BpfHeadercmpl), + "BpfInterface": ValueOf(syscall.BpfInterface), + "BpfJump": ValueOf(syscall.BpfJump), + "BpfStats": ValueOf(syscall.BpfStats), + "BpfStmt": ValueOf(syscall.BpfStmt), + "BpfTimeout": ValueOf(syscall.BpfTimeout), + "BytePtrFromString": ValueOf(syscall.BytePtrFromString), + "ByteSliceFromString": ValueOf(syscall.ByteSliceFromString), + "CFLUSH": ValueOf(syscall.CFLUSH), + "CLOCAL": ValueOf(syscall.CLOCAL), + "CREAD": ValueOf(syscall.CREAD), + "CS5": ValueOf(syscall.CS5), + "CS6": ValueOf(syscall.CS6), + "CS7": ValueOf(syscall.CS7), + "CS8": ValueOf(syscall.CS8), + "CSIZE": ValueOf(syscall.CSIZE), + "CSTART": ValueOf(syscall.CSTART), + "CSTATUS": ValueOf(syscall.CSTATUS), + "CSTOP": ValueOf(syscall.CSTOP), + "CSTOPB": ValueOf(syscall.CSTOPB), + "CSUSP": ValueOf(syscall.CSUSP), + "CTL_MAXNAME": ValueOf(syscall.CTL_MAXNAME), + "CTL_NET": ValueOf(syscall.CTL_NET), + "Chdir": ValueOf(syscall.Chdir), + "CheckBpfVersion": ValueOf(syscall.CheckBpfVersion), + "Chflags": ValueOf(syscall.Chflags), + "Chmod": ValueOf(syscall.Chmod), + "Chown": ValueOf(syscall.Chown), + "Chroot": ValueOf(syscall.Chroot), + "Clearenv": ValueOf(syscall.Clearenv), + "Close": ValueOf(syscall.Close), + "CloseOnExec": ValueOf(syscall.CloseOnExec), + "CmsgLen": ValueOf(syscall.CmsgLen), + "CmsgSpace": ValueOf(syscall.CmsgSpace), + "Connect": ValueOf(syscall.Connect), + "DLT_A429": ValueOf(syscall.DLT_A429), + "DLT_A653_ICM": ValueOf(syscall.DLT_A653_ICM), + "DLT_AIRONET_HEADER": ValueOf(syscall.DLT_AIRONET_HEADER), + "DLT_AOS": ValueOf(syscall.DLT_AOS), + "DLT_APPLE_IP_OVER_IEEE1394": ValueOf(syscall.DLT_APPLE_IP_OVER_IEEE1394), + "DLT_ARCNET": ValueOf(syscall.DLT_ARCNET), + "DLT_ARCNET_LINUX": ValueOf(syscall.DLT_ARCNET_LINUX), + "DLT_ATM_CLIP": ValueOf(syscall.DLT_ATM_CLIP), + "DLT_ATM_RFC1483": ValueOf(syscall.DLT_ATM_RFC1483), + "DLT_AURORA": ValueOf(syscall.DLT_AURORA), + "DLT_AX25": ValueOf(syscall.DLT_AX25), + "DLT_AX25_KISS": ValueOf(syscall.DLT_AX25_KISS), + "DLT_BACNET_MS_TP": ValueOf(syscall.DLT_BACNET_MS_TP), + "DLT_BLUETOOTH_HCI_H4": ValueOf(syscall.DLT_BLUETOOTH_HCI_H4), + "DLT_BLUETOOTH_HCI_H4_WITH_PHDR": ValueOf(syscall.DLT_BLUETOOTH_HCI_H4_WITH_PHDR), + "DLT_CAN20B": ValueOf(syscall.DLT_CAN20B), + "DLT_CAN_SOCKETCAN": ValueOf(syscall.DLT_CAN_SOCKETCAN), + "DLT_CHAOS": ValueOf(syscall.DLT_CHAOS), + "DLT_CHDLC": ValueOf(syscall.DLT_CHDLC), + "DLT_CISCO_IOS": ValueOf(syscall.DLT_CISCO_IOS), + "DLT_C_HDLC": ValueOf(syscall.DLT_C_HDLC), + "DLT_C_HDLC_WITH_DIR": ValueOf(syscall.DLT_C_HDLC_WITH_DIR), + "DLT_DBUS": ValueOf(syscall.DLT_DBUS), + "DLT_DECT": ValueOf(syscall.DLT_DECT), + "DLT_DOCSIS": ValueOf(syscall.DLT_DOCSIS), + "DLT_DVB_CI": ValueOf(syscall.DLT_DVB_CI), + "DLT_ECONET": ValueOf(syscall.DLT_ECONET), + "DLT_EN10MB": ValueOf(syscall.DLT_EN10MB), + "DLT_EN3MB": ValueOf(syscall.DLT_EN3MB), + "DLT_ENC": ValueOf(syscall.DLT_ENC), + "DLT_ERF": ValueOf(syscall.DLT_ERF), + "DLT_ERF_ETH": ValueOf(syscall.DLT_ERF_ETH), + "DLT_ERF_POS": ValueOf(syscall.DLT_ERF_POS), + "DLT_FC_2": ValueOf(syscall.DLT_FC_2), + "DLT_FC_2_WITH_FRAME_DELIMS": ValueOf(syscall.DLT_FC_2_WITH_FRAME_DELIMS), + "DLT_FDDI": ValueOf(syscall.DLT_FDDI), + "DLT_FLEXRAY": ValueOf(syscall.DLT_FLEXRAY), + "DLT_FRELAY": ValueOf(syscall.DLT_FRELAY), + "DLT_FRELAY_WITH_DIR": ValueOf(syscall.DLT_FRELAY_WITH_DIR), + "DLT_GCOM_SERIAL": ValueOf(syscall.DLT_GCOM_SERIAL), + "DLT_GCOM_T1E1": ValueOf(syscall.DLT_GCOM_T1E1), + "DLT_GPF_F": ValueOf(syscall.DLT_GPF_F), + "DLT_GPF_T": ValueOf(syscall.DLT_GPF_T), + "DLT_GPRS_LLC": ValueOf(syscall.DLT_GPRS_LLC), + "DLT_GSMTAP_ABIS": ValueOf(syscall.DLT_GSMTAP_ABIS), + "DLT_GSMTAP_UM": ValueOf(syscall.DLT_GSMTAP_UM), + "DLT_HHDLC": ValueOf(syscall.DLT_HHDLC), + "DLT_IBM_SN": ValueOf(syscall.DLT_IBM_SN), + "DLT_IBM_SP": ValueOf(syscall.DLT_IBM_SP), + "DLT_IEEE802": ValueOf(syscall.DLT_IEEE802), + "DLT_IEEE802_11": ValueOf(syscall.DLT_IEEE802_11), + "DLT_IEEE802_11_RADIO": ValueOf(syscall.DLT_IEEE802_11_RADIO), + "DLT_IEEE802_11_RADIO_AVS": ValueOf(syscall.DLT_IEEE802_11_RADIO_AVS), + "DLT_IEEE802_15_4": ValueOf(syscall.DLT_IEEE802_15_4), + "DLT_IEEE802_15_4_LINUX": ValueOf(syscall.DLT_IEEE802_15_4_LINUX), + "DLT_IEEE802_15_4_NOFCS": ValueOf(syscall.DLT_IEEE802_15_4_NOFCS), + "DLT_IEEE802_15_4_NONASK_PHY": ValueOf(syscall.DLT_IEEE802_15_4_NONASK_PHY), + "DLT_IEEE802_16_MAC_CPS": ValueOf(syscall.DLT_IEEE802_16_MAC_CPS), + "DLT_IEEE802_16_MAC_CPS_RADIO": ValueOf(syscall.DLT_IEEE802_16_MAC_CPS_RADIO), + "DLT_IPFILTER": ValueOf(syscall.DLT_IPFILTER), + "DLT_IPMB": ValueOf(syscall.DLT_IPMB), + "DLT_IPMB_LINUX": ValueOf(syscall.DLT_IPMB_LINUX), + "DLT_IPNET": ValueOf(syscall.DLT_IPNET), + "DLT_IPOIB": ValueOf(syscall.DLT_IPOIB), + "DLT_IPV4": ValueOf(syscall.DLT_IPV4), + "DLT_IPV6": ValueOf(syscall.DLT_IPV6), + "DLT_IP_OVER_FC": ValueOf(syscall.DLT_IP_OVER_FC), + "DLT_JUNIPER_ATM1": ValueOf(syscall.DLT_JUNIPER_ATM1), + "DLT_JUNIPER_ATM2": ValueOf(syscall.DLT_JUNIPER_ATM2), + "DLT_JUNIPER_ATM_CEMIC": ValueOf(syscall.DLT_JUNIPER_ATM_CEMIC), + "DLT_JUNIPER_CHDLC": ValueOf(syscall.DLT_JUNIPER_CHDLC), + "DLT_JUNIPER_ES": ValueOf(syscall.DLT_JUNIPER_ES), + "DLT_JUNIPER_ETHER": ValueOf(syscall.DLT_JUNIPER_ETHER), + "DLT_JUNIPER_FIBRECHANNEL": ValueOf(syscall.DLT_JUNIPER_FIBRECHANNEL), + "DLT_JUNIPER_FRELAY": ValueOf(syscall.DLT_JUNIPER_FRELAY), + "DLT_JUNIPER_GGSN": ValueOf(syscall.DLT_JUNIPER_GGSN), + "DLT_JUNIPER_ISM": ValueOf(syscall.DLT_JUNIPER_ISM), + "DLT_JUNIPER_MFR": ValueOf(syscall.DLT_JUNIPER_MFR), + "DLT_JUNIPER_MLFR": ValueOf(syscall.DLT_JUNIPER_MLFR), + "DLT_JUNIPER_MLPPP": ValueOf(syscall.DLT_JUNIPER_MLPPP), + "DLT_JUNIPER_MONITOR": ValueOf(syscall.DLT_JUNIPER_MONITOR), + "DLT_JUNIPER_PIC_PEER": ValueOf(syscall.DLT_JUNIPER_PIC_PEER), + "DLT_JUNIPER_PPP": ValueOf(syscall.DLT_JUNIPER_PPP), + "DLT_JUNIPER_PPPOE": ValueOf(syscall.DLT_JUNIPER_PPPOE), + "DLT_JUNIPER_PPPOE_ATM": ValueOf(syscall.DLT_JUNIPER_PPPOE_ATM), + "DLT_JUNIPER_SERVICES": ValueOf(syscall.DLT_JUNIPER_SERVICES), + "DLT_JUNIPER_SRX_E2E": ValueOf(syscall.DLT_JUNIPER_SRX_E2E), + "DLT_JUNIPER_ST": ValueOf(syscall.DLT_JUNIPER_ST), + "DLT_JUNIPER_VP": ValueOf(syscall.DLT_JUNIPER_VP), + "DLT_JUNIPER_VS": ValueOf(syscall.DLT_JUNIPER_VS), + "DLT_LAPB_WITH_DIR": ValueOf(syscall.DLT_LAPB_WITH_DIR), + "DLT_LAPD": ValueOf(syscall.DLT_LAPD), + "DLT_LIN": ValueOf(syscall.DLT_LIN), + "DLT_LINUX_EVDEV": ValueOf(syscall.DLT_LINUX_EVDEV), + "DLT_LINUX_IRDA": ValueOf(syscall.DLT_LINUX_IRDA), + "DLT_LINUX_LAPD": ValueOf(syscall.DLT_LINUX_LAPD), + "DLT_LINUX_PPP_WITHDIRECTION": ValueOf(syscall.DLT_LINUX_PPP_WITHDIRECTION), + "DLT_LINUX_SLL": ValueOf(syscall.DLT_LINUX_SLL), + "DLT_LOOP": ValueOf(syscall.DLT_LOOP), + "DLT_LTALK": ValueOf(syscall.DLT_LTALK), + "DLT_MATCHING_MAX": ValueOf(syscall.DLT_MATCHING_MAX), + "DLT_MATCHING_MIN": ValueOf(syscall.DLT_MATCHING_MIN), + "DLT_MFR": ValueOf(syscall.DLT_MFR), + "DLT_MOST": ValueOf(syscall.DLT_MOST), + "DLT_MPEG_2_TS": ValueOf(syscall.DLT_MPEG_2_TS), + "DLT_MPLS": ValueOf(syscall.DLT_MPLS), + "DLT_MTP2": ValueOf(syscall.DLT_MTP2), + "DLT_MTP2_WITH_PHDR": ValueOf(syscall.DLT_MTP2_WITH_PHDR), + "DLT_MTP3": ValueOf(syscall.DLT_MTP3), + "DLT_MUX27010": ValueOf(syscall.DLT_MUX27010), + "DLT_NETANALYZER": ValueOf(syscall.DLT_NETANALYZER), + "DLT_NETANALYZER_TRANSPARENT": ValueOf(syscall.DLT_NETANALYZER_TRANSPARENT), + "DLT_NFC_LLCP": ValueOf(syscall.DLT_NFC_LLCP), + "DLT_NFLOG": ValueOf(syscall.DLT_NFLOG), + "DLT_NG40": ValueOf(syscall.DLT_NG40), + "DLT_NULL": ValueOf(syscall.DLT_NULL), + "DLT_PCI_EXP": ValueOf(syscall.DLT_PCI_EXP), + "DLT_PFLOG": ValueOf(syscall.DLT_PFLOG), + "DLT_PFSYNC": ValueOf(syscall.DLT_PFSYNC), + "DLT_PPI": ValueOf(syscall.DLT_PPI), + "DLT_PPP": ValueOf(syscall.DLT_PPP), + "DLT_PPP_BSDOS": ValueOf(syscall.DLT_PPP_BSDOS), + "DLT_PPP_ETHER": ValueOf(syscall.DLT_PPP_ETHER), + "DLT_PPP_PPPD": ValueOf(syscall.DLT_PPP_PPPD), + "DLT_PPP_SERIAL": ValueOf(syscall.DLT_PPP_SERIAL), + "DLT_PPP_WITH_DIR": ValueOf(syscall.DLT_PPP_WITH_DIR), + "DLT_PPP_WITH_DIRECTION": ValueOf(syscall.DLT_PPP_WITH_DIRECTION), + "DLT_PRISM_HEADER": ValueOf(syscall.DLT_PRISM_HEADER), + "DLT_PRONET": ValueOf(syscall.DLT_PRONET), + "DLT_RAIF1": ValueOf(syscall.DLT_RAIF1), + "DLT_RAW": ValueOf(syscall.DLT_RAW), + "DLT_RIO": ValueOf(syscall.DLT_RIO), + "DLT_SCCP": ValueOf(syscall.DLT_SCCP), + "DLT_SITA": ValueOf(syscall.DLT_SITA), + "DLT_SLIP": ValueOf(syscall.DLT_SLIP), + "DLT_SLIP_BSDOS": ValueOf(syscall.DLT_SLIP_BSDOS), + "DLT_STANAG_5066_D_PDU": ValueOf(syscall.DLT_STANAG_5066_D_PDU), + "DLT_SUNATM": ValueOf(syscall.DLT_SUNATM), + "DLT_SYMANTEC_FIREWALL": ValueOf(syscall.DLT_SYMANTEC_FIREWALL), + "DLT_TZSP": ValueOf(syscall.DLT_TZSP), + "DLT_USB": ValueOf(syscall.DLT_USB), + "DLT_USB_LINUX": ValueOf(syscall.DLT_USB_LINUX), + "DLT_USB_LINUX_MMAPPED": ValueOf(syscall.DLT_USB_LINUX_MMAPPED), + "DLT_USER0": ValueOf(syscall.DLT_USER0), + "DLT_USER1": ValueOf(syscall.DLT_USER1), + "DLT_USER10": ValueOf(syscall.DLT_USER10), + "DLT_USER11": ValueOf(syscall.DLT_USER11), + "DLT_USER12": ValueOf(syscall.DLT_USER12), + "DLT_USER13": ValueOf(syscall.DLT_USER13), + "DLT_USER14": ValueOf(syscall.DLT_USER14), + "DLT_USER15": ValueOf(syscall.DLT_USER15), + "DLT_USER2": ValueOf(syscall.DLT_USER2), + "DLT_USER3": ValueOf(syscall.DLT_USER3), + "DLT_USER4": ValueOf(syscall.DLT_USER4), + "DLT_USER5": ValueOf(syscall.DLT_USER5), + "DLT_USER6": ValueOf(syscall.DLT_USER6), + "DLT_USER7": ValueOf(syscall.DLT_USER7), + "DLT_USER8": ValueOf(syscall.DLT_USER8), + "DLT_USER9": ValueOf(syscall.DLT_USER9), + "DLT_WIHART": ValueOf(syscall.DLT_WIHART), + "DLT_X2E_SERIAL": ValueOf(syscall.DLT_X2E_SERIAL), + "DLT_X2E_XORAYA": ValueOf(syscall.DLT_X2E_XORAYA), + "DT_BLK": ValueOf(syscall.DT_BLK), + "DT_CHR": ValueOf(syscall.DT_CHR), + "DT_DIR": ValueOf(syscall.DT_DIR), + "DT_FIFO": ValueOf(syscall.DT_FIFO), + "DT_LNK": ValueOf(syscall.DT_LNK), + "DT_REG": ValueOf(syscall.DT_REG), + "DT_SOCK": ValueOf(syscall.DT_SOCK), + "DT_UNKNOWN": ValueOf(syscall.DT_UNKNOWN), + "DT_WHT": ValueOf(syscall.DT_WHT), + "Dup": ValueOf(syscall.Dup), + "Dup2": ValueOf(syscall.Dup2), + "E2BIG": ValueOf(syscall.E2BIG), + "EACCES": ValueOf(syscall.EACCES), + "EADDRINUSE": ValueOf(syscall.EADDRINUSE), + "EADDRNOTAVAIL": ValueOf(syscall.EADDRNOTAVAIL), + "EAFNOSUPPORT": ValueOf(syscall.EAFNOSUPPORT), + "EAGAIN": ValueOf(syscall.EAGAIN), + "EALREADY": ValueOf(syscall.EALREADY), + "EAUTH": ValueOf(syscall.EAUTH), + "EBADF": ValueOf(syscall.EBADF), + "EBADMSG": ValueOf(syscall.EBADMSG), + "EBADRPC": ValueOf(syscall.EBADRPC), + "EBUSY": ValueOf(syscall.EBUSY), + "ECANCELED": ValueOf(syscall.ECANCELED), + "ECAPMODE": ValueOf(syscall.ECAPMODE), + "ECHILD": ValueOf(syscall.ECHILD), + "ECHO": ValueOf(syscall.ECHO), + "ECHOCTL": ValueOf(syscall.ECHOCTL), + "ECHOE": ValueOf(syscall.ECHOE), + "ECHOK": ValueOf(syscall.ECHOK), + "ECHOKE": ValueOf(syscall.ECHOKE), + "ECHONL": ValueOf(syscall.ECHONL), + "ECHOPRT": ValueOf(syscall.ECHOPRT), + "ECONNABORTED": ValueOf(syscall.ECONNABORTED), + "ECONNREFUSED": ValueOf(syscall.ECONNREFUSED), + "ECONNRESET": ValueOf(syscall.ECONNRESET), + "EDEADLK": ValueOf(syscall.EDEADLK), + "EDESTADDRREQ": ValueOf(syscall.EDESTADDRREQ), + "EDOM": ValueOf(syscall.EDOM), + "EDOOFUS": ValueOf(syscall.EDOOFUS), + "EDQUOT": ValueOf(syscall.EDQUOT), + "EEXIST": ValueOf(syscall.EEXIST), + "EFAULT": ValueOf(syscall.EFAULT), + "EFBIG": ValueOf(syscall.EFBIG), + "EFTYPE": ValueOf(syscall.EFTYPE), + "EHOSTDOWN": ValueOf(syscall.EHOSTDOWN), + "EHOSTUNREACH": ValueOf(syscall.EHOSTUNREACH), + "EIDRM": ValueOf(syscall.EIDRM), + "EILSEQ": ValueOf(syscall.EILSEQ), + "EINPROGRESS": ValueOf(syscall.EINPROGRESS), + "EINTR": ValueOf(syscall.EINTR), + "EINVAL": ValueOf(syscall.EINVAL), + "EIO": ValueOf(syscall.EIO), + "EISCONN": ValueOf(syscall.EISCONN), + "EISDIR": ValueOf(syscall.EISDIR), + "ELAST": ValueOf(syscall.ELAST), + "ELOOP": ValueOf(syscall.ELOOP), + "EMFILE": ValueOf(syscall.EMFILE), + "EMLINK": ValueOf(syscall.EMLINK), + "EMSGSIZE": ValueOf(syscall.EMSGSIZE), + "EMULTIHOP": ValueOf(syscall.EMULTIHOP), + "ENAMETOOLONG": ValueOf(syscall.ENAMETOOLONG), + "ENEEDAUTH": ValueOf(syscall.ENEEDAUTH), + "ENETDOWN": ValueOf(syscall.ENETDOWN), + "ENETRESET": ValueOf(syscall.ENETRESET), + "ENETUNREACH": ValueOf(syscall.ENETUNREACH), + "ENFILE": ValueOf(syscall.ENFILE), + "ENOATTR": ValueOf(syscall.ENOATTR), + "ENOBUFS": ValueOf(syscall.ENOBUFS), + "ENODEV": ValueOf(syscall.ENODEV), + "ENOENT": ValueOf(syscall.ENOENT), + "ENOEXEC": ValueOf(syscall.ENOEXEC), + "ENOLCK": ValueOf(syscall.ENOLCK), + "ENOLINK": ValueOf(syscall.ENOLINK), + "ENOMEM": ValueOf(syscall.ENOMEM), + "ENOMSG": ValueOf(syscall.ENOMSG), + "ENOPROTOOPT": ValueOf(syscall.ENOPROTOOPT), + "ENOSPC": ValueOf(syscall.ENOSPC), + "ENOSYS": ValueOf(syscall.ENOSYS), + "ENOTBLK": ValueOf(syscall.ENOTBLK), + "ENOTCAPABLE": ValueOf(syscall.ENOTCAPABLE), + "ENOTCONN": ValueOf(syscall.ENOTCONN), + "ENOTDIR": ValueOf(syscall.ENOTDIR), + "ENOTEMPTY": ValueOf(syscall.ENOTEMPTY), + "ENOTRECOVERABLE": ValueOf(syscall.ENOTRECOVERABLE), + "ENOTSOCK": ValueOf(syscall.ENOTSOCK), + "ENOTSUP": ValueOf(syscall.ENOTSUP), + "ENOTTY": ValueOf(syscall.ENOTTY), + "ENXIO": ValueOf(syscall.ENXIO), + "EOPNOTSUPP": ValueOf(syscall.EOPNOTSUPP), + "EOVERFLOW": ValueOf(syscall.EOVERFLOW), + "EOWNERDEAD": ValueOf(syscall.EOWNERDEAD), + "EPERM": ValueOf(syscall.EPERM), + "EPFNOSUPPORT": ValueOf(syscall.EPFNOSUPPORT), + "EPIPE": ValueOf(syscall.EPIPE), + "EPROCLIM": ValueOf(syscall.EPROCLIM), + "EPROCUNAVAIL": ValueOf(syscall.EPROCUNAVAIL), + "EPROGMISMATCH": ValueOf(syscall.EPROGMISMATCH), + "EPROGUNAVAIL": ValueOf(syscall.EPROGUNAVAIL), + "EPROTO": ValueOf(syscall.EPROTO), + "EPROTONOSUPPORT": ValueOf(syscall.EPROTONOSUPPORT), + "EPROTOTYPE": ValueOf(syscall.EPROTOTYPE), + "ERANGE": ValueOf(syscall.ERANGE), + "EREMOTE": ValueOf(syscall.EREMOTE), + "EROFS": ValueOf(syscall.EROFS), + "ERPCMISMATCH": ValueOf(syscall.ERPCMISMATCH), + "ESHUTDOWN": ValueOf(syscall.ESHUTDOWN), + "ESOCKTNOSUPPORT": ValueOf(syscall.ESOCKTNOSUPPORT), + "ESPIPE": ValueOf(syscall.ESPIPE), + "ESRCH": ValueOf(syscall.ESRCH), + "ESTALE": ValueOf(syscall.ESTALE), + "ETIMEDOUT": ValueOf(syscall.ETIMEDOUT), + "ETOOMANYREFS": ValueOf(syscall.ETOOMANYREFS), + "ETXTBSY": ValueOf(syscall.ETXTBSY), + "EUSERS": ValueOf(syscall.EUSERS), + "EVFILT_AIO": ValueOf(syscall.EVFILT_AIO), + "EVFILT_FS": ValueOf(syscall.EVFILT_FS), + "EVFILT_LIO": ValueOf(syscall.EVFILT_LIO), + "EVFILT_PROC": ValueOf(syscall.EVFILT_PROC), + "EVFILT_READ": ValueOf(syscall.EVFILT_READ), + "EVFILT_SIGNAL": ValueOf(syscall.EVFILT_SIGNAL), + "EVFILT_SYSCOUNT": ValueOf(syscall.EVFILT_SYSCOUNT), + "EVFILT_TIMER": ValueOf(syscall.EVFILT_TIMER), + "EVFILT_USER": ValueOf(syscall.EVFILT_USER), + "EVFILT_VNODE": ValueOf(syscall.EVFILT_VNODE), + "EVFILT_WRITE": ValueOf(syscall.EVFILT_WRITE), + "EV_ADD": ValueOf(syscall.EV_ADD), + "EV_CLEAR": ValueOf(syscall.EV_CLEAR), + "EV_DELETE": ValueOf(syscall.EV_DELETE), + "EV_DISABLE": ValueOf(syscall.EV_DISABLE), + "EV_DISPATCH": ValueOf(syscall.EV_DISPATCH), + "EV_DROP": ValueOf(syscall.EV_DROP), + "EV_ENABLE": ValueOf(syscall.EV_ENABLE), + "EV_EOF": ValueOf(syscall.EV_EOF), + "EV_ERROR": ValueOf(syscall.EV_ERROR), + "EV_FLAG1": ValueOf(syscall.EV_FLAG1), + "EV_ONESHOT": ValueOf(syscall.EV_ONESHOT), + "EV_RECEIPT": ValueOf(syscall.EV_RECEIPT), + "EV_SYSFLAGS": ValueOf(syscall.EV_SYSFLAGS), + "EWOULDBLOCK": ValueOf(syscall.EWOULDBLOCK), + "EXDEV": ValueOf(syscall.EXDEV), + "EXTA": ValueOf(syscall.EXTA), + "EXTB": ValueOf(syscall.EXTB), + "EXTPROC": ValueOf(syscall.EXTPROC), + "Environ": ValueOf(syscall.Environ), + "Exec": ValueOf(syscall.Exec), + "Exit": ValueOf(syscall.Exit), + "FD_CLOEXEC": ValueOf(syscall.FD_CLOEXEC), + "FD_SETSIZE": ValueOf(syscall.FD_SETSIZE), + "FLUSHO": ValueOf(syscall.FLUSHO), + "F_CANCEL": ValueOf(syscall.F_CANCEL), + "F_DUP2FD": ValueOf(syscall.F_DUP2FD), + "F_DUP2FD_CLOEXEC": ValueOf(syscall.F_DUP2FD_CLOEXEC), + "F_DUPFD": ValueOf(syscall.F_DUPFD), + "F_DUPFD_CLOEXEC": ValueOf(syscall.F_DUPFD_CLOEXEC), + "F_GETFD": ValueOf(syscall.F_GETFD), + "F_GETFL": ValueOf(syscall.F_GETFL), + "F_GETLK": ValueOf(syscall.F_GETLK), + "F_GETOWN": ValueOf(syscall.F_GETOWN), + "F_OGETLK": ValueOf(syscall.F_OGETLK), + "F_OK": ValueOf(syscall.F_OK), + "F_OSETLK": ValueOf(syscall.F_OSETLK), + "F_OSETLKW": ValueOf(syscall.F_OSETLKW), + "F_RDAHEAD": ValueOf(syscall.F_RDAHEAD), + "F_RDLCK": ValueOf(syscall.F_RDLCK), + "F_READAHEAD": ValueOf(syscall.F_READAHEAD), + "F_SETFD": ValueOf(syscall.F_SETFD), + "F_SETFL": ValueOf(syscall.F_SETFL), + "F_SETLK": ValueOf(syscall.F_SETLK), + "F_SETLKW": ValueOf(syscall.F_SETLKW), + "F_SETLK_REMOTE": ValueOf(syscall.F_SETLK_REMOTE), + "F_SETOWN": ValueOf(syscall.F_SETOWN), + "F_UNLCK": ValueOf(syscall.F_UNLCK), + "F_UNLCKSYS": ValueOf(syscall.F_UNLCKSYS), + "F_WRLCK": ValueOf(syscall.F_WRLCK), + "Fchdir": ValueOf(syscall.Fchdir), + "Fchflags": ValueOf(syscall.Fchflags), + "Fchmod": ValueOf(syscall.Fchmod), + "Fchown": ValueOf(syscall.Fchown), + "FcntlFlock": ValueOf(syscall.FcntlFlock), + "Flock": ValueOf(syscall.Flock), + "FlushBpf": ValueOf(syscall.FlushBpf), + "ForkExec": ValueOf(syscall.ForkExec), + "ForkLock": ValueOf(&syscall.ForkLock).Elem(), + "Fpathconf": ValueOf(syscall.Fpathconf), + "Fstat": ValueOf(syscall.Fstat), + "Fstatfs": ValueOf(syscall.Fstatfs), + "Fsync": ValueOf(syscall.Fsync), + "Ftruncate": ValueOf(syscall.Ftruncate), + "Futimes": ValueOf(syscall.Futimes), + "Getdirentries": ValueOf(syscall.Getdirentries), + "Getdtablesize": ValueOf(syscall.Getdtablesize), + "Getegid": ValueOf(syscall.Getegid), + "Getenv": ValueOf(syscall.Getenv), + "Geteuid": ValueOf(syscall.Geteuid), + "Getfsstat": ValueOf(syscall.Getfsstat), + "Getgid": ValueOf(syscall.Getgid), + "Getgroups": ValueOf(syscall.Getgroups), + "Getpagesize": ValueOf(syscall.Getpagesize), + "Getpeername": ValueOf(syscall.Getpeername), + "Getpgid": ValueOf(syscall.Getpgid), + "Getpgrp": ValueOf(syscall.Getpgrp), + "Getpid": ValueOf(syscall.Getpid), + "Getppid": ValueOf(syscall.Getppid), + "Getpriority": ValueOf(syscall.Getpriority), + "Getrlimit": ValueOf(syscall.Getrlimit), + "Getrusage": ValueOf(syscall.Getrusage), + "Getsid": ValueOf(syscall.Getsid), + "Getsockname": ValueOf(syscall.Getsockname), + "GetsockoptByte": ValueOf(syscall.GetsockoptByte), + "GetsockoptICMPv6Filter": ValueOf(syscall.GetsockoptICMPv6Filter), + "GetsockoptIPMreq": ValueOf(syscall.GetsockoptIPMreq), + "GetsockoptIPMreqn": ValueOf(syscall.GetsockoptIPMreqn), + "GetsockoptIPv6MTUInfo": ValueOf(syscall.GetsockoptIPv6MTUInfo), + "GetsockoptIPv6Mreq": ValueOf(syscall.GetsockoptIPv6Mreq), + "GetsockoptInet4Addr": ValueOf(syscall.GetsockoptInet4Addr), + "GetsockoptInt": ValueOf(syscall.GetsockoptInt), + "Gettimeofday": ValueOf(syscall.Gettimeofday), + "Getuid": ValueOf(syscall.Getuid), + "Getwd": ValueOf(syscall.Getwd), + "HUPCL": ValueOf(syscall.HUPCL), + "ICANON": ValueOf(syscall.ICANON), + "ICMP6_FILTER": ValueOf(syscall.ICMP6_FILTER), + "ICRNL": ValueOf(syscall.ICRNL), + "IEXTEN": ValueOf(syscall.IEXTEN), + "IFAN_ARRIVAL": ValueOf(syscall.IFAN_ARRIVAL), + "IFAN_DEPARTURE": ValueOf(syscall.IFAN_DEPARTURE), + "IFF_ALLMULTI": ValueOf(syscall.IFF_ALLMULTI), + "IFF_ALTPHYS": ValueOf(syscall.IFF_ALTPHYS), + "IFF_BROADCAST": ValueOf(syscall.IFF_BROADCAST), + "IFF_CANTCHANGE": ValueOf(syscall.IFF_CANTCHANGE), + "IFF_CANTCONFIG": ValueOf(syscall.IFF_CANTCONFIG), + "IFF_DEBUG": ValueOf(syscall.IFF_DEBUG), + "IFF_DRV_OACTIVE": ValueOf(syscall.IFF_DRV_OACTIVE), + "IFF_DRV_RUNNING": ValueOf(syscall.IFF_DRV_RUNNING), + "IFF_DYING": ValueOf(syscall.IFF_DYING), + "IFF_LINK0": ValueOf(syscall.IFF_LINK0), + "IFF_LINK1": ValueOf(syscall.IFF_LINK1), + "IFF_LINK2": ValueOf(syscall.IFF_LINK2), + "IFF_LOOPBACK": ValueOf(syscall.IFF_LOOPBACK), + "IFF_MONITOR": ValueOf(syscall.IFF_MONITOR), + "IFF_MULTICAST": ValueOf(syscall.IFF_MULTICAST), + "IFF_NOARP": ValueOf(syscall.IFF_NOARP), + "IFF_OACTIVE": ValueOf(syscall.IFF_OACTIVE), + "IFF_POINTOPOINT": ValueOf(syscall.IFF_POINTOPOINT), + "IFF_PPROMISC": ValueOf(syscall.IFF_PPROMISC), + "IFF_PROMISC": ValueOf(syscall.IFF_PROMISC), + "IFF_RENAMING": ValueOf(syscall.IFF_RENAMING), + "IFF_RUNNING": ValueOf(syscall.IFF_RUNNING), + "IFF_SIMPLEX": ValueOf(syscall.IFF_SIMPLEX), + "IFF_SMART": ValueOf(syscall.IFF_SMART), + "IFF_STATICARP": ValueOf(syscall.IFF_STATICARP), + "IFF_UP": ValueOf(syscall.IFF_UP), + "IFNAMSIZ": ValueOf(syscall.IFNAMSIZ), + "IFT_1822": ValueOf(syscall.IFT_1822), + "IFT_A12MPPSWITCH": ValueOf(syscall.IFT_A12MPPSWITCH), + "IFT_AAL2": ValueOf(syscall.IFT_AAL2), + "IFT_AAL5": ValueOf(syscall.IFT_AAL5), + "IFT_ADSL": ValueOf(syscall.IFT_ADSL), + "IFT_AFLANE8023": ValueOf(syscall.IFT_AFLANE8023), + "IFT_AFLANE8025": ValueOf(syscall.IFT_AFLANE8025), + "IFT_ARAP": ValueOf(syscall.IFT_ARAP), + "IFT_ARCNET": ValueOf(syscall.IFT_ARCNET), + "IFT_ARCNETPLUS": ValueOf(syscall.IFT_ARCNETPLUS), + "IFT_ASYNC": ValueOf(syscall.IFT_ASYNC), + "IFT_ATM": ValueOf(syscall.IFT_ATM), + "IFT_ATMDXI": ValueOf(syscall.IFT_ATMDXI), + "IFT_ATMFUNI": ValueOf(syscall.IFT_ATMFUNI), + "IFT_ATMIMA": ValueOf(syscall.IFT_ATMIMA), + "IFT_ATMLOGICAL": ValueOf(syscall.IFT_ATMLOGICAL), + "IFT_ATMRADIO": ValueOf(syscall.IFT_ATMRADIO), + "IFT_ATMSUBINTERFACE": ValueOf(syscall.IFT_ATMSUBINTERFACE), + "IFT_ATMVCIENDPT": ValueOf(syscall.IFT_ATMVCIENDPT), + "IFT_ATMVIRTUAL": ValueOf(syscall.IFT_ATMVIRTUAL), + "IFT_BGPPOLICYACCOUNTING": ValueOf(syscall.IFT_BGPPOLICYACCOUNTING), + "IFT_BRIDGE": ValueOf(syscall.IFT_BRIDGE), + "IFT_BSC": ValueOf(syscall.IFT_BSC), + "IFT_CARP": ValueOf(syscall.IFT_CARP), + "IFT_CCTEMUL": ValueOf(syscall.IFT_CCTEMUL), + "IFT_CEPT": ValueOf(syscall.IFT_CEPT), + "IFT_CES": ValueOf(syscall.IFT_CES), + "IFT_CHANNEL": ValueOf(syscall.IFT_CHANNEL), + "IFT_CNR": ValueOf(syscall.IFT_CNR), + "IFT_COFFEE": ValueOf(syscall.IFT_COFFEE), + "IFT_COMPOSITELINK": ValueOf(syscall.IFT_COMPOSITELINK), + "IFT_DCN": ValueOf(syscall.IFT_DCN), + "IFT_DIGITALPOWERLINE": ValueOf(syscall.IFT_DIGITALPOWERLINE), + "IFT_DIGITALWRAPPEROVERHEADCHANNEL": ValueOf(syscall.IFT_DIGITALWRAPPEROVERHEADCHANNEL), + "IFT_DLSW": ValueOf(syscall.IFT_DLSW), + "IFT_DOCSCABLEDOWNSTREAM": ValueOf(syscall.IFT_DOCSCABLEDOWNSTREAM), + "IFT_DOCSCABLEMACLAYER": ValueOf(syscall.IFT_DOCSCABLEMACLAYER), + "IFT_DOCSCABLEUPSTREAM": ValueOf(syscall.IFT_DOCSCABLEUPSTREAM), + "IFT_DS0": ValueOf(syscall.IFT_DS0), + "IFT_DS0BUNDLE": ValueOf(syscall.IFT_DS0BUNDLE), + "IFT_DS1FDL": ValueOf(syscall.IFT_DS1FDL), + "IFT_DS3": ValueOf(syscall.IFT_DS3), + "IFT_DTM": ValueOf(syscall.IFT_DTM), + "IFT_DVBASILN": ValueOf(syscall.IFT_DVBASILN), + "IFT_DVBASIOUT": ValueOf(syscall.IFT_DVBASIOUT), + "IFT_DVBRCCDOWNSTREAM": ValueOf(syscall.IFT_DVBRCCDOWNSTREAM), + "IFT_DVBRCCMACLAYER": ValueOf(syscall.IFT_DVBRCCMACLAYER), + "IFT_DVBRCCUPSTREAM": ValueOf(syscall.IFT_DVBRCCUPSTREAM), + "IFT_ENC": ValueOf(syscall.IFT_ENC), + "IFT_EON": ValueOf(syscall.IFT_EON), + "IFT_EPLRS": ValueOf(syscall.IFT_EPLRS), + "IFT_ESCON": ValueOf(syscall.IFT_ESCON), + "IFT_ETHER": ValueOf(syscall.IFT_ETHER), + "IFT_FAITH": ValueOf(syscall.IFT_FAITH), + "IFT_FAST": ValueOf(syscall.IFT_FAST), + "IFT_FASTETHER": ValueOf(syscall.IFT_FASTETHER), + "IFT_FASTETHERFX": ValueOf(syscall.IFT_FASTETHERFX), + "IFT_FDDI": ValueOf(syscall.IFT_FDDI), + "IFT_FIBRECHANNEL": ValueOf(syscall.IFT_FIBRECHANNEL), + "IFT_FRAMERELAYINTERCONNECT": ValueOf(syscall.IFT_FRAMERELAYINTERCONNECT), + "IFT_FRAMERELAYMPI": ValueOf(syscall.IFT_FRAMERELAYMPI), + "IFT_FRDLCIENDPT": ValueOf(syscall.IFT_FRDLCIENDPT), + "IFT_FRELAY": ValueOf(syscall.IFT_FRELAY), + "IFT_FRELAYDCE": ValueOf(syscall.IFT_FRELAYDCE), + "IFT_FRF16MFRBUNDLE": ValueOf(syscall.IFT_FRF16MFRBUNDLE), + "IFT_FRFORWARD": ValueOf(syscall.IFT_FRFORWARD), + "IFT_G703AT2MB": ValueOf(syscall.IFT_G703AT2MB), + "IFT_G703AT64K": ValueOf(syscall.IFT_G703AT64K), + "IFT_GIF": ValueOf(syscall.IFT_GIF), + "IFT_GIGABITETHERNET": ValueOf(syscall.IFT_GIGABITETHERNET), + "IFT_GR303IDT": ValueOf(syscall.IFT_GR303IDT), + "IFT_GR303RDT": ValueOf(syscall.IFT_GR303RDT), + "IFT_H323GATEKEEPER": ValueOf(syscall.IFT_H323GATEKEEPER), + "IFT_H323PROXY": ValueOf(syscall.IFT_H323PROXY), + "IFT_HDH1822": ValueOf(syscall.IFT_HDH1822), + "IFT_HDLC": ValueOf(syscall.IFT_HDLC), + "IFT_HDSL2": ValueOf(syscall.IFT_HDSL2), + "IFT_HIPERLAN2": ValueOf(syscall.IFT_HIPERLAN2), + "IFT_HIPPI": ValueOf(syscall.IFT_HIPPI), + "IFT_HIPPIINTERFACE": ValueOf(syscall.IFT_HIPPIINTERFACE), + "IFT_HOSTPAD": ValueOf(syscall.IFT_HOSTPAD), + "IFT_HSSI": ValueOf(syscall.IFT_HSSI), + "IFT_HY": ValueOf(syscall.IFT_HY), + "IFT_IBM370PARCHAN": ValueOf(syscall.IFT_IBM370PARCHAN), + "IFT_IDSL": ValueOf(syscall.IFT_IDSL), + "IFT_IEEE1394": ValueOf(syscall.IFT_IEEE1394), + "IFT_IEEE80211": ValueOf(syscall.IFT_IEEE80211), + "IFT_IEEE80212": ValueOf(syscall.IFT_IEEE80212), + "IFT_IEEE8023ADLAG": ValueOf(syscall.IFT_IEEE8023ADLAG), + "IFT_IFGSN": ValueOf(syscall.IFT_IFGSN), + "IFT_IMT": ValueOf(syscall.IFT_IMT), + "IFT_INFINIBAND": ValueOf(syscall.IFT_INFINIBAND), + "IFT_INTERLEAVE": ValueOf(syscall.IFT_INTERLEAVE), + "IFT_IP": ValueOf(syscall.IFT_IP), + "IFT_IPFORWARD": ValueOf(syscall.IFT_IPFORWARD), + "IFT_IPOVERATM": ValueOf(syscall.IFT_IPOVERATM), + "IFT_IPOVERCDLC": ValueOf(syscall.IFT_IPOVERCDLC), + "IFT_IPOVERCLAW": ValueOf(syscall.IFT_IPOVERCLAW), + "IFT_IPSWITCH": ValueOf(syscall.IFT_IPSWITCH), + "IFT_IPXIP": ValueOf(syscall.IFT_IPXIP), + "IFT_ISDN": ValueOf(syscall.IFT_ISDN), + "IFT_ISDNBASIC": ValueOf(syscall.IFT_ISDNBASIC), + "IFT_ISDNPRIMARY": ValueOf(syscall.IFT_ISDNPRIMARY), + "IFT_ISDNS": ValueOf(syscall.IFT_ISDNS), + "IFT_ISDNU": ValueOf(syscall.IFT_ISDNU), + "IFT_ISO88022LLC": ValueOf(syscall.IFT_ISO88022LLC), + "IFT_ISO88023": ValueOf(syscall.IFT_ISO88023), + "IFT_ISO88024": ValueOf(syscall.IFT_ISO88024), + "IFT_ISO88025": ValueOf(syscall.IFT_ISO88025), + "IFT_ISO88025CRFPINT": ValueOf(syscall.IFT_ISO88025CRFPINT), + "IFT_ISO88025DTR": ValueOf(syscall.IFT_ISO88025DTR), + "IFT_ISO88025FIBER": ValueOf(syscall.IFT_ISO88025FIBER), + "IFT_ISO88026": ValueOf(syscall.IFT_ISO88026), + "IFT_ISUP": ValueOf(syscall.IFT_ISUP), + "IFT_L2VLAN": ValueOf(syscall.IFT_L2VLAN), + "IFT_L3IPVLAN": ValueOf(syscall.IFT_L3IPVLAN), + "IFT_L3IPXVLAN": ValueOf(syscall.IFT_L3IPXVLAN), + "IFT_LAPB": ValueOf(syscall.IFT_LAPB), + "IFT_LAPD": ValueOf(syscall.IFT_LAPD), + "IFT_LAPF": ValueOf(syscall.IFT_LAPF), + "IFT_LOCALTALK": ValueOf(syscall.IFT_LOCALTALK), + "IFT_LOOP": ValueOf(syscall.IFT_LOOP), + "IFT_MEDIAMAILOVERIP": ValueOf(syscall.IFT_MEDIAMAILOVERIP), + "IFT_MFSIGLINK": ValueOf(syscall.IFT_MFSIGLINK), + "IFT_MIOX25": ValueOf(syscall.IFT_MIOX25), + "IFT_MODEM": ValueOf(syscall.IFT_MODEM), + "IFT_MPC": ValueOf(syscall.IFT_MPC), + "IFT_MPLS": ValueOf(syscall.IFT_MPLS), + "IFT_MPLSTUNNEL": ValueOf(syscall.IFT_MPLSTUNNEL), + "IFT_MSDSL": ValueOf(syscall.IFT_MSDSL), + "IFT_MVL": ValueOf(syscall.IFT_MVL), + "IFT_MYRINET": ValueOf(syscall.IFT_MYRINET), + "IFT_NFAS": ValueOf(syscall.IFT_NFAS), + "IFT_NSIP": ValueOf(syscall.IFT_NSIP), + "IFT_OPTICALCHANNEL": ValueOf(syscall.IFT_OPTICALCHANNEL), + "IFT_OPTICALTRANSPORT": ValueOf(syscall.IFT_OPTICALTRANSPORT), + "IFT_OTHER": ValueOf(syscall.IFT_OTHER), + "IFT_P10": ValueOf(syscall.IFT_P10), + "IFT_P80": ValueOf(syscall.IFT_P80), + "IFT_PARA": ValueOf(syscall.IFT_PARA), + "IFT_PFLOG": ValueOf(syscall.IFT_PFLOG), + "IFT_PFSYNC": ValueOf(syscall.IFT_PFSYNC), + "IFT_PLC": ValueOf(syscall.IFT_PLC), + "IFT_POS": ValueOf(syscall.IFT_POS), + "IFT_PPP": ValueOf(syscall.IFT_PPP), + "IFT_PPPMULTILINKBUNDLE": ValueOf(syscall.IFT_PPPMULTILINKBUNDLE), + "IFT_PROPBWAP2MP": ValueOf(syscall.IFT_PROPBWAP2MP), + "IFT_PROPCNLS": ValueOf(syscall.IFT_PROPCNLS), + "IFT_PROPDOCSWIRELESSDOWNSTREAM": ValueOf(syscall.IFT_PROPDOCSWIRELESSDOWNSTREAM), + "IFT_PROPDOCSWIRELESSMACLAYER": ValueOf(syscall.IFT_PROPDOCSWIRELESSMACLAYER), + "IFT_PROPDOCSWIRELESSUPSTREAM": ValueOf(syscall.IFT_PROPDOCSWIRELESSUPSTREAM), + "IFT_PROPMUX": ValueOf(syscall.IFT_PROPMUX), + "IFT_PROPVIRTUAL": ValueOf(syscall.IFT_PROPVIRTUAL), + "IFT_PROPWIRELESSP2P": ValueOf(syscall.IFT_PROPWIRELESSP2P), + "IFT_PTPSERIAL": ValueOf(syscall.IFT_PTPSERIAL), + "IFT_PVC": ValueOf(syscall.IFT_PVC), + "IFT_QLLC": ValueOf(syscall.IFT_QLLC), + "IFT_RADIOMAC": ValueOf(syscall.IFT_RADIOMAC), + "IFT_RADSL": ValueOf(syscall.IFT_RADSL), + "IFT_REACHDSL": ValueOf(syscall.IFT_REACHDSL), + "IFT_RFC1483": ValueOf(syscall.IFT_RFC1483), + "IFT_RS232": ValueOf(syscall.IFT_RS232), + "IFT_RSRB": ValueOf(syscall.IFT_RSRB), + "IFT_SDLC": ValueOf(syscall.IFT_SDLC), + "IFT_SDSL": ValueOf(syscall.IFT_SDSL), + "IFT_SHDSL": ValueOf(syscall.IFT_SHDSL), + "IFT_SIP": ValueOf(syscall.IFT_SIP), + "IFT_SLIP": ValueOf(syscall.IFT_SLIP), + "IFT_SMDSDXI": ValueOf(syscall.IFT_SMDSDXI), + "IFT_SMDSICIP": ValueOf(syscall.IFT_SMDSICIP), + "IFT_SONET": ValueOf(syscall.IFT_SONET), + "IFT_SONETOVERHEADCHANNEL": ValueOf(syscall.IFT_SONETOVERHEADCHANNEL), + "IFT_SONETPATH": ValueOf(syscall.IFT_SONETPATH), + "IFT_SONETVT": ValueOf(syscall.IFT_SONETVT), + "IFT_SRP": ValueOf(syscall.IFT_SRP), + "IFT_SS7SIGLINK": ValueOf(syscall.IFT_SS7SIGLINK), + "IFT_STACKTOSTACK": ValueOf(syscall.IFT_STACKTOSTACK), + "IFT_STARLAN": ValueOf(syscall.IFT_STARLAN), + "IFT_STF": ValueOf(syscall.IFT_STF), + "IFT_T1": ValueOf(syscall.IFT_T1), + "IFT_TDLC": ValueOf(syscall.IFT_TDLC), + "IFT_TERMPAD": ValueOf(syscall.IFT_TERMPAD), + "IFT_TR008": ValueOf(syscall.IFT_TR008), + "IFT_TRANSPHDLC": ValueOf(syscall.IFT_TRANSPHDLC), + "IFT_TUNNEL": ValueOf(syscall.IFT_TUNNEL), + "IFT_ULTRA": ValueOf(syscall.IFT_ULTRA), + "IFT_USB": ValueOf(syscall.IFT_USB), + "IFT_V11": ValueOf(syscall.IFT_V11), + "IFT_V35": ValueOf(syscall.IFT_V35), + "IFT_V36": ValueOf(syscall.IFT_V36), + "IFT_V37": ValueOf(syscall.IFT_V37), + "IFT_VDSL": ValueOf(syscall.IFT_VDSL), + "IFT_VIRTUALIPADDRESS": ValueOf(syscall.IFT_VIRTUALIPADDRESS), + "IFT_VOICEEM": ValueOf(syscall.IFT_VOICEEM), + "IFT_VOICEENCAP": ValueOf(syscall.IFT_VOICEENCAP), + "IFT_VOICEFXO": ValueOf(syscall.IFT_VOICEFXO), + "IFT_VOICEFXS": ValueOf(syscall.IFT_VOICEFXS), + "IFT_VOICEOVERATM": ValueOf(syscall.IFT_VOICEOVERATM), + "IFT_VOICEOVERFRAMERELAY": ValueOf(syscall.IFT_VOICEOVERFRAMERELAY), + "IFT_VOICEOVERIP": ValueOf(syscall.IFT_VOICEOVERIP), + "IFT_X213": ValueOf(syscall.IFT_X213), + "IFT_X25": ValueOf(syscall.IFT_X25), + "IFT_X25DDN": ValueOf(syscall.IFT_X25DDN), + "IFT_X25HUNTGROUP": ValueOf(syscall.IFT_X25HUNTGROUP), + "IFT_X25MLP": ValueOf(syscall.IFT_X25MLP), + "IFT_X25PLE": ValueOf(syscall.IFT_X25PLE), + "IFT_XETHER": ValueOf(syscall.IFT_XETHER), + "IGNBRK": ValueOf(syscall.IGNBRK), + "IGNCR": ValueOf(syscall.IGNCR), + "IGNPAR": ValueOf(syscall.IGNPAR), + "IMAXBEL": ValueOf(syscall.IMAXBEL), + "INLCR": ValueOf(syscall.INLCR), + "INPCK": ValueOf(syscall.INPCK), + "IN_CLASSA_HOST": ValueOf(syscall.IN_CLASSA_HOST), + "IN_CLASSA_MAX": ValueOf(syscall.IN_CLASSA_MAX), + "IN_CLASSA_NET": ValueOf(uint32(syscall.IN_CLASSA_NET)), + "IN_CLASSA_NSHIFT": ValueOf(syscall.IN_CLASSA_NSHIFT), + "IN_CLASSB_HOST": ValueOf(syscall.IN_CLASSB_HOST), + "IN_CLASSB_MAX": ValueOf(syscall.IN_CLASSB_MAX), + "IN_CLASSB_NET": ValueOf(uint32(syscall.IN_CLASSB_NET)), + "IN_CLASSB_NSHIFT": ValueOf(syscall.IN_CLASSB_NSHIFT), + "IN_CLASSC_HOST": ValueOf(syscall.IN_CLASSC_HOST), + "IN_CLASSC_NET": ValueOf(uint32(syscall.IN_CLASSC_NET)), + "IN_CLASSC_NSHIFT": ValueOf(syscall.IN_CLASSC_NSHIFT), + "IN_CLASSD_HOST": ValueOf(syscall.IN_CLASSD_HOST), + "IN_CLASSD_NET": ValueOf(uint32(syscall.IN_CLASSD_NET)), + "IN_CLASSD_NSHIFT": ValueOf(syscall.IN_CLASSD_NSHIFT), + "IN_LOOPBACKNET": ValueOf(syscall.IN_LOOPBACKNET), + "IN_RFC3021_MASK": ValueOf(uint32(syscall.IN_RFC3021_MASK)), + "IPPROTO_3PC": ValueOf(syscall.IPPROTO_3PC), + "IPPROTO_ADFS": ValueOf(syscall.IPPROTO_ADFS), + "IPPROTO_AH": ValueOf(syscall.IPPROTO_AH), + "IPPROTO_AHIP": ValueOf(syscall.IPPROTO_AHIP), + "IPPROTO_APES": ValueOf(syscall.IPPROTO_APES), + "IPPROTO_ARGUS": ValueOf(syscall.IPPROTO_ARGUS), + "IPPROTO_AX25": ValueOf(syscall.IPPROTO_AX25), + "IPPROTO_BHA": ValueOf(syscall.IPPROTO_BHA), + "IPPROTO_BLT": ValueOf(syscall.IPPROTO_BLT), + "IPPROTO_BRSATMON": ValueOf(syscall.IPPROTO_BRSATMON), + "IPPROTO_CARP": ValueOf(syscall.IPPROTO_CARP), + "IPPROTO_CFTP": ValueOf(syscall.IPPROTO_CFTP), + "IPPROTO_CHAOS": ValueOf(syscall.IPPROTO_CHAOS), + "IPPROTO_CMTP": ValueOf(syscall.IPPROTO_CMTP), + "IPPROTO_CPHB": ValueOf(syscall.IPPROTO_CPHB), + "IPPROTO_CPNX": ValueOf(syscall.IPPROTO_CPNX), + "IPPROTO_DDP": ValueOf(syscall.IPPROTO_DDP), + "IPPROTO_DGP": ValueOf(syscall.IPPROTO_DGP), + "IPPROTO_DIVERT": ValueOf(syscall.IPPROTO_DIVERT), + "IPPROTO_DONE": ValueOf(syscall.IPPROTO_DONE), + "IPPROTO_DSTOPTS": ValueOf(syscall.IPPROTO_DSTOPTS), + "IPPROTO_EGP": ValueOf(syscall.IPPROTO_EGP), + "IPPROTO_EMCON": ValueOf(syscall.IPPROTO_EMCON), + "IPPROTO_ENCAP": ValueOf(syscall.IPPROTO_ENCAP), + "IPPROTO_EON": ValueOf(syscall.IPPROTO_EON), + "IPPROTO_ESP": ValueOf(syscall.IPPROTO_ESP), + "IPPROTO_ETHERIP": ValueOf(syscall.IPPROTO_ETHERIP), + "IPPROTO_FRAGMENT": ValueOf(syscall.IPPROTO_FRAGMENT), + "IPPROTO_GGP": ValueOf(syscall.IPPROTO_GGP), + "IPPROTO_GMTP": ValueOf(syscall.IPPROTO_GMTP), + "IPPROTO_GRE": ValueOf(syscall.IPPROTO_GRE), + "IPPROTO_HELLO": ValueOf(syscall.IPPROTO_HELLO), + "IPPROTO_HMP": ValueOf(syscall.IPPROTO_HMP), + "IPPROTO_HOPOPTS": ValueOf(syscall.IPPROTO_HOPOPTS), + "IPPROTO_ICMP": ValueOf(syscall.IPPROTO_ICMP), + "IPPROTO_ICMPV6": ValueOf(syscall.IPPROTO_ICMPV6), + "IPPROTO_IDP": ValueOf(syscall.IPPROTO_IDP), + "IPPROTO_IDPR": ValueOf(syscall.IPPROTO_IDPR), + "IPPROTO_IDRP": ValueOf(syscall.IPPROTO_IDRP), + "IPPROTO_IGMP": ValueOf(syscall.IPPROTO_IGMP), + "IPPROTO_IGP": ValueOf(syscall.IPPROTO_IGP), + "IPPROTO_IGRP": ValueOf(syscall.IPPROTO_IGRP), + "IPPROTO_IL": ValueOf(syscall.IPPROTO_IL), + "IPPROTO_INLSP": ValueOf(syscall.IPPROTO_INLSP), + "IPPROTO_INP": ValueOf(syscall.IPPROTO_INP), + "IPPROTO_IP": ValueOf(syscall.IPPROTO_IP), + "IPPROTO_IPCOMP": ValueOf(syscall.IPPROTO_IPCOMP), + "IPPROTO_IPCV": ValueOf(syscall.IPPROTO_IPCV), + "IPPROTO_IPEIP": ValueOf(syscall.IPPROTO_IPEIP), + "IPPROTO_IPIP": ValueOf(syscall.IPPROTO_IPIP), + "IPPROTO_IPPC": ValueOf(syscall.IPPROTO_IPPC), + "IPPROTO_IPV4": ValueOf(syscall.IPPROTO_IPV4), + "IPPROTO_IPV6": ValueOf(syscall.IPPROTO_IPV6), + "IPPROTO_IRTP": ValueOf(syscall.IPPROTO_IRTP), + "IPPROTO_KRYPTOLAN": ValueOf(syscall.IPPROTO_KRYPTOLAN), + "IPPROTO_LARP": ValueOf(syscall.IPPROTO_LARP), + "IPPROTO_LEAF1": ValueOf(syscall.IPPROTO_LEAF1), + "IPPROTO_LEAF2": ValueOf(syscall.IPPROTO_LEAF2), + "IPPROTO_MAX": ValueOf(syscall.IPPROTO_MAX), + "IPPROTO_MAXID": ValueOf(syscall.IPPROTO_MAXID), + "IPPROTO_MEAS": ValueOf(syscall.IPPROTO_MEAS), + "IPPROTO_MH": ValueOf(syscall.IPPROTO_MH), + "IPPROTO_MHRP": ValueOf(syscall.IPPROTO_MHRP), + "IPPROTO_MICP": ValueOf(syscall.IPPROTO_MICP), + "IPPROTO_MOBILE": ValueOf(syscall.IPPROTO_MOBILE), + "IPPROTO_MPLS": ValueOf(syscall.IPPROTO_MPLS), + "IPPROTO_MTP": ValueOf(syscall.IPPROTO_MTP), + "IPPROTO_MUX": ValueOf(syscall.IPPROTO_MUX), + "IPPROTO_ND": ValueOf(syscall.IPPROTO_ND), + "IPPROTO_NHRP": ValueOf(syscall.IPPROTO_NHRP), + "IPPROTO_NONE": ValueOf(syscall.IPPROTO_NONE), + "IPPROTO_NSP": ValueOf(syscall.IPPROTO_NSP), + "IPPROTO_NVPII": ValueOf(syscall.IPPROTO_NVPII), + "IPPROTO_OLD_DIVERT": ValueOf(syscall.IPPROTO_OLD_DIVERT), + "IPPROTO_OSPFIGP": ValueOf(syscall.IPPROTO_OSPFIGP), + "IPPROTO_PFSYNC": ValueOf(syscall.IPPROTO_PFSYNC), + "IPPROTO_PGM": ValueOf(syscall.IPPROTO_PGM), + "IPPROTO_PIGP": ValueOf(syscall.IPPROTO_PIGP), + "IPPROTO_PIM": ValueOf(syscall.IPPROTO_PIM), + "IPPROTO_PRM": ValueOf(syscall.IPPROTO_PRM), + "IPPROTO_PUP": ValueOf(syscall.IPPROTO_PUP), + "IPPROTO_PVP": ValueOf(syscall.IPPROTO_PVP), + "IPPROTO_RAW": ValueOf(syscall.IPPROTO_RAW), + "IPPROTO_RCCMON": ValueOf(syscall.IPPROTO_RCCMON), + "IPPROTO_RDP": ValueOf(syscall.IPPROTO_RDP), + "IPPROTO_ROUTING": ValueOf(syscall.IPPROTO_ROUTING), + "IPPROTO_RSVP": ValueOf(syscall.IPPROTO_RSVP), + "IPPROTO_RVD": ValueOf(syscall.IPPROTO_RVD), + "IPPROTO_SATEXPAK": ValueOf(syscall.IPPROTO_SATEXPAK), + "IPPROTO_SATMON": ValueOf(syscall.IPPROTO_SATMON), + "IPPROTO_SCCSP": ValueOf(syscall.IPPROTO_SCCSP), + "IPPROTO_SCTP": ValueOf(syscall.IPPROTO_SCTP), + "IPPROTO_SDRP": ValueOf(syscall.IPPROTO_SDRP), + "IPPROTO_SEND": ValueOf(syscall.IPPROTO_SEND), + "IPPROTO_SEP": ValueOf(syscall.IPPROTO_SEP), + "IPPROTO_SKIP": ValueOf(syscall.IPPROTO_SKIP), + "IPPROTO_SPACER": ValueOf(syscall.IPPROTO_SPACER), + "IPPROTO_SRPC": ValueOf(syscall.IPPROTO_SRPC), + "IPPROTO_ST": ValueOf(syscall.IPPROTO_ST), + "IPPROTO_SVMTP": ValueOf(syscall.IPPROTO_SVMTP), + "IPPROTO_SWIPE": ValueOf(syscall.IPPROTO_SWIPE), + "IPPROTO_TCF": ValueOf(syscall.IPPROTO_TCF), + "IPPROTO_TCP": ValueOf(syscall.IPPROTO_TCP), + "IPPROTO_TLSP": ValueOf(syscall.IPPROTO_TLSP), + "IPPROTO_TP": ValueOf(syscall.IPPROTO_TP), + "IPPROTO_TPXX": ValueOf(syscall.IPPROTO_TPXX), + "IPPROTO_TRUNK1": ValueOf(syscall.IPPROTO_TRUNK1), + "IPPROTO_TRUNK2": ValueOf(syscall.IPPROTO_TRUNK2), + "IPPROTO_TTP": ValueOf(syscall.IPPROTO_TTP), + "IPPROTO_UDP": ValueOf(syscall.IPPROTO_UDP), + "IPPROTO_VINES": ValueOf(syscall.IPPROTO_VINES), + "IPPROTO_VISA": ValueOf(syscall.IPPROTO_VISA), + "IPPROTO_VMTP": ValueOf(syscall.IPPROTO_VMTP), + "IPPROTO_WBEXPAK": ValueOf(syscall.IPPROTO_WBEXPAK), + "IPPROTO_WBMON": ValueOf(syscall.IPPROTO_WBMON), + "IPPROTO_WSN": ValueOf(syscall.IPPROTO_WSN), + "IPPROTO_XNET": ValueOf(syscall.IPPROTO_XNET), + "IPPROTO_XTP": ValueOf(syscall.IPPROTO_XTP), + "IPV6_AUTOFLOWLABEL": ValueOf(syscall.IPV6_AUTOFLOWLABEL), + "IPV6_BINDANY": ValueOf(syscall.IPV6_BINDANY), + "IPV6_BINDV6ONLY": ValueOf(syscall.IPV6_BINDV6ONLY), + "IPV6_CHECKSUM": ValueOf(syscall.IPV6_CHECKSUM), + "IPV6_DEFAULT_MULTICAST_HOPS": ValueOf(syscall.IPV6_DEFAULT_MULTICAST_HOPS), + "IPV6_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IPV6_DEFAULT_MULTICAST_LOOP), + "IPV6_DEFHLIM": ValueOf(syscall.IPV6_DEFHLIM), + "IPV6_DONTFRAG": ValueOf(syscall.IPV6_DONTFRAG), + "IPV6_DSTOPTS": ValueOf(syscall.IPV6_DSTOPTS), + "IPV6_FAITH": ValueOf(syscall.IPV6_FAITH), + "IPV6_FLOWINFO_MASK": ValueOf(uint32(syscall.IPV6_FLOWINFO_MASK)), + "IPV6_FLOWLABEL_MASK": ValueOf(uint32(syscall.IPV6_FLOWLABEL_MASK)), + "IPV6_FRAGTTL": ValueOf(syscall.IPV6_FRAGTTL), + "IPV6_FW_ADD": ValueOf(syscall.IPV6_FW_ADD), + "IPV6_FW_DEL": ValueOf(syscall.IPV6_FW_DEL), + "IPV6_FW_FLUSH": ValueOf(syscall.IPV6_FW_FLUSH), + "IPV6_FW_GET": ValueOf(syscall.IPV6_FW_GET), + "IPV6_FW_ZERO": ValueOf(syscall.IPV6_FW_ZERO), + "IPV6_HLIMDEC": ValueOf(syscall.IPV6_HLIMDEC), + "IPV6_HOPLIMIT": ValueOf(syscall.IPV6_HOPLIMIT), + "IPV6_HOPOPTS": ValueOf(syscall.IPV6_HOPOPTS), + "IPV6_IPSEC_POLICY": ValueOf(syscall.IPV6_IPSEC_POLICY), + "IPV6_JOIN_GROUP": ValueOf(syscall.IPV6_JOIN_GROUP), + "IPV6_LEAVE_GROUP": ValueOf(syscall.IPV6_LEAVE_GROUP), + "IPV6_MAXHLIM": ValueOf(syscall.IPV6_MAXHLIM), + "IPV6_MAXOPTHDR": ValueOf(syscall.IPV6_MAXOPTHDR), + "IPV6_MAXPACKET": ValueOf(syscall.IPV6_MAXPACKET), + "IPV6_MAX_GROUP_SRC_FILTER": ValueOf(syscall.IPV6_MAX_GROUP_SRC_FILTER), + "IPV6_MAX_MEMBERSHIPS": ValueOf(syscall.IPV6_MAX_MEMBERSHIPS), + "IPV6_MAX_SOCK_SRC_FILTER": ValueOf(syscall.IPV6_MAX_SOCK_SRC_FILTER), + "IPV6_MIN_MEMBERSHIPS": ValueOf(syscall.IPV6_MIN_MEMBERSHIPS), + "IPV6_MMTU": ValueOf(syscall.IPV6_MMTU), + "IPV6_MSFILTER": ValueOf(syscall.IPV6_MSFILTER), + "IPV6_MULTICAST_HOPS": ValueOf(syscall.IPV6_MULTICAST_HOPS), + "IPV6_MULTICAST_IF": ValueOf(syscall.IPV6_MULTICAST_IF), + "IPV6_MULTICAST_LOOP": ValueOf(syscall.IPV6_MULTICAST_LOOP), + "IPV6_NEXTHOP": ValueOf(syscall.IPV6_NEXTHOP), + "IPV6_PATHMTU": ValueOf(syscall.IPV6_PATHMTU), + "IPV6_PKTINFO": ValueOf(syscall.IPV6_PKTINFO), + "IPV6_PORTRANGE": ValueOf(syscall.IPV6_PORTRANGE), + "IPV6_PORTRANGE_DEFAULT": ValueOf(syscall.IPV6_PORTRANGE_DEFAULT), + "IPV6_PORTRANGE_HIGH": ValueOf(syscall.IPV6_PORTRANGE_HIGH), + "IPV6_PORTRANGE_LOW": ValueOf(syscall.IPV6_PORTRANGE_LOW), + "IPV6_PREFER_TEMPADDR": ValueOf(syscall.IPV6_PREFER_TEMPADDR), + "IPV6_RECVDSTOPTS": ValueOf(syscall.IPV6_RECVDSTOPTS), + "IPV6_RECVHOPLIMIT": ValueOf(syscall.IPV6_RECVHOPLIMIT), + "IPV6_RECVHOPOPTS": ValueOf(syscall.IPV6_RECVHOPOPTS), + "IPV6_RECVPATHMTU": ValueOf(syscall.IPV6_RECVPATHMTU), + "IPV6_RECVPKTINFO": ValueOf(syscall.IPV6_RECVPKTINFO), + "IPV6_RECVRTHDR": ValueOf(syscall.IPV6_RECVRTHDR), + "IPV6_RECVTCLASS": ValueOf(syscall.IPV6_RECVTCLASS), + "IPV6_RTHDR": ValueOf(syscall.IPV6_RTHDR), + "IPV6_RTHDRDSTOPTS": ValueOf(syscall.IPV6_RTHDRDSTOPTS), + "IPV6_RTHDR_LOOSE": ValueOf(syscall.IPV6_RTHDR_LOOSE), + "IPV6_RTHDR_STRICT": ValueOf(syscall.IPV6_RTHDR_STRICT), + "IPV6_RTHDR_TYPE_0": ValueOf(syscall.IPV6_RTHDR_TYPE_0), + "IPV6_SOCKOPT_RESERVED1": ValueOf(syscall.IPV6_SOCKOPT_RESERVED1), + "IPV6_TCLASS": ValueOf(syscall.IPV6_TCLASS), + "IPV6_UNICAST_HOPS": ValueOf(syscall.IPV6_UNICAST_HOPS), + "IPV6_USE_MIN_MTU": ValueOf(syscall.IPV6_USE_MIN_MTU), + "IPV6_V6ONLY": ValueOf(syscall.IPV6_V6ONLY), + "IPV6_VERSION": ValueOf(syscall.IPV6_VERSION), + "IPV6_VERSION_MASK": ValueOf(syscall.IPV6_VERSION_MASK), + "IP_ADD_MEMBERSHIP": ValueOf(syscall.IP_ADD_MEMBERSHIP), + "IP_ADD_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_ADD_SOURCE_MEMBERSHIP), + "IP_BINDANY": ValueOf(syscall.IP_BINDANY), + "IP_BLOCK_SOURCE": ValueOf(syscall.IP_BLOCK_SOURCE), + "IP_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IP_DEFAULT_MULTICAST_LOOP), + "IP_DEFAULT_MULTICAST_TTL": ValueOf(syscall.IP_DEFAULT_MULTICAST_TTL), + "IP_DF": ValueOf(syscall.IP_DF), + "IP_DONTFRAG": ValueOf(syscall.IP_DONTFRAG), + "IP_DROP_MEMBERSHIP": ValueOf(syscall.IP_DROP_MEMBERSHIP), + "IP_DROP_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_DROP_SOURCE_MEMBERSHIP), + "IP_DUMMYNET3": ValueOf(syscall.IP_DUMMYNET3), + "IP_DUMMYNET_CONFIGURE": ValueOf(syscall.IP_DUMMYNET_CONFIGURE), + "IP_DUMMYNET_DEL": ValueOf(syscall.IP_DUMMYNET_DEL), + "IP_DUMMYNET_FLUSH": ValueOf(syscall.IP_DUMMYNET_FLUSH), + "IP_DUMMYNET_GET": ValueOf(syscall.IP_DUMMYNET_GET), + "IP_FAITH": ValueOf(syscall.IP_FAITH), + "IP_FW3": ValueOf(syscall.IP_FW3), + "IP_FW_ADD": ValueOf(syscall.IP_FW_ADD), + "IP_FW_DEL": ValueOf(syscall.IP_FW_DEL), + "IP_FW_FLUSH": ValueOf(syscall.IP_FW_FLUSH), + "IP_FW_GET": ValueOf(syscall.IP_FW_GET), + "IP_FW_NAT_CFG": ValueOf(syscall.IP_FW_NAT_CFG), + "IP_FW_NAT_DEL": ValueOf(syscall.IP_FW_NAT_DEL), + "IP_FW_NAT_GET_CONFIG": ValueOf(syscall.IP_FW_NAT_GET_CONFIG), + "IP_FW_NAT_GET_LOG": ValueOf(syscall.IP_FW_NAT_GET_LOG), + "IP_FW_RESETLOG": ValueOf(syscall.IP_FW_RESETLOG), + "IP_FW_TABLE_ADD": ValueOf(syscall.IP_FW_TABLE_ADD), + "IP_FW_TABLE_DEL": ValueOf(syscall.IP_FW_TABLE_DEL), + "IP_FW_TABLE_FLUSH": ValueOf(syscall.IP_FW_TABLE_FLUSH), + "IP_FW_TABLE_GETSIZE": ValueOf(syscall.IP_FW_TABLE_GETSIZE), + "IP_FW_TABLE_LIST": ValueOf(syscall.IP_FW_TABLE_LIST), + "IP_FW_ZERO": ValueOf(syscall.IP_FW_ZERO), + "IP_HDRINCL": ValueOf(syscall.IP_HDRINCL), + "IP_IPSEC_POLICY": ValueOf(syscall.IP_IPSEC_POLICY), + "IP_MAXPACKET": ValueOf(syscall.IP_MAXPACKET), + "IP_MAX_GROUP_SRC_FILTER": ValueOf(syscall.IP_MAX_GROUP_SRC_FILTER), + "IP_MAX_MEMBERSHIPS": ValueOf(syscall.IP_MAX_MEMBERSHIPS), + "IP_MAX_SOCK_MUTE_FILTER": ValueOf(syscall.IP_MAX_SOCK_MUTE_FILTER), + "IP_MAX_SOCK_SRC_FILTER": ValueOf(syscall.IP_MAX_SOCK_SRC_FILTER), + "IP_MAX_SOURCE_FILTER": ValueOf(syscall.IP_MAX_SOURCE_FILTER), + "IP_MF": ValueOf(syscall.IP_MF), + "IP_MINTTL": ValueOf(syscall.IP_MINTTL), + "IP_MIN_MEMBERSHIPS": ValueOf(syscall.IP_MIN_MEMBERSHIPS), + "IP_MSFILTER": ValueOf(syscall.IP_MSFILTER), + "IP_MSS": ValueOf(syscall.IP_MSS), + "IP_MULTICAST_IF": ValueOf(syscall.IP_MULTICAST_IF), + "IP_MULTICAST_LOOP": ValueOf(syscall.IP_MULTICAST_LOOP), + "IP_MULTICAST_TTL": ValueOf(syscall.IP_MULTICAST_TTL), + "IP_MULTICAST_VIF": ValueOf(syscall.IP_MULTICAST_VIF), + "IP_OFFMASK": ValueOf(syscall.IP_OFFMASK), + "IP_ONESBCAST": ValueOf(syscall.IP_ONESBCAST), + "IP_OPTIONS": ValueOf(syscall.IP_OPTIONS), + "IP_PORTRANGE": ValueOf(syscall.IP_PORTRANGE), + "IP_PORTRANGE_DEFAULT": ValueOf(syscall.IP_PORTRANGE_DEFAULT), + "IP_PORTRANGE_HIGH": ValueOf(syscall.IP_PORTRANGE_HIGH), + "IP_PORTRANGE_LOW": ValueOf(syscall.IP_PORTRANGE_LOW), + "IP_RECVDSTADDR": ValueOf(syscall.IP_RECVDSTADDR), + "IP_RECVIF": ValueOf(syscall.IP_RECVIF), + "IP_RECVOPTS": ValueOf(syscall.IP_RECVOPTS), + "IP_RECVRETOPTS": ValueOf(syscall.IP_RECVRETOPTS), + "IP_RECVTOS": ValueOf(syscall.IP_RECVTOS), + "IP_RECVTTL": ValueOf(syscall.IP_RECVTTL), + "IP_RETOPTS": ValueOf(syscall.IP_RETOPTS), + "IP_RF": ValueOf(syscall.IP_RF), + "IP_RSVP_OFF": ValueOf(syscall.IP_RSVP_OFF), + "IP_RSVP_ON": ValueOf(syscall.IP_RSVP_ON), + "IP_RSVP_VIF_OFF": ValueOf(syscall.IP_RSVP_VIF_OFF), + "IP_RSVP_VIF_ON": ValueOf(syscall.IP_RSVP_VIF_ON), + "IP_SENDSRCADDR": ValueOf(syscall.IP_SENDSRCADDR), + "IP_TOS": ValueOf(syscall.IP_TOS), + "IP_TTL": ValueOf(syscall.IP_TTL), + "IP_UNBLOCK_SOURCE": ValueOf(syscall.IP_UNBLOCK_SOURCE), + "ISIG": ValueOf(syscall.ISIG), + "ISTRIP": ValueOf(syscall.ISTRIP), + "IXANY": ValueOf(syscall.IXANY), + "IXOFF": ValueOf(syscall.IXOFF), + "IXON": ValueOf(syscall.IXON), + "ImplementsGetwd": ValueOf(syscall.ImplementsGetwd), + "Issetugid": ValueOf(syscall.Issetugid), + "Kevent": ValueOf(syscall.Kevent), + "Kill": ValueOf(syscall.Kill), + "Kqueue": ValueOf(syscall.Kqueue), + "LOCK_EX": ValueOf(syscall.LOCK_EX), + "LOCK_NB": ValueOf(syscall.LOCK_NB), + "LOCK_SH": ValueOf(syscall.LOCK_SH), + "LOCK_UN": ValueOf(syscall.LOCK_UN), + "Lchown": ValueOf(syscall.Lchown), + "Link": ValueOf(syscall.Link), + "Listen": ValueOf(syscall.Listen), + "Lstat": ValueOf(syscall.Lstat), + "MADV_AUTOSYNC": ValueOf(syscall.MADV_AUTOSYNC), + "MADV_CORE": ValueOf(syscall.MADV_CORE), + "MADV_DONTNEED": ValueOf(syscall.MADV_DONTNEED), + "MADV_FREE": ValueOf(syscall.MADV_FREE), + "MADV_NOCORE": ValueOf(syscall.MADV_NOCORE), + "MADV_NORMAL": ValueOf(syscall.MADV_NORMAL), + "MADV_NOSYNC": ValueOf(syscall.MADV_NOSYNC), + "MADV_PROTECT": ValueOf(syscall.MADV_PROTECT), + "MADV_RANDOM": ValueOf(syscall.MADV_RANDOM), + "MADV_SEQUENTIAL": ValueOf(syscall.MADV_SEQUENTIAL), + "MADV_WILLNEED": ValueOf(syscall.MADV_WILLNEED), + "MAP_ALIGNED_SUPER": ValueOf(syscall.MAP_ALIGNED_SUPER), + "MAP_ALIGNMENT_MASK": ValueOf(syscall.MAP_ALIGNMENT_MASK), + "MAP_ALIGNMENT_SHIFT": ValueOf(syscall.MAP_ALIGNMENT_SHIFT), + "MAP_ANON": ValueOf(syscall.MAP_ANON), + "MAP_ANONYMOUS": ValueOf(syscall.MAP_ANONYMOUS), + "MAP_COPY": ValueOf(syscall.MAP_COPY), + "MAP_FILE": ValueOf(syscall.MAP_FILE), + "MAP_FIXED": ValueOf(syscall.MAP_FIXED), + "MAP_HASSEMAPHORE": ValueOf(syscall.MAP_HASSEMAPHORE), + "MAP_NOCORE": ValueOf(syscall.MAP_NOCORE), + "MAP_NORESERVE": ValueOf(syscall.MAP_NORESERVE), + "MAP_NOSYNC": ValueOf(syscall.MAP_NOSYNC), + "MAP_PREFAULT_READ": ValueOf(syscall.MAP_PREFAULT_READ), + "MAP_PRIVATE": ValueOf(syscall.MAP_PRIVATE), + "MAP_RENAME": ValueOf(syscall.MAP_RENAME), + "MAP_RESERVED0080": ValueOf(syscall.MAP_RESERVED0080), + "MAP_RESERVED0100": ValueOf(syscall.MAP_RESERVED0100), + "MAP_SHARED": ValueOf(syscall.MAP_SHARED), + "MAP_STACK": ValueOf(syscall.MAP_STACK), + "MCL_CURRENT": ValueOf(syscall.MCL_CURRENT), + "MCL_FUTURE": ValueOf(syscall.MCL_FUTURE), + "MSG_CMSG_CLOEXEC": ValueOf(syscall.MSG_CMSG_CLOEXEC), + "MSG_COMPAT": ValueOf(syscall.MSG_COMPAT), + "MSG_CTRUNC": ValueOf(syscall.MSG_CTRUNC), + "MSG_DONTROUTE": ValueOf(syscall.MSG_DONTROUTE), + "MSG_DONTWAIT": ValueOf(syscall.MSG_DONTWAIT), + "MSG_EOF": ValueOf(syscall.MSG_EOF), + "MSG_EOR": ValueOf(syscall.MSG_EOR), + "MSG_NBIO": ValueOf(syscall.MSG_NBIO), + "MSG_NOSIGNAL": ValueOf(syscall.MSG_NOSIGNAL), + "MSG_NOTIFICATION": ValueOf(syscall.MSG_NOTIFICATION), + "MSG_OOB": ValueOf(syscall.MSG_OOB), + "MSG_PEEK": ValueOf(syscall.MSG_PEEK), + "MSG_TRUNC": ValueOf(syscall.MSG_TRUNC), + "MSG_WAITALL": ValueOf(syscall.MSG_WAITALL), + "MS_ASYNC": ValueOf(syscall.MS_ASYNC), + "MS_INVALIDATE": ValueOf(syscall.MS_INVALIDATE), + "MS_SYNC": ValueOf(syscall.MS_SYNC), + "Mkdir": ValueOf(syscall.Mkdir), + "Mkfifo": ValueOf(syscall.Mkfifo), + "Mknod": ValueOf(syscall.Mknod), + "Mmap": ValueOf(syscall.Mmap), + "Munmap": ValueOf(syscall.Munmap), + "NAME_MAX": ValueOf(syscall.NAME_MAX), + "NET_RT_DUMP": ValueOf(syscall.NET_RT_DUMP), + "NET_RT_FLAGS": ValueOf(syscall.NET_RT_FLAGS), + "NET_RT_IFLIST": ValueOf(syscall.NET_RT_IFLIST), + "NET_RT_IFLISTL": ValueOf(syscall.NET_RT_IFLISTL), + "NET_RT_IFMALIST": ValueOf(syscall.NET_RT_IFMALIST), + "NET_RT_MAXID": ValueOf(syscall.NET_RT_MAXID), + "NOFLSH": ValueOf(uint32(syscall.NOFLSH)), + "NOTE_ATTRIB": ValueOf(syscall.NOTE_ATTRIB), + "NOTE_CHILD": ValueOf(syscall.NOTE_CHILD), + "NOTE_DELETE": ValueOf(syscall.NOTE_DELETE), + "NOTE_EXEC": ValueOf(syscall.NOTE_EXEC), + "NOTE_EXIT": ValueOf(uint32(syscall.NOTE_EXIT)), + "NOTE_EXTEND": ValueOf(syscall.NOTE_EXTEND), + "NOTE_FFAND": ValueOf(syscall.NOTE_FFAND), + "NOTE_FFCOPY": ValueOf(uint32(syscall.NOTE_FFCOPY)), + "NOTE_FFCTRLMASK": ValueOf(uint32(syscall.NOTE_FFCTRLMASK)), + "NOTE_FFLAGSMASK": ValueOf(syscall.NOTE_FFLAGSMASK), + "NOTE_FFNOP": ValueOf(syscall.NOTE_FFNOP), + "NOTE_FFOR": ValueOf(uint32(syscall.NOTE_FFOR)), + "NOTE_FORK": ValueOf(syscall.NOTE_FORK), + "NOTE_LINK": ValueOf(syscall.NOTE_LINK), + "NOTE_LOWAT": ValueOf(syscall.NOTE_LOWAT), + "NOTE_PCTRLMASK": ValueOf(uint32(syscall.NOTE_PCTRLMASK)), + "NOTE_PDATAMASK": ValueOf(syscall.NOTE_PDATAMASK), + "NOTE_RENAME": ValueOf(syscall.NOTE_RENAME), + "NOTE_REVOKE": ValueOf(syscall.NOTE_REVOKE), + "NOTE_TRACK": ValueOf(syscall.NOTE_TRACK), + "NOTE_TRACKERR": ValueOf(syscall.NOTE_TRACKERR), + "NOTE_TRIGGER": ValueOf(syscall.NOTE_TRIGGER), + "NOTE_WRITE": ValueOf(syscall.NOTE_WRITE), + "Nanosleep": ValueOf(syscall.Nanosleep), + "NsecToTimespec": ValueOf(syscall.NsecToTimespec), + "NsecToTimeval": ValueOf(syscall.NsecToTimeval), + "OCRNL": ValueOf(syscall.OCRNL), + "ONLCR": ValueOf(syscall.ONLCR), + "ONLRET": ValueOf(syscall.ONLRET), + "ONOCR": ValueOf(syscall.ONOCR), + "ONOEOT": ValueOf(syscall.ONOEOT), + "OPOST": ValueOf(syscall.OPOST), + "O_ACCMODE": ValueOf(syscall.O_ACCMODE), + "O_APPEND": ValueOf(syscall.O_APPEND), + "O_ASYNC": ValueOf(syscall.O_ASYNC), + "O_CLOEXEC": ValueOf(syscall.O_CLOEXEC), + "O_CREAT": ValueOf(syscall.O_CREAT), + "O_DIRECT": ValueOf(syscall.O_DIRECT), + "O_DIRECTORY": ValueOf(syscall.O_DIRECTORY), + "O_EXCL": ValueOf(syscall.O_EXCL), + "O_EXEC": ValueOf(syscall.O_EXEC), + "O_EXLOCK": ValueOf(syscall.O_EXLOCK), + "O_FSYNC": ValueOf(syscall.O_FSYNC), + "O_NDELAY": ValueOf(syscall.O_NDELAY), + "O_NOCTTY": ValueOf(syscall.O_NOCTTY), + "O_NOFOLLOW": ValueOf(syscall.O_NOFOLLOW), + "O_NONBLOCK": ValueOf(syscall.O_NONBLOCK), + "O_RDONLY": ValueOf(syscall.O_RDONLY), + "O_RDWR": ValueOf(syscall.O_RDWR), + "O_SHLOCK": ValueOf(syscall.O_SHLOCK), + "O_SYNC": ValueOf(syscall.O_SYNC), + "O_TRUNC": ValueOf(syscall.O_TRUNC), + "O_TTY_INIT": ValueOf(syscall.O_TTY_INIT), + "O_WRONLY": ValueOf(syscall.O_WRONLY), + "Open": ValueOf(syscall.Open), + "PARENB": ValueOf(syscall.PARENB), + "PARMRK": ValueOf(syscall.PARMRK), + "PARODD": ValueOf(syscall.PARODD), + "PENDIN": ValueOf(syscall.PENDIN), + "PRIO_PGRP": ValueOf(syscall.PRIO_PGRP), + "PRIO_PROCESS": ValueOf(syscall.PRIO_PROCESS), + "PRIO_USER": ValueOf(syscall.PRIO_USER), + "PROT_EXEC": ValueOf(syscall.PROT_EXEC), + "PROT_NONE": ValueOf(syscall.PROT_NONE), + "PROT_READ": ValueOf(syscall.PROT_READ), + "PROT_WRITE": ValueOf(syscall.PROT_WRITE), + "PTRACE_CONT": ValueOf(syscall.PTRACE_CONT), + "PTRACE_KILL": ValueOf(syscall.PTRACE_KILL), + "PTRACE_TRACEME": ValueOf(syscall.PTRACE_TRACEME), + "ParseDirent": ValueOf(syscall.ParseDirent), + "ParseRoutingMessage": ValueOf(syscall.ParseRoutingMessage), + "ParseRoutingSockaddr": ValueOf(syscall.ParseRoutingSockaddr), + "ParseSocketControlMessage": ValueOf(syscall.ParseSocketControlMessage), + "ParseUnixRights": ValueOf(syscall.ParseUnixRights), + "Pathconf": ValueOf(syscall.Pathconf), + "Pipe": ValueOf(syscall.Pipe), + "Pread": ValueOf(syscall.Pread), + "Pwrite": ValueOf(syscall.Pwrite), + "RLIMIT_AS": ValueOf(syscall.RLIMIT_AS), + "RLIMIT_CORE": ValueOf(syscall.RLIMIT_CORE), + "RLIMIT_CPU": ValueOf(syscall.RLIMIT_CPU), + "RLIMIT_DATA": ValueOf(syscall.RLIMIT_DATA), + "RLIMIT_FSIZE": ValueOf(syscall.RLIMIT_FSIZE), + "RLIMIT_NOFILE": ValueOf(syscall.RLIMIT_NOFILE), + "RLIMIT_STACK": ValueOf(syscall.RLIMIT_STACK), + "RLIM_INFINITY": ValueOf(int64(syscall.RLIM_INFINITY)), + "RTAX_AUTHOR": ValueOf(syscall.RTAX_AUTHOR), + "RTAX_BRD": ValueOf(syscall.RTAX_BRD), + "RTAX_DST": ValueOf(syscall.RTAX_DST), + "RTAX_GATEWAY": ValueOf(syscall.RTAX_GATEWAY), + "RTAX_GENMASK": ValueOf(syscall.RTAX_GENMASK), + "RTAX_IFA": ValueOf(syscall.RTAX_IFA), + "RTAX_IFP": ValueOf(syscall.RTAX_IFP), + "RTAX_MAX": ValueOf(syscall.RTAX_MAX), + "RTAX_NETMASK": ValueOf(syscall.RTAX_NETMASK), + "RTA_AUTHOR": ValueOf(syscall.RTA_AUTHOR), + "RTA_BRD": ValueOf(syscall.RTA_BRD), + "RTA_DST": ValueOf(syscall.RTA_DST), + "RTA_GATEWAY": ValueOf(syscall.RTA_GATEWAY), + "RTA_GENMASK": ValueOf(syscall.RTA_GENMASK), + "RTA_IFA": ValueOf(syscall.RTA_IFA), + "RTA_IFP": ValueOf(syscall.RTA_IFP), + "RTA_NETMASK": ValueOf(syscall.RTA_NETMASK), + "RTF_BLACKHOLE": ValueOf(syscall.RTF_BLACKHOLE), + "RTF_BROADCAST": ValueOf(syscall.RTF_BROADCAST), + "RTF_DONE": ValueOf(syscall.RTF_DONE), + "RTF_DYNAMIC": ValueOf(syscall.RTF_DYNAMIC), + "RTF_FMASK": ValueOf(syscall.RTF_FMASK), + "RTF_GATEWAY": ValueOf(syscall.RTF_GATEWAY), + "RTF_GWFLAG_COMPAT": ValueOf(uint32(syscall.RTF_GWFLAG_COMPAT)), + "RTF_HOST": ValueOf(syscall.RTF_HOST), + "RTF_LLDATA": ValueOf(syscall.RTF_LLDATA), + "RTF_LLINFO": ValueOf(syscall.RTF_LLINFO), + "RTF_LOCAL": ValueOf(syscall.RTF_LOCAL), + "RTF_MODIFIED": ValueOf(syscall.RTF_MODIFIED), + "RTF_MULTICAST": ValueOf(syscall.RTF_MULTICAST), + "RTF_PINNED": ValueOf(syscall.RTF_PINNED), + "RTF_PRCLONING": ValueOf(syscall.RTF_PRCLONING), + "RTF_PROTO1": ValueOf(syscall.RTF_PROTO1), + "RTF_PROTO2": ValueOf(syscall.RTF_PROTO2), + "RTF_PROTO3": ValueOf(syscall.RTF_PROTO3), + "RTF_REJECT": ValueOf(syscall.RTF_REJECT), + "RTF_RNH_LOCKED": ValueOf(syscall.RTF_RNH_LOCKED), + "RTF_STATIC": ValueOf(syscall.RTF_STATIC), + "RTF_STICKY": ValueOf(syscall.RTF_STICKY), + "RTF_UP": ValueOf(syscall.RTF_UP), + "RTF_XRESOLVE": ValueOf(syscall.RTF_XRESOLVE), + "RTM_ADD": ValueOf(syscall.RTM_ADD), + "RTM_CHANGE": ValueOf(syscall.RTM_CHANGE), + "RTM_DELADDR": ValueOf(syscall.RTM_DELADDR), + "RTM_DELETE": ValueOf(syscall.RTM_DELETE), + "RTM_DELMADDR": ValueOf(syscall.RTM_DELMADDR), + "RTM_GET": ValueOf(syscall.RTM_GET), + "RTM_IEEE80211": ValueOf(syscall.RTM_IEEE80211), + "RTM_IFANNOUNCE": ValueOf(syscall.RTM_IFANNOUNCE), + "RTM_IFINFO": ValueOf(syscall.RTM_IFINFO), + "RTM_LOCK": ValueOf(syscall.RTM_LOCK), + "RTM_LOSING": ValueOf(syscall.RTM_LOSING), + "RTM_MISS": ValueOf(syscall.RTM_MISS), + "RTM_NEWADDR": ValueOf(syscall.RTM_NEWADDR), + "RTM_NEWMADDR": ValueOf(syscall.RTM_NEWMADDR), + "RTM_OLDADD": ValueOf(syscall.RTM_OLDADD), + "RTM_OLDDEL": ValueOf(syscall.RTM_OLDDEL), + "RTM_REDIRECT": ValueOf(syscall.RTM_REDIRECT), + "RTM_RESOLVE": ValueOf(syscall.RTM_RESOLVE), + "RTM_RTTUNIT": ValueOf(syscall.RTM_RTTUNIT), + "RTM_VERSION": ValueOf(syscall.RTM_VERSION), + "RTV_EXPIRE": ValueOf(syscall.RTV_EXPIRE), + "RTV_HOPCOUNT": ValueOf(syscall.RTV_HOPCOUNT), + "RTV_MTU": ValueOf(syscall.RTV_MTU), + "RTV_RPIPE": ValueOf(syscall.RTV_RPIPE), + "RTV_RTT": ValueOf(syscall.RTV_RTT), + "RTV_RTTVAR": ValueOf(syscall.RTV_RTTVAR), + "RTV_SPIPE": ValueOf(syscall.RTV_SPIPE), + "RTV_SSTHRESH": ValueOf(syscall.RTV_SSTHRESH), + "RTV_WEIGHT": ValueOf(syscall.RTV_WEIGHT), + "RT_CACHING_CONTEXT": ValueOf(syscall.RT_CACHING_CONTEXT), + "RT_DEFAULT_FIB": ValueOf(syscall.RT_DEFAULT_FIB), + "RT_NORTREF": ValueOf(syscall.RT_NORTREF), + "RUSAGE_CHILDREN": ValueOf(syscall.RUSAGE_CHILDREN), + "RUSAGE_SELF": ValueOf(syscall.RUSAGE_SELF), + "RUSAGE_THREAD": ValueOf(syscall.RUSAGE_THREAD), + "RawSyscall": ValueOf(syscall.RawSyscall), + "RawSyscall6": ValueOf(syscall.RawSyscall6), + "Read": ValueOf(syscall.Read), + "ReadDirent": ValueOf(syscall.ReadDirent), + "Readlink": ValueOf(syscall.Readlink), + "Recvfrom": ValueOf(syscall.Recvfrom), + "Recvmsg": ValueOf(syscall.Recvmsg), + "Rename": ValueOf(syscall.Rename), + "Revoke": ValueOf(syscall.Revoke), + "Rmdir": ValueOf(syscall.Rmdir), + "RouteRIB": ValueOf(syscall.RouteRIB), + "SCM_BINTIME": ValueOf(syscall.SCM_BINTIME), + "SCM_CREDS": ValueOf(syscall.SCM_CREDS), + "SCM_RIGHTS": ValueOf(syscall.SCM_RIGHTS), + "SCM_TIMESTAMP": ValueOf(syscall.SCM_TIMESTAMP), + "SHUT_RD": ValueOf(syscall.SHUT_RD), + "SHUT_RDWR": ValueOf(syscall.SHUT_RDWR), + "SHUT_WR": ValueOf(syscall.SHUT_WR), + "SIGABRT": ValueOf(syscall.SIGABRT), + "SIGALRM": ValueOf(syscall.SIGALRM), + "SIGBUS": ValueOf(syscall.SIGBUS), + "SIGCHLD": ValueOf(syscall.SIGCHLD), + "SIGCONT": ValueOf(syscall.SIGCONT), + "SIGEMT": ValueOf(syscall.SIGEMT), + "SIGFPE": ValueOf(syscall.SIGFPE), + "SIGHUP": ValueOf(syscall.SIGHUP), + "SIGILL": ValueOf(syscall.SIGILL), + "SIGINFO": ValueOf(syscall.SIGINFO), + "SIGINT": ValueOf(syscall.SIGINT), + "SIGIO": ValueOf(syscall.SIGIO), + "SIGIOT": ValueOf(syscall.SIGIOT), + "SIGKILL": ValueOf(syscall.SIGKILL), + "SIGLIBRT": ValueOf(syscall.SIGLIBRT), + "SIGLWP": ValueOf(syscall.SIGLWP), + "SIGPIPE": ValueOf(syscall.SIGPIPE), + "SIGPROF": ValueOf(syscall.SIGPROF), + "SIGQUIT": ValueOf(syscall.SIGQUIT), + "SIGSEGV": ValueOf(syscall.SIGSEGV), + "SIGSTOP": ValueOf(syscall.SIGSTOP), + "SIGSYS": ValueOf(syscall.SIGSYS), + "SIGTERM": ValueOf(syscall.SIGTERM), + "SIGTHR": ValueOf(syscall.SIGTHR), + "SIGTRAP": ValueOf(syscall.SIGTRAP), + "SIGTSTP": ValueOf(syscall.SIGTSTP), + "SIGTTIN": ValueOf(syscall.SIGTTIN), + "SIGTTOU": ValueOf(syscall.SIGTTOU), + "SIGURG": ValueOf(syscall.SIGURG), + "SIGUSR1": ValueOf(syscall.SIGUSR1), + "SIGUSR2": ValueOf(syscall.SIGUSR2), + "SIGVTALRM": ValueOf(syscall.SIGVTALRM), + "SIGWINCH": ValueOf(syscall.SIGWINCH), + "SIGXCPU": ValueOf(syscall.SIGXCPU), + "SIGXFSZ": ValueOf(syscall.SIGXFSZ), + "SIOCADDMULTI": ValueOf(uint32(syscall.SIOCADDMULTI)), + "SIOCADDRT": ValueOf(uint32(syscall.SIOCADDRT)), + "SIOCAIFADDR": ValueOf(uint32(syscall.SIOCAIFADDR)), + "SIOCAIFGROUP": ValueOf(uint32(syscall.SIOCAIFGROUP)), + "SIOCALIFADDR": ValueOf(uint32(syscall.SIOCALIFADDR)), + "SIOCATMARK": ValueOf(syscall.SIOCATMARK), + "SIOCDELMULTI": ValueOf(uint32(syscall.SIOCDELMULTI)), + "SIOCDELRT": ValueOf(uint32(syscall.SIOCDELRT)), + "SIOCDIFADDR": ValueOf(uint32(syscall.SIOCDIFADDR)), + "SIOCDIFGROUP": ValueOf(uint32(syscall.SIOCDIFGROUP)), + "SIOCDIFPHYADDR": ValueOf(uint32(syscall.SIOCDIFPHYADDR)), + "SIOCDLIFADDR": ValueOf(uint32(syscall.SIOCDLIFADDR)), + "SIOCGDRVSPEC": ValueOf(uint32(syscall.SIOCGDRVSPEC)), + "SIOCGETSGCNT": ValueOf(uint32(syscall.SIOCGETSGCNT)), + "SIOCGETVIFCNT": ValueOf(uint32(syscall.SIOCGETVIFCNT)), + "SIOCGHIWAT": ValueOf(syscall.SIOCGHIWAT), + "SIOCGIFADDR": ValueOf(uint32(syscall.SIOCGIFADDR)), + "SIOCGIFBRDADDR": ValueOf(uint32(syscall.SIOCGIFBRDADDR)), + "SIOCGIFCAP": ValueOf(uint32(syscall.SIOCGIFCAP)), + "SIOCGIFCONF": ValueOf(uint32(syscall.SIOCGIFCONF)), + "SIOCGIFDESCR": ValueOf(uint32(syscall.SIOCGIFDESCR)), + "SIOCGIFDSTADDR": ValueOf(uint32(syscall.SIOCGIFDSTADDR)), + "SIOCGIFFIB": ValueOf(uint32(syscall.SIOCGIFFIB)), + "SIOCGIFFLAGS": ValueOf(uint32(syscall.SIOCGIFFLAGS)), + "SIOCGIFGENERIC": ValueOf(uint32(syscall.SIOCGIFGENERIC)), + "SIOCGIFGMEMB": ValueOf(uint32(syscall.SIOCGIFGMEMB)), + "SIOCGIFGROUP": ValueOf(uint32(syscall.SIOCGIFGROUP)), + "SIOCGIFINDEX": ValueOf(uint32(syscall.SIOCGIFINDEX)), + "SIOCGIFMAC": ValueOf(uint32(syscall.SIOCGIFMAC)), + "SIOCGIFMEDIA": ValueOf(uint32(syscall.SIOCGIFMEDIA)), + "SIOCGIFMETRIC": ValueOf(uint32(syscall.SIOCGIFMETRIC)), + "SIOCGIFMTU": ValueOf(uint32(syscall.SIOCGIFMTU)), + "SIOCGIFNETMASK": ValueOf(uint32(syscall.SIOCGIFNETMASK)), + "SIOCGIFPDSTADDR": ValueOf(uint32(syscall.SIOCGIFPDSTADDR)), + "SIOCGIFPHYS": ValueOf(uint32(syscall.SIOCGIFPHYS)), + "SIOCGIFPSRCADDR": ValueOf(uint32(syscall.SIOCGIFPSRCADDR)), + "SIOCGIFSTATUS": ValueOf(uint32(syscall.SIOCGIFSTATUS)), + "SIOCGLIFADDR": ValueOf(uint32(syscall.SIOCGLIFADDR)), + "SIOCGLIFPHYADDR": ValueOf(uint32(syscall.SIOCGLIFPHYADDR)), + "SIOCGLOWAT": ValueOf(syscall.SIOCGLOWAT), + "SIOCGPGRP": ValueOf(syscall.SIOCGPGRP), + "SIOCGPRIVATE_0": ValueOf(uint32(syscall.SIOCGPRIVATE_0)), + "SIOCGPRIVATE_1": ValueOf(uint32(syscall.SIOCGPRIVATE_1)), + "SIOCIFCREATE": ValueOf(uint32(syscall.SIOCIFCREATE)), + "SIOCIFCREATE2": ValueOf(uint32(syscall.SIOCIFCREATE2)), + "SIOCIFDESTROY": ValueOf(uint32(syscall.SIOCIFDESTROY)), + "SIOCIFGCLONERS": ValueOf(uint32(syscall.SIOCIFGCLONERS)), + "SIOCSDRVSPEC": ValueOf(uint32(syscall.SIOCSDRVSPEC)), + "SIOCSHIWAT": ValueOf(uint32(syscall.SIOCSHIWAT)), + "SIOCSIFADDR": ValueOf(uint32(syscall.SIOCSIFADDR)), + "SIOCSIFBRDADDR": ValueOf(uint32(syscall.SIOCSIFBRDADDR)), + "SIOCSIFCAP": ValueOf(uint32(syscall.SIOCSIFCAP)), + "SIOCSIFDESCR": ValueOf(uint32(syscall.SIOCSIFDESCR)), + "SIOCSIFDSTADDR": ValueOf(uint32(syscall.SIOCSIFDSTADDR)), + "SIOCSIFFIB": ValueOf(uint32(syscall.SIOCSIFFIB)), + "SIOCSIFFLAGS": ValueOf(uint32(syscall.SIOCSIFFLAGS)), + "SIOCSIFGENERIC": ValueOf(uint32(syscall.SIOCSIFGENERIC)), + "SIOCSIFLLADDR": ValueOf(uint32(syscall.SIOCSIFLLADDR)), + "SIOCSIFMAC": ValueOf(uint32(syscall.SIOCSIFMAC)), + "SIOCSIFMEDIA": ValueOf(uint32(syscall.SIOCSIFMEDIA)), + "SIOCSIFMETRIC": ValueOf(uint32(syscall.SIOCSIFMETRIC)), + "SIOCSIFMTU": ValueOf(uint32(syscall.SIOCSIFMTU)), + "SIOCSIFNAME": ValueOf(uint32(syscall.SIOCSIFNAME)), + "SIOCSIFNETMASK": ValueOf(uint32(syscall.SIOCSIFNETMASK)), + "SIOCSIFPHYADDR": ValueOf(uint32(syscall.SIOCSIFPHYADDR)), + "SIOCSIFPHYS": ValueOf(uint32(syscall.SIOCSIFPHYS)), + "SIOCSIFRVNET": ValueOf(uint32(syscall.SIOCSIFRVNET)), + "SIOCSIFVNET": ValueOf(uint32(syscall.SIOCSIFVNET)), + "SIOCSLIFPHYADDR": ValueOf(uint32(syscall.SIOCSLIFPHYADDR)), + "SIOCSLOWAT": ValueOf(uint32(syscall.SIOCSLOWAT)), + "SIOCSPGRP": ValueOf(uint32(syscall.SIOCSPGRP)), + "SOCK_CLOEXEC": ValueOf(syscall.SOCK_CLOEXEC), + "SOCK_DGRAM": ValueOf(syscall.SOCK_DGRAM), + "SOCK_MAXADDRLEN": ValueOf(syscall.SOCK_MAXADDRLEN), + "SOCK_NONBLOCK": ValueOf(syscall.SOCK_NONBLOCK), + "SOCK_RAW": ValueOf(syscall.SOCK_RAW), + "SOCK_RDM": ValueOf(syscall.SOCK_RDM), + "SOCK_SEQPACKET": ValueOf(syscall.SOCK_SEQPACKET), + "SOCK_STREAM": ValueOf(syscall.SOCK_STREAM), + "SOL_SOCKET": ValueOf(syscall.SOL_SOCKET), + "SOMAXCONN": ValueOf(syscall.SOMAXCONN), + "SO_ACCEPTCONN": ValueOf(syscall.SO_ACCEPTCONN), + "SO_ACCEPTFILTER": ValueOf(syscall.SO_ACCEPTFILTER), + "SO_BINTIME": ValueOf(syscall.SO_BINTIME), + "SO_BROADCAST": ValueOf(syscall.SO_BROADCAST), + "SO_DEBUG": ValueOf(syscall.SO_DEBUG), + "SO_DONTROUTE": ValueOf(syscall.SO_DONTROUTE), + "SO_ERROR": ValueOf(syscall.SO_ERROR), + "SO_KEEPALIVE": ValueOf(syscall.SO_KEEPALIVE), + "SO_LABEL": ValueOf(syscall.SO_LABEL), + "SO_LINGER": ValueOf(syscall.SO_LINGER), + "SO_LISTENINCQLEN": ValueOf(syscall.SO_LISTENINCQLEN), + "SO_LISTENQLEN": ValueOf(syscall.SO_LISTENQLEN), + "SO_LISTENQLIMIT": ValueOf(syscall.SO_LISTENQLIMIT), + "SO_NOSIGPIPE": ValueOf(syscall.SO_NOSIGPIPE), + "SO_NO_DDP": ValueOf(syscall.SO_NO_DDP), + "SO_NO_OFFLOAD": ValueOf(syscall.SO_NO_OFFLOAD), + "SO_OOBINLINE": ValueOf(syscall.SO_OOBINLINE), + "SO_PEERLABEL": ValueOf(syscall.SO_PEERLABEL), + "SO_PROTOCOL": ValueOf(syscall.SO_PROTOCOL), + "SO_PROTOTYPE": ValueOf(syscall.SO_PROTOTYPE), + "SO_RCVBUF": ValueOf(syscall.SO_RCVBUF), + "SO_RCVLOWAT": ValueOf(syscall.SO_RCVLOWAT), + "SO_RCVTIMEO": ValueOf(syscall.SO_RCVTIMEO), + "SO_REUSEADDR": ValueOf(syscall.SO_REUSEADDR), + "SO_REUSEPORT": ValueOf(syscall.SO_REUSEPORT), + "SO_SETFIB": ValueOf(syscall.SO_SETFIB), + "SO_SNDBUF": ValueOf(syscall.SO_SNDBUF), + "SO_SNDLOWAT": ValueOf(syscall.SO_SNDLOWAT), + "SO_SNDTIMEO": ValueOf(syscall.SO_SNDTIMEO), + "SO_TIMESTAMP": ValueOf(syscall.SO_TIMESTAMP), + "SO_TYPE": ValueOf(syscall.SO_TYPE), + "SO_USELOOPBACK": ValueOf(syscall.SO_USELOOPBACK), + "SO_USER_COOKIE": ValueOf(syscall.SO_USER_COOKIE), + "SO_VENDOR": ValueOf(uint32(syscall.SO_VENDOR)), + "SYS_ABORT2": ValueOf(syscall.SYS_ABORT2), + "SYS_ACCEPT": ValueOf(syscall.SYS_ACCEPT), + "SYS_ACCEPT4": ValueOf(syscall.SYS_ACCEPT4), + "SYS_ACCESS": ValueOf(syscall.SYS_ACCESS), + "SYS_ACCT": ValueOf(syscall.SYS_ACCT), + "SYS_ADJTIME": ValueOf(syscall.SYS_ADJTIME), + "SYS_AUDIT": ValueOf(syscall.SYS_AUDIT), + "SYS_AUDITCTL": ValueOf(syscall.SYS_AUDITCTL), + "SYS_AUDITON": ValueOf(syscall.SYS_AUDITON), + "SYS_BIND": ValueOf(syscall.SYS_BIND), + "SYS_BINDAT": ValueOf(syscall.SYS_BINDAT), + "SYS_CAP_ENTER": ValueOf(syscall.SYS_CAP_ENTER), + "SYS_CAP_GETMODE": ValueOf(syscall.SYS_CAP_GETMODE), + "SYS_CAP_GETRIGHTS": ValueOf(syscall.SYS_CAP_GETRIGHTS), + "SYS_CAP_NEW": ValueOf(syscall.SYS_CAP_NEW), + "SYS_CHDIR": ValueOf(syscall.SYS_CHDIR), + "SYS_CHFLAGS": ValueOf(syscall.SYS_CHFLAGS), + "SYS_CHFLAGSAT": ValueOf(syscall.SYS_CHFLAGSAT), + "SYS_CHMOD": ValueOf(syscall.SYS_CHMOD), + "SYS_CHOWN": ValueOf(syscall.SYS_CHOWN), + "SYS_CHROOT": ValueOf(syscall.SYS_CHROOT), + "SYS_CLOCK_GETCPUCLOCKID2": ValueOf(syscall.SYS_CLOCK_GETCPUCLOCKID2), + "SYS_CLOCK_GETRES": ValueOf(syscall.SYS_CLOCK_GETRES), + "SYS_CLOCK_GETTIME": ValueOf(syscall.SYS_CLOCK_GETTIME), + "SYS_CLOCK_SETTIME": ValueOf(syscall.SYS_CLOCK_SETTIME), + "SYS_CLOSE": ValueOf(syscall.SYS_CLOSE), + "SYS_CLOSEFROM": ValueOf(syscall.SYS_CLOSEFROM), + "SYS_CONNECT": ValueOf(syscall.SYS_CONNECT), + "SYS_CONNECTAT": ValueOf(syscall.SYS_CONNECTAT), + "SYS_CPUSET": ValueOf(syscall.SYS_CPUSET), + "SYS_CPUSET_GETAFFINITY": ValueOf(syscall.SYS_CPUSET_GETAFFINITY), + "SYS_CPUSET_GETID": ValueOf(syscall.SYS_CPUSET_GETID), + "SYS_CPUSET_SETAFFINITY": ValueOf(syscall.SYS_CPUSET_SETAFFINITY), + "SYS_CPUSET_SETID": ValueOf(syscall.SYS_CPUSET_SETID), + "SYS_DUP": ValueOf(syscall.SYS_DUP), + "SYS_DUP2": ValueOf(syscall.SYS_DUP2), + "SYS_EACCESS": ValueOf(syscall.SYS_EACCESS), + "SYS_EXECVE": ValueOf(syscall.SYS_EXECVE), + "SYS_EXIT": ValueOf(syscall.SYS_EXIT), + "SYS_EXTATTRCTL": ValueOf(syscall.SYS_EXTATTRCTL), + "SYS_EXTATTR_DELETE_FD": ValueOf(syscall.SYS_EXTATTR_DELETE_FD), + "SYS_EXTATTR_DELETE_FILE": ValueOf(syscall.SYS_EXTATTR_DELETE_FILE), + "SYS_EXTATTR_DELETE_LINK": ValueOf(syscall.SYS_EXTATTR_DELETE_LINK), + "SYS_EXTATTR_GET_FD": ValueOf(syscall.SYS_EXTATTR_GET_FD), + "SYS_EXTATTR_GET_FILE": ValueOf(syscall.SYS_EXTATTR_GET_FILE), + "SYS_EXTATTR_GET_LINK": ValueOf(syscall.SYS_EXTATTR_GET_LINK), + "SYS_EXTATTR_LIST_FD": ValueOf(syscall.SYS_EXTATTR_LIST_FD), + "SYS_EXTATTR_LIST_FILE": ValueOf(syscall.SYS_EXTATTR_LIST_FILE), + "SYS_EXTATTR_LIST_LINK": ValueOf(syscall.SYS_EXTATTR_LIST_LINK), + "SYS_EXTATTR_SET_FD": ValueOf(syscall.SYS_EXTATTR_SET_FD), + "SYS_EXTATTR_SET_FILE": ValueOf(syscall.SYS_EXTATTR_SET_FILE), + "SYS_EXTATTR_SET_LINK": ValueOf(syscall.SYS_EXTATTR_SET_LINK), + "SYS_FACCESSAT": ValueOf(syscall.SYS_FACCESSAT), + "SYS_FCHDIR": ValueOf(syscall.SYS_FCHDIR), + "SYS_FCHFLAGS": ValueOf(syscall.SYS_FCHFLAGS), + "SYS_FCHMOD": ValueOf(syscall.SYS_FCHMOD), + "SYS_FCHMODAT": ValueOf(syscall.SYS_FCHMODAT), + "SYS_FCHOWN": ValueOf(syscall.SYS_FCHOWN), + "SYS_FCHOWNAT": ValueOf(syscall.SYS_FCHOWNAT), + "SYS_FCNTL": ValueOf(syscall.SYS_FCNTL), + "SYS_FEXECVE": ValueOf(syscall.SYS_FEXECVE), + "SYS_FFCLOCK_GETCOUNTER": ValueOf(syscall.SYS_FFCLOCK_GETCOUNTER), + "SYS_FFCLOCK_GETESTIMATE": ValueOf(syscall.SYS_FFCLOCK_GETESTIMATE), + "SYS_FFCLOCK_SETESTIMATE": ValueOf(syscall.SYS_FFCLOCK_SETESTIMATE), + "SYS_FHOPEN": ValueOf(syscall.SYS_FHOPEN), + "SYS_FHSTAT": ValueOf(syscall.SYS_FHSTAT), + "SYS_FHSTATFS": ValueOf(syscall.SYS_FHSTATFS), + "SYS_FLOCK": ValueOf(syscall.SYS_FLOCK), + "SYS_FORK": ValueOf(syscall.SYS_FORK), + "SYS_FPATHCONF": ValueOf(syscall.SYS_FPATHCONF), + "SYS_FREEBSD6_FTRUNCATE": ValueOf(syscall.SYS_FREEBSD6_FTRUNCATE), + "SYS_FREEBSD6_LSEEK": ValueOf(syscall.SYS_FREEBSD6_LSEEK), + "SYS_FREEBSD6_MMAP": ValueOf(syscall.SYS_FREEBSD6_MMAP), + "SYS_FREEBSD6_PREAD": ValueOf(syscall.SYS_FREEBSD6_PREAD), + "SYS_FREEBSD6_PWRITE": ValueOf(syscall.SYS_FREEBSD6_PWRITE), + "SYS_FREEBSD6_TRUNCATE": ValueOf(syscall.SYS_FREEBSD6_TRUNCATE), + "SYS_FSTAT": ValueOf(syscall.SYS_FSTAT), + "SYS_FSTATAT": ValueOf(syscall.SYS_FSTATAT), + "SYS_FSTATFS": ValueOf(syscall.SYS_FSTATFS), + "SYS_FSYNC": ValueOf(syscall.SYS_FSYNC), + "SYS_FTRUNCATE": ValueOf(syscall.SYS_FTRUNCATE), + "SYS_FUTIMES": ValueOf(syscall.SYS_FUTIMES), + "SYS_FUTIMESAT": ValueOf(syscall.SYS_FUTIMESAT), + "SYS_GETAUDIT": ValueOf(syscall.SYS_GETAUDIT), + "SYS_GETAUDIT_ADDR": ValueOf(syscall.SYS_GETAUDIT_ADDR), + "SYS_GETAUID": ValueOf(syscall.SYS_GETAUID), + "SYS_GETCONTEXT": ValueOf(syscall.SYS_GETCONTEXT), + "SYS_GETDENTS": ValueOf(syscall.SYS_GETDENTS), + "SYS_GETDIRENTRIES": ValueOf(syscall.SYS_GETDIRENTRIES), + "SYS_GETDTABLESIZE": ValueOf(syscall.SYS_GETDTABLESIZE), + "SYS_GETEGID": ValueOf(syscall.SYS_GETEGID), + "SYS_GETEUID": ValueOf(syscall.SYS_GETEUID), + "SYS_GETFH": ValueOf(syscall.SYS_GETFH), + "SYS_GETFSSTAT": ValueOf(syscall.SYS_GETFSSTAT), + "SYS_GETGID": ValueOf(syscall.SYS_GETGID), + "SYS_GETGROUPS": ValueOf(syscall.SYS_GETGROUPS), + "SYS_GETITIMER": ValueOf(syscall.SYS_GETITIMER), + "SYS_GETLOGIN": ValueOf(syscall.SYS_GETLOGIN), + "SYS_GETLOGINCLASS": ValueOf(syscall.SYS_GETLOGINCLASS), + "SYS_GETPEERNAME": ValueOf(syscall.SYS_GETPEERNAME), + "SYS_GETPGID": ValueOf(syscall.SYS_GETPGID), + "SYS_GETPGRP": ValueOf(syscall.SYS_GETPGRP), + "SYS_GETPID": ValueOf(syscall.SYS_GETPID), + "SYS_GETPPID": ValueOf(syscall.SYS_GETPPID), + "SYS_GETPRIORITY": ValueOf(syscall.SYS_GETPRIORITY), + "SYS_GETRESGID": ValueOf(syscall.SYS_GETRESGID), + "SYS_GETRESUID": ValueOf(syscall.SYS_GETRESUID), + "SYS_GETRLIMIT": ValueOf(syscall.SYS_GETRLIMIT), + "SYS_GETRUSAGE": ValueOf(syscall.SYS_GETRUSAGE), + "SYS_GETSID": ValueOf(syscall.SYS_GETSID), + "SYS_GETSOCKNAME": ValueOf(syscall.SYS_GETSOCKNAME), + "SYS_GETSOCKOPT": ValueOf(syscall.SYS_GETSOCKOPT), + "SYS_GETTIMEOFDAY": ValueOf(syscall.SYS_GETTIMEOFDAY), + "SYS_GETUID": ValueOf(syscall.SYS_GETUID), + "SYS_IOCTL": ValueOf(syscall.SYS_IOCTL), + "SYS_ISSETUGID": ValueOf(syscall.SYS_ISSETUGID), + "SYS_JAIL": ValueOf(syscall.SYS_JAIL), + "SYS_JAIL_ATTACH": ValueOf(syscall.SYS_JAIL_ATTACH), + "SYS_JAIL_GET": ValueOf(syscall.SYS_JAIL_GET), + "SYS_JAIL_REMOVE": ValueOf(syscall.SYS_JAIL_REMOVE), + "SYS_JAIL_SET": ValueOf(syscall.SYS_JAIL_SET), + "SYS_KENV": ValueOf(syscall.SYS_KENV), + "SYS_KEVENT": ValueOf(syscall.SYS_KEVENT), + "SYS_KILL": ValueOf(syscall.SYS_KILL), + "SYS_KLDFIND": ValueOf(syscall.SYS_KLDFIND), + "SYS_KLDFIRSTMOD": ValueOf(syscall.SYS_KLDFIRSTMOD), + "SYS_KLDLOAD": ValueOf(syscall.SYS_KLDLOAD), + "SYS_KLDNEXT": ValueOf(syscall.SYS_KLDNEXT), + "SYS_KLDSTAT": ValueOf(syscall.SYS_KLDSTAT), + "SYS_KLDSYM": ValueOf(syscall.SYS_KLDSYM), + "SYS_KLDUNLOAD": ValueOf(syscall.SYS_KLDUNLOAD), + "SYS_KLDUNLOADF": ValueOf(syscall.SYS_KLDUNLOADF), + "SYS_KQUEUE": ValueOf(syscall.SYS_KQUEUE), + "SYS_KTIMER_CREATE": ValueOf(syscall.SYS_KTIMER_CREATE), + "SYS_KTIMER_DELETE": ValueOf(syscall.SYS_KTIMER_DELETE), + "SYS_KTIMER_GETOVERRUN": ValueOf(syscall.SYS_KTIMER_GETOVERRUN), + "SYS_KTIMER_GETTIME": ValueOf(syscall.SYS_KTIMER_GETTIME), + "SYS_KTIMER_SETTIME": ValueOf(syscall.SYS_KTIMER_SETTIME), + "SYS_KTRACE": ValueOf(syscall.SYS_KTRACE), + "SYS_LCHFLAGS": ValueOf(syscall.SYS_LCHFLAGS), + "SYS_LCHMOD": ValueOf(syscall.SYS_LCHMOD), + "SYS_LCHOWN": ValueOf(syscall.SYS_LCHOWN), + "SYS_LGETFH": ValueOf(syscall.SYS_LGETFH), + "SYS_LINK": ValueOf(syscall.SYS_LINK), + "SYS_LINKAT": ValueOf(syscall.SYS_LINKAT), + "SYS_LISTEN": ValueOf(syscall.SYS_LISTEN), + "SYS_LPATHCONF": ValueOf(syscall.SYS_LPATHCONF), + "SYS_LSEEK": ValueOf(syscall.SYS_LSEEK), + "SYS_LSTAT": ValueOf(syscall.SYS_LSTAT), + "SYS_LUTIMES": ValueOf(syscall.SYS_LUTIMES), + "SYS_MAC_SYSCALL": ValueOf(syscall.SYS_MAC_SYSCALL), + "SYS_MADVISE": ValueOf(syscall.SYS_MADVISE), + "SYS_MINCORE": ValueOf(syscall.SYS_MINCORE), + "SYS_MINHERIT": ValueOf(syscall.SYS_MINHERIT), + "SYS_MKDIR": ValueOf(syscall.SYS_MKDIR), + "SYS_MKDIRAT": ValueOf(syscall.SYS_MKDIRAT), + "SYS_MKFIFO": ValueOf(syscall.SYS_MKFIFO), + "SYS_MKFIFOAT": ValueOf(syscall.SYS_MKFIFOAT), + "SYS_MKNOD": ValueOf(syscall.SYS_MKNOD), + "SYS_MKNODAT": ValueOf(syscall.SYS_MKNODAT), + "SYS_MLOCK": ValueOf(syscall.SYS_MLOCK), + "SYS_MLOCKALL": ValueOf(syscall.SYS_MLOCKALL), + "SYS_MMAP": ValueOf(syscall.SYS_MMAP), + "SYS_MODFIND": ValueOf(syscall.SYS_MODFIND), + "SYS_MODFNEXT": ValueOf(syscall.SYS_MODFNEXT), + "SYS_MODNEXT": ValueOf(syscall.SYS_MODNEXT), + "SYS_MODSTAT": ValueOf(syscall.SYS_MODSTAT), + "SYS_MOUNT": ValueOf(syscall.SYS_MOUNT), + "SYS_MPROTECT": ValueOf(syscall.SYS_MPROTECT), + "SYS_MSYNC": ValueOf(syscall.SYS_MSYNC), + "SYS_MUNLOCK": ValueOf(syscall.SYS_MUNLOCK), + "SYS_MUNLOCKALL": ValueOf(syscall.SYS_MUNLOCKALL), + "SYS_MUNMAP": ValueOf(syscall.SYS_MUNMAP), + "SYS_NANOSLEEP": ValueOf(syscall.SYS_NANOSLEEP), + "SYS_NFSTAT": ValueOf(syscall.SYS_NFSTAT), + "SYS_NLSTAT": ValueOf(syscall.SYS_NLSTAT), + "SYS_NMOUNT": ValueOf(syscall.SYS_NMOUNT), + "SYS_NSTAT": ValueOf(syscall.SYS_NSTAT), + "SYS_NTP_ADJTIME": ValueOf(syscall.SYS_NTP_ADJTIME), + "SYS_NTP_GETTIME": ValueOf(syscall.SYS_NTP_GETTIME), + "SYS_OBREAK": ValueOf(syscall.SYS_OBREAK), + "SYS_OPEN": ValueOf(syscall.SYS_OPEN), + "SYS_OPENAT": ValueOf(syscall.SYS_OPENAT), + "SYS_OPENBSD_POLL": ValueOf(syscall.SYS_OPENBSD_POLL), + "SYS_OVADVISE": ValueOf(syscall.SYS_OVADVISE), + "SYS_PATHCONF": ValueOf(syscall.SYS_PATHCONF), + "SYS_PDFORK": ValueOf(syscall.SYS_PDFORK), + "SYS_PDGETPID": ValueOf(syscall.SYS_PDGETPID), + "SYS_PDKILL": ValueOf(syscall.SYS_PDKILL), + "SYS_PIPE": ValueOf(syscall.SYS_PIPE), + "SYS_PIPE2": ValueOf(syscall.SYS_PIPE2), + "SYS_POLL": ValueOf(syscall.SYS_POLL), + "SYS_POSIX_FADVISE": ValueOf(syscall.SYS_POSIX_FADVISE), + "SYS_POSIX_FALLOCATE": ValueOf(syscall.SYS_POSIX_FALLOCATE), + "SYS_POSIX_OPENPT": ValueOf(syscall.SYS_POSIX_OPENPT), + "SYS_PREAD": ValueOf(syscall.SYS_PREAD), + "SYS_PREADV": ValueOf(syscall.SYS_PREADV), + "SYS_PROCCTL": ValueOf(syscall.SYS_PROCCTL), + "SYS_PROFIL": ValueOf(syscall.SYS_PROFIL), + "SYS_PSELECT": ValueOf(syscall.SYS_PSELECT), + "SYS_PTRACE": ValueOf(syscall.SYS_PTRACE), + "SYS_PWRITE": ValueOf(syscall.SYS_PWRITE), + "SYS_PWRITEV": ValueOf(syscall.SYS_PWRITEV), + "SYS_QUOTACTL": ValueOf(syscall.SYS_QUOTACTL), + "SYS_RCTL_ADD_RULE": ValueOf(syscall.SYS_RCTL_ADD_RULE), + "SYS_RCTL_GET_LIMITS": ValueOf(syscall.SYS_RCTL_GET_LIMITS), + "SYS_RCTL_GET_RACCT": ValueOf(syscall.SYS_RCTL_GET_RACCT), + "SYS_RCTL_GET_RULES": ValueOf(syscall.SYS_RCTL_GET_RULES), + "SYS_RCTL_REMOVE_RULE": ValueOf(syscall.SYS_RCTL_REMOVE_RULE), + "SYS_READ": ValueOf(syscall.SYS_READ), + "SYS_READLINK": ValueOf(syscall.SYS_READLINK), + "SYS_READLINKAT": ValueOf(syscall.SYS_READLINKAT), + "SYS_READV": ValueOf(syscall.SYS_READV), + "SYS_REBOOT": ValueOf(syscall.SYS_REBOOT), + "SYS_RECVFROM": ValueOf(syscall.SYS_RECVFROM), + "SYS_RECVMSG": ValueOf(syscall.SYS_RECVMSG), + "SYS_RENAME": ValueOf(syscall.SYS_RENAME), + "SYS_RENAMEAT": ValueOf(syscall.SYS_RENAMEAT), + "SYS_REVOKE": ValueOf(syscall.SYS_REVOKE), + "SYS_RFORK": ValueOf(syscall.SYS_RFORK), + "SYS_RMDIR": ValueOf(syscall.SYS_RMDIR), + "SYS_RTPRIO": ValueOf(syscall.SYS_RTPRIO), + "SYS_RTPRIO_THREAD": ValueOf(syscall.SYS_RTPRIO_THREAD), + "SYS_SBRK": ValueOf(syscall.SYS_SBRK), + "SYS_SCHED_GETPARAM": ValueOf(syscall.SYS_SCHED_GETPARAM), + "SYS_SCHED_GETSCHEDULER": ValueOf(syscall.SYS_SCHED_GETSCHEDULER), + "SYS_SCHED_GET_PRIORITY_MAX": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MAX), + "SYS_SCHED_GET_PRIORITY_MIN": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MIN), + "SYS_SCHED_RR_GET_INTERVAL": ValueOf(syscall.SYS_SCHED_RR_GET_INTERVAL), + "SYS_SCHED_SETPARAM": ValueOf(syscall.SYS_SCHED_SETPARAM), + "SYS_SCHED_SETSCHEDULER": ValueOf(syscall.SYS_SCHED_SETSCHEDULER), + "SYS_SCHED_YIELD": ValueOf(syscall.SYS_SCHED_YIELD), + "SYS_SCTP_GENERIC_RECVMSG": ValueOf(syscall.SYS_SCTP_GENERIC_RECVMSG), + "SYS_SCTP_GENERIC_SENDMSG": ValueOf(syscall.SYS_SCTP_GENERIC_SENDMSG), + "SYS_SCTP_GENERIC_SENDMSG_IOV": ValueOf(syscall.SYS_SCTP_GENERIC_SENDMSG_IOV), + "SYS_SCTP_PEELOFF": ValueOf(syscall.SYS_SCTP_PEELOFF), + "SYS_SELECT": ValueOf(syscall.SYS_SELECT), + "SYS_SENDFILE": ValueOf(syscall.SYS_SENDFILE), + "SYS_SENDMSG": ValueOf(syscall.SYS_SENDMSG), + "SYS_SENDTO": ValueOf(syscall.SYS_SENDTO), + "SYS_SETAUDIT": ValueOf(syscall.SYS_SETAUDIT), + "SYS_SETAUDIT_ADDR": ValueOf(syscall.SYS_SETAUDIT_ADDR), + "SYS_SETAUID": ValueOf(syscall.SYS_SETAUID), + "SYS_SETCONTEXT": ValueOf(syscall.SYS_SETCONTEXT), + "SYS_SETEGID": ValueOf(syscall.SYS_SETEGID), + "SYS_SETEUID": ValueOf(syscall.SYS_SETEUID), + "SYS_SETFIB": ValueOf(syscall.SYS_SETFIB), + "SYS_SETGID": ValueOf(syscall.SYS_SETGID), + "SYS_SETGROUPS": ValueOf(syscall.SYS_SETGROUPS), + "SYS_SETITIMER": ValueOf(syscall.SYS_SETITIMER), + "SYS_SETLOGIN": ValueOf(syscall.SYS_SETLOGIN), + "SYS_SETLOGINCLASS": ValueOf(syscall.SYS_SETLOGINCLASS), + "SYS_SETPGID": ValueOf(syscall.SYS_SETPGID), + "SYS_SETPRIORITY": ValueOf(syscall.SYS_SETPRIORITY), + "SYS_SETREGID": ValueOf(syscall.SYS_SETREGID), + "SYS_SETRESGID": ValueOf(syscall.SYS_SETRESGID), + "SYS_SETRESUID": ValueOf(syscall.SYS_SETRESUID), + "SYS_SETREUID": ValueOf(syscall.SYS_SETREUID), + "SYS_SETRLIMIT": ValueOf(syscall.SYS_SETRLIMIT), + "SYS_SETSID": ValueOf(syscall.SYS_SETSID), + "SYS_SETSOCKOPT": ValueOf(syscall.SYS_SETSOCKOPT), + "SYS_SETTIMEOFDAY": ValueOf(syscall.SYS_SETTIMEOFDAY), + "SYS_SETUID": ValueOf(syscall.SYS_SETUID), + "SYS_SHM_OPEN": ValueOf(syscall.SYS_SHM_OPEN), + "SYS_SHM_UNLINK": ValueOf(syscall.SYS_SHM_UNLINK), + "SYS_SHUTDOWN": ValueOf(syscall.SYS_SHUTDOWN), + "SYS_SIGACTION": ValueOf(syscall.SYS_SIGACTION), + "SYS_SIGALTSTACK": ValueOf(syscall.SYS_SIGALTSTACK), + "SYS_SIGPENDING": ValueOf(syscall.SYS_SIGPENDING), + "SYS_SIGPROCMASK": ValueOf(syscall.SYS_SIGPROCMASK), + "SYS_SIGQUEUE": ValueOf(syscall.SYS_SIGQUEUE), + "SYS_SIGRETURN": ValueOf(syscall.SYS_SIGRETURN), + "SYS_SIGSUSPEND": ValueOf(syscall.SYS_SIGSUSPEND), + "SYS_SIGTIMEDWAIT": ValueOf(syscall.SYS_SIGTIMEDWAIT), + "SYS_SIGWAIT": ValueOf(syscall.SYS_SIGWAIT), + "SYS_SIGWAITINFO": ValueOf(syscall.SYS_SIGWAITINFO), + "SYS_SOCKET": ValueOf(syscall.SYS_SOCKET), + "SYS_SOCKETPAIR": ValueOf(syscall.SYS_SOCKETPAIR), + "SYS_SSTK": ValueOf(syscall.SYS_SSTK), + "SYS_STAT": ValueOf(syscall.SYS_STAT), + "SYS_STATFS": ValueOf(syscall.SYS_STATFS), + "SYS_SWAPCONTEXT": ValueOf(syscall.SYS_SWAPCONTEXT), + "SYS_SWAPOFF": ValueOf(syscall.SYS_SWAPOFF), + "SYS_SWAPON": ValueOf(syscall.SYS_SWAPON), + "SYS_SYMLINK": ValueOf(syscall.SYS_SYMLINK), + "SYS_SYMLINKAT": ValueOf(syscall.SYS_SYMLINKAT), + "SYS_SYNC": ValueOf(syscall.SYS_SYNC), + "SYS_SYSARCH": ValueOf(syscall.SYS_SYSARCH), + "SYS_THR_CREATE": ValueOf(syscall.SYS_THR_CREATE), + "SYS_THR_EXIT": ValueOf(syscall.SYS_THR_EXIT), + "SYS_THR_KILL": ValueOf(syscall.SYS_THR_KILL), + "SYS_THR_KILL2": ValueOf(syscall.SYS_THR_KILL2), + "SYS_THR_NEW": ValueOf(syscall.SYS_THR_NEW), + "SYS_THR_SELF": ValueOf(syscall.SYS_THR_SELF), + "SYS_THR_SET_NAME": ValueOf(syscall.SYS_THR_SET_NAME), + "SYS_THR_SUSPEND": ValueOf(syscall.SYS_THR_SUSPEND), + "SYS_THR_WAKE": ValueOf(syscall.SYS_THR_WAKE), + "SYS_TRUNCATE": ValueOf(syscall.SYS_TRUNCATE), + "SYS_UMASK": ValueOf(syscall.SYS_UMASK), + "SYS_UNDELETE": ValueOf(syscall.SYS_UNDELETE), + "SYS_UNLINK": ValueOf(syscall.SYS_UNLINK), + "SYS_UNLINKAT": ValueOf(syscall.SYS_UNLINKAT), + "SYS_UNMOUNT": ValueOf(syscall.SYS_UNMOUNT), + "SYS_UTIMES": ValueOf(syscall.SYS_UTIMES), + "SYS_UTRACE": ValueOf(syscall.SYS_UTRACE), + "SYS_UUIDGEN": ValueOf(syscall.SYS_UUIDGEN), + "SYS_VFORK": ValueOf(syscall.SYS_VFORK), + "SYS_WAIT4": ValueOf(syscall.SYS_WAIT4), + "SYS_WAIT6": ValueOf(syscall.SYS_WAIT6), + "SYS_WRITE": ValueOf(syscall.SYS_WRITE), + "SYS_WRITEV": ValueOf(syscall.SYS_WRITEV), + "SYS_YIELD": ValueOf(syscall.SYS_YIELD), + "SYS__UMTX_LOCK": ValueOf(syscall.SYS__UMTX_LOCK), + "SYS__UMTX_OP": ValueOf(syscall.SYS__UMTX_OP), + "SYS__UMTX_UNLOCK": ValueOf(syscall.SYS__UMTX_UNLOCK), + "SYS___ACL_ACLCHECK_FD": ValueOf(syscall.SYS___ACL_ACLCHECK_FD), + "SYS___ACL_ACLCHECK_FILE": ValueOf(syscall.SYS___ACL_ACLCHECK_FILE), + "SYS___ACL_ACLCHECK_LINK": ValueOf(syscall.SYS___ACL_ACLCHECK_LINK), + "SYS___ACL_DELETE_FD": ValueOf(syscall.SYS___ACL_DELETE_FD), + "SYS___ACL_DELETE_FILE": ValueOf(syscall.SYS___ACL_DELETE_FILE), + "SYS___ACL_DELETE_LINK": ValueOf(syscall.SYS___ACL_DELETE_LINK), + "SYS___ACL_GET_FD": ValueOf(syscall.SYS___ACL_GET_FD), + "SYS___ACL_GET_FILE": ValueOf(syscall.SYS___ACL_GET_FILE), + "SYS___ACL_GET_LINK": ValueOf(syscall.SYS___ACL_GET_LINK), + "SYS___ACL_SET_FD": ValueOf(syscall.SYS___ACL_SET_FD), + "SYS___ACL_SET_FILE": ValueOf(syscall.SYS___ACL_SET_FILE), + "SYS___ACL_SET_LINK": ValueOf(syscall.SYS___ACL_SET_LINK), + "SYS___GETCWD": ValueOf(syscall.SYS___GETCWD), + "SYS___MAC_EXECVE": ValueOf(syscall.SYS___MAC_EXECVE), + "SYS___MAC_GET_FD": ValueOf(syscall.SYS___MAC_GET_FD), + "SYS___MAC_GET_FILE": ValueOf(syscall.SYS___MAC_GET_FILE), + "SYS___MAC_GET_LINK": ValueOf(syscall.SYS___MAC_GET_LINK), + "SYS___MAC_GET_PID": ValueOf(syscall.SYS___MAC_GET_PID), + "SYS___MAC_GET_PROC": ValueOf(syscall.SYS___MAC_GET_PROC), + "SYS___MAC_SET_FD": ValueOf(syscall.SYS___MAC_SET_FD), + "SYS___MAC_SET_FILE": ValueOf(syscall.SYS___MAC_SET_FILE), + "SYS___MAC_SET_LINK": ValueOf(syscall.SYS___MAC_SET_LINK), + "SYS___MAC_SET_PROC": ValueOf(syscall.SYS___MAC_SET_PROC), + "SYS___SETUGID": ValueOf(syscall.SYS___SETUGID), + "SYS___SYSCTL": ValueOf(syscall.SYS___SYSCTL), + "S_IFBLK": ValueOf(syscall.S_IFBLK), + "S_IFCHR": ValueOf(syscall.S_IFCHR), + "S_IFDIR": ValueOf(syscall.S_IFDIR), + "S_IFIFO": ValueOf(syscall.S_IFIFO), + "S_IFLNK": ValueOf(syscall.S_IFLNK), + "S_IFMT": ValueOf(syscall.S_IFMT), + "S_IFREG": ValueOf(syscall.S_IFREG), + "S_IFSOCK": ValueOf(syscall.S_IFSOCK), + "S_IRUSR": ValueOf(syscall.S_IRUSR), + "S_ISGID": ValueOf(syscall.S_ISGID), + "S_ISUID": ValueOf(syscall.S_ISUID), + "S_ISVTX": ValueOf(syscall.S_ISVTX), + "S_IWUSR": ValueOf(syscall.S_IWUSR), + "S_IXUSR": ValueOf(syscall.S_IXUSR), + "Seek": ValueOf(syscall.Seek), + "Select": ValueOf(syscall.Select), + "Sendfile": ValueOf(syscall.Sendfile), + "Sendmsg": ValueOf(syscall.Sendmsg), + "SendmsgN": ValueOf(syscall.SendmsgN), + "Sendto": ValueOf(syscall.Sendto), + "SetBpf": ValueOf(syscall.SetBpf), + "SetBpfBuflen": ValueOf(syscall.SetBpfBuflen), + "SetBpfDatalink": ValueOf(syscall.SetBpfDatalink), + "SetBpfHeadercmpl": ValueOf(syscall.SetBpfHeadercmpl), + "SetBpfImmediate": ValueOf(syscall.SetBpfImmediate), + "SetBpfInterface": ValueOf(syscall.SetBpfInterface), + "SetBpfPromisc": ValueOf(syscall.SetBpfPromisc), + "SetBpfTimeout": ValueOf(syscall.SetBpfTimeout), + "SetKevent": ValueOf(syscall.SetKevent), + "SetNonblock": ValueOf(syscall.SetNonblock), + "Setegid": ValueOf(syscall.Setegid), + "Setenv": ValueOf(syscall.Setenv), + "Seteuid": ValueOf(syscall.Seteuid), + "Setgid": ValueOf(syscall.Setgid), + "Setgroups": ValueOf(syscall.Setgroups), + "Setlogin": ValueOf(syscall.Setlogin), + "Setpgid": ValueOf(syscall.Setpgid), + "Setpriority": ValueOf(syscall.Setpriority), + "Setregid": ValueOf(syscall.Setregid), + "Setreuid": ValueOf(syscall.Setreuid), + "Setrlimit": ValueOf(syscall.Setrlimit), + "Setsid": ValueOf(syscall.Setsid), + "SetsockoptByte": ValueOf(syscall.SetsockoptByte), + "SetsockoptICMPv6Filter": ValueOf(syscall.SetsockoptICMPv6Filter), + "SetsockoptIPMreq": ValueOf(syscall.SetsockoptIPMreq), + "SetsockoptIPMreqn": ValueOf(syscall.SetsockoptIPMreqn), + "SetsockoptIPv6Mreq": ValueOf(syscall.SetsockoptIPv6Mreq), + "SetsockoptInet4Addr": ValueOf(syscall.SetsockoptInet4Addr), + "SetsockoptInt": ValueOf(syscall.SetsockoptInt), + "SetsockoptLinger": ValueOf(syscall.SetsockoptLinger), + "SetsockoptString": ValueOf(syscall.SetsockoptString), + "SetsockoptTimeval": ValueOf(syscall.SetsockoptTimeval), + "Settimeofday": ValueOf(syscall.Settimeofday), + "Setuid": ValueOf(syscall.Setuid), + "Shutdown": ValueOf(syscall.Shutdown), + "SizeofBpfHdr": ValueOf(syscall.SizeofBpfHdr), + "SizeofBpfInsn": ValueOf(syscall.SizeofBpfInsn), + "SizeofBpfProgram": ValueOf(syscall.SizeofBpfProgram), + "SizeofBpfStat": ValueOf(syscall.SizeofBpfStat), + "SizeofBpfVersion": ValueOf(syscall.SizeofBpfVersion), + "SizeofBpfZbuf": ValueOf(syscall.SizeofBpfZbuf), + "SizeofBpfZbufHeader": ValueOf(syscall.SizeofBpfZbufHeader), + "SizeofCmsghdr": ValueOf(syscall.SizeofCmsghdr), + "SizeofICMPv6Filter": ValueOf(syscall.SizeofICMPv6Filter), + "SizeofIPMreq": ValueOf(syscall.SizeofIPMreq), + "SizeofIPMreqn": ValueOf(syscall.SizeofIPMreqn), + "SizeofIPv6MTUInfo": ValueOf(syscall.SizeofIPv6MTUInfo), + "SizeofIPv6Mreq": ValueOf(syscall.SizeofIPv6Mreq), + "SizeofIfAnnounceMsghdr": ValueOf(syscall.SizeofIfAnnounceMsghdr), + "SizeofIfData": ValueOf(syscall.SizeofIfData), + "SizeofIfMsghdr": ValueOf(syscall.SizeofIfMsghdr), + "SizeofIfaMsghdr": ValueOf(syscall.SizeofIfaMsghdr), + "SizeofIfmaMsghdr": ValueOf(syscall.SizeofIfmaMsghdr), + "SizeofInet6Pktinfo": ValueOf(syscall.SizeofInet6Pktinfo), + "SizeofLinger": ValueOf(syscall.SizeofLinger), + "SizeofMsghdr": ValueOf(syscall.SizeofMsghdr), + "SizeofRtMetrics": ValueOf(syscall.SizeofRtMetrics), + "SizeofRtMsghdr": ValueOf(syscall.SizeofRtMsghdr), + "SizeofSockaddrAny": ValueOf(syscall.SizeofSockaddrAny), + "SizeofSockaddrDatalink": ValueOf(syscall.SizeofSockaddrDatalink), + "SizeofSockaddrInet4": ValueOf(syscall.SizeofSockaddrInet4), + "SizeofSockaddrInet6": ValueOf(syscall.SizeofSockaddrInet6), + "SizeofSockaddrUnix": ValueOf(syscall.SizeofSockaddrUnix), + "SlicePtrFromStrings": ValueOf(syscall.SlicePtrFromStrings), + "Socket": ValueOf(syscall.Socket), + "SocketDisableIPv6": ValueOf(&syscall.SocketDisableIPv6).Elem(), + "Socketpair": ValueOf(syscall.Socketpair), + "StartProcess": ValueOf(syscall.StartProcess), + "Stat": ValueOf(syscall.Stat), + "Statfs": ValueOf(syscall.Statfs), + "Stderr": ValueOf(&syscall.Stderr).Elem(), + "Stdin": ValueOf(&syscall.Stdin).Elem(), + "Stdout": ValueOf(&syscall.Stdout).Elem(), + "StringBytePtr": ValueOf(syscall.StringBytePtr), + "StringByteSlice": ValueOf(syscall.StringByteSlice), + "StringSlicePtr": ValueOf(syscall.StringSlicePtr), + "Symlink": ValueOf(syscall.Symlink), + "Sync": ValueOf(syscall.Sync), + "Syscall": ValueOf(syscall.Syscall), + "Syscall6": ValueOf(syscall.Syscall6), + "Syscall9": ValueOf(syscall.Syscall9), + "Sysctl": ValueOf(syscall.Sysctl), + "SysctlUint32": ValueOf(syscall.SysctlUint32), + "TCIFLUSH": ValueOf(syscall.TCIFLUSH), + "TCIOFLUSH": ValueOf(syscall.TCIOFLUSH), + "TCOFLUSH": ValueOf(syscall.TCOFLUSH), + "TCP_CA_NAME_MAX": ValueOf(syscall.TCP_CA_NAME_MAX), + "TCP_CONGESTION": ValueOf(syscall.TCP_CONGESTION), + "TCP_INFO": ValueOf(syscall.TCP_INFO), + "TCP_KEEPCNT": ValueOf(syscall.TCP_KEEPCNT), + "TCP_KEEPIDLE": ValueOf(syscall.TCP_KEEPIDLE), + "TCP_KEEPINIT": ValueOf(syscall.TCP_KEEPINIT), + "TCP_KEEPINTVL": ValueOf(syscall.TCP_KEEPINTVL), + "TCP_MAXBURST": ValueOf(syscall.TCP_MAXBURST), + "TCP_MAXHLEN": ValueOf(syscall.TCP_MAXHLEN), + "TCP_MAXOLEN": ValueOf(syscall.TCP_MAXOLEN), + "TCP_MAXSEG": ValueOf(syscall.TCP_MAXSEG), + "TCP_MAXWIN": ValueOf(syscall.TCP_MAXWIN), + "TCP_MAX_SACK": ValueOf(syscall.TCP_MAX_SACK), + "TCP_MAX_WINSHIFT": ValueOf(syscall.TCP_MAX_WINSHIFT), + "TCP_MD5SIG": ValueOf(syscall.TCP_MD5SIG), + "TCP_MINMSS": ValueOf(syscall.TCP_MINMSS), + "TCP_MSS": ValueOf(syscall.TCP_MSS), + "TCP_NODELAY": ValueOf(syscall.TCP_NODELAY), + "TCP_NOOPT": ValueOf(syscall.TCP_NOOPT), + "TCP_NOPUSH": ValueOf(syscall.TCP_NOPUSH), + "TCP_VENDOR": ValueOf(uint32(syscall.TCP_VENDOR)), + "TCSAFLUSH": ValueOf(syscall.TCSAFLUSH), + "TIOCCBRK": ValueOf(syscall.TIOCCBRK), + "TIOCCDTR": ValueOf(syscall.TIOCCDTR), + "TIOCCONS": ValueOf(uint32(syscall.TIOCCONS)), + "TIOCDRAIN": ValueOf(syscall.TIOCDRAIN), + "TIOCEXCL": ValueOf(syscall.TIOCEXCL), + "TIOCEXT": ValueOf(uint32(syscall.TIOCEXT)), + "TIOCFLUSH": ValueOf(uint32(syscall.TIOCFLUSH)), + "TIOCGDRAINWAIT": ValueOf(syscall.TIOCGDRAINWAIT), + "TIOCGETA": ValueOf(syscall.TIOCGETA), + "TIOCGETD": ValueOf(syscall.TIOCGETD), + "TIOCGPGRP": ValueOf(syscall.TIOCGPGRP), + "TIOCGPTN": ValueOf(syscall.TIOCGPTN), + "TIOCGSID": ValueOf(syscall.TIOCGSID), + "TIOCGWINSZ": ValueOf(syscall.TIOCGWINSZ), + "TIOCMBIC": ValueOf(uint32(syscall.TIOCMBIC)), + "TIOCMBIS": ValueOf(uint32(syscall.TIOCMBIS)), + "TIOCMGDTRWAIT": ValueOf(syscall.TIOCMGDTRWAIT), + "TIOCMGET": ValueOf(syscall.TIOCMGET), + "TIOCMSDTRWAIT": ValueOf(uint32(syscall.TIOCMSDTRWAIT)), + "TIOCMSET": ValueOf(uint32(syscall.TIOCMSET)), + "TIOCM_CAR": ValueOf(syscall.TIOCM_CAR), + "TIOCM_CD": ValueOf(syscall.TIOCM_CD), + "TIOCM_CTS": ValueOf(syscall.TIOCM_CTS), + "TIOCM_DCD": ValueOf(syscall.TIOCM_DCD), + "TIOCM_DSR": ValueOf(syscall.TIOCM_DSR), + "TIOCM_DTR": ValueOf(syscall.TIOCM_DTR), + "TIOCM_LE": ValueOf(syscall.TIOCM_LE), + "TIOCM_RI": ValueOf(syscall.TIOCM_RI), + "TIOCM_RNG": ValueOf(syscall.TIOCM_RNG), + "TIOCM_RTS": ValueOf(syscall.TIOCM_RTS), + "TIOCM_SR": ValueOf(syscall.TIOCM_SR), + "TIOCM_ST": ValueOf(syscall.TIOCM_ST), + "TIOCNOTTY": ValueOf(syscall.TIOCNOTTY), + "TIOCNXCL": ValueOf(syscall.TIOCNXCL), + "TIOCOUTQ": ValueOf(syscall.TIOCOUTQ), + "TIOCPKT": ValueOf(uint32(syscall.TIOCPKT)), + "TIOCPKT_DATA": ValueOf(syscall.TIOCPKT_DATA), + "TIOCPKT_DOSTOP": ValueOf(syscall.TIOCPKT_DOSTOP), + "TIOCPKT_FLUSHREAD": ValueOf(syscall.TIOCPKT_FLUSHREAD), + "TIOCPKT_FLUSHWRITE": ValueOf(syscall.TIOCPKT_FLUSHWRITE), + "TIOCPKT_IOCTL": ValueOf(syscall.TIOCPKT_IOCTL), + "TIOCPKT_NOSTOP": ValueOf(syscall.TIOCPKT_NOSTOP), + "TIOCPKT_START": ValueOf(syscall.TIOCPKT_START), + "TIOCPKT_STOP": ValueOf(syscall.TIOCPKT_STOP), + "TIOCPTMASTER": ValueOf(syscall.TIOCPTMASTER), + "TIOCSBRK": ValueOf(syscall.TIOCSBRK), + "TIOCSCTTY": ValueOf(syscall.TIOCSCTTY), + "TIOCSDRAINWAIT": ValueOf(uint32(syscall.TIOCSDRAINWAIT)), + "TIOCSDTR": ValueOf(syscall.TIOCSDTR), + "TIOCSETA": ValueOf(uint32(syscall.TIOCSETA)), + "TIOCSETAF": ValueOf(uint32(syscall.TIOCSETAF)), + "TIOCSETAW": ValueOf(uint32(syscall.TIOCSETAW)), + "TIOCSETD": ValueOf(uint32(syscall.TIOCSETD)), + "TIOCSIG": ValueOf(syscall.TIOCSIG), + "TIOCSPGRP": ValueOf(uint32(syscall.TIOCSPGRP)), + "TIOCSTART": ValueOf(syscall.TIOCSTART), + "TIOCSTAT": ValueOf(syscall.TIOCSTAT), + "TIOCSTI": ValueOf(uint32(syscall.TIOCSTI)), + "TIOCSTOP": ValueOf(syscall.TIOCSTOP), + "TIOCSWINSZ": ValueOf(uint32(syscall.TIOCSWINSZ)), + "TIOCTIMESTAMP": ValueOf(syscall.TIOCTIMESTAMP), + "TIOCUCNTL": ValueOf(uint32(syscall.TIOCUCNTL)), + "TOSTOP": ValueOf(syscall.TOSTOP), + "TimespecToNsec": ValueOf(syscall.TimespecToNsec), + "TimevalToNsec": ValueOf(syscall.TimevalToNsec), + "Truncate": ValueOf(syscall.Truncate), + "Umask": ValueOf(syscall.Umask), + "Undelete": ValueOf(syscall.Undelete), + "UnixRights": ValueOf(syscall.UnixRights), + "Unlink": ValueOf(syscall.Unlink), + "Unmount": ValueOf(syscall.Unmount), + "Unsetenv": ValueOf(syscall.Unsetenv), + "Utimes": ValueOf(syscall.Utimes), + "UtimesNano": ValueOf(syscall.UtimesNano), + "VDISCARD": ValueOf(syscall.VDISCARD), + "VDSUSP": ValueOf(syscall.VDSUSP), + "VEOF": ValueOf(syscall.VEOF), + "VEOL": ValueOf(syscall.VEOL), + "VEOL2": ValueOf(syscall.VEOL2), + "VERASE": ValueOf(syscall.VERASE), + "VERASE2": ValueOf(syscall.VERASE2), + "VINTR": ValueOf(syscall.VINTR), + "VKILL": ValueOf(syscall.VKILL), + "VLNEXT": ValueOf(syscall.VLNEXT), + "VMIN": ValueOf(syscall.VMIN), + "VQUIT": ValueOf(syscall.VQUIT), + "VREPRINT": ValueOf(syscall.VREPRINT), + "VSTART": ValueOf(syscall.VSTART), + "VSTATUS": ValueOf(syscall.VSTATUS), + "VSTOP": ValueOf(syscall.VSTOP), + "VSUSP": ValueOf(syscall.VSUSP), + "VTIME": ValueOf(syscall.VTIME), + "VWERASE": ValueOf(syscall.VWERASE), + "WCONTINUED": ValueOf(syscall.WCONTINUED), + "WCOREFLAG": ValueOf(syscall.WCOREFLAG), + "WEXITED": ValueOf(syscall.WEXITED), + "WLINUXCLONE": ValueOf(uint32(syscall.WLINUXCLONE)), + "WNOHANG": ValueOf(syscall.WNOHANG), + "WNOWAIT": ValueOf(syscall.WNOWAIT), + "WSTOPPED": ValueOf(syscall.WSTOPPED), + "WTRAPPED": ValueOf(syscall.WTRAPPED), + "WUNTRACED": ValueOf(syscall.WUNTRACED), + "Wait4": ValueOf(syscall.Wait4), + "Write": ValueOf(syscall.Write), + },Types: map[string]Type{ + "BpfHdr": TypeOf((*syscall.BpfHdr)(nil)).Elem(), + "BpfInsn": TypeOf((*syscall.BpfInsn)(nil)).Elem(), + "BpfProgram": TypeOf((*syscall.BpfProgram)(nil)).Elem(), + "BpfStat": TypeOf((*syscall.BpfStat)(nil)).Elem(), + "BpfVersion": TypeOf((*syscall.BpfVersion)(nil)).Elem(), + "BpfZbuf": TypeOf((*syscall.BpfZbuf)(nil)).Elem(), + "BpfZbufHeader": TypeOf((*syscall.BpfZbufHeader)(nil)).Elem(), + "Cmsghdr": TypeOf((*syscall.Cmsghdr)(nil)).Elem(), + "Credential": TypeOf((*syscall.Credential)(nil)).Elem(), + "Dirent": TypeOf((*syscall.Dirent)(nil)).Elem(), + "Errno": TypeOf((*syscall.Errno)(nil)).Elem(), + "FdSet": TypeOf((*syscall.FdSet)(nil)).Elem(), + "Flock_t": TypeOf((*syscall.Flock_t)(nil)).Elem(), + "Fsid": TypeOf((*syscall.Fsid)(nil)).Elem(), + "ICMPv6Filter": TypeOf((*syscall.ICMPv6Filter)(nil)).Elem(), + "IPMreq": TypeOf((*syscall.IPMreq)(nil)).Elem(), + "IPMreqn": TypeOf((*syscall.IPMreqn)(nil)).Elem(), + "IPv6MTUInfo": TypeOf((*syscall.IPv6MTUInfo)(nil)).Elem(), + "IPv6Mreq": TypeOf((*syscall.IPv6Mreq)(nil)).Elem(), + "IfAnnounceMsghdr": TypeOf((*syscall.IfAnnounceMsghdr)(nil)).Elem(), + "IfData": TypeOf((*syscall.IfData)(nil)).Elem(), + "IfMsghdr": TypeOf((*syscall.IfMsghdr)(nil)).Elem(), + "IfaMsghdr": TypeOf((*syscall.IfaMsghdr)(nil)).Elem(), + "IfmaMsghdr": TypeOf((*syscall.IfmaMsghdr)(nil)).Elem(), + "Inet6Pktinfo": TypeOf((*syscall.Inet6Pktinfo)(nil)).Elem(), + "InterfaceAddrMessage": TypeOf((*syscall.InterfaceAddrMessage)(nil)).Elem(), + "InterfaceAnnounceMessage": TypeOf((*syscall.InterfaceAnnounceMessage)(nil)).Elem(), + "InterfaceMessage": TypeOf((*syscall.InterfaceMessage)(nil)).Elem(), + "InterfaceMulticastAddrMessage": TypeOf((*syscall.InterfaceMulticastAddrMessage)(nil)).Elem(), + "Iovec": TypeOf((*syscall.Iovec)(nil)).Elem(), + "Kevent_t": TypeOf((*syscall.Kevent_t)(nil)).Elem(), + "Linger": TypeOf((*syscall.Linger)(nil)).Elem(), + "Msghdr": TypeOf((*syscall.Msghdr)(nil)).Elem(), + "ProcAttr": TypeOf((*syscall.ProcAttr)(nil)).Elem(), + "RawSockaddr": TypeOf((*syscall.RawSockaddr)(nil)).Elem(), + "RawSockaddrAny": TypeOf((*syscall.RawSockaddrAny)(nil)).Elem(), + "RawSockaddrDatalink": TypeOf((*syscall.RawSockaddrDatalink)(nil)).Elem(), + "RawSockaddrInet4": TypeOf((*syscall.RawSockaddrInet4)(nil)).Elem(), + "RawSockaddrInet6": TypeOf((*syscall.RawSockaddrInet6)(nil)).Elem(), + "RawSockaddrUnix": TypeOf((*syscall.RawSockaddrUnix)(nil)).Elem(), + "Rlimit": TypeOf((*syscall.Rlimit)(nil)).Elem(), + "RouteMessage": TypeOf((*syscall.RouteMessage)(nil)).Elem(), + "RoutingMessage": TypeOf((*syscall.RoutingMessage)(nil)).Elem(), + "RtMetrics": TypeOf((*syscall.RtMetrics)(nil)).Elem(), + "RtMsghdr": TypeOf((*syscall.RtMsghdr)(nil)).Elem(), + "Rusage": TypeOf((*syscall.Rusage)(nil)).Elem(), + "Signal": TypeOf((*syscall.Signal)(nil)).Elem(), + "Sockaddr": TypeOf((*syscall.Sockaddr)(nil)).Elem(), + "SockaddrDatalink": TypeOf((*syscall.SockaddrDatalink)(nil)).Elem(), + "SockaddrInet4": TypeOf((*syscall.SockaddrInet4)(nil)).Elem(), + "SockaddrInet6": TypeOf((*syscall.SockaddrInet6)(nil)).Elem(), + "SockaddrUnix": TypeOf((*syscall.SockaddrUnix)(nil)).Elem(), + "SocketControlMessage": TypeOf((*syscall.SocketControlMessage)(nil)).Elem(), + "Stat_t": TypeOf((*syscall.Stat_t)(nil)).Elem(), + "Statfs_t": TypeOf((*syscall.Statfs_t)(nil)).Elem(), + "SysProcAttr": TypeOf((*syscall.SysProcAttr)(nil)).Elem(), + "Termios": TypeOf((*syscall.Termios)(nil)).Elem(), + "Timespec": TypeOf((*syscall.Timespec)(nil)).Elem(), + "Timeval": TypeOf((*syscall.Timeval)(nil)).Elem(), + "WaitStatus": TypeOf((*syscall.WaitStatus)(nil)).Elem(), + },Untypeds: map[string]string{ + "AF_APPLETALK": "int:16", + "AF_ARP": "int:35", + "AF_ATM": "int:30", + "AF_BLUETOOTH": "int:36", + "AF_CCITT": "int:10", + "AF_CHAOS": "int:5", + "AF_CNT": "int:21", + "AF_COIP": "int:20", + "AF_DATAKIT": "int:9", + "AF_DECnet": "int:12", + "AF_DLI": "int:13", + "AF_E164": "int:26", + "AF_ECMA": "int:8", + "AF_HYLINK": "int:15", + "AF_IEEE80211": "int:37", + "AF_IMPLINK": "int:3", + "AF_INET": "int:2", + "AF_INET6": "int:28", + "AF_INET6_SDP": "int:42", + "AF_INET_SDP": "int:40", + "AF_IPX": "int:23", + "AF_ISDN": "int:26", + "AF_ISO": "int:7", + "AF_LAT": "int:14", + "AF_LINK": "int:18", + "AF_LOCAL": "int:1", + "AF_MAX": "int:42", + "AF_NATM": "int:29", + "AF_NETBIOS": "int:6", + "AF_NETGRAPH": "int:32", + "AF_OSI": "int:7", + "AF_PUP": "int:4", + "AF_ROUTE": "int:17", + "AF_SCLUSTER": "int:34", + "AF_SIP": "int:24", + "AF_SLOW": "int:33", + "AF_SNA": "int:11", + "AF_UNIX": "int:1", + "AF_UNSPEC": "int:0", + "AF_VENDOR00": "int:39", + "AF_VENDOR01": "int:41", + "AF_VENDOR02": "int:43", + "AF_VENDOR03": "int:45", + "AF_VENDOR04": "int:47", + "AF_VENDOR05": "int:49", + "AF_VENDOR06": "int:51", + "AF_VENDOR07": "int:53", + "AF_VENDOR08": "int:55", + "AF_VENDOR09": "int:57", + "AF_VENDOR10": "int:59", + "AF_VENDOR11": "int:61", + "AF_VENDOR12": "int:63", + "AF_VENDOR13": "int:65", + "AF_VENDOR14": "int:67", + "AF_VENDOR15": "int:69", + "AF_VENDOR16": "int:71", + "AF_VENDOR17": "int:73", + "AF_VENDOR18": "int:75", + "AF_VENDOR19": "int:77", + "AF_VENDOR20": "int:79", + "AF_VENDOR21": "int:81", + "AF_VENDOR22": "int:83", + "AF_VENDOR23": "int:85", + "AF_VENDOR24": "int:87", + "AF_VENDOR25": "int:89", + "AF_VENDOR26": "int:91", + "AF_VENDOR27": "int:93", + "AF_VENDOR28": "int:95", + "AF_VENDOR29": "int:97", + "AF_VENDOR30": "int:99", + "AF_VENDOR31": "int:101", + "AF_VENDOR32": "int:103", + "AF_VENDOR33": "int:105", + "AF_VENDOR34": "int:107", + "AF_VENDOR35": "int:109", + "AF_VENDOR36": "int:111", + "AF_VENDOR37": "int:113", + "AF_VENDOR38": "int:115", + "AF_VENDOR39": "int:117", + "AF_VENDOR40": "int:119", + "AF_VENDOR41": "int:121", + "AF_VENDOR42": "int:123", + "AF_VENDOR43": "int:125", + "AF_VENDOR44": "int:127", + "AF_VENDOR45": "int:129", + "AF_VENDOR46": "int:131", + "AF_VENDOR47": "int:133", + "B0": "int:0", + "B110": "int:110", + "B115200": "int:115200", + "B1200": "int:1200", + "B134": "int:134", + "B14400": "int:14400", + "B150": "int:150", + "B1800": "int:1800", + "B19200": "int:19200", + "B200": "int:200", + "B230400": "int:230400", + "B2400": "int:2400", + "B28800": "int:28800", + "B300": "int:300", + "B38400": "int:38400", + "B460800": "int:460800", + "B4800": "int:4800", + "B50": "int:50", + "B57600": "int:57600", + "B600": "int:600", + "B7200": "int:7200", + "B75": "int:75", + "B76800": "int:76800", + "B921600": "int:921600", + "B9600": "int:9600", + "BIOCFEEDBACK": "int:2147762812", + "BIOCFLUSH": "int:536887912", + "BIOCGBLEN": "int:1074020966", + "BIOCGDIRECTION": "int:1074020982", + "BIOCGDLT": "int:1074020970", + "BIOCGDLTLIST": "int:3221766777", + "BIOCGETBUFMODE": "int:1074020989", + "BIOCGETIF": "int:1075855979", + "BIOCGETZMAX": "int:1074020991", + "BIOCGHDRCMPLT": "int:1074020980", + "BIOCGRSIG": "int:1074020978", + "BIOCGRTIMEOUT": "int:1074283118", + "BIOCGSEESENT": "int:1074020982", + "BIOCGSTATS": "int:1074283119", + "BIOCGTSTAMP": "int:1074020995", + "BIOCIMMEDIATE": "int:2147762800", + "BIOCLOCK": "int:536887930", + "BIOCPROMISC": "int:536887913", + "BIOCROTZBUF": "int:1074545280", + "BIOCSBLEN": "int:3221504614", + "BIOCSDIRECTION": "int:2147762807", + "BIOCSDLT": "int:2147762808", + "BIOCSETBUFMODE": "int:2147762814", + "BIOCSETF": "int:2148024935", + "BIOCSETFNR": "int:2148024962", + "BIOCSETIF": "int:2149597804", + "BIOCSETWF": "int:2148024955", + "BIOCSETZBUF": "int:2148287105", + "BIOCSHDRCMPLT": "int:2147762805", + "BIOCSRSIG": "int:2147762803", + "BIOCSRTIMEOUT": "int:2148024941", + "BIOCSSEESENT": "int:2147762807", + "BIOCSTSTAMP": "int:2147762820", + "BIOCVERSION": "int:1074020977", + "BPF_A": "int:16", + "BPF_ABS": "int:32", + "BPF_ADD": "int:0", + "BPF_ALIGNMENT": "int:4", + "BPF_ALU": "int:4", + "BPF_AND": "int:80", + "BPF_B": "int:16", + "BPF_BUFMODE_BUFFER": "int:1", + "BPF_BUFMODE_ZBUF": "int:2", + "BPF_DIV": "int:48", + "BPF_H": "int:8", + "BPF_IMM": "int:0", + "BPF_IND": "int:64", + "BPF_JA": "int:0", + "BPF_JEQ": "int:16", + "BPF_JGE": "int:48", + "BPF_JGT": "int:32", + "BPF_JMP": "int:5", + "BPF_JSET": "int:64", + "BPF_K": "int:0", + "BPF_LD": "int:0", + "BPF_LDX": "int:1", + "BPF_LEN": "int:128", + "BPF_LSH": "int:96", + "BPF_MAJOR_VERSION": "int:1", + "BPF_MAXBUFSIZE": "int:524288", + "BPF_MAXINSNS": "int:512", + "BPF_MEM": "int:96", + "BPF_MEMWORDS": "int:16", + "BPF_MINBUFSIZE": "int:32", + "BPF_MINOR_VERSION": "int:1", + "BPF_MISC": "int:7", + "BPF_MSH": "int:160", + "BPF_MUL": "int:32", + "BPF_NEG": "int:128", + "BPF_OR": "int:64", + "BPF_RELEASE": "int:199606", + "BPF_RET": "int:6", + "BPF_RSH": "int:112", + "BPF_ST": "int:2", + "BPF_STX": "int:3", + "BPF_SUB": "int:16", + "BPF_TAX": "int:0", + "BPF_TXA": "int:128", + "BPF_T_BINTIME": "int:2", + "BPF_T_BINTIME_FAST": "int:258", + "BPF_T_BINTIME_MONOTONIC": "int:514", + "BPF_T_BINTIME_MONOTONIC_FAST": "int:770", + "BPF_T_FAST": "int:256", + "BPF_T_FLAG_MASK": "int:768", + "BPF_T_FORMAT_MASK": "int:3", + "BPF_T_MICROTIME": "int:0", + "BPF_T_MICROTIME_FAST": "int:256", + "BPF_T_MICROTIME_MONOTONIC": "int:512", + "BPF_T_MICROTIME_MONOTONIC_FAST": "int:768", + "BPF_T_MONOTONIC": "int:512", + "BPF_T_MONOTONIC_FAST": "int:768", + "BPF_T_NANOTIME": "int:1", + "BPF_T_NANOTIME_FAST": "int:257", + "BPF_T_NANOTIME_MONOTONIC": "int:513", + "BPF_T_NANOTIME_MONOTONIC_FAST": "int:769", + "BPF_T_NONE": "int:3", + "BPF_T_NORMAL": "int:0", + "BPF_W": "int:0", + "BPF_X": "int:8", + "BRKINT": "int:2", + "CFLUSH": "int:15", + "CLOCAL": "int:32768", + "CREAD": "int:2048", + "CS5": "int:0", + "CS6": "int:256", + "CS7": "int:512", + "CS8": "int:768", + "CSIZE": "int:768", + "CSTART": "int:17", + "CSTATUS": "int:20", + "CSTOP": "int:19", + "CSTOPB": "int:1024", + "CSUSP": "int:26", + "CTL_MAXNAME": "int:24", + "CTL_NET": "int:4", + "DLT_A429": "int:184", + "DLT_A653_ICM": "int:185", + "DLT_AIRONET_HEADER": "int:120", + "DLT_AOS": "int:222", + "DLT_APPLE_IP_OVER_IEEE1394": "int:138", + "DLT_ARCNET": "int:7", + "DLT_ARCNET_LINUX": "int:129", + "DLT_ATM_CLIP": "int:19", + "DLT_ATM_RFC1483": "int:11", + "DLT_AURORA": "int:126", + "DLT_AX25": "int:3", + "DLT_AX25_KISS": "int:202", + "DLT_BACNET_MS_TP": "int:165", + "DLT_BLUETOOTH_HCI_H4": "int:187", + "DLT_BLUETOOTH_HCI_H4_WITH_PHDR": "int:201", + "DLT_CAN20B": "int:190", + "DLT_CAN_SOCKETCAN": "int:227", + "DLT_CHAOS": "int:5", + "DLT_CHDLC": "int:104", + "DLT_CISCO_IOS": "int:118", + "DLT_C_HDLC": "int:104", + "DLT_C_HDLC_WITH_DIR": "int:205", + "DLT_DBUS": "int:231", + "DLT_DECT": "int:221", + "DLT_DOCSIS": "int:143", + "DLT_DVB_CI": "int:235", + "DLT_ECONET": "int:115", + "DLT_EN10MB": "int:1", + "DLT_EN3MB": "int:2", + "DLT_ENC": "int:109", + "DLT_ERF": "int:197", + "DLT_ERF_ETH": "int:175", + "DLT_ERF_POS": "int:176", + "DLT_FC_2": "int:224", + "DLT_FC_2_WITH_FRAME_DELIMS": "int:225", + "DLT_FDDI": "int:10", + "DLT_FLEXRAY": "int:210", + "DLT_FRELAY": "int:107", + "DLT_FRELAY_WITH_DIR": "int:206", + "DLT_GCOM_SERIAL": "int:173", + "DLT_GCOM_T1E1": "int:172", + "DLT_GPF_F": "int:171", + "DLT_GPF_T": "int:170", + "DLT_GPRS_LLC": "int:169", + "DLT_GSMTAP_ABIS": "int:218", + "DLT_GSMTAP_UM": "int:217", + "DLT_HHDLC": "int:121", + "DLT_IBM_SN": "int:146", + "DLT_IBM_SP": "int:145", + "DLT_IEEE802": "int:6", + "DLT_IEEE802_11": "int:105", + "DLT_IEEE802_11_RADIO": "int:127", + "DLT_IEEE802_11_RADIO_AVS": "int:163", + "DLT_IEEE802_15_4": "int:195", + "DLT_IEEE802_15_4_LINUX": "int:191", + "DLT_IEEE802_15_4_NOFCS": "int:230", + "DLT_IEEE802_15_4_NONASK_PHY": "int:215", + "DLT_IEEE802_16_MAC_CPS": "int:188", + "DLT_IEEE802_16_MAC_CPS_RADIO": "int:193", + "DLT_IPFILTER": "int:116", + "DLT_IPMB": "int:199", + "DLT_IPMB_LINUX": "int:209", + "DLT_IPNET": "int:226", + "DLT_IPOIB": "int:242", + "DLT_IPV4": "int:228", + "DLT_IPV6": "int:229", + "DLT_IP_OVER_FC": "int:122", + "DLT_JUNIPER_ATM1": "int:137", + "DLT_JUNIPER_ATM2": "int:135", + "DLT_JUNIPER_ATM_CEMIC": "int:238", + "DLT_JUNIPER_CHDLC": "int:181", + "DLT_JUNIPER_ES": "int:132", + "DLT_JUNIPER_ETHER": "int:178", + "DLT_JUNIPER_FIBRECHANNEL": "int:234", + "DLT_JUNIPER_FRELAY": "int:180", + "DLT_JUNIPER_GGSN": "int:133", + "DLT_JUNIPER_ISM": "int:194", + "DLT_JUNIPER_MFR": "int:134", + "DLT_JUNIPER_MLFR": "int:131", + "DLT_JUNIPER_MLPPP": "int:130", + "DLT_JUNIPER_MONITOR": "int:164", + "DLT_JUNIPER_PIC_PEER": "int:174", + "DLT_JUNIPER_PPP": "int:179", + "DLT_JUNIPER_PPPOE": "int:167", + "DLT_JUNIPER_PPPOE_ATM": "int:168", + "DLT_JUNIPER_SERVICES": "int:136", + "DLT_JUNIPER_SRX_E2E": "int:233", + "DLT_JUNIPER_ST": "int:200", + "DLT_JUNIPER_VP": "int:183", + "DLT_JUNIPER_VS": "int:232", + "DLT_LAPB_WITH_DIR": "int:207", + "DLT_LAPD": "int:203", + "DLT_LIN": "int:212", + "DLT_LINUX_EVDEV": "int:216", + "DLT_LINUX_IRDA": "int:144", + "DLT_LINUX_LAPD": "int:177", + "DLT_LINUX_PPP_WITHDIRECTION": "int:166", + "DLT_LINUX_SLL": "int:113", + "DLT_LOOP": "int:108", + "DLT_LTALK": "int:114", + "DLT_MATCHING_MAX": "int:246", + "DLT_MATCHING_MIN": "int:104", + "DLT_MFR": "int:182", + "DLT_MOST": "int:211", + "DLT_MPEG_2_TS": "int:243", + "DLT_MPLS": "int:219", + "DLT_MTP2": "int:140", + "DLT_MTP2_WITH_PHDR": "int:139", + "DLT_MTP3": "int:141", + "DLT_MUX27010": "int:236", + "DLT_NETANALYZER": "int:240", + "DLT_NETANALYZER_TRANSPARENT": "int:241", + "DLT_NFC_LLCP": "int:245", + "DLT_NFLOG": "int:239", + "DLT_NG40": "int:244", + "DLT_NULL": "int:0", + "DLT_PCI_EXP": "int:125", + "DLT_PFLOG": "int:117", + "DLT_PFSYNC": "int:121", + "DLT_PPI": "int:192", + "DLT_PPP": "int:9", + "DLT_PPP_BSDOS": "int:16", + "DLT_PPP_ETHER": "int:51", + "DLT_PPP_PPPD": "int:166", + "DLT_PPP_SERIAL": "int:50", + "DLT_PPP_WITH_DIR": "int:204", + "DLT_PPP_WITH_DIRECTION": "int:166", + "DLT_PRISM_HEADER": "int:119", + "DLT_PRONET": "int:4", + "DLT_RAIF1": "int:198", + "DLT_RAW": "int:12", + "DLT_RIO": "int:124", + "DLT_SCCP": "int:142", + "DLT_SITA": "int:196", + "DLT_SLIP": "int:8", + "DLT_SLIP_BSDOS": "int:15", + "DLT_STANAG_5066_D_PDU": "int:237", + "DLT_SUNATM": "int:123", + "DLT_SYMANTEC_FIREWALL": "int:99", + "DLT_TZSP": "int:128", + "DLT_USB": "int:186", + "DLT_USB_LINUX": "int:189", + "DLT_USB_LINUX_MMAPPED": "int:220", + "DLT_USER0": "int:147", + "DLT_USER1": "int:148", + "DLT_USER10": "int:157", + "DLT_USER11": "int:158", + "DLT_USER12": "int:159", + "DLT_USER13": "int:160", + "DLT_USER14": "int:161", + "DLT_USER15": "int:162", + "DLT_USER2": "int:149", + "DLT_USER3": "int:150", + "DLT_USER4": "int:151", + "DLT_USER5": "int:152", + "DLT_USER6": "int:153", + "DLT_USER7": "int:154", + "DLT_USER8": "int:155", + "DLT_USER9": "int:156", + "DLT_WIHART": "int:223", + "DLT_X2E_SERIAL": "int:213", + "DLT_X2E_XORAYA": "int:214", + "DT_BLK": "int:6", + "DT_CHR": "int:2", + "DT_DIR": "int:4", + "DT_FIFO": "int:1", + "DT_LNK": "int:10", + "DT_REG": "int:8", + "DT_SOCK": "int:12", + "DT_UNKNOWN": "int:0", + "DT_WHT": "int:14", + "ECHO": "int:8", + "ECHOCTL": "int:64", + "ECHOE": "int:2", + "ECHOK": "int:4", + "ECHOKE": "int:1", + "ECHONL": "int:16", + "ECHOPRT": "int:32", + "EVFILT_AIO": "int:-3", + "EVFILT_FS": "int:-9", + "EVFILT_LIO": "int:-10", + "EVFILT_PROC": "int:-5", + "EVFILT_READ": "int:-1", + "EVFILT_SIGNAL": "int:-6", + "EVFILT_SYSCOUNT": "int:11", + "EVFILT_TIMER": "int:-7", + "EVFILT_USER": "int:-11", + "EVFILT_VNODE": "int:-4", + "EVFILT_WRITE": "int:-2", + "EV_ADD": "int:1", + "EV_CLEAR": "int:32", + "EV_DELETE": "int:2", + "EV_DISABLE": "int:8", + "EV_DISPATCH": "int:128", + "EV_DROP": "int:4096", + "EV_ENABLE": "int:4", + "EV_EOF": "int:32768", + "EV_ERROR": "int:16384", + "EV_FLAG1": "int:8192", + "EV_ONESHOT": "int:16", + "EV_RECEIPT": "int:64", + "EV_SYSFLAGS": "int:61440", + "EXTA": "int:19200", + "EXTB": "int:38400", + "EXTPROC": "int:2048", + "FD_CLOEXEC": "int:1", + "FD_SETSIZE": "int:1024", + "FLUSHO": "int:8388608", + "F_CANCEL": "int:5", + "F_DUP2FD": "int:10", + "F_DUP2FD_CLOEXEC": "int:18", + "F_DUPFD": "int:0", + "F_DUPFD_CLOEXEC": "int:17", + "F_GETFD": "int:1", + "F_GETFL": "int:3", + "F_GETLK": "int:11", + "F_GETOWN": "int:5", + "F_OGETLK": "int:7", + "F_OK": "int:0", + "F_OSETLK": "int:8", + "F_OSETLKW": "int:9", + "F_RDAHEAD": "int:16", + "F_RDLCK": "int:1", + "F_READAHEAD": "int:15", + "F_SETFD": "int:2", + "F_SETFL": "int:4", + "F_SETLK": "int:12", + "F_SETLKW": "int:13", + "F_SETLK_REMOTE": "int:14", + "F_SETOWN": "int:6", + "F_UNLCK": "int:2", + "F_UNLCKSYS": "int:4", + "F_WRLCK": "int:3", + "HUPCL": "int:16384", + "ICANON": "int:256", + "ICMP6_FILTER": "int:18", + "ICRNL": "int:256", + "IEXTEN": "int:1024", + "IFAN_ARRIVAL": "int:0", + "IFAN_DEPARTURE": "int:1", + "IFF_ALLMULTI": "int:512", + "IFF_ALTPHYS": "int:16384", + "IFF_BROADCAST": "int:2", + "IFF_CANTCHANGE": "int:2199410", + "IFF_CANTCONFIG": "int:65536", + "IFF_DEBUG": "int:4", + "IFF_DRV_OACTIVE": "int:1024", + "IFF_DRV_RUNNING": "int:64", + "IFF_DYING": "int:2097152", + "IFF_LINK0": "int:4096", + "IFF_LINK1": "int:8192", + "IFF_LINK2": "int:16384", + "IFF_LOOPBACK": "int:8", + "IFF_MONITOR": "int:262144", + "IFF_MULTICAST": "int:32768", + "IFF_NOARP": "int:128", + "IFF_OACTIVE": "int:1024", + "IFF_POINTOPOINT": "int:16", + "IFF_PPROMISC": "int:131072", + "IFF_PROMISC": "int:256", + "IFF_RENAMING": "int:4194304", + "IFF_RUNNING": "int:64", + "IFF_SIMPLEX": "int:2048", + "IFF_SMART": "int:32", + "IFF_STATICARP": "int:524288", + "IFF_UP": "int:1", + "IFNAMSIZ": "int:16", + "IFT_1822": "int:2", + "IFT_A12MPPSWITCH": "int:130", + "IFT_AAL2": "int:187", + "IFT_AAL5": "int:49", + "IFT_ADSL": "int:94", + "IFT_AFLANE8023": "int:59", + "IFT_AFLANE8025": "int:60", + "IFT_ARAP": "int:88", + "IFT_ARCNET": "int:35", + "IFT_ARCNETPLUS": "int:36", + "IFT_ASYNC": "int:84", + "IFT_ATM": "int:37", + "IFT_ATMDXI": "int:105", + "IFT_ATMFUNI": "int:106", + "IFT_ATMIMA": "int:107", + "IFT_ATMLOGICAL": "int:80", + "IFT_ATMRADIO": "int:189", + "IFT_ATMSUBINTERFACE": "int:134", + "IFT_ATMVCIENDPT": "int:194", + "IFT_ATMVIRTUAL": "int:149", + "IFT_BGPPOLICYACCOUNTING": "int:162", + "IFT_BRIDGE": "int:209", + "IFT_BSC": "int:83", + "IFT_CARP": "int:248", + "IFT_CCTEMUL": "int:61", + "IFT_CEPT": "int:19", + "IFT_CES": "int:133", + "IFT_CHANNEL": "int:70", + "IFT_CNR": "int:85", + "IFT_COFFEE": "int:132", + "IFT_COMPOSITELINK": "int:155", + "IFT_DCN": "int:141", + "IFT_DIGITALPOWERLINE": "int:138", + "IFT_DIGITALWRAPPEROVERHEADCHANNEL": "int:186", + "IFT_DLSW": "int:74", + "IFT_DOCSCABLEDOWNSTREAM": "int:128", + "IFT_DOCSCABLEMACLAYER": "int:127", + "IFT_DOCSCABLEUPSTREAM": "int:129", + "IFT_DS0": "int:81", + "IFT_DS0BUNDLE": "int:82", + "IFT_DS1FDL": "int:170", + "IFT_DS3": "int:30", + "IFT_DTM": "int:140", + "IFT_DVBASILN": "int:172", + "IFT_DVBASIOUT": "int:173", + "IFT_DVBRCCDOWNSTREAM": "int:147", + "IFT_DVBRCCMACLAYER": "int:146", + "IFT_DVBRCCUPSTREAM": "int:148", + "IFT_ENC": "int:244", + "IFT_EON": "int:25", + "IFT_EPLRS": "int:87", + "IFT_ESCON": "int:73", + "IFT_ETHER": "int:6", + "IFT_FAITH": "int:242", + "IFT_FAST": "int:125", + "IFT_FASTETHER": "int:62", + "IFT_FASTETHERFX": "int:69", + "IFT_FDDI": "int:15", + "IFT_FIBRECHANNEL": "int:56", + "IFT_FRAMERELAYINTERCONNECT": "int:58", + "IFT_FRAMERELAYMPI": "int:92", + "IFT_FRDLCIENDPT": "int:193", + "IFT_FRELAY": "int:32", + "IFT_FRELAYDCE": "int:44", + "IFT_FRF16MFRBUNDLE": "int:163", + "IFT_FRFORWARD": "int:158", + "IFT_G703AT2MB": "int:67", + "IFT_G703AT64K": "int:66", + "IFT_GIF": "int:240", + "IFT_GIGABITETHERNET": "int:117", + "IFT_GR303IDT": "int:178", + "IFT_GR303RDT": "int:177", + "IFT_H323GATEKEEPER": "int:164", + "IFT_H323PROXY": "int:165", + "IFT_HDH1822": "int:3", + "IFT_HDLC": "int:118", + "IFT_HDSL2": "int:168", + "IFT_HIPERLAN2": "int:183", + "IFT_HIPPI": "int:47", + "IFT_HIPPIINTERFACE": "int:57", + "IFT_HOSTPAD": "int:90", + "IFT_HSSI": "int:46", + "IFT_HY": "int:14", + "IFT_IBM370PARCHAN": "int:72", + "IFT_IDSL": "int:154", + "IFT_IEEE1394": "int:144", + "IFT_IEEE80211": "int:71", + "IFT_IEEE80212": "int:55", + "IFT_IEEE8023ADLAG": "int:161", + "IFT_IFGSN": "int:145", + "IFT_IMT": "int:190", + "IFT_INFINIBAND": "int:199", + "IFT_INTERLEAVE": "int:124", + "IFT_IP": "int:126", + "IFT_IPFORWARD": "int:142", + "IFT_IPOVERATM": "int:114", + "IFT_IPOVERCDLC": "int:109", + "IFT_IPOVERCLAW": "int:110", + "IFT_IPSWITCH": "int:78", + "IFT_IPXIP": "int:249", + "IFT_ISDN": "int:63", + "IFT_ISDNBASIC": "int:20", + "IFT_ISDNPRIMARY": "int:21", + "IFT_ISDNS": "int:75", + "IFT_ISDNU": "int:76", + "IFT_ISO88022LLC": "int:41", + "IFT_ISO88023": "int:7", + "IFT_ISO88024": "int:8", + "IFT_ISO88025": "int:9", + "IFT_ISO88025CRFPINT": "int:98", + "IFT_ISO88025DTR": "int:86", + "IFT_ISO88025FIBER": "int:115", + "IFT_ISO88026": "int:10", + "IFT_ISUP": "int:179", + "IFT_L2VLAN": "int:135", + "IFT_L3IPVLAN": "int:136", + "IFT_L3IPXVLAN": "int:137", + "IFT_LAPB": "int:16", + "IFT_LAPD": "int:77", + "IFT_LAPF": "int:119", + "IFT_LOCALTALK": "int:42", + "IFT_LOOP": "int:24", + "IFT_MEDIAMAILOVERIP": "int:139", + "IFT_MFSIGLINK": "int:167", + "IFT_MIOX25": "int:38", + "IFT_MODEM": "int:48", + "IFT_MPC": "int:113", + "IFT_MPLS": "int:166", + "IFT_MPLSTUNNEL": "int:150", + "IFT_MSDSL": "int:143", + "IFT_MVL": "int:191", + "IFT_MYRINET": "int:99", + "IFT_NFAS": "int:175", + "IFT_NSIP": "int:27", + "IFT_OPTICALCHANNEL": "int:195", + "IFT_OPTICALTRANSPORT": "int:196", + "IFT_OTHER": "int:1", + "IFT_P10": "int:12", + "IFT_P80": "int:13", + "IFT_PARA": "int:34", + "IFT_PFLOG": "int:246", + "IFT_PFSYNC": "int:247", + "IFT_PLC": "int:174", + "IFT_POS": "int:171", + "IFT_PPP": "int:23", + "IFT_PPPMULTILINKBUNDLE": "int:108", + "IFT_PROPBWAP2MP": "int:184", + "IFT_PROPCNLS": "int:89", + "IFT_PROPDOCSWIRELESSDOWNSTREAM": "int:181", + "IFT_PROPDOCSWIRELESSMACLAYER": "int:180", + "IFT_PROPDOCSWIRELESSUPSTREAM": "int:182", + "IFT_PROPMUX": "int:54", + "IFT_PROPVIRTUAL": "int:53", + "IFT_PROPWIRELESSP2P": "int:157", + "IFT_PTPSERIAL": "int:22", + "IFT_PVC": "int:241", + "IFT_QLLC": "int:68", + "IFT_RADIOMAC": "int:188", + "IFT_RADSL": "int:95", + "IFT_REACHDSL": "int:192", + "IFT_RFC1483": "int:159", + "IFT_RS232": "int:33", + "IFT_RSRB": "int:79", + "IFT_SDLC": "int:17", + "IFT_SDSL": "int:96", + "IFT_SHDSL": "int:169", + "IFT_SIP": "int:31", + "IFT_SLIP": "int:28", + "IFT_SMDSDXI": "int:43", + "IFT_SMDSICIP": "int:52", + "IFT_SONET": "int:39", + "IFT_SONETOVERHEADCHANNEL": "int:185", + "IFT_SONETPATH": "int:50", + "IFT_SONETVT": "int:51", + "IFT_SRP": "int:151", + "IFT_SS7SIGLINK": "int:156", + "IFT_STACKTOSTACK": "int:111", + "IFT_STARLAN": "int:11", + "IFT_STF": "int:215", + "IFT_T1": "int:18", + "IFT_TDLC": "int:116", + "IFT_TERMPAD": "int:91", + "IFT_TR008": "int:176", + "IFT_TRANSPHDLC": "int:123", + "IFT_TUNNEL": "int:131", + "IFT_ULTRA": "int:29", + "IFT_USB": "int:160", + "IFT_V11": "int:64", + "IFT_V35": "int:45", + "IFT_V36": "int:65", + "IFT_V37": "int:120", + "IFT_VDSL": "int:97", + "IFT_VIRTUALIPADDRESS": "int:112", + "IFT_VOICEEM": "int:100", + "IFT_VOICEENCAP": "int:103", + "IFT_VOICEFXO": "int:101", + "IFT_VOICEFXS": "int:102", + "IFT_VOICEOVERATM": "int:152", + "IFT_VOICEOVERFRAMERELAY": "int:153", + "IFT_VOICEOVERIP": "int:104", + "IFT_X213": "int:93", + "IFT_X25": "int:5", + "IFT_X25DDN": "int:4", + "IFT_X25HUNTGROUP": "int:122", + "IFT_X25MLP": "int:121", + "IFT_X25PLE": "int:40", + "IFT_XETHER": "int:26", + "IGNBRK": "int:1", + "IGNCR": "int:128", + "IGNPAR": "int:4", + "IMAXBEL": "int:8192", + "INLCR": "int:64", + "INPCK": "int:16", + "IN_CLASSA_HOST": "int:16777215", + "IN_CLASSA_MAX": "int:128", + "IN_CLASSA_NET": "int:4278190080", + "IN_CLASSA_NSHIFT": "int:24", + "IN_CLASSB_HOST": "int:65535", + "IN_CLASSB_MAX": "int:65536", + "IN_CLASSB_NET": "int:4294901760", + "IN_CLASSB_NSHIFT": "int:16", + "IN_CLASSC_HOST": "int:255", + "IN_CLASSC_NET": "int:4294967040", + "IN_CLASSC_NSHIFT": "int:8", + "IN_CLASSD_HOST": "int:268435455", + "IN_CLASSD_NET": "int:4026531840", + "IN_CLASSD_NSHIFT": "int:28", + "IN_LOOPBACKNET": "int:127", + "IN_RFC3021_MASK": "int:4294967294", + "IPPROTO_3PC": "int:34", + "IPPROTO_ADFS": "int:68", + "IPPROTO_AH": "int:51", + "IPPROTO_AHIP": "int:61", + "IPPROTO_APES": "int:99", + "IPPROTO_ARGUS": "int:13", + "IPPROTO_AX25": "int:93", + "IPPROTO_BHA": "int:49", + "IPPROTO_BLT": "int:30", + "IPPROTO_BRSATMON": "int:76", + "IPPROTO_CARP": "int:112", + "IPPROTO_CFTP": "int:62", + "IPPROTO_CHAOS": "int:16", + "IPPROTO_CMTP": "int:38", + "IPPROTO_CPHB": "int:73", + "IPPROTO_CPNX": "int:72", + "IPPROTO_DDP": "int:37", + "IPPROTO_DGP": "int:86", + "IPPROTO_DIVERT": "int:258", + "IPPROTO_DONE": "int:257", + "IPPROTO_DSTOPTS": "int:60", + "IPPROTO_EGP": "int:8", + "IPPROTO_EMCON": "int:14", + "IPPROTO_ENCAP": "int:98", + "IPPROTO_EON": "int:80", + "IPPROTO_ESP": "int:50", + "IPPROTO_ETHERIP": "int:97", + "IPPROTO_FRAGMENT": "int:44", + "IPPROTO_GGP": "int:3", + "IPPROTO_GMTP": "int:100", + "IPPROTO_GRE": "int:47", + "IPPROTO_HELLO": "int:63", + "IPPROTO_HMP": "int:20", + "IPPROTO_HOPOPTS": "int:0", + "IPPROTO_ICMP": "int:1", + "IPPROTO_ICMPV6": "int:58", + "IPPROTO_IDP": "int:22", + "IPPROTO_IDPR": "int:35", + "IPPROTO_IDRP": "int:45", + "IPPROTO_IGMP": "int:2", + "IPPROTO_IGP": "int:85", + "IPPROTO_IGRP": "int:88", + "IPPROTO_IL": "int:40", + "IPPROTO_INLSP": "int:52", + "IPPROTO_INP": "int:32", + "IPPROTO_IP": "int:0", + "IPPROTO_IPCOMP": "int:108", + "IPPROTO_IPCV": "int:71", + "IPPROTO_IPEIP": "int:94", + "IPPROTO_IPIP": "int:4", + "IPPROTO_IPPC": "int:67", + "IPPROTO_IPV4": "int:4", + "IPPROTO_IPV6": "int:41", + "IPPROTO_IRTP": "int:28", + "IPPROTO_KRYPTOLAN": "int:65", + "IPPROTO_LARP": "int:91", + "IPPROTO_LEAF1": "int:25", + "IPPROTO_LEAF2": "int:26", + "IPPROTO_MAX": "int:256", + "IPPROTO_MAXID": "int:52", + "IPPROTO_MEAS": "int:19", + "IPPROTO_MH": "int:135", + "IPPROTO_MHRP": "int:48", + "IPPROTO_MICP": "int:95", + "IPPROTO_MOBILE": "int:55", + "IPPROTO_MPLS": "int:137", + "IPPROTO_MTP": "int:92", + "IPPROTO_MUX": "int:18", + "IPPROTO_ND": "int:77", + "IPPROTO_NHRP": "int:54", + "IPPROTO_NONE": "int:59", + "IPPROTO_NSP": "int:31", + "IPPROTO_NVPII": "int:11", + "IPPROTO_OLD_DIVERT": "int:254", + "IPPROTO_OSPFIGP": "int:89", + "IPPROTO_PFSYNC": "int:240", + "IPPROTO_PGM": "int:113", + "IPPROTO_PIGP": "int:9", + "IPPROTO_PIM": "int:103", + "IPPROTO_PRM": "int:21", + "IPPROTO_PUP": "int:12", + "IPPROTO_PVP": "int:75", + "IPPROTO_RAW": "int:255", + "IPPROTO_RCCMON": "int:10", + "IPPROTO_RDP": "int:27", + "IPPROTO_ROUTING": "int:43", + "IPPROTO_RSVP": "int:46", + "IPPROTO_RVD": "int:66", + "IPPROTO_SATEXPAK": "int:64", + "IPPROTO_SATMON": "int:69", + "IPPROTO_SCCSP": "int:96", + "IPPROTO_SCTP": "int:132", + "IPPROTO_SDRP": "int:42", + "IPPROTO_SEND": "int:259", + "IPPROTO_SEP": "int:33", + "IPPROTO_SKIP": "int:57", + "IPPROTO_SPACER": "int:32767", + "IPPROTO_SRPC": "int:90", + "IPPROTO_ST": "int:7", + "IPPROTO_SVMTP": "int:82", + "IPPROTO_SWIPE": "int:53", + "IPPROTO_TCF": "int:87", + "IPPROTO_TCP": "int:6", + "IPPROTO_TLSP": "int:56", + "IPPROTO_TP": "int:29", + "IPPROTO_TPXX": "int:39", + "IPPROTO_TRUNK1": "int:23", + "IPPROTO_TRUNK2": "int:24", + "IPPROTO_TTP": "int:84", + "IPPROTO_UDP": "int:17", + "IPPROTO_VINES": "int:83", + "IPPROTO_VISA": "int:70", + "IPPROTO_VMTP": "int:81", + "IPPROTO_WBEXPAK": "int:79", + "IPPROTO_WBMON": "int:78", + "IPPROTO_WSN": "int:74", + "IPPROTO_XNET": "int:15", + "IPPROTO_XTP": "int:36", + "IPV6_AUTOFLOWLABEL": "int:59", + "IPV6_BINDANY": "int:64", + "IPV6_BINDV6ONLY": "int:27", + "IPV6_CHECKSUM": "int:26", + "IPV6_DEFAULT_MULTICAST_HOPS": "int:1", + "IPV6_DEFAULT_MULTICAST_LOOP": "int:1", + "IPV6_DEFHLIM": "int:64", + "IPV6_DONTFRAG": "int:62", + "IPV6_DSTOPTS": "int:50", + "IPV6_FAITH": "int:29", + "IPV6_FLOWINFO_MASK": "int:4294967055", + "IPV6_FLOWLABEL_MASK": "int:4294905600", + "IPV6_FRAGTTL": "int:120", + "IPV6_FW_ADD": "int:30", + "IPV6_FW_DEL": "int:31", + "IPV6_FW_FLUSH": "int:32", + "IPV6_FW_GET": "int:34", + "IPV6_FW_ZERO": "int:33", + "IPV6_HLIMDEC": "int:1", + "IPV6_HOPLIMIT": "int:47", + "IPV6_HOPOPTS": "int:49", + "IPV6_IPSEC_POLICY": "int:28", + "IPV6_JOIN_GROUP": "int:12", + "IPV6_LEAVE_GROUP": "int:13", + "IPV6_MAXHLIM": "int:255", + "IPV6_MAXOPTHDR": "int:2048", + "IPV6_MAXPACKET": "int:65535", + "IPV6_MAX_GROUP_SRC_FILTER": "int:512", + "IPV6_MAX_MEMBERSHIPS": "int:4095", + "IPV6_MAX_SOCK_SRC_FILTER": "int:128", + "IPV6_MIN_MEMBERSHIPS": "int:31", + "IPV6_MMTU": "int:1280", + "IPV6_MSFILTER": "int:74", + "IPV6_MULTICAST_HOPS": "int:10", + "IPV6_MULTICAST_IF": "int:9", + "IPV6_MULTICAST_LOOP": "int:11", + "IPV6_NEXTHOP": "int:48", + "IPV6_PATHMTU": "int:44", + "IPV6_PKTINFO": "int:46", + "IPV6_PORTRANGE": "int:14", + "IPV6_PORTRANGE_DEFAULT": "int:0", + "IPV6_PORTRANGE_HIGH": "int:1", + "IPV6_PORTRANGE_LOW": "int:2", + "IPV6_PREFER_TEMPADDR": "int:63", + "IPV6_RECVDSTOPTS": "int:40", + "IPV6_RECVHOPLIMIT": "int:37", + "IPV6_RECVHOPOPTS": "int:39", + "IPV6_RECVPATHMTU": "int:43", + "IPV6_RECVPKTINFO": "int:36", + "IPV6_RECVRTHDR": "int:38", + "IPV6_RECVTCLASS": "int:57", + "IPV6_RTHDR": "int:51", + "IPV6_RTHDRDSTOPTS": "int:35", + "IPV6_RTHDR_LOOSE": "int:0", + "IPV6_RTHDR_STRICT": "int:1", + "IPV6_RTHDR_TYPE_0": "int:0", + "IPV6_SOCKOPT_RESERVED1": "int:3", + "IPV6_TCLASS": "int:61", + "IPV6_UNICAST_HOPS": "int:4", + "IPV6_USE_MIN_MTU": "int:42", + "IPV6_V6ONLY": "int:27", + "IPV6_VERSION": "int:96", + "IPV6_VERSION_MASK": "int:240", + "IP_ADD_MEMBERSHIP": "int:12", + "IP_ADD_SOURCE_MEMBERSHIP": "int:70", + "IP_BINDANY": "int:24", + "IP_BLOCK_SOURCE": "int:72", + "IP_DEFAULT_MULTICAST_LOOP": "int:1", + "IP_DEFAULT_MULTICAST_TTL": "int:1", + "IP_DF": "int:16384", + "IP_DONTFRAG": "int:67", + "IP_DROP_MEMBERSHIP": "int:13", + "IP_DROP_SOURCE_MEMBERSHIP": "int:71", + "IP_DUMMYNET3": "int:49", + "IP_DUMMYNET_CONFIGURE": "int:60", + "IP_DUMMYNET_DEL": "int:61", + "IP_DUMMYNET_FLUSH": "int:62", + "IP_DUMMYNET_GET": "int:64", + "IP_FAITH": "int:22", + "IP_FW3": "int:48", + "IP_FW_ADD": "int:50", + "IP_FW_DEL": "int:51", + "IP_FW_FLUSH": "int:52", + "IP_FW_GET": "int:54", + "IP_FW_NAT_CFG": "int:56", + "IP_FW_NAT_DEL": "int:57", + "IP_FW_NAT_GET_CONFIG": "int:58", + "IP_FW_NAT_GET_LOG": "int:59", + "IP_FW_RESETLOG": "int:55", + "IP_FW_TABLE_ADD": "int:40", + "IP_FW_TABLE_DEL": "int:41", + "IP_FW_TABLE_FLUSH": "int:42", + "IP_FW_TABLE_GETSIZE": "int:43", + "IP_FW_TABLE_LIST": "int:44", + "IP_FW_ZERO": "int:53", + "IP_HDRINCL": "int:2", + "IP_IPSEC_POLICY": "int:21", + "IP_MAXPACKET": "int:65535", + "IP_MAX_GROUP_SRC_FILTER": "int:512", + "IP_MAX_MEMBERSHIPS": "int:4095", + "IP_MAX_SOCK_MUTE_FILTER": "int:128", + "IP_MAX_SOCK_SRC_FILTER": "int:128", + "IP_MAX_SOURCE_FILTER": "int:1024", + "IP_MF": "int:8192", + "IP_MINTTL": "int:66", + "IP_MIN_MEMBERSHIPS": "int:31", + "IP_MSFILTER": "int:74", + "IP_MSS": "int:576", + "IP_MULTICAST_IF": "int:9", + "IP_MULTICAST_LOOP": "int:11", + "IP_MULTICAST_TTL": "int:10", + "IP_MULTICAST_VIF": "int:14", + "IP_OFFMASK": "int:8191", + "IP_ONESBCAST": "int:23", + "IP_OPTIONS": "int:1", + "IP_PORTRANGE": "int:19", + "IP_PORTRANGE_DEFAULT": "int:0", + "IP_PORTRANGE_HIGH": "int:1", + "IP_PORTRANGE_LOW": "int:2", + "IP_RECVDSTADDR": "int:7", + "IP_RECVIF": "int:20", + "IP_RECVOPTS": "int:5", + "IP_RECVRETOPTS": "int:6", + "IP_RECVTOS": "int:68", + "IP_RECVTTL": "int:65", + "IP_RETOPTS": "int:8", + "IP_RF": "int:32768", + "IP_RSVP_OFF": "int:16", + "IP_RSVP_ON": "int:15", + "IP_RSVP_VIF_OFF": "int:18", + "IP_RSVP_VIF_ON": "int:17", + "IP_SENDSRCADDR": "int:7", + "IP_TOS": "int:3", + "IP_TTL": "int:4", + "IP_UNBLOCK_SOURCE": "int:73", + "ISIG": "int:128", + "ISTRIP": "int:32", + "IXANY": "int:2048", + "IXOFF": "int:1024", + "IXON": "int:512", + "ImplementsGetwd": "bool:false", + "LOCK_EX": "int:2", + "LOCK_NB": "int:4", + "LOCK_SH": "int:1", + "LOCK_UN": "int:8", + "MADV_AUTOSYNC": "int:7", + "MADV_CORE": "int:9", + "MADV_DONTNEED": "int:4", + "MADV_FREE": "int:5", + "MADV_NOCORE": "int:8", + "MADV_NORMAL": "int:0", + "MADV_NOSYNC": "int:6", + "MADV_PROTECT": "int:10", + "MADV_RANDOM": "int:1", + "MADV_SEQUENTIAL": "int:2", + "MADV_WILLNEED": "int:3", + "MAP_ALIGNED_SUPER": "int:16777216", + "MAP_ALIGNMENT_MASK": "int:-16777216", + "MAP_ALIGNMENT_SHIFT": "int:24", + "MAP_ANON": "int:4096", + "MAP_ANONYMOUS": "int:4096", + "MAP_COPY": "int:2", + "MAP_FILE": "int:0", + "MAP_FIXED": "int:16", + "MAP_HASSEMAPHORE": "int:512", + "MAP_NOCORE": "int:131072", + "MAP_NORESERVE": "int:64", + "MAP_NOSYNC": "int:2048", + "MAP_PREFAULT_READ": "int:262144", + "MAP_PRIVATE": "int:2", + "MAP_RENAME": "int:32", + "MAP_RESERVED0080": "int:128", + "MAP_RESERVED0100": "int:256", + "MAP_SHARED": "int:1", + "MAP_STACK": "int:1024", + "MCL_CURRENT": "int:1", + "MCL_FUTURE": "int:2", + "MSG_CMSG_CLOEXEC": "int:262144", + "MSG_COMPAT": "int:32768", + "MSG_CTRUNC": "int:32", + "MSG_DONTROUTE": "int:4", + "MSG_DONTWAIT": "int:128", + "MSG_EOF": "int:256", + "MSG_EOR": "int:8", + "MSG_NBIO": "int:16384", + "MSG_NOSIGNAL": "int:131072", + "MSG_NOTIFICATION": "int:8192", + "MSG_OOB": "int:1", + "MSG_PEEK": "int:2", + "MSG_TRUNC": "int:16", + "MSG_WAITALL": "int:64", + "MS_ASYNC": "int:1", + "MS_INVALIDATE": "int:2", + "MS_SYNC": "int:0", + "NAME_MAX": "int:255", + "NET_RT_DUMP": "int:1", + "NET_RT_FLAGS": "int:2", + "NET_RT_IFLIST": "int:3", + "NET_RT_IFLISTL": "int:5", + "NET_RT_IFMALIST": "int:4", + "NET_RT_MAXID": "int:6", + "NOFLSH": "int:2147483648", + "NOTE_ATTRIB": "int:8", + "NOTE_CHILD": "int:4", + "NOTE_DELETE": "int:1", + "NOTE_EXEC": "int:536870912", + "NOTE_EXIT": "int:2147483648", + "NOTE_EXTEND": "int:4", + "NOTE_FFAND": "int:1073741824", + "NOTE_FFCOPY": "int:3221225472", + "NOTE_FFCTRLMASK": "int:3221225472", + "NOTE_FFLAGSMASK": "int:16777215", + "NOTE_FFNOP": "int:0", + "NOTE_FFOR": "int:2147483648", + "NOTE_FORK": "int:1073741824", + "NOTE_LINK": "int:16", + "NOTE_LOWAT": "int:1", + "NOTE_PCTRLMASK": "int:4026531840", + "NOTE_PDATAMASK": "int:1048575", + "NOTE_RENAME": "int:32", + "NOTE_REVOKE": "int:64", + "NOTE_TRACK": "int:1", + "NOTE_TRACKERR": "int:2", + "NOTE_TRIGGER": "int:16777216", + "NOTE_WRITE": "int:2", + "OCRNL": "int:16", + "ONLCR": "int:2", + "ONLRET": "int:64", + "ONOCR": "int:32", + "ONOEOT": "int:8", + "OPOST": "int:1", + "O_ACCMODE": "int:3", + "O_APPEND": "int:8", + "O_ASYNC": "int:64", + "O_CLOEXEC": "int:1048576", + "O_CREAT": "int:512", + "O_DIRECT": "int:65536", + "O_DIRECTORY": "int:131072", + "O_EXCL": "int:2048", + "O_EXEC": "int:262144", + "O_EXLOCK": "int:32", + "O_FSYNC": "int:128", + "O_NDELAY": "int:4", + "O_NOCTTY": "int:32768", + "O_NOFOLLOW": "int:256", + "O_NONBLOCK": "int:4", + "O_RDONLY": "int:0", + "O_RDWR": "int:2", + "O_SHLOCK": "int:16", + "O_SYNC": "int:128", + "O_TRUNC": "int:1024", + "O_TTY_INIT": "int:524288", + "O_WRONLY": "int:1", + "PARENB": "int:4096", + "PARMRK": "int:8", + "PARODD": "int:8192", + "PENDIN": "int:536870912", + "PRIO_PGRP": "int:1", + "PRIO_PROCESS": "int:0", + "PRIO_USER": "int:2", + "PROT_EXEC": "int:4", + "PROT_NONE": "int:0", + "PROT_READ": "int:1", + "PROT_WRITE": "int:2", + "PTRACE_CONT": "int:7", + "PTRACE_KILL": "int:8", + "PTRACE_TRACEME": "int:0", + "RLIMIT_AS": "int:10", + "RLIMIT_CORE": "int:4", + "RLIMIT_CPU": "int:0", + "RLIMIT_DATA": "int:2", + "RLIMIT_FSIZE": "int:1", + "RLIMIT_NOFILE": "int:8", + "RLIMIT_STACK": "int:3", + "RLIM_INFINITY": "int:9223372036854775807", + "RTAX_AUTHOR": "int:6", + "RTAX_BRD": "int:7", + "RTAX_DST": "int:0", + "RTAX_GATEWAY": "int:1", + "RTAX_GENMASK": "int:3", + "RTAX_IFA": "int:5", + "RTAX_IFP": "int:4", + "RTAX_MAX": "int:8", + "RTAX_NETMASK": "int:2", + "RTA_AUTHOR": "int:64", + "RTA_BRD": "int:128", + "RTA_DST": "int:1", + "RTA_GATEWAY": "int:2", + "RTA_GENMASK": "int:8", + "RTA_IFA": "int:32", + "RTA_IFP": "int:16", + "RTA_NETMASK": "int:4", + "RTF_BLACKHOLE": "int:4096", + "RTF_BROADCAST": "int:4194304", + "RTF_DONE": "int:64", + "RTF_DYNAMIC": "int:16", + "RTF_FMASK": "int:268752904", + "RTF_GATEWAY": "int:2", + "RTF_GWFLAG_COMPAT": "int:2147483648", + "RTF_HOST": "int:4", + "RTF_LLDATA": "int:1024", + "RTF_LLINFO": "int:1024", + "RTF_LOCAL": "int:2097152", + "RTF_MODIFIED": "int:32", + "RTF_MULTICAST": "int:8388608", + "RTF_PINNED": "int:1048576", + "RTF_PRCLONING": "int:65536", + "RTF_PROTO1": "int:32768", + "RTF_PROTO2": "int:16384", + "RTF_PROTO3": "int:262144", + "RTF_REJECT": "int:8", + "RTF_RNH_LOCKED": "int:1073741824", + "RTF_STATIC": "int:2048", + "RTF_STICKY": "int:268435456", + "RTF_UP": "int:1", + "RTF_XRESOLVE": "int:512", + "RTM_ADD": "int:1", + "RTM_CHANGE": "int:3", + "RTM_DELADDR": "int:13", + "RTM_DELETE": "int:2", + "RTM_DELMADDR": "int:16", + "RTM_GET": "int:4", + "RTM_IEEE80211": "int:18", + "RTM_IFANNOUNCE": "int:17", + "RTM_IFINFO": "int:14", + "RTM_LOCK": "int:8", + "RTM_LOSING": "int:5", + "RTM_MISS": "int:7", + "RTM_NEWADDR": "int:12", + "RTM_NEWMADDR": "int:15", + "RTM_OLDADD": "int:9", + "RTM_OLDDEL": "int:10", + "RTM_REDIRECT": "int:6", + "RTM_RESOLVE": "int:11", + "RTM_RTTUNIT": "int:1000000", + "RTM_VERSION": "int:5", + "RTV_EXPIRE": "int:4", + "RTV_HOPCOUNT": "int:2", + "RTV_MTU": "int:1", + "RTV_RPIPE": "int:8", + "RTV_RTT": "int:64", + "RTV_RTTVAR": "int:128", + "RTV_SPIPE": "int:16", + "RTV_SSTHRESH": "int:32", + "RTV_WEIGHT": "int:256", + "RT_CACHING_CONTEXT": "int:1", + "RT_DEFAULT_FIB": "int:0", + "RT_NORTREF": "int:2", + "RUSAGE_CHILDREN": "int:-1", + "RUSAGE_SELF": "int:0", + "RUSAGE_THREAD": "int:1", + "SCM_BINTIME": "int:4", + "SCM_CREDS": "int:3", + "SCM_RIGHTS": "int:1", + "SCM_TIMESTAMP": "int:2", + "SHUT_RD": "int:0", + "SHUT_RDWR": "int:2", + "SHUT_WR": "int:1", + "SIOCADDMULTI": "int:2149607729", + "SIOCADDRT": "int:2150658570", + "SIOCAIFADDR": "int:2151704858", + "SIOCAIFGROUP": "int:2149869959", + "SIOCALIFADDR": "int:2165860635", + "SIOCATMARK": "int:1074033415", + "SIOCDELMULTI": "int:2149607730", + "SIOCDELRT": "int:2150658571", + "SIOCDIFADDR": "int:2149607705", + "SIOCDIFGROUP": "int:2149869961", + "SIOCDIFPHYADDR": "int:2149607753", + "SIOCDLIFADDR": "int:2165860637", + "SIOCGDRVSPEC": "int:3223087483", + "SIOCGETSGCNT": "int:3222565392", + "SIOCGETVIFCNT": "int:3222565391", + "SIOCGHIWAT": "int:1074033409", + "SIOCGIFADDR": "int:3223349537", + "SIOCGIFBRDADDR": "int:3223349539", + "SIOCGIFCAP": "int:3223349535", + "SIOCGIFCONF": "int:3221776676", + "SIOCGIFDESCR": "int:3223349546", + "SIOCGIFDSTADDR": "int:3223349538", + "SIOCGIFFIB": "int:3223349596", + "SIOCGIFFLAGS": "int:3223349521", + "SIOCGIFGENERIC": "int:3223349562", + "SIOCGIFGMEMB": "int:3223611786", + "SIOCGIFGROUP": "int:3223611784", + "SIOCGIFINDEX": "int:3223349536", + "SIOCGIFMAC": "int:3223349542", + "SIOCGIFMEDIA": "int:3223873848", + "SIOCGIFMETRIC": "int:3223349527", + "SIOCGIFMTU": "int:3223349555", + "SIOCGIFNETMASK": "int:3223349541", + "SIOCGIFPDSTADDR": "int:3223349576", + "SIOCGIFPHYS": "int:3223349557", + "SIOCGIFPSRCADDR": "int:3223349575", + "SIOCGIFSTATUS": "int:3274795323", + "SIOCGLIFADDR": "int:3239602460", + "SIOCGLIFPHYADDR": "int:3239602507", + "SIOCGLOWAT": "int:1074033411", + "SIOCGPGRP": "int:1074033417", + "SIOCGPRIVATE_0": "int:3223349584", + "SIOCGPRIVATE_1": "int:3223349585", + "SIOCIFCREATE": "int:3223349626", + "SIOCIFCREATE2": "int:3223349628", + "SIOCIFDESTROY": "int:2149607801", + "SIOCIFGCLONERS": "int:3222038904", + "SIOCSDRVSPEC": "int:2149345659", + "SIOCSHIWAT": "int:2147775232", + "SIOCSIFADDR": "int:2149607692", + "SIOCSIFBRDADDR": "int:2149607699", + "SIOCSIFCAP": "int:2149607710", + "SIOCSIFDESCR": "int:2149607721", + "SIOCSIFDSTADDR": "int:2149607694", + "SIOCSIFFIB": "int:2149607773", + "SIOCSIFFLAGS": "int:2149607696", + "SIOCSIFGENERIC": "int:2149607737", + "SIOCSIFLLADDR": "int:2149607740", + "SIOCSIFMAC": "int:2149607719", + "SIOCSIFMEDIA": "int:3223349559", + "SIOCSIFMETRIC": "int:2149607704", + "SIOCSIFMTU": "int:2149607732", + "SIOCSIFNAME": "int:2149607720", + "SIOCSIFNETMASK": "int:2149607702", + "SIOCSIFPHYADDR": "int:2151704902", + "SIOCSIFPHYS": "int:2149607734", + "SIOCSIFRVNET": "int:3223349595", + "SIOCSIFVNET": "int:3223349594", + "SIOCSLIFPHYADDR": "int:2165860682", + "SIOCSLOWAT": "int:2147775234", + "SIOCSPGRP": "int:2147775240", + "SOCK_CLOEXEC": "int:268435456", + "SOCK_DGRAM": "int:2", + "SOCK_MAXADDRLEN": "int:255", + "SOCK_NONBLOCK": "int:536870912", + "SOCK_RAW": "int:3", + "SOCK_RDM": "int:4", + "SOCK_SEQPACKET": "int:5", + "SOCK_STREAM": "int:1", + "SOL_SOCKET": "int:65535", + "SOMAXCONN": "int:128", + "SO_ACCEPTCONN": "int:2", + "SO_ACCEPTFILTER": "int:4096", + "SO_BINTIME": "int:8192", + "SO_BROADCAST": "int:32", + "SO_DEBUG": "int:1", + "SO_DONTROUTE": "int:16", + "SO_ERROR": "int:4103", + "SO_KEEPALIVE": "int:8", + "SO_LABEL": "int:4105", + "SO_LINGER": "int:128", + "SO_LISTENINCQLEN": "int:4115", + "SO_LISTENQLEN": "int:4114", + "SO_LISTENQLIMIT": "int:4113", + "SO_NOSIGPIPE": "int:2048", + "SO_NO_DDP": "int:32768", + "SO_NO_OFFLOAD": "int:16384", + "SO_OOBINLINE": "int:256", + "SO_PEERLABEL": "int:4112", + "SO_PROTOCOL": "int:4118", + "SO_PROTOTYPE": "int:4118", + "SO_RCVBUF": "int:4098", + "SO_RCVLOWAT": "int:4100", + "SO_RCVTIMEO": "int:4102", + "SO_REUSEADDR": "int:4", + "SO_REUSEPORT": "int:512", + "SO_SETFIB": "int:4116", + "SO_SNDBUF": "int:4097", + "SO_SNDLOWAT": "int:4099", + "SO_SNDTIMEO": "int:4101", + "SO_TIMESTAMP": "int:1024", + "SO_TYPE": "int:4104", + "SO_USELOOPBACK": "int:64", + "SO_USER_COOKIE": "int:4117", + "SO_VENDOR": "int:2147483648", + "SYS_ABORT2": "int:463", + "SYS_ACCEPT": "int:30", + "SYS_ACCEPT4": "int:541", + "SYS_ACCESS": "int:33", + "SYS_ACCT": "int:51", + "SYS_ADJTIME": "int:140", + "SYS_AUDIT": "int:445", + "SYS_AUDITCTL": "int:453", + "SYS_AUDITON": "int:446", + "SYS_BIND": "int:104", + "SYS_BINDAT": "int:538", + "SYS_CAP_ENTER": "int:516", + "SYS_CAP_GETMODE": "int:517", + "SYS_CAP_GETRIGHTS": "int:515", + "SYS_CAP_NEW": "int:514", + "SYS_CHDIR": "int:12", + "SYS_CHFLAGS": "int:34", + "SYS_CHFLAGSAT": "int:540", + "SYS_CHMOD": "int:15", + "SYS_CHOWN": "int:16", + "SYS_CHROOT": "int:61", + "SYS_CLOCK_GETCPUCLOCKID2": "int:247", + "SYS_CLOCK_GETRES": "int:234", + "SYS_CLOCK_GETTIME": "int:232", + "SYS_CLOCK_SETTIME": "int:233", + "SYS_CLOSE": "int:6", + "SYS_CLOSEFROM": "int:509", + "SYS_CONNECT": "int:98", + "SYS_CONNECTAT": "int:539", + "SYS_CPUSET": "int:484", + "SYS_CPUSET_GETAFFINITY": "int:487", + "SYS_CPUSET_GETID": "int:486", + "SYS_CPUSET_SETAFFINITY": "int:488", + "SYS_CPUSET_SETID": "int:485", + "SYS_DUP": "int:41", + "SYS_DUP2": "int:90", + "SYS_EACCESS": "int:376", + "SYS_EXECVE": "int:59", + "SYS_EXIT": "int:1", + "SYS_EXTATTRCTL": "int:355", + "SYS_EXTATTR_DELETE_FD": "int:373", + "SYS_EXTATTR_DELETE_FILE": "int:358", + "SYS_EXTATTR_DELETE_LINK": "int:414", + "SYS_EXTATTR_GET_FD": "int:372", + "SYS_EXTATTR_GET_FILE": "int:357", + "SYS_EXTATTR_GET_LINK": "int:413", + "SYS_EXTATTR_LIST_FD": "int:437", + "SYS_EXTATTR_LIST_FILE": "int:438", + "SYS_EXTATTR_LIST_LINK": "int:439", + "SYS_EXTATTR_SET_FD": "int:371", + "SYS_EXTATTR_SET_FILE": "int:356", + "SYS_EXTATTR_SET_LINK": "int:412", + "SYS_FACCESSAT": "int:489", + "SYS_FCHDIR": "int:13", + "SYS_FCHFLAGS": "int:35", + "SYS_FCHMOD": "int:124", + "SYS_FCHMODAT": "int:490", + "SYS_FCHOWN": "int:123", + "SYS_FCHOWNAT": "int:491", + "SYS_FCNTL": "int:92", + "SYS_FEXECVE": "int:492", + "SYS_FFCLOCK_GETCOUNTER": "int:241", + "SYS_FFCLOCK_GETESTIMATE": "int:243", + "SYS_FFCLOCK_SETESTIMATE": "int:242", + "SYS_FHOPEN": "int:298", + "SYS_FHSTAT": "int:299", + "SYS_FHSTATFS": "int:398", + "SYS_FLOCK": "int:131", + "SYS_FORK": "int:2", + "SYS_FPATHCONF": "int:192", + "SYS_FREEBSD6_FTRUNCATE": "int:201", + "SYS_FREEBSD6_LSEEK": "int:199", + "SYS_FREEBSD6_MMAP": "int:197", + "SYS_FREEBSD6_PREAD": "int:173", + "SYS_FREEBSD6_PWRITE": "int:174", + "SYS_FREEBSD6_TRUNCATE": "int:200", + "SYS_FSTAT": "int:189", + "SYS_FSTATAT": "int:493", + "SYS_FSTATFS": "int:397", + "SYS_FSYNC": "int:95", + "SYS_FTRUNCATE": "int:480", + "SYS_FUTIMES": "int:206", + "SYS_FUTIMESAT": "int:494", + "SYS_GETAUDIT": "int:449", + "SYS_GETAUDIT_ADDR": "int:451", + "SYS_GETAUID": "int:447", + "SYS_GETCONTEXT": "int:421", + "SYS_GETDENTS": "int:272", + "SYS_GETDIRENTRIES": "int:196", + "SYS_GETDTABLESIZE": "int:89", + "SYS_GETEGID": "int:43", + "SYS_GETEUID": "int:25", + "SYS_GETFH": "int:161", + "SYS_GETFSSTAT": "int:395", + "SYS_GETGID": "int:47", + "SYS_GETGROUPS": "int:79", + "SYS_GETITIMER": "int:86", + "SYS_GETLOGIN": "int:49", + "SYS_GETLOGINCLASS": "int:523", + "SYS_GETPEERNAME": "int:31", + "SYS_GETPGID": "int:207", + "SYS_GETPGRP": "int:81", + "SYS_GETPID": "int:20", + "SYS_GETPPID": "int:39", + "SYS_GETPRIORITY": "int:100", + "SYS_GETRESGID": "int:361", + "SYS_GETRESUID": "int:360", + "SYS_GETRLIMIT": "int:194", + "SYS_GETRUSAGE": "int:117", + "SYS_GETSID": "int:310", + "SYS_GETSOCKNAME": "int:32", + "SYS_GETSOCKOPT": "int:118", + "SYS_GETTIMEOFDAY": "int:116", + "SYS_GETUID": "int:24", + "SYS_IOCTL": "int:54", + "SYS_ISSETUGID": "int:253", + "SYS_JAIL": "int:338", + "SYS_JAIL_ATTACH": "int:436", + "SYS_JAIL_GET": "int:506", + "SYS_JAIL_REMOVE": "int:508", + "SYS_JAIL_SET": "int:507", + "SYS_KENV": "int:390", + "SYS_KEVENT": "int:363", + "SYS_KILL": "int:37", + "SYS_KLDFIND": "int:306", + "SYS_KLDFIRSTMOD": "int:309", + "SYS_KLDLOAD": "int:304", + "SYS_KLDNEXT": "int:307", + "SYS_KLDSTAT": "int:308", + "SYS_KLDSYM": "int:337", + "SYS_KLDUNLOAD": "int:305", + "SYS_KLDUNLOADF": "int:444", + "SYS_KQUEUE": "int:362", + "SYS_KTIMER_CREATE": "int:235", + "SYS_KTIMER_DELETE": "int:236", + "SYS_KTIMER_GETOVERRUN": "int:239", + "SYS_KTIMER_GETTIME": "int:238", + "SYS_KTIMER_SETTIME": "int:237", + "SYS_KTRACE": "int:45", + "SYS_LCHFLAGS": "int:391", + "SYS_LCHMOD": "int:274", + "SYS_LCHOWN": "int:254", + "SYS_LGETFH": "int:160", + "SYS_LINK": "int:9", + "SYS_LINKAT": "int:495", + "SYS_LISTEN": "int:106", + "SYS_LPATHCONF": "int:513", + "SYS_LSEEK": "int:478", + "SYS_LSTAT": "int:190", + "SYS_LUTIMES": "int:276", + "SYS_MAC_SYSCALL": "int:394", + "SYS_MADVISE": "int:75", + "SYS_MINCORE": "int:78", + "SYS_MINHERIT": "int:250", + "SYS_MKDIR": "int:136", + "SYS_MKDIRAT": "int:496", + "SYS_MKFIFO": "int:132", + "SYS_MKFIFOAT": "int:497", + "SYS_MKNOD": "int:14", + "SYS_MKNODAT": "int:498", + "SYS_MLOCK": "int:203", + "SYS_MLOCKALL": "int:324", + "SYS_MMAP": "int:477", + "SYS_MODFIND": "int:303", + "SYS_MODFNEXT": "int:302", + "SYS_MODNEXT": "int:300", + "SYS_MODSTAT": "int:301", + "SYS_MOUNT": "int:21", + "SYS_MPROTECT": "int:74", + "SYS_MSYNC": "int:65", + "SYS_MUNLOCK": "int:204", + "SYS_MUNLOCKALL": "int:325", + "SYS_MUNMAP": "int:73", + "SYS_NANOSLEEP": "int:240", + "SYS_NFSTAT": "int:279", + "SYS_NLSTAT": "int:280", + "SYS_NMOUNT": "int:378", + "SYS_NSTAT": "int:278", + "SYS_NTP_ADJTIME": "int:176", + "SYS_NTP_GETTIME": "int:248", + "SYS_OBREAK": "int:17", + "SYS_OPEN": "int:5", + "SYS_OPENAT": "int:499", + "SYS_OPENBSD_POLL": "int:252", + "SYS_OVADVISE": "int:72", + "SYS_PATHCONF": "int:191", + "SYS_PDFORK": "int:518", + "SYS_PDGETPID": "int:520", + "SYS_PDKILL": "int:519", + "SYS_PIPE": "int:42", + "SYS_PIPE2": "int:542", + "SYS_POLL": "int:209", + "SYS_POSIX_FADVISE": "int:531", + "SYS_POSIX_FALLOCATE": "int:530", + "SYS_POSIX_OPENPT": "int:504", + "SYS_PREAD": "int:475", + "SYS_PREADV": "int:289", + "SYS_PROCCTL": "int:544", + "SYS_PROFIL": "int:44", + "SYS_PSELECT": "int:522", + "SYS_PTRACE": "int:26", + "SYS_PWRITE": "int:476", + "SYS_PWRITEV": "int:290", + "SYS_QUOTACTL": "int:148", + "SYS_RCTL_ADD_RULE": "int:528", + "SYS_RCTL_GET_LIMITS": "int:527", + "SYS_RCTL_GET_RACCT": "int:525", + "SYS_RCTL_GET_RULES": "int:526", + "SYS_RCTL_REMOVE_RULE": "int:529", + "SYS_READ": "int:3", + "SYS_READLINK": "int:58", + "SYS_READLINKAT": "int:500", + "SYS_READV": "int:120", + "SYS_REBOOT": "int:55", + "SYS_RECVFROM": "int:29", + "SYS_RECVMSG": "int:27", + "SYS_RENAME": "int:128", + "SYS_RENAMEAT": "int:501", + "SYS_REVOKE": "int:56", + "SYS_RFORK": "int:251", + "SYS_RMDIR": "int:137", + "SYS_RTPRIO": "int:166", + "SYS_RTPRIO_THREAD": "int:466", + "SYS_SBRK": "int:69", + "SYS_SCHED_GETPARAM": "int:328", + "SYS_SCHED_GETSCHEDULER": "int:330", + "SYS_SCHED_GET_PRIORITY_MAX": "int:332", + "SYS_SCHED_GET_PRIORITY_MIN": "int:333", + "SYS_SCHED_RR_GET_INTERVAL": "int:334", + "SYS_SCHED_SETPARAM": "int:327", + "SYS_SCHED_SETSCHEDULER": "int:329", + "SYS_SCHED_YIELD": "int:331", + "SYS_SCTP_GENERIC_RECVMSG": "int:474", + "SYS_SCTP_GENERIC_SENDMSG": "int:472", + "SYS_SCTP_GENERIC_SENDMSG_IOV": "int:473", + "SYS_SCTP_PEELOFF": "int:471", + "SYS_SELECT": "int:93", + "SYS_SENDFILE": "int:393", + "SYS_SENDMSG": "int:28", + "SYS_SENDTO": "int:133", + "SYS_SETAUDIT": "int:450", + "SYS_SETAUDIT_ADDR": "int:452", + "SYS_SETAUID": "int:448", + "SYS_SETCONTEXT": "int:422", + "SYS_SETEGID": "int:182", + "SYS_SETEUID": "int:183", + "SYS_SETFIB": "int:175", + "SYS_SETGID": "int:181", + "SYS_SETGROUPS": "int:80", + "SYS_SETITIMER": "int:83", + "SYS_SETLOGIN": "int:50", + "SYS_SETLOGINCLASS": "int:524", + "SYS_SETPGID": "int:82", + "SYS_SETPRIORITY": "int:96", + "SYS_SETREGID": "int:127", + "SYS_SETRESGID": "int:312", + "SYS_SETRESUID": "int:311", + "SYS_SETREUID": "int:126", + "SYS_SETRLIMIT": "int:195", + "SYS_SETSID": "int:147", + "SYS_SETSOCKOPT": "int:105", + "SYS_SETTIMEOFDAY": "int:122", + "SYS_SETUID": "int:23", + "SYS_SHM_OPEN": "int:482", + "SYS_SHM_UNLINK": "int:483", + "SYS_SHUTDOWN": "int:134", + "SYS_SIGACTION": "int:416", + "SYS_SIGALTSTACK": "int:53", + "SYS_SIGPENDING": "int:343", + "SYS_SIGPROCMASK": "int:340", + "SYS_SIGQUEUE": "int:456", + "SYS_SIGRETURN": "int:417", + "SYS_SIGSUSPEND": "int:341", + "SYS_SIGTIMEDWAIT": "int:345", + "SYS_SIGWAIT": "int:429", + "SYS_SIGWAITINFO": "int:346", + "SYS_SOCKET": "int:97", + "SYS_SOCKETPAIR": "int:135", + "SYS_SSTK": "int:70", + "SYS_STAT": "int:188", + "SYS_STATFS": "int:396", + "SYS_SWAPCONTEXT": "int:423", + "SYS_SWAPOFF": "int:424", + "SYS_SWAPON": "int:85", + "SYS_SYMLINK": "int:57", + "SYS_SYMLINKAT": "int:502", + "SYS_SYNC": "int:36", + "SYS_SYSARCH": "int:165", + "SYS_THR_CREATE": "int:430", + "SYS_THR_EXIT": "int:431", + "SYS_THR_KILL": "int:433", + "SYS_THR_KILL2": "int:481", + "SYS_THR_NEW": "int:455", + "SYS_THR_SELF": "int:432", + "SYS_THR_SET_NAME": "int:464", + "SYS_THR_SUSPEND": "int:442", + "SYS_THR_WAKE": "int:443", + "SYS_TRUNCATE": "int:479", + "SYS_UMASK": "int:60", + "SYS_UNDELETE": "int:205", + "SYS_UNLINK": "int:10", + "SYS_UNLINKAT": "int:503", + "SYS_UNMOUNT": "int:22", + "SYS_UTIMES": "int:138", + "SYS_UTRACE": "int:335", + "SYS_UUIDGEN": "int:392", + "SYS_VFORK": "int:66", + "SYS_WAIT4": "int:7", + "SYS_WAIT6": "int:532", + "SYS_WRITE": "int:4", + "SYS_WRITEV": "int:121", + "SYS_YIELD": "int:321", + "SYS__UMTX_LOCK": "int:434", + "SYS__UMTX_OP": "int:454", + "SYS__UMTX_UNLOCK": "int:435", + "SYS___ACL_ACLCHECK_FD": "int:354", + "SYS___ACL_ACLCHECK_FILE": "int:353", + "SYS___ACL_ACLCHECK_LINK": "int:428", + "SYS___ACL_DELETE_FD": "int:352", + "SYS___ACL_DELETE_FILE": "int:351", + "SYS___ACL_DELETE_LINK": "int:427", + "SYS___ACL_GET_FD": "int:349", + "SYS___ACL_GET_FILE": "int:347", + "SYS___ACL_GET_LINK": "int:425", + "SYS___ACL_SET_FD": "int:350", + "SYS___ACL_SET_FILE": "int:348", + "SYS___ACL_SET_LINK": "int:426", + "SYS___GETCWD": "int:326", + "SYS___MAC_EXECVE": "int:415", + "SYS___MAC_GET_FD": "int:386", + "SYS___MAC_GET_FILE": "int:387", + "SYS___MAC_GET_LINK": "int:410", + "SYS___MAC_GET_PID": "int:409", + "SYS___MAC_GET_PROC": "int:384", + "SYS___MAC_SET_FD": "int:388", + "SYS___MAC_SET_FILE": "int:389", + "SYS___MAC_SET_LINK": "int:411", + "SYS___MAC_SET_PROC": "int:385", + "SYS___SETUGID": "int:374", + "SYS___SYSCTL": "int:202", + "S_IFBLK": "int:24576", + "S_IFCHR": "int:8192", + "S_IFDIR": "int:16384", + "S_IFIFO": "int:4096", + "S_IFLNK": "int:40960", + "S_IFMT": "int:61440", + "S_IFREG": "int:32768", + "S_IFSOCK": "int:49152", + "S_IRUSR": "int:256", + "S_ISGID": "int:1024", + "S_ISUID": "int:2048", + "S_ISVTX": "int:512", + "S_IWUSR": "int:128", + "S_IXUSR": "int:64", + "SizeofBpfHdr": "int:20", + "SizeofBpfInsn": "int:8", + "SizeofBpfProgram": "int:8", + "SizeofBpfStat": "int:8", + "SizeofBpfVersion": "int:4", + "SizeofBpfZbuf": "int:12", + "SizeofBpfZbufHeader": "int:32", + "SizeofCmsghdr": "int:12", + "SizeofICMPv6Filter": "int:32", + "SizeofIPMreq": "int:8", + "SizeofIPMreqn": "int:12", + "SizeofIPv6MTUInfo": "int:32", + "SizeofIPv6Mreq": "int:20", + "SizeofIfAnnounceMsghdr": "int:24", + "SizeofIfData": "int:80", + "SizeofIfMsghdr": "int:96", + "SizeofIfaMsghdr": "int:20", + "SizeofIfmaMsghdr": "int:16", + "SizeofInet6Pktinfo": "int:20", + "SizeofLinger": "int:8", + "SizeofMsghdr": "int:28", + "SizeofRtMetrics": "int:56", + "SizeofRtMsghdr": "int:92", + "SizeofSockaddrAny": "int:108", + "SizeofSockaddrDatalink": "int:54", + "SizeofSockaddrInet4": "int:16", + "SizeofSockaddrInet6": "int:28", + "SizeofSockaddrUnix": "int:106", + "TCIFLUSH": "int:1", + "TCIOFLUSH": "int:3", + "TCOFLUSH": "int:2", + "TCP_CA_NAME_MAX": "int:16", + "TCP_CONGESTION": "int:64", + "TCP_INFO": "int:32", + "TCP_KEEPCNT": "int:1024", + "TCP_KEEPIDLE": "int:256", + "TCP_KEEPINIT": "int:128", + "TCP_KEEPINTVL": "int:512", + "TCP_MAXBURST": "int:4", + "TCP_MAXHLEN": "int:60", + "TCP_MAXOLEN": "int:40", + "TCP_MAXSEG": "int:2", + "TCP_MAXWIN": "int:65535", + "TCP_MAX_SACK": "int:4", + "TCP_MAX_WINSHIFT": "int:14", + "TCP_MD5SIG": "int:16", + "TCP_MINMSS": "int:216", + "TCP_MSS": "int:536", + "TCP_NODELAY": "int:1", + "TCP_NOOPT": "int:8", + "TCP_NOPUSH": "int:4", + "TCP_VENDOR": "int:2147483648", + "TCSAFLUSH": "int:2", + "TIOCCBRK": "int:536900730", + "TIOCCDTR": "int:536900728", + "TIOCCONS": "int:2147775586", + "TIOCDRAIN": "int:536900702", + "TIOCEXCL": "int:536900621", + "TIOCEXT": "int:2147775584", + "TIOCFLUSH": "int:2147775504", + "TIOCGDRAINWAIT": "int:1074033750", + "TIOCGETA": "int:1076655123", + "TIOCGETD": "int:1074033690", + "TIOCGPGRP": "int:1074033783", + "TIOCGPTN": "int:1074033679", + "TIOCGSID": "int:1074033763", + "TIOCGWINSZ": "int:1074295912", + "TIOCMBIC": "int:2147775595", + "TIOCMBIS": "int:2147775596", + "TIOCMGDTRWAIT": "int:1074033754", + "TIOCMGET": "int:1074033770", + "TIOCMSDTRWAIT": "int:2147775579", + "TIOCMSET": "int:2147775597", + "TIOCM_CAR": "int:64", + "TIOCM_CD": "int:64", + "TIOCM_CTS": "int:32", + "TIOCM_DCD": "int:64", + "TIOCM_DSR": "int:256", + "TIOCM_DTR": "int:2", + "TIOCM_LE": "int:1", + "TIOCM_RI": "int:128", + "TIOCM_RNG": "int:128", + "TIOCM_RTS": "int:4", + "TIOCM_SR": "int:16", + "TIOCM_ST": "int:8", + "TIOCNOTTY": "int:536900721", + "TIOCNXCL": "int:536900622", + "TIOCOUTQ": "int:1074033779", + "TIOCPKT": "int:2147775600", + "TIOCPKT_DATA": "int:0", + "TIOCPKT_DOSTOP": "int:32", + "TIOCPKT_FLUSHREAD": "int:1", + "TIOCPKT_FLUSHWRITE": "int:2", + "TIOCPKT_IOCTL": "int:64", + "TIOCPKT_NOSTOP": "int:16", + "TIOCPKT_START": "int:8", + "TIOCPKT_STOP": "int:4", + "TIOCPTMASTER": "int:536900636", + "TIOCSBRK": "int:536900731", + "TIOCSCTTY": "int:536900705", + "TIOCSDRAINWAIT": "int:2147775575", + "TIOCSDTR": "int:536900729", + "TIOCSETA": "int:2150396948", + "TIOCSETAF": "int:2150396950", + "TIOCSETAW": "int:2150396949", + "TIOCSETD": "int:2147775515", + "TIOCSIG": "int:537162847", + "TIOCSPGRP": "int:2147775606", + "TIOCSTART": "int:536900718", + "TIOCSTAT": "int:536900709", + "TIOCSTI": "int:2147578994", + "TIOCSTOP": "int:536900719", + "TIOCSWINSZ": "int:2148037735", + "TIOCTIMESTAMP": "int:1074295897", + "TIOCUCNTL": "int:2147775590", + "TOSTOP": "int:4194304", + "VDISCARD": "int:15", + "VDSUSP": "int:11", + "VEOF": "int:0", + "VEOL": "int:1", + "VEOL2": "int:2", + "VERASE": "int:3", + "VERASE2": "int:7", + "VINTR": "int:8", + "VKILL": "int:5", + "VLNEXT": "int:14", + "VMIN": "int:16", + "VQUIT": "int:9", + "VREPRINT": "int:6", + "VSTART": "int:12", + "VSTATUS": "int:18", + "VSTOP": "int:13", + "VSUSP": "int:10", + "VTIME": "int:17", + "VWERASE": "int:4", + "WCONTINUED": "int:4", + "WCOREFLAG": "int:128", + "WEXITED": "int:16", + "WLINUXCLONE": "int:2147483648", + "WNOHANG": "int:1", + "WNOWAIT": "int:8", + "WSTOPPED": "int:2", + "WTRAPPED": "int:32", + "WUNTRACED": "int:2", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/syscall_freebsd_amd64.go b/vendor/github.com/cosmos72/gomacro/imports/syscall_freebsd_amd64.go new file mode 100644 index 0000000..a66c112 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/syscall_freebsd_amd64.go @@ -0,0 +1,4029 @@ +// +build !gccgo + +// this file was generated by gomacro command: import _b "syscall" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "syscall" +) + +// reflection: allow interpreted code to import "syscall" +func init() { + Packages["syscall"] = Package{ + Binds: map[string]Value{ + "AF_APPLETALK": ValueOf(syscall.AF_APPLETALK), + "AF_ARP": ValueOf(syscall.AF_ARP), + "AF_ATM": ValueOf(syscall.AF_ATM), + "AF_BLUETOOTH": ValueOf(syscall.AF_BLUETOOTH), + "AF_CCITT": ValueOf(syscall.AF_CCITT), + "AF_CHAOS": ValueOf(syscall.AF_CHAOS), + "AF_CNT": ValueOf(syscall.AF_CNT), + "AF_COIP": ValueOf(syscall.AF_COIP), + "AF_DATAKIT": ValueOf(syscall.AF_DATAKIT), + "AF_DECnet": ValueOf(syscall.AF_DECnet), + "AF_DLI": ValueOf(syscall.AF_DLI), + "AF_E164": ValueOf(syscall.AF_E164), + "AF_ECMA": ValueOf(syscall.AF_ECMA), + "AF_HYLINK": ValueOf(syscall.AF_HYLINK), + "AF_IEEE80211": ValueOf(syscall.AF_IEEE80211), + "AF_IMPLINK": ValueOf(syscall.AF_IMPLINK), + "AF_INET": ValueOf(syscall.AF_INET), + "AF_INET6": ValueOf(syscall.AF_INET6), + "AF_INET6_SDP": ValueOf(syscall.AF_INET6_SDP), + "AF_INET_SDP": ValueOf(syscall.AF_INET_SDP), + "AF_IPX": ValueOf(syscall.AF_IPX), + "AF_ISDN": ValueOf(syscall.AF_ISDN), + "AF_ISO": ValueOf(syscall.AF_ISO), + "AF_LAT": ValueOf(syscall.AF_LAT), + "AF_LINK": ValueOf(syscall.AF_LINK), + "AF_LOCAL": ValueOf(syscall.AF_LOCAL), + "AF_MAX": ValueOf(syscall.AF_MAX), + "AF_NATM": ValueOf(syscall.AF_NATM), + "AF_NETBIOS": ValueOf(syscall.AF_NETBIOS), + "AF_NETGRAPH": ValueOf(syscall.AF_NETGRAPH), + "AF_OSI": ValueOf(syscall.AF_OSI), + "AF_PUP": ValueOf(syscall.AF_PUP), + "AF_ROUTE": ValueOf(syscall.AF_ROUTE), + "AF_SCLUSTER": ValueOf(syscall.AF_SCLUSTER), + "AF_SIP": ValueOf(syscall.AF_SIP), + "AF_SLOW": ValueOf(syscall.AF_SLOW), + "AF_SNA": ValueOf(syscall.AF_SNA), + "AF_UNIX": ValueOf(syscall.AF_UNIX), + "AF_UNSPEC": ValueOf(syscall.AF_UNSPEC), + "AF_VENDOR00": ValueOf(syscall.AF_VENDOR00), + "AF_VENDOR01": ValueOf(syscall.AF_VENDOR01), + "AF_VENDOR02": ValueOf(syscall.AF_VENDOR02), + "AF_VENDOR03": ValueOf(syscall.AF_VENDOR03), + "AF_VENDOR04": ValueOf(syscall.AF_VENDOR04), + "AF_VENDOR05": ValueOf(syscall.AF_VENDOR05), + "AF_VENDOR06": ValueOf(syscall.AF_VENDOR06), + "AF_VENDOR07": ValueOf(syscall.AF_VENDOR07), + "AF_VENDOR08": ValueOf(syscall.AF_VENDOR08), + "AF_VENDOR09": ValueOf(syscall.AF_VENDOR09), + "AF_VENDOR10": ValueOf(syscall.AF_VENDOR10), + "AF_VENDOR11": ValueOf(syscall.AF_VENDOR11), + "AF_VENDOR12": ValueOf(syscall.AF_VENDOR12), + "AF_VENDOR13": ValueOf(syscall.AF_VENDOR13), + "AF_VENDOR14": ValueOf(syscall.AF_VENDOR14), + "AF_VENDOR15": ValueOf(syscall.AF_VENDOR15), + "AF_VENDOR16": ValueOf(syscall.AF_VENDOR16), + "AF_VENDOR17": ValueOf(syscall.AF_VENDOR17), + "AF_VENDOR18": ValueOf(syscall.AF_VENDOR18), + "AF_VENDOR19": ValueOf(syscall.AF_VENDOR19), + "AF_VENDOR20": ValueOf(syscall.AF_VENDOR20), + "AF_VENDOR21": ValueOf(syscall.AF_VENDOR21), + "AF_VENDOR22": ValueOf(syscall.AF_VENDOR22), + "AF_VENDOR23": ValueOf(syscall.AF_VENDOR23), + "AF_VENDOR24": ValueOf(syscall.AF_VENDOR24), + "AF_VENDOR25": ValueOf(syscall.AF_VENDOR25), + "AF_VENDOR26": ValueOf(syscall.AF_VENDOR26), + "AF_VENDOR27": ValueOf(syscall.AF_VENDOR27), + "AF_VENDOR28": ValueOf(syscall.AF_VENDOR28), + "AF_VENDOR29": ValueOf(syscall.AF_VENDOR29), + "AF_VENDOR30": ValueOf(syscall.AF_VENDOR30), + "AF_VENDOR31": ValueOf(syscall.AF_VENDOR31), + "AF_VENDOR32": ValueOf(syscall.AF_VENDOR32), + "AF_VENDOR33": ValueOf(syscall.AF_VENDOR33), + "AF_VENDOR34": ValueOf(syscall.AF_VENDOR34), + "AF_VENDOR35": ValueOf(syscall.AF_VENDOR35), + "AF_VENDOR36": ValueOf(syscall.AF_VENDOR36), + "AF_VENDOR37": ValueOf(syscall.AF_VENDOR37), + "AF_VENDOR38": ValueOf(syscall.AF_VENDOR38), + "AF_VENDOR39": ValueOf(syscall.AF_VENDOR39), + "AF_VENDOR40": ValueOf(syscall.AF_VENDOR40), + "AF_VENDOR41": ValueOf(syscall.AF_VENDOR41), + "AF_VENDOR42": ValueOf(syscall.AF_VENDOR42), + "AF_VENDOR43": ValueOf(syscall.AF_VENDOR43), + "AF_VENDOR44": ValueOf(syscall.AF_VENDOR44), + "AF_VENDOR45": ValueOf(syscall.AF_VENDOR45), + "AF_VENDOR46": ValueOf(syscall.AF_VENDOR46), + "AF_VENDOR47": ValueOf(syscall.AF_VENDOR47), + "Accept": ValueOf(syscall.Accept), + "Accept4": ValueOf(syscall.Accept4), + "Access": ValueOf(syscall.Access), + "Adjtime": ValueOf(syscall.Adjtime), + "B0": ValueOf(syscall.B0), + "B110": ValueOf(syscall.B110), + "B115200": ValueOf(syscall.B115200), + "B1200": ValueOf(syscall.B1200), + "B134": ValueOf(syscall.B134), + "B14400": ValueOf(syscall.B14400), + "B150": ValueOf(syscall.B150), + "B1800": ValueOf(syscall.B1800), + "B19200": ValueOf(syscall.B19200), + "B200": ValueOf(syscall.B200), + "B230400": ValueOf(syscall.B230400), + "B2400": ValueOf(syscall.B2400), + "B28800": ValueOf(syscall.B28800), + "B300": ValueOf(syscall.B300), + "B38400": ValueOf(syscall.B38400), + "B460800": ValueOf(syscall.B460800), + "B4800": ValueOf(syscall.B4800), + "B50": ValueOf(syscall.B50), + "B57600": ValueOf(syscall.B57600), + "B600": ValueOf(syscall.B600), + "B7200": ValueOf(syscall.B7200), + "B75": ValueOf(syscall.B75), + "B76800": ValueOf(syscall.B76800), + "B921600": ValueOf(syscall.B921600), + "B9600": ValueOf(syscall.B9600), + "BIOCFEEDBACK": ValueOf(uint32(syscall.BIOCFEEDBACK)), + "BIOCFLUSH": ValueOf(syscall.BIOCFLUSH), + "BIOCGBLEN": ValueOf(syscall.BIOCGBLEN), + "BIOCGDIRECTION": ValueOf(syscall.BIOCGDIRECTION), + "BIOCGDLT": ValueOf(syscall.BIOCGDLT), + "BIOCGDLTLIST": ValueOf(uint32(syscall.BIOCGDLTLIST)), + "BIOCGETBUFMODE": ValueOf(syscall.BIOCGETBUFMODE), + "BIOCGETIF": ValueOf(syscall.BIOCGETIF), + "BIOCGETZMAX": ValueOf(syscall.BIOCGETZMAX), + "BIOCGHDRCMPLT": ValueOf(syscall.BIOCGHDRCMPLT), + "BIOCGRSIG": ValueOf(syscall.BIOCGRSIG), + "BIOCGRTIMEOUT": ValueOf(syscall.BIOCGRTIMEOUT), + "BIOCGSEESENT": ValueOf(syscall.BIOCGSEESENT), + "BIOCGSTATS": ValueOf(syscall.BIOCGSTATS), + "BIOCGTSTAMP": ValueOf(syscall.BIOCGTSTAMP), + "BIOCIMMEDIATE": ValueOf(uint32(syscall.BIOCIMMEDIATE)), + "BIOCLOCK": ValueOf(syscall.BIOCLOCK), + "BIOCPROMISC": ValueOf(syscall.BIOCPROMISC), + "BIOCROTZBUF": ValueOf(syscall.BIOCROTZBUF), + "BIOCSBLEN": ValueOf(uint32(syscall.BIOCSBLEN)), + "BIOCSDIRECTION": ValueOf(uint32(syscall.BIOCSDIRECTION)), + "BIOCSDLT": ValueOf(uint32(syscall.BIOCSDLT)), + "BIOCSETBUFMODE": ValueOf(uint32(syscall.BIOCSETBUFMODE)), + "BIOCSETF": ValueOf(uint32(syscall.BIOCSETF)), + "BIOCSETFNR": ValueOf(uint32(syscall.BIOCSETFNR)), + "BIOCSETIF": ValueOf(uint32(syscall.BIOCSETIF)), + "BIOCSETWF": ValueOf(uint32(syscall.BIOCSETWF)), + "BIOCSETZBUF": ValueOf(uint32(syscall.BIOCSETZBUF)), + "BIOCSHDRCMPLT": ValueOf(uint32(syscall.BIOCSHDRCMPLT)), + "BIOCSRSIG": ValueOf(uint32(syscall.BIOCSRSIG)), + "BIOCSRTIMEOUT": ValueOf(uint32(syscall.BIOCSRTIMEOUT)), + "BIOCSSEESENT": ValueOf(uint32(syscall.BIOCSSEESENT)), + "BIOCSTSTAMP": ValueOf(uint32(syscall.BIOCSTSTAMP)), + "BIOCVERSION": ValueOf(syscall.BIOCVERSION), + "BPF_A": ValueOf(syscall.BPF_A), + "BPF_ABS": ValueOf(syscall.BPF_ABS), + "BPF_ADD": ValueOf(syscall.BPF_ADD), + "BPF_ALIGNMENT": ValueOf(syscall.BPF_ALIGNMENT), + "BPF_ALU": ValueOf(syscall.BPF_ALU), + "BPF_AND": ValueOf(syscall.BPF_AND), + "BPF_B": ValueOf(syscall.BPF_B), + "BPF_BUFMODE_BUFFER": ValueOf(syscall.BPF_BUFMODE_BUFFER), + "BPF_BUFMODE_ZBUF": ValueOf(syscall.BPF_BUFMODE_ZBUF), + "BPF_DIV": ValueOf(syscall.BPF_DIV), + "BPF_H": ValueOf(syscall.BPF_H), + "BPF_IMM": ValueOf(syscall.BPF_IMM), + "BPF_IND": ValueOf(syscall.BPF_IND), + "BPF_JA": ValueOf(syscall.BPF_JA), + "BPF_JEQ": ValueOf(syscall.BPF_JEQ), + "BPF_JGE": ValueOf(syscall.BPF_JGE), + "BPF_JGT": ValueOf(syscall.BPF_JGT), + "BPF_JMP": ValueOf(syscall.BPF_JMP), + "BPF_JSET": ValueOf(syscall.BPF_JSET), + "BPF_K": ValueOf(syscall.BPF_K), + "BPF_LD": ValueOf(syscall.BPF_LD), + "BPF_LDX": ValueOf(syscall.BPF_LDX), + "BPF_LEN": ValueOf(syscall.BPF_LEN), + "BPF_LSH": ValueOf(syscall.BPF_LSH), + "BPF_MAJOR_VERSION": ValueOf(syscall.BPF_MAJOR_VERSION), + "BPF_MAXBUFSIZE": ValueOf(syscall.BPF_MAXBUFSIZE), + "BPF_MAXINSNS": ValueOf(syscall.BPF_MAXINSNS), + "BPF_MEM": ValueOf(syscall.BPF_MEM), + "BPF_MEMWORDS": ValueOf(syscall.BPF_MEMWORDS), + "BPF_MINBUFSIZE": ValueOf(syscall.BPF_MINBUFSIZE), + "BPF_MINOR_VERSION": ValueOf(syscall.BPF_MINOR_VERSION), + "BPF_MISC": ValueOf(syscall.BPF_MISC), + "BPF_MSH": ValueOf(syscall.BPF_MSH), + "BPF_MUL": ValueOf(syscall.BPF_MUL), + "BPF_NEG": ValueOf(syscall.BPF_NEG), + "BPF_OR": ValueOf(syscall.BPF_OR), + "BPF_RELEASE": ValueOf(syscall.BPF_RELEASE), + "BPF_RET": ValueOf(syscall.BPF_RET), + "BPF_RSH": ValueOf(syscall.BPF_RSH), + "BPF_ST": ValueOf(syscall.BPF_ST), + "BPF_STX": ValueOf(syscall.BPF_STX), + "BPF_SUB": ValueOf(syscall.BPF_SUB), + "BPF_TAX": ValueOf(syscall.BPF_TAX), + "BPF_TXA": ValueOf(syscall.BPF_TXA), + "BPF_T_BINTIME": ValueOf(syscall.BPF_T_BINTIME), + "BPF_T_BINTIME_FAST": ValueOf(syscall.BPF_T_BINTIME_FAST), + "BPF_T_BINTIME_MONOTONIC": ValueOf(syscall.BPF_T_BINTIME_MONOTONIC), + "BPF_T_BINTIME_MONOTONIC_FAST": ValueOf(syscall.BPF_T_BINTIME_MONOTONIC_FAST), + "BPF_T_FAST": ValueOf(syscall.BPF_T_FAST), + "BPF_T_FLAG_MASK": ValueOf(syscall.BPF_T_FLAG_MASK), + "BPF_T_FORMAT_MASK": ValueOf(syscall.BPF_T_FORMAT_MASK), + "BPF_T_MICROTIME": ValueOf(syscall.BPF_T_MICROTIME), + "BPF_T_MICROTIME_FAST": ValueOf(syscall.BPF_T_MICROTIME_FAST), + "BPF_T_MICROTIME_MONOTONIC": ValueOf(syscall.BPF_T_MICROTIME_MONOTONIC), + "BPF_T_MICROTIME_MONOTONIC_FAST": ValueOf(syscall.BPF_T_MICROTIME_MONOTONIC_FAST), + "BPF_T_MONOTONIC": ValueOf(syscall.BPF_T_MONOTONIC), + "BPF_T_MONOTONIC_FAST": ValueOf(syscall.BPF_T_MONOTONIC_FAST), + "BPF_T_NANOTIME": ValueOf(syscall.BPF_T_NANOTIME), + "BPF_T_NANOTIME_FAST": ValueOf(syscall.BPF_T_NANOTIME_FAST), + "BPF_T_NANOTIME_MONOTONIC": ValueOf(syscall.BPF_T_NANOTIME_MONOTONIC), + "BPF_T_NANOTIME_MONOTONIC_FAST": ValueOf(syscall.BPF_T_NANOTIME_MONOTONIC_FAST), + "BPF_T_NONE": ValueOf(syscall.BPF_T_NONE), + "BPF_T_NORMAL": ValueOf(syscall.BPF_T_NORMAL), + "BPF_W": ValueOf(syscall.BPF_W), + "BPF_X": ValueOf(syscall.BPF_X), + "BRKINT": ValueOf(syscall.BRKINT), + "Bind": ValueOf(syscall.Bind), + "BpfBuflen": ValueOf(syscall.BpfBuflen), + "BpfDatalink": ValueOf(syscall.BpfDatalink), + "BpfHeadercmpl": ValueOf(syscall.BpfHeadercmpl), + "BpfInterface": ValueOf(syscall.BpfInterface), + "BpfJump": ValueOf(syscall.BpfJump), + "BpfStats": ValueOf(syscall.BpfStats), + "BpfStmt": ValueOf(syscall.BpfStmt), + "BpfTimeout": ValueOf(syscall.BpfTimeout), + "BytePtrFromString": ValueOf(syscall.BytePtrFromString), + "ByteSliceFromString": ValueOf(syscall.ByteSliceFromString), + "CFLUSH": ValueOf(syscall.CFLUSH), + "CLOCAL": ValueOf(syscall.CLOCAL), + "CREAD": ValueOf(syscall.CREAD), + "CS5": ValueOf(syscall.CS5), + "CS6": ValueOf(syscall.CS6), + "CS7": ValueOf(syscall.CS7), + "CS8": ValueOf(syscall.CS8), + "CSIZE": ValueOf(syscall.CSIZE), + "CSTART": ValueOf(syscall.CSTART), + "CSTATUS": ValueOf(syscall.CSTATUS), + "CSTOP": ValueOf(syscall.CSTOP), + "CSTOPB": ValueOf(syscall.CSTOPB), + "CSUSP": ValueOf(syscall.CSUSP), + "CTL_MAXNAME": ValueOf(syscall.CTL_MAXNAME), + "CTL_NET": ValueOf(syscall.CTL_NET), + "Chdir": ValueOf(syscall.Chdir), + "CheckBpfVersion": ValueOf(syscall.CheckBpfVersion), + "Chflags": ValueOf(syscall.Chflags), + "Chmod": ValueOf(syscall.Chmod), + "Chown": ValueOf(syscall.Chown), + "Chroot": ValueOf(syscall.Chroot), + "Clearenv": ValueOf(syscall.Clearenv), + "Close": ValueOf(syscall.Close), + "CloseOnExec": ValueOf(syscall.CloseOnExec), + "CmsgLen": ValueOf(syscall.CmsgLen), + "CmsgSpace": ValueOf(syscall.CmsgSpace), + "Connect": ValueOf(syscall.Connect), + "DLT_A429": ValueOf(syscall.DLT_A429), + "DLT_A653_ICM": ValueOf(syscall.DLT_A653_ICM), + "DLT_AIRONET_HEADER": ValueOf(syscall.DLT_AIRONET_HEADER), + "DLT_AOS": ValueOf(syscall.DLT_AOS), + "DLT_APPLE_IP_OVER_IEEE1394": ValueOf(syscall.DLT_APPLE_IP_OVER_IEEE1394), + "DLT_ARCNET": ValueOf(syscall.DLT_ARCNET), + "DLT_ARCNET_LINUX": ValueOf(syscall.DLT_ARCNET_LINUX), + "DLT_ATM_CLIP": ValueOf(syscall.DLT_ATM_CLIP), + "DLT_ATM_RFC1483": ValueOf(syscall.DLT_ATM_RFC1483), + "DLT_AURORA": ValueOf(syscall.DLT_AURORA), + "DLT_AX25": ValueOf(syscall.DLT_AX25), + "DLT_AX25_KISS": ValueOf(syscall.DLT_AX25_KISS), + "DLT_BACNET_MS_TP": ValueOf(syscall.DLT_BACNET_MS_TP), + "DLT_BLUETOOTH_HCI_H4": ValueOf(syscall.DLT_BLUETOOTH_HCI_H4), + "DLT_BLUETOOTH_HCI_H4_WITH_PHDR": ValueOf(syscall.DLT_BLUETOOTH_HCI_H4_WITH_PHDR), + "DLT_CAN20B": ValueOf(syscall.DLT_CAN20B), + "DLT_CAN_SOCKETCAN": ValueOf(syscall.DLT_CAN_SOCKETCAN), + "DLT_CHAOS": ValueOf(syscall.DLT_CHAOS), + "DLT_CHDLC": ValueOf(syscall.DLT_CHDLC), + "DLT_CISCO_IOS": ValueOf(syscall.DLT_CISCO_IOS), + "DLT_C_HDLC": ValueOf(syscall.DLT_C_HDLC), + "DLT_C_HDLC_WITH_DIR": ValueOf(syscall.DLT_C_HDLC_WITH_DIR), + "DLT_DBUS": ValueOf(syscall.DLT_DBUS), + "DLT_DECT": ValueOf(syscall.DLT_DECT), + "DLT_DOCSIS": ValueOf(syscall.DLT_DOCSIS), + "DLT_DVB_CI": ValueOf(syscall.DLT_DVB_CI), + "DLT_ECONET": ValueOf(syscall.DLT_ECONET), + "DLT_EN10MB": ValueOf(syscall.DLT_EN10MB), + "DLT_EN3MB": ValueOf(syscall.DLT_EN3MB), + "DLT_ENC": ValueOf(syscall.DLT_ENC), + "DLT_ERF": ValueOf(syscall.DLT_ERF), + "DLT_ERF_ETH": ValueOf(syscall.DLT_ERF_ETH), + "DLT_ERF_POS": ValueOf(syscall.DLT_ERF_POS), + "DLT_FC_2": ValueOf(syscall.DLT_FC_2), + "DLT_FC_2_WITH_FRAME_DELIMS": ValueOf(syscall.DLT_FC_2_WITH_FRAME_DELIMS), + "DLT_FDDI": ValueOf(syscall.DLT_FDDI), + "DLT_FLEXRAY": ValueOf(syscall.DLT_FLEXRAY), + "DLT_FRELAY": ValueOf(syscall.DLT_FRELAY), + "DLT_FRELAY_WITH_DIR": ValueOf(syscall.DLT_FRELAY_WITH_DIR), + "DLT_GCOM_SERIAL": ValueOf(syscall.DLT_GCOM_SERIAL), + "DLT_GCOM_T1E1": ValueOf(syscall.DLT_GCOM_T1E1), + "DLT_GPF_F": ValueOf(syscall.DLT_GPF_F), + "DLT_GPF_T": ValueOf(syscall.DLT_GPF_T), + "DLT_GPRS_LLC": ValueOf(syscall.DLT_GPRS_LLC), + "DLT_GSMTAP_ABIS": ValueOf(syscall.DLT_GSMTAP_ABIS), + "DLT_GSMTAP_UM": ValueOf(syscall.DLT_GSMTAP_UM), + "DLT_HHDLC": ValueOf(syscall.DLT_HHDLC), + "DLT_IBM_SN": ValueOf(syscall.DLT_IBM_SN), + "DLT_IBM_SP": ValueOf(syscall.DLT_IBM_SP), + "DLT_IEEE802": ValueOf(syscall.DLT_IEEE802), + "DLT_IEEE802_11": ValueOf(syscall.DLT_IEEE802_11), + "DLT_IEEE802_11_RADIO": ValueOf(syscall.DLT_IEEE802_11_RADIO), + "DLT_IEEE802_11_RADIO_AVS": ValueOf(syscall.DLT_IEEE802_11_RADIO_AVS), + "DLT_IEEE802_15_4": ValueOf(syscall.DLT_IEEE802_15_4), + "DLT_IEEE802_15_4_LINUX": ValueOf(syscall.DLT_IEEE802_15_4_LINUX), + "DLT_IEEE802_15_4_NOFCS": ValueOf(syscall.DLT_IEEE802_15_4_NOFCS), + "DLT_IEEE802_15_4_NONASK_PHY": ValueOf(syscall.DLT_IEEE802_15_4_NONASK_PHY), + "DLT_IEEE802_16_MAC_CPS": ValueOf(syscall.DLT_IEEE802_16_MAC_CPS), + "DLT_IEEE802_16_MAC_CPS_RADIO": ValueOf(syscall.DLT_IEEE802_16_MAC_CPS_RADIO), + "DLT_IPFILTER": ValueOf(syscall.DLT_IPFILTER), + "DLT_IPMB": ValueOf(syscall.DLT_IPMB), + "DLT_IPMB_LINUX": ValueOf(syscall.DLT_IPMB_LINUX), + "DLT_IPNET": ValueOf(syscall.DLT_IPNET), + "DLT_IPOIB": ValueOf(syscall.DLT_IPOIB), + "DLT_IPV4": ValueOf(syscall.DLT_IPV4), + "DLT_IPV6": ValueOf(syscall.DLT_IPV6), + "DLT_IP_OVER_FC": ValueOf(syscall.DLT_IP_OVER_FC), + "DLT_JUNIPER_ATM1": ValueOf(syscall.DLT_JUNIPER_ATM1), + "DLT_JUNIPER_ATM2": ValueOf(syscall.DLT_JUNIPER_ATM2), + "DLT_JUNIPER_ATM_CEMIC": ValueOf(syscall.DLT_JUNIPER_ATM_CEMIC), + "DLT_JUNIPER_CHDLC": ValueOf(syscall.DLT_JUNIPER_CHDLC), + "DLT_JUNIPER_ES": ValueOf(syscall.DLT_JUNIPER_ES), + "DLT_JUNIPER_ETHER": ValueOf(syscall.DLT_JUNIPER_ETHER), + "DLT_JUNIPER_FIBRECHANNEL": ValueOf(syscall.DLT_JUNIPER_FIBRECHANNEL), + "DLT_JUNIPER_FRELAY": ValueOf(syscall.DLT_JUNIPER_FRELAY), + "DLT_JUNIPER_GGSN": ValueOf(syscall.DLT_JUNIPER_GGSN), + "DLT_JUNIPER_ISM": ValueOf(syscall.DLT_JUNIPER_ISM), + "DLT_JUNIPER_MFR": ValueOf(syscall.DLT_JUNIPER_MFR), + "DLT_JUNIPER_MLFR": ValueOf(syscall.DLT_JUNIPER_MLFR), + "DLT_JUNIPER_MLPPP": ValueOf(syscall.DLT_JUNIPER_MLPPP), + "DLT_JUNIPER_MONITOR": ValueOf(syscall.DLT_JUNIPER_MONITOR), + "DLT_JUNIPER_PIC_PEER": ValueOf(syscall.DLT_JUNIPER_PIC_PEER), + "DLT_JUNIPER_PPP": ValueOf(syscall.DLT_JUNIPER_PPP), + "DLT_JUNIPER_PPPOE": ValueOf(syscall.DLT_JUNIPER_PPPOE), + "DLT_JUNIPER_PPPOE_ATM": ValueOf(syscall.DLT_JUNIPER_PPPOE_ATM), + "DLT_JUNIPER_SERVICES": ValueOf(syscall.DLT_JUNIPER_SERVICES), + "DLT_JUNIPER_SRX_E2E": ValueOf(syscall.DLT_JUNIPER_SRX_E2E), + "DLT_JUNIPER_ST": ValueOf(syscall.DLT_JUNIPER_ST), + "DLT_JUNIPER_VP": ValueOf(syscall.DLT_JUNIPER_VP), + "DLT_JUNIPER_VS": ValueOf(syscall.DLT_JUNIPER_VS), + "DLT_LAPB_WITH_DIR": ValueOf(syscall.DLT_LAPB_WITH_DIR), + "DLT_LAPD": ValueOf(syscall.DLT_LAPD), + "DLT_LIN": ValueOf(syscall.DLT_LIN), + "DLT_LINUX_EVDEV": ValueOf(syscall.DLT_LINUX_EVDEV), + "DLT_LINUX_IRDA": ValueOf(syscall.DLT_LINUX_IRDA), + "DLT_LINUX_LAPD": ValueOf(syscall.DLT_LINUX_LAPD), + "DLT_LINUX_PPP_WITHDIRECTION": ValueOf(syscall.DLT_LINUX_PPP_WITHDIRECTION), + "DLT_LINUX_SLL": ValueOf(syscall.DLT_LINUX_SLL), + "DLT_LOOP": ValueOf(syscall.DLT_LOOP), + "DLT_LTALK": ValueOf(syscall.DLT_LTALK), + "DLT_MATCHING_MAX": ValueOf(syscall.DLT_MATCHING_MAX), + "DLT_MATCHING_MIN": ValueOf(syscall.DLT_MATCHING_MIN), + "DLT_MFR": ValueOf(syscall.DLT_MFR), + "DLT_MOST": ValueOf(syscall.DLT_MOST), + "DLT_MPEG_2_TS": ValueOf(syscall.DLT_MPEG_2_TS), + "DLT_MPLS": ValueOf(syscall.DLT_MPLS), + "DLT_MTP2": ValueOf(syscall.DLT_MTP2), + "DLT_MTP2_WITH_PHDR": ValueOf(syscall.DLT_MTP2_WITH_PHDR), + "DLT_MTP3": ValueOf(syscall.DLT_MTP3), + "DLT_MUX27010": ValueOf(syscall.DLT_MUX27010), + "DLT_NETANALYZER": ValueOf(syscall.DLT_NETANALYZER), + "DLT_NETANALYZER_TRANSPARENT": ValueOf(syscall.DLT_NETANALYZER_TRANSPARENT), + "DLT_NFC_LLCP": ValueOf(syscall.DLT_NFC_LLCP), + "DLT_NFLOG": ValueOf(syscall.DLT_NFLOG), + "DLT_NG40": ValueOf(syscall.DLT_NG40), + "DLT_NULL": ValueOf(syscall.DLT_NULL), + "DLT_PCI_EXP": ValueOf(syscall.DLT_PCI_EXP), + "DLT_PFLOG": ValueOf(syscall.DLT_PFLOG), + "DLT_PFSYNC": ValueOf(syscall.DLT_PFSYNC), + "DLT_PPI": ValueOf(syscall.DLT_PPI), + "DLT_PPP": ValueOf(syscall.DLT_PPP), + "DLT_PPP_BSDOS": ValueOf(syscall.DLT_PPP_BSDOS), + "DLT_PPP_ETHER": ValueOf(syscall.DLT_PPP_ETHER), + "DLT_PPP_PPPD": ValueOf(syscall.DLT_PPP_PPPD), + "DLT_PPP_SERIAL": ValueOf(syscall.DLT_PPP_SERIAL), + "DLT_PPP_WITH_DIR": ValueOf(syscall.DLT_PPP_WITH_DIR), + "DLT_PPP_WITH_DIRECTION": ValueOf(syscall.DLT_PPP_WITH_DIRECTION), + "DLT_PRISM_HEADER": ValueOf(syscall.DLT_PRISM_HEADER), + "DLT_PRONET": ValueOf(syscall.DLT_PRONET), + "DLT_RAIF1": ValueOf(syscall.DLT_RAIF1), + "DLT_RAW": ValueOf(syscall.DLT_RAW), + "DLT_RIO": ValueOf(syscall.DLT_RIO), + "DLT_SCCP": ValueOf(syscall.DLT_SCCP), + "DLT_SITA": ValueOf(syscall.DLT_SITA), + "DLT_SLIP": ValueOf(syscall.DLT_SLIP), + "DLT_SLIP_BSDOS": ValueOf(syscall.DLT_SLIP_BSDOS), + "DLT_STANAG_5066_D_PDU": ValueOf(syscall.DLT_STANAG_5066_D_PDU), + "DLT_SUNATM": ValueOf(syscall.DLT_SUNATM), + "DLT_SYMANTEC_FIREWALL": ValueOf(syscall.DLT_SYMANTEC_FIREWALL), + "DLT_TZSP": ValueOf(syscall.DLT_TZSP), + "DLT_USB": ValueOf(syscall.DLT_USB), + "DLT_USB_LINUX": ValueOf(syscall.DLT_USB_LINUX), + "DLT_USB_LINUX_MMAPPED": ValueOf(syscall.DLT_USB_LINUX_MMAPPED), + "DLT_USER0": ValueOf(syscall.DLT_USER0), + "DLT_USER1": ValueOf(syscall.DLT_USER1), + "DLT_USER10": ValueOf(syscall.DLT_USER10), + "DLT_USER11": ValueOf(syscall.DLT_USER11), + "DLT_USER12": ValueOf(syscall.DLT_USER12), + "DLT_USER13": ValueOf(syscall.DLT_USER13), + "DLT_USER14": ValueOf(syscall.DLT_USER14), + "DLT_USER15": ValueOf(syscall.DLT_USER15), + "DLT_USER2": ValueOf(syscall.DLT_USER2), + "DLT_USER3": ValueOf(syscall.DLT_USER3), + "DLT_USER4": ValueOf(syscall.DLT_USER4), + "DLT_USER5": ValueOf(syscall.DLT_USER5), + "DLT_USER6": ValueOf(syscall.DLT_USER6), + "DLT_USER7": ValueOf(syscall.DLT_USER7), + "DLT_USER8": ValueOf(syscall.DLT_USER8), + "DLT_USER9": ValueOf(syscall.DLT_USER9), + "DLT_WIHART": ValueOf(syscall.DLT_WIHART), + "DLT_X2E_SERIAL": ValueOf(syscall.DLT_X2E_SERIAL), + "DLT_X2E_XORAYA": ValueOf(syscall.DLT_X2E_XORAYA), + "DT_BLK": ValueOf(syscall.DT_BLK), + "DT_CHR": ValueOf(syscall.DT_CHR), + "DT_DIR": ValueOf(syscall.DT_DIR), + "DT_FIFO": ValueOf(syscall.DT_FIFO), + "DT_LNK": ValueOf(syscall.DT_LNK), + "DT_REG": ValueOf(syscall.DT_REG), + "DT_SOCK": ValueOf(syscall.DT_SOCK), + "DT_UNKNOWN": ValueOf(syscall.DT_UNKNOWN), + "DT_WHT": ValueOf(syscall.DT_WHT), + "Dup": ValueOf(syscall.Dup), + "Dup2": ValueOf(syscall.Dup2), + "E2BIG": ValueOf(syscall.E2BIG), + "EACCES": ValueOf(syscall.EACCES), + "EADDRINUSE": ValueOf(syscall.EADDRINUSE), + "EADDRNOTAVAIL": ValueOf(syscall.EADDRNOTAVAIL), + "EAFNOSUPPORT": ValueOf(syscall.EAFNOSUPPORT), + "EAGAIN": ValueOf(syscall.EAGAIN), + "EALREADY": ValueOf(syscall.EALREADY), + "EAUTH": ValueOf(syscall.EAUTH), + "EBADF": ValueOf(syscall.EBADF), + "EBADMSG": ValueOf(syscall.EBADMSG), + "EBADRPC": ValueOf(syscall.EBADRPC), + "EBUSY": ValueOf(syscall.EBUSY), + "ECANCELED": ValueOf(syscall.ECANCELED), + "ECAPMODE": ValueOf(syscall.ECAPMODE), + "ECHILD": ValueOf(syscall.ECHILD), + "ECHO": ValueOf(syscall.ECHO), + "ECHOCTL": ValueOf(syscall.ECHOCTL), + "ECHOE": ValueOf(syscall.ECHOE), + "ECHOK": ValueOf(syscall.ECHOK), + "ECHOKE": ValueOf(syscall.ECHOKE), + "ECHONL": ValueOf(syscall.ECHONL), + "ECHOPRT": ValueOf(syscall.ECHOPRT), + "ECONNABORTED": ValueOf(syscall.ECONNABORTED), + "ECONNREFUSED": ValueOf(syscall.ECONNREFUSED), + "ECONNRESET": ValueOf(syscall.ECONNRESET), + "EDEADLK": ValueOf(syscall.EDEADLK), + "EDESTADDRREQ": ValueOf(syscall.EDESTADDRREQ), + "EDOM": ValueOf(syscall.EDOM), + "EDOOFUS": ValueOf(syscall.EDOOFUS), + "EDQUOT": ValueOf(syscall.EDQUOT), + "EEXIST": ValueOf(syscall.EEXIST), + "EFAULT": ValueOf(syscall.EFAULT), + "EFBIG": ValueOf(syscall.EFBIG), + "EFTYPE": ValueOf(syscall.EFTYPE), + "EHOSTDOWN": ValueOf(syscall.EHOSTDOWN), + "EHOSTUNREACH": ValueOf(syscall.EHOSTUNREACH), + "EIDRM": ValueOf(syscall.EIDRM), + "EILSEQ": ValueOf(syscall.EILSEQ), + "EINPROGRESS": ValueOf(syscall.EINPROGRESS), + "EINTR": ValueOf(syscall.EINTR), + "EINVAL": ValueOf(syscall.EINVAL), + "EIO": ValueOf(syscall.EIO), + "EISCONN": ValueOf(syscall.EISCONN), + "EISDIR": ValueOf(syscall.EISDIR), + "ELAST": ValueOf(syscall.ELAST), + "ELOOP": ValueOf(syscall.ELOOP), + "EMFILE": ValueOf(syscall.EMFILE), + "EMLINK": ValueOf(syscall.EMLINK), + "EMSGSIZE": ValueOf(syscall.EMSGSIZE), + "EMULTIHOP": ValueOf(syscall.EMULTIHOP), + "ENAMETOOLONG": ValueOf(syscall.ENAMETOOLONG), + "ENEEDAUTH": ValueOf(syscall.ENEEDAUTH), + "ENETDOWN": ValueOf(syscall.ENETDOWN), + "ENETRESET": ValueOf(syscall.ENETRESET), + "ENETUNREACH": ValueOf(syscall.ENETUNREACH), + "ENFILE": ValueOf(syscall.ENFILE), + "ENOATTR": ValueOf(syscall.ENOATTR), + "ENOBUFS": ValueOf(syscall.ENOBUFS), + "ENODEV": ValueOf(syscall.ENODEV), + "ENOENT": ValueOf(syscall.ENOENT), + "ENOEXEC": ValueOf(syscall.ENOEXEC), + "ENOLCK": ValueOf(syscall.ENOLCK), + "ENOLINK": ValueOf(syscall.ENOLINK), + "ENOMEM": ValueOf(syscall.ENOMEM), + "ENOMSG": ValueOf(syscall.ENOMSG), + "ENOPROTOOPT": ValueOf(syscall.ENOPROTOOPT), + "ENOSPC": ValueOf(syscall.ENOSPC), + "ENOSYS": ValueOf(syscall.ENOSYS), + "ENOTBLK": ValueOf(syscall.ENOTBLK), + "ENOTCAPABLE": ValueOf(syscall.ENOTCAPABLE), + "ENOTCONN": ValueOf(syscall.ENOTCONN), + "ENOTDIR": ValueOf(syscall.ENOTDIR), + "ENOTEMPTY": ValueOf(syscall.ENOTEMPTY), + "ENOTRECOVERABLE": ValueOf(syscall.ENOTRECOVERABLE), + "ENOTSOCK": ValueOf(syscall.ENOTSOCK), + "ENOTSUP": ValueOf(syscall.ENOTSUP), + "ENOTTY": ValueOf(syscall.ENOTTY), + "ENXIO": ValueOf(syscall.ENXIO), + "EOPNOTSUPP": ValueOf(syscall.EOPNOTSUPP), + "EOVERFLOW": ValueOf(syscall.EOVERFLOW), + "EOWNERDEAD": ValueOf(syscall.EOWNERDEAD), + "EPERM": ValueOf(syscall.EPERM), + "EPFNOSUPPORT": ValueOf(syscall.EPFNOSUPPORT), + "EPIPE": ValueOf(syscall.EPIPE), + "EPROCLIM": ValueOf(syscall.EPROCLIM), + "EPROCUNAVAIL": ValueOf(syscall.EPROCUNAVAIL), + "EPROGMISMATCH": ValueOf(syscall.EPROGMISMATCH), + "EPROGUNAVAIL": ValueOf(syscall.EPROGUNAVAIL), + "EPROTO": ValueOf(syscall.EPROTO), + "EPROTONOSUPPORT": ValueOf(syscall.EPROTONOSUPPORT), + "EPROTOTYPE": ValueOf(syscall.EPROTOTYPE), + "ERANGE": ValueOf(syscall.ERANGE), + "EREMOTE": ValueOf(syscall.EREMOTE), + "EROFS": ValueOf(syscall.EROFS), + "ERPCMISMATCH": ValueOf(syscall.ERPCMISMATCH), + "ESHUTDOWN": ValueOf(syscall.ESHUTDOWN), + "ESOCKTNOSUPPORT": ValueOf(syscall.ESOCKTNOSUPPORT), + "ESPIPE": ValueOf(syscall.ESPIPE), + "ESRCH": ValueOf(syscall.ESRCH), + "ESTALE": ValueOf(syscall.ESTALE), + "ETIMEDOUT": ValueOf(syscall.ETIMEDOUT), + "ETOOMANYREFS": ValueOf(syscall.ETOOMANYREFS), + "ETXTBSY": ValueOf(syscall.ETXTBSY), + "EUSERS": ValueOf(syscall.EUSERS), + "EVFILT_AIO": ValueOf(syscall.EVFILT_AIO), + "EVFILT_FS": ValueOf(syscall.EVFILT_FS), + "EVFILT_LIO": ValueOf(syscall.EVFILT_LIO), + "EVFILT_PROC": ValueOf(syscall.EVFILT_PROC), + "EVFILT_READ": ValueOf(syscall.EVFILT_READ), + "EVFILT_SIGNAL": ValueOf(syscall.EVFILT_SIGNAL), + "EVFILT_SYSCOUNT": ValueOf(syscall.EVFILT_SYSCOUNT), + "EVFILT_TIMER": ValueOf(syscall.EVFILT_TIMER), + "EVFILT_USER": ValueOf(syscall.EVFILT_USER), + "EVFILT_VNODE": ValueOf(syscall.EVFILT_VNODE), + "EVFILT_WRITE": ValueOf(syscall.EVFILT_WRITE), + "EV_ADD": ValueOf(syscall.EV_ADD), + "EV_CLEAR": ValueOf(syscall.EV_CLEAR), + "EV_DELETE": ValueOf(syscall.EV_DELETE), + "EV_DISABLE": ValueOf(syscall.EV_DISABLE), + "EV_DISPATCH": ValueOf(syscall.EV_DISPATCH), + "EV_DROP": ValueOf(syscall.EV_DROP), + "EV_ENABLE": ValueOf(syscall.EV_ENABLE), + "EV_EOF": ValueOf(syscall.EV_EOF), + "EV_ERROR": ValueOf(syscall.EV_ERROR), + "EV_FLAG1": ValueOf(syscall.EV_FLAG1), + "EV_ONESHOT": ValueOf(syscall.EV_ONESHOT), + "EV_RECEIPT": ValueOf(syscall.EV_RECEIPT), + "EV_SYSFLAGS": ValueOf(syscall.EV_SYSFLAGS), + "EWOULDBLOCK": ValueOf(syscall.EWOULDBLOCK), + "EXDEV": ValueOf(syscall.EXDEV), + "EXTA": ValueOf(syscall.EXTA), + "EXTB": ValueOf(syscall.EXTB), + "EXTPROC": ValueOf(syscall.EXTPROC), + "Environ": ValueOf(syscall.Environ), + "Exec": ValueOf(syscall.Exec), + "Exit": ValueOf(syscall.Exit), + "FD_CLOEXEC": ValueOf(syscall.FD_CLOEXEC), + "FD_SETSIZE": ValueOf(syscall.FD_SETSIZE), + "FLUSHO": ValueOf(syscall.FLUSHO), + "F_CANCEL": ValueOf(syscall.F_CANCEL), + "F_DUP2FD": ValueOf(syscall.F_DUP2FD), + "F_DUP2FD_CLOEXEC": ValueOf(syscall.F_DUP2FD_CLOEXEC), + "F_DUPFD": ValueOf(syscall.F_DUPFD), + "F_DUPFD_CLOEXEC": ValueOf(syscall.F_DUPFD_CLOEXEC), + "F_GETFD": ValueOf(syscall.F_GETFD), + "F_GETFL": ValueOf(syscall.F_GETFL), + "F_GETLK": ValueOf(syscall.F_GETLK), + "F_GETOWN": ValueOf(syscall.F_GETOWN), + "F_OGETLK": ValueOf(syscall.F_OGETLK), + "F_OK": ValueOf(syscall.F_OK), + "F_OSETLK": ValueOf(syscall.F_OSETLK), + "F_OSETLKW": ValueOf(syscall.F_OSETLKW), + "F_RDAHEAD": ValueOf(syscall.F_RDAHEAD), + "F_RDLCK": ValueOf(syscall.F_RDLCK), + "F_READAHEAD": ValueOf(syscall.F_READAHEAD), + "F_SETFD": ValueOf(syscall.F_SETFD), + "F_SETFL": ValueOf(syscall.F_SETFL), + "F_SETLK": ValueOf(syscall.F_SETLK), + "F_SETLKW": ValueOf(syscall.F_SETLKW), + "F_SETLK_REMOTE": ValueOf(syscall.F_SETLK_REMOTE), + "F_SETOWN": ValueOf(syscall.F_SETOWN), + "F_UNLCK": ValueOf(syscall.F_UNLCK), + "F_UNLCKSYS": ValueOf(syscall.F_UNLCKSYS), + "F_WRLCK": ValueOf(syscall.F_WRLCK), + "Fchdir": ValueOf(syscall.Fchdir), + "Fchflags": ValueOf(syscall.Fchflags), + "Fchmod": ValueOf(syscall.Fchmod), + "Fchown": ValueOf(syscall.Fchown), + "FcntlFlock": ValueOf(syscall.FcntlFlock), + "Flock": ValueOf(syscall.Flock), + "FlushBpf": ValueOf(syscall.FlushBpf), + "ForkExec": ValueOf(syscall.ForkExec), + "ForkLock": ValueOf(&syscall.ForkLock).Elem(), + "Fpathconf": ValueOf(syscall.Fpathconf), + "Fstat": ValueOf(syscall.Fstat), + "Fstatfs": ValueOf(syscall.Fstatfs), + "Fsync": ValueOf(syscall.Fsync), + "Ftruncate": ValueOf(syscall.Ftruncate), + "Futimes": ValueOf(syscall.Futimes), + "Getdirentries": ValueOf(syscall.Getdirentries), + "Getdtablesize": ValueOf(syscall.Getdtablesize), + "Getegid": ValueOf(syscall.Getegid), + "Getenv": ValueOf(syscall.Getenv), + "Geteuid": ValueOf(syscall.Geteuid), + "Getfsstat": ValueOf(syscall.Getfsstat), + "Getgid": ValueOf(syscall.Getgid), + "Getgroups": ValueOf(syscall.Getgroups), + "Getpagesize": ValueOf(syscall.Getpagesize), + "Getpeername": ValueOf(syscall.Getpeername), + "Getpgid": ValueOf(syscall.Getpgid), + "Getpgrp": ValueOf(syscall.Getpgrp), + "Getpid": ValueOf(syscall.Getpid), + "Getppid": ValueOf(syscall.Getppid), + "Getpriority": ValueOf(syscall.Getpriority), + "Getrlimit": ValueOf(syscall.Getrlimit), + "Getrusage": ValueOf(syscall.Getrusage), + "Getsid": ValueOf(syscall.Getsid), + "Getsockname": ValueOf(syscall.Getsockname), + "GetsockoptByte": ValueOf(syscall.GetsockoptByte), + "GetsockoptICMPv6Filter": ValueOf(syscall.GetsockoptICMPv6Filter), + "GetsockoptIPMreq": ValueOf(syscall.GetsockoptIPMreq), + "GetsockoptIPMreqn": ValueOf(syscall.GetsockoptIPMreqn), + "GetsockoptIPv6MTUInfo": ValueOf(syscall.GetsockoptIPv6MTUInfo), + "GetsockoptIPv6Mreq": ValueOf(syscall.GetsockoptIPv6Mreq), + "GetsockoptInet4Addr": ValueOf(syscall.GetsockoptInet4Addr), + "GetsockoptInt": ValueOf(syscall.GetsockoptInt), + "Gettimeofday": ValueOf(syscall.Gettimeofday), + "Getuid": ValueOf(syscall.Getuid), + "Getwd": ValueOf(syscall.Getwd), + "HUPCL": ValueOf(syscall.HUPCL), + "ICANON": ValueOf(syscall.ICANON), + "ICMP6_FILTER": ValueOf(syscall.ICMP6_FILTER), + "ICRNL": ValueOf(syscall.ICRNL), + "IEXTEN": ValueOf(syscall.IEXTEN), + "IFAN_ARRIVAL": ValueOf(syscall.IFAN_ARRIVAL), + "IFAN_DEPARTURE": ValueOf(syscall.IFAN_DEPARTURE), + "IFF_ALLMULTI": ValueOf(syscall.IFF_ALLMULTI), + "IFF_ALTPHYS": ValueOf(syscall.IFF_ALTPHYS), + "IFF_BROADCAST": ValueOf(syscall.IFF_BROADCAST), + "IFF_CANTCHANGE": ValueOf(syscall.IFF_CANTCHANGE), + "IFF_CANTCONFIG": ValueOf(syscall.IFF_CANTCONFIG), + "IFF_DEBUG": ValueOf(syscall.IFF_DEBUG), + "IFF_DRV_OACTIVE": ValueOf(syscall.IFF_DRV_OACTIVE), + "IFF_DRV_RUNNING": ValueOf(syscall.IFF_DRV_RUNNING), + "IFF_DYING": ValueOf(syscall.IFF_DYING), + "IFF_LINK0": ValueOf(syscall.IFF_LINK0), + "IFF_LINK1": ValueOf(syscall.IFF_LINK1), + "IFF_LINK2": ValueOf(syscall.IFF_LINK2), + "IFF_LOOPBACK": ValueOf(syscall.IFF_LOOPBACK), + "IFF_MONITOR": ValueOf(syscall.IFF_MONITOR), + "IFF_MULTICAST": ValueOf(syscall.IFF_MULTICAST), + "IFF_NOARP": ValueOf(syscall.IFF_NOARP), + "IFF_OACTIVE": ValueOf(syscall.IFF_OACTIVE), + "IFF_POINTOPOINT": ValueOf(syscall.IFF_POINTOPOINT), + "IFF_PPROMISC": ValueOf(syscall.IFF_PPROMISC), + "IFF_PROMISC": ValueOf(syscall.IFF_PROMISC), + "IFF_RENAMING": ValueOf(syscall.IFF_RENAMING), + "IFF_RUNNING": ValueOf(syscall.IFF_RUNNING), + "IFF_SIMPLEX": ValueOf(syscall.IFF_SIMPLEX), + "IFF_SMART": ValueOf(syscall.IFF_SMART), + "IFF_STATICARP": ValueOf(syscall.IFF_STATICARP), + "IFF_UP": ValueOf(syscall.IFF_UP), + "IFNAMSIZ": ValueOf(syscall.IFNAMSIZ), + "IFT_1822": ValueOf(syscall.IFT_1822), + "IFT_A12MPPSWITCH": ValueOf(syscall.IFT_A12MPPSWITCH), + "IFT_AAL2": ValueOf(syscall.IFT_AAL2), + "IFT_AAL5": ValueOf(syscall.IFT_AAL5), + "IFT_ADSL": ValueOf(syscall.IFT_ADSL), + "IFT_AFLANE8023": ValueOf(syscall.IFT_AFLANE8023), + "IFT_AFLANE8025": ValueOf(syscall.IFT_AFLANE8025), + "IFT_ARAP": ValueOf(syscall.IFT_ARAP), + "IFT_ARCNET": ValueOf(syscall.IFT_ARCNET), + "IFT_ARCNETPLUS": ValueOf(syscall.IFT_ARCNETPLUS), + "IFT_ASYNC": ValueOf(syscall.IFT_ASYNC), + "IFT_ATM": ValueOf(syscall.IFT_ATM), + "IFT_ATMDXI": ValueOf(syscall.IFT_ATMDXI), + "IFT_ATMFUNI": ValueOf(syscall.IFT_ATMFUNI), + "IFT_ATMIMA": ValueOf(syscall.IFT_ATMIMA), + "IFT_ATMLOGICAL": ValueOf(syscall.IFT_ATMLOGICAL), + "IFT_ATMRADIO": ValueOf(syscall.IFT_ATMRADIO), + "IFT_ATMSUBINTERFACE": ValueOf(syscall.IFT_ATMSUBINTERFACE), + "IFT_ATMVCIENDPT": ValueOf(syscall.IFT_ATMVCIENDPT), + "IFT_ATMVIRTUAL": ValueOf(syscall.IFT_ATMVIRTUAL), + "IFT_BGPPOLICYACCOUNTING": ValueOf(syscall.IFT_BGPPOLICYACCOUNTING), + "IFT_BRIDGE": ValueOf(syscall.IFT_BRIDGE), + "IFT_BSC": ValueOf(syscall.IFT_BSC), + "IFT_CARP": ValueOf(syscall.IFT_CARP), + "IFT_CCTEMUL": ValueOf(syscall.IFT_CCTEMUL), + "IFT_CEPT": ValueOf(syscall.IFT_CEPT), + "IFT_CES": ValueOf(syscall.IFT_CES), + "IFT_CHANNEL": ValueOf(syscall.IFT_CHANNEL), + "IFT_CNR": ValueOf(syscall.IFT_CNR), + "IFT_COFFEE": ValueOf(syscall.IFT_COFFEE), + "IFT_COMPOSITELINK": ValueOf(syscall.IFT_COMPOSITELINK), + "IFT_DCN": ValueOf(syscall.IFT_DCN), + "IFT_DIGITALPOWERLINE": ValueOf(syscall.IFT_DIGITALPOWERLINE), + "IFT_DIGITALWRAPPEROVERHEADCHANNEL": ValueOf(syscall.IFT_DIGITALWRAPPEROVERHEADCHANNEL), + "IFT_DLSW": ValueOf(syscall.IFT_DLSW), + "IFT_DOCSCABLEDOWNSTREAM": ValueOf(syscall.IFT_DOCSCABLEDOWNSTREAM), + "IFT_DOCSCABLEMACLAYER": ValueOf(syscall.IFT_DOCSCABLEMACLAYER), + "IFT_DOCSCABLEUPSTREAM": ValueOf(syscall.IFT_DOCSCABLEUPSTREAM), + "IFT_DS0": ValueOf(syscall.IFT_DS0), + "IFT_DS0BUNDLE": ValueOf(syscall.IFT_DS0BUNDLE), + "IFT_DS1FDL": ValueOf(syscall.IFT_DS1FDL), + "IFT_DS3": ValueOf(syscall.IFT_DS3), + "IFT_DTM": ValueOf(syscall.IFT_DTM), + "IFT_DVBASILN": ValueOf(syscall.IFT_DVBASILN), + "IFT_DVBASIOUT": ValueOf(syscall.IFT_DVBASIOUT), + "IFT_DVBRCCDOWNSTREAM": ValueOf(syscall.IFT_DVBRCCDOWNSTREAM), + "IFT_DVBRCCMACLAYER": ValueOf(syscall.IFT_DVBRCCMACLAYER), + "IFT_DVBRCCUPSTREAM": ValueOf(syscall.IFT_DVBRCCUPSTREAM), + "IFT_ENC": ValueOf(syscall.IFT_ENC), + "IFT_EON": ValueOf(syscall.IFT_EON), + "IFT_EPLRS": ValueOf(syscall.IFT_EPLRS), + "IFT_ESCON": ValueOf(syscall.IFT_ESCON), + "IFT_ETHER": ValueOf(syscall.IFT_ETHER), + "IFT_FAITH": ValueOf(syscall.IFT_FAITH), + "IFT_FAST": ValueOf(syscall.IFT_FAST), + "IFT_FASTETHER": ValueOf(syscall.IFT_FASTETHER), + "IFT_FASTETHERFX": ValueOf(syscall.IFT_FASTETHERFX), + "IFT_FDDI": ValueOf(syscall.IFT_FDDI), + "IFT_FIBRECHANNEL": ValueOf(syscall.IFT_FIBRECHANNEL), + "IFT_FRAMERELAYINTERCONNECT": ValueOf(syscall.IFT_FRAMERELAYINTERCONNECT), + "IFT_FRAMERELAYMPI": ValueOf(syscall.IFT_FRAMERELAYMPI), + "IFT_FRDLCIENDPT": ValueOf(syscall.IFT_FRDLCIENDPT), + "IFT_FRELAY": ValueOf(syscall.IFT_FRELAY), + "IFT_FRELAYDCE": ValueOf(syscall.IFT_FRELAYDCE), + "IFT_FRF16MFRBUNDLE": ValueOf(syscall.IFT_FRF16MFRBUNDLE), + "IFT_FRFORWARD": ValueOf(syscall.IFT_FRFORWARD), + "IFT_G703AT2MB": ValueOf(syscall.IFT_G703AT2MB), + "IFT_G703AT64K": ValueOf(syscall.IFT_G703AT64K), + "IFT_GIF": ValueOf(syscall.IFT_GIF), + "IFT_GIGABITETHERNET": ValueOf(syscall.IFT_GIGABITETHERNET), + "IFT_GR303IDT": ValueOf(syscall.IFT_GR303IDT), + "IFT_GR303RDT": ValueOf(syscall.IFT_GR303RDT), + "IFT_H323GATEKEEPER": ValueOf(syscall.IFT_H323GATEKEEPER), + "IFT_H323PROXY": ValueOf(syscall.IFT_H323PROXY), + "IFT_HDH1822": ValueOf(syscall.IFT_HDH1822), + "IFT_HDLC": ValueOf(syscall.IFT_HDLC), + "IFT_HDSL2": ValueOf(syscall.IFT_HDSL2), + "IFT_HIPERLAN2": ValueOf(syscall.IFT_HIPERLAN2), + "IFT_HIPPI": ValueOf(syscall.IFT_HIPPI), + "IFT_HIPPIINTERFACE": ValueOf(syscall.IFT_HIPPIINTERFACE), + "IFT_HOSTPAD": ValueOf(syscall.IFT_HOSTPAD), + "IFT_HSSI": ValueOf(syscall.IFT_HSSI), + "IFT_HY": ValueOf(syscall.IFT_HY), + "IFT_IBM370PARCHAN": ValueOf(syscall.IFT_IBM370PARCHAN), + "IFT_IDSL": ValueOf(syscall.IFT_IDSL), + "IFT_IEEE1394": ValueOf(syscall.IFT_IEEE1394), + "IFT_IEEE80211": ValueOf(syscall.IFT_IEEE80211), + "IFT_IEEE80212": ValueOf(syscall.IFT_IEEE80212), + "IFT_IEEE8023ADLAG": ValueOf(syscall.IFT_IEEE8023ADLAG), + "IFT_IFGSN": ValueOf(syscall.IFT_IFGSN), + "IFT_IMT": ValueOf(syscall.IFT_IMT), + "IFT_INFINIBAND": ValueOf(syscall.IFT_INFINIBAND), + "IFT_INTERLEAVE": ValueOf(syscall.IFT_INTERLEAVE), + "IFT_IP": ValueOf(syscall.IFT_IP), + "IFT_IPFORWARD": ValueOf(syscall.IFT_IPFORWARD), + "IFT_IPOVERATM": ValueOf(syscall.IFT_IPOVERATM), + "IFT_IPOVERCDLC": ValueOf(syscall.IFT_IPOVERCDLC), + "IFT_IPOVERCLAW": ValueOf(syscall.IFT_IPOVERCLAW), + "IFT_IPSWITCH": ValueOf(syscall.IFT_IPSWITCH), + "IFT_IPXIP": ValueOf(syscall.IFT_IPXIP), + "IFT_ISDN": ValueOf(syscall.IFT_ISDN), + "IFT_ISDNBASIC": ValueOf(syscall.IFT_ISDNBASIC), + "IFT_ISDNPRIMARY": ValueOf(syscall.IFT_ISDNPRIMARY), + "IFT_ISDNS": ValueOf(syscall.IFT_ISDNS), + "IFT_ISDNU": ValueOf(syscall.IFT_ISDNU), + "IFT_ISO88022LLC": ValueOf(syscall.IFT_ISO88022LLC), + "IFT_ISO88023": ValueOf(syscall.IFT_ISO88023), + "IFT_ISO88024": ValueOf(syscall.IFT_ISO88024), + "IFT_ISO88025": ValueOf(syscall.IFT_ISO88025), + "IFT_ISO88025CRFPINT": ValueOf(syscall.IFT_ISO88025CRFPINT), + "IFT_ISO88025DTR": ValueOf(syscall.IFT_ISO88025DTR), + "IFT_ISO88025FIBER": ValueOf(syscall.IFT_ISO88025FIBER), + "IFT_ISO88026": ValueOf(syscall.IFT_ISO88026), + "IFT_ISUP": ValueOf(syscall.IFT_ISUP), + "IFT_L2VLAN": ValueOf(syscall.IFT_L2VLAN), + "IFT_L3IPVLAN": ValueOf(syscall.IFT_L3IPVLAN), + "IFT_L3IPXVLAN": ValueOf(syscall.IFT_L3IPXVLAN), + "IFT_LAPB": ValueOf(syscall.IFT_LAPB), + "IFT_LAPD": ValueOf(syscall.IFT_LAPD), + "IFT_LAPF": ValueOf(syscall.IFT_LAPF), + "IFT_LOCALTALK": ValueOf(syscall.IFT_LOCALTALK), + "IFT_LOOP": ValueOf(syscall.IFT_LOOP), + "IFT_MEDIAMAILOVERIP": ValueOf(syscall.IFT_MEDIAMAILOVERIP), + "IFT_MFSIGLINK": ValueOf(syscall.IFT_MFSIGLINK), + "IFT_MIOX25": ValueOf(syscall.IFT_MIOX25), + "IFT_MODEM": ValueOf(syscall.IFT_MODEM), + "IFT_MPC": ValueOf(syscall.IFT_MPC), + "IFT_MPLS": ValueOf(syscall.IFT_MPLS), + "IFT_MPLSTUNNEL": ValueOf(syscall.IFT_MPLSTUNNEL), + "IFT_MSDSL": ValueOf(syscall.IFT_MSDSL), + "IFT_MVL": ValueOf(syscall.IFT_MVL), + "IFT_MYRINET": ValueOf(syscall.IFT_MYRINET), + "IFT_NFAS": ValueOf(syscall.IFT_NFAS), + "IFT_NSIP": ValueOf(syscall.IFT_NSIP), + "IFT_OPTICALCHANNEL": ValueOf(syscall.IFT_OPTICALCHANNEL), + "IFT_OPTICALTRANSPORT": ValueOf(syscall.IFT_OPTICALTRANSPORT), + "IFT_OTHER": ValueOf(syscall.IFT_OTHER), + "IFT_P10": ValueOf(syscall.IFT_P10), + "IFT_P80": ValueOf(syscall.IFT_P80), + "IFT_PARA": ValueOf(syscall.IFT_PARA), + "IFT_PFLOG": ValueOf(syscall.IFT_PFLOG), + "IFT_PFSYNC": ValueOf(syscall.IFT_PFSYNC), + "IFT_PLC": ValueOf(syscall.IFT_PLC), + "IFT_POS": ValueOf(syscall.IFT_POS), + "IFT_PPP": ValueOf(syscall.IFT_PPP), + "IFT_PPPMULTILINKBUNDLE": ValueOf(syscall.IFT_PPPMULTILINKBUNDLE), + "IFT_PROPBWAP2MP": ValueOf(syscall.IFT_PROPBWAP2MP), + "IFT_PROPCNLS": ValueOf(syscall.IFT_PROPCNLS), + "IFT_PROPDOCSWIRELESSDOWNSTREAM": ValueOf(syscall.IFT_PROPDOCSWIRELESSDOWNSTREAM), + "IFT_PROPDOCSWIRELESSMACLAYER": ValueOf(syscall.IFT_PROPDOCSWIRELESSMACLAYER), + "IFT_PROPDOCSWIRELESSUPSTREAM": ValueOf(syscall.IFT_PROPDOCSWIRELESSUPSTREAM), + "IFT_PROPMUX": ValueOf(syscall.IFT_PROPMUX), + "IFT_PROPVIRTUAL": ValueOf(syscall.IFT_PROPVIRTUAL), + "IFT_PROPWIRELESSP2P": ValueOf(syscall.IFT_PROPWIRELESSP2P), + "IFT_PTPSERIAL": ValueOf(syscall.IFT_PTPSERIAL), + "IFT_PVC": ValueOf(syscall.IFT_PVC), + "IFT_QLLC": ValueOf(syscall.IFT_QLLC), + "IFT_RADIOMAC": ValueOf(syscall.IFT_RADIOMAC), + "IFT_RADSL": ValueOf(syscall.IFT_RADSL), + "IFT_REACHDSL": ValueOf(syscall.IFT_REACHDSL), + "IFT_RFC1483": ValueOf(syscall.IFT_RFC1483), + "IFT_RS232": ValueOf(syscall.IFT_RS232), + "IFT_RSRB": ValueOf(syscall.IFT_RSRB), + "IFT_SDLC": ValueOf(syscall.IFT_SDLC), + "IFT_SDSL": ValueOf(syscall.IFT_SDSL), + "IFT_SHDSL": ValueOf(syscall.IFT_SHDSL), + "IFT_SIP": ValueOf(syscall.IFT_SIP), + "IFT_SLIP": ValueOf(syscall.IFT_SLIP), + "IFT_SMDSDXI": ValueOf(syscall.IFT_SMDSDXI), + "IFT_SMDSICIP": ValueOf(syscall.IFT_SMDSICIP), + "IFT_SONET": ValueOf(syscall.IFT_SONET), + "IFT_SONETOVERHEADCHANNEL": ValueOf(syscall.IFT_SONETOVERHEADCHANNEL), + "IFT_SONETPATH": ValueOf(syscall.IFT_SONETPATH), + "IFT_SONETVT": ValueOf(syscall.IFT_SONETVT), + "IFT_SRP": ValueOf(syscall.IFT_SRP), + "IFT_SS7SIGLINK": ValueOf(syscall.IFT_SS7SIGLINK), + "IFT_STACKTOSTACK": ValueOf(syscall.IFT_STACKTOSTACK), + "IFT_STARLAN": ValueOf(syscall.IFT_STARLAN), + "IFT_STF": ValueOf(syscall.IFT_STF), + "IFT_T1": ValueOf(syscall.IFT_T1), + "IFT_TDLC": ValueOf(syscall.IFT_TDLC), + "IFT_TERMPAD": ValueOf(syscall.IFT_TERMPAD), + "IFT_TR008": ValueOf(syscall.IFT_TR008), + "IFT_TRANSPHDLC": ValueOf(syscall.IFT_TRANSPHDLC), + "IFT_TUNNEL": ValueOf(syscall.IFT_TUNNEL), + "IFT_ULTRA": ValueOf(syscall.IFT_ULTRA), + "IFT_USB": ValueOf(syscall.IFT_USB), + "IFT_V11": ValueOf(syscall.IFT_V11), + "IFT_V35": ValueOf(syscall.IFT_V35), + "IFT_V36": ValueOf(syscall.IFT_V36), + "IFT_V37": ValueOf(syscall.IFT_V37), + "IFT_VDSL": ValueOf(syscall.IFT_VDSL), + "IFT_VIRTUALIPADDRESS": ValueOf(syscall.IFT_VIRTUALIPADDRESS), + "IFT_VOICEEM": ValueOf(syscall.IFT_VOICEEM), + "IFT_VOICEENCAP": ValueOf(syscall.IFT_VOICEENCAP), + "IFT_VOICEFXO": ValueOf(syscall.IFT_VOICEFXO), + "IFT_VOICEFXS": ValueOf(syscall.IFT_VOICEFXS), + "IFT_VOICEOVERATM": ValueOf(syscall.IFT_VOICEOVERATM), + "IFT_VOICEOVERFRAMERELAY": ValueOf(syscall.IFT_VOICEOVERFRAMERELAY), + "IFT_VOICEOVERIP": ValueOf(syscall.IFT_VOICEOVERIP), + "IFT_X213": ValueOf(syscall.IFT_X213), + "IFT_X25": ValueOf(syscall.IFT_X25), + "IFT_X25DDN": ValueOf(syscall.IFT_X25DDN), + "IFT_X25HUNTGROUP": ValueOf(syscall.IFT_X25HUNTGROUP), + "IFT_X25MLP": ValueOf(syscall.IFT_X25MLP), + "IFT_X25PLE": ValueOf(syscall.IFT_X25PLE), + "IFT_XETHER": ValueOf(syscall.IFT_XETHER), + "IGNBRK": ValueOf(syscall.IGNBRK), + "IGNCR": ValueOf(syscall.IGNCR), + "IGNPAR": ValueOf(syscall.IGNPAR), + "IMAXBEL": ValueOf(syscall.IMAXBEL), + "INLCR": ValueOf(syscall.INLCR), + "INPCK": ValueOf(syscall.INPCK), + "IN_CLASSA_HOST": ValueOf(syscall.IN_CLASSA_HOST), + "IN_CLASSA_MAX": ValueOf(syscall.IN_CLASSA_MAX), + "IN_CLASSA_NET": ValueOf(uint32(syscall.IN_CLASSA_NET)), + "IN_CLASSA_NSHIFT": ValueOf(syscall.IN_CLASSA_NSHIFT), + "IN_CLASSB_HOST": ValueOf(syscall.IN_CLASSB_HOST), + "IN_CLASSB_MAX": ValueOf(syscall.IN_CLASSB_MAX), + "IN_CLASSB_NET": ValueOf(uint32(syscall.IN_CLASSB_NET)), + "IN_CLASSB_NSHIFT": ValueOf(syscall.IN_CLASSB_NSHIFT), + "IN_CLASSC_HOST": ValueOf(syscall.IN_CLASSC_HOST), + "IN_CLASSC_NET": ValueOf(uint32(syscall.IN_CLASSC_NET)), + "IN_CLASSC_NSHIFT": ValueOf(syscall.IN_CLASSC_NSHIFT), + "IN_CLASSD_HOST": ValueOf(syscall.IN_CLASSD_HOST), + "IN_CLASSD_NET": ValueOf(uint32(syscall.IN_CLASSD_NET)), + "IN_CLASSD_NSHIFT": ValueOf(syscall.IN_CLASSD_NSHIFT), + "IN_LOOPBACKNET": ValueOf(syscall.IN_LOOPBACKNET), + "IN_RFC3021_MASK": ValueOf(uint32(syscall.IN_RFC3021_MASK)), + "IPPROTO_3PC": ValueOf(syscall.IPPROTO_3PC), + "IPPROTO_ADFS": ValueOf(syscall.IPPROTO_ADFS), + "IPPROTO_AH": ValueOf(syscall.IPPROTO_AH), + "IPPROTO_AHIP": ValueOf(syscall.IPPROTO_AHIP), + "IPPROTO_APES": ValueOf(syscall.IPPROTO_APES), + "IPPROTO_ARGUS": ValueOf(syscall.IPPROTO_ARGUS), + "IPPROTO_AX25": ValueOf(syscall.IPPROTO_AX25), + "IPPROTO_BHA": ValueOf(syscall.IPPROTO_BHA), + "IPPROTO_BLT": ValueOf(syscall.IPPROTO_BLT), + "IPPROTO_BRSATMON": ValueOf(syscall.IPPROTO_BRSATMON), + "IPPROTO_CARP": ValueOf(syscall.IPPROTO_CARP), + "IPPROTO_CFTP": ValueOf(syscall.IPPROTO_CFTP), + "IPPROTO_CHAOS": ValueOf(syscall.IPPROTO_CHAOS), + "IPPROTO_CMTP": ValueOf(syscall.IPPROTO_CMTP), + "IPPROTO_CPHB": ValueOf(syscall.IPPROTO_CPHB), + "IPPROTO_CPNX": ValueOf(syscall.IPPROTO_CPNX), + "IPPROTO_DDP": ValueOf(syscall.IPPROTO_DDP), + "IPPROTO_DGP": ValueOf(syscall.IPPROTO_DGP), + "IPPROTO_DIVERT": ValueOf(syscall.IPPROTO_DIVERT), + "IPPROTO_DONE": ValueOf(syscall.IPPROTO_DONE), + "IPPROTO_DSTOPTS": ValueOf(syscall.IPPROTO_DSTOPTS), + "IPPROTO_EGP": ValueOf(syscall.IPPROTO_EGP), + "IPPROTO_EMCON": ValueOf(syscall.IPPROTO_EMCON), + "IPPROTO_ENCAP": ValueOf(syscall.IPPROTO_ENCAP), + "IPPROTO_EON": ValueOf(syscall.IPPROTO_EON), + "IPPROTO_ESP": ValueOf(syscall.IPPROTO_ESP), + "IPPROTO_ETHERIP": ValueOf(syscall.IPPROTO_ETHERIP), + "IPPROTO_FRAGMENT": ValueOf(syscall.IPPROTO_FRAGMENT), + "IPPROTO_GGP": ValueOf(syscall.IPPROTO_GGP), + "IPPROTO_GMTP": ValueOf(syscall.IPPROTO_GMTP), + "IPPROTO_GRE": ValueOf(syscall.IPPROTO_GRE), + "IPPROTO_HELLO": ValueOf(syscall.IPPROTO_HELLO), + "IPPROTO_HMP": ValueOf(syscall.IPPROTO_HMP), + "IPPROTO_HOPOPTS": ValueOf(syscall.IPPROTO_HOPOPTS), + "IPPROTO_ICMP": ValueOf(syscall.IPPROTO_ICMP), + "IPPROTO_ICMPV6": ValueOf(syscall.IPPROTO_ICMPV6), + "IPPROTO_IDP": ValueOf(syscall.IPPROTO_IDP), + "IPPROTO_IDPR": ValueOf(syscall.IPPROTO_IDPR), + "IPPROTO_IDRP": ValueOf(syscall.IPPROTO_IDRP), + "IPPROTO_IGMP": ValueOf(syscall.IPPROTO_IGMP), + "IPPROTO_IGP": ValueOf(syscall.IPPROTO_IGP), + "IPPROTO_IGRP": ValueOf(syscall.IPPROTO_IGRP), + "IPPROTO_IL": ValueOf(syscall.IPPROTO_IL), + "IPPROTO_INLSP": ValueOf(syscall.IPPROTO_INLSP), + "IPPROTO_INP": ValueOf(syscall.IPPROTO_INP), + "IPPROTO_IP": ValueOf(syscall.IPPROTO_IP), + "IPPROTO_IPCOMP": ValueOf(syscall.IPPROTO_IPCOMP), + "IPPROTO_IPCV": ValueOf(syscall.IPPROTO_IPCV), + "IPPROTO_IPEIP": ValueOf(syscall.IPPROTO_IPEIP), + "IPPROTO_IPIP": ValueOf(syscall.IPPROTO_IPIP), + "IPPROTO_IPPC": ValueOf(syscall.IPPROTO_IPPC), + "IPPROTO_IPV4": ValueOf(syscall.IPPROTO_IPV4), + "IPPROTO_IPV6": ValueOf(syscall.IPPROTO_IPV6), + "IPPROTO_IRTP": ValueOf(syscall.IPPROTO_IRTP), + "IPPROTO_KRYPTOLAN": ValueOf(syscall.IPPROTO_KRYPTOLAN), + "IPPROTO_LARP": ValueOf(syscall.IPPROTO_LARP), + "IPPROTO_LEAF1": ValueOf(syscall.IPPROTO_LEAF1), + "IPPROTO_LEAF2": ValueOf(syscall.IPPROTO_LEAF2), + "IPPROTO_MAX": ValueOf(syscall.IPPROTO_MAX), + "IPPROTO_MAXID": ValueOf(syscall.IPPROTO_MAXID), + "IPPROTO_MEAS": ValueOf(syscall.IPPROTO_MEAS), + "IPPROTO_MH": ValueOf(syscall.IPPROTO_MH), + "IPPROTO_MHRP": ValueOf(syscall.IPPROTO_MHRP), + "IPPROTO_MICP": ValueOf(syscall.IPPROTO_MICP), + "IPPROTO_MOBILE": ValueOf(syscall.IPPROTO_MOBILE), + "IPPROTO_MPLS": ValueOf(syscall.IPPROTO_MPLS), + "IPPROTO_MTP": ValueOf(syscall.IPPROTO_MTP), + "IPPROTO_MUX": ValueOf(syscall.IPPROTO_MUX), + "IPPROTO_ND": ValueOf(syscall.IPPROTO_ND), + "IPPROTO_NHRP": ValueOf(syscall.IPPROTO_NHRP), + "IPPROTO_NONE": ValueOf(syscall.IPPROTO_NONE), + "IPPROTO_NSP": ValueOf(syscall.IPPROTO_NSP), + "IPPROTO_NVPII": ValueOf(syscall.IPPROTO_NVPII), + "IPPROTO_OLD_DIVERT": ValueOf(syscall.IPPROTO_OLD_DIVERT), + "IPPROTO_OSPFIGP": ValueOf(syscall.IPPROTO_OSPFIGP), + "IPPROTO_PFSYNC": ValueOf(syscall.IPPROTO_PFSYNC), + "IPPROTO_PGM": ValueOf(syscall.IPPROTO_PGM), + "IPPROTO_PIGP": ValueOf(syscall.IPPROTO_PIGP), + "IPPROTO_PIM": ValueOf(syscall.IPPROTO_PIM), + "IPPROTO_PRM": ValueOf(syscall.IPPROTO_PRM), + "IPPROTO_PUP": ValueOf(syscall.IPPROTO_PUP), + "IPPROTO_PVP": ValueOf(syscall.IPPROTO_PVP), + "IPPROTO_RAW": ValueOf(syscall.IPPROTO_RAW), + "IPPROTO_RCCMON": ValueOf(syscall.IPPROTO_RCCMON), + "IPPROTO_RDP": ValueOf(syscall.IPPROTO_RDP), + "IPPROTO_ROUTING": ValueOf(syscall.IPPROTO_ROUTING), + "IPPROTO_RSVP": ValueOf(syscall.IPPROTO_RSVP), + "IPPROTO_RVD": ValueOf(syscall.IPPROTO_RVD), + "IPPROTO_SATEXPAK": ValueOf(syscall.IPPROTO_SATEXPAK), + "IPPROTO_SATMON": ValueOf(syscall.IPPROTO_SATMON), + "IPPROTO_SCCSP": ValueOf(syscall.IPPROTO_SCCSP), + "IPPROTO_SCTP": ValueOf(syscall.IPPROTO_SCTP), + "IPPROTO_SDRP": ValueOf(syscall.IPPROTO_SDRP), + "IPPROTO_SEND": ValueOf(syscall.IPPROTO_SEND), + "IPPROTO_SEP": ValueOf(syscall.IPPROTO_SEP), + "IPPROTO_SKIP": ValueOf(syscall.IPPROTO_SKIP), + "IPPROTO_SPACER": ValueOf(syscall.IPPROTO_SPACER), + "IPPROTO_SRPC": ValueOf(syscall.IPPROTO_SRPC), + "IPPROTO_ST": ValueOf(syscall.IPPROTO_ST), + "IPPROTO_SVMTP": ValueOf(syscall.IPPROTO_SVMTP), + "IPPROTO_SWIPE": ValueOf(syscall.IPPROTO_SWIPE), + "IPPROTO_TCF": ValueOf(syscall.IPPROTO_TCF), + "IPPROTO_TCP": ValueOf(syscall.IPPROTO_TCP), + "IPPROTO_TLSP": ValueOf(syscall.IPPROTO_TLSP), + "IPPROTO_TP": ValueOf(syscall.IPPROTO_TP), + "IPPROTO_TPXX": ValueOf(syscall.IPPROTO_TPXX), + "IPPROTO_TRUNK1": ValueOf(syscall.IPPROTO_TRUNK1), + "IPPROTO_TRUNK2": ValueOf(syscall.IPPROTO_TRUNK2), + "IPPROTO_TTP": ValueOf(syscall.IPPROTO_TTP), + "IPPROTO_UDP": ValueOf(syscall.IPPROTO_UDP), + "IPPROTO_VINES": ValueOf(syscall.IPPROTO_VINES), + "IPPROTO_VISA": ValueOf(syscall.IPPROTO_VISA), + "IPPROTO_VMTP": ValueOf(syscall.IPPROTO_VMTP), + "IPPROTO_WBEXPAK": ValueOf(syscall.IPPROTO_WBEXPAK), + "IPPROTO_WBMON": ValueOf(syscall.IPPROTO_WBMON), + "IPPROTO_WSN": ValueOf(syscall.IPPROTO_WSN), + "IPPROTO_XNET": ValueOf(syscall.IPPROTO_XNET), + "IPPROTO_XTP": ValueOf(syscall.IPPROTO_XTP), + "IPV6_AUTOFLOWLABEL": ValueOf(syscall.IPV6_AUTOFLOWLABEL), + "IPV6_BINDANY": ValueOf(syscall.IPV6_BINDANY), + "IPV6_BINDV6ONLY": ValueOf(syscall.IPV6_BINDV6ONLY), + "IPV6_CHECKSUM": ValueOf(syscall.IPV6_CHECKSUM), + "IPV6_DEFAULT_MULTICAST_HOPS": ValueOf(syscall.IPV6_DEFAULT_MULTICAST_HOPS), + "IPV6_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IPV6_DEFAULT_MULTICAST_LOOP), + "IPV6_DEFHLIM": ValueOf(syscall.IPV6_DEFHLIM), + "IPV6_DONTFRAG": ValueOf(syscall.IPV6_DONTFRAG), + "IPV6_DSTOPTS": ValueOf(syscall.IPV6_DSTOPTS), + "IPV6_FAITH": ValueOf(syscall.IPV6_FAITH), + "IPV6_FLOWINFO_MASK": ValueOf(uint32(syscall.IPV6_FLOWINFO_MASK)), + "IPV6_FLOWLABEL_MASK": ValueOf(uint32(syscall.IPV6_FLOWLABEL_MASK)), + "IPV6_FRAGTTL": ValueOf(syscall.IPV6_FRAGTTL), + "IPV6_FW_ADD": ValueOf(syscall.IPV6_FW_ADD), + "IPV6_FW_DEL": ValueOf(syscall.IPV6_FW_DEL), + "IPV6_FW_FLUSH": ValueOf(syscall.IPV6_FW_FLUSH), + "IPV6_FW_GET": ValueOf(syscall.IPV6_FW_GET), + "IPV6_FW_ZERO": ValueOf(syscall.IPV6_FW_ZERO), + "IPV6_HLIMDEC": ValueOf(syscall.IPV6_HLIMDEC), + "IPV6_HOPLIMIT": ValueOf(syscall.IPV6_HOPLIMIT), + "IPV6_HOPOPTS": ValueOf(syscall.IPV6_HOPOPTS), + "IPV6_IPSEC_POLICY": ValueOf(syscall.IPV6_IPSEC_POLICY), + "IPV6_JOIN_GROUP": ValueOf(syscall.IPV6_JOIN_GROUP), + "IPV6_LEAVE_GROUP": ValueOf(syscall.IPV6_LEAVE_GROUP), + "IPV6_MAXHLIM": ValueOf(syscall.IPV6_MAXHLIM), + "IPV6_MAXOPTHDR": ValueOf(syscall.IPV6_MAXOPTHDR), + "IPV6_MAXPACKET": ValueOf(syscall.IPV6_MAXPACKET), + "IPV6_MAX_GROUP_SRC_FILTER": ValueOf(syscall.IPV6_MAX_GROUP_SRC_FILTER), + "IPV6_MAX_MEMBERSHIPS": ValueOf(syscall.IPV6_MAX_MEMBERSHIPS), + "IPV6_MAX_SOCK_SRC_FILTER": ValueOf(syscall.IPV6_MAX_SOCK_SRC_FILTER), + "IPV6_MIN_MEMBERSHIPS": ValueOf(syscall.IPV6_MIN_MEMBERSHIPS), + "IPV6_MMTU": ValueOf(syscall.IPV6_MMTU), + "IPV6_MSFILTER": ValueOf(syscall.IPV6_MSFILTER), + "IPV6_MULTICAST_HOPS": ValueOf(syscall.IPV6_MULTICAST_HOPS), + "IPV6_MULTICAST_IF": ValueOf(syscall.IPV6_MULTICAST_IF), + "IPV6_MULTICAST_LOOP": ValueOf(syscall.IPV6_MULTICAST_LOOP), + "IPV6_NEXTHOP": ValueOf(syscall.IPV6_NEXTHOP), + "IPV6_PATHMTU": ValueOf(syscall.IPV6_PATHMTU), + "IPV6_PKTINFO": ValueOf(syscall.IPV6_PKTINFO), + "IPV6_PORTRANGE": ValueOf(syscall.IPV6_PORTRANGE), + "IPV6_PORTRANGE_DEFAULT": ValueOf(syscall.IPV6_PORTRANGE_DEFAULT), + "IPV6_PORTRANGE_HIGH": ValueOf(syscall.IPV6_PORTRANGE_HIGH), + "IPV6_PORTRANGE_LOW": ValueOf(syscall.IPV6_PORTRANGE_LOW), + "IPV6_PREFER_TEMPADDR": ValueOf(syscall.IPV6_PREFER_TEMPADDR), + "IPV6_RECVDSTOPTS": ValueOf(syscall.IPV6_RECVDSTOPTS), + "IPV6_RECVHOPLIMIT": ValueOf(syscall.IPV6_RECVHOPLIMIT), + "IPV6_RECVHOPOPTS": ValueOf(syscall.IPV6_RECVHOPOPTS), + "IPV6_RECVPATHMTU": ValueOf(syscall.IPV6_RECVPATHMTU), + "IPV6_RECVPKTINFO": ValueOf(syscall.IPV6_RECVPKTINFO), + "IPV6_RECVRTHDR": ValueOf(syscall.IPV6_RECVRTHDR), + "IPV6_RECVTCLASS": ValueOf(syscall.IPV6_RECVTCLASS), + "IPV6_RTHDR": ValueOf(syscall.IPV6_RTHDR), + "IPV6_RTHDRDSTOPTS": ValueOf(syscall.IPV6_RTHDRDSTOPTS), + "IPV6_RTHDR_LOOSE": ValueOf(syscall.IPV6_RTHDR_LOOSE), + "IPV6_RTHDR_STRICT": ValueOf(syscall.IPV6_RTHDR_STRICT), + "IPV6_RTHDR_TYPE_0": ValueOf(syscall.IPV6_RTHDR_TYPE_0), + "IPV6_SOCKOPT_RESERVED1": ValueOf(syscall.IPV6_SOCKOPT_RESERVED1), + "IPV6_TCLASS": ValueOf(syscall.IPV6_TCLASS), + "IPV6_UNICAST_HOPS": ValueOf(syscall.IPV6_UNICAST_HOPS), + "IPV6_USE_MIN_MTU": ValueOf(syscall.IPV6_USE_MIN_MTU), + "IPV6_V6ONLY": ValueOf(syscall.IPV6_V6ONLY), + "IPV6_VERSION": ValueOf(syscall.IPV6_VERSION), + "IPV6_VERSION_MASK": ValueOf(syscall.IPV6_VERSION_MASK), + "IP_ADD_MEMBERSHIP": ValueOf(syscall.IP_ADD_MEMBERSHIP), + "IP_ADD_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_ADD_SOURCE_MEMBERSHIP), + "IP_BINDANY": ValueOf(syscall.IP_BINDANY), + "IP_BLOCK_SOURCE": ValueOf(syscall.IP_BLOCK_SOURCE), + "IP_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IP_DEFAULT_MULTICAST_LOOP), + "IP_DEFAULT_MULTICAST_TTL": ValueOf(syscall.IP_DEFAULT_MULTICAST_TTL), + "IP_DF": ValueOf(syscall.IP_DF), + "IP_DONTFRAG": ValueOf(syscall.IP_DONTFRAG), + "IP_DROP_MEMBERSHIP": ValueOf(syscall.IP_DROP_MEMBERSHIP), + "IP_DROP_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_DROP_SOURCE_MEMBERSHIP), + "IP_DUMMYNET3": ValueOf(syscall.IP_DUMMYNET3), + "IP_DUMMYNET_CONFIGURE": ValueOf(syscall.IP_DUMMYNET_CONFIGURE), + "IP_DUMMYNET_DEL": ValueOf(syscall.IP_DUMMYNET_DEL), + "IP_DUMMYNET_FLUSH": ValueOf(syscall.IP_DUMMYNET_FLUSH), + "IP_DUMMYNET_GET": ValueOf(syscall.IP_DUMMYNET_GET), + "IP_FAITH": ValueOf(syscall.IP_FAITH), + "IP_FW3": ValueOf(syscall.IP_FW3), + "IP_FW_ADD": ValueOf(syscall.IP_FW_ADD), + "IP_FW_DEL": ValueOf(syscall.IP_FW_DEL), + "IP_FW_FLUSH": ValueOf(syscall.IP_FW_FLUSH), + "IP_FW_GET": ValueOf(syscall.IP_FW_GET), + "IP_FW_NAT_CFG": ValueOf(syscall.IP_FW_NAT_CFG), + "IP_FW_NAT_DEL": ValueOf(syscall.IP_FW_NAT_DEL), + "IP_FW_NAT_GET_CONFIG": ValueOf(syscall.IP_FW_NAT_GET_CONFIG), + "IP_FW_NAT_GET_LOG": ValueOf(syscall.IP_FW_NAT_GET_LOG), + "IP_FW_RESETLOG": ValueOf(syscall.IP_FW_RESETLOG), + "IP_FW_TABLE_ADD": ValueOf(syscall.IP_FW_TABLE_ADD), + "IP_FW_TABLE_DEL": ValueOf(syscall.IP_FW_TABLE_DEL), + "IP_FW_TABLE_FLUSH": ValueOf(syscall.IP_FW_TABLE_FLUSH), + "IP_FW_TABLE_GETSIZE": ValueOf(syscall.IP_FW_TABLE_GETSIZE), + "IP_FW_TABLE_LIST": ValueOf(syscall.IP_FW_TABLE_LIST), + "IP_FW_ZERO": ValueOf(syscall.IP_FW_ZERO), + "IP_HDRINCL": ValueOf(syscall.IP_HDRINCL), + "IP_IPSEC_POLICY": ValueOf(syscall.IP_IPSEC_POLICY), + "IP_MAXPACKET": ValueOf(syscall.IP_MAXPACKET), + "IP_MAX_GROUP_SRC_FILTER": ValueOf(syscall.IP_MAX_GROUP_SRC_FILTER), + "IP_MAX_MEMBERSHIPS": ValueOf(syscall.IP_MAX_MEMBERSHIPS), + "IP_MAX_SOCK_MUTE_FILTER": ValueOf(syscall.IP_MAX_SOCK_MUTE_FILTER), + "IP_MAX_SOCK_SRC_FILTER": ValueOf(syscall.IP_MAX_SOCK_SRC_FILTER), + "IP_MAX_SOURCE_FILTER": ValueOf(syscall.IP_MAX_SOURCE_FILTER), + "IP_MF": ValueOf(syscall.IP_MF), + "IP_MINTTL": ValueOf(syscall.IP_MINTTL), + "IP_MIN_MEMBERSHIPS": ValueOf(syscall.IP_MIN_MEMBERSHIPS), + "IP_MSFILTER": ValueOf(syscall.IP_MSFILTER), + "IP_MSS": ValueOf(syscall.IP_MSS), + "IP_MULTICAST_IF": ValueOf(syscall.IP_MULTICAST_IF), + "IP_MULTICAST_LOOP": ValueOf(syscall.IP_MULTICAST_LOOP), + "IP_MULTICAST_TTL": ValueOf(syscall.IP_MULTICAST_TTL), + "IP_MULTICAST_VIF": ValueOf(syscall.IP_MULTICAST_VIF), + "IP_OFFMASK": ValueOf(syscall.IP_OFFMASK), + "IP_ONESBCAST": ValueOf(syscall.IP_ONESBCAST), + "IP_OPTIONS": ValueOf(syscall.IP_OPTIONS), + "IP_PORTRANGE": ValueOf(syscall.IP_PORTRANGE), + "IP_PORTRANGE_DEFAULT": ValueOf(syscall.IP_PORTRANGE_DEFAULT), + "IP_PORTRANGE_HIGH": ValueOf(syscall.IP_PORTRANGE_HIGH), + "IP_PORTRANGE_LOW": ValueOf(syscall.IP_PORTRANGE_LOW), + "IP_RECVDSTADDR": ValueOf(syscall.IP_RECVDSTADDR), + "IP_RECVIF": ValueOf(syscall.IP_RECVIF), + "IP_RECVOPTS": ValueOf(syscall.IP_RECVOPTS), + "IP_RECVRETOPTS": ValueOf(syscall.IP_RECVRETOPTS), + "IP_RECVTOS": ValueOf(syscall.IP_RECVTOS), + "IP_RECVTTL": ValueOf(syscall.IP_RECVTTL), + "IP_RETOPTS": ValueOf(syscall.IP_RETOPTS), + "IP_RF": ValueOf(syscall.IP_RF), + "IP_RSVP_OFF": ValueOf(syscall.IP_RSVP_OFF), + "IP_RSVP_ON": ValueOf(syscall.IP_RSVP_ON), + "IP_RSVP_VIF_OFF": ValueOf(syscall.IP_RSVP_VIF_OFF), + "IP_RSVP_VIF_ON": ValueOf(syscall.IP_RSVP_VIF_ON), + "IP_SENDSRCADDR": ValueOf(syscall.IP_SENDSRCADDR), + "IP_TOS": ValueOf(syscall.IP_TOS), + "IP_TTL": ValueOf(syscall.IP_TTL), + "IP_UNBLOCK_SOURCE": ValueOf(syscall.IP_UNBLOCK_SOURCE), + "ISIG": ValueOf(syscall.ISIG), + "ISTRIP": ValueOf(syscall.ISTRIP), + "IXANY": ValueOf(syscall.IXANY), + "IXOFF": ValueOf(syscall.IXOFF), + "IXON": ValueOf(syscall.IXON), + "ImplementsGetwd": ValueOf(syscall.ImplementsGetwd), + "Issetugid": ValueOf(syscall.Issetugid), + "Kevent": ValueOf(syscall.Kevent), + "Kill": ValueOf(syscall.Kill), + "Kqueue": ValueOf(syscall.Kqueue), + "LOCK_EX": ValueOf(syscall.LOCK_EX), + "LOCK_NB": ValueOf(syscall.LOCK_NB), + "LOCK_SH": ValueOf(syscall.LOCK_SH), + "LOCK_UN": ValueOf(syscall.LOCK_UN), + "Lchown": ValueOf(syscall.Lchown), + "Link": ValueOf(syscall.Link), + "Listen": ValueOf(syscall.Listen), + "Lstat": ValueOf(syscall.Lstat), + "MADV_AUTOSYNC": ValueOf(syscall.MADV_AUTOSYNC), + "MADV_CORE": ValueOf(syscall.MADV_CORE), + "MADV_DONTNEED": ValueOf(syscall.MADV_DONTNEED), + "MADV_FREE": ValueOf(syscall.MADV_FREE), + "MADV_NOCORE": ValueOf(syscall.MADV_NOCORE), + "MADV_NORMAL": ValueOf(syscall.MADV_NORMAL), + "MADV_NOSYNC": ValueOf(syscall.MADV_NOSYNC), + "MADV_PROTECT": ValueOf(syscall.MADV_PROTECT), + "MADV_RANDOM": ValueOf(syscall.MADV_RANDOM), + "MADV_SEQUENTIAL": ValueOf(syscall.MADV_SEQUENTIAL), + "MADV_WILLNEED": ValueOf(syscall.MADV_WILLNEED), + "MAP_32BIT": ValueOf(syscall.MAP_32BIT), + "MAP_ALIGNED_SUPER": ValueOf(syscall.MAP_ALIGNED_SUPER), + "MAP_ALIGNMENT_MASK": ValueOf(syscall.MAP_ALIGNMENT_MASK), + "MAP_ALIGNMENT_SHIFT": ValueOf(syscall.MAP_ALIGNMENT_SHIFT), + "MAP_ANON": ValueOf(syscall.MAP_ANON), + "MAP_ANONYMOUS": ValueOf(syscall.MAP_ANONYMOUS), + "MAP_COPY": ValueOf(syscall.MAP_COPY), + "MAP_FILE": ValueOf(syscall.MAP_FILE), + "MAP_FIXED": ValueOf(syscall.MAP_FIXED), + "MAP_HASSEMAPHORE": ValueOf(syscall.MAP_HASSEMAPHORE), + "MAP_NOCORE": ValueOf(syscall.MAP_NOCORE), + "MAP_NORESERVE": ValueOf(syscall.MAP_NORESERVE), + "MAP_NOSYNC": ValueOf(syscall.MAP_NOSYNC), + "MAP_PREFAULT_READ": ValueOf(syscall.MAP_PREFAULT_READ), + "MAP_PRIVATE": ValueOf(syscall.MAP_PRIVATE), + "MAP_RENAME": ValueOf(syscall.MAP_RENAME), + "MAP_RESERVED0080": ValueOf(syscall.MAP_RESERVED0080), + "MAP_RESERVED0100": ValueOf(syscall.MAP_RESERVED0100), + "MAP_SHARED": ValueOf(syscall.MAP_SHARED), + "MAP_STACK": ValueOf(syscall.MAP_STACK), + "MCL_CURRENT": ValueOf(syscall.MCL_CURRENT), + "MCL_FUTURE": ValueOf(syscall.MCL_FUTURE), + "MSG_CMSG_CLOEXEC": ValueOf(syscall.MSG_CMSG_CLOEXEC), + "MSG_COMPAT": ValueOf(syscall.MSG_COMPAT), + "MSG_CTRUNC": ValueOf(syscall.MSG_CTRUNC), + "MSG_DONTROUTE": ValueOf(syscall.MSG_DONTROUTE), + "MSG_DONTWAIT": ValueOf(syscall.MSG_DONTWAIT), + "MSG_EOF": ValueOf(syscall.MSG_EOF), + "MSG_EOR": ValueOf(syscall.MSG_EOR), + "MSG_NBIO": ValueOf(syscall.MSG_NBIO), + "MSG_NOSIGNAL": ValueOf(syscall.MSG_NOSIGNAL), + "MSG_NOTIFICATION": ValueOf(syscall.MSG_NOTIFICATION), + "MSG_OOB": ValueOf(syscall.MSG_OOB), + "MSG_PEEK": ValueOf(syscall.MSG_PEEK), + "MSG_TRUNC": ValueOf(syscall.MSG_TRUNC), + "MSG_WAITALL": ValueOf(syscall.MSG_WAITALL), + "MS_ASYNC": ValueOf(syscall.MS_ASYNC), + "MS_INVALIDATE": ValueOf(syscall.MS_INVALIDATE), + "MS_SYNC": ValueOf(syscall.MS_SYNC), + "Mkdir": ValueOf(syscall.Mkdir), + "Mkfifo": ValueOf(syscall.Mkfifo), + "Mknod": ValueOf(syscall.Mknod), + "Mmap": ValueOf(syscall.Mmap), + "Munmap": ValueOf(syscall.Munmap), + "NAME_MAX": ValueOf(syscall.NAME_MAX), + "NET_RT_DUMP": ValueOf(syscall.NET_RT_DUMP), + "NET_RT_FLAGS": ValueOf(syscall.NET_RT_FLAGS), + "NET_RT_IFLIST": ValueOf(syscall.NET_RT_IFLIST), + "NET_RT_IFLISTL": ValueOf(syscall.NET_RT_IFLISTL), + "NET_RT_IFMALIST": ValueOf(syscall.NET_RT_IFMALIST), + "NET_RT_MAXID": ValueOf(syscall.NET_RT_MAXID), + "NOFLSH": ValueOf(uint32(syscall.NOFLSH)), + "NOTE_ATTRIB": ValueOf(syscall.NOTE_ATTRIB), + "NOTE_CHILD": ValueOf(syscall.NOTE_CHILD), + "NOTE_DELETE": ValueOf(syscall.NOTE_DELETE), + "NOTE_EXEC": ValueOf(syscall.NOTE_EXEC), + "NOTE_EXIT": ValueOf(uint32(syscall.NOTE_EXIT)), + "NOTE_EXTEND": ValueOf(syscall.NOTE_EXTEND), + "NOTE_FFAND": ValueOf(syscall.NOTE_FFAND), + "NOTE_FFCOPY": ValueOf(uint32(syscall.NOTE_FFCOPY)), + "NOTE_FFCTRLMASK": ValueOf(uint32(syscall.NOTE_FFCTRLMASK)), + "NOTE_FFLAGSMASK": ValueOf(syscall.NOTE_FFLAGSMASK), + "NOTE_FFNOP": ValueOf(syscall.NOTE_FFNOP), + "NOTE_FFOR": ValueOf(uint32(syscall.NOTE_FFOR)), + "NOTE_FORK": ValueOf(syscall.NOTE_FORK), + "NOTE_LINK": ValueOf(syscall.NOTE_LINK), + "NOTE_LOWAT": ValueOf(syscall.NOTE_LOWAT), + "NOTE_PCTRLMASK": ValueOf(uint32(syscall.NOTE_PCTRLMASK)), + "NOTE_PDATAMASK": ValueOf(syscall.NOTE_PDATAMASK), + "NOTE_RENAME": ValueOf(syscall.NOTE_RENAME), + "NOTE_REVOKE": ValueOf(syscall.NOTE_REVOKE), + "NOTE_TRACK": ValueOf(syscall.NOTE_TRACK), + "NOTE_TRACKERR": ValueOf(syscall.NOTE_TRACKERR), + "NOTE_TRIGGER": ValueOf(syscall.NOTE_TRIGGER), + "NOTE_WRITE": ValueOf(syscall.NOTE_WRITE), + "Nanosleep": ValueOf(syscall.Nanosleep), + "NsecToTimespec": ValueOf(syscall.NsecToTimespec), + "NsecToTimeval": ValueOf(syscall.NsecToTimeval), + "OCRNL": ValueOf(syscall.OCRNL), + "ONLCR": ValueOf(syscall.ONLCR), + "ONLRET": ValueOf(syscall.ONLRET), + "ONOCR": ValueOf(syscall.ONOCR), + "ONOEOT": ValueOf(syscall.ONOEOT), + "OPOST": ValueOf(syscall.OPOST), + "O_ACCMODE": ValueOf(syscall.O_ACCMODE), + "O_APPEND": ValueOf(syscall.O_APPEND), + "O_ASYNC": ValueOf(syscall.O_ASYNC), + "O_CLOEXEC": ValueOf(syscall.O_CLOEXEC), + "O_CREAT": ValueOf(syscall.O_CREAT), + "O_DIRECT": ValueOf(syscall.O_DIRECT), + "O_DIRECTORY": ValueOf(syscall.O_DIRECTORY), + "O_EXCL": ValueOf(syscall.O_EXCL), + "O_EXEC": ValueOf(syscall.O_EXEC), + "O_EXLOCK": ValueOf(syscall.O_EXLOCK), + "O_FSYNC": ValueOf(syscall.O_FSYNC), + "O_NDELAY": ValueOf(syscall.O_NDELAY), + "O_NOCTTY": ValueOf(syscall.O_NOCTTY), + "O_NOFOLLOW": ValueOf(syscall.O_NOFOLLOW), + "O_NONBLOCK": ValueOf(syscall.O_NONBLOCK), + "O_RDONLY": ValueOf(syscall.O_RDONLY), + "O_RDWR": ValueOf(syscall.O_RDWR), + "O_SHLOCK": ValueOf(syscall.O_SHLOCK), + "O_SYNC": ValueOf(syscall.O_SYNC), + "O_TRUNC": ValueOf(syscall.O_TRUNC), + "O_TTY_INIT": ValueOf(syscall.O_TTY_INIT), + "O_WRONLY": ValueOf(syscall.O_WRONLY), + "Open": ValueOf(syscall.Open), + "PARENB": ValueOf(syscall.PARENB), + "PARMRK": ValueOf(syscall.PARMRK), + "PARODD": ValueOf(syscall.PARODD), + "PENDIN": ValueOf(syscall.PENDIN), + "PRIO_PGRP": ValueOf(syscall.PRIO_PGRP), + "PRIO_PROCESS": ValueOf(syscall.PRIO_PROCESS), + "PRIO_USER": ValueOf(syscall.PRIO_USER), + "PROT_EXEC": ValueOf(syscall.PROT_EXEC), + "PROT_NONE": ValueOf(syscall.PROT_NONE), + "PROT_READ": ValueOf(syscall.PROT_READ), + "PROT_WRITE": ValueOf(syscall.PROT_WRITE), + "PTRACE_CONT": ValueOf(syscall.PTRACE_CONT), + "PTRACE_KILL": ValueOf(syscall.PTRACE_KILL), + "PTRACE_TRACEME": ValueOf(syscall.PTRACE_TRACEME), + "ParseDirent": ValueOf(syscall.ParseDirent), + "ParseRoutingMessage": ValueOf(syscall.ParseRoutingMessage), + "ParseRoutingSockaddr": ValueOf(syscall.ParseRoutingSockaddr), + "ParseSocketControlMessage": ValueOf(syscall.ParseSocketControlMessage), + "ParseUnixRights": ValueOf(syscall.ParseUnixRights), + "Pathconf": ValueOf(syscall.Pathconf), + "Pipe": ValueOf(syscall.Pipe), + "Pread": ValueOf(syscall.Pread), + "Pwrite": ValueOf(syscall.Pwrite), + "RLIMIT_AS": ValueOf(syscall.RLIMIT_AS), + "RLIMIT_CORE": ValueOf(syscall.RLIMIT_CORE), + "RLIMIT_CPU": ValueOf(syscall.RLIMIT_CPU), + "RLIMIT_DATA": ValueOf(syscall.RLIMIT_DATA), + "RLIMIT_FSIZE": ValueOf(syscall.RLIMIT_FSIZE), + "RLIMIT_NOFILE": ValueOf(syscall.RLIMIT_NOFILE), + "RLIMIT_STACK": ValueOf(syscall.RLIMIT_STACK), + "RLIM_INFINITY": ValueOf(int64(syscall.RLIM_INFINITY)), + "RTAX_AUTHOR": ValueOf(syscall.RTAX_AUTHOR), + "RTAX_BRD": ValueOf(syscall.RTAX_BRD), + "RTAX_DST": ValueOf(syscall.RTAX_DST), + "RTAX_GATEWAY": ValueOf(syscall.RTAX_GATEWAY), + "RTAX_GENMASK": ValueOf(syscall.RTAX_GENMASK), + "RTAX_IFA": ValueOf(syscall.RTAX_IFA), + "RTAX_IFP": ValueOf(syscall.RTAX_IFP), + "RTAX_MAX": ValueOf(syscall.RTAX_MAX), + "RTAX_NETMASK": ValueOf(syscall.RTAX_NETMASK), + "RTA_AUTHOR": ValueOf(syscall.RTA_AUTHOR), + "RTA_BRD": ValueOf(syscall.RTA_BRD), + "RTA_DST": ValueOf(syscall.RTA_DST), + "RTA_GATEWAY": ValueOf(syscall.RTA_GATEWAY), + "RTA_GENMASK": ValueOf(syscall.RTA_GENMASK), + "RTA_IFA": ValueOf(syscall.RTA_IFA), + "RTA_IFP": ValueOf(syscall.RTA_IFP), + "RTA_NETMASK": ValueOf(syscall.RTA_NETMASK), + "RTF_BLACKHOLE": ValueOf(syscall.RTF_BLACKHOLE), + "RTF_BROADCAST": ValueOf(syscall.RTF_BROADCAST), + "RTF_DONE": ValueOf(syscall.RTF_DONE), + "RTF_DYNAMIC": ValueOf(syscall.RTF_DYNAMIC), + "RTF_FMASK": ValueOf(syscall.RTF_FMASK), + "RTF_GATEWAY": ValueOf(syscall.RTF_GATEWAY), + "RTF_GWFLAG_COMPAT": ValueOf(uint32(syscall.RTF_GWFLAG_COMPAT)), + "RTF_HOST": ValueOf(syscall.RTF_HOST), + "RTF_LLDATA": ValueOf(syscall.RTF_LLDATA), + "RTF_LLINFO": ValueOf(syscall.RTF_LLINFO), + "RTF_LOCAL": ValueOf(syscall.RTF_LOCAL), + "RTF_MODIFIED": ValueOf(syscall.RTF_MODIFIED), + "RTF_MULTICAST": ValueOf(syscall.RTF_MULTICAST), + "RTF_PINNED": ValueOf(syscall.RTF_PINNED), + "RTF_PRCLONING": ValueOf(syscall.RTF_PRCLONING), + "RTF_PROTO1": ValueOf(syscall.RTF_PROTO1), + "RTF_PROTO2": ValueOf(syscall.RTF_PROTO2), + "RTF_PROTO3": ValueOf(syscall.RTF_PROTO3), + "RTF_REJECT": ValueOf(syscall.RTF_REJECT), + "RTF_RNH_LOCKED": ValueOf(syscall.RTF_RNH_LOCKED), + "RTF_STATIC": ValueOf(syscall.RTF_STATIC), + "RTF_STICKY": ValueOf(syscall.RTF_STICKY), + "RTF_UP": ValueOf(syscall.RTF_UP), + "RTF_XRESOLVE": ValueOf(syscall.RTF_XRESOLVE), + "RTM_ADD": ValueOf(syscall.RTM_ADD), + "RTM_CHANGE": ValueOf(syscall.RTM_CHANGE), + "RTM_DELADDR": ValueOf(syscall.RTM_DELADDR), + "RTM_DELETE": ValueOf(syscall.RTM_DELETE), + "RTM_DELMADDR": ValueOf(syscall.RTM_DELMADDR), + "RTM_GET": ValueOf(syscall.RTM_GET), + "RTM_IEEE80211": ValueOf(syscall.RTM_IEEE80211), + "RTM_IFANNOUNCE": ValueOf(syscall.RTM_IFANNOUNCE), + "RTM_IFINFO": ValueOf(syscall.RTM_IFINFO), + "RTM_LOCK": ValueOf(syscall.RTM_LOCK), + "RTM_LOSING": ValueOf(syscall.RTM_LOSING), + "RTM_MISS": ValueOf(syscall.RTM_MISS), + "RTM_NEWADDR": ValueOf(syscall.RTM_NEWADDR), + "RTM_NEWMADDR": ValueOf(syscall.RTM_NEWMADDR), + "RTM_OLDADD": ValueOf(syscall.RTM_OLDADD), + "RTM_OLDDEL": ValueOf(syscall.RTM_OLDDEL), + "RTM_REDIRECT": ValueOf(syscall.RTM_REDIRECT), + "RTM_RESOLVE": ValueOf(syscall.RTM_RESOLVE), + "RTM_RTTUNIT": ValueOf(syscall.RTM_RTTUNIT), + "RTM_VERSION": ValueOf(syscall.RTM_VERSION), + "RTV_EXPIRE": ValueOf(syscall.RTV_EXPIRE), + "RTV_HOPCOUNT": ValueOf(syscall.RTV_HOPCOUNT), + "RTV_MTU": ValueOf(syscall.RTV_MTU), + "RTV_RPIPE": ValueOf(syscall.RTV_RPIPE), + "RTV_RTT": ValueOf(syscall.RTV_RTT), + "RTV_RTTVAR": ValueOf(syscall.RTV_RTTVAR), + "RTV_SPIPE": ValueOf(syscall.RTV_SPIPE), + "RTV_SSTHRESH": ValueOf(syscall.RTV_SSTHRESH), + "RTV_WEIGHT": ValueOf(syscall.RTV_WEIGHT), + "RT_CACHING_CONTEXT": ValueOf(syscall.RT_CACHING_CONTEXT), + "RT_DEFAULT_FIB": ValueOf(syscall.RT_DEFAULT_FIB), + "RT_NORTREF": ValueOf(syscall.RT_NORTREF), + "RUSAGE_CHILDREN": ValueOf(syscall.RUSAGE_CHILDREN), + "RUSAGE_SELF": ValueOf(syscall.RUSAGE_SELF), + "RUSAGE_THREAD": ValueOf(syscall.RUSAGE_THREAD), + "RawSyscall": ValueOf(syscall.RawSyscall), + "RawSyscall6": ValueOf(syscall.RawSyscall6), + "Read": ValueOf(syscall.Read), + "ReadDirent": ValueOf(syscall.ReadDirent), + "Readlink": ValueOf(syscall.Readlink), + "Recvfrom": ValueOf(syscall.Recvfrom), + "Recvmsg": ValueOf(syscall.Recvmsg), + "Rename": ValueOf(syscall.Rename), + "Revoke": ValueOf(syscall.Revoke), + "Rmdir": ValueOf(syscall.Rmdir), + "RouteRIB": ValueOf(syscall.RouteRIB), + "SCM_BINTIME": ValueOf(syscall.SCM_BINTIME), + "SCM_CREDS": ValueOf(syscall.SCM_CREDS), + "SCM_RIGHTS": ValueOf(syscall.SCM_RIGHTS), + "SCM_TIMESTAMP": ValueOf(syscall.SCM_TIMESTAMP), + "SHUT_RD": ValueOf(syscall.SHUT_RD), + "SHUT_RDWR": ValueOf(syscall.SHUT_RDWR), + "SHUT_WR": ValueOf(syscall.SHUT_WR), + "SIGABRT": ValueOf(syscall.SIGABRT), + "SIGALRM": ValueOf(syscall.SIGALRM), + "SIGBUS": ValueOf(syscall.SIGBUS), + "SIGCHLD": ValueOf(syscall.SIGCHLD), + "SIGCONT": ValueOf(syscall.SIGCONT), + "SIGEMT": ValueOf(syscall.SIGEMT), + "SIGFPE": ValueOf(syscall.SIGFPE), + "SIGHUP": ValueOf(syscall.SIGHUP), + "SIGILL": ValueOf(syscall.SIGILL), + "SIGINFO": ValueOf(syscall.SIGINFO), + "SIGINT": ValueOf(syscall.SIGINT), + "SIGIO": ValueOf(syscall.SIGIO), + "SIGIOT": ValueOf(syscall.SIGIOT), + "SIGKILL": ValueOf(syscall.SIGKILL), + "SIGLIBRT": ValueOf(syscall.SIGLIBRT), + "SIGLWP": ValueOf(syscall.SIGLWP), + "SIGPIPE": ValueOf(syscall.SIGPIPE), + "SIGPROF": ValueOf(syscall.SIGPROF), + "SIGQUIT": ValueOf(syscall.SIGQUIT), + "SIGSEGV": ValueOf(syscall.SIGSEGV), + "SIGSTOP": ValueOf(syscall.SIGSTOP), + "SIGSYS": ValueOf(syscall.SIGSYS), + "SIGTERM": ValueOf(syscall.SIGTERM), + "SIGTHR": ValueOf(syscall.SIGTHR), + "SIGTRAP": ValueOf(syscall.SIGTRAP), + "SIGTSTP": ValueOf(syscall.SIGTSTP), + "SIGTTIN": ValueOf(syscall.SIGTTIN), + "SIGTTOU": ValueOf(syscall.SIGTTOU), + "SIGURG": ValueOf(syscall.SIGURG), + "SIGUSR1": ValueOf(syscall.SIGUSR1), + "SIGUSR2": ValueOf(syscall.SIGUSR2), + "SIGVTALRM": ValueOf(syscall.SIGVTALRM), + "SIGWINCH": ValueOf(syscall.SIGWINCH), + "SIGXCPU": ValueOf(syscall.SIGXCPU), + "SIGXFSZ": ValueOf(syscall.SIGXFSZ), + "SIOCADDMULTI": ValueOf(uint32(syscall.SIOCADDMULTI)), + "SIOCADDRT": ValueOf(uint32(syscall.SIOCADDRT)), + "SIOCAIFADDR": ValueOf(uint32(syscall.SIOCAIFADDR)), + "SIOCAIFGROUP": ValueOf(uint32(syscall.SIOCAIFGROUP)), + "SIOCALIFADDR": ValueOf(uint32(syscall.SIOCALIFADDR)), + "SIOCATMARK": ValueOf(syscall.SIOCATMARK), + "SIOCDELMULTI": ValueOf(uint32(syscall.SIOCDELMULTI)), + "SIOCDELRT": ValueOf(uint32(syscall.SIOCDELRT)), + "SIOCDIFADDR": ValueOf(uint32(syscall.SIOCDIFADDR)), + "SIOCDIFGROUP": ValueOf(uint32(syscall.SIOCDIFGROUP)), + "SIOCDIFPHYADDR": ValueOf(uint32(syscall.SIOCDIFPHYADDR)), + "SIOCDLIFADDR": ValueOf(uint32(syscall.SIOCDLIFADDR)), + "SIOCGDRVSPEC": ValueOf(uint32(syscall.SIOCGDRVSPEC)), + "SIOCGETSGCNT": ValueOf(uint32(syscall.SIOCGETSGCNT)), + "SIOCGETVIFCNT": ValueOf(uint32(syscall.SIOCGETVIFCNT)), + "SIOCGHIWAT": ValueOf(syscall.SIOCGHIWAT), + "SIOCGIFADDR": ValueOf(uint32(syscall.SIOCGIFADDR)), + "SIOCGIFBRDADDR": ValueOf(uint32(syscall.SIOCGIFBRDADDR)), + "SIOCGIFCAP": ValueOf(uint32(syscall.SIOCGIFCAP)), + "SIOCGIFCONF": ValueOf(uint32(syscall.SIOCGIFCONF)), + "SIOCGIFDESCR": ValueOf(uint32(syscall.SIOCGIFDESCR)), + "SIOCGIFDSTADDR": ValueOf(uint32(syscall.SIOCGIFDSTADDR)), + "SIOCGIFFIB": ValueOf(uint32(syscall.SIOCGIFFIB)), + "SIOCGIFFLAGS": ValueOf(uint32(syscall.SIOCGIFFLAGS)), + "SIOCGIFGENERIC": ValueOf(uint32(syscall.SIOCGIFGENERIC)), + "SIOCGIFGMEMB": ValueOf(uint32(syscall.SIOCGIFGMEMB)), + "SIOCGIFGROUP": ValueOf(uint32(syscall.SIOCGIFGROUP)), + "SIOCGIFINDEX": ValueOf(uint32(syscall.SIOCGIFINDEX)), + "SIOCGIFMAC": ValueOf(uint32(syscall.SIOCGIFMAC)), + "SIOCGIFMEDIA": ValueOf(uint32(syscall.SIOCGIFMEDIA)), + "SIOCGIFMETRIC": ValueOf(uint32(syscall.SIOCGIFMETRIC)), + "SIOCGIFMTU": ValueOf(uint32(syscall.SIOCGIFMTU)), + "SIOCGIFNETMASK": ValueOf(uint32(syscall.SIOCGIFNETMASK)), + "SIOCGIFPDSTADDR": ValueOf(uint32(syscall.SIOCGIFPDSTADDR)), + "SIOCGIFPHYS": ValueOf(uint32(syscall.SIOCGIFPHYS)), + "SIOCGIFPSRCADDR": ValueOf(uint32(syscall.SIOCGIFPSRCADDR)), + "SIOCGIFSTATUS": ValueOf(uint32(syscall.SIOCGIFSTATUS)), + "SIOCGLIFADDR": ValueOf(uint32(syscall.SIOCGLIFADDR)), + "SIOCGLIFPHYADDR": ValueOf(uint32(syscall.SIOCGLIFPHYADDR)), + "SIOCGLOWAT": ValueOf(syscall.SIOCGLOWAT), + "SIOCGPGRP": ValueOf(syscall.SIOCGPGRP), + "SIOCGPRIVATE_0": ValueOf(uint32(syscall.SIOCGPRIVATE_0)), + "SIOCGPRIVATE_1": ValueOf(uint32(syscall.SIOCGPRIVATE_1)), + "SIOCIFCREATE": ValueOf(uint32(syscall.SIOCIFCREATE)), + "SIOCIFCREATE2": ValueOf(uint32(syscall.SIOCIFCREATE2)), + "SIOCIFDESTROY": ValueOf(uint32(syscall.SIOCIFDESTROY)), + "SIOCIFGCLONERS": ValueOf(uint32(syscall.SIOCIFGCLONERS)), + "SIOCSDRVSPEC": ValueOf(uint32(syscall.SIOCSDRVSPEC)), + "SIOCSHIWAT": ValueOf(uint32(syscall.SIOCSHIWAT)), + "SIOCSIFADDR": ValueOf(uint32(syscall.SIOCSIFADDR)), + "SIOCSIFBRDADDR": ValueOf(uint32(syscall.SIOCSIFBRDADDR)), + "SIOCSIFCAP": ValueOf(uint32(syscall.SIOCSIFCAP)), + "SIOCSIFDESCR": ValueOf(uint32(syscall.SIOCSIFDESCR)), + "SIOCSIFDSTADDR": ValueOf(uint32(syscall.SIOCSIFDSTADDR)), + "SIOCSIFFIB": ValueOf(uint32(syscall.SIOCSIFFIB)), + "SIOCSIFFLAGS": ValueOf(uint32(syscall.SIOCSIFFLAGS)), + "SIOCSIFGENERIC": ValueOf(uint32(syscall.SIOCSIFGENERIC)), + "SIOCSIFLLADDR": ValueOf(uint32(syscall.SIOCSIFLLADDR)), + "SIOCSIFMAC": ValueOf(uint32(syscall.SIOCSIFMAC)), + "SIOCSIFMEDIA": ValueOf(uint32(syscall.SIOCSIFMEDIA)), + "SIOCSIFMETRIC": ValueOf(uint32(syscall.SIOCSIFMETRIC)), + "SIOCSIFMTU": ValueOf(uint32(syscall.SIOCSIFMTU)), + "SIOCSIFNAME": ValueOf(uint32(syscall.SIOCSIFNAME)), + "SIOCSIFNETMASK": ValueOf(uint32(syscall.SIOCSIFNETMASK)), + "SIOCSIFPHYADDR": ValueOf(uint32(syscall.SIOCSIFPHYADDR)), + "SIOCSIFPHYS": ValueOf(uint32(syscall.SIOCSIFPHYS)), + "SIOCSIFRVNET": ValueOf(uint32(syscall.SIOCSIFRVNET)), + "SIOCSIFVNET": ValueOf(uint32(syscall.SIOCSIFVNET)), + "SIOCSLIFPHYADDR": ValueOf(uint32(syscall.SIOCSLIFPHYADDR)), + "SIOCSLOWAT": ValueOf(uint32(syscall.SIOCSLOWAT)), + "SIOCSPGRP": ValueOf(uint32(syscall.SIOCSPGRP)), + "SOCK_CLOEXEC": ValueOf(syscall.SOCK_CLOEXEC), + "SOCK_DGRAM": ValueOf(syscall.SOCK_DGRAM), + "SOCK_MAXADDRLEN": ValueOf(syscall.SOCK_MAXADDRLEN), + "SOCK_NONBLOCK": ValueOf(syscall.SOCK_NONBLOCK), + "SOCK_RAW": ValueOf(syscall.SOCK_RAW), + "SOCK_RDM": ValueOf(syscall.SOCK_RDM), + "SOCK_SEQPACKET": ValueOf(syscall.SOCK_SEQPACKET), + "SOCK_STREAM": ValueOf(syscall.SOCK_STREAM), + "SOL_SOCKET": ValueOf(syscall.SOL_SOCKET), + "SOMAXCONN": ValueOf(syscall.SOMAXCONN), + "SO_ACCEPTCONN": ValueOf(syscall.SO_ACCEPTCONN), + "SO_ACCEPTFILTER": ValueOf(syscall.SO_ACCEPTFILTER), + "SO_BINTIME": ValueOf(syscall.SO_BINTIME), + "SO_BROADCAST": ValueOf(syscall.SO_BROADCAST), + "SO_DEBUG": ValueOf(syscall.SO_DEBUG), + "SO_DONTROUTE": ValueOf(syscall.SO_DONTROUTE), + "SO_ERROR": ValueOf(syscall.SO_ERROR), + "SO_KEEPALIVE": ValueOf(syscall.SO_KEEPALIVE), + "SO_LABEL": ValueOf(syscall.SO_LABEL), + "SO_LINGER": ValueOf(syscall.SO_LINGER), + "SO_LISTENINCQLEN": ValueOf(syscall.SO_LISTENINCQLEN), + "SO_LISTENQLEN": ValueOf(syscall.SO_LISTENQLEN), + "SO_LISTENQLIMIT": ValueOf(syscall.SO_LISTENQLIMIT), + "SO_NOSIGPIPE": ValueOf(syscall.SO_NOSIGPIPE), + "SO_NO_DDP": ValueOf(syscall.SO_NO_DDP), + "SO_NO_OFFLOAD": ValueOf(syscall.SO_NO_OFFLOAD), + "SO_OOBINLINE": ValueOf(syscall.SO_OOBINLINE), + "SO_PEERLABEL": ValueOf(syscall.SO_PEERLABEL), + "SO_PROTOCOL": ValueOf(syscall.SO_PROTOCOL), + "SO_PROTOTYPE": ValueOf(syscall.SO_PROTOTYPE), + "SO_RCVBUF": ValueOf(syscall.SO_RCVBUF), + "SO_RCVLOWAT": ValueOf(syscall.SO_RCVLOWAT), + "SO_RCVTIMEO": ValueOf(syscall.SO_RCVTIMEO), + "SO_REUSEADDR": ValueOf(syscall.SO_REUSEADDR), + "SO_REUSEPORT": ValueOf(syscall.SO_REUSEPORT), + "SO_SETFIB": ValueOf(syscall.SO_SETFIB), + "SO_SNDBUF": ValueOf(syscall.SO_SNDBUF), + "SO_SNDLOWAT": ValueOf(syscall.SO_SNDLOWAT), + "SO_SNDTIMEO": ValueOf(syscall.SO_SNDTIMEO), + "SO_TIMESTAMP": ValueOf(syscall.SO_TIMESTAMP), + "SO_TYPE": ValueOf(syscall.SO_TYPE), + "SO_USELOOPBACK": ValueOf(syscall.SO_USELOOPBACK), + "SO_USER_COOKIE": ValueOf(syscall.SO_USER_COOKIE), + "SO_VENDOR": ValueOf(uint32(syscall.SO_VENDOR)), + "SYS_ABORT2": ValueOf(syscall.SYS_ABORT2), + "SYS_ACCEPT": ValueOf(syscall.SYS_ACCEPT), + "SYS_ACCEPT4": ValueOf(syscall.SYS_ACCEPT4), + "SYS_ACCESS": ValueOf(syscall.SYS_ACCESS), + "SYS_ACCT": ValueOf(syscall.SYS_ACCT), + "SYS_ADJTIME": ValueOf(syscall.SYS_ADJTIME), + "SYS_AUDIT": ValueOf(syscall.SYS_AUDIT), + "SYS_AUDITCTL": ValueOf(syscall.SYS_AUDITCTL), + "SYS_AUDITON": ValueOf(syscall.SYS_AUDITON), + "SYS_BIND": ValueOf(syscall.SYS_BIND), + "SYS_BINDAT": ValueOf(syscall.SYS_BINDAT), + "SYS_CAP_ENTER": ValueOf(syscall.SYS_CAP_ENTER), + "SYS_CAP_GETMODE": ValueOf(syscall.SYS_CAP_GETMODE), + "SYS_CAP_GETRIGHTS": ValueOf(syscall.SYS_CAP_GETRIGHTS), + "SYS_CAP_NEW": ValueOf(syscall.SYS_CAP_NEW), + "SYS_CHDIR": ValueOf(syscall.SYS_CHDIR), + "SYS_CHFLAGS": ValueOf(syscall.SYS_CHFLAGS), + "SYS_CHFLAGSAT": ValueOf(syscall.SYS_CHFLAGSAT), + "SYS_CHMOD": ValueOf(syscall.SYS_CHMOD), + "SYS_CHOWN": ValueOf(syscall.SYS_CHOWN), + "SYS_CHROOT": ValueOf(syscall.SYS_CHROOT), + "SYS_CLOCK_GETCPUCLOCKID2": ValueOf(syscall.SYS_CLOCK_GETCPUCLOCKID2), + "SYS_CLOCK_GETRES": ValueOf(syscall.SYS_CLOCK_GETRES), + "SYS_CLOCK_GETTIME": ValueOf(syscall.SYS_CLOCK_GETTIME), + "SYS_CLOCK_SETTIME": ValueOf(syscall.SYS_CLOCK_SETTIME), + "SYS_CLOSE": ValueOf(syscall.SYS_CLOSE), + "SYS_CLOSEFROM": ValueOf(syscall.SYS_CLOSEFROM), + "SYS_CONNECT": ValueOf(syscall.SYS_CONNECT), + "SYS_CONNECTAT": ValueOf(syscall.SYS_CONNECTAT), + "SYS_CPUSET": ValueOf(syscall.SYS_CPUSET), + "SYS_CPUSET_GETAFFINITY": ValueOf(syscall.SYS_CPUSET_GETAFFINITY), + "SYS_CPUSET_GETID": ValueOf(syscall.SYS_CPUSET_GETID), + "SYS_CPUSET_SETAFFINITY": ValueOf(syscall.SYS_CPUSET_SETAFFINITY), + "SYS_CPUSET_SETID": ValueOf(syscall.SYS_CPUSET_SETID), + "SYS_DUP": ValueOf(syscall.SYS_DUP), + "SYS_DUP2": ValueOf(syscall.SYS_DUP2), + "SYS_EACCESS": ValueOf(syscall.SYS_EACCESS), + "SYS_EXECVE": ValueOf(syscall.SYS_EXECVE), + "SYS_EXIT": ValueOf(syscall.SYS_EXIT), + "SYS_EXTATTRCTL": ValueOf(syscall.SYS_EXTATTRCTL), + "SYS_EXTATTR_DELETE_FD": ValueOf(syscall.SYS_EXTATTR_DELETE_FD), + "SYS_EXTATTR_DELETE_FILE": ValueOf(syscall.SYS_EXTATTR_DELETE_FILE), + "SYS_EXTATTR_DELETE_LINK": ValueOf(syscall.SYS_EXTATTR_DELETE_LINK), + "SYS_EXTATTR_GET_FD": ValueOf(syscall.SYS_EXTATTR_GET_FD), + "SYS_EXTATTR_GET_FILE": ValueOf(syscall.SYS_EXTATTR_GET_FILE), + "SYS_EXTATTR_GET_LINK": ValueOf(syscall.SYS_EXTATTR_GET_LINK), + "SYS_EXTATTR_LIST_FD": ValueOf(syscall.SYS_EXTATTR_LIST_FD), + "SYS_EXTATTR_LIST_FILE": ValueOf(syscall.SYS_EXTATTR_LIST_FILE), + "SYS_EXTATTR_LIST_LINK": ValueOf(syscall.SYS_EXTATTR_LIST_LINK), + "SYS_EXTATTR_SET_FD": ValueOf(syscall.SYS_EXTATTR_SET_FD), + "SYS_EXTATTR_SET_FILE": ValueOf(syscall.SYS_EXTATTR_SET_FILE), + "SYS_EXTATTR_SET_LINK": ValueOf(syscall.SYS_EXTATTR_SET_LINK), + "SYS_FACCESSAT": ValueOf(syscall.SYS_FACCESSAT), + "SYS_FCHDIR": ValueOf(syscall.SYS_FCHDIR), + "SYS_FCHFLAGS": ValueOf(syscall.SYS_FCHFLAGS), + "SYS_FCHMOD": ValueOf(syscall.SYS_FCHMOD), + "SYS_FCHMODAT": ValueOf(syscall.SYS_FCHMODAT), + "SYS_FCHOWN": ValueOf(syscall.SYS_FCHOWN), + "SYS_FCHOWNAT": ValueOf(syscall.SYS_FCHOWNAT), + "SYS_FCNTL": ValueOf(syscall.SYS_FCNTL), + "SYS_FEXECVE": ValueOf(syscall.SYS_FEXECVE), + "SYS_FFCLOCK_GETCOUNTER": ValueOf(syscall.SYS_FFCLOCK_GETCOUNTER), + "SYS_FFCLOCK_GETESTIMATE": ValueOf(syscall.SYS_FFCLOCK_GETESTIMATE), + "SYS_FFCLOCK_SETESTIMATE": ValueOf(syscall.SYS_FFCLOCK_SETESTIMATE), + "SYS_FHOPEN": ValueOf(syscall.SYS_FHOPEN), + "SYS_FHSTAT": ValueOf(syscall.SYS_FHSTAT), + "SYS_FHSTATFS": ValueOf(syscall.SYS_FHSTATFS), + "SYS_FLOCK": ValueOf(syscall.SYS_FLOCK), + "SYS_FORK": ValueOf(syscall.SYS_FORK), + "SYS_FPATHCONF": ValueOf(syscall.SYS_FPATHCONF), + "SYS_FREEBSD6_FTRUNCATE": ValueOf(syscall.SYS_FREEBSD6_FTRUNCATE), + "SYS_FREEBSD6_LSEEK": ValueOf(syscall.SYS_FREEBSD6_LSEEK), + "SYS_FREEBSD6_MMAP": ValueOf(syscall.SYS_FREEBSD6_MMAP), + "SYS_FREEBSD6_PREAD": ValueOf(syscall.SYS_FREEBSD6_PREAD), + "SYS_FREEBSD6_PWRITE": ValueOf(syscall.SYS_FREEBSD6_PWRITE), + "SYS_FREEBSD6_TRUNCATE": ValueOf(syscall.SYS_FREEBSD6_TRUNCATE), + "SYS_FSTAT": ValueOf(syscall.SYS_FSTAT), + "SYS_FSTATAT": ValueOf(syscall.SYS_FSTATAT), + "SYS_FSTATFS": ValueOf(syscall.SYS_FSTATFS), + "SYS_FSYNC": ValueOf(syscall.SYS_FSYNC), + "SYS_FTRUNCATE": ValueOf(syscall.SYS_FTRUNCATE), + "SYS_FUTIMES": ValueOf(syscall.SYS_FUTIMES), + "SYS_FUTIMESAT": ValueOf(syscall.SYS_FUTIMESAT), + "SYS_GETAUDIT": ValueOf(syscall.SYS_GETAUDIT), + "SYS_GETAUDIT_ADDR": ValueOf(syscall.SYS_GETAUDIT_ADDR), + "SYS_GETAUID": ValueOf(syscall.SYS_GETAUID), + "SYS_GETCONTEXT": ValueOf(syscall.SYS_GETCONTEXT), + "SYS_GETDENTS": ValueOf(syscall.SYS_GETDENTS), + "SYS_GETDIRENTRIES": ValueOf(syscall.SYS_GETDIRENTRIES), + "SYS_GETDTABLESIZE": ValueOf(syscall.SYS_GETDTABLESIZE), + "SYS_GETEGID": ValueOf(syscall.SYS_GETEGID), + "SYS_GETEUID": ValueOf(syscall.SYS_GETEUID), + "SYS_GETFH": ValueOf(syscall.SYS_GETFH), + "SYS_GETFSSTAT": ValueOf(syscall.SYS_GETFSSTAT), + "SYS_GETGID": ValueOf(syscall.SYS_GETGID), + "SYS_GETGROUPS": ValueOf(syscall.SYS_GETGROUPS), + "SYS_GETITIMER": ValueOf(syscall.SYS_GETITIMER), + "SYS_GETLOGIN": ValueOf(syscall.SYS_GETLOGIN), + "SYS_GETLOGINCLASS": ValueOf(syscall.SYS_GETLOGINCLASS), + "SYS_GETPEERNAME": ValueOf(syscall.SYS_GETPEERNAME), + "SYS_GETPGID": ValueOf(syscall.SYS_GETPGID), + "SYS_GETPGRP": ValueOf(syscall.SYS_GETPGRP), + "SYS_GETPID": ValueOf(syscall.SYS_GETPID), + "SYS_GETPPID": ValueOf(syscall.SYS_GETPPID), + "SYS_GETPRIORITY": ValueOf(syscall.SYS_GETPRIORITY), + "SYS_GETRESGID": ValueOf(syscall.SYS_GETRESGID), + "SYS_GETRESUID": ValueOf(syscall.SYS_GETRESUID), + "SYS_GETRLIMIT": ValueOf(syscall.SYS_GETRLIMIT), + "SYS_GETRUSAGE": ValueOf(syscall.SYS_GETRUSAGE), + "SYS_GETSID": ValueOf(syscall.SYS_GETSID), + "SYS_GETSOCKNAME": ValueOf(syscall.SYS_GETSOCKNAME), + "SYS_GETSOCKOPT": ValueOf(syscall.SYS_GETSOCKOPT), + "SYS_GETTIMEOFDAY": ValueOf(syscall.SYS_GETTIMEOFDAY), + "SYS_GETUID": ValueOf(syscall.SYS_GETUID), + "SYS_IOCTL": ValueOf(syscall.SYS_IOCTL), + "SYS_ISSETUGID": ValueOf(syscall.SYS_ISSETUGID), + "SYS_JAIL": ValueOf(syscall.SYS_JAIL), + "SYS_JAIL_ATTACH": ValueOf(syscall.SYS_JAIL_ATTACH), + "SYS_JAIL_GET": ValueOf(syscall.SYS_JAIL_GET), + "SYS_JAIL_REMOVE": ValueOf(syscall.SYS_JAIL_REMOVE), + "SYS_JAIL_SET": ValueOf(syscall.SYS_JAIL_SET), + "SYS_KENV": ValueOf(syscall.SYS_KENV), + "SYS_KEVENT": ValueOf(syscall.SYS_KEVENT), + "SYS_KILL": ValueOf(syscall.SYS_KILL), + "SYS_KLDFIND": ValueOf(syscall.SYS_KLDFIND), + "SYS_KLDFIRSTMOD": ValueOf(syscall.SYS_KLDFIRSTMOD), + "SYS_KLDLOAD": ValueOf(syscall.SYS_KLDLOAD), + "SYS_KLDNEXT": ValueOf(syscall.SYS_KLDNEXT), + "SYS_KLDSTAT": ValueOf(syscall.SYS_KLDSTAT), + "SYS_KLDSYM": ValueOf(syscall.SYS_KLDSYM), + "SYS_KLDUNLOAD": ValueOf(syscall.SYS_KLDUNLOAD), + "SYS_KLDUNLOADF": ValueOf(syscall.SYS_KLDUNLOADF), + "SYS_KQUEUE": ValueOf(syscall.SYS_KQUEUE), + "SYS_KTIMER_CREATE": ValueOf(syscall.SYS_KTIMER_CREATE), + "SYS_KTIMER_DELETE": ValueOf(syscall.SYS_KTIMER_DELETE), + "SYS_KTIMER_GETOVERRUN": ValueOf(syscall.SYS_KTIMER_GETOVERRUN), + "SYS_KTIMER_GETTIME": ValueOf(syscall.SYS_KTIMER_GETTIME), + "SYS_KTIMER_SETTIME": ValueOf(syscall.SYS_KTIMER_SETTIME), + "SYS_KTRACE": ValueOf(syscall.SYS_KTRACE), + "SYS_LCHFLAGS": ValueOf(syscall.SYS_LCHFLAGS), + "SYS_LCHMOD": ValueOf(syscall.SYS_LCHMOD), + "SYS_LCHOWN": ValueOf(syscall.SYS_LCHOWN), + "SYS_LGETFH": ValueOf(syscall.SYS_LGETFH), + "SYS_LINK": ValueOf(syscall.SYS_LINK), + "SYS_LINKAT": ValueOf(syscall.SYS_LINKAT), + "SYS_LISTEN": ValueOf(syscall.SYS_LISTEN), + "SYS_LPATHCONF": ValueOf(syscall.SYS_LPATHCONF), + "SYS_LSEEK": ValueOf(syscall.SYS_LSEEK), + "SYS_LSTAT": ValueOf(syscall.SYS_LSTAT), + "SYS_LUTIMES": ValueOf(syscall.SYS_LUTIMES), + "SYS_MAC_SYSCALL": ValueOf(syscall.SYS_MAC_SYSCALL), + "SYS_MADVISE": ValueOf(syscall.SYS_MADVISE), + "SYS_MINCORE": ValueOf(syscall.SYS_MINCORE), + "SYS_MINHERIT": ValueOf(syscall.SYS_MINHERIT), + "SYS_MKDIR": ValueOf(syscall.SYS_MKDIR), + "SYS_MKDIRAT": ValueOf(syscall.SYS_MKDIRAT), + "SYS_MKFIFO": ValueOf(syscall.SYS_MKFIFO), + "SYS_MKFIFOAT": ValueOf(syscall.SYS_MKFIFOAT), + "SYS_MKNOD": ValueOf(syscall.SYS_MKNOD), + "SYS_MKNODAT": ValueOf(syscall.SYS_MKNODAT), + "SYS_MLOCK": ValueOf(syscall.SYS_MLOCK), + "SYS_MLOCKALL": ValueOf(syscall.SYS_MLOCKALL), + "SYS_MMAP": ValueOf(syscall.SYS_MMAP), + "SYS_MODFIND": ValueOf(syscall.SYS_MODFIND), + "SYS_MODFNEXT": ValueOf(syscall.SYS_MODFNEXT), + "SYS_MODNEXT": ValueOf(syscall.SYS_MODNEXT), + "SYS_MODSTAT": ValueOf(syscall.SYS_MODSTAT), + "SYS_MOUNT": ValueOf(syscall.SYS_MOUNT), + "SYS_MPROTECT": ValueOf(syscall.SYS_MPROTECT), + "SYS_MSYNC": ValueOf(syscall.SYS_MSYNC), + "SYS_MUNLOCK": ValueOf(syscall.SYS_MUNLOCK), + "SYS_MUNLOCKALL": ValueOf(syscall.SYS_MUNLOCKALL), + "SYS_MUNMAP": ValueOf(syscall.SYS_MUNMAP), + "SYS_NANOSLEEP": ValueOf(syscall.SYS_NANOSLEEP), + "SYS_NFSTAT": ValueOf(syscall.SYS_NFSTAT), + "SYS_NLSTAT": ValueOf(syscall.SYS_NLSTAT), + "SYS_NMOUNT": ValueOf(syscall.SYS_NMOUNT), + "SYS_NSTAT": ValueOf(syscall.SYS_NSTAT), + "SYS_NTP_ADJTIME": ValueOf(syscall.SYS_NTP_ADJTIME), + "SYS_NTP_GETTIME": ValueOf(syscall.SYS_NTP_GETTIME), + "SYS_OBREAK": ValueOf(syscall.SYS_OBREAK), + "SYS_OPEN": ValueOf(syscall.SYS_OPEN), + "SYS_OPENAT": ValueOf(syscall.SYS_OPENAT), + "SYS_OPENBSD_POLL": ValueOf(syscall.SYS_OPENBSD_POLL), + "SYS_OVADVISE": ValueOf(syscall.SYS_OVADVISE), + "SYS_PATHCONF": ValueOf(syscall.SYS_PATHCONF), + "SYS_PDFORK": ValueOf(syscall.SYS_PDFORK), + "SYS_PDGETPID": ValueOf(syscall.SYS_PDGETPID), + "SYS_PDKILL": ValueOf(syscall.SYS_PDKILL), + "SYS_PIPE": ValueOf(syscall.SYS_PIPE), + "SYS_PIPE2": ValueOf(syscall.SYS_PIPE2), + "SYS_POLL": ValueOf(syscall.SYS_POLL), + "SYS_POSIX_FADVISE": ValueOf(syscall.SYS_POSIX_FADVISE), + "SYS_POSIX_FALLOCATE": ValueOf(syscall.SYS_POSIX_FALLOCATE), + "SYS_POSIX_OPENPT": ValueOf(syscall.SYS_POSIX_OPENPT), + "SYS_PREAD": ValueOf(syscall.SYS_PREAD), + "SYS_PREADV": ValueOf(syscall.SYS_PREADV), + "SYS_PROCCTL": ValueOf(syscall.SYS_PROCCTL), + "SYS_PROFIL": ValueOf(syscall.SYS_PROFIL), + "SYS_PSELECT": ValueOf(syscall.SYS_PSELECT), + "SYS_PTRACE": ValueOf(syscall.SYS_PTRACE), + "SYS_PWRITE": ValueOf(syscall.SYS_PWRITE), + "SYS_PWRITEV": ValueOf(syscall.SYS_PWRITEV), + "SYS_QUOTACTL": ValueOf(syscall.SYS_QUOTACTL), + "SYS_RCTL_ADD_RULE": ValueOf(syscall.SYS_RCTL_ADD_RULE), + "SYS_RCTL_GET_LIMITS": ValueOf(syscall.SYS_RCTL_GET_LIMITS), + "SYS_RCTL_GET_RACCT": ValueOf(syscall.SYS_RCTL_GET_RACCT), + "SYS_RCTL_GET_RULES": ValueOf(syscall.SYS_RCTL_GET_RULES), + "SYS_RCTL_REMOVE_RULE": ValueOf(syscall.SYS_RCTL_REMOVE_RULE), + "SYS_READ": ValueOf(syscall.SYS_READ), + "SYS_READLINK": ValueOf(syscall.SYS_READLINK), + "SYS_READLINKAT": ValueOf(syscall.SYS_READLINKAT), + "SYS_READV": ValueOf(syscall.SYS_READV), + "SYS_REBOOT": ValueOf(syscall.SYS_REBOOT), + "SYS_RECVFROM": ValueOf(syscall.SYS_RECVFROM), + "SYS_RECVMSG": ValueOf(syscall.SYS_RECVMSG), + "SYS_RENAME": ValueOf(syscall.SYS_RENAME), + "SYS_RENAMEAT": ValueOf(syscall.SYS_RENAMEAT), + "SYS_REVOKE": ValueOf(syscall.SYS_REVOKE), + "SYS_RFORK": ValueOf(syscall.SYS_RFORK), + "SYS_RMDIR": ValueOf(syscall.SYS_RMDIR), + "SYS_RTPRIO": ValueOf(syscall.SYS_RTPRIO), + "SYS_RTPRIO_THREAD": ValueOf(syscall.SYS_RTPRIO_THREAD), + "SYS_SBRK": ValueOf(syscall.SYS_SBRK), + "SYS_SCHED_GETPARAM": ValueOf(syscall.SYS_SCHED_GETPARAM), + "SYS_SCHED_GETSCHEDULER": ValueOf(syscall.SYS_SCHED_GETSCHEDULER), + "SYS_SCHED_GET_PRIORITY_MAX": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MAX), + "SYS_SCHED_GET_PRIORITY_MIN": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MIN), + "SYS_SCHED_RR_GET_INTERVAL": ValueOf(syscall.SYS_SCHED_RR_GET_INTERVAL), + "SYS_SCHED_SETPARAM": ValueOf(syscall.SYS_SCHED_SETPARAM), + "SYS_SCHED_SETSCHEDULER": ValueOf(syscall.SYS_SCHED_SETSCHEDULER), + "SYS_SCHED_YIELD": ValueOf(syscall.SYS_SCHED_YIELD), + "SYS_SCTP_GENERIC_RECVMSG": ValueOf(syscall.SYS_SCTP_GENERIC_RECVMSG), + "SYS_SCTP_GENERIC_SENDMSG": ValueOf(syscall.SYS_SCTP_GENERIC_SENDMSG), + "SYS_SCTP_GENERIC_SENDMSG_IOV": ValueOf(syscall.SYS_SCTP_GENERIC_SENDMSG_IOV), + "SYS_SCTP_PEELOFF": ValueOf(syscall.SYS_SCTP_PEELOFF), + "SYS_SELECT": ValueOf(syscall.SYS_SELECT), + "SYS_SENDFILE": ValueOf(syscall.SYS_SENDFILE), + "SYS_SENDMSG": ValueOf(syscall.SYS_SENDMSG), + "SYS_SENDTO": ValueOf(syscall.SYS_SENDTO), + "SYS_SETAUDIT": ValueOf(syscall.SYS_SETAUDIT), + "SYS_SETAUDIT_ADDR": ValueOf(syscall.SYS_SETAUDIT_ADDR), + "SYS_SETAUID": ValueOf(syscall.SYS_SETAUID), + "SYS_SETCONTEXT": ValueOf(syscall.SYS_SETCONTEXT), + "SYS_SETEGID": ValueOf(syscall.SYS_SETEGID), + "SYS_SETEUID": ValueOf(syscall.SYS_SETEUID), + "SYS_SETFIB": ValueOf(syscall.SYS_SETFIB), + "SYS_SETGID": ValueOf(syscall.SYS_SETGID), + "SYS_SETGROUPS": ValueOf(syscall.SYS_SETGROUPS), + "SYS_SETITIMER": ValueOf(syscall.SYS_SETITIMER), + "SYS_SETLOGIN": ValueOf(syscall.SYS_SETLOGIN), + "SYS_SETLOGINCLASS": ValueOf(syscall.SYS_SETLOGINCLASS), + "SYS_SETPGID": ValueOf(syscall.SYS_SETPGID), + "SYS_SETPRIORITY": ValueOf(syscall.SYS_SETPRIORITY), + "SYS_SETREGID": ValueOf(syscall.SYS_SETREGID), + "SYS_SETRESGID": ValueOf(syscall.SYS_SETRESGID), + "SYS_SETRESUID": ValueOf(syscall.SYS_SETRESUID), + "SYS_SETREUID": ValueOf(syscall.SYS_SETREUID), + "SYS_SETRLIMIT": ValueOf(syscall.SYS_SETRLIMIT), + "SYS_SETSID": ValueOf(syscall.SYS_SETSID), + "SYS_SETSOCKOPT": ValueOf(syscall.SYS_SETSOCKOPT), + "SYS_SETTIMEOFDAY": ValueOf(syscall.SYS_SETTIMEOFDAY), + "SYS_SETUID": ValueOf(syscall.SYS_SETUID), + "SYS_SHM_OPEN": ValueOf(syscall.SYS_SHM_OPEN), + "SYS_SHM_UNLINK": ValueOf(syscall.SYS_SHM_UNLINK), + "SYS_SHUTDOWN": ValueOf(syscall.SYS_SHUTDOWN), + "SYS_SIGACTION": ValueOf(syscall.SYS_SIGACTION), + "SYS_SIGALTSTACK": ValueOf(syscall.SYS_SIGALTSTACK), + "SYS_SIGPENDING": ValueOf(syscall.SYS_SIGPENDING), + "SYS_SIGPROCMASK": ValueOf(syscall.SYS_SIGPROCMASK), + "SYS_SIGQUEUE": ValueOf(syscall.SYS_SIGQUEUE), + "SYS_SIGRETURN": ValueOf(syscall.SYS_SIGRETURN), + "SYS_SIGSUSPEND": ValueOf(syscall.SYS_SIGSUSPEND), + "SYS_SIGTIMEDWAIT": ValueOf(syscall.SYS_SIGTIMEDWAIT), + "SYS_SIGWAIT": ValueOf(syscall.SYS_SIGWAIT), + "SYS_SIGWAITINFO": ValueOf(syscall.SYS_SIGWAITINFO), + "SYS_SOCKET": ValueOf(syscall.SYS_SOCKET), + "SYS_SOCKETPAIR": ValueOf(syscall.SYS_SOCKETPAIR), + "SYS_SSTK": ValueOf(syscall.SYS_SSTK), + "SYS_STAT": ValueOf(syscall.SYS_STAT), + "SYS_STATFS": ValueOf(syscall.SYS_STATFS), + "SYS_SWAPCONTEXT": ValueOf(syscall.SYS_SWAPCONTEXT), + "SYS_SWAPOFF": ValueOf(syscall.SYS_SWAPOFF), + "SYS_SWAPON": ValueOf(syscall.SYS_SWAPON), + "SYS_SYMLINK": ValueOf(syscall.SYS_SYMLINK), + "SYS_SYMLINKAT": ValueOf(syscall.SYS_SYMLINKAT), + "SYS_SYNC": ValueOf(syscall.SYS_SYNC), + "SYS_SYSARCH": ValueOf(syscall.SYS_SYSARCH), + "SYS_THR_CREATE": ValueOf(syscall.SYS_THR_CREATE), + "SYS_THR_EXIT": ValueOf(syscall.SYS_THR_EXIT), + "SYS_THR_KILL": ValueOf(syscall.SYS_THR_KILL), + "SYS_THR_KILL2": ValueOf(syscall.SYS_THR_KILL2), + "SYS_THR_NEW": ValueOf(syscall.SYS_THR_NEW), + "SYS_THR_SELF": ValueOf(syscall.SYS_THR_SELF), + "SYS_THR_SET_NAME": ValueOf(syscall.SYS_THR_SET_NAME), + "SYS_THR_SUSPEND": ValueOf(syscall.SYS_THR_SUSPEND), + "SYS_THR_WAKE": ValueOf(syscall.SYS_THR_WAKE), + "SYS_TRUNCATE": ValueOf(syscall.SYS_TRUNCATE), + "SYS_UMASK": ValueOf(syscall.SYS_UMASK), + "SYS_UNDELETE": ValueOf(syscall.SYS_UNDELETE), + "SYS_UNLINK": ValueOf(syscall.SYS_UNLINK), + "SYS_UNLINKAT": ValueOf(syscall.SYS_UNLINKAT), + "SYS_UNMOUNT": ValueOf(syscall.SYS_UNMOUNT), + "SYS_UTIMES": ValueOf(syscall.SYS_UTIMES), + "SYS_UTRACE": ValueOf(syscall.SYS_UTRACE), + "SYS_UUIDGEN": ValueOf(syscall.SYS_UUIDGEN), + "SYS_VFORK": ValueOf(syscall.SYS_VFORK), + "SYS_WAIT4": ValueOf(syscall.SYS_WAIT4), + "SYS_WAIT6": ValueOf(syscall.SYS_WAIT6), + "SYS_WRITE": ValueOf(syscall.SYS_WRITE), + "SYS_WRITEV": ValueOf(syscall.SYS_WRITEV), + "SYS_YIELD": ValueOf(syscall.SYS_YIELD), + "SYS__UMTX_LOCK": ValueOf(syscall.SYS__UMTX_LOCK), + "SYS__UMTX_OP": ValueOf(syscall.SYS__UMTX_OP), + "SYS__UMTX_UNLOCK": ValueOf(syscall.SYS__UMTX_UNLOCK), + "SYS___ACL_ACLCHECK_FD": ValueOf(syscall.SYS___ACL_ACLCHECK_FD), + "SYS___ACL_ACLCHECK_FILE": ValueOf(syscall.SYS___ACL_ACLCHECK_FILE), + "SYS___ACL_ACLCHECK_LINK": ValueOf(syscall.SYS___ACL_ACLCHECK_LINK), + "SYS___ACL_DELETE_FD": ValueOf(syscall.SYS___ACL_DELETE_FD), + "SYS___ACL_DELETE_FILE": ValueOf(syscall.SYS___ACL_DELETE_FILE), + "SYS___ACL_DELETE_LINK": ValueOf(syscall.SYS___ACL_DELETE_LINK), + "SYS___ACL_GET_FD": ValueOf(syscall.SYS___ACL_GET_FD), + "SYS___ACL_GET_FILE": ValueOf(syscall.SYS___ACL_GET_FILE), + "SYS___ACL_GET_LINK": ValueOf(syscall.SYS___ACL_GET_LINK), + "SYS___ACL_SET_FD": ValueOf(syscall.SYS___ACL_SET_FD), + "SYS___ACL_SET_FILE": ValueOf(syscall.SYS___ACL_SET_FILE), + "SYS___ACL_SET_LINK": ValueOf(syscall.SYS___ACL_SET_LINK), + "SYS___GETCWD": ValueOf(syscall.SYS___GETCWD), + "SYS___MAC_EXECVE": ValueOf(syscall.SYS___MAC_EXECVE), + "SYS___MAC_GET_FD": ValueOf(syscall.SYS___MAC_GET_FD), + "SYS___MAC_GET_FILE": ValueOf(syscall.SYS___MAC_GET_FILE), + "SYS___MAC_GET_LINK": ValueOf(syscall.SYS___MAC_GET_LINK), + "SYS___MAC_GET_PID": ValueOf(syscall.SYS___MAC_GET_PID), + "SYS___MAC_GET_PROC": ValueOf(syscall.SYS___MAC_GET_PROC), + "SYS___MAC_SET_FD": ValueOf(syscall.SYS___MAC_SET_FD), + "SYS___MAC_SET_FILE": ValueOf(syscall.SYS___MAC_SET_FILE), + "SYS___MAC_SET_LINK": ValueOf(syscall.SYS___MAC_SET_LINK), + "SYS___MAC_SET_PROC": ValueOf(syscall.SYS___MAC_SET_PROC), + "SYS___SETUGID": ValueOf(syscall.SYS___SETUGID), + "SYS___SYSCTL": ValueOf(syscall.SYS___SYSCTL), + "S_IFBLK": ValueOf(syscall.S_IFBLK), + "S_IFCHR": ValueOf(syscall.S_IFCHR), + "S_IFDIR": ValueOf(syscall.S_IFDIR), + "S_IFIFO": ValueOf(syscall.S_IFIFO), + "S_IFLNK": ValueOf(syscall.S_IFLNK), + "S_IFMT": ValueOf(syscall.S_IFMT), + "S_IFREG": ValueOf(syscall.S_IFREG), + "S_IFSOCK": ValueOf(syscall.S_IFSOCK), + "S_IRUSR": ValueOf(syscall.S_IRUSR), + "S_ISGID": ValueOf(syscall.S_ISGID), + "S_ISUID": ValueOf(syscall.S_ISUID), + "S_ISVTX": ValueOf(syscall.S_ISVTX), + "S_IWUSR": ValueOf(syscall.S_IWUSR), + "S_IXUSR": ValueOf(syscall.S_IXUSR), + "Seek": ValueOf(syscall.Seek), + "Select": ValueOf(syscall.Select), + "Sendfile": ValueOf(syscall.Sendfile), + "Sendmsg": ValueOf(syscall.Sendmsg), + "SendmsgN": ValueOf(syscall.SendmsgN), + "Sendto": ValueOf(syscall.Sendto), + "SetBpf": ValueOf(syscall.SetBpf), + "SetBpfBuflen": ValueOf(syscall.SetBpfBuflen), + "SetBpfDatalink": ValueOf(syscall.SetBpfDatalink), + "SetBpfHeadercmpl": ValueOf(syscall.SetBpfHeadercmpl), + "SetBpfImmediate": ValueOf(syscall.SetBpfImmediate), + "SetBpfInterface": ValueOf(syscall.SetBpfInterface), + "SetBpfPromisc": ValueOf(syscall.SetBpfPromisc), + "SetBpfTimeout": ValueOf(syscall.SetBpfTimeout), + "SetKevent": ValueOf(syscall.SetKevent), + "SetNonblock": ValueOf(syscall.SetNonblock), + "Setegid": ValueOf(syscall.Setegid), + "Setenv": ValueOf(syscall.Setenv), + "Seteuid": ValueOf(syscall.Seteuid), + "Setgid": ValueOf(syscall.Setgid), + "Setgroups": ValueOf(syscall.Setgroups), + "Setlogin": ValueOf(syscall.Setlogin), + "Setpgid": ValueOf(syscall.Setpgid), + "Setpriority": ValueOf(syscall.Setpriority), + "Setregid": ValueOf(syscall.Setregid), + "Setreuid": ValueOf(syscall.Setreuid), + "Setrlimit": ValueOf(syscall.Setrlimit), + "Setsid": ValueOf(syscall.Setsid), + "SetsockoptByte": ValueOf(syscall.SetsockoptByte), + "SetsockoptICMPv6Filter": ValueOf(syscall.SetsockoptICMPv6Filter), + "SetsockoptIPMreq": ValueOf(syscall.SetsockoptIPMreq), + "SetsockoptIPMreqn": ValueOf(syscall.SetsockoptIPMreqn), + "SetsockoptIPv6Mreq": ValueOf(syscall.SetsockoptIPv6Mreq), + "SetsockoptInet4Addr": ValueOf(syscall.SetsockoptInet4Addr), + "SetsockoptInt": ValueOf(syscall.SetsockoptInt), + "SetsockoptLinger": ValueOf(syscall.SetsockoptLinger), + "SetsockoptString": ValueOf(syscall.SetsockoptString), + "SetsockoptTimeval": ValueOf(syscall.SetsockoptTimeval), + "Settimeofday": ValueOf(syscall.Settimeofday), + "Setuid": ValueOf(syscall.Setuid), + "Shutdown": ValueOf(syscall.Shutdown), + "SizeofBpfHdr": ValueOf(syscall.SizeofBpfHdr), + "SizeofBpfInsn": ValueOf(syscall.SizeofBpfInsn), + "SizeofBpfProgram": ValueOf(syscall.SizeofBpfProgram), + "SizeofBpfStat": ValueOf(syscall.SizeofBpfStat), + "SizeofBpfVersion": ValueOf(syscall.SizeofBpfVersion), + "SizeofBpfZbuf": ValueOf(syscall.SizeofBpfZbuf), + "SizeofBpfZbufHeader": ValueOf(syscall.SizeofBpfZbufHeader), + "SizeofCmsghdr": ValueOf(syscall.SizeofCmsghdr), + "SizeofICMPv6Filter": ValueOf(syscall.SizeofICMPv6Filter), + "SizeofIPMreq": ValueOf(syscall.SizeofIPMreq), + "SizeofIPMreqn": ValueOf(syscall.SizeofIPMreqn), + "SizeofIPv6MTUInfo": ValueOf(syscall.SizeofIPv6MTUInfo), + "SizeofIPv6Mreq": ValueOf(syscall.SizeofIPv6Mreq), + "SizeofIfAnnounceMsghdr": ValueOf(syscall.SizeofIfAnnounceMsghdr), + "SizeofIfData": ValueOf(syscall.SizeofIfData), + "SizeofIfMsghdr": ValueOf(syscall.SizeofIfMsghdr), + "SizeofIfaMsghdr": ValueOf(syscall.SizeofIfaMsghdr), + "SizeofIfmaMsghdr": ValueOf(syscall.SizeofIfmaMsghdr), + "SizeofInet6Pktinfo": ValueOf(syscall.SizeofInet6Pktinfo), + "SizeofLinger": ValueOf(syscall.SizeofLinger), + "SizeofMsghdr": ValueOf(syscall.SizeofMsghdr), + "SizeofRtMetrics": ValueOf(syscall.SizeofRtMetrics), + "SizeofRtMsghdr": ValueOf(syscall.SizeofRtMsghdr), + "SizeofSockaddrAny": ValueOf(syscall.SizeofSockaddrAny), + "SizeofSockaddrDatalink": ValueOf(syscall.SizeofSockaddrDatalink), + "SizeofSockaddrInet4": ValueOf(syscall.SizeofSockaddrInet4), + "SizeofSockaddrInet6": ValueOf(syscall.SizeofSockaddrInet6), + "SizeofSockaddrUnix": ValueOf(syscall.SizeofSockaddrUnix), + "SlicePtrFromStrings": ValueOf(syscall.SlicePtrFromStrings), + "Socket": ValueOf(syscall.Socket), + "SocketDisableIPv6": ValueOf(&syscall.SocketDisableIPv6).Elem(), + "Socketpair": ValueOf(syscall.Socketpair), + "StartProcess": ValueOf(syscall.StartProcess), + "Stat": ValueOf(syscall.Stat), + "Statfs": ValueOf(syscall.Statfs), + "Stderr": ValueOf(&syscall.Stderr).Elem(), + "Stdin": ValueOf(&syscall.Stdin).Elem(), + "Stdout": ValueOf(&syscall.Stdout).Elem(), + "StringBytePtr": ValueOf(syscall.StringBytePtr), + "StringByteSlice": ValueOf(syscall.StringByteSlice), + "StringSlicePtr": ValueOf(syscall.StringSlicePtr), + "Symlink": ValueOf(syscall.Symlink), + "Sync": ValueOf(syscall.Sync), + "Syscall": ValueOf(syscall.Syscall), + "Syscall6": ValueOf(syscall.Syscall6), + "Syscall9": ValueOf(syscall.Syscall9), + "Sysctl": ValueOf(syscall.Sysctl), + "SysctlUint32": ValueOf(syscall.SysctlUint32), + "TCIFLUSH": ValueOf(syscall.TCIFLUSH), + "TCIOFLUSH": ValueOf(syscall.TCIOFLUSH), + "TCOFLUSH": ValueOf(syscall.TCOFLUSH), + "TCP_CA_NAME_MAX": ValueOf(syscall.TCP_CA_NAME_MAX), + "TCP_CONGESTION": ValueOf(syscall.TCP_CONGESTION), + "TCP_INFO": ValueOf(syscall.TCP_INFO), + "TCP_KEEPCNT": ValueOf(syscall.TCP_KEEPCNT), + "TCP_KEEPIDLE": ValueOf(syscall.TCP_KEEPIDLE), + "TCP_KEEPINIT": ValueOf(syscall.TCP_KEEPINIT), + "TCP_KEEPINTVL": ValueOf(syscall.TCP_KEEPINTVL), + "TCP_MAXBURST": ValueOf(syscall.TCP_MAXBURST), + "TCP_MAXHLEN": ValueOf(syscall.TCP_MAXHLEN), + "TCP_MAXOLEN": ValueOf(syscall.TCP_MAXOLEN), + "TCP_MAXSEG": ValueOf(syscall.TCP_MAXSEG), + "TCP_MAXWIN": ValueOf(syscall.TCP_MAXWIN), + "TCP_MAX_SACK": ValueOf(syscall.TCP_MAX_SACK), + "TCP_MAX_WINSHIFT": ValueOf(syscall.TCP_MAX_WINSHIFT), + "TCP_MD5SIG": ValueOf(syscall.TCP_MD5SIG), + "TCP_MINMSS": ValueOf(syscall.TCP_MINMSS), + "TCP_MSS": ValueOf(syscall.TCP_MSS), + "TCP_NODELAY": ValueOf(syscall.TCP_NODELAY), + "TCP_NOOPT": ValueOf(syscall.TCP_NOOPT), + "TCP_NOPUSH": ValueOf(syscall.TCP_NOPUSH), + "TCP_VENDOR": ValueOf(uint32(syscall.TCP_VENDOR)), + "TCSAFLUSH": ValueOf(syscall.TCSAFLUSH), + "TIOCCBRK": ValueOf(syscall.TIOCCBRK), + "TIOCCDTR": ValueOf(syscall.TIOCCDTR), + "TIOCCONS": ValueOf(uint32(syscall.TIOCCONS)), + "TIOCDRAIN": ValueOf(syscall.TIOCDRAIN), + "TIOCEXCL": ValueOf(syscall.TIOCEXCL), + "TIOCEXT": ValueOf(uint32(syscall.TIOCEXT)), + "TIOCFLUSH": ValueOf(uint32(syscall.TIOCFLUSH)), + "TIOCGDRAINWAIT": ValueOf(syscall.TIOCGDRAINWAIT), + "TIOCGETA": ValueOf(syscall.TIOCGETA), + "TIOCGETD": ValueOf(syscall.TIOCGETD), + "TIOCGPGRP": ValueOf(syscall.TIOCGPGRP), + "TIOCGPTN": ValueOf(syscall.TIOCGPTN), + "TIOCGSID": ValueOf(syscall.TIOCGSID), + "TIOCGWINSZ": ValueOf(syscall.TIOCGWINSZ), + "TIOCMBIC": ValueOf(uint32(syscall.TIOCMBIC)), + "TIOCMBIS": ValueOf(uint32(syscall.TIOCMBIS)), + "TIOCMGDTRWAIT": ValueOf(syscall.TIOCMGDTRWAIT), + "TIOCMGET": ValueOf(syscall.TIOCMGET), + "TIOCMSDTRWAIT": ValueOf(uint32(syscall.TIOCMSDTRWAIT)), + "TIOCMSET": ValueOf(uint32(syscall.TIOCMSET)), + "TIOCM_CAR": ValueOf(syscall.TIOCM_CAR), + "TIOCM_CD": ValueOf(syscall.TIOCM_CD), + "TIOCM_CTS": ValueOf(syscall.TIOCM_CTS), + "TIOCM_DCD": ValueOf(syscall.TIOCM_DCD), + "TIOCM_DSR": ValueOf(syscall.TIOCM_DSR), + "TIOCM_DTR": ValueOf(syscall.TIOCM_DTR), + "TIOCM_LE": ValueOf(syscall.TIOCM_LE), + "TIOCM_RI": ValueOf(syscall.TIOCM_RI), + "TIOCM_RNG": ValueOf(syscall.TIOCM_RNG), + "TIOCM_RTS": ValueOf(syscall.TIOCM_RTS), + "TIOCM_SR": ValueOf(syscall.TIOCM_SR), + "TIOCM_ST": ValueOf(syscall.TIOCM_ST), + "TIOCNOTTY": ValueOf(syscall.TIOCNOTTY), + "TIOCNXCL": ValueOf(syscall.TIOCNXCL), + "TIOCOUTQ": ValueOf(syscall.TIOCOUTQ), + "TIOCPKT": ValueOf(uint32(syscall.TIOCPKT)), + "TIOCPKT_DATA": ValueOf(syscall.TIOCPKT_DATA), + "TIOCPKT_DOSTOP": ValueOf(syscall.TIOCPKT_DOSTOP), + "TIOCPKT_FLUSHREAD": ValueOf(syscall.TIOCPKT_FLUSHREAD), + "TIOCPKT_FLUSHWRITE": ValueOf(syscall.TIOCPKT_FLUSHWRITE), + "TIOCPKT_IOCTL": ValueOf(syscall.TIOCPKT_IOCTL), + "TIOCPKT_NOSTOP": ValueOf(syscall.TIOCPKT_NOSTOP), + "TIOCPKT_START": ValueOf(syscall.TIOCPKT_START), + "TIOCPKT_STOP": ValueOf(syscall.TIOCPKT_STOP), + "TIOCPTMASTER": ValueOf(syscall.TIOCPTMASTER), + "TIOCSBRK": ValueOf(syscall.TIOCSBRK), + "TIOCSCTTY": ValueOf(syscall.TIOCSCTTY), + "TIOCSDRAINWAIT": ValueOf(uint32(syscall.TIOCSDRAINWAIT)), + "TIOCSDTR": ValueOf(syscall.TIOCSDTR), + "TIOCSETA": ValueOf(uint32(syscall.TIOCSETA)), + "TIOCSETAF": ValueOf(uint32(syscall.TIOCSETAF)), + "TIOCSETAW": ValueOf(uint32(syscall.TIOCSETAW)), + "TIOCSETD": ValueOf(uint32(syscall.TIOCSETD)), + "TIOCSIG": ValueOf(syscall.TIOCSIG), + "TIOCSPGRP": ValueOf(uint32(syscall.TIOCSPGRP)), + "TIOCSTART": ValueOf(syscall.TIOCSTART), + "TIOCSTAT": ValueOf(syscall.TIOCSTAT), + "TIOCSTI": ValueOf(uint32(syscall.TIOCSTI)), + "TIOCSTOP": ValueOf(syscall.TIOCSTOP), + "TIOCSWINSZ": ValueOf(uint32(syscall.TIOCSWINSZ)), + "TIOCTIMESTAMP": ValueOf(syscall.TIOCTIMESTAMP), + "TIOCUCNTL": ValueOf(uint32(syscall.TIOCUCNTL)), + "TOSTOP": ValueOf(syscall.TOSTOP), + "TimespecToNsec": ValueOf(syscall.TimespecToNsec), + "TimevalToNsec": ValueOf(syscall.TimevalToNsec), + "Truncate": ValueOf(syscall.Truncate), + "Umask": ValueOf(syscall.Umask), + "Undelete": ValueOf(syscall.Undelete), + "UnixRights": ValueOf(syscall.UnixRights), + "Unlink": ValueOf(syscall.Unlink), + "Unmount": ValueOf(syscall.Unmount), + "Unsetenv": ValueOf(syscall.Unsetenv), + "Utimes": ValueOf(syscall.Utimes), + "UtimesNano": ValueOf(syscall.UtimesNano), + "VDISCARD": ValueOf(syscall.VDISCARD), + "VDSUSP": ValueOf(syscall.VDSUSP), + "VEOF": ValueOf(syscall.VEOF), + "VEOL": ValueOf(syscall.VEOL), + "VEOL2": ValueOf(syscall.VEOL2), + "VERASE": ValueOf(syscall.VERASE), + "VERASE2": ValueOf(syscall.VERASE2), + "VINTR": ValueOf(syscall.VINTR), + "VKILL": ValueOf(syscall.VKILL), + "VLNEXT": ValueOf(syscall.VLNEXT), + "VMIN": ValueOf(syscall.VMIN), + "VQUIT": ValueOf(syscall.VQUIT), + "VREPRINT": ValueOf(syscall.VREPRINT), + "VSTART": ValueOf(syscall.VSTART), + "VSTATUS": ValueOf(syscall.VSTATUS), + "VSTOP": ValueOf(syscall.VSTOP), + "VSUSP": ValueOf(syscall.VSUSP), + "VTIME": ValueOf(syscall.VTIME), + "VWERASE": ValueOf(syscall.VWERASE), + "WCONTINUED": ValueOf(syscall.WCONTINUED), + "WCOREFLAG": ValueOf(syscall.WCOREFLAG), + "WEXITED": ValueOf(syscall.WEXITED), + "WLINUXCLONE": ValueOf(uint32(syscall.WLINUXCLONE)), + "WNOHANG": ValueOf(syscall.WNOHANG), + "WNOWAIT": ValueOf(syscall.WNOWAIT), + "WSTOPPED": ValueOf(syscall.WSTOPPED), + "WTRAPPED": ValueOf(syscall.WTRAPPED), + "WUNTRACED": ValueOf(syscall.WUNTRACED), + "Wait4": ValueOf(syscall.Wait4), + "Write": ValueOf(syscall.Write), + },Types: map[string]Type{ + "BpfHdr": TypeOf((*syscall.BpfHdr)(nil)).Elem(), + "BpfInsn": TypeOf((*syscall.BpfInsn)(nil)).Elem(), + "BpfProgram": TypeOf((*syscall.BpfProgram)(nil)).Elem(), + "BpfStat": TypeOf((*syscall.BpfStat)(nil)).Elem(), + "BpfVersion": TypeOf((*syscall.BpfVersion)(nil)).Elem(), + "BpfZbuf": TypeOf((*syscall.BpfZbuf)(nil)).Elem(), + "BpfZbufHeader": TypeOf((*syscall.BpfZbufHeader)(nil)).Elem(), + "Cmsghdr": TypeOf((*syscall.Cmsghdr)(nil)).Elem(), + "Credential": TypeOf((*syscall.Credential)(nil)).Elem(), + "Dirent": TypeOf((*syscall.Dirent)(nil)).Elem(), + "Errno": TypeOf((*syscall.Errno)(nil)).Elem(), + "FdSet": TypeOf((*syscall.FdSet)(nil)).Elem(), + "Flock_t": TypeOf((*syscall.Flock_t)(nil)).Elem(), + "Fsid": TypeOf((*syscall.Fsid)(nil)).Elem(), + "ICMPv6Filter": TypeOf((*syscall.ICMPv6Filter)(nil)).Elem(), + "IPMreq": TypeOf((*syscall.IPMreq)(nil)).Elem(), + "IPMreqn": TypeOf((*syscall.IPMreqn)(nil)).Elem(), + "IPv6MTUInfo": TypeOf((*syscall.IPv6MTUInfo)(nil)).Elem(), + "IPv6Mreq": TypeOf((*syscall.IPv6Mreq)(nil)).Elem(), + "IfAnnounceMsghdr": TypeOf((*syscall.IfAnnounceMsghdr)(nil)).Elem(), + "IfData": TypeOf((*syscall.IfData)(nil)).Elem(), + "IfMsghdr": TypeOf((*syscall.IfMsghdr)(nil)).Elem(), + "IfaMsghdr": TypeOf((*syscall.IfaMsghdr)(nil)).Elem(), + "IfmaMsghdr": TypeOf((*syscall.IfmaMsghdr)(nil)).Elem(), + "Inet6Pktinfo": TypeOf((*syscall.Inet6Pktinfo)(nil)).Elem(), + "InterfaceAddrMessage": TypeOf((*syscall.InterfaceAddrMessage)(nil)).Elem(), + "InterfaceAnnounceMessage": TypeOf((*syscall.InterfaceAnnounceMessage)(nil)).Elem(), + "InterfaceMessage": TypeOf((*syscall.InterfaceMessage)(nil)).Elem(), + "InterfaceMulticastAddrMessage": TypeOf((*syscall.InterfaceMulticastAddrMessage)(nil)).Elem(), + "Iovec": TypeOf((*syscall.Iovec)(nil)).Elem(), + "Kevent_t": TypeOf((*syscall.Kevent_t)(nil)).Elem(), + "Linger": TypeOf((*syscall.Linger)(nil)).Elem(), + "Msghdr": TypeOf((*syscall.Msghdr)(nil)).Elem(), + "ProcAttr": TypeOf((*syscall.ProcAttr)(nil)).Elem(), + "RawSockaddr": TypeOf((*syscall.RawSockaddr)(nil)).Elem(), + "RawSockaddrAny": TypeOf((*syscall.RawSockaddrAny)(nil)).Elem(), + "RawSockaddrDatalink": TypeOf((*syscall.RawSockaddrDatalink)(nil)).Elem(), + "RawSockaddrInet4": TypeOf((*syscall.RawSockaddrInet4)(nil)).Elem(), + "RawSockaddrInet6": TypeOf((*syscall.RawSockaddrInet6)(nil)).Elem(), + "RawSockaddrUnix": TypeOf((*syscall.RawSockaddrUnix)(nil)).Elem(), + "Rlimit": TypeOf((*syscall.Rlimit)(nil)).Elem(), + "RouteMessage": TypeOf((*syscall.RouteMessage)(nil)).Elem(), + "RoutingMessage": TypeOf((*syscall.RoutingMessage)(nil)).Elem(), + "RtMetrics": TypeOf((*syscall.RtMetrics)(nil)).Elem(), + "RtMsghdr": TypeOf((*syscall.RtMsghdr)(nil)).Elem(), + "Rusage": TypeOf((*syscall.Rusage)(nil)).Elem(), + "Signal": TypeOf((*syscall.Signal)(nil)).Elem(), + "Sockaddr": TypeOf((*syscall.Sockaddr)(nil)).Elem(), + "SockaddrDatalink": TypeOf((*syscall.SockaddrDatalink)(nil)).Elem(), + "SockaddrInet4": TypeOf((*syscall.SockaddrInet4)(nil)).Elem(), + "SockaddrInet6": TypeOf((*syscall.SockaddrInet6)(nil)).Elem(), + "SockaddrUnix": TypeOf((*syscall.SockaddrUnix)(nil)).Elem(), + "SocketControlMessage": TypeOf((*syscall.SocketControlMessage)(nil)).Elem(), + "Stat_t": TypeOf((*syscall.Stat_t)(nil)).Elem(), + "Statfs_t": TypeOf((*syscall.Statfs_t)(nil)).Elem(), + "SysProcAttr": TypeOf((*syscall.SysProcAttr)(nil)).Elem(), + "Termios": TypeOf((*syscall.Termios)(nil)).Elem(), + "Timespec": TypeOf((*syscall.Timespec)(nil)).Elem(), + "Timeval": TypeOf((*syscall.Timeval)(nil)).Elem(), + "WaitStatus": TypeOf((*syscall.WaitStatus)(nil)).Elem(), + },Untypeds: map[string]string{ + "AF_APPLETALK": "int:16", + "AF_ARP": "int:35", + "AF_ATM": "int:30", + "AF_BLUETOOTH": "int:36", + "AF_CCITT": "int:10", + "AF_CHAOS": "int:5", + "AF_CNT": "int:21", + "AF_COIP": "int:20", + "AF_DATAKIT": "int:9", + "AF_DECnet": "int:12", + "AF_DLI": "int:13", + "AF_E164": "int:26", + "AF_ECMA": "int:8", + "AF_HYLINK": "int:15", + "AF_IEEE80211": "int:37", + "AF_IMPLINK": "int:3", + "AF_INET": "int:2", + "AF_INET6": "int:28", + "AF_INET6_SDP": "int:42", + "AF_INET_SDP": "int:40", + "AF_IPX": "int:23", + "AF_ISDN": "int:26", + "AF_ISO": "int:7", + "AF_LAT": "int:14", + "AF_LINK": "int:18", + "AF_LOCAL": "int:1", + "AF_MAX": "int:42", + "AF_NATM": "int:29", + "AF_NETBIOS": "int:6", + "AF_NETGRAPH": "int:32", + "AF_OSI": "int:7", + "AF_PUP": "int:4", + "AF_ROUTE": "int:17", + "AF_SCLUSTER": "int:34", + "AF_SIP": "int:24", + "AF_SLOW": "int:33", + "AF_SNA": "int:11", + "AF_UNIX": "int:1", + "AF_UNSPEC": "int:0", + "AF_VENDOR00": "int:39", + "AF_VENDOR01": "int:41", + "AF_VENDOR02": "int:43", + "AF_VENDOR03": "int:45", + "AF_VENDOR04": "int:47", + "AF_VENDOR05": "int:49", + "AF_VENDOR06": "int:51", + "AF_VENDOR07": "int:53", + "AF_VENDOR08": "int:55", + "AF_VENDOR09": "int:57", + "AF_VENDOR10": "int:59", + "AF_VENDOR11": "int:61", + "AF_VENDOR12": "int:63", + "AF_VENDOR13": "int:65", + "AF_VENDOR14": "int:67", + "AF_VENDOR15": "int:69", + "AF_VENDOR16": "int:71", + "AF_VENDOR17": "int:73", + "AF_VENDOR18": "int:75", + "AF_VENDOR19": "int:77", + "AF_VENDOR20": "int:79", + "AF_VENDOR21": "int:81", + "AF_VENDOR22": "int:83", + "AF_VENDOR23": "int:85", + "AF_VENDOR24": "int:87", + "AF_VENDOR25": "int:89", + "AF_VENDOR26": "int:91", + "AF_VENDOR27": "int:93", + "AF_VENDOR28": "int:95", + "AF_VENDOR29": "int:97", + "AF_VENDOR30": "int:99", + "AF_VENDOR31": "int:101", + "AF_VENDOR32": "int:103", + "AF_VENDOR33": "int:105", + "AF_VENDOR34": "int:107", + "AF_VENDOR35": "int:109", + "AF_VENDOR36": "int:111", + "AF_VENDOR37": "int:113", + "AF_VENDOR38": "int:115", + "AF_VENDOR39": "int:117", + "AF_VENDOR40": "int:119", + "AF_VENDOR41": "int:121", + "AF_VENDOR42": "int:123", + "AF_VENDOR43": "int:125", + "AF_VENDOR44": "int:127", + "AF_VENDOR45": "int:129", + "AF_VENDOR46": "int:131", + "AF_VENDOR47": "int:133", + "B0": "int:0", + "B110": "int:110", + "B115200": "int:115200", + "B1200": "int:1200", + "B134": "int:134", + "B14400": "int:14400", + "B150": "int:150", + "B1800": "int:1800", + "B19200": "int:19200", + "B200": "int:200", + "B230400": "int:230400", + "B2400": "int:2400", + "B28800": "int:28800", + "B300": "int:300", + "B38400": "int:38400", + "B460800": "int:460800", + "B4800": "int:4800", + "B50": "int:50", + "B57600": "int:57600", + "B600": "int:600", + "B7200": "int:7200", + "B75": "int:75", + "B76800": "int:76800", + "B921600": "int:921600", + "B9600": "int:9600", + "BIOCFEEDBACK": "int:2147762812", + "BIOCFLUSH": "int:536887912", + "BIOCGBLEN": "int:1074020966", + "BIOCGDIRECTION": "int:1074020982", + "BIOCGDLT": "int:1074020970", + "BIOCGDLTLIST": "int:3222291065", + "BIOCGETBUFMODE": "int:1074020989", + "BIOCGETIF": "int:1075855979", + "BIOCGETZMAX": "int:1074283135", + "BIOCGHDRCMPLT": "int:1074020980", + "BIOCGRSIG": "int:1074020978", + "BIOCGRTIMEOUT": "int:1074807406", + "BIOCGSEESENT": "int:1074020982", + "BIOCGSTATS": "int:1074283119", + "BIOCGTSTAMP": "int:1074020995", + "BIOCIMMEDIATE": "int:2147762800", + "BIOCLOCK": "int:536887930", + "BIOCPROMISC": "int:536887913", + "BIOCROTZBUF": "int:1075331712", + "BIOCSBLEN": "int:3221504614", + "BIOCSDIRECTION": "int:2147762807", + "BIOCSDLT": "int:2147762808", + "BIOCSETBUFMODE": "int:2147762814", + "BIOCSETF": "int:2148549223", + "BIOCSETFNR": "int:2148549250", + "BIOCSETIF": "int:2149597804", + "BIOCSETWF": "int:2148549243", + "BIOCSETZBUF": "int:2149073537", + "BIOCSHDRCMPLT": "int:2147762805", + "BIOCSRSIG": "int:2147762803", + "BIOCSRTIMEOUT": "int:2148549229", + "BIOCSSEESENT": "int:2147762807", + "BIOCSTSTAMP": "int:2147762820", + "BIOCVERSION": "int:1074020977", + "BPF_A": "int:16", + "BPF_ABS": "int:32", + "BPF_ADD": "int:0", + "BPF_ALIGNMENT": "int:8", + "BPF_ALU": "int:4", + "BPF_AND": "int:80", + "BPF_B": "int:16", + "BPF_BUFMODE_BUFFER": "int:1", + "BPF_BUFMODE_ZBUF": "int:2", + "BPF_DIV": "int:48", + "BPF_H": "int:8", + "BPF_IMM": "int:0", + "BPF_IND": "int:64", + "BPF_JA": "int:0", + "BPF_JEQ": "int:16", + "BPF_JGE": "int:48", + "BPF_JGT": "int:32", + "BPF_JMP": "int:5", + "BPF_JSET": "int:64", + "BPF_K": "int:0", + "BPF_LD": "int:0", + "BPF_LDX": "int:1", + "BPF_LEN": "int:128", + "BPF_LSH": "int:96", + "BPF_MAJOR_VERSION": "int:1", + "BPF_MAXBUFSIZE": "int:524288", + "BPF_MAXINSNS": "int:512", + "BPF_MEM": "int:96", + "BPF_MEMWORDS": "int:16", + "BPF_MINBUFSIZE": "int:32", + "BPF_MINOR_VERSION": "int:1", + "BPF_MISC": "int:7", + "BPF_MSH": "int:160", + "BPF_MUL": "int:32", + "BPF_NEG": "int:128", + "BPF_OR": "int:64", + "BPF_RELEASE": "int:199606", + "BPF_RET": "int:6", + "BPF_RSH": "int:112", + "BPF_ST": "int:2", + "BPF_STX": "int:3", + "BPF_SUB": "int:16", + "BPF_TAX": "int:0", + "BPF_TXA": "int:128", + "BPF_T_BINTIME": "int:2", + "BPF_T_BINTIME_FAST": "int:258", + "BPF_T_BINTIME_MONOTONIC": "int:514", + "BPF_T_BINTIME_MONOTONIC_FAST": "int:770", + "BPF_T_FAST": "int:256", + "BPF_T_FLAG_MASK": "int:768", + "BPF_T_FORMAT_MASK": "int:3", + "BPF_T_MICROTIME": "int:0", + "BPF_T_MICROTIME_FAST": "int:256", + "BPF_T_MICROTIME_MONOTONIC": "int:512", + "BPF_T_MICROTIME_MONOTONIC_FAST": "int:768", + "BPF_T_MONOTONIC": "int:512", + "BPF_T_MONOTONIC_FAST": "int:768", + "BPF_T_NANOTIME": "int:1", + "BPF_T_NANOTIME_FAST": "int:257", + "BPF_T_NANOTIME_MONOTONIC": "int:513", + "BPF_T_NANOTIME_MONOTONIC_FAST": "int:769", + "BPF_T_NONE": "int:3", + "BPF_T_NORMAL": "int:0", + "BPF_W": "int:0", + "BPF_X": "int:8", + "BRKINT": "int:2", + "CFLUSH": "int:15", + "CLOCAL": "int:32768", + "CREAD": "int:2048", + "CS5": "int:0", + "CS6": "int:256", + "CS7": "int:512", + "CS8": "int:768", + "CSIZE": "int:768", + "CSTART": "int:17", + "CSTATUS": "int:20", + "CSTOP": "int:19", + "CSTOPB": "int:1024", + "CSUSP": "int:26", + "CTL_MAXNAME": "int:24", + "CTL_NET": "int:4", + "DLT_A429": "int:184", + "DLT_A653_ICM": "int:185", + "DLT_AIRONET_HEADER": "int:120", + "DLT_AOS": "int:222", + "DLT_APPLE_IP_OVER_IEEE1394": "int:138", + "DLT_ARCNET": "int:7", + "DLT_ARCNET_LINUX": "int:129", + "DLT_ATM_CLIP": "int:19", + "DLT_ATM_RFC1483": "int:11", + "DLT_AURORA": "int:126", + "DLT_AX25": "int:3", + "DLT_AX25_KISS": "int:202", + "DLT_BACNET_MS_TP": "int:165", + "DLT_BLUETOOTH_HCI_H4": "int:187", + "DLT_BLUETOOTH_HCI_H4_WITH_PHDR": "int:201", + "DLT_CAN20B": "int:190", + "DLT_CAN_SOCKETCAN": "int:227", + "DLT_CHAOS": "int:5", + "DLT_CHDLC": "int:104", + "DLT_CISCO_IOS": "int:118", + "DLT_C_HDLC": "int:104", + "DLT_C_HDLC_WITH_DIR": "int:205", + "DLT_DBUS": "int:231", + "DLT_DECT": "int:221", + "DLT_DOCSIS": "int:143", + "DLT_DVB_CI": "int:235", + "DLT_ECONET": "int:115", + "DLT_EN10MB": "int:1", + "DLT_EN3MB": "int:2", + "DLT_ENC": "int:109", + "DLT_ERF": "int:197", + "DLT_ERF_ETH": "int:175", + "DLT_ERF_POS": "int:176", + "DLT_FC_2": "int:224", + "DLT_FC_2_WITH_FRAME_DELIMS": "int:225", + "DLT_FDDI": "int:10", + "DLT_FLEXRAY": "int:210", + "DLT_FRELAY": "int:107", + "DLT_FRELAY_WITH_DIR": "int:206", + "DLT_GCOM_SERIAL": "int:173", + "DLT_GCOM_T1E1": "int:172", + "DLT_GPF_F": "int:171", + "DLT_GPF_T": "int:170", + "DLT_GPRS_LLC": "int:169", + "DLT_GSMTAP_ABIS": "int:218", + "DLT_GSMTAP_UM": "int:217", + "DLT_HHDLC": "int:121", + "DLT_IBM_SN": "int:146", + "DLT_IBM_SP": "int:145", + "DLT_IEEE802": "int:6", + "DLT_IEEE802_11": "int:105", + "DLT_IEEE802_11_RADIO": "int:127", + "DLT_IEEE802_11_RADIO_AVS": "int:163", + "DLT_IEEE802_15_4": "int:195", + "DLT_IEEE802_15_4_LINUX": "int:191", + "DLT_IEEE802_15_4_NOFCS": "int:230", + "DLT_IEEE802_15_4_NONASK_PHY": "int:215", + "DLT_IEEE802_16_MAC_CPS": "int:188", + "DLT_IEEE802_16_MAC_CPS_RADIO": "int:193", + "DLT_IPFILTER": "int:116", + "DLT_IPMB": "int:199", + "DLT_IPMB_LINUX": "int:209", + "DLT_IPNET": "int:226", + "DLT_IPOIB": "int:242", + "DLT_IPV4": "int:228", + "DLT_IPV6": "int:229", + "DLT_IP_OVER_FC": "int:122", + "DLT_JUNIPER_ATM1": "int:137", + "DLT_JUNIPER_ATM2": "int:135", + "DLT_JUNIPER_ATM_CEMIC": "int:238", + "DLT_JUNIPER_CHDLC": "int:181", + "DLT_JUNIPER_ES": "int:132", + "DLT_JUNIPER_ETHER": "int:178", + "DLT_JUNIPER_FIBRECHANNEL": "int:234", + "DLT_JUNIPER_FRELAY": "int:180", + "DLT_JUNIPER_GGSN": "int:133", + "DLT_JUNIPER_ISM": "int:194", + "DLT_JUNIPER_MFR": "int:134", + "DLT_JUNIPER_MLFR": "int:131", + "DLT_JUNIPER_MLPPP": "int:130", + "DLT_JUNIPER_MONITOR": "int:164", + "DLT_JUNIPER_PIC_PEER": "int:174", + "DLT_JUNIPER_PPP": "int:179", + "DLT_JUNIPER_PPPOE": "int:167", + "DLT_JUNIPER_PPPOE_ATM": "int:168", + "DLT_JUNIPER_SERVICES": "int:136", + "DLT_JUNIPER_SRX_E2E": "int:233", + "DLT_JUNIPER_ST": "int:200", + "DLT_JUNIPER_VP": "int:183", + "DLT_JUNIPER_VS": "int:232", + "DLT_LAPB_WITH_DIR": "int:207", + "DLT_LAPD": "int:203", + "DLT_LIN": "int:212", + "DLT_LINUX_EVDEV": "int:216", + "DLT_LINUX_IRDA": "int:144", + "DLT_LINUX_LAPD": "int:177", + "DLT_LINUX_PPP_WITHDIRECTION": "int:166", + "DLT_LINUX_SLL": "int:113", + "DLT_LOOP": "int:108", + "DLT_LTALK": "int:114", + "DLT_MATCHING_MAX": "int:246", + "DLT_MATCHING_MIN": "int:104", + "DLT_MFR": "int:182", + "DLT_MOST": "int:211", + "DLT_MPEG_2_TS": "int:243", + "DLT_MPLS": "int:219", + "DLT_MTP2": "int:140", + "DLT_MTP2_WITH_PHDR": "int:139", + "DLT_MTP3": "int:141", + "DLT_MUX27010": "int:236", + "DLT_NETANALYZER": "int:240", + "DLT_NETANALYZER_TRANSPARENT": "int:241", + "DLT_NFC_LLCP": "int:245", + "DLT_NFLOG": "int:239", + "DLT_NG40": "int:244", + "DLT_NULL": "int:0", + "DLT_PCI_EXP": "int:125", + "DLT_PFLOG": "int:117", + "DLT_PFSYNC": "int:121", + "DLT_PPI": "int:192", + "DLT_PPP": "int:9", + "DLT_PPP_BSDOS": "int:16", + "DLT_PPP_ETHER": "int:51", + "DLT_PPP_PPPD": "int:166", + "DLT_PPP_SERIAL": "int:50", + "DLT_PPP_WITH_DIR": "int:204", + "DLT_PPP_WITH_DIRECTION": "int:166", + "DLT_PRISM_HEADER": "int:119", + "DLT_PRONET": "int:4", + "DLT_RAIF1": "int:198", + "DLT_RAW": "int:12", + "DLT_RIO": "int:124", + "DLT_SCCP": "int:142", + "DLT_SITA": "int:196", + "DLT_SLIP": "int:8", + "DLT_SLIP_BSDOS": "int:15", + "DLT_STANAG_5066_D_PDU": "int:237", + "DLT_SUNATM": "int:123", + "DLT_SYMANTEC_FIREWALL": "int:99", + "DLT_TZSP": "int:128", + "DLT_USB": "int:186", + "DLT_USB_LINUX": "int:189", + "DLT_USB_LINUX_MMAPPED": "int:220", + "DLT_USER0": "int:147", + "DLT_USER1": "int:148", + "DLT_USER10": "int:157", + "DLT_USER11": "int:158", + "DLT_USER12": "int:159", + "DLT_USER13": "int:160", + "DLT_USER14": "int:161", + "DLT_USER15": "int:162", + "DLT_USER2": "int:149", + "DLT_USER3": "int:150", + "DLT_USER4": "int:151", + "DLT_USER5": "int:152", + "DLT_USER6": "int:153", + "DLT_USER7": "int:154", + "DLT_USER8": "int:155", + "DLT_USER9": "int:156", + "DLT_WIHART": "int:223", + "DLT_X2E_SERIAL": "int:213", + "DLT_X2E_XORAYA": "int:214", + "DT_BLK": "int:6", + "DT_CHR": "int:2", + "DT_DIR": "int:4", + "DT_FIFO": "int:1", + "DT_LNK": "int:10", + "DT_REG": "int:8", + "DT_SOCK": "int:12", + "DT_UNKNOWN": "int:0", + "DT_WHT": "int:14", + "ECHO": "int:8", + "ECHOCTL": "int:64", + "ECHOE": "int:2", + "ECHOK": "int:4", + "ECHOKE": "int:1", + "ECHONL": "int:16", + "ECHOPRT": "int:32", + "EVFILT_AIO": "int:-3", + "EVFILT_FS": "int:-9", + "EVFILT_LIO": "int:-10", + "EVFILT_PROC": "int:-5", + "EVFILT_READ": "int:-1", + "EVFILT_SIGNAL": "int:-6", + "EVFILT_SYSCOUNT": "int:11", + "EVFILT_TIMER": "int:-7", + "EVFILT_USER": "int:-11", + "EVFILT_VNODE": "int:-4", + "EVFILT_WRITE": "int:-2", + "EV_ADD": "int:1", + "EV_CLEAR": "int:32", + "EV_DELETE": "int:2", + "EV_DISABLE": "int:8", + "EV_DISPATCH": "int:128", + "EV_DROP": "int:4096", + "EV_ENABLE": "int:4", + "EV_EOF": "int:32768", + "EV_ERROR": "int:16384", + "EV_FLAG1": "int:8192", + "EV_ONESHOT": "int:16", + "EV_RECEIPT": "int:64", + "EV_SYSFLAGS": "int:61440", + "EXTA": "int:19200", + "EXTB": "int:38400", + "EXTPROC": "int:2048", + "FD_CLOEXEC": "int:1", + "FD_SETSIZE": "int:1024", + "FLUSHO": "int:8388608", + "F_CANCEL": "int:5", + "F_DUP2FD": "int:10", + "F_DUP2FD_CLOEXEC": "int:18", + "F_DUPFD": "int:0", + "F_DUPFD_CLOEXEC": "int:17", + "F_GETFD": "int:1", + "F_GETFL": "int:3", + "F_GETLK": "int:11", + "F_GETOWN": "int:5", + "F_OGETLK": "int:7", + "F_OK": "int:0", + "F_OSETLK": "int:8", + "F_OSETLKW": "int:9", + "F_RDAHEAD": "int:16", + "F_RDLCK": "int:1", + "F_READAHEAD": "int:15", + "F_SETFD": "int:2", + "F_SETFL": "int:4", + "F_SETLK": "int:12", + "F_SETLKW": "int:13", + "F_SETLK_REMOTE": "int:14", + "F_SETOWN": "int:6", + "F_UNLCK": "int:2", + "F_UNLCKSYS": "int:4", + "F_WRLCK": "int:3", + "HUPCL": "int:16384", + "ICANON": "int:256", + "ICMP6_FILTER": "int:18", + "ICRNL": "int:256", + "IEXTEN": "int:1024", + "IFAN_ARRIVAL": "int:0", + "IFAN_DEPARTURE": "int:1", + "IFF_ALLMULTI": "int:512", + "IFF_ALTPHYS": "int:16384", + "IFF_BROADCAST": "int:2", + "IFF_CANTCHANGE": "int:2199410", + "IFF_CANTCONFIG": "int:65536", + "IFF_DEBUG": "int:4", + "IFF_DRV_OACTIVE": "int:1024", + "IFF_DRV_RUNNING": "int:64", + "IFF_DYING": "int:2097152", + "IFF_LINK0": "int:4096", + "IFF_LINK1": "int:8192", + "IFF_LINK2": "int:16384", + "IFF_LOOPBACK": "int:8", + "IFF_MONITOR": "int:262144", + "IFF_MULTICAST": "int:32768", + "IFF_NOARP": "int:128", + "IFF_OACTIVE": "int:1024", + "IFF_POINTOPOINT": "int:16", + "IFF_PPROMISC": "int:131072", + "IFF_PROMISC": "int:256", + "IFF_RENAMING": "int:4194304", + "IFF_RUNNING": "int:64", + "IFF_SIMPLEX": "int:2048", + "IFF_SMART": "int:32", + "IFF_STATICARP": "int:524288", + "IFF_UP": "int:1", + "IFNAMSIZ": "int:16", + "IFT_1822": "int:2", + "IFT_A12MPPSWITCH": "int:130", + "IFT_AAL2": "int:187", + "IFT_AAL5": "int:49", + "IFT_ADSL": "int:94", + "IFT_AFLANE8023": "int:59", + "IFT_AFLANE8025": "int:60", + "IFT_ARAP": "int:88", + "IFT_ARCNET": "int:35", + "IFT_ARCNETPLUS": "int:36", + "IFT_ASYNC": "int:84", + "IFT_ATM": "int:37", + "IFT_ATMDXI": "int:105", + "IFT_ATMFUNI": "int:106", + "IFT_ATMIMA": "int:107", + "IFT_ATMLOGICAL": "int:80", + "IFT_ATMRADIO": "int:189", + "IFT_ATMSUBINTERFACE": "int:134", + "IFT_ATMVCIENDPT": "int:194", + "IFT_ATMVIRTUAL": "int:149", + "IFT_BGPPOLICYACCOUNTING": "int:162", + "IFT_BRIDGE": "int:209", + "IFT_BSC": "int:83", + "IFT_CARP": "int:248", + "IFT_CCTEMUL": "int:61", + "IFT_CEPT": "int:19", + "IFT_CES": "int:133", + "IFT_CHANNEL": "int:70", + "IFT_CNR": "int:85", + "IFT_COFFEE": "int:132", + "IFT_COMPOSITELINK": "int:155", + "IFT_DCN": "int:141", + "IFT_DIGITALPOWERLINE": "int:138", + "IFT_DIGITALWRAPPEROVERHEADCHANNEL": "int:186", + "IFT_DLSW": "int:74", + "IFT_DOCSCABLEDOWNSTREAM": "int:128", + "IFT_DOCSCABLEMACLAYER": "int:127", + "IFT_DOCSCABLEUPSTREAM": "int:129", + "IFT_DS0": "int:81", + "IFT_DS0BUNDLE": "int:82", + "IFT_DS1FDL": "int:170", + "IFT_DS3": "int:30", + "IFT_DTM": "int:140", + "IFT_DVBASILN": "int:172", + "IFT_DVBASIOUT": "int:173", + "IFT_DVBRCCDOWNSTREAM": "int:147", + "IFT_DVBRCCMACLAYER": "int:146", + "IFT_DVBRCCUPSTREAM": "int:148", + "IFT_ENC": "int:244", + "IFT_EON": "int:25", + "IFT_EPLRS": "int:87", + "IFT_ESCON": "int:73", + "IFT_ETHER": "int:6", + "IFT_FAITH": "int:242", + "IFT_FAST": "int:125", + "IFT_FASTETHER": "int:62", + "IFT_FASTETHERFX": "int:69", + "IFT_FDDI": "int:15", + "IFT_FIBRECHANNEL": "int:56", + "IFT_FRAMERELAYINTERCONNECT": "int:58", + "IFT_FRAMERELAYMPI": "int:92", + "IFT_FRDLCIENDPT": "int:193", + "IFT_FRELAY": "int:32", + "IFT_FRELAYDCE": "int:44", + "IFT_FRF16MFRBUNDLE": "int:163", + "IFT_FRFORWARD": "int:158", + "IFT_G703AT2MB": "int:67", + "IFT_G703AT64K": "int:66", + "IFT_GIF": "int:240", + "IFT_GIGABITETHERNET": "int:117", + "IFT_GR303IDT": "int:178", + "IFT_GR303RDT": "int:177", + "IFT_H323GATEKEEPER": "int:164", + "IFT_H323PROXY": "int:165", + "IFT_HDH1822": "int:3", + "IFT_HDLC": "int:118", + "IFT_HDSL2": "int:168", + "IFT_HIPERLAN2": "int:183", + "IFT_HIPPI": "int:47", + "IFT_HIPPIINTERFACE": "int:57", + "IFT_HOSTPAD": "int:90", + "IFT_HSSI": "int:46", + "IFT_HY": "int:14", + "IFT_IBM370PARCHAN": "int:72", + "IFT_IDSL": "int:154", + "IFT_IEEE1394": "int:144", + "IFT_IEEE80211": "int:71", + "IFT_IEEE80212": "int:55", + "IFT_IEEE8023ADLAG": "int:161", + "IFT_IFGSN": "int:145", + "IFT_IMT": "int:190", + "IFT_INFINIBAND": "int:199", + "IFT_INTERLEAVE": "int:124", + "IFT_IP": "int:126", + "IFT_IPFORWARD": "int:142", + "IFT_IPOVERATM": "int:114", + "IFT_IPOVERCDLC": "int:109", + "IFT_IPOVERCLAW": "int:110", + "IFT_IPSWITCH": "int:78", + "IFT_IPXIP": "int:249", + "IFT_ISDN": "int:63", + "IFT_ISDNBASIC": "int:20", + "IFT_ISDNPRIMARY": "int:21", + "IFT_ISDNS": "int:75", + "IFT_ISDNU": "int:76", + "IFT_ISO88022LLC": "int:41", + "IFT_ISO88023": "int:7", + "IFT_ISO88024": "int:8", + "IFT_ISO88025": "int:9", + "IFT_ISO88025CRFPINT": "int:98", + "IFT_ISO88025DTR": "int:86", + "IFT_ISO88025FIBER": "int:115", + "IFT_ISO88026": "int:10", + "IFT_ISUP": "int:179", + "IFT_L2VLAN": "int:135", + "IFT_L3IPVLAN": "int:136", + "IFT_L3IPXVLAN": "int:137", + "IFT_LAPB": "int:16", + "IFT_LAPD": "int:77", + "IFT_LAPF": "int:119", + "IFT_LOCALTALK": "int:42", + "IFT_LOOP": "int:24", + "IFT_MEDIAMAILOVERIP": "int:139", + "IFT_MFSIGLINK": "int:167", + "IFT_MIOX25": "int:38", + "IFT_MODEM": "int:48", + "IFT_MPC": "int:113", + "IFT_MPLS": "int:166", + "IFT_MPLSTUNNEL": "int:150", + "IFT_MSDSL": "int:143", + "IFT_MVL": "int:191", + "IFT_MYRINET": "int:99", + "IFT_NFAS": "int:175", + "IFT_NSIP": "int:27", + "IFT_OPTICALCHANNEL": "int:195", + "IFT_OPTICALTRANSPORT": "int:196", + "IFT_OTHER": "int:1", + "IFT_P10": "int:12", + "IFT_P80": "int:13", + "IFT_PARA": "int:34", + "IFT_PFLOG": "int:246", + "IFT_PFSYNC": "int:247", + "IFT_PLC": "int:174", + "IFT_POS": "int:171", + "IFT_PPP": "int:23", + "IFT_PPPMULTILINKBUNDLE": "int:108", + "IFT_PROPBWAP2MP": "int:184", + "IFT_PROPCNLS": "int:89", + "IFT_PROPDOCSWIRELESSDOWNSTREAM": "int:181", + "IFT_PROPDOCSWIRELESSMACLAYER": "int:180", + "IFT_PROPDOCSWIRELESSUPSTREAM": "int:182", + "IFT_PROPMUX": "int:54", + "IFT_PROPVIRTUAL": "int:53", + "IFT_PROPWIRELESSP2P": "int:157", + "IFT_PTPSERIAL": "int:22", + "IFT_PVC": "int:241", + "IFT_QLLC": "int:68", + "IFT_RADIOMAC": "int:188", + "IFT_RADSL": "int:95", + "IFT_REACHDSL": "int:192", + "IFT_RFC1483": "int:159", + "IFT_RS232": "int:33", + "IFT_RSRB": "int:79", + "IFT_SDLC": "int:17", + "IFT_SDSL": "int:96", + "IFT_SHDSL": "int:169", + "IFT_SIP": "int:31", + "IFT_SLIP": "int:28", + "IFT_SMDSDXI": "int:43", + "IFT_SMDSICIP": "int:52", + "IFT_SONET": "int:39", + "IFT_SONETOVERHEADCHANNEL": "int:185", + "IFT_SONETPATH": "int:50", + "IFT_SONETVT": "int:51", + "IFT_SRP": "int:151", + "IFT_SS7SIGLINK": "int:156", + "IFT_STACKTOSTACK": "int:111", + "IFT_STARLAN": "int:11", + "IFT_STF": "int:215", + "IFT_T1": "int:18", + "IFT_TDLC": "int:116", + "IFT_TERMPAD": "int:91", + "IFT_TR008": "int:176", + "IFT_TRANSPHDLC": "int:123", + "IFT_TUNNEL": "int:131", + "IFT_ULTRA": "int:29", + "IFT_USB": "int:160", + "IFT_V11": "int:64", + "IFT_V35": "int:45", + "IFT_V36": "int:65", + "IFT_V37": "int:120", + "IFT_VDSL": "int:97", + "IFT_VIRTUALIPADDRESS": "int:112", + "IFT_VOICEEM": "int:100", + "IFT_VOICEENCAP": "int:103", + "IFT_VOICEFXO": "int:101", + "IFT_VOICEFXS": "int:102", + "IFT_VOICEOVERATM": "int:152", + "IFT_VOICEOVERFRAMERELAY": "int:153", + "IFT_VOICEOVERIP": "int:104", + "IFT_X213": "int:93", + "IFT_X25": "int:5", + "IFT_X25DDN": "int:4", + "IFT_X25HUNTGROUP": "int:122", + "IFT_X25MLP": "int:121", + "IFT_X25PLE": "int:40", + "IFT_XETHER": "int:26", + "IGNBRK": "int:1", + "IGNCR": "int:128", + "IGNPAR": "int:4", + "IMAXBEL": "int:8192", + "INLCR": "int:64", + "INPCK": "int:16", + "IN_CLASSA_HOST": "int:16777215", + "IN_CLASSA_MAX": "int:128", + "IN_CLASSA_NET": "int:4278190080", + "IN_CLASSA_NSHIFT": "int:24", + "IN_CLASSB_HOST": "int:65535", + "IN_CLASSB_MAX": "int:65536", + "IN_CLASSB_NET": "int:4294901760", + "IN_CLASSB_NSHIFT": "int:16", + "IN_CLASSC_HOST": "int:255", + "IN_CLASSC_NET": "int:4294967040", + "IN_CLASSC_NSHIFT": "int:8", + "IN_CLASSD_HOST": "int:268435455", + "IN_CLASSD_NET": "int:4026531840", + "IN_CLASSD_NSHIFT": "int:28", + "IN_LOOPBACKNET": "int:127", + "IN_RFC3021_MASK": "int:4294967294", + "IPPROTO_3PC": "int:34", + "IPPROTO_ADFS": "int:68", + "IPPROTO_AH": "int:51", + "IPPROTO_AHIP": "int:61", + "IPPROTO_APES": "int:99", + "IPPROTO_ARGUS": "int:13", + "IPPROTO_AX25": "int:93", + "IPPROTO_BHA": "int:49", + "IPPROTO_BLT": "int:30", + "IPPROTO_BRSATMON": "int:76", + "IPPROTO_CARP": "int:112", + "IPPROTO_CFTP": "int:62", + "IPPROTO_CHAOS": "int:16", + "IPPROTO_CMTP": "int:38", + "IPPROTO_CPHB": "int:73", + "IPPROTO_CPNX": "int:72", + "IPPROTO_DDP": "int:37", + "IPPROTO_DGP": "int:86", + "IPPROTO_DIVERT": "int:258", + "IPPROTO_DONE": "int:257", + "IPPROTO_DSTOPTS": "int:60", + "IPPROTO_EGP": "int:8", + "IPPROTO_EMCON": "int:14", + "IPPROTO_ENCAP": "int:98", + "IPPROTO_EON": "int:80", + "IPPROTO_ESP": "int:50", + "IPPROTO_ETHERIP": "int:97", + "IPPROTO_FRAGMENT": "int:44", + "IPPROTO_GGP": "int:3", + "IPPROTO_GMTP": "int:100", + "IPPROTO_GRE": "int:47", + "IPPROTO_HELLO": "int:63", + "IPPROTO_HMP": "int:20", + "IPPROTO_HOPOPTS": "int:0", + "IPPROTO_ICMP": "int:1", + "IPPROTO_ICMPV6": "int:58", + "IPPROTO_IDP": "int:22", + "IPPROTO_IDPR": "int:35", + "IPPROTO_IDRP": "int:45", + "IPPROTO_IGMP": "int:2", + "IPPROTO_IGP": "int:85", + "IPPROTO_IGRP": "int:88", + "IPPROTO_IL": "int:40", + "IPPROTO_INLSP": "int:52", + "IPPROTO_INP": "int:32", + "IPPROTO_IP": "int:0", + "IPPROTO_IPCOMP": "int:108", + "IPPROTO_IPCV": "int:71", + "IPPROTO_IPEIP": "int:94", + "IPPROTO_IPIP": "int:4", + "IPPROTO_IPPC": "int:67", + "IPPROTO_IPV4": "int:4", + "IPPROTO_IPV6": "int:41", + "IPPROTO_IRTP": "int:28", + "IPPROTO_KRYPTOLAN": "int:65", + "IPPROTO_LARP": "int:91", + "IPPROTO_LEAF1": "int:25", + "IPPROTO_LEAF2": "int:26", + "IPPROTO_MAX": "int:256", + "IPPROTO_MAXID": "int:52", + "IPPROTO_MEAS": "int:19", + "IPPROTO_MH": "int:135", + "IPPROTO_MHRP": "int:48", + "IPPROTO_MICP": "int:95", + "IPPROTO_MOBILE": "int:55", + "IPPROTO_MPLS": "int:137", + "IPPROTO_MTP": "int:92", + "IPPROTO_MUX": "int:18", + "IPPROTO_ND": "int:77", + "IPPROTO_NHRP": "int:54", + "IPPROTO_NONE": "int:59", + "IPPROTO_NSP": "int:31", + "IPPROTO_NVPII": "int:11", + "IPPROTO_OLD_DIVERT": "int:254", + "IPPROTO_OSPFIGP": "int:89", + "IPPROTO_PFSYNC": "int:240", + "IPPROTO_PGM": "int:113", + "IPPROTO_PIGP": "int:9", + "IPPROTO_PIM": "int:103", + "IPPROTO_PRM": "int:21", + "IPPROTO_PUP": "int:12", + "IPPROTO_PVP": "int:75", + "IPPROTO_RAW": "int:255", + "IPPROTO_RCCMON": "int:10", + "IPPROTO_RDP": "int:27", + "IPPROTO_ROUTING": "int:43", + "IPPROTO_RSVP": "int:46", + "IPPROTO_RVD": "int:66", + "IPPROTO_SATEXPAK": "int:64", + "IPPROTO_SATMON": "int:69", + "IPPROTO_SCCSP": "int:96", + "IPPROTO_SCTP": "int:132", + "IPPROTO_SDRP": "int:42", + "IPPROTO_SEND": "int:259", + "IPPROTO_SEP": "int:33", + "IPPROTO_SKIP": "int:57", + "IPPROTO_SPACER": "int:32767", + "IPPROTO_SRPC": "int:90", + "IPPROTO_ST": "int:7", + "IPPROTO_SVMTP": "int:82", + "IPPROTO_SWIPE": "int:53", + "IPPROTO_TCF": "int:87", + "IPPROTO_TCP": "int:6", + "IPPROTO_TLSP": "int:56", + "IPPROTO_TP": "int:29", + "IPPROTO_TPXX": "int:39", + "IPPROTO_TRUNK1": "int:23", + "IPPROTO_TRUNK2": "int:24", + "IPPROTO_TTP": "int:84", + "IPPROTO_UDP": "int:17", + "IPPROTO_VINES": "int:83", + "IPPROTO_VISA": "int:70", + "IPPROTO_VMTP": "int:81", + "IPPROTO_WBEXPAK": "int:79", + "IPPROTO_WBMON": "int:78", + "IPPROTO_WSN": "int:74", + "IPPROTO_XNET": "int:15", + "IPPROTO_XTP": "int:36", + "IPV6_AUTOFLOWLABEL": "int:59", + "IPV6_BINDANY": "int:64", + "IPV6_BINDV6ONLY": "int:27", + "IPV6_CHECKSUM": "int:26", + "IPV6_DEFAULT_MULTICAST_HOPS": "int:1", + "IPV6_DEFAULT_MULTICAST_LOOP": "int:1", + "IPV6_DEFHLIM": "int:64", + "IPV6_DONTFRAG": "int:62", + "IPV6_DSTOPTS": "int:50", + "IPV6_FAITH": "int:29", + "IPV6_FLOWINFO_MASK": "int:4294967055", + "IPV6_FLOWLABEL_MASK": "int:4294905600", + "IPV6_FRAGTTL": "int:120", + "IPV6_FW_ADD": "int:30", + "IPV6_FW_DEL": "int:31", + "IPV6_FW_FLUSH": "int:32", + "IPV6_FW_GET": "int:34", + "IPV6_FW_ZERO": "int:33", + "IPV6_HLIMDEC": "int:1", + "IPV6_HOPLIMIT": "int:47", + "IPV6_HOPOPTS": "int:49", + "IPV6_IPSEC_POLICY": "int:28", + "IPV6_JOIN_GROUP": "int:12", + "IPV6_LEAVE_GROUP": "int:13", + "IPV6_MAXHLIM": "int:255", + "IPV6_MAXOPTHDR": "int:2048", + "IPV6_MAXPACKET": "int:65535", + "IPV6_MAX_GROUP_SRC_FILTER": "int:512", + "IPV6_MAX_MEMBERSHIPS": "int:4095", + "IPV6_MAX_SOCK_SRC_FILTER": "int:128", + "IPV6_MIN_MEMBERSHIPS": "int:31", + "IPV6_MMTU": "int:1280", + "IPV6_MSFILTER": "int:74", + "IPV6_MULTICAST_HOPS": "int:10", + "IPV6_MULTICAST_IF": "int:9", + "IPV6_MULTICAST_LOOP": "int:11", + "IPV6_NEXTHOP": "int:48", + "IPV6_PATHMTU": "int:44", + "IPV6_PKTINFO": "int:46", + "IPV6_PORTRANGE": "int:14", + "IPV6_PORTRANGE_DEFAULT": "int:0", + "IPV6_PORTRANGE_HIGH": "int:1", + "IPV6_PORTRANGE_LOW": "int:2", + "IPV6_PREFER_TEMPADDR": "int:63", + "IPV6_RECVDSTOPTS": "int:40", + "IPV6_RECVHOPLIMIT": "int:37", + "IPV6_RECVHOPOPTS": "int:39", + "IPV6_RECVPATHMTU": "int:43", + "IPV6_RECVPKTINFO": "int:36", + "IPV6_RECVRTHDR": "int:38", + "IPV6_RECVTCLASS": "int:57", + "IPV6_RTHDR": "int:51", + "IPV6_RTHDRDSTOPTS": "int:35", + "IPV6_RTHDR_LOOSE": "int:0", + "IPV6_RTHDR_STRICT": "int:1", + "IPV6_RTHDR_TYPE_0": "int:0", + "IPV6_SOCKOPT_RESERVED1": "int:3", + "IPV6_TCLASS": "int:61", + "IPV6_UNICAST_HOPS": "int:4", + "IPV6_USE_MIN_MTU": "int:42", + "IPV6_V6ONLY": "int:27", + "IPV6_VERSION": "int:96", + "IPV6_VERSION_MASK": "int:240", + "IP_ADD_MEMBERSHIP": "int:12", + "IP_ADD_SOURCE_MEMBERSHIP": "int:70", + "IP_BINDANY": "int:24", + "IP_BLOCK_SOURCE": "int:72", + "IP_DEFAULT_MULTICAST_LOOP": "int:1", + "IP_DEFAULT_MULTICAST_TTL": "int:1", + "IP_DF": "int:16384", + "IP_DONTFRAG": "int:67", + "IP_DROP_MEMBERSHIP": "int:13", + "IP_DROP_SOURCE_MEMBERSHIP": "int:71", + "IP_DUMMYNET3": "int:49", + "IP_DUMMYNET_CONFIGURE": "int:60", + "IP_DUMMYNET_DEL": "int:61", + "IP_DUMMYNET_FLUSH": "int:62", + "IP_DUMMYNET_GET": "int:64", + "IP_FAITH": "int:22", + "IP_FW3": "int:48", + "IP_FW_ADD": "int:50", + "IP_FW_DEL": "int:51", + "IP_FW_FLUSH": "int:52", + "IP_FW_GET": "int:54", + "IP_FW_NAT_CFG": "int:56", + "IP_FW_NAT_DEL": "int:57", + "IP_FW_NAT_GET_CONFIG": "int:58", + "IP_FW_NAT_GET_LOG": "int:59", + "IP_FW_RESETLOG": "int:55", + "IP_FW_TABLE_ADD": "int:40", + "IP_FW_TABLE_DEL": "int:41", + "IP_FW_TABLE_FLUSH": "int:42", + "IP_FW_TABLE_GETSIZE": "int:43", + "IP_FW_TABLE_LIST": "int:44", + "IP_FW_ZERO": "int:53", + "IP_HDRINCL": "int:2", + "IP_IPSEC_POLICY": "int:21", + "IP_MAXPACKET": "int:65535", + "IP_MAX_GROUP_SRC_FILTER": "int:512", + "IP_MAX_MEMBERSHIPS": "int:4095", + "IP_MAX_SOCK_MUTE_FILTER": "int:128", + "IP_MAX_SOCK_SRC_FILTER": "int:128", + "IP_MAX_SOURCE_FILTER": "int:1024", + "IP_MF": "int:8192", + "IP_MINTTL": "int:66", + "IP_MIN_MEMBERSHIPS": "int:31", + "IP_MSFILTER": "int:74", + "IP_MSS": "int:576", + "IP_MULTICAST_IF": "int:9", + "IP_MULTICAST_LOOP": "int:11", + "IP_MULTICAST_TTL": "int:10", + "IP_MULTICAST_VIF": "int:14", + "IP_OFFMASK": "int:8191", + "IP_ONESBCAST": "int:23", + "IP_OPTIONS": "int:1", + "IP_PORTRANGE": "int:19", + "IP_PORTRANGE_DEFAULT": "int:0", + "IP_PORTRANGE_HIGH": "int:1", + "IP_PORTRANGE_LOW": "int:2", + "IP_RECVDSTADDR": "int:7", + "IP_RECVIF": "int:20", + "IP_RECVOPTS": "int:5", + "IP_RECVRETOPTS": "int:6", + "IP_RECVTOS": "int:68", + "IP_RECVTTL": "int:65", + "IP_RETOPTS": "int:8", + "IP_RF": "int:32768", + "IP_RSVP_OFF": "int:16", + "IP_RSVP_ON": "int:15", + "IP_RSVP_VIF_OFF": "int:18", + "IP_RSVP_VIF_ON": "int:17", + "IP_SENDSRCADDR": "int:7", + "IP_TOS": "int:3", + "IP_TTL": "int:4", + "IP_UNBLOCK_SOURCE": "int:73", + "ISIG": "int:128", + "ISTRIP": "int:32", + "IXANY": "int:2048", + "IXOFF": "int:1024", + "IXON": "int:512", + "ImplementsGetwd": "bool:false", + "LOCK_EX": "int:2", + "LOCK_NB": "int:4", + "LOCK_SH": "int:1", + "LOCK_UN": "int:8", + "MADV_AUTOSYNC": "int:7", + "MADV_CORE": "int:9", + "MADV_DONTNEED": "int:4", + "MADV_FREE": "int:5", + "MADV_NOCORE": "int:8", + "MADV_NORMAL": "int:0", + "MADV_NOSYNC": "int:6", + "MADV_PROTECT": "int:10", + "MADV_RANDOM": "int:1", + "MADV_SEQUENTIAL": "int:2", + "MADV_WILLNEED": "int:3", + "MAP_32BIT": "int:524288", + "MAP_ALIGNED_SUPER": "int:16777216", + "MAP_ALIGNMENT_MASK": "int:-16777216", + "MAP_ALIGNMENT_SHIFT": "int:24", + "MAP_ANON": "int:4096", + "MAP_ANONYMOUS": "int:4096", + "MAP_COPY": "int:2", + "MAP_FILE": "int:0", + "MAP_FIXED": "int:16", + "MAP_HASSEMAPHORE": "int:512", + "MAP_NOCORE": "int:131072", + "MAP_NORESERVE": "int:64", + "MAP_NOSYNC": "int:2048", + "MAP_PREFAULT_READ": "int:262144", + "MAP_PRIVATE": "int:2", + "MAP_RENAME": "int:32", + "MAP_RESERVED0080": "int:128", + "MAP_RESERVED0100": "int:256", + "MAP_SHARED": "int:1", + "MAP_STACK": "int:1024", + "MCL_CURRENT": "int:1", + "MCL_FUTURE": "int:2", + "MSG_CMSG_CLOEXEC": "int:262144", + "MSG_COMPAT": "int:32768", + "MSG_CTRUNC": "int:32", + "MSG_DONTROUTE": "int:4", + "MSG_DONTWAIT": "int:128", + "MSG_EOF": "int:256", + "MSG_EOR": "int:8", + "MSG_NBIO": "int:16384", + "MSG_NOSIGNAL": "int:131072", + "MSG_NOTIFICATION": "int:8192", + "MSG_OOB": "int:1", + "MSG_PEEK": "int:2", + "MSG_TRUNC": "int:16", + "MSG_WAITALL": "int:64", + "MS_ASYNC": "int:1", + "MS_INVALIDATE": "int:2", + "MS_SYNC": "int:0", + "NAME_MAX": "int:255", + "NET_RT_DUMP": "int:1", + "NET_RT_FLAGS": "int:2", + "NET_RT_IFLIST": "int:3", + "NET_RT_IFLISTL": "int:5", + "NET_RT_IFMALIST": "int:4", + "NET_RT_MAXID": "int:6", + "NOFLSH": "int:2147483648", + "NOTE_ATTRIB": "int:8", + "NOTE_CHILD": "int:4", + "NOTE_DELETE": "int:1", + "NOTE_EXEC": "int:536870912", + "NOTE_EXIT": "int:2147483648", + "NOTE_EXTEND": "int:4", + "NOTE_FFAND": "int:1073741824", + "NOTE_FFCOPY": "int:3221225472", + "NOTE_FFCTRLMASK": "int:3221225472", + "NOTE_FFLAGSMASK": "int:16777215", + "NOTE_FFNOP": "int:0", + "NOTE_FFOR": "int:2147483648", + "NOTE_FORK": "int:1073741824", + "NOTE_LINK": "int:16", + "NOTE_LOWAT": "int:1", + "NOTE_PCTRLMASK": "int:4026531840", + "NOTE_PDATAMASK": "int:1048575", + "NOTE_RENAME": "int:32", + "NOTE_REVOKE": "int:64", + "NOTE_TRACK": "int:1", + "NOTE_TRACKERR": "int:2", + "NOTE_TRIGGER": "int:16777216", + "NOTE_WRITE": "int:2", + "OCRNL": "int:16", + "ONLCR": "int:2", + "ONLRET": "int:64", + "ONOCR": "int:32", + "ONOEOT": "int:8", + "OPOST": "int:1", + "O_ACCMODE": "int:3", + "O_APPEND": "int:8", + "O_ASYNC": "int:64", + "O_CLOEXEC": "int:1048576", + "O_CREAT": "int:512", + "O_DIRECT": "int:65536", + "O_DIRECTORY": "int:131072", + "O_EXCL": "int:2048", + "O_EXEC": "int:262144", + "O_EXLOCK": "int:32", + "O_FSYNC": "int:128", + "O_NDELAY": "int:4", + "O_NOCTTY": "int:32768", + "O_NOFOLLOW": "int:256", + "O_NONBLOCK": "int:4", + "O_RDONLY": "int:0", + "O_RDWR": "int:2", + "O_SHLOCK": "int:16", + "O_SYNC": "int:128", + "O_TRUNC": "int:1024", + "O_TTY_INIT": "int:524288", + "O_WRONLY": "int:1", + "PARENB": "int:4096", + "PARMRK": "int:8", + "PARODD": "int:8192", + "PENDIN": "int:536870912", + "PRIO_PGRP": "int:1", + "PRIO_PROCESS": "int:0", + "PRIO_USER": "int:2", + "PROT_EXEC": "int:4", + "PROT_NONE": "int:0", + "PROT_READ": "int:1", + "PROT_WRITE": "int:2", + "PTRACE_CONT": "int:7", + "PTRACE_KILL": "int:8", + "PTRACE_TRACEME": "int:0", + "RLIMIT_AS": "int:10", + "RLIMIT_CORE": "int:4", + "RLIMIT_CPU": "int:0", + "RLIMIT_DATA": "int:2", + "RLIMIT_FSIZE": "int:1", + "RLIMIT_NOFILE": "int:8", + "RLIMIT_STACK": "int:3", + "RLIM_INFINITY": "int:9223372036854775807", + "RTAX_AUTHOR": "int:6", + "RTAX_BRD": "int:7", + "RTAX_DST": "int:0", + "RTAX_GATEWAY": "int:1", + "RTAX_GENMASK": "int:3", + "RTAX_IFA": "int:5", + "RTAX_IFP": "int:4", + "RTAX_MAX": "int:8", + "RTAX_NETMASK": "int:2", + "RTA_AUTHOR": "int:64", + "RTA_BRD": "int:128", + "RTA_DST": "int:1", + "RTA_GATEWAY": "int:2", + "RTA_GENMASK": "int:8", + "RTA_IFA": "int:32", + "RTA_IFP": "int:16", + "RTA_NETMASK": "int:4", + "RTF_BLACKHOLE": "int:4096", + "RTF_BROADCAST": "int:4194304", + "RTF_DONE": "int:64", + "RTF_DYNAMIC": "int:16", + "RTF_FMASK": "int:268752904", + "RTF_GATEWAY": "int:2", + "RTF_GWFLAG_COMPAT": "int:2147483648", + "RTF_HOST": "int:4", + "RTF_LLDATA": "int:1024", + "RTF_LLINFO": "int:1024", + "RTF_LOCAL": "int:2097152", + "RTF_MODIFIED": "int:32", + "RTF_MULTICAST": "int:8388608", + "RTF_PINNED": "int:1048576", + "RTF_PRCLONING": "int:65536", + "RTF_PROTO1": "int:32768", + "RTF_PROTO2": "int:16384", + "RTF_PROTO3": "int:262144", + "RTF_REJECT": "int:8", + "RTF_RNH_LOCKED": "int:1073741824", + "RTF_STATIC": "int:2048", + "RTF_STICKY": "int:268435456", + "RTF_UP": "int:1", + "RTF_XRESOLVE": "int:512", + "RTM_ADD": "int:1", + "RTM_CHANGE": "int:3", + "RTM_DELADDR": "int:13", + "RTM_DELETE": "int:2", + "RTM_DELMADDR": "int:16", + "RTM_GET": "int:4", + "RTM_IEEE80211": "int:18", + "RTM_IFANNOUNCE": "int:17", + "RTM_IFINFO": "int:14", + "RTM_LOCK": "int:8", + "RTM_LOSING": "int:5", + "RTM_MISS": "int:7", + "RTM_NEWADDR": "int:12", + "RTM_NEWMADDR": "int:15", + "RTM_OLDADD": "int:9", + "RTM_OLDDEL": "int:10", + "RTM_REDIRECT": "int:6", + "RTM_RESOLVE": "int:11", + "RTM_RTTUNIT": "int:1000000", + "RTM_VERSION": "int:5", + "RTV_EXPIRE": "int:4", + "RTV_HOPCOUNT": "int:2", + "RTV_MTU": "int:1", + "RTV_RPIPE": "int:8", + "RTV_RTT": "int:64", + "RTV_RTTVAR": "int:128", + "RTV_SPIPE": "int:16", + "RTV_SSTHRESH": "int:32", + "RTV_WEIGHT": "int:256", + "RT_CACHING_CONTEXT": "int:1", + "RT_DEFAULT_FIB": "int:0", + "RT_NORTREF": "int:2", + "RUSAGE_CHILDREN": "int:-1", + "RUSAGE_SELF": "int:0", + "RUSAGE_THREAD": "int:1", + "SCM_BINTIME": "int:4", + "SCM_CREDS": "int:3", + "SCM_RIGHTS": "int:1", + "SCM_TIMESTAMP": "int:2", + "SHUT_RD": "int:0", + "SHUT_RDWR": "int:2", + "SHUT_WR": "int:1", + "SIOCADDMULTI": "int:2149607729", + "SIOCADDRT": "int:2151707146", + "SIOCAIFADDR": "int:2151704858", + "SIOCAIFGROUP": "int:2150132103", + "SIOCALIFADDR": "int:2165860635", + "SIOCATMARK": "int:1074033415", + "SIOCDELMULTI": "int:2149607730", + "SIOCDELRT": "int:2151707147", + "SIOCDIFADDR": "int:2149607705", + "SIOCDIFGROUP": "int:2150132105", + "SIOCDIFPHYADDR": "int:2149607753", + "SIOCDLIFADDR": "int:2165860637", + "SIOCGDRVSPEC": "int:3223873915", + "SIOCGETSGCNT": "int:3223351824", + "SIOCGETVIFCNT": "int:3223876111", + "SIOCGHIWAT": "int:1074033409", + "SIOCGIFADDR": "int:3223349537", + "SIOCGIFBRDADDR": "int:3223349539", + "SIOCGIFCAP": "int:3223349535", + "SIOCGIFCONF": "int:3222300964", + "SIOCGIFDESCR": "int:3223349546", + "SIOCGIFDSTADDR": "int:3223349538", + "SIOCGIFFIB": "int:3223349596", + "SIOCGIFFLAGS": "int:3223349521", + "SIOCGIFGENERIC": "int:3223349562", + "SIOCGIFGMEMB": "int:3223873930", + "SIOCGIFGROUP": "int:3223873928", + "SIOCGIFINDEX": "int:3223349536", + "SIOCGIFMAC": "int:3223349542", + "SIOCGIFMEDIA": "int:3224398136", + "SIOCGIFMETRIC": "int:3223349527", + "SIOCGIFMTU": "int:3223349555", + "SIOCGIFNETMASK": "int:3223349541", + "SIOCGIFPDSTADDR": "int:3223349576", + "SIOCGIFPHYS": "int:3223349557", + "SIOCGIFPSRCADDR": "int:3223349575", + "SIOCGIFSTATUS": "int:3274795323", + "SIOCGLIFADDR": "int:3239602460", + "SIOCGLIFPHYADDR": "int:3239602507", + "SIOCGLOWAT": "int:1074033411", + "SIOCGPGRP": "int:1074033417", + "SIOCGPRIVATE_0": "int:3223349584", + "SIOCGPRIVATE_1": "int:3223349585", + "SIOCIFCREATE": "int:3223349626", + "SIOCIFCREATE2": "int:3223349628", + "SIOCIFDESTROY": "int:2149607801", + "SIOCIFGCLONERS": "int:3222301048", + "SIOCSDRVSPEC": "int:2150132091", + "SIOCSHIWAT": "int:2147775232", + "SIOCSIFADDR": "int:2149607692", + "SIOCSIFBRDADDR": "int:2149607699", + "SIOCSIFCAP": "int:2149607710", + "SIOCSIFDESCR": "int:2149607721", + "SIOCSIFDSTADDR": "int:2149607694", + "SIOCSIFFIB": "int:2149607773", + "SIOCSIFFLAGS": "int:2149607696", + "SIOCSIFGENERIC": "int:2149607737", + "SIOCSIFLLADDR": "int:2149607740", + "SIOCSIFMAC": "int:2149607719", + "SIOCSIFMEDIA": "int:3223349559", + "SIOCSIFMETRIC": "int:2149607704", + "SIOCSIFMTU": "int:2149607732", + "SIOCSIFNAME": "int:2149607720", + "SIOCSIFNETMASK": "int:2149607702", + "SIOCSIFPHYADDR": "int:2151704902", + "SIOCSIFPHYS": "int:2149607734", + "SIOCSIFRVNET": "int:3223349595", + "SIOCSIFVNET": "int:3223349594", + "SIOCSLIFPHYADDR": "int:2165860682", + "SIOCSLOWAT": "int:2147775234", + "SIOCSPGRP": "int:2147775240", + "SOCK_CLOEXEC": "int:268435456", + "SOCK_DGRAM": "int:2", + "SOCK_MAXADDRLEN": "int:255", + "SOCK_NONBLOCK": "int:536870912", + "SOCK_RAW": "int:3", + "SOCK_RDM": "int:4", + "SOCK_SEQPACKET": "int:5", + "SOCK_STREAM": "int:1", + "SOL_SOCKET": "int:65535", + "SOMAXCONN": "int:128", + "SO_ACCEPTCONN": "int:2", + "SO_ACCEPTFILTER": "int:4096", + "SO_BINTIME": "int:8192", + "SO_BROADCAST": "int:32", + "SO_DEBUG": "int:1", + "SO_DONTROUTE": "int:16", + "SO_ERROR": "int:4103", + "SO_KEEPALIVE": "int:8", + "SO_LABEL": "int:4105", + "SO_LINGER": "int:128", + "SO_LISTENINCQLEN": "int:4115", + "SO_LISTENQLEN": "int:4114", + "SO_LISTENQLIMIT": "int:4113", + "SO_NOSIGPIPE": "int:2048", + "SO_NO_DDP": "int:32768", + "SO_NO_OFFLOAD": "int:16384", + "SO_OOBINLINE": "int:256", + "SO_PEERLABEL": "int:4112", + "SO_PROTOCOL": "int:4118", + "SO_PROTOTYPE": "int:4118", + "SO_RCVBUF": "int:4098", + "SO_RCVLOWAT": "int:4100", + "SO_RCVTIMEO": "int:4102", + "SO_REUSEADDR": "int:4", + "SO_REUSEPORT": "int:512", + "SO_SETFIB": "int:4116", + "SO_SNDBUF": "int:4097", + "SO_SNDLOWAT": "int:4099", + "SO_SNDTIMEO": "int:4101", + "SO_TIMESTAMP": "int:1024", + "SO_TYPE": "int:4104", + "SO_USELOOPBACK": "int:64", + "SO_USER_COOKIE": "int:4117", + "SO_VENDOR": "int:2147483648", + "SYS_ABORT2": "int:463", + "SYS_ACCEPT": "int:30", + "SYS_ACCEPT4": "int:541", + "SYS_ACCESS": "int:33", + "SYS_ACCT": "int:51", + "SYS_ADJTIME": "int:140", + "SYS_AUDIT": "int:445", + "SYS_AUDITCTL": "int:453", + "SYS_AUDITON": "int:446", + "SYS_BIND": "int:104", + "SYS_BINDAT": "int:538", + "SYS_CAP_ENTER": "int:516", + "SYS_CAP_GETMODE": "int:517", + "SYS_CAP_GETRIGHTS": "int:515", + "SYS_CAP_NEW": "int:514", + "SYS_CHDIR": "int:12", + "SYS_CHFLAGS": "int:34", + "SYS_CHFLAGSAT": "int:540", + "SYS_CHMOD": "int:15", + "SYS_CHOWN": "int:16", + "SYS_CHROOT": "int:61", + "SYS_CLOCK_GETCPUCLOCKID2": "int:247", + "SYS_CLOCK_GETRES": "int:234", + "SYS_CLOCK_GETTIME": "int:232", + "SYS_CLOCK_SETTIME": "int:233", + "SYS_CLOSE": "int:6", + "SYS_CLOSEFROM": "int:509", + "SYS_CONNECT": "int:98", + "SYS_CONNECTAT": "int:539", + "SYS_CPUSET": "int:484", + "SYS_CPUSET_GETAFFINITY": "int:487", + "SYS_CPUSET_GETID": "int:486", + "SYS_CPUSET_SETAFFINITY": "int:488", + "SYS_CPUSET_SETID": "int:485", + "SYS_DUP": "int:41", + "SYS_DUP2": "int:90", + "SYS_EACCESS": "int:376", + "SYS_EXECVE": "int:59", + "SYS_EXIT": "int:1", + "SYS_EXTATTRCTL": "int:355", + "SYS_EXTATTR_DELETE_FD": "int:373", + "SYS_EXTATTR_DELETE_FILE": "int:358", + "SYS_EXTATTR_DELETE_LINK": "int:414", + "SYS_EXTATTR_GET_FD": "int:372", + "SYS_EXTATTR_GET_FILE": "int:357", + "SYS_EXTATTR_GET_LINK": "int:413", + "SYS_EXTATTR_LIST_FD": "int:437", + "SYS_EXTATTR_LIST_FILE": "int:438", + "SYS_EXTATTR_LIST_LINK": "int:439", + "SYS_EXTATTR_SET_FD": "int:371", + "SYS_EXTATTR_SET_FILE": "int:356", + "SYS_EXTATTR_SET_LINK": "int:412", + "SYS_FACCESSAT": "int:489", + "SYS_FCHDIR": "int:13", + "SYS_FCHFLAGS": "int:35", + "SYS_FCHMOD": "int:124", + "SYS_FCHMODAT": "int:490", + "SYS_FCHOWN": "int:123", + "SYS_FCHOWNAT": "int:491", + "SYS_FCNTL": "int:92", + "SYS_FEXECVE": "int:492", + "SYS_FFCLOCK_GETCOUNTER": "int:241", + "SYS_FFCLOCK_GETESTIMATE": "int:243", + "SYS_FFCLOCK_SETESTIMATE": "int:242", + "SYS_FHOPEN": "int:298", + "SYS_FHSTAT": "int:299", + "SYS_FHSTATFS": "int:398", + "SYS_FLOCK": "int:131", + "SYS_FORK": "int:2", + "SYS_FPATHCONF": "int:192", + "SYS_FREEBSD6_FTRUNCATE": "int:201", + "SYS_FREEBSD6_LSEEK": "int:199", + "SYS_FREEBSD6_MMAP": "int:197", + "SYS_FREEBSD6_PREAD": "int:173", + "SYS_FREEBSD6_PWRITE": "int:174", + "SYS_FREEBSD6_TRUNCATE": "int:200", + "SYS_FSTAT": "int:189", + "SYS_FSTATAT": "int:493", + "SYS_FSTATFS": "int:397", + "SYS_FSYNC": "int:95", + "SYS_FTRUNCATE": "int:480", + "SYS_FUTIMES": "int:206", + "SYS_FUTIMESAT": "int:494", + "SYS_GETAUDIT": "int:449", + "SYS_GETAUDIT_ADDR": "int:451", + "SYS_GETAUID": "int:447", + "SYS_GETCONTEXT": "int:421", + "SYS_GETDENTS": "int:272", + "SYS_GETDIRENTRIES": "int:196", + "SYS_GETDTABLESIZE": "int:89", + "SYS_GETEGID": "int:43", + "SYS_GETEUID": "int:25", + "SYS_GETFH": "int:161", + "SYS_GETFSSTAT": "int:395", + "SYS_GETGID": "int:47", + "SYS_GETGROUPS": "int:79", + "SYS_GETITIMER": "int:86", + "SYS_GETLOGIN": "int:49", + "SYS_GETLOGINCLASS": "int:523", + "SYS_GETPEERNAME": "int:31", + "SYS_GETPGID": "int:207", + "SYS_GETPGRP": "int:81", + "SYS_GETPID": "int:20", + "SYS_GETPPID": "int:39", + "SYS_GETPRIORITY": "int:100", + "SYS_GETRESGID": "int:361", + "SYS_GETRESUID": "int:360", + "SYS_GETRLIMIT": "int:194", + "SYS_GETRUSAGE": "int:117", + "SYS_GETSID": "int:310", + "SYS_GETSOCKNAME": "int:32", + "SYS_GETSOCKOPT": "int:118", + "SYS_GETTIMEOFDAY": "int:116", + "SYS_GETUID": "int:24", + "SYS_IOCTL": "int:54", + "SYS_ISSETUGID": "int:253", + "SYS_JAIL": "int:338", + "SYS_JAIL_ATTACH": "int:436", + "SYS_JAIL_GET": "int:506", + "SYS_JAIL_REMOVE": "int:508", + "SYS_JAIL_SET": "int:507", + "SYS_KENV": "int:390", + "SYS_KEVENT": "int:363", + "SYS_KILL": "int:37", + "SYS_KLDFIND": "int:306", + "SYS_KLDFIRSTMOD": "int:309", + "SYS_KLDLOAD": "int:304", + "SYS_KLDNEXT": "int:307", + "SYS_KLDSTAT": "int:308", + "SYS_KLDSYM": "int:337", + "SYS_KLDUNLOAD": "int:305", + "SYS_KLDUNLOADF": "int:444", + "SYS_KQUEUE": "int:362", + "SYS_KTIMER_CREATE": "int:235", + "SYS_KTIMER_DELETE": "int:236", + "SYS_KTIMER_GETOVERRUN": "int:239", + "SYS_KTIMER_GETTIME": "int:238", + "SYS_KTIMER_SETTIME": "int:237", + "SYS_KTRACE": "int:45", + "SYS_LCHFLAGS": "int:391", + "SYS_LCHMOD": "int:274", + "SYS_LCHOWN": "int:254", + "SYS_LGETFH": "int:160", + "SYS_LINK": "int:9", + "SYS_LINKAT": "int:495", + "SYS_LISTEN": "int:106", + "SYS_LPATHCONF": "int:513", + "SYS_LSEEK": "int:478", + "SYS_LSTAT": "int:190", + "SYS_LUTIMES": "int:276", + "SYS_MAC_SYSCALL": "int:394", + "SYS_MADVISE": "int:75", + "SYS_MINCORE": "int:78", + "SYS_MINHERIT": "int:250", + "SYS_MKDIR": "int:136", + "SYS_MKDIRAT": "int:496", + "SYS_MKFIFO": "int:132", + "SYS_MKFIFOAT": "int:497", + "SYS_MKNOD": "int:14", + "SYS_MKNODAT": "int:498", + "SYS_MLOCK": "int:203", + "SYS_MLOCKALL": "int:324", + "SYS_MMAP": "int:477", + "SYS_MODFIND": "int:303", + "SYS_MODFNEXT": "int:302", + "SYS_MODNEXT": "int:300", + "SYS_MODSTAT": "int:301", + "SYS_MOUNT": "int:21", + "SYS_MPROTECT": "int:74", + "SYS_MSYNC": "int:65", + "SYS_MUNLOCK": "int:204", + "SYS_MUNLOCKALL": "int:325", + "SYS_MUNMAP": "int:73", + "SYS_NANOSLEEP": "int:240", + "SYS_NFSTAT": "int:279", + "SYS_NLSTAT": "int:280", + "SYS_NMOUNT": "int:378", + "SYS_NSTAT": "int:278", + "SYS_NTP_ADJTIME": "int:176", + "SYS_NTP_GETTIME": "int:248", + "SYS_OBREAK": "int:17", + "SYS_OPEN": "int:5", + "SYS_OPENAT": "int:499", + "SYS_OPENBSD_POLL": "int:252", + "SYS_OVADVISE": "int:72", + "SYS_PATHCONF": "int:191", + "SYS_PDFORK": "int:518", + "SYS_PDGETPID": "int:520", + "SYS_PDKILL": "int:519", + "SYS_PIPE": "int:42", + "SYS_PIPE2": "int:542", + "SYS_POLL": "int:209", + "SYS_POSIX_FADVISE": "int:531", + "SYS_POSIX_FALLOCATE": "int:530", + "SYS_POSIX_OPENPT": "int:504", + "SYS_PREAD": "int:475", + "SYS_PREADV": "int:289", + "SYS_PROCCTL": "int:544", + "SYS_PROFIL": "int:44", + "SYS_PSELECT": "int:522", + "SYS_PTRACE": "int:26", + "SYS_PWRITE": "int:476", + "SYS_PWRITEV": "int:290", + "SYS_QUOTACTL": "int:148", + "SYS_RCTL_ADD_RULE": "int:528", + "SYS_RCTL_GET_LIMITS": "int:527", + "SYS_RCTL_GET_RACCT": "int:525", + "SYS_RCTL_GET_RULES": "int:526", + "SYS_RCTL_REMOVE_RULE": "int:529", + "SYS_READ": "int:3", + "SYS_READLINK": "int:58", + "SYS_READLINKAT": "int:500", + "SYS_READV": "int:120", + "SYS_REBOOT": "int:55", + "SYS_RECVFROM": "int:29", + "SYS_RECVMSG": "int:27", + "SYS_RENAME": "int:128", + "SYS_RENAMEAT": "int:501", + "SYS_REVOKE": "int:56", + "SYS_RFORK": "int:251", + "SYS_RMDIR": "int:137", + "SYS_RTPRIO": "int:166", + "SYS_RTPRIO_THREAD": "int:466", + "SYS_SBRK": "int:69", + "SYS_SCHED_GETPARAM": "int:328", + "SYS_SCHED_GETSCHEDULER": "int:330", + "SYS_SCHED_GET_PRIORITY_MAX": "int:332", + "SYS_SCHED_GET_PRIORITY_MIN": "int:333", + "SYS_SCHED_RR_GET_INTERVAL": "int:334", + "SYS_SCHED_SETPARAM": "int:327", + "SYS_SCHED_SETSCHEDULER": "int:329", + "SYS_SCHED_YIELD": "int:331", + "SYS_SCTP_GENERIC_RECVMSG": "int:474", + "SYS_SCTP_GENERIC_SENDMSG": "int:472", + "SYS_SCTP_GENERIC_SENDMSG_IOV": "int:473", + "SYS_SCTP_PEELOFF": "int:471", + "SYS_SELECT": "int:93", + "SYS_SENDFILE": "int:393", + "SYS_SENDMSG": "int:28", + "SYS_SENDTO": "int:133", + "SYS_SETAUDIT": "int:450", + "SYS_SETAUDIT_ADDR": "int:452", + "SYS_SETAUID": "int:448", + "SYS_SETCONTEXT": "int:422", + "SYS_SETEGID": "int:182", + "SYS_SETEUID": "int:183", + "SYS_SETFIB": "int:175", + "SYS_SETGID": "int:181", + "SYS_SETGROUPS": "int:80", + "SYS_SETITIMER": "int:83", + "SYS_SETLOGIN": "int:50", + "SYS_SETLOGINCLASS": "int:524", + "SYS_SETPGID": "int:82", + "SYS_SETPRIORITY": "int:96", + "SYS_SETREGID": "int:127", + "SYS_SETRESGID": "int:312", + "SYS_SETRESUID": "int:311", + "SYS_SETREUID": "int:126", + "SYS_SETRLIMIT": "int:195", + "SYS_SETSID": "int:147", + "SYS_SETSOCKOPT": "int:105", + "SYS_SETTIMEOFDAY": "int:122", + "SYS_SETUID": "int:23", + "SYS_SHM_OPEN": "int:482", + "SYS_SHM_UNLINK": "int:483", + "SYS_SHUTDOWN": "int:134", + "SYS_SIGACTION": "int:416", + "SYS_SIGALTSTACK": "int:53", + "SYS_SIGPENDING": "int:343", + "SYS_SIGPROCMASK": "int:340", + "SYS_SIGQUEUE": "int:456", + "SYS_SIGRETURN": "int:417", + "SYS_SIGSUSPEND": "int:341", + "SYS_SIGTIMEDWAIT": "int:345", + "SYS_SIGWAIT": "int:429", + "SYS_SIGWAITINFO": "int:346", + "SYS_SOCKET": "int:97", + "SYS_SOCKETPAIR": "int:135", + "SYS_SSTK": "int:70", + "SYS_STAT": "int:188", + "SYS_STATFS": "int:396", + "SYS_SWAPCONTEXT": "int:423", + "SYS_SWAPOFF": "int:424", + "SYS_SWAPON": "int:85", + "SYS_SYMLINK": "int:57", + "SYS_SYMLINKAT": "int:502", + "SYS_SYNC": "int:36", + "SYS_SYSARCH": "int:165", + "SYS_THR_CREATE": "int:430", + "SYS_THR_EXIT": "int:431", + "SYS_THR_KILL": "int:433", + "SYS_THR_KILL2": "int:481", + "SYS_THR_NEW": "int:455", + "SYS_THR_SELF": "int:432", + "SYS_THR_SET_NAME": "int:464", + "SYS_THR_SUSPEND": "int:442", + "SYS_THR_WAKE": "int:443", + "SYS_TRUNCATE": "int:479", + "SYS_UMASK": "int:60", + "SYS_UNDELETE": "int:205", + "SYS_UNLINK": "int:10", + "SYS_UNLINKAT": "int:503", + "SYS_UNMOUNT": "int:22", + "SYS_UTIMES": "int:138", + "SYS_UTRACE": "int:335", + "SYS_UUIDGEN": "int:392", + "SYS_VFORK": "int:66", + "SYS_WAIT4": "int:7", + "SYS_WAIT6": "int:532", + "SYS_WRITE": "int:4", + "SYS_WRITEV": "int:121", + "SYS_YIELD": "int:321", + "SYS__UMTX_LOCK": "int:434", + "SYS__UMTX_OP": "int:454", + "SYS__UMTX_UNLOCK": "int:435", + "SYS___ACL_ACLCHECK_FD": "int:354", + "SYS___ACL_ACLCHECK_FILE": "int:353", + "SYS___ACL_ACLCHECK_LINK": "int:428", + "SYS___ACL_DELETE_FD": "int:352", + "SYS___ACL_DELETE_FILE": "int:351", + "SYS___ACL_DELETE_LINK": "int:427", + "SYS___ACL_GET_FD": "int:349", + "SYS___ACL_GET_FILE": "int:347", + "SYS___ACL_GET_LINK": "int:425", + "SYS___ACL_SET_FD": "int:350", + "SYS___ACL_SET_FILE": "int:348", + "SYS___ACL_SET_LINK": "int:426", + "SYS___GETCWD": "int:326", + "SYS___MAC_EXECVE": "int:415", + "SYS___MAC_GET_FD": "int:386", + "SYS___MAC_GET_FILE": "int:387", + "SYS___MAC_GET_LINK": "int:410", + "SYS___MAC_GET_PID": "int:409", + "SYS___MAC_GET_PROC": "int:384", + "SYS___MAC_SET_FD": "int:388", + "SYS___MAC_SET_FILE": "int:389", + "SYS___MAC_SET_LINK": "int:411", + "SYS___MAC_SET_PROC": "int:385", + "SYS___SETUGID": "int:374", + "SYS___SYSCTL": "int:202", + "S_IFBLK": "int:24576", + "S_IFCHR": "int:8192", + "S_IFDIR": "int:16384", + "S_IFIFO": "int:4096", + "S_IFLNK": "int:40960", + "S_IFMT": "int:61440", + "S_IFREG": "int:32768", + "S_IFSOCK": "int:49152", + "S_IRUSR": "int:256", + "S_ISGID": "int:1024", + "S_ISUID": "int:2048", + "S_ISVTX": "int:512", + "S_IWUSR": "int:128", + "S_IXUSR": "int:64", + "SizeofBpfHdr": "int:32", + "SizeofBpfInsn": "int:8", + "SizeofBpfProgram": "int:16", + "SizeofBpfStat": "int:8", + "SizeofBpfVersion": "int:4", + "SizeofBpfZbuf": "int:24", + "SizeofBpfZbufHeader": "int:32", + "SizeofCmsghdr": "int:12", + "SizeofICMPv6Filter": "int:32", + "SizeofIPMreq": "int:8", + "SizeofIPMreqn": "int:12", + "SizeofIPv6MTUInfo": "int:32", + "SizeofIPv6Mreq": "int:20", + "SizeofIfAnnounceMsghdr": "int:24", + "SizeofIfData": "int:152", + "SizeofIfMsghdr": "int:168", + "SizeofIfaMsghdr": "int:20", + "SizeofIfmaMsghdr": "int:16", + "SizeofInet6Pktinfo": "int:20", + "SizeofLinger": "int:8", + "SizeofMsghdr": "int:48", + "SizeofRtMetrics": "int:112", + "SizeofRtMsghdr": "int:152", + "SizeofSockaddrAny": "int:108", + "SizeofSockaddrDatalink": "int:54", + "SizeofSockaddrInet4": "int:16", + "SizeofSockaddrInet6": "int:28", + "SizeofSockaddrUnix": "int:106", + "TCIFLUSH": "int:1", + "TCIOFLUSH": "int:3", + "TCOFLUSH": "int:2", + "TCP_CA_NAME_MAX": "int:16", + "TCP_CONGESTION": "int:64", + "TCP_INFO": "int:32", + "TCP_KEEPCNT": "int:1024", + "TCP_KEEPIDLE": "int:256", + "TCP_KEEPINIT": "int:128", + "TCP_KEEPINTVL": "int:512", + "TCP_MAXBURST": "int:4", + "TCP_MAXHLEN": "int:60", + "TCP_MAXOLEN": "int:40", + "TCP_MAXSEG": "int:2", + "TCP_MAXWIN": "int:65535", + "TCP_MAX_SACK": "int:4", + "TCP_MAX_WINSHIFT": "int:14", + "TCP_MD5SIG": "int:16", + "TCP_MINMSS": "int:216", + "TCP_MSS": "int:536", + "TCP_NODELAY": "int:1", + "TCP_NOOPT": "int:8", + "TCP_NOPUSH": "int:4", + "TCP_VENDOR": "int:2147483648", + "TCSAFLUSH": "int:2", + "TIOCCBRK": "int:536900730", + "TIOCCDTR": "int:536900728", + "TIOCCONS": "int:2147775586", + "TIOCDRAIN": "int:536900702", + "TIOCEXCL": "int:536900621", + "TIOCEXT": "int:2147775584", + "TIOCFLUSH": "int:2147775504", + "TIOCGDRAINWAIT": "int:1074033750", + "TIOCGETA": "int:1076655123", + "TIOCGETD": "int:1074033690", + "TIOCGPGRP": "int:1074033783", + "TIOCGPTN": "int:1074033679", + "TIOCGSID": "int:1074033763", + "TIOCGWINSZ": "int:1074295912", + "TIOCMBIC": "int:2147775595", + "TIOCMBIS": "int:2147775596", + "TIOCMGDTRWAIT": "int:1074033754", + "TIOCMGET": "int:1074033770", + "TIOCMSDTRWAIT": "int:2147775579", + "TIOCMSET": "int:2147775597", + "TIOCM_CAR": "int:64", + "TIOCM_CD": "int:64", + "TIOCM_CTS": "int:32", + "TIOCM_DCD": "int:64", + "TIOCM_DSR": "int:256", + "TIOCM_DTR": "int:2", + "TIOCM_LE": "int:1", + "TIOCM_RI": "int:128", + "TIOCM_RNG": "int:128", + "TIOCM_RTS": "int:4", + "TIOCM_SR": "int:16", + "TIOCM_ST": "int:8", + "TIOCNOTTY": "int:536900721", + "TIOCNXCL": "int:536900622", + "TIOCOUTQ": "int:1074033779", + "TIOCPKT": "int:2147775600", + "TIOCPKT_DATA": "int:0", + "TIOCPKT_DOSTOP": "int:32", + "TIOCPKT_FLUSHREAD": "int:1", + "TIOCPKT_FLUSHWRITE": "int:2", + "TIOCPKT_IOCTL": "int:64", + "TIOCPKT_NOSTOP": "int:16", + "TIOCPKT_START": "int:8", + "TIOCPKT_STOP": "int:4", + "TIOCPTMASTER": "int:536900636", + "TIOCSBRK": "int:536900731", + "TIOCSCTTY": "int:536900705", + "TIOCSDRAINWAIT": "int:2147775575", + "TIOCSDTR": "int:536900729", + "TIOCSETA": "int:2150396948", + "TIOCSETAF": "int:2150396950", + "TIOCSETAW": "int:2150396949", + "TIOCSETD": "int:2147775515", + "TIOCSIG": "int:537162847", + "TIOCSPGRP": "int:2147775606", + "TIOCSTART": "int:536900718", + "TIOCSTAT": "int:536900709", + "TIOCSTI": "int:2147578994", + "TIOCSTOP": "int:536900719", + "TIOCSWINSZ": "int:2148037735", + "TIOCTIMESTAMP": "int:1074820185", + "TIOCUCNTL": "int:2147775590", + "TOSTOP": "int:4194304", + "VDISCARD": "int:15", + "VDSUSP": "int:11", + "VEOF": "int:0", + "VEOL": "int:1", + "VEOL2": "int:2", + "VERASE": "int:3", + "VERASE2": "int:7", + "VINTR": "int:8", + "VKILL": "int:5", + "VLNEXT": "int:14", + "VMIN": "int:16", + "VQUIT": "int:9", + "VREPRINT": "int:6", + "VSTART": "int:12", + "VSTATUS": "int:18", + "VSTOP": "int:13", + "VSUSP": "int:10", + "VTIME": "int:17", + "VWERASE": "int:4", + "WCONTINUED": "int:4", + "WCOREFLAG": "int:128", + "WEXITED": "int:16", + "WLINUXCLONE": "int:2147483648", + "WNOHANG": "int:1", + "WNOWAIT": "int:8", + "WSTOPPED": "int:2", + "WTRAPPED": "int:32", + "WUNTRACED": "int:2", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_386.go b/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_386.go new file mode 100644 index 0000000..4fd6da8 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_386.go @@ -0,0 +1,3970 @@ +// +build !gccgo + +// this file was generated by gomacro command: import _b "syscall" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "syscall" +) + +// reflection: allow interpreted code to import "syscall" +func init() { + Packages["syscall"] = Package{ + Binds: map[string]Value{ + "AF_ALG": ValueOf(syscall.AF_ALG), + "AF_APPLETALK": ValueOf(syscall.AF_APPLETALK), + "AF_ASH": ValueOf(syscall.AF_ASH), + "AF_ATMPVC": ValueOf(syscall.AF_ATMPVC), + "AF_ATMSVC": ValueOf(syscall.AF_ATMSVC), + "AF_AX25": ValueOf(syscall.AF_AX25), + "AF_BLUETOOTH": ValueOf(syscall.AF_BLUETOOTH), + "AF_BRIDGE": ValueOf(syscall.AF_BRIDGE), + "AF_CAIF": ValueOf(syscall.AF_CAIF), + "AF_CAN": ValueOf(syscall.AF_CAN), + "AF_DECnet": ValueOf(syscall.AF_DECnet), + "AF_ECONET": ValueOf(syscall.AF_ECONET), + "AF_FILE": ValueOf(syscall.AF_FILE), + "AF_IEEE802154": ValueOf(syscall.AF_IEEE802154), + "AF_INET": ValueOf(syscall.AF_INET), + "AF_INET6": ValueOf(syscall.AF_INET6), + "AF_IPX": ValueOf(syscall.AF_IPX), + "AF_IRDA": ValueOf(syscall.AF_IRDA), + "AF_ISDN": ValueOf(syscall.AF_ISDN), + "AF_IUCV": ValueOf(syscall.AF_IUCV), + "AF_KEY": ValueOf(syscall.AF_KEY), + "AF_LLC": ValueOf(syscall.AF_LLC), + "AF_LOCAL": ValueOf(syscall.AF_LOCAL), + "AF_MAX": ValueOf(syscall.AF_MAX), + "AF_NETBEUI": ValueOf(syscall.AF_NETBEUI), + "AF_NETLINK": ValueOf(syscall.AF_NETLINK), + "AF_NETROM": ValueOf(syscall.AF_NETROM), + "AF_PACKET": ValueOf(syscall.AF_PACKET), + "AF_PHONET": ValueOf(syscall.AF_PHONET), + "AF_PPPOX": ValueOf(syscall.AF_PPPOX), + "AF_RDS": ValueOf(syscall.AF_RDS), + "AF_ROSE": ValueOf(syscall.AF_ROSE), + "AF_ROUTE": ValueOf(syscall.AF_ROUTE), + "AF_RXRPC": ValueOf(syscall.AF_RXRPC), + "AF_SECURITY": ValueOf(syscall.AF_SECURITY), + "AF_SNA": ValueOf(syscall.AF_SNA), + "AF_TIPC": ValueOf(syscall.AF_TIPC), + "AF_UNIX": ValueOf(syscall.AF_UNIX), + "AF_UNSPEC": ValueOf(syscall.AF_UNSPEC), + "AF_WANPIPE": ValueOf(syscall.AF_WANPIPE), + "AF_X25": ValueOf(syscall.AF_X25), + "ARPHRD_ADAPT": ValueOf(syscall.ARPHRD_ADAPT), + "ARPHRD_APPLETLK": ValueOf(syscall.ARPHRD_APPLETLK), + "ARPHRD_ARCNET": ValueOf(syscall.ARPHRD_ARCNET), + "ARPHRD_ASH": ValueOf(syscall.ARPHRD_ASH), + "ARPHRD_ATM": ValueOf(syscall.ARPHRD_ATM), + "ARPHRD_AX25": ValueOf(syscall.ARPHRD_AX25), + "ARPHRD_BIF": ValueOf(syscall.ARPHRD_BIF), + "ARPHRD_CHAOS": ValueOf(syscall.ARPHRD_CHAOS), + "ARPHRD_CISCO": ValueOf(syscall.ARPHRD_CISCO), + "ARPHRD_CSLIP": ValueOf(syscall.ARPHRD_CSLIP), + "ARPHRD_CSLIP6": ValueOf(syscall.ARPHRD_CSLIP6), + "ARPHRD_DDCMP": ValueOf(syscall.ARPHRD_DDCMP), + "ARPHRD_DLCI": ValueOf(syscall.ARPHRD_DLCI), + "ARPHRD_ECONET": ValueOf(syscall.ARPHRD_ECONET), + "ARPHRD_EETHER": ValueOf(syscall.ARPHRD_EETHER), + "ARPHRD_ETHER": ValueOf(syscall.ARPHRD_ETHER), + "ARPHRD_EUI64": ValueOf(syscall.ARPHRD_EUI64), + "ARPHRD_FCAL": ValueOf(syscall.ARPHRD_FCAL), + "ARPHRD_FCFABRIC": ValueOf(syscall.ARPHRD_FCFABRIC), + "ARPHRD_FCPL": ValueOf(syscall.ARPHRD_FCPL), + "ARPHRD_FCPP": ValueOf(syscall.ARPHRD_FCPP), + "ARPHRD_FDDI": ValueOf(syscall.ARPHRD_FDDI), + "ARPHRD_FRAD": ValueOf(syscall.ARPHRD_FRAD), + "ARPHRD_HDLC": ValueOf(syscall.ARPHRD_HDLC), + "ARPHRD_HIPPI": ValueOf(syscall.ARPHRD_HIPPI), + "ARPHRD_HWX25": ValueOf(syscall.ARPHRD_HWX25), + "ARPHRD_IEEE1394": ValueOf(syscall.ARPHRD_IEEE1394), + "ARPHRD_IEEE802": ValueOf(syscall.ARPHRD_IEEE802), + "ARPHRD_IEEE80211": ValueOf(syscall.ARPHRD_IEEE80211), + "ARPHRD_IEEE80211_PRISM": ValueOf(syscall.ARPHRD_IEEE80211_PRISM), + "ARPHRD_IEEE80211_RADIOTAP": ValueOf(syscall.ARPHRD_IEEE80211_RADIOTAP), + "ARPHRD_IEEE802154": ValueOf(syscall.ARPHRD_IEEE802154), + "ARPHRD_IEEE802154_PHY": ValueOf(syscall.ARPHRD_IEEE802154_PHY), + "ARPHRD_IEEE802_TR": ValueOf(syscall.ARPHRD_IEEE802_TR), + "ARPHRD_INFINIBAND": ValueOf(syscall.ARPHRD_INFINIBAND), + "ARPHRD_IPDDP": ValueOf(syscall.ARPHRD_IPDDP), + "ARPHRD_IPGRE": ValueOf(syscall.ARPHRD_IPGRE), + "ARPHRD_IRDA": ValueOf(syscall.ARPHRD_IRDA), + "ARPHRD_LAPB": ValueOf(syscall.ARPHRD_LAPB), + "ARPHRD_LOCALTLK": ValueOf(syscall.ARPHRD_LOCALTLK), + "ARPHRD_LOOPBACK": ValueOf(syscall.ARPHRD_LOOPBACK), + "ARPHRD_METRICOM": ValueOf(syscall.ARPHRD_METRICOM), + "ARPHRD_NETROM": ValueOf(syscall.ARPHRD_NETROM), + "ARPHRD_NONE": ValueOf(syscall.ARPHRD_NONE), + "ARPHRD_PIMREG": ValueOf(syscall.ARPHRD_PIMREG), + "ARPHRD_PPP": ValueOf(syscall.ARPHRD_PPP), + "ARPHRD_PRONET": ValueOf(syscall.ARPHRD_PRONET), + "ARPHRD_RAWHDLC": ValueOf(syscall.ARPHRD_RAWHDLC), + "ARPHRD_ROSE": ValueOf(syscall.ARPHRD_ROSE), + "ARPHRD_RSRVD": ValueOf(syscall.ARPHRD_RSRVD), + "ARPHRD_SIT": ValueOf(syscall.ARPHRD_SIT), + "ARPHRD_SKIP": ValueOf(syscall.ARPHRD_SKIP), + "ARPHRD_SLIP": ValueOf(syscall.ARPHRD_SLIP), + "ARPHRD_SLIP6": ValueOf(syscall.ARPHRD_SLIP6), + "ARPHRD_TUNNEL": ValueOf(syscall.ARPHRD_TUNNEL), + "ARPHRD_TUNNEL6": ValueOf(syscall.ARPHRD_TUNNEL6), + "ARPHRD_VOID": ValueOf(syscall.ARPHRD_VOID), + "ARPHRD_X25": ValueOf(syscall.ARPHRD_X25), + "Accept": ValueOf(syscall.Accept), + "Accept4": ValueOf(syscall.Accept4), + "Access": ValueOf(syscall.Access), + "Acct": ValueOf(syscall.Acct), + "Adjtimex": ValueOf(syscall.Adjtimex), + "AttachLsf": ValueOf(syscall.AttachLsf), + "B0": ValueOf(syscall.B0), + "B1000000": ValueOf(syscall.B1000000), + "B110": ValueOf(syscall.B110), + "B115200": ValueOf(syscall.B115200), + "B1152000": ValueOf(syscall.B1152000), + "B1200": ValueOf(syscall.B1200), + "B134": ValueOf(syscall.B134), + "B150": ValueOf(syscall.B150), + "B1500000": ValueOf(syscall.B1500000), + "B1800": ValueOf(syscall.B1800), + "B19200": ValueOf(syscall.B19200), + "B200": ValueOf(syscall.B200), + "B2000000": ValueOf(syscall.B2000000), + "B230400": ValueOf(syscall.B230400), + "B2400": ValueOf(syscall.B2400), + "B2500000": ValueOf(syscall.B2500000), + "B300": ValueOf(syscall.B300), + "B3000000": ValueOf(syscall.B3000000), + "B3500000": ValueOf(syscall.B3500000), + "B38400": ValueOf(syscall.B38400), + "B4000000": ValueOf(syscall.B4000000), + "B460800": ValueOf(syscall.B460800), + "B4800": ValueOf(syscall.B4800), + "B50": ValueOf(syscall.B50), + "B500000": ValueOf(syscall.B500000), + "B57600": ValueOf(syscall.B57600), + "B576000": ValueOf(syscall.B576000), + "B600": ValueOf(syscall.B600), + "B75": ValueOf(syscall.B75), + "B921600": ValueOf(syscall.B921600), + "B9600": ValueOf(syscall.B9600), + "BPF_A": ValueOf(syscall.BPF_A), + "BPF_ABS": ValueOf(syscall.BPF_ABS), + "BPF_ADD": ValueOf(syscall.BPF_ADD), + "BPF_ALU": ValueOf(syscall.BPF_ALU), + "BPF_AND": ValueOf(syscall.BPF_AND), + "BPF_B": ValueOf(syscall.BPF_B), + "BPF_DIV": ValueOf(syscall.BPF_DIV), + "BPF_H": ValueOf(syscall.BPF_H), + "BPF_IMM": ValueOf(syscall.BPF_IMM), + "BPF_IND": ValueOf(syscall.BPF_IND), + "BPF_JA": ValueOf(syscall.BPF_JA), + "BPF_JEQ": ValueOf(syscall.BPF_JEQ), + "BPF_JGE": ValueOf(syscall.BPF_JGE), + "BPF_JGT": ValueOf(syscall.BPF_JGT), + "BPF_JMP": ValueOf(syscall.BPF_JMP), + "BPF_JSET": ValueOf(syscall.BPF_JSET), + "BPF_K": ValueOf(syscall.BPF_K), + "BPF_LD": ValueOf(syscall.BPF_LD), + "BPF_LDX": ValueOf(syscall.BPF_LDX), + "BPF_LEN": ValueOf(syscall.BPF_LEN), + "BPF_LSH": ValueOf(syscall.BPF_LSH), + "BPF_MAJOR_VERSION": ValueOf(syscall.BPF_MAJOR_VERSION), + "BPF_MAXINSNS": ValueOf(syscall.BPF_MAXINSNS), + "BPF_MEM": ValueOf(syscall.BPF_MEM), + "BPF_MEMWORDS": ValueOf(syscall.BPF_MEMWORDS), + "BPF_MINOR_VERSION": ValueOf(syscall.BPF_MINOR_VERSION), + "BPF_MISC": ValueOf(syscall.BPF_MISC), + "BPF_MSH": ValueOf(syscall.BPF_MSH), + "BPF_MUL": ValueOf(syscall.BPF_MUL), + "BPF_NEG": ValueOf(syscall.BPF_NEG), + "BPF_OR": ValueOf(syscall.BPF_OR), + "BPF_RET": ValueOf(syscall.BPF_RET), + "BPF_RSH": ValueOf(syscall.BPF_RSH), + "BPF_ST": ValueOf(syscall.BPF_ST), + "BPF_STX": ValueOf(syscall.BPF_STX), + "BPF_SUB": ValueOf(syscall.BPF_SUB), + "BPF_TAX": ValueOf(syscall.BPF_TAX), + "BPF_TXA": ValueOf(syscall.BPF_TXA), + "BPF_W": ValueOf(syscall.BPF_W), + "BPF_X": ValueOf(syscall.BPF_X), + "BRKINT": ValueOf(syscall.BRKINT), + "Bind": ValueOf(syscall.Bind), + "BindToDevice": ValueOf(syscall.BindToDevice), + "BytePtrFromString": ValueOf(syscall.BytePtrFromString), + "ByteSliceFromString": ValueOf(syscall.ByteSliceFromString), + "CLOCAL": ValueOf(syscall.CLOCAL), + "CLONE_CHILD_CLEARTID": ValueOf(syscall.CLONE_CHILD_CLEARTID), + "CLONE_CHILD_SETTID": ValueOf(syscall.CLONE_CHILD_SETTID), + "CLONE_DETACHED": ValueOf(syscall.CLONE_DETACHED), + "CLONE_FILES": ValueOf(syscall.CLONE_FILES), + "CLONE_FS": ValueOf(syscall.CLONE_FS), + "CLONE_IO": ValueOf(uint32(syscall.CLONE_IO)), + "CLONE_NEWIPC": ValueOf(syscall.CLONE_NEWIPC), + "CLONE_NEWNET": ValueOf(syscall.CLONE_NEWNET), + "CLONE_NEWNS": ValueOf(syscall.CLONE_NEWNS), + "CLONE_NEWPID": ValueOf(syscall.CLONE_NEWPID), + "CLONE_NEWUSER": ValueOf(syscall.CLONE_NEWUSER), + "CLONE_NEWUTS": ValueOf(syscall.CLONE_NEWUTS), + "CLONE_PARENT": ValueOf(syscall.CLONE_PARENT), + "CLONE_PARENT_SETTID": ValueOf(syscall.CLONE_PARENT_SETTID), + "CLONE_PTRACE": ValueOf(syscall.CLONE_PTRACE), + "CLONE_SETTLS": ValueOf(syscall.CLONE_SETTLS), + "CLONE_SIGHAND": ValueOf(syscall.CLONE_SIGHAND), + "CLONE_SYSVSEM": ValueOf(syscall.CLONE_SYSVSEM), + "CLONE_THREAD": ValueOf(syscall.CLONE_THREAD), + "CLONE_UNTRACED": ValueOf(syscall.CLONE_UNTRACED), + "CLONE_VFORK": ValueOf(syscall.CLONE_VFORK), + "CLONE_VM": ValueOf(syscall.CLONE_VM), + "CREAD": ValueOf(syscall.CREAD), + "CS5": ValueOf(syscall.CS5), + "CS6": ValueOf(syscall.CS6), + "CS7": ValueOf(syscall.CS7), + "CS8": ValueOf(syscall.CS8), + "CSIZE": ValueOf(syscall.CSIZE), + "CSTOPB": ValueOf(syscall.CSTOPB), + "Chdir": ValueOf(syscall.Chdir), + "Chmod": ValueOf(syscall.Chmod), + "Chown": ValueOf(syscall.Chown), + "Chroot": ValueOf(syscall.Chroot), + "Clearenv": ValueOf(syscall.Clearenv), + "Close": ValueOf(syscall.Close), + "CloseOnExec": ValueOf(syscall.CloseOnExec), + "CmsgLen": ValueOf(syscall.CmsgLen), + "CmsgSpace": ValueOf(syscall.CmsgSpace), + "Connect": ValueOf(syscall.Connect), + "Creat": ValueOf(syscall.Creat), + "DT_BLK": ValueOf(syscall.DT_BLK), + "DT_CHR": ValueOf(syscall.DT_CHR), + "DT_DIR": ValueOf(syscall.DT_DIR), + "DT_FIFO": ValueOf(syscall.DT_FIFO), + "DT_LNK": ValueOf(syscall.DT_LNK), + "DT_REG": ValueOf(syscall.DT_REG), + "DT_SOCK": ValueOf(syscall.DT_SOCK), + "DT_UNKNOWN": ValueOf(syscall.DT_UNKNOWN), + "DT_WHT": ValueOf(syscall.DT_WHT), + "DetachLsf": ValueOf(syscall.DetachLsf), + "Dup": ValueOf(syscall.Dup), + "Dup2": ValueOf(syscall.Dup2), + "Dup3": ValueOf(syscall.Dup3), + "E2BIG": ValueOf(syscall.E2BIG), + "EACCES": ValueOf(syscall.EACCES), + "EADDRINUSE": ValueOf(syscall.EADDRINUSE), + "EADDRNOTAVAIL": ValueOf(syscall.EADDRNOTAVAIL), + "EADV": ValueOf(syscall.EADV), + "EAFNOSUPPORT": ValueOf(syscall.EAFNOSUPPORT), + "EAGAIN": ValueOf(syscall.EAGAIN), + "EALREADY": ValueOf(syscall.EALREADY), + "EBADE": ValueOf(syscall.EBADE), + "EBADF": ValueOf(syscall.EBADF), + "EBADFD": ValueOf(syscall.EBADFD), + "EBADMSG": ValueOf(syscall.EBADMSG), + "EBADR": ValueOf(syscall.EBADR), + "EBADRQC": ValueOf(syscall.EBADRQC), + "EBADSLT": ValueOf(syscall.EBADSLT), + "EBFONT": ValueOf(syscall.EBFONT), + "EBUSY": ValueOf(syscall.EBUSY), + "ECANCELED": ValueOf(syscall.ECANCELED), + "ECHILD": ValueOf(syscall.ECHILD), + "ECHO": ValueOf(syscall.ECHO), + "ECHOCTL": ValueOf(syscall.ECHOCTL), + "ECHOE": ValueOf(syscall.ECHOE), + "ECHOK": ValueOf(syscall.ECHOK), + "ECHOKE": ValueOf(syscall.ECHOKE), + "ECHONL": ValueOf(syscall.ECHONL), + "ECHOPRT": ValueOf(syscall.ECHOPRT), + "ECHRNG": ValueOf(syscall.ECHRNG), + "ECOMM": ValueOf(syscall.ECOMM), + "ECONNABORTED": ValueOf(syscall.ECONNABORTED), + "ECONNREFUSED": ValueOf(syscall.ECONNREFUSED), + "ECONNRESET": ValueOf(syscall.ECONNRESET), + "EDEADLK": ValueOf(syscall.EDEADLK), + "EDEADLOCK": ValueOf(syscall.EDEADLOCK), + "EDESTADDRREQ": ValueOf(syscall.EDESTADDRREQ), + "EDOM": ValueOf(syscall.EDOM), + "EDOTDOT": ValueOf(syscall.EDOTDOT), + "EDQUOT": ValueOf(syscall.EDQUOT), + "EEXIST": ValueOf(syscall.EEXIST), + "EFAULT": ValueOf(syscall.EFAULT), + "EFBIG": ValueOf(syscall.EFBIG), + "EHOSTDOWN": ValueOf(syscall.EHOSTDOWN), + "EHOSTUNREACH": ValueOf(syscall.EHOSTUNREACH), + "EIDRM": ValueOf(syscall.EIDRM), + "EILSEQ": ValueOf(syscall.EILSEQ), + "EINPROGRESS": ValueOf(syscall.EINPROGRESS), + "EINTR": ValueOf(syscall.EINTR), + "EINVAL": ValueOf(syscall.EINVAL), + "EIO": ValueOf(syscall.EIO), + "EISCONN": ValueOf(syscall.EISCONN), + "EISDIR": ValueOf(syscall.EISDIR), + "EISNAM": ValueOf(syscall.EISNAM), + "EKEYEXPIRED": ValueOf(syscall.EKEYEXPIRED), + "EKEYREJECTED": ValueOf(syscall.EKEYREJECTED), + "EKEYREVOKED": ValueOf(syscall.EKEYREVOKED), + "EL2HLT": ValueOf(syscall.EL2HLT), + "EL2NSYNC": ValueOf(syscall.EL2NSYNC), + "EL3HLT": ValueOf(syscall.EL3HLT), + "EL3RST": ValueOf(syscall.EL3RST), + "ELIBACC": ValueOf(syscall.ELIBACC), + "ELIBBAD": ValueOf(syscall.ELIBBAD), + "ELIBEXEC": ValueOf(syscall.ELIBEXEC), + "ELIBMAX": ValueOf(syscall.ELIBMAX), + "ELIBSCN": ValueOf(syscall.ELIBSCN), + "ELNRNG": ValueOf(syscall.ELNRNG), + "ELOOP": ValueOf(syscall.ELOOP), + "EMEDIUMTYPE": ValueOf(syscall.EMEDIUMTYPE), + "EMFILE": ValueOf(syscall.EMFILE), + "EMLINK": ValueOf(syscall.EMLINK), + "EMSGSIZE": ValueOf(syscall.EMSGSIZE), + "EMULTIHOP": ValueOf(syscall.EMULTIHOP), + "ENAMETOOLONG": ValueOf(syscall.ENAMETOOLONG), + "ENAVAIL": ValueOf(syscall.ENAVAIL), + "ENETDOWN": ValueOf(syscall.ENETDOWN), + "ENETRESET": ValueOf(syscall.ENETRESET), + "ENETUNREACH": ValueOf(syscall.ENETUNREACH), + "ENFILE": ValueOf(syscall.ENFILE), + "ENOANO": ValueOf(syscall.ENOANO), + "ENOBUFS": ValueOf(syscall.ENOBUFS), + "ENOCSI": ValueOf(syscall.ENOCSI), + "ENODATA": ValueOf(syscall.ENODATA), + "ENODEV": ValueOf(syscall.ENODEV), + "ENOENT": ValueOf(syscall.ENOENT), + "ENOEXEC": ValueOf(syscall.ENOEXEC), + "ENOKEY": ValueOf(syscall.ENOKEY), + "ENOLCK": ValueOf(syscall.ENOLCK), + "ENOLINK": ValueOf(syscall.ENOLINK), + "ENOMEDIUM": ValueOf(syscall.ENOMEDIUM), + "ENOMEM": ValueOf(syscall.ENOMEM), + "ENOMSG": ValueOf(syscall.ENOMSG), + "ENONET": ValueOf(syscall.ENONET), + "ENOPKG": ValueOf(syscall.ENOPKG), + "ENOPROTOOPT": ValueOf(syscall.ENOPROTOOPT), + "ENOSPC": ValueOf(syscall.ENOSPC), + "ENOSR": ValueOf(syscall.ENOSR), + "ENOSTR": ValueOf(syscall.ENOSTR), + "ENOSYS": ValueOf(syscall.ENOSYS), + "ENOTBLK": ValueOf(syscall.ENOTBLK), + "ENOTCONN": ValueOf(syscall.ENOTCONN), + "ENOTDIR": ValueOf(syscall.ENOTDIR), + "ENOTEMPTY": ValueOf(syscall.ENOTEMPTY), + "ENOTNAM": ValueOf(syscall.ENOTNAM), + "ENOTRECOVERABLE": ValueOf(syscall.ENOTRECOVERABLE), + "ENOTSOCK": ValueOf(syscall.ENOTSOCK), + "ENOTSUP": ValueOf(syscall.ENOTSUP), + "ENOTTY": ValueOf(syscall.ENOTTY), + "ENOTUNIQ": ValueOf(syscall.ENOTUNIQ), + "ENXIO": ValueOf(syscall.ENXIO), + "EOPNOTSUPP": ValueOf(syscall.EOPNOTSUPP), + "EOVERFLOW": ValueOf(syscall.EOVERFLOW), + "EOWNERDEAD": ValueOf(syscall.EOWNERDEAD), + "EPERM": ValueOf(syscall.EPERM), + "EPFNOSUPPORT": ValueOf(syscall.EPFNOSUPPORT), + "EPIPE": ValueOf(syscall.EPIPE), + "EPOLLERR": ValueOf(syscall.EPOLLERR), + "EPOLLET": ValueOf(syscall.EPOLLET), + "EPOLLHUP": ValueOf(syscall.EPOLLHUP), + "EPOLLIN": ValueOf(syscall.EPOLLIN), + "EPOLLMSG": ValueOf(syscall.EPOLLMSG), + "EPOLLONESHOT": ValueOf(syscall.EPOLLONESHOT), + "EPOLLOUT": ValueOf(syscall.EPOLLOUT), + "EPOLLPRI": ValueOf(syscall.EPOLLPRI), + "EPOLLRDBAND": ValueOf(syscall.EPOLLRDBAND), + "EPOLLRDHUP": ValueOf(syscall.EPOLLRDHUP), + "EPOLLRDNORM": ValueOf(syscall.EPOLLRDNORM), + "EPOLLWRBAND": ValueOf(syscall.EPOLLWRBAND), + "EPOLLWRNORM": ValueOf(syscall.EPOLLWRNORM), + "EPOLL_CLOEXEC": ValueOf(syscall.EPOLL_CLOEXEC), + "EPOLL_CTL_ADD": ValueOf(syscall.EPOLL_CTL_ADD), + "EPOLL_CTL_DEL": ValueOf(syscall.EPOLL_CTL_DEL), + "EPOLL_CTL_MOD": ValueOf(syscall.EPOLL_CTL_MOD), + "EPOLL_NONBLOCK": ValueOf(syscall.EPOLL_NONBLOCK), + "EPROTO": ValueOf(syscall.EPROTO), + "EPROTONOSUPPORT": ValueOf(syscall.EPROTONOSUPPORT), + "EPROTOTYPE": ValueOf(syscall.EPROTOTYPE), + "ERANGE": ValueOf(syscall.ERANGE), + "EREMCHG": ValueOf(syscall.EREMCHG), + "EREMOTE": ValueOf(syscall.EREMOTE), + "EREMOTEIO": ValueOf(syscall.EREMOTEIO), + "ERESTART": ValueOf(syscall.ERESTART), + "ERFKILL": ValueOf(syscall.ERFKILL), + "EROFS": ValueOf(syscall.EROFS), + "ESHUTDOWN": ValueOf(syscall.ESHUTDOWN), + "ESOCKTNOSUPPORT": ValueOf(syscall.ESOCKTNOSUPPORT), + "ESPIPE": ValueOf(syscall.ESPIPE), + "ESRCH": ValueOf(syscall.ESRCH), + "ESRMNT": ValueOf(syscall.ESRMNT), + "ESTALE": ValueOf(syscall.ESTALE), + "ESTRPIPE": ValueOf(syscall.ESTRPIPE), + "ETH_P_1588": ValueOf(syscall.ETH_P_1588), + "ETH_P_8021Q": ValueOf(syscall.ETH_P_8021Q), + "ETH_P_802_2": ValueOf(syscall.ETH_P_802_2), + "ETH_P_802_3": ValueOf(syscall.ETH_P_802_3), + "ETH_P_AARP": ValueOf(syscall.ETH_P_AARP), + "ETH_P_ALL": ValueOf(syscall.ETH_P_ALL), + "ETH_P_AOE": ValueOf(syscall.ETH_P_AOE), + "ETH_P_ARCNET": ValueOf(syscall.ETH_P_ARCNET), + "ETH_P_ARP": ValueOf(syscall.ETH_P_ARP), + "ETH_P_ATALK": ValueOf(syscall.ETH_P_ATALK), + "ETH_P_ATMFATE": ValueOf(syscall.ETH_P_ATMFATE), + "ETH_P_ATMMPOA": ValueOf(syscall.ETH_P_ATMMPOA), + "ETH_P_AX25": ValueOf(syscall.ETH_P_AX25), + "ETH_P_BPQ": ValueOf(syscall.ETH_P_BPQ), + "ETH_P_CAIF": ValueOf(syscall.ETH_P_CAIF), + "ETH_P_CAN": ValueOf(syscall.ETH_P_CAN), + "ETH_P_CONTROL": ValueOf(syscall.ETH_P_CONTROL), + "ETH_P_CUST": ValueOf(syscall.ETH_P_CUST), + "ETH_P_DDCMP": ValueOf(syscall.ETH_P_DDCMP), + "ETH_P_DEC": ValueOf(syscall.ETH_P_DEC), + "ETH_P_DIAG": ValueOf(syscall.ETH_P_DIAG), + "ETH_P_DNA_DL": ValueOf(syscall.ETH_P_DNA_DL), + "ETH_P_DNA_RC": ValueOf(syscall.ETH_P_DNA_RC), + "ETH_P_DNA_RT": ValueOf(syscall.ETH_P_DNA_RT), + "ETH_P_DSA": ValueOf(syscall.ETH_P_DSA), + "ETH_P_ECONET": ValueOf(syscall.ETH_P_ECONET), + "ETH_P_EDSA": ValueOf(syscall.ETH_P_EDSA), + "ETH_P_FCOE": ValueOf(syscall.ETH_P_FCOE), + "ETH_P_FIP": ValueOf(syscall.ETH_P_FIP), + "ETH_P_HDLC": ValueOf(syscall.ETH_P_HDLC), + "ETH_P_IEEE802154": ValueOf(syscall.ETH_P_IEEE802154), + "ETH_P_IEEEPUP": ValueOf(syscall.ETH_P_IEEEPUP), + "ETH_P_IEEEPUPAT": ValueOf(syscall.ETH_P_IEEEPUPAT), + "ETH_P_IP": ValueOf(syscall.ETH_P_IP), + "ETH_P_IPV6": ValueOf(syscall.ETH_P_IPV6), + "ETH_P_IPX": ValueOf(syscall.ETH_P_IPX), + "ETH_P_IRDA": ValueOf(syscall.ETH_P_IRDA), + "ETH_P_LAT": ValueOf(syscall.ETH_P_LAT), + "ETH_P_LINK_CTL": ValueOf(syscall.ETH_P_LINK_CTL), + "ETH_P_LOCALTALK": ValueOf(syscall.ETH_P_LOCALTALK), + "ETH_P_LOOP": ValueOf(syscall.ETH_P_LOOP), + "ETH_P_MOBITEX": ValueOf(syscall.ETH_P_MOBITEX), + "ETH_P_MPLS_MC": ValueOf(syscall.ETH_P_MPLS_MC), + "ETH_P_MPLS_UC": ValueOf(syscall.ETH_P_MPLS_UC), + "ETH_P_PAE": ValueOf(syscall.ETH_P_PAE), + "ETH_P_PAUSE": ValueOf(syscall.ETH_P_PAUSE), + "ETH_P_PHONET": ValueOf(syscall.ETH_P_PHONET), + "ETH_P_PPPTALK": ValueOf(syscall.ETH_P_PPPTALK), + "ETH_P_PPP_DISC": ValueOf(syscall.ETH_P_PPP_DISC), + "ETH_P_PPP_MP": ValueOf(syscall.ETH_P_PPP_MP), + "ETH_P_PPP_SES": ValueOf(syscall.ETH_P_PPP_SES), + "ETH_P_PUP": ValueOf(syscall.ETH_P_PUP), + "ETH_P_PUPAT": ValueOf(syscall.ETH_P_PUPAT), + "ETH_P_RARP": ValueOf(syscall.ETH_P_RARP), + "ETH_P_SCA": ValueOf(syscall.ETH_P_SCA), + "ETH_P_SLOW": ValueOf(syscall.ETH_P_SLOW), + "ETH_P_SNAP": ValueOf(syscall.ETH_P_SNAP), + "ETH_P_TEB": ValueOf(syscall.ETH_P_TEB), + "ETH_P_TIPC": ValueOf(syscall.ETH_P_TIPC), + "ETH_P_TRAILER": ValueOf(syscall.ETH_P_TRAILER), + "ETH_P_TR_802_2": ValueOf(syscall.ETH_P_TR_802_2), + "ETH_P_WAN_PPP": ValueOf(syscall.ETH_P_WAN_PPP), + "ETH_P_WCCP": ValueOf(syscall.ETH_P_WCCP), + "ETH_P_X25": ValueOf(syscall.ETH_P_X25), + "ETIME": ValueOf(syscall.ETIME), + "ETIMEDOUT": ValueOf(syscall.ETIMEDOUT), + "ETOOMANYREFS": ValueOf(syscall.ETOOMANYREFS), + "ETXTBSY": ValueOf(syscall.ETXTBSY), + "EUCLEAN": ValueOf(syscall.EUCLEAN), + "EUNATCH": ValueOf(syscall.EUNATCH), + "EUSERS": ValueOf(syscall.EUSERS), + "EWOULDBLOCK": ValueOf(syscall.EWOULDBLOCK), + "EXDEV": ValueOf(syscall.EXDEV), + "EXFULL": ValueOf(syscall.EXFULL), + "Environ": ValueOf(syscall.Environ), + "EpollCreate": ValueOf(syscall.EpollCreate), + "EpollCreate1": ValueOf(syscall.EpollCreate1), + "EpollCtl": ValueOf(syscall.EpollCtl), + "EpollWait": ValueOf(syscall.EpollWait), + "Exec": ValueOf(syscall.Exec), + "Exit": ValueOf(syscall.Exit), + "FD_CLOEXEC": ValueOf(syscall.FD_CLOEXEC), + "FD_SETSIZE": ValueOf(syscall.FD_SETSIZE), + "FLUSHO": ValueOf(syscall.FLUSHO), + "F_DUPFD": ValueOf(syscall.F_DUPFD), + "F_DUPFD_CLOEXEC": ValueOf(syscall.F_DUPFD_CLOEXEC), + "F_EXLCK": ValueOf(syscall.F_EXLCK), + "F_GETFD": ValueOf(syscall.F_GETFD), + "F_GETFL": ValueOf(syscall.F_GETFL), + "F_GETLEASE": ValueOf(syscall.F_GETLEASE), + "F_GETLK": ValueOf(syscall.F_GETLK), + "F_GETLK64": ValueOf(syscall.F_GETLK64), + "F_GETOWN": ValueOf(syscall.F_GETOWN), + "F_GETOWN_EX": ValueOf(syscall.F_GETOWN_EX), + "F_GETPIPE_SZ": ValueOf(syscall.F_GETPIPE_SZ), + "F_GETSIG": ValueOf(syscall.F_GETSIG), + "F_LOCK": ValueOf(syscall.F_LOCK), + "F_NOTIFY": ValueOf(syscall.F_NOTIFY), + "F_OK": ValueOf(syscall.F_OK), + "F_RDLCK": ValueOf(syscall.F_RDLCK), + "F_SETFD": ValueOf(syscall.F_SETFD), + "F_SETFL": ValueOf(syscall.F_SETFL), + "F_SETLEASE": ValueOf(syscall.F_SETLEASE), + "F_SETLK": ValueOf(syscall.F_SETLK), + "F_SETLK64": ValueOf(syscall.F_SETLK64), + "F_SETLKW": ValueOf(syscall.F_SETLKW), + "F_SETLKW64": ValueOf(syscall.F_SETLKW64), + "F_SETOWN": ValueOf(syscall.F_SETOWN), + "F_SETOWN_EX": ValueOf(syscall.F_SETOWN_EX), + "F_SETPIPE_SZ": ValueOf(syscall.F_SETPIPE_SZ), + "F_SETSIG": ValueOf(syscall.F_SETSIG), + "F_SHLCK": ValueOf(syscall.F_SHLCK), + "F_TEST": ValueOf(syscall.F_TEST), + "F_TLOCK": ValueOf(syscall.F_TLOCK), + "F_ULOCK": ValueOf(syscall.F_ULOCK), + "F_UNLCK": ValueOf(syscall.F_UNLCK), + "F_WRLCK": ValueOf(syscall.F_WRLCK), + "Faccessat": ValueOf(syscall.Faccessat), + "Fallocate": ValueOf(syscall.Fallocate), + "Fchdir": ValueOf(syscall.Fchdir), + "Fchmod": ValueOf(syscall.Fchmod), + "Fchmodat": ValueOf(syscall.Fchmodat), + "Fchown": ValueOf(syscall.Fchown), + "Fchownat": ValueOf(syscall.Fchownat), + "FcntlFlock": ValueOf(syscall.FcntlFlock), + "Fdatasync": ValueOf(syscall.Fdatasync), + "Flock": ValueOf(syscall.Flock), + "ForkExec": ValueOf(syscall.ForkExec), + "ForkLock": ValueOf(&syscall.ForkLock).Elem(), + "Fstat": ValueOf(syscall.Fstat), + "Fstatfs": ValueOf(syscall.Fstatfs), + "Fsync": ValueOf(syscall.Fsync), + "Ftruncate": ValueOf(syscall.Ftruncate), + "Futimes": ValueOf(syscall.Futimes), + "Futimesat": ValueOf(syscall.Futimesat), + "Getcwd": ValueOf(syscall.Getcwd), + "Getdents": ValueOf(syscall.Getdents), + "Getegid": ValueOf(syscall.Getegid), + "Getenv": ValueOf(syscall.Getenv), + "Geteuid": ValueOf(syscall.Geteuid), + "Getgid": ValueOf(syscall.Getgid), + "Getgroups": ValueOf(syscall.Getgroups), + "Getpagesize": ValueOf(syscall.Getpagesize), + "Getpeername": ValueOf(syscall.Getpeername), + "Getpgid": ValueOf(syscall.Getpgid), + "Getpgrp": ValueOf(syscall.Getpgrp), + "Getpid": ValueOf(syscall.Getpid), + "Getppid": ValueOf(syscall.Getppid), + "Getpriority": ValueOf(syscall.Getpriority), + "Getrlimit": ValueOf(syscall.Getrlimit), + "Getrusage": ValueOf(syscall.Getrusage), + "Getsockname": ValueOf(syscall.Getsockname), + "GetsockoptICMPv6Filter": ValueOf(syscall.GetsockoptICMPv6Filter), + "GetsockoptIPMreq": ValueOf(syscall.GetsockoptIPMreq), + "GetsockoptIPMreqn": ValueOf(syscall.GetsockoptIPMreqn), + "GetsockoptIPv6MTUInfo": ValueOf(syscall.GetsockoptIPv6MTUInfo), + "GetsockoptIPv6Mreq": ValueOf(syscall.GetsockoptIPv6Mreq), + "GetsockoptInet4Addr": ValueOf(syscall.GetsockoptInet4Addr), + "GetsockoptInt": ValueOf(syscall.GetsockoptInt), + "GetsockoptUcred": ValueOf(syscall.GetsockoptUcred), + "Gettid": ValueOf(syscall.Gettid), + "Gettimeofday": ValueOf(syscall.Gettimeofday), + "Getuid": ValueOf(syscall.Getuid), + "Getwd": ValueOf(syscall.Getwd), + "Getxattr": ValueOf(syscall.Getxattr), + "HUPCL": ValueOf(syscall.HUPCL), + "ICANON": ValueOf(syscall.ICANON), + "ICMPV6_FILTER": ValueOf(syscall.ICMPV6_FILTER), + "ICRNL": ValueOf(syscall.ICRNL), + "IEXTEN": ValueOf(syscall.IEXTEN), + "IFA_ADDRESS": ValueOf(syscall.IFA_ADDRESS), + "IFA_ANYCAST": ValueOf(syscall.IFA_ANYCAST), + "IFA_BROADCAST": ValueOf(syscall.IFA_BROADCAST), + "IFA_CACHEINFO": ValueOf(syscall.IFA_CACHEINFO), + "IFA_F_DADFAILED": ValueOf(syscall.IFA_F_DADFAILED), + "IFA_F_DEPRECATED": ValueOf(syscall.IFA_F_DEPRECATED), + "IFA_F_HOMEADDRESS": ValueOf(syscall.IFA_F_HOMEADDRESS), + "IFA_F_NODAD": ValueOf(syscall.IFA_F_NODAD), + "IFA_F_OPTIMISTIC": ValueOf(syscall.IFA_F_OPTIMISTIC), + "IFA_F_PERMANENT": ValueOf(syscall.IFA_F_PERMANENT), + "IFA_F_SECONDARY": ValueOf(syscall.IFA_F_SECONDARY), + "IFA_F_TEMPORARY": ValueOf(syscall.IFA_F_TEMPORARY), + "IFA_F_TENTATIVE": ValueOf(syscall.IFA_F_TENTATIVE), + "IFA_LABEL": ValueOf(syscall.IFA_LABEL), + "IFA_LOCAL": ValueOf(syscall.IFA_LOCAL), + "IFA_MAX": ValueOf(syscall.IFA_MAX), + "IFA_MULTICAST": ValueOf(syscall.IFA_MULTICAST), + "IFA_UNSPEC": ValueOf(syscall.IFA_UNSPEC), + "IFF_ALLMULTI": ValueOf(syscall.IFF_ALLMULTI), + "IFF_AUTOMEDIA": ValueOf(syscall.IFF_AUTOMEDIA), + "IFF_BROADCAST": ValueOf(syscall.IFF_BROADCAST), + "IFF_DEBUG": ValueOf(syscall.IFF_DEBUG), + "IFF_DYNAMIC": ValueOf(syscall.IFF_DYNAMIC), + "IFF_LOOPBACK": ValueOf(syscall.IFF_LOOPBACK), + "IFF_MASTER": ValueOf(syscall.IFF_MASTER), + "IFF_MULTICAST": ValueOf(syscall.IFF_MULTICAST), + "IFF_NOARP": ValueOf(syscall.IFF_NOARP), + "IFF_NOTRAILERS": ValueOf(syscall.IFF_NOTRAILERS), + "IFF_NO_PI": ValueOf(syscall.IFF_NO_PI), + "IFF_ONE_QUEUE": ValueOf(syscall.IFF_ONE_QUEUE), + "IFF_POINTOPOINT": ValueOf(syscall.IFF_POINTOPOINT), + "IFF_PORTSEL": ValueOf(syscall.IFF_PORTSEL), + "IFF_PROMISC": ValueOf(syscall.IFF_PROMISC), + "IFF_RUNNING": ValueOf(syscall.IFF_RUNNING), + "IFF_SLAVE": ValueOf(syscall.IFF_SLAVE), + "IFF_TAP": ValueOf(syscall.IFF_TAP), + "IFF_TUN": ValueOf(syscall.IFF_TUN), + "IFF_TUN_EXCL": ValueOf(syscall.IFF_TUN_EXCL), + "IFF_UP": ValueOf(syscall.IFF_UP), + "IFF_VNET_HDR": ValueOf(syscall.IFF_VNET_HDR), + "IFLA_ADDRESS": ValueOf(syscall.IFLA_ADDRESS), + "IFLA_BROADCAST": ValueOf(syscall.IFLA_BROADCAST), + "IFLA_COST": ValueOf(syscall.IFLA_COST), + "IFLA_IFALIAS": ValueOf(syscall.IFLA_IFALIAS), + "IFLA_IFNAME": ValueOf(syscall.IFLA_IFNAME), + "IFLA_LINK": ValueOf(syscall.IFLA_LINK), + "IFLA_LINKINFO": ValueOf(syscall.IFLA_LINKINFO), + "IFLA_LINKMODE": ValueOf(syscall.IFLA_LINKMODE), + "IFLA_MAP": ValueOf(syscall.IFLA_MAP), + "IFLA_MASTER": ValueOf(syscall.IFLA_MASTER), + "IFLA_MAX": ValueOf(syscall.IFLA_MAX), + "IFLA_MTU": ValueOf(syscall.IFLA_MTU), + "IFLA_NET_NS_PID": ValueOf(syscall.IFLA_NET_NS_PID), + "IFLA_OPERSTATE": ValueOf(syscall.IFLA_OPERSTATE), + "IFLA_PRIORITY": ValueOf(syscall.IFLA_PRIORITY), + "IFLA_PROTINFO": ValueOf(syscall.IFLA_PROTINFO), + "IFLA_QDISC": ValueOf(syscall.IFLA_QDISC), + "IFLA_STATS": ValueOf(syscall.IFLA_STATS), + "IFLA_TXQLEN": ValueOf(syscall.IFLA_TXQLEN), + "IFLA_UNSPEC": ValueOf(syscall.IFLA_UNSPEC), + "IFLA_WEIGHT": ValueOf(syscall.IFLA_WEIGHT), + "IFLA_WIRELESS": ValueOf(syscall.IFLA_WIRELESS), + "IFNAMSIZ": ValueOf(syscall.IFNAMSIZ), + "IGNBRK": ValueOf(syscall.IGNBRK), + "IGNCR": ValueOf(syscall.IGNCR), + "IGNPAR": ValueOf(syscall.IGNPAR), + "IMAXBEL": ValueOf(syscall.IMAXBEL), + "INLCR": ValueOf(syscall.INLCR), + "INPCK": ValueOf(syscall.INPCK), + "IN_ACCESS": ValueOf(syscall.IN_ACCESS), + "IN_ALL_EVENTS": ValueOf(syscall.IN_ALL_EVENTS), + "IN_ATTRIB": ValueOf(syscall.IN_ATTRIB), + "IN_CLASSA_HOST": ValueOf(syscall.IN_CLASSA_HOST), + "IN_CLASSA_MAX": ValueOf(syscall.IN_CLASSA_MAX), + "IN_CLASSA_NET": ValueOf(uint32(syscall.IN_CLASSA_NET)), + "IN_CLASSA_NSHIFT": ValueOf(syscall.IN_CLASSA_NSHIFT), + "IN_CLASSB_HOST": ValueOf(syscall.IN_CLASSB_HOST), + "IN_CLASSB_MAX": ValueOf(syscall.IN_CLASSB_MAX), + "IN_CLASSB_NET": ValueOf(uint32(syscall.IN_CLASSB_NET)), + "IN_CLASSB_NSHIFT": ValueOf(syscall.IN_CLASSB_NSHIFT), + "IN_CLASSC_HOST": ValueOf(syscall.IN_CLASSC_HOST), + "IN_CLASSC_NET": ValueOf(uint32(syscall.IN_CLASSC_NET)), + "IN_CLASSC_NSHIFT": ValueOf(syscall.IN_CLASSC_NSHIFT), + "IN_CLOEXEC": ValueOf(syscall.IN_CLOEXEC), + "IN_CLOSE": ValueOf(syscall.IN_CLOSE), + "IN_CLOSE_NOWRITE": ValueOf(syscall.IN_CLOSE_NOWRITE), + "IN_CLOSE_WRITE": ValueOf(syscall.IN_CLOSE_WRITE), + "IN_CREATE": ValueOf(syscall.IN_CREATE), + "IN_DELETE": ValueOf(syscall.IN_DELETE), + "IN_DELETE_SELF": ValueOf(syscall.IN_DELETE_SELF), + "IN_DONT_FOLLOW": ValueOf(syscall.IN_DONT_FOLLOW), + "IN_EXCL_UNLINK": ValueOf(syscall.IN_EXCL_UNLINK), + "IN_IGNORED": ValueOf(syscall.IN_IGNORED), + "IN_ISDIR": ValueOf(syscall.IN_ISDIR), + "IN_LOOPBACKNET": ValueOf(syscall.IN_LOOPBACKNET), + "IN_MASK_ADD": ValueOf(syscall.IN_MASK_ADD), + "IN_MODIFY": ValueOf(syscall.IN_MODIFY), + "IN_MOVE": ValueOf(syscall.IN_MOVE), + "IN_MOVED_FROM": ValueOf(syscall.IN_MOVED_FROM), + "IN_MOVED_TO": ValueOf(syscall.IN_MOVED_TO), + "IN_MOVE_SELF": ValueOf(syscall.IN_MOVE_SELF), + "IN_NONBLOCK": ValueOf(syscall.IN_NONBLOCK), + "IN_ONESHOT": ValueOf(uint32(syscall.IN_ONESHOT)), + "IN_ONLYDIR": ValueOf(syscall.IN_ONLYDIR), + "IN_OPEN": ValueOf(syscall.IN_OPEN), + "IN_Q_OVERFLOW": ValueOf(syscall.IN_Q_OVERFLOW), + "IN_UNMOUNT": ValueOf(syscall.IN_UNMOUNT), + "IPPROTO_AH": ValueOf(syscall.IPPROTO_AH), + "IPPROTO_COMP": ValueOf(syscall.IPPROTO_COMP), + "IPPROTO_DCCP": ValueOf(syscall.IPPROTO_DCCP), + "IPPROTO_DSTOPTS": ValueOf(syscall.IPPROTO_DSTOPTS), + "IPPROTO_EGP": ValueOf(syscall.IPPROTO_EGP), + "IPPROTO_ENCAP": ValueOf(syscall.IPPROTO_ENCAP), + "IPPROTO_ESP": ValueOf(syscall.IPPROTO_ESP), + "IPPROTO_FRAGMENT": ValueOf(syscall.IPPROTO_FRAGMENT), + "IPPROTO_GRE": ValueOf(syscall.IPPROTO_GRE), + "IPPROTO_HOPOPTS": ValueOf(syscall.IPPROTO_HOPOPTS), + "IPPROTO_ICMP": ValueOf(syscall.IPPROTO_ICMP), + "IPPROTO_ICMPV6": ValueOf(syscall.IPPROTO_ICMPV6), + "IPPROTO_IDP": ValueOf(syscall.IPPROTO_IDP), + "IPPROTO_IGMP": ValueOf(syscall.IPPROTO_IGMP), + "IPPROTO_IP": ValueOf(syscall.IPPROTO_IP), + "IPPROTO_IPIP": ValueOf(syscall.IPPROTO_IPIP), + "IPPROTO_IPV6": ValueOf(syscall.IPPROTO_IPV6), + "IPPROTO_MTP": ValueOf(syscall.IPPROTO_MTP), + "IPPROTO_NONE": ValueOf(syscall.IPPROTO_NONE), + "IPPROTO_PIM": ValueOf(syscall.IPPROTO_PIM), + "IPPROTO_PUP": ValueOf(syscall.IPPROTO_PUP), + "IPPROTO_RAW": ValueOf(syscall.IPPROTO_RAW), + "IPPROTO_ROUTING": ValueOf(syscall.IPPROTO_ROUTING), + "IPPROTO_RSVP": ValueOf(syscall.IPPROTO_RSVP), + "IPPROTO_SCTP": ValueOf(syscall.IPPROTO_SCTP), + "IPPROTO_TCP": ValueOf(syscall.IPPROTO_TCP), + "IPPROTO_TP": ValueOf(syscall.IPPROTO_TP), + "IPPROTO_UDP": ValueOf(syscall.IPPROTO_UDP), + "IPPROTO_UDPLITE": ValueOf(syscall.IPPROTO_UDPLITE), + "IPV6_2292DSTOPTS": ValueOf(syscall.IPV6_2292DSTOPTS), + "IPV6_2292HOPLIMIT": ValueOf(syscall.IPV6_2292HOPLIMIT), + "IPV6_2292HOPOPTS": ValueOf(syscall.IPV6_2292HOPOPTS), + "IPV6_2292PKTINFO": ValueOf(syscall.IPV6_2292PKTINFO), + "IPV6_2292PKTOPTIONS": ValueOf(syscall.IPV6_2292PKTOPTIONS), + "IPV6_2292RTHDR": ValueOf(syscall.IPV6_2292RTHDR), + "IPV6_ADDRFORM": ValueOf(syscall.IPV6_ADDRFORM), + "IPV6_ADD_MEMBERSHIP": ValueOf(syscall.IPV6_ADD_MEMBERSHIP), + "IPV6_AUTHHDR": ValueOf(syscall.IPV6_AUTHHDR), + "IPV6_CHECKSUM": ValueOf(syscall.IPV6_CHECKSUM), + "IPV6_DROP_MEMBERSHIP": ValueOf(syscall.IPV6_DROP_MEMBERSHIP), + "IPV6_DSTOPTS": ValueOf(syscall.IPV6_DSTOPTS), + "IPV6_HOPLIMIT": ValueOf(syscall.IPV6_HOPLIMIT), + "IPV6_HOPOPTS": ValueOf(syscall.IPV6_HOPOPTS), + "IPV6_IPSEC_POLICY": ValueOf(syscall.IPV6_IPSEC_POLICY), + "IPV6_JOIN_ANYCAST": ValueOf(syscall.IPV6_JOIN_ANYCAST), + "IPV6_JOIN_GROUP": ValueOf(syscall.IPV6_JOIN_GROUP), + "IPV6_LEAVE_ANYCAST": ValueOf(syscall.IPV6_LEAVE_ANYCAST), + "IPV6_LEAVE_GROUP": ValueOf(syscall.IPV6_LEAVE_GROUP), + "IPV6_MTU": ValueOf(syscall.IPV6_MTU), + "IPV6_MTU_DISCOVER": ValueOf(syscall.IPV6_MTU_DISCOVER), + "IPV6_MULTICAST_HOPS": ValueOf(syscall.IPV6_MULTICAST_HOPS), + "IPV6_MULTICAST_IF": ValueOf(syscall.IPV6_MULTICAST_IF), + "IPV6_MULTICAST_LOOP": ValueOf(syscall.IPV6_MULTICAST_LOOP), + "IPV6_NEXTHOP": ValueOf(syscall.IPV6_NEXTHOP), + "IPV6_PKTINFO": ValueOf(syscall.IPV6_PKTINFO), + "IPV6_PMTUDISC_DO": ValueOf(syscall.IPV6_PMTUDISC_DO), + "IPV6_PMTUDISC_DONT": ValueOf(syscall.IPV6_PMTUDISC_DONT), + "IPV6_PMTUDISC_PROBE": ValueOf(syscall.IPV6_PMTUDISC_PROBE), + "IPV6_PMTUDISC_WANT": ValueOf(syscall.IPV6_PMTUDISC_WANT), + "IPV6_RECVDSTOPTS": ValueOf(syscall.IPV6_RECVDSTOPTS), + "IPV6_RECVERR": ValueOf(syscall.IPV6_RECVERR), + "IPV6_RECVHOPLIMIT": ValueOf(syscall.IPV6_RECVHOPLIMIT), + "IPV6_RECVHOPOPTS": ValueOf(syscall.IPV6_RECVHOPOPTS), + "IPV6_RECVPKTINFO": ValueOf(syscall.IPV6_RECVPKTINFO), + "IPV6_RECVRTHDR": ValueOf(syscall.IPV6_RECVRTHDR), + "IPV6_RECVTCLASS": ValueOf(syscall.IPV6_RECVTCLASS), + "IPV6_ROUTER_ALERT": ValueOf(syscall.IPV6_ROUTER_ALERT), + "IPV6_RTHDR": ValueOf(syscall.IPV6_RTHDR), + "IPV6_RTHDRDSTOPTS": ValueOf(syscall.IPV6_RTHDRDSTOPTS), + "IPV6_RTHDR_LOOSE": ValueOf(syscall.IPV6_RTHDR_LOOSE), + "IPV6_RTHDR_STRICT": ValueOf(syscall.IPV6_RTHDR_STRICT), + "IPV6_RTHDR_TYPE_0": ValueOf(syscall.IPV6_RTHDR_TYPE_0), + "IPV6_RXDSTOPTS": ValueOf(syscall.IPV6_RXDSTOPTS), + "IPV6_RXHOPOPTS": ValueOf(syscall.IPV6_RXHOPOPTS), + "IPV6_TCLASS": ValueOf(syscall.IPV6_TCLASS), + "IPV6_UNICAST_HOPS": ValueOf(syscall.IPV6_UNICAST_HOPS), + "IPV6_V6ONLY": ValueOf(syscall.IPV6_V6ONLY), + "IPV6_XFRM_POLICY": ValueOf(syscall.IPV6_XFRM_POLICY), + "IP_ADD_MEMBERSHIP": ValueOf(syscall.IP_ADD_MEMBERSHIP), + "IP_ADD_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_ADD_SOURCE_MEMBERSHIP), + "IP_BLOCK_SOURCE": ValueOf(syscall.IP_BLOCK_SOURCE), + "IP_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IP_DEFAULT_MULTICAST_LOOP), + "IP_DEFAULT_MULTICAST_TTL": ValueOf(syscall.IP_DEFAULT_MULTICAST_TTL), + "IP_DF": ValueOf(syscall.IP_DF), + "IP_DROP_MEMBERSHIP": ValueOf(syscall.IP_DROP_MEMBERSHIP), + "IP_DROP_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_DROP_SOURCE_MEMBERSHIP), + "IP_FREEBIND": ValueOf(syscall.IP_FREEBIND), + "IP_HDRINCL": ValueOf(syscall.IP_HDRINCL), + "IP_IPSEC_POLICY": ValueOf(syscall.IP_IPSEC_POLICY), + "IP_MAXPACKET": ValueOf(syscall.IP_MAXPACKET), + "IP_MAX_MEMBERSHIPS": ValueOf(syscall.IP_MAX_MEMBERSHIPS), + "IP_MF": ValueOf(syscall.IP_MF), + "IP_MINTTL": ValueOf(syscall.IP_MINTTL), + "IP_MSFILTER": ValueOf(syscall.IP_MSFILTER), + "IP_MSS": ValueOf(syscall.IP_MSS), + "IP_MTU": ValueOf(syscall.IP_MTU), + "IP_MTU_DISCOVER": ValueOf(syscall.IP_MTU_DISCOVER), + "IP_MULTICAST_IF": ValueOf(syscall.IP_MULTICAST_IF), + "IP_MULTICAST_LOOP": ValueOf(syscall.IP_MULTICAST_LOOP), + "IP_MULTICAST_TTL": ValueOf(syscall.IP_MULTICAST_TTL), + "IP_OFFMASK": ValueOf(syscall.IP_OFFMASK), + "IP_OPTIONS": ValueOf(syscall.IP_OPTIONS), + "IP_ORIGDSTADDR": ValueOf(syscall.IP_ORIGDSTADDR), + "IP_PASSSEC": ValueOf(syscall.IP_PASSSEC), + "IP_PKTINFO": ValueOf(syscall.IP_PKTINFO), + "IP_PKTOPTIONS": ValueOf(syscall.IP_PKTOPTIONS), + "IP_PMTUDISC": ValueOf(syscall.IP_PMTUDISC), + "IP_PMTUDISC_DO": ValueOf(syscall.IP_PMTUDISC_DO), + "IP_PMTUDISC_DONT": ValueOf(syscall.IP_PMTUDISC_DONT), + "IP_PMTUDISC_PROBE": ValueOf(syscall.IP_PMTUDISC_PROBE), + "IP_PMTUDISC_WANT": ValueOf(syscall.IP_PMTUDISC_WANT), + "IP_RECVERR": ValueOf(syscall.IP_RECVERR), + "IP_RECVOPTS": ValueOf(syscall.IP_RECVOPTS), + "IP_RECVORIGDSTADDR": ValueOf(syscall.IP_RECVORIGDSTADDR), + "IP_RECVRETOPTS": ValueOf(syscall.IP_RECVRETOPTS), + "IP_RECVTOS": ValueOf(syscall.IP_RECVTOS), + "IP_RECVTTL": ValueOf(syscall.IP_RECVTTL), + "IP_RETOPTS": ValueOf(syscall.IP_RETOPTS), + "IP_RF": ValueOf(syscall.IP_RF), + "IP_ROUTER_ALERT": ValueOf(syscall.IP_ROUTER_ALERT), + "IP_TOS": ValueOf(syscall.IP_TOS), + "IP_TRANSPARENT": ValueOf(syscall.IP_TRANSPARENT), + "IP_TTL": ValueOf(syscall.IP_TTL), + "IP_UNBLOCK_SOURCE": ValueOf(syscall.IP_UNBLOCK_SOURCE), + "IP_XFRM_POLICY": ValueOf(syscall.IP_XFRM_POLICY), + "ISIG": ValueOf(syscall.ISIG), + "ISTRIP": ValueOf(syscall.ISTRIP), + "IUCLC": ValueOf(syscall.IUCLC), + "IUTF8": ValueOf(syscall.IUTF8), + "IXANY": ValueOf(syscall.IXANY), + "IXOFF": ValueOf(syscall.IXOFF), + "IXON": ValueOf(syscall.IXON), + "ImplementsGetwd": ValueOf(syscall.ImplementsGetwd), + "InotifyAddWatch": ValueOf(syscall.InotifyAddWatch), + "InotifyInit": ValueOf(syscall.InotifyInit), + "InotifyInit1": ValueOf(syscall.InotifyInit1), + "InotifyRmWatch": ValueOf(syscall.InotifyRmWatch), + "Ioperm": ValueOf(syscall.Ioperm), + "Iopl": ValueOf(syscall.Iopl), + "Kill": ValueOf(syscall.Kill), + "Klogctl": ValueOf(syscall.Klogctl), + "LINUX_REBOOT_CMD_CAD_OFF": ValueOf(syscall.LINUX_REBOOT_CMD_CAD_OFF), + "LINUX_REBOOT_CMD_CAD_ON": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_CAD_ON)), + "LINUX_REBOOT_CMD_HALT": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_HALT)), + "LINUX_REBOOT_CMD_KEXEC": ValueOf(syscall.LINUX_REBOOT_CMD_KEXEC), + "LINUX_REBOOT_CMD_POWER_OFF": ValueOf(syscall.LINUX_REBOOT_CMD_POWER_OFF), + "LINUX_REBOOT_CMD_RESTART": ValueOf(syscall.LINUX_REBOOT_CMD_RESTART), + "LINUX_REBOOT_CMD_RESTART2": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_RESTART2)), + "LINUX_REBOOT_CMD_SW_SUSPEND": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_SW_SUSPEND)), + "LINUX_REBOOT_MAGIC1": ValueOf(uint32(syscall.LINUX_REBOOT_MAGIC1)), + "LINUX_REBOOT_MAGIC2": ValueOf(syscall.LINUX_REBOOT_MAGIC2), + "LOCK_EX": ValueOf(syscall.LOCK_EX), + "LOCK_NB": ValueOf(syscall.LOCK_NB), + "LOCK_SH": ValueOf(syscall.LOCK_SH), + "LOCK_UN": ValueOf(syscall.LOCK_UN), + "Lchown": ValueOf(syscall.Lchown), + "Link": ValueOf(syscall.Link), + "Listen": ValueOf(syscall.Listen), + "Listxattr": ValueOf(syscall.Listxattr), + "LsfJump": ValueOf(syscall.LsfJump), + "LsfSocket": ValueOf(syscall.LsfSocket), + "LsfStmt": ValueOf(syscall.LsfStmt), + "Lstat": ValueOf(syscall.Lstat), + "MADV_DOFORK": ValueOf(syscall.MADV_DOFORK), + "MADV_DONTFORK": ValueOf(syscall.MADV_DONTFORK), + "MADV_DONTNEED": ValueOf(syscall.MADV_DONTNEED), + "MADV_HUGEPAGE": ValueOf(syscall.MADV_HUGEPAGE), + "MADV_HWPOISON": ValueOf(syscall.MADV_HWPOISON), + "MADV_MERGEABLE": ValueOf(syscall.MADV_MERGEABLE), + "MADV_NOHUGEPAGE": ValueOf(syscall.MADV_NOHUGEPAGE), + "MADV_NORMAL": ValueOf(syscall.MADV_NORMAL), + "MADV_RANDOM": ValueOf(syscall.MADV_RANDOM), + "MADV_REMOVE": ValueOf(syscall.MADV_REMOVE), + "MADV_SEQUENTIAL": ValueOf(syscall.MADV_SEQUENTIAL), + "MADV_UNMERGEABLE": ValueOf(syscall.MADV_UNMERGEABLE), + "MADV_WILLNEED": ValueOf(syscall.MADV_WILLNEED), + "MAP_32BIT": ValueOf(syscall.MAP_32BIT), + "MAP_ANON": ValueOf(syscall.MAP_ANON), + "MAP_ANONYMOUS": ValueOf(syscall.MAP_ANONYMOUS), + "MAP_DENYWRITE": ValueOf(syscall.MAP_DENYWRITE), + "MAP_EXECUTABLE": ValueOf(syscall.MAP_EXECUTABLE), + "MAP_FILE": ValueOf(syscall.MAP_FILE), + "MAP_FIXED": ValueOf(syscall.MAP_FIXED), + "MAP_GROWSDOWN": ValueOf(syscall.MAP_GROWSDOWN), + "MAP_HUGETLB": ValueOf(syscall.MAP_HUGETLB), + "MAP_LOCKED": ValueOf(syscall.MAP_LOCKED), + "MAP_NONBLOCK": ValueOf(syscall.MAP_NONBLOCK), + "MAP_NORESERVE": ValueOf(syscall.MAP_NORESERVE), + "MAP_POPULATE": ValueOf(syscall.MAP_POPULATE), + "MAP_PRIVATE": ValueOf(syscall.MAP_PRIVATE), + "MAP_SHARED": ValueOf(syscall.MAP_SHARED), + "MAP_STACK": ValueOf(syscall.MAP_STACK), + "MAP_TYPE": ValueOf(syscall.MAP_TYPE), + "MCL_CURRENT": ValueOf(syscall.MCL_CURRENT), + "MCL_FUTURE": ValueOf(syscall.MCL_FUTURE), + "MNT_DETACH": ValueOf(syscall.MNT_DETACH), + "MNT_EXPIRE": ValueOf(syscall.MNT_EXPIRE), + "MNT_FORCE": ValueOf(syscall.MNT_FORCE), + "MSG_CMSG_CLOEXEC": ValueOf(syscall.MSG_CMSG_CLOEXEC), + "MSG_CONFIRM": ValueOf(syscall.MSG_CONFIRM), + "MSG_CTRUNC": ValueOf(syscall.MSG_CTRUNC), + "MSG_DONTROUTE": ValueOf(syscall.MSG_DONTROUTE), + "MSG_DONTWAIT": ValueOf(syscall.MSG_DONTWAIT), + "MSG_EOR": ValueOf(syscall.MSG_EOR), + "MSG_ERRQUEUE": ValueOf(syscall.MSG_ERRQUEUE), + "MSG_FASTOPEN": ValueOf(syscall.MSG_FASTOPEN), + "MSG_FIN": ValueOf(syscall.MSG_FIN), + "MSG_MORE": ValueOf(syscall.MSG_MORE), + "MSG_NOSIGNAL": ValueOf(syscall.MSG_NOSIGNAL), + "MSG_OOB": ValueOf(syscall.MSG_OOB), + "MSG_PEEK": ValueOf(syscall.MSG_PEEK), + "MSG_PROXY": ValueOf(syscall.MSG_PROXY), + "MSG_RST": ValueOf(syscall.MSG_RST), + "MSG_SYN": ValueOf(syscall.MSG_SYN), + "MSG_TRUNC": ValueOf(syscall.MSG_TRUNC), + "MSG_TRYHARD": ValueOf(syscall.MSG_TRYHARD), + "MSG_WAITALL": ValueOf(syscall.MSG_WAITALL), + "MSG_WAITFORONE": ValueOf(syscall.MSG_WAITFORONE), + "MS_ACTIVE": ValueOf(syscall.MS_ACTIVE), + "MS_ASYNC": ValueOf(syscall.MS_ASYNC), + "MS_BIND": ValueOf(syscall.MS_BIND), + "MS_DIRSYNC": ValueOf(syscall.MS_DIRSYNC), + "MS_INVALIDATE": ValueOf(syscall.MS_INVALIDATE), + "MS_I_VERSION": ValueOf(syscall.MS_I_VERSION), + "MS_KERNMOUNT": ValueOf(syscall.MS_KERNMOUNT), + "MS_MANDLOCK": ValueOf(syscall.MS_MANDLOCK), + "MS_MGC_MSK": ValueOf(uint32(syscall.MS_MGC_MSK)), + "MS_MGC_VAL": ValueOf(uint32(syscall.MS_MGC_VAL)), + "MS_MOVE": ValueOf(syscall.MS_MOVE), + "MS_NOATIME": ValueOf(syscall.MS_NOATIME), + "MS_NODEV": ValueOf(syscall.MS_NODEV), + "MS_NODIRATIME": ValueOf(syscall.MS_NODIRATIME), + "MS_NOEXEC": ValueOf(syscall.MS_NOEXEC), + "MS_NOSUID": ValueOf(syscall.MS_NOSUID), + "MS_NOUSER": ValueOf(syscall.MS_NOUSER), + "MS_POSIXACL": ValueOf(syscall.MS_POSIXACL), + "MS_PRIVATE": ValueOf(syscall.MS_PRIVATE), + "MS_RDONLY": ValueOf(syscall.MS_RDONLY), + "MS_REC": ValueOf(syscall.MS_REC), + "MS_RELATIME": ValueOf(syscall.MS_RELATIME), + "MS_REMOUNT": ValueOf(syscall.MS_REMOUNT), + "MS_RMT_MASK": ValueOf(syscall.MS_RMT_MASK), + "MS_SHARED": ValueOf(syscall.MS_SHARED), + "MS_SILENT": ValueOf(syscall.MS_SILENT), + "MS_SLAVE": ValueOf(syscall.MS_SLAVE), + "MS_STRICTATIME": ValueOf(syscall.MS_STRICTATIME), + "MS_SYNC": ValueOf(syscall.MS_SYNC), + "MS_SYNCHRONOUS": ValueOf(syscall.MS_SYNCHRONOUS), + "MS_UNBINDABLE": ValueOf(syscall.MS_UNBINDABLE), + "Madvise": ValueOf(syscall.Madvise), + "Mkdir": ValueOf(syscall.Mkdir), + "Mkdirat": ValueOf(syscall.Mkdirat), + "Mkfifo": ValueOf(syscall.Mkfifo), + "Mknod": ValueOf(syscall.Mknod), + "Mknodat": ValueOf(syscall.Mknodat), + "Mlock": ValueOf(syscall.Mlock), + "Mlockall": ValueOf(syscall.Mlockall), + "Mmap": ValueOf(syscall.Mmap), + "Mount": ValueOf(syscall.Mount), + "Mprotect": ValueOf(syscall.Mprotect), + "Munlock": ValueOf(syscall.Munlock), + "Munlockall": ValueOf(syscall.Munlockall), + "Munmap": ValueOf(syscall.Munmap), + "NAME_MAX": ValueOf(syscall.NAME_MAX), + "NETLINK_ADD_MEMBERSHIP": ValueOf(syscall.NETLINK_ADD_MEMBERSHIP), + "NETLINK_AUDIT": ValueOf(syscall.NETLINK_AUDIT), + "NETLINK_BROADCAST_ERROR": ValueOf(syscall.NETLINK_BROADCAST_ERROR), + "NETLINK_CONNECTOR": ValueOf(syscall.NETLINK_CONNECTOR), + "NETLINK_DNRTMSG": ValueOf(syscall.NETLINK_DNRTMSG), + "NETLINK_DROP_MEMBERSHIP": ValueOf(syscall.NETLINK_DROP_MEMBERSHIP), + "NETLINK_ECRYPTFS": ValueOf(syscall.NETLINK_ECRYPTFS), + "NETLINK_FIB_LOOKUP": ValueOf(syscall.NETLINK_FIB_LOOKUP), + "NETLINK_FIREWALL": ValueOf(syscall.NETLINK_FIREWALL), + "NETLINK_GENERIC": ValueOf(syscall.NETLINK_GENERIC), + "NETLINK_INET_DIAG": ValueOf(syscall.NETLINK_INET_DIAG), + "NETLINK_IP6_FW": ValueOf(syscall.NETLINK_IP6_FW), + "NETLINK_ISCSI": ValueOf(syscall.NETLINK_ISCSI), + "NETLINK_KOBJECT_UEVENT": ValueOf(syscall.NETLINK_KOBJECT_UEVENT), + "NETLINK_NETFILTER": ValueOf(syscall.NETLINK_NETFILTER), + "NETLINK_NFLOG": ValueOf(syscall.NETLINK_NFLOG), + "NETLINK_NO_ENOBUFS": ValueOf(syscall.NETLINK_NO_ENOBUFS), + "NETLINK_PKTINFO": ValueOf(syscall.NETLINK_PKTINFO), + "NETLINK_ROUTE": ValueOf(syscall.NETLINK_ROUTE), + "NETLINK_SCSITRANSPORT": ValueOf(syscall.NETLINK_SCSITRANSPORT), + "NETLINK_SELINUX": ValueOf(syscall.NETLINK_SELINUX), + "NETLINK_UNUSED": ValueOf(syscall.NETLINK_UNUSED), + "NETLINK_USERSOCK": ValueOf(syscall.NETLINK_USERSOCK), + "NETLINK_XFRM": ValueOf(syscall.NETLINK_XFRM), + "NLA_ALIGNTO": ValueOf(syscall.NLA_ALIGNTO), + "NLA_F_NESTED": ValueOf(syscall.NLA_F_NESTED), + "NLA_F_NET_BYTEORDER": ValueOf(syscall.NLA_F_NET_BYTEORDER), + "NLA_HDRLEN": ValueOf(syscall.NLA_HDRLEN), + "NLMSG_ALIGNTO": ValueOf(syscall.NLMSG_ALIGNTO), + "NLMSG_DONE": ValueOf(syscall.NLMSG_DONE), + "NLMSG_ERROR": ValueOf(syscall.NLMSG_ERROR), + "NLMSG_HDRLEN": ValueOf(syscall.NLMSG_HDRLEN), + "NLMSG_MIN_TYPE": ValueOf(syscall.NLMSG_MIN_TYPE), + "NLMSG_NOOP": ValueOf(syscall.NLMSG_NOOP), + "NLMSG_OVERRUN": ValueOf(syscall.NLMSG_OVERRUN), + "NLM_F_ACK": ValueOf(syscall.NLM_F_ACK), + "NLM_F_APPEND": ValueOf(syscall.NLM_F_APPEND), + "NLM_F_ATOMIC": ValueOf(syscall.NLM_F_ATOMIC), + "NLM_F_CREATE": ValueOf(syscall.NLM_F_CREATE), + "NLM_F_DUMP": ValueOf(syscall.NLM_F_DUMP), + "NLM_F_ECHO": ValueOf(syscall.NLM_F_ECHO), + "NLM_F_EXCL": ValueOf(syscall.NLM_F_EXCL), + "NLM_F_MATCH": ValueOf(syscall.NLM_F_MATCH), + "NLM_F_MULTI": ValueOf(syscall.NLM_F_MULTI), + "NLM_F_REPLACE": ValueOf(syscall.NLM_F_REPLACE), + "NLM_F_REQUEST": ValueOf(syscall.NLM_F_REQUEST), + "NLM_F_ROOT": ValueOf(syscall.NLM_F_ROOT), + "NOFLSH": ValueOf(syscall.NOFLSH), + "Nanosleep": ValueOf(syscall.Nanosleep), + "NetlinkRIB": ValueOf(syscall.NetlinkRIB), + "NsecToTimespec": ValueOf(syscall.NsecToTimespec), + "NsecToTimeval": ValueOf(syscall.NsecToTimeval), + "OCRNL": ValueOf(syscall.OCRNL), + "OFDEL": ValueOf(syscall.OFDEL), + "OFILL": ValueOf(syscall.OFILL), + "OLCUC": ValueOf(syscall.OLCUC), + "ONLCR": ValueOf(syscall.ONLCR), + "ONLRET": ValueOf(syscall.ONLRET), + "ONOCR": ValueOf(syscall.ONOCR), + "OPOST": ValueOf(syscall.OPOST), + "O_ACCMODE": ValueOf(syscall.O_ACCMODE), + "O_APPEND": ValueOf(syscall.O_APPEND), + "O_ASYNC": ValueOf(syscall.O_ASYNC), + "O_CLOEXEC": ValueOf(syscall.O_CLOEXEC), + "O_CREAT": ValueOf(syscall.O_CREAT), + "O_DIRECT": ValueOf(syscall.O_DIRECT), + "O_DIRECTORY": ValueOf(syscall.O_DIRECTORY), + "O_DSYNC": ValueOf(syscall.O_DSYNC), + "O_EXCL": ValueOf(syscall.O_EXCL), + "O_FSYNC": ValueOf(syscall.O_FSYNC), + "O_LARGEFILE": ValueOf(syscall.O_LARGEFILE), + "O_NDELAY": ValueOf(syscall.O_NDELAY), + "O_NOATIME": ValueOf(syscall.O_NOATIME), + "O_NOCTTY": ValueOf(syscall.O_NOCTTY), + "O_NOFOLLOW": ValueOf(syscall.O_NOFOLLOW), + "O_NONBLOCK": ValueOf(syscall.O_NONBLOCK), + "O_RDONLY": ValueOf(syscall.O_RDONLY), + "O_RDWR": ValueOf(syscall.O_RDWR), + "O_RSYNC": ValueOf(syscall.O_RSYNC), + "O_SYNC": ValueOf(syscall.O_SYNC), + "O_TRUNC": ValueOf(syscall.O_TRUNC), + "O_WRONLY": ValueOf(syscall.O_WRONLY), + "Open": ValueOf(syscall.Open), + "Openat": ValueOf(syscall.Openat), + "PACKET_ADD_MEMBERSHIP": ValueOf(syscall.PACKET_ADD_MEMBERSHIP), + "PACKET_BROADCAST": ValueOf(syscall.PACKET_BROADCAST), + "PACKET_DROP_MEMBERSHIP": ValueOf(syscall.PACKET_DROP_MEMBERSHIP), + "PACKET_FASTROUTE": ValueOf(syscall.PACKET_FASTROUTE), + "PACKET_HOST": ValueOf(syscall.PACKET_HOST), + "PACKET_LOOPBACK": ValueOf(syscall.PACKET_LOOPBACK), + "PACKET_MR_ALLMULTI": ValueOf(syscall.PACKET_MR_ALLMULTI), + "PACKET_MR_MULTICAST": ValueOf(syscall.PACKET_MR_MULTICAST), + "PACKET_MR_PROMISC": ValueOf(syscall.PACKET_MR_PROMISC), + "PACKET_MULTICAST": ValueOf(syscall.PACKET_MULTICAST), + "PACKET_OTHERHOST": ValueOf(syscall.PACKET_OTHERHOST), + "PACKET_OUTGOING": ValueOf(syscall.PACKET_OUTGOING), + "PACKET_RECV_OUTPUT": ValueOf(syscall.PACKET_RECV_OUTPUT), + "PACKET_RX_RING": ValueOf(syscall.PACKET_RX_RING), + "PACKET_STATISTICS": ValueOf(syscall.PACKET_STATISTICS), + "PARENB": ValueOf(syscall.PARENB), + "PARMRK": ValueOf(syscall.PARMRK), + "PARODD": ValueOf(syscall.PARODD), + "PENDIN": ValueOf(syscall.PENDIN), + "PRIO_PGRP": ValueOf(syscall.PRIO_PGRP), + "PRIO_PROCESS": ValueOf(syscall.PRIO_PROCESS), + "PRIO_USER": ValueOf(syscall.PRIO_USER), + "PROT_EXEC": ValueOf(syscall.PROT_EXEC), + "PROT_GROWSDOWN": ValueOf(syscall.PROT_GROWSDOWN), + "PROT_GROWSUP": ValueOf(syscall.PROT_GROWSUP), + "PROT_NONE": ValueOf(syscall.PROT_NONE), + "PROT_READ": ValueOf(syscall.PROT_READ), + "PROT_WRITE": ValueOf(syscall.PROT_WRITE), + "PR_CAPBSET_DROP": ValueOf(syscall.PR_CAPBSET_DROP), + "PR_CAPBSET_READ": ValueOf(syscall.PR_CAPBSET_READ), + "PR_ENDIAN_BIG": ValueOf(syscall.PR_ENDIAN_BIG), + "PR_ENDIAN_LITTLE": ValueOf(syscall.PR_ENDIAN_LITTLE), + "PR_ENDIAN_PPC_LITTLE": ValueOf(syscall.PR_ENDIAN_PPC_LITTLE), + "PR_FPEMU_NOPRINT": ValueOf(syscall.PR_FPEMU_NOPRINT), + "PR_FPEMU_SIGFPE": ValueOf(syscall.PR_FPEMU_SIGFPE), + "PR_FP_EXC_ASYNC": ValueOf(syscall.PR_FP_EXC_ASYNC), + "PR_FP_EXC_DISABLED": ValueOf(syscall.PR_FP_EXC_DISABLED), + "PR_FP_EXC_DIV": ValueOf(syscall.PR_FP_EXC_DIV), + "PR_FP_EXC_INV": ValueOf(syscall.PR_FP_EXC_INV), + "PR_FP_EXC_NONRECOV": ValueOf(syscall.PR_FP_EXC_NONRECOV), + "PR_FP_EXC_OVF": ValueOf(syscall.PR_FP_EXC_OVF), + "PR_FP_EXC_PRECISE": ValueOf(syscall.PR_FP_EXC_PRECISE), + "PR_FP_EXC_RES": ValueOf(syscall.PR_FP_EXC_RES), + "PR_FP_EXC_SW_ENABLE": ValueOf(syscall.PR_FP_EXC_SW_ENABLE), + "PR_FP_EXC_UND": ValueOf(syscall.PR_FP_EXC_UND), + "PR_GET_DUMPABLE": ValueOf(syscall.PR_GET_DUMPABLE), + "PR_GET_ENDIAN": ValueOf(syscall.PR_GET_ENDIAN), + "PR_GET_FPEMU": ValueOf(syscall.PR_GET_FPEMU), + "PR_GET_FPEXC": ValueOf(syscall.PR_GET_FPEXC), + "PR_GET_KEEPCAPS": ValueOf(syscall.PR_GET_KEEPCAPS), + "PR_GET_NAME": ValueOf(syscall.PR_GET_NAME), + "PR_GET_PDEATHSIG": ValueOf(syscall.PR_GET_PDEATHSIG), + "PR_GET_SECCOMP": ValueOf(syscall.PR_GET_SECCOMP), + "PR_GET_SECUREBITS": ValueOf(syscall.PR_GET_SECUREBITS), + "PR_GET_TIMERSLACK": ValueOf(syscall.PR_GET_TIMERSLACK), + "PR_GET_TIMING": ValueOf(syscall.PR_GET_TIMING), + "PR_GET_TSC": ValueOf(syscall.PR_GET_TSC), + "PR_GET_UNALIGN": ValueOf(syscall.PR_GET_UNALIGN), + "PR_MCE_KILL": ValueOf(syscall.PR_MCE_KILL), + "PR_MCE_KILL_CLEAR": ValueOf(syscall.PR_MCE_KILL_CLEAR), + "PR_MCE_KILL_DEFAULT": ValueOf(syscall.PR_MCE_KILL_DEFAULT), + "PR_MCE_KILL_EARLY": ValueOf(syscall.PR_MCE_KILL_EARLY), + "PR_MCE_KILL_GET": ValueOf(syscall.PR_MCE_KILL_GET), + "PR_MCE_KILL_LATE": ValueOf(syscall.PR_MCE_KILL_LATE), + "PR_MCE_KILL_SET": ValueOf(syscall.PR_MCE_KILL_SET), + "PR_SET_DUMPABLE": ValueOf(syscall.PR_SET_DUMPABLE), + "PR_SET_ENDIAN": ValueOf(syscall.PR_SET_ENDIAN), + "PR_SET_FPEMU": ValueOf(syscall.PR_SET_FPEMU), + "PR_SET_FPEXC": ValueOf(syscall.PR_SET_FPEXC), + "PR_SET_KEEPCAPS": ValueOf(syscall.PR_SET_KEEPCAPS), + "PR_SET_NAME": ValueOf(syscall.PR_SET_NAME), + "PR_SET_PDEATHSIG": ValueOf(syscall.PR_SET_PDEATHSIG), + "PR_SET_PTRACER": ValueOf(syscall.PR_SET_PTRACER), + "PR_SET_SECCOMP": ValueOf(syscall.PR_SET_SECCOMP), + "PR_SET_SECUREBITS": ValueOf(syscall.PR_SET_SECUREBITS), + "PR_SET_TIMERSLACK": ValueOf(syscall.PR_SET_TIMERSLACK), + "PR_SET_TIMING": ValueOf(syscall.PR_SET_TIMING), + "PR_SET_TSC": ValueOf(syscall.PR_SET_TSC), + "PR_SET_UNALIGN": ValueOf(syscall.PR_SET_UNALIGN), + "PR_TASK_PERF_EVENTS_DISABLE": ValueOf(syscall.PR_TASK_PERF_EVENTS_DISABLE), + "PR_TASK_PERF_EVENTS_ENABLE": ValueOf(syscall.PR_TASK_PERF_EVENTS_ENABLE), + "PR_TIMING_STATISTICAL": ValueOf(syscall.PR_TIMING_STATISTICAL), + "PR_TIMING_TIMESTAMP": ValueOf(syscall.PR_TIMING_TIMESTAMP), + "PR_TSC_ENABLE": ValueOf(syscall.PR_TSC_ENABLE), + "PR_TSC_SIGSEGV": ValueOf(syscall.PR_TSC_SIGSEGV), + "PR_UNALIGN_NOPRINT": ValueOf(syscall.PR_UNALIGN_NOPRINT), + "PR_UNALIGN_SIGBUS": ValueOf(syscall.PR_UNALIGN_SIGBUS), + "PTRACE_ATTACH": ValueOf(syscall.PTRACE_ATTACH), + "PTRACE_CONT": ValueOf(syscall.PTRACE_CONT), + "PTRACE_DETACH": ValueOf(syscall.PTRACE_DETACH), + "PTRACE_EVENT_CLONE": ValueOf(syscall.PTRACE_EVENT_CLONE), + "PTRACE_EVENT_EXEC": ValueOf(syscall.PTRACE_EVENT_EXEC), + "PTRACE_EVENT_EXIT": ValueOf(syscall.PTRACE_EVENT_EXIT), + "PTRACE_EVENT_FORK": ValueOf(syscall.PTRACE_EVENT_FORK), + "PTRACE_EVENT_VFORK": ValueOf(syscall.PTRACE_EVENT_VFORK), + "PTRACE_EVENT_VFORK_DONE": ValueOf(syscall.PTRACE_EVENT_VFORK_DONE), + "PTRACE_GETEVENTMSG": ValueOf(syscall.PTRACE_GETEVENTMSG), + "PTRACE_GETFPREGS": ValueOf(syscall.PTRACE_GETFPREGS), + "PTRACE_GETFPXREGS": ValueOf(syscall.PTRACE_GETFPXREGS), + "PTRACE_GETREGS": ValueOf(syscall.PTRACE_GETREGS), + "PTRACE_GETREGSET": ValueOf(syscall.PTRACE_GETREGSET), + "PTRACE_GETSIGINFO": ValueOf(syscall.PTRACE_GETSIGINFO), + "PTRACE_GET_THREAD_AREA": ValueOf(syscall.PTRACE_GET_THREAD_AREA), + "PTRACE_KILL": ValueOf(syscall.PTRACE_KILL), + "PTRACE_OLDSETOPTIONS": ValueOf(syscall.PTRACE_OLDSETOPTIONS), + "PTRACE_O_MASK": ValueOf(syscall.PTRACE_O_MASK), + "PTRACE_O_TRACECLONE": ValueOf(syscall.PTRACE_O_TRACECLONE), + "PTRACE_O_TRACEEXEC": ValueOf(syscall.PTRACE_O_TRACEEXEC), + "PTRACE_O_TRACEEXIT": ValueOf(syscall.PTRACE_O_TRACEEXIT), + "PTRACE_O_TRACEFORK": ValueOf(syscall.PTRACE_O_TRACEFORK), + "PTRACE_O_TRACESYSGOOD": ValueOf(syscall.PTRACE_O_TRACESYSGOOD), + "PTRACE_O_TRACEVFORK": ValueOf(syscall.PTRACE_O_TRACEVFORK), + "PTRACE_O_TRACEVFORKDONE": ValueOf(syscall.PTRACE_O_TRACEVFORKDONE), + "PTRACE_PEEKDATA": ValueOf(syscall.PTRACE_PEEKDATA), + "PTRACE_PEEKTEXT": ValueOf(syscall.PTRACE_PEEKTEXT), + "PTRACE_PEEKUSR": ValueOf(syscall.PTRACE_PEEKUSR), + "PTRACE_POKEDATA": ValueOf(syscall.PTRACE_POKEDATA), + "PTRACE_POKETEXT": ValueOf(syscall.PTRACE_POKETEXT), + "PTRACE_POKEUSR": ValueOf(syscall.PTRACE_POKEUSR), + "PTRACE_SETFPREGS": ValueOf(syscall.PTRACE_SETFPREGS), + "PTRACE_SETFPXREGS": ValueOf(syscall.PTRACE_SETFPXREGS), + "PTRACE_SETOPTIONS": ValueOf(syscall.PTRACE_SETOPTIONS), + "PTRACE_SETREGS": ValueOf(syscall.PTRACE_SETREGS), + "PTRACE_SETREGSET": ValueOf(syscall.PTRACE_SETREGSET), + "PTRACE_SETSIGINFO": ValueOf(syscall.PTRACE_SETSIGINFO), + "PTRACE_SET_THREAD_AREA": ValueOf(syscall.PTRACE_SET_THREAD_AREA), + "PTRACE_SINGLEBLOCK": ValueOf(syscall.PTRACE_SINGLEBLOCK), + "PTRACE_SINGLESTEP": ValueOf(syscall.PTRACE_SINGLESTEP), + "PTRACE_SYSCALL": ValueOf(syscall.PTRACE_SYSCALL), + "PTRACE_SYSEMU": ValueOf(syscall.PTRACE_SYSEMU), + "PTRACE_SYSEMU_SINGLESTEP": ValueOf(syscall.PTRACE_SYSEMU_SINGLESTEP), + "PTRACE_TRACEME": ValueOf(syscall.PTRACE_TRACEME), + "ParseDirent": ValueOf(syscall.ParseDirent), + "ParseNetlinkMessage": ValueOf(syscall.ParseNetlinkMessage), + "ParseNetlinkRouteAttr": ValueOf(syscall.ParseNetlinkRouteAttr), + "ParseSocketControlMessage": ValueOf(syscall.ParseSocketControlMessage), + "ParseUnixCredentials": ValueOf(syscall.ParseUnixCredentials), + "ParseUnixRights": ValueOf(syscall.ParseUnixRights), + "PathMax": ValueOf(syscall.PathMax), + "Pause": ValueOf(syscall.Pause), + "Pipe": ValueOf(syscall.Pipe), + "Pipe2": ValueOf(syscall.Pipe2), + "PivotRoot": ValueOf(syscall.PivotRoot), + "Pread": ValueOf(syscall.Pread), + "PtraceAttach": ValueOf(syscall.PtraceAttach), + "PtraceCont": ValueOf(syscall.PtraceCont), + "PtraceDetach": ValueOf(syscall.PtraceDetach), + "PtraceGetEventMsg": ValueOf(syscall.PtraceGetEventMsg), + "PtraceGetRegs": ValueOf(syscall.PtraceGetRegs), + "PtracePeekData": ValueOf(syscall.PtracePeekData), + "PtracePeekText": ValueOf(syscall.PtracePeekText), + "PtracePokeData": ValueOf(syscall.PtracePokeData), + "PtracePokeText": ValueOf(syscall.PtracePokeText), + "PtraceSetOptions": ValueOf(syscall.PtraceSetOptions), + "PtraceSetRegs": ValueOf(syscall.PtraceSetRegs), + "PtraceSingleStep": ValueOf(syscall.PtraceSingleStep), + "PtraceSyscall": ValueOf(syscall.PtraceSyscall), + "Pwrite": ValueOf(syscall.Pwrite), + "RLIMIT_AS": ValueOf(syscall.RLIMIT_AS), + "RLIMIT_CORE": ValueOf(syscall.RLIMIT_CORE), + "RLIMIT_CPU": ValueOf(syscall.RLIMIT_CPU), + "RLIMIT_DATA": ValueOf(syscall.RLIMIT_DATA), + "RLIMIT_FSIZE": ValueOf(syscall.RLIMIT_FSIZE), + "RLIMIT_NOFILE": ValueOf(syscall.RLIMIT_NOFILE), + "RLIMIT_STACK": ValueOf(syscall.RLIMIT_STACK), + "RLIM_INFINITY": ValueOf(syscall.RLIM_INFINITY), + "RTAX_ADVMSS": ValueOf(syscall.RTAX_ADVMSS), + "RTAX_CWND": ValueOf(syscall.RTAX_CWND), + "RTAX_FEATURES": ValueOf(syscall.RTAX_FEATURES), + "RTAX_FEATURE_ALLFRAG": ValueOf(syscall.RTAX_FEATURE_ALLFRAG), + "RTAX_FEATURE_ECN": ValueOf(syscall.RTAX_FEATURE_ECN), + "RTAX_FEATURE_SACK": ValueOf(syscall.RTAX_FEATURE_SACK), + "RTAX_FEATURE_TIMESTAMP": ValueOf(syscall.RTAX_FEATURE_TIMESTAMP), + "RTAX_HOPLIMIT": ValueOf(syscall.RTAX_HOPLIMIT), + "RTAX_INITCWND": ValueOf(syscall.RTAX_INITCWND), + "RTAX_INITRWND": ValueOf(syscall.RTAX_INITRWND), + "RTAX_LOCK": ValueOf(syscall.RTAX_LOCK), + "RTAX_MAX": ValueOf(syscall.RTAX_MAX), + "RTAX_MTU": ValueOf(syscall.RTAX_MTU), + "RTAX_REORDERING": ValueOf(syscall.RTAX_REORDERING), + "RTAX_RTO_MIN": ValueOf(syscall.RTAX_RTO_MIN), + "RTAX_RTT": ValueOf(syscall.RTAX_RTT), + "RTAX_RTTVAR": ValueOf(syscall.RTAX_RTTVAR), + "RTAX_SSTHRESH": ValueOf(syscall.RTAX_SSTHRESH), + "RTAX_UNSPEC": ValueOf(syscall.RTAX_UNSPEC), + "RTAX_WINDOW": ValueOf(syscall.RTAX_WINDOW), + "RTA_ALIGNTO": ValueOf(syscall.RTA_ALIGNTO), + "RTA_CACHEINFO": ValueOf(syscall.RTA_CACHEINFO), + "RTA_DST": ValueOf(syscall.RTA_DST), + "RTA_FLOW": ValueOf(syscall.RTA_FLOW), + "RTA_GATEWAY": ValueOf(syscall.RTA_GATEWAY), + "RTA_IIF": ValueOf(syscall.RTA_IIF), + "RTA_MAX": ValueOf(syscall.RTA_MAX), + "RTA_METRICS": ValueOf(syscall.RTA_METRICS), + "RTA_MULTIPATH": ValueOf(syscall.RTA_MULTIPATH), + "RTA_OIF": ValueOf(syscall.RTA_OIF), + "RTA_PREFSRC": ValueOf(syscall.RTA_PREFSRC), + "RTA_PRIORITY": ValueOf(syscall.RTA_PRIORITY), + "RTA_SRC": ValueOf(syscall.RTA_SRC), + "RTA_TABLE": ValueOf(syscall.RTA_TABLE), + "RTA_UNSPEC": ValueOf(syscall.RTA_UNSPEC), + "RTCF_DIRECTSRC": ValueOf(syscall.RTCF_DIRECTSRC), + "RTCF_DOREDIRECT": ValueOf(syscall.RTCF_DOREDIRECT), + "RTCF_LOG": ValueOf(syscall.RTCF_LOG), + "RTCF_MASQ": ValueOf(syscall.RTCF_MASQ), + "RTCF_NAT": ValueOf(syscall.RTCF_NAT), + "RTCF_VALVE": ValueOf(syscall.RTCF_VALVE), + "RTF_ADDRCLASSMASK": ValueOf(uint32(syscall.RTF_ADDRCLASSMASK)), + "RTF_ADDRCONF": ValueOf(syscall.RTF_ADDRCONF), + "RTF_ALLONLINK": ValueOf(syscall.RTF_ALLONLINK), + "RTF_BROADCAST": ValueOf(syscall.RTF_BROADCAST), + "RTF_CACHE": ValueOf(syscall.RTF_CACHE), + "RTF_DEFAULT": ValueOf(syscall.RTF_DEFAULT), + "RTF_DYNAMIC": ValueOf(syscall.RTF_DYNAMIC), + "RTF_FLOW": ValueOf(syscall.RTF_FLOW), + "RTF_GATEWAY": ValueOf(syscall.RTF_GATEWAY), + "RTF_HOST": ValueOf(syscall.RTF_HOST), + "RTF_INTERFACE": ValueOf(syscall.RTF_INTERFACE), + "RTF_IRTT": ValueOf(syscall.RTF_IRTT), + "RTF_LINKRT": ValueOf(syscall.RTF_LINKRT), + "RTF_LOCAL": ValueOf(uint32(syscall.RTF_LOCAL)), + "RTF_MODIFIED": ValueOf(syscall.RTF_MODIFIED), + "RTF_MSS": ValueOf(syscall.RTF_MSS), + "RTF_MTU": ValueOf(syscall.RTF_MTU), + "RTF_MULTICAST": ValueOf(syscall.RTF_MULTICAST), + "RTF_NAT": ValueOf(syscall.RTF_NAT), + "RTF_NOFORWARD": ValueOf(syscall.RTF_NOFORWARD), + "RTF_NONEXTHOP": ValueOf(syscall.RTF_NONEXTHOP), + "RTF_NOPMTUDISC": ValueOf(syscall.RTF_NOPMTUDISC), + "RTF_POLICY": ValueOf(syscall.RTF_POLICY), + "RTF_REINSTATE": ValueOf(syscall.RTF_REINSTATE), + "RTF_REJECT": ValueOf(syscall.RTF_REJECT), + "RTF_STATIC": ValueOf(syscall.RTF_STATIC), + "RTF_THROW": ValueOf(syscall.RTF_THROW), + "RTF_UP": ValueOf(syscall.RTF_UP), + "RTF_WINDOW": ValueOf(syscall.RTF_WINDOW), + "RTF_XRESOLVE": ValueOf(syscall.RTF_XRESOLVE), + "RTM_BASE": ValueOf(syscall.RTM_BASE), + "RTM_DELACTION": ValueOf(syscall.RTM_DELACTION), + "RTM_DELADDR": ValueOf(syscall.RTM_DELADDR), + "RTM_DELADDRLABEL": ValueOf(syscall.RTM_DELADDRLABEL), + "RTM_DELLINK": ValueOf(syscall.RTM_DELLINK), + "RTM_DELNEIGH": ValueOf(syscall.RTM_DELNEIGH), + "RTM_DELQDISC": ValueOf(syscall.RTM_DELQDISC), + "RTM_DELROUTE": ValueOf(syscall.RTM_DELROUTE), + "RTM_DELRULE": ValueOf(syscall.RTM_DELRULE), + "RTM_DELTCLASS": ValueOf(syscall.RTM_DELTCLASS), + "RTM_DELTFILTER": ValueOf(syscall.RTM_DELTFILTER), + "RTM_F_CLONED": ValueOf(syscall.RTM_F_CLONED), + "RTM_F_EQUALIZE": ValueOf(syscall.RTM_F_EQUALIZE), + "RTM_F_NOTIFY": ValueOf(syscall.RTM_F_NOTIFY), + "RTM_F_PREFIX": ValueOf(syscall.RTM_F_PREFIX), + "RTM_GETACTION": ValueOf(syscall.RTM_GETACTION), + "RTM_GETADDR": ValueOf(syscall.RTM_GETADDR), + "RTM_GETADDRLABEL": ValueOf(syscall.RTM_GETADDRLABEL), + "RTM_GETANYCAST": ValueOf(syscall.RTM_GETANYCAST), + "RTM_GETDCB": ValueOf(syscall.RTM_GETDCB), + "RTM_GETLINK": ValueOf(syscall.RTM_GETLINK), + "RTM_GETMULTICAST": ValueOf(syscall.RTM_GETMULTICAST), + "RTM_GETNEIGH": ValueOf(syscall.RTM_GETNEIGH), + "RTM_GETNEIGHTBL": ValueOf(syscall.RTM_GETNEIGHTBL), + "RTM_GETQDISC": ValueOf(syscall.RTM_GETQDISC), + "RTM_GETROUTE": ValueOf(syscall.RTM_GETROUTE), + "RTM_GETRULE": ValueOf(syscall.RTM_GETRULE), + "RTM_GETTCLASS": ValueOf(syscall.RTM_GETTCLASS), + "RTM_GETTFILTER": ValueOf(syscall.RTM_GETTFILTER), + "RTM_MAX": ValueOf(syscall.RTM_MAX), + "RTM_NEWACTION": ValueOf(syscall.RTM_NEWACTION), + "RTM_NEWADDR": ValueOf(syscall.RTM_NEWADDR), + "RTM_NEWADDRLABEL": ValueOf(syscall.RTM_NEWADDRLABEL), + "RTM_NEWLINK": ValueOf(syscall.RTM_NEWLINK), + "RTM_NEWNDUSEROPT": ValueOf(syscall.RTM_NEWNDUSEROPT), + "RTM_NEWNEIGH": ValueOf(syscall.RTM_NEWNEIGH), + "RTM_NEWNEIGHTBL": ValueOf(syscall.RTM_NEWNEIGHTBL), + "RTM_NEWPREFIX": ValueOf(syscall.RTM_NEWPREFIX), + "RTM_NEWQDISC": ValueOf(syscall.RTM_NEWQDISC), + "RTM_NEWROUTE": ValueOf(syscall.RTM_NEWROUTE), + "RTM_NEWRULE": ValueOf(syscall.RTM_NEWRULE), + "RTM_NEWTCLASS": ValueOf(syscall.RTM_NEWTCLASS), + "RTM_NEWTFILTER": ValueOf(syscall.RTM_NEWTFILTER), + "RTM_NR_FAMILIES": ValueOf(syscall.RTM_NR_FAMILIES), + "RTM_NR_MSGTYPES": ValueOf(syscall.RTM_NR_MSGTYPES), + "RTM_SETDCB": ValueOf(syscall.RTM_SETDCB), + "RTM_SETLINK": ValueOf(syscall.RTM_SETLINK), + "RTM_SETNEIGHTBL": ValueOf(syscall.RTM_SETNEIGHTBL), + "RTNH_ALIGNTO": ValueOf(syscall.RTNH_ALIGNTO), + "RTNH_F_DEAD": ValueOf(syscall.RTNH_F_DEAD), + "RTNH_F_ONLINK": ValueOf(syscall.RTNH_F_ONLINK), + "RTNH_F_PERVASIVE": ValueOf(syscall.RTNH_F_PERVASIVE), + "RTNLGRP_IPV4_IFADDR": ValueOf(syscall.RTNLGRP_IPV4_IFADDR), + "RTNLGRP_IPV4_MROUTE": ValueOf(syscall.RTNLGRP_IPV4_MROUTE), + "RTNLGRP_IPV4_ROUTE": ValueOf(syscall.RTNLGRP_IPV4_ROUTE), + "RTNLGRP_IPV4_RULE": ValueOf(syscall.RTNLGRP_IPV4_RULE), + "RTNLGRP_IPV6_IFADDR": ValueOf(syscall.RTNLGRP_IPV6_IFADDR), + "RTNLGRP_IPV6_IFINFO": ValueOf(syscall.RTNLGRP_IPV6_IFINFO), + "RTNLGRP_IPV6_MROUTE": ValueOf(syscall.RTNLGRP_IPV6_MROUTE), + "RTNLGRP_IPV6_PREFIX": ValueOf(syscall.RTNLGRP_IPV6_PREFIX), + "RTNLGRP_IPV6_ROUTE": ValueOf(syscall.RTNLGRP_IPV6_ROUTE), + "RTNLGRP_IPV6_RULE": ValueOf(syscall.RTNLGRP_IPV6_RULE), + "RTNLGRP_LINK": ValueOf(syscall.RTNLGRP_LINK), + "RTNLGRP_ND_USEROPT": ValueOf(syscall.RTNLGRP_ND_USEROPT), + "RTNLGRP_NEIGH": ValueOf(syscall.RTNLGRP_NEIGH), + "RTNLGRP_NONE": ValueOf(syscall.RTNLGRP_NONE), + "RTNLGRP_NOTIFY": ValueOf(syscall.RTNLGRP_NOTIFY), + "RTNLGRP_TC": ValueOf(syscall.RTNLGRP_TC), + "RTN_ANYCAST": ValueOf(syscall.RTN_ANYCAST), + "RTN_BLACKHOLE": ValueOf(syscall.RTN_BLACKHOLE), + "RTN_BROADCAST": ValueOf(syscall.RTN_BROADCAST), + "RTN_LOCAL": ValueOf(syscall.RTN_LOCAL), + "RTN_MAX": ValueOf(syscall.RTN_MAX), + "RTN_MULTICAST": ValueOf(syscall.RTN_MULTICAST), + "RTN_NAT": ValueOf(syscall.RTN_NAT), + "RTN_PROHIBIT": ValueOf(syscall.RTN_PROHIBIT), + "RTN_THROW": ValueOf(syscall.RTN_THROW), + "RTN_UNICAST": ValueOf(syscall.RTN_UNICAST), + "RTN_UNREACHABLE": ValueOf(syscall.RTN_UNREACHABLE), + "RTN_UNSPEC": ValueOf(syscall.RTN_UNSPEC), + "RTN_XRESOLVE": ValueOf(syscall.RTN_XRESOLVE), + "RTPROT_BIRD": ValueOf(syscall.RTPROT_BIRD), + "RTPROT_BOOT": ValueOf(syscall.RTPROT_BOOT), + "RTPROT_DHCP": ValueOf(syscall.RTPROT_DHCP), + "RTPROT_DNROUTED": ValueOf(syscall.RTPROT_DNROUTED), + "RTPROT_GATED": ValueOf(syscall.RTPROT_GATED), + "RTPROT_KERNEL": ValueOf(syscall.RTPROT_KERNEL), + "RTPROT_MRT": ValueOf(syscall.RTPROT_MRT), + "RTPROT_NTK": ValueOf(syscall.RTPROT_NTK), + "RTPROT_RA": ValueOf(syscall.RTPROT_RA), + "RTPROT_REDIRECT": ValueOf(syscall.RTPROT_REDIRECT), + "RTPROT_STATIC": ValueOf(syscall.RTPROT_STATIC), + "RTPROT_UNSPEC": ValueOf(syscall.RTPROT_UNSPEC), + "RTPROT_XORP": ValueOf(syscall.RTPROT_XORP), + "RTPROT_ZEBRA": ValueOf(syscall.RTPROT_ZEBRA), + "RT_CLASS_DEFAULT": ValueOf(syscall.RT_CLASS_DEFAULT), + "RT_CLASS_LOCAL": ValueOf(syscall.RT_CLASS_LOCAL), + "RT_CLASS_MAIN": ValueOf(syscall.RT_CLASS_MAIN), + "RT_CLASS_MAX": ValueOf(syscall.RT_CLASS_MAX), + "RT_CLASS_UNSPEC": ValueOf(syscall.RT_CLASS_UNSPEC), + "RT_SCOPE_HOST": ValueOf(syscall.RT_SCOPE_HOST), + "RT_SCOPE_LINK": ValueOf(syscall.RT_SCOPE_LINK), + "RT_SCOPE_NOWHERE": ValueOf(syscall.RT_SCOPE_NOWHERE), + "RT_SCOPE_SITE": ValueOf(syscall.RT_SCOPE_SITE), + "RT_SCOPE_UNIVERSE": ValueOf(syscall.RT_SCOPE_UNIVERSE), + "RT_TABLE_COMPAT": ValueOf(syscall.RT_TABLE_COMPAT), + "RT_TABLE_DEFAULT": ValueOf(syscall.RT_TABLE_DEFAULT), + "RT_TABLE_LOCAL": ValueOf(syscall.RT_TABLE_LOCAL), + "RT_TABLE_MAIN": ValueOf(syscall.RT_TABLE_MAIN), + "RT_TABLE_MAX": ValueOf(uint32(syscall.RT_TABLE_MAX)), + "RT_TABLE_UNSPEC": ValueOf(syscall.RT_TABLE_UNSPEC), + "RUSAGE_CHILDREN": ValueOf(syscall.RUSAGE_CHILDREN), + "RUSAGE_SELF": ValueOf(syscall.RUSAGE_SELF), + "RUSAGE_THREAD": ValueOf(syscall.RUSAGE_THREAD), + "RawSyscall": ValueOf(syscall.RawSyscall), + "RawSyscall6": ValueOf(syscall.RawSyscall6), + "Read": ValueOf(syscall.Read), + "ReadDirent": ValueOf(syscall.ReadDirent), + "Readlink": ValueOf(syscall.Readlink), + "Reboot": ValueOf(syscall.Reboot), + "Recvfrom": ValueOf(syscall.Recvfrom), + "Recvmsg": ValueOf(syscall.Recvmsg), + "Removexattr": ValueOf(syscall.Removexattr), + "Rename": ValueOf(syscall.Rename), + "Renameat": ValueOf(syscall.Renameat), + "Rmdir": ValueOf(syscall.Rmdir), + "SCM_CREDENTIALS": ValueOf(syscall.SCM_CREDENTIALS), + "SCM_RIGHTS": ValueOf(syscall.SCM_RIGHTS), + "SCM_TIMESTAMP": ValueOf(syscall.SCM_TIMESTAMP), + "SCM_TIMESTAMPING": ValueOf(syscall.SCM_TIMESTAMPING), + "SCM_TIMESTAMPNS": ValueOf(syscall.SCM_TIMESTAMPNS), + "SHUT_RD": ValueOf(syscall.SHUT_RD), + "SHUT_RDWR": ValueOf(syscall.SHUT_RDWR), + "SHUT_WR": ValueOf(syscall.SHUT_WR), + "SIGABRT": ValueOf(syscall.SIGABRT), + "SIGALRM": ValueOf(syscall.SIGALRM), + "SIGBUS": ValueOf(syscall.SIGBUS), + "SIGCHLD": ValueOf(syscall.SIGCHLD), + "SIGCLD": ValueOf(syscall.SIGCLD), + "SIGCONT": ValueOf(syscall.SIGCONT), + "SIGFPE": ValueOf(syscall.SIGFPE), + "SIGHUP": ValueOf(syscall.SIGHUP), + "SIGILL": ValueOf(syscall.SIGILL), + "SIGINT": ValueOf(syscall.SIGINT), + "SIGIO": ValueOf(syscall.SIGIO), + "SIGIOT": ValueOf(syscall.SIGIOT), + "SIGKILL": ValueOf(syscall.SIGKILL), + "SIGPIPE": ValueOf(syscall.SIGPIPE), + "SIGPOLL": ValueOf(syscall.SIGPOLL), + "SIGPROF": ValueOf(syscall.SIGPROF), + "SIGPWR": ValueOf(syscall.SIGPWR), + "SIGQUIT": ValueOf(syscall.SIGQUIT), + "SIGSEGV": ValueOf(syscall.SIGSEGV), + "SIGSTKFLT": ValueOf(syscall.SIGSTKFLT), + "SIGSTOP": ValueOf(syscall.SIGSTOP), + "SIGSYS": ValueOf(syscall.SIGSYS), + "SIGTERM": ValueOf(syscall.SIGTERM), + "SIGTRAP": ValueOf(syscall.SIGTRAP), + "SIGTSTP": ValueOf(syscall.SIGTSTP), + "SIGTTIN": ValueOf(syscall.SIGTTIN), + "SIGTTOU": ValueOf(syscall.SIGTTOU), + "SIGUNUSED": ValueOf(syscall.SIGUNUSED), + "SIGURG": ValueOf(syscall.SIGURG), + "SIGUSR1": ValueOf(syscall.SIGUSR1), + "SIGUSR2": ValueOf(syscall.SIGUSR2), + "SIGVTALRM": ValueOf(syscall.SIGVTALRM), + "SIGWINCH": ValueOf(syscall.SIGWINCH), + "SIGXCPU": ValueOf(syscall.SIGXCPU), + "SIGXFSZ": ValueOf(syscall.SIGXFSZ), + "SIOCADDDLCI": ValueOf(syscall.SIOCADDDLCI), + "SIOCADDMULTI": ValueOf(syscall.SIOCADDMULTI), + "SIOCADDRT": ValueOf(syscall.SIOCADDRT), + "SIOCATMARK": ValueOf(syscall.SIOCATMARK), + "SIOCDARP": ValueOf(syscall.SIOCDARP), + "SIOCDELDLCI": ValueOf(syscall.SIOCDELDLCI), + "SIOCDELMULTI": ValueOf(syscall.SIOCDELMULTI), + "SIOCDELRT": ValueOf(syscall.SIOCDELRT), + "SIOCDEVPRIVATE": ValueOf(syscall.SIOCDEVPRIVATE), + "SIOCDIFADDR": ValueOf(syscall.SIOCDIFADDR), + "SIOCDRARP": ValueOf(syscall.SIOCDRARP), + "SIOCGARP": ValueOf(syscall.SIOCGARP), + "SIOCGIFADDR": ValueOf(syscall.SIOCGIFADDR), + "SIOCGIFBR": ValueOf(syscall.SIOCGIFBR), + "SIOCGIFBRDADDR": ValueOf(syscall.SIOCGIFBRDADDR), + "SIOCGIFCONF": ValueOf(syscall.SIOCGIFCONF), + "SIOCGIFCOUNT": ValueOf(syscall.SIOCGIFCOUNT), + "SIOCGIFDSTADDR": ValueOf(syscall.SIOCGIFDSTADDR), + "SIOCGIFENCAP": ValueOf(syscall.SIOCGIFENCAP), + "SIOCGIFFLAGS": ValueOf(syscall.SIOCGIFFLAGS), + "SIOCGIFHWADDR": ValueOf(syscall.SIOCGIFHWADDR), + "SIOCGIFINDEX": ValueOf(syscall.SIOCGIFINDEX), + "SIOCGIFMAP": ValueOf(syscall.SIOCGIFMAP), + "SIOCGIFMEM": ValueOf(syscall.SIOCGIFMEM), + "SIOCGIFMETRIC": ValueOf(syscall.SIOCGIFMETRIC), + "SIOCGIFMTU": ValueOf(syscall.SIOCGIFMTU), + "SIOCGIFNAME": ValueOf(syscall.SIOCGIFNAME), + "SIOCGIFNETMASK": ValueOf(syscall.SIOCGIFNETMASK), + "SIOCGIFPFLAGS": ValueOf(syscall.SIOCGIFPFLAGS), + "SIOCGIFSLAVE": ValueOf(syscall.SIOCGIFSLAVE), + "SIOCGIFTXQLEN": ValueOf(syscall.SIOCGIFTXQLEN), + "SIOCGPGRP": ValueOf(syscall.SIOCGPGRP), + "SIOCGRARP": ValueOf(syscall.SIOCGRARP), + "SIOCGSTAMP": ValueOf(syscall.SIOCGSTAMP), + "SIOCGSTAMPNS": ValueOf(syscall.SIOCGSTAMPNS), + "SIOCPROTOPRIVATE": ValueOf(syscall.SIOCPROTOPRIVATE), + "SIOCRTMSG": ValueOf(syscall.SIOCRTMSG), + "SIOCSARP": ValueOf(syscall.SIOCSARP), + "SIOCSIFADDR": ValueOf(syscall.SIOCSIFADDR), + "SIOCSIFBR": ValueOf(syscall.SIOCSIFBR), + "SIOCSIFBRDADDR": ValueOf(syscall.SIOCSIFBRDADDR), + "SIOCSIFDSTADDR": ValueOf(syscall.SIOCSIFDSTADDR), + "SIOCSIFENCAP": ValueOf(syscall.SIOCSIFENCAP), + "SIOCSIFFLAGS": ValueOf(syscall.SIOCSIFFLAGS), + "SIOCSIFHWADDR": ValueOf(syscall.SIOCSIFHWADDR), + "SIOCSIFHWBROADCAST": ValueOf(syscall.SIOCSIFHWBROADCAST), + "SIOCSIFLINK": ValueOf(syscall.SIOCSIFLINK), + "SIOCSIFMAP": ValueOf(syscall.SIOCSIFMAP), + "SIOCSIFMEM": ValueOf(syscall.SIOCSIFMEM), + "SIOCSIFMETRIC": ValueOf(syscall.SIOCSIFMETRIC), + "SIOCSIFMTU": ValueOf(syscall.SIOCSIFMTU), + "SIOCSIFNAME": ValueOf(syscall.SIOCSIFNAME), + "SIOCSIFNETMASK": ValueOf(syscall.SIOCSIFNETMASK), + "SIOCSIFPFLAGS": ValueOf(syscall.SIOCSIFPFLAGS), + "SIOCSIFSLAVE": ValueOf(syscall.SIOCSIFSLAVE), + "SIOCSIFTXQLEN": ValueOf(syscall.SIOCSIFTXQLEN), + "SIOCSPGRP": ValueOf(syscall.SIOCSPGRP), + "SIOCSRARP": ValueOf(syscall.SIOCSRARP), + "SOCK_CLOEXEC": ValueOf(syscall.SOCK_CLOEXEC), + "SOCK_DCCP": ValueOf(syscall.SOCK_DCCP), + "SOCK_DGRAM": ValueOf(syscall.SOCK_DGRAM), + "SOCK_NONBLOCK": ValueOf(syscall.SOCK_NONBLOCK), + "SOCK_PACKET": ValueOf(syscall.SOCK_PACKET), + "SOCK_RAW": ValueOf(syscall.SOCK_RAW), + "SOCK_RDM": ValueOf(syscall.SOCK_RDM), + "SOCK_SEQPACKET": ValueOf(syscall.SOCK_SEQPACKET), + "SOCK_STREAM": ValueOf(syscall.SOCK_STREAM), + "SOL_AAL": ValueOf(syscall.SOL_AAL), + "SOL_ATM": ValueOf(syscall.SOL_ATM), + "SOL_DECNET": ValueOf(syscall.SOL_DECNET), + "SOL_ICMPV6": ValueOf(syscall.SOL_ICMPV6), + "SOL_IP": ValueOf(syscall.SOL_IP), + "SOL_IPV6": ValueOf(syscall.SOL_IPV6), + "SOL_IRDA": ValueOf(syscall.SOL_IRDA), + "SOL_PACKET": ValueOf(syscall.SOL_PACKET), + "SOL_RAW": ValueOf(syscall.SOL_RAW), + "SOL_SOCKET": ValueOf(syscall.SOL_SOCKET), + "SOL_TCP": ValueOf(syscall.SOL_TCP), + "SOL_X25": ValueOf(syscall.SOL_X25), + "SOMAXCONN": ValueOf(syscall.SOMAXCONN), + "SO_ACCEPTCONN": ValueOf(syscall.SO_ACCEPTCONN), + "SO_ATTACH_FILTER": ValueOf(syscall.SO_ATTACH_FILTER), + "SO_BINDTODEVICE": ValueOf(syscall.SO_BINDTODEVICE), + "SO_BROADCAST": ValueOf(syscall.SO_BROADCAST), + "SO_BSDCOMPAT": ValueOf(syscall.SO_BSDCOMPAT), + "SO_DEBUG": ValueOf(syscall.SO_DEBUG), + "SO_DETACH_FILTER": ValueOf(syscall.SO_DETACH_FILTER), + "SO_DOMAIN": ValueOf(syscall.SO_DOMAIN), + "SO_DONTROUTE": ValueOf(syscall.SO_DONTROUTE), + "SO_ERROR": ValueOf(syscall.SO_ERROR), + "SO_KEEPALIVE": ValueOf(syscall.SO_KEEPALIVE), + "SO_LINGER": ValueOf(syscall.SO_LINGER), + "SO_MARK": ValueOf(syscall.SO_MARK), + "SO_NO_CHECK": ValueOf(syscall.SO_NO_CHECK), + "SO_OOBINLINE": ValueOf(syscall.SO_OOBINLINE), + "SO_PASSCRED": ValueOf(syscall.SO_PASSCRED), + "SO_PASSSEC": ValueOf(syscall.SO_PASSSEC), + "SO_PEERCRED": ValueOf(syscall.SO_PEERCRED), + "SO_PEERNAME": ValueOf(syscall.SO_PEERNAME), + "SO_PEERSEC": ValueOf(syscall.SO_PEERSEC), + "SO_PRIORITY": ValueOf(syscall.SO_PRIORITY), + "SO_PROTOCOL": ValueOf(syscall.SO_PROTOCOL), + "SO_RCVBUF": ValueOf(syscall.SO_RCVBUF), + "SO_RCVBUFFORCE": ValueOf(syscall.SO_RCVBUFFORCE), + "SO_RCVLOWAT": ValueOf(syscall.SO_RCVLOWAT), + "SO_RCVTIMEO": ValueOf(syscall.SO_RCVTIMEO), + "SO_REUSEADDR": ValueOf(syscall.SO_REUSEADDR), + "SO_RXQ_OVFL": ValueOf(syscall.SO_RXQ_OVFL), + "SO_SECURITY_AUTHENTICATION": ValueOf(syscall.SO_SECURITY_AUTHENTICATION), + "SO_SECURITY_ENCRYPTION_NETWORK": ValueOf(syscall.SO_SECURITY_ENCRYPTION_NETWORK), + "SO_SECURITY_ENCRYPTION_TRANSPORT": ValueOf(syscall.SO_SECURITY_ENCRYPTION_TRANSPORT), + "SO_SNDBUF": ValueOf(syscall.SO_SNDBUF), + "SO_SNDBUFFORCE": ValueOf(syscall.SO_SNDBUFFORCE), + "SO_SNDLOWAT": ValueOf(syscall.SO_SNDLOWAT), + "SO_SNDTIMEO": ValueOf(syscall.SO_SNDTIMEO), + "SO_TIMESTAMP": ValueOf(syscall.SO_TIMESTAMP), + "SO_TIMESTAMPING": ValueOf(syscall.SO_TIMESTAMPING), + "SO_TIMESTAMPNS": ValueOf(syscall.SO_TIMESTAMPNS), + "SO_TYPE": ValueOf(syscall.SO_TYPE), + "SYS_ACCESS": ValueOf(syscall.SYS_ACCESS), + "SYS_ACCT": ValueOf(syscall.SYS_ACCT), + "SYS_ADD_KEY": ValueOf(syscall.SYS_ADD_KEY), + "SYS_ADJTIMEX": ValueOf(syscall.SYS_ADJTIMEX), + "SYS_AFS_SYSCALL": ValueOf(syscall.SYS_AFS_SYSCALL), + "SYS_ALARM": ValueOf(syscall.SYS_ALARM), + "SYS_BDFLUSH": ValueOf(syscall.SYS_BDFLUSH), + "SYS_BREAK": ValueOf(syscall.SYS_BREAK), + "SYS_BRK": ValueOf(syscall.SYS_BRK), + "SYS_CAPGET": ValueOf(syscall.SYS_CAPGET), + "SYS_CAPSET": ValueOf(syscall.SYS_CAPSET), + "SYS_CHDIR": ValueOf(syscall.SYS_CHDIR), + "SYS_CHMOD": ValueOf(syscall.SYS_CHMOD), + "SYS_CHOWN": ValueOf(syscall.SYS_CHOWN), + "SYS_CHOWN32": ValueOf(syscall.SYS_CHOWN32), + "SYS_CHROOT": ValueOf(syscall.SYS_CHROOT), + "SYS_CLOCK_GETRES": ValueOf(syscall.SYS_CLOCK_GETRES), + "SYS_CLOCK_GETTIME": ValueOf(syscall.SYS_CLOCK_GETTIME), + "SYS_CLOCK_NANOSLEEP": ValueOf(syscall.SYS_CLOCK_NANOSLEEP), + "SYS_CLOCK_SETTIME": ValueOf(syscall.SYS_CLOCK_SETTIME), + "SYS_CLONE": ValueOf(syscall.SYS_CLONE), + "SYS_CLOSE": ValueOf(syscall.SYS_CLOSE), + "SYS_CREAT": ValueOf(syscall.SYS_CREAT), + "SYS_CREATE_MODULE": ValueOf(syscall.SYS_CREATE_MODULE), + "SYS_DELETE_MODULE": ValueOf(syscall.SYS_DELETE_MODULE), + "SYS_DUP": ValueOf(syscall.SYS_DUP), + "SYS_DUP2": ValueOf(syscall.SYS_DUP2), + "SYS_DUP3": ValueOf(syscall.SYS_DUP3), + "SYS_EPOLL_CREATE": ValueOf(syscall.SYS_EPOLL_CREATE), + "SYS_EPOLL_CREATE1": ValueOf(syscall.SYS_EPOLL_CREATE1), + "SYS_EPOLL_CTL": ValueOf(syscall.SYS_EPOLL_CTL), + "SYS_EPOLL_PWAIT": ValueOf(syscall.SYS_EPOLL_PWAIT), + "SYS_EPOLL_WAIT": ValueOf(syscall.SYS_EPOLL_WAIT), + "SYS_EVENTFD": ValueOf(syscall.SYS_EVENTFD), + "SYS_EVENTFD2": ValueOf(syscall.SYS_EVENTFD2), + "SYS_EXECVE": ValueOf(syscall.SYS_EXECVE), + "SYS_EXIT": ValueOf(syscall.SYS_EXIT), + "SYS_EXIT_GROUP": ValueOf(syscall.SYS_EXIT_GROUP), + "SYS_FACCESSAT": ValueOf(syscall.SYS_FACCESSAT), + "SYS_FADVISE64": ValueOf(syscall.SYS_FADVISE64), + "SYS_FADVISE64_64": ValueOf(syscall.SYS_FADVISE64_64), + "SYS_FALLOCATE": ValueOf(syscall.SYS_FALLOCATE), + "SYS_FANOTIFY_INIT": ValueOf(syscall.SYS_FANOTIFY_INIT), + "SYS_FANOTIFY_MARK": ValueOf(syscall.SYS_FANOTIFY_MARK), + "SYS_FCHDIR": ValueOf(syscall.SYS_FCHDIR), + "SYS_FCHMOD": ValueOf(syscall.SYS_FCHMOD), + "SYS_FCHMODAT": ValueOf(syscall.SYS_FCHMODAT), + "SYS_FCHOWN": ValueOf(syscall.SYS_FCHOWN), + "SYS_FCHOWN32": ValueOf(syscall.SYS_FCHOWN32), + "SYS_FCHOWNAT": ValueOf(syscall.SYS_FCHOWNAT), + "SYS_FCNTL": ValueOf(syscall.SYS_FCNTL), + "SYS_FCNTL64": ValueOf(syscall.SYS_FCNTL64), + "SYS_FDATASYNC": ValueOf(syscall.SYS_FDATASYNC), + "SYS_FGETXATTR": ValueOf(syscall.SYS_FGETXATTR), + "SYS_FLISTXATTR": ValueOf(syscall.SYS_FLISTXATTR), + "SYS_FLOCK": ValueOf(syscall.SYS_FLOCK), + "SYS_FORK": ValueOf(syscall.SYS_FORK), + "SYS_FREMOVEXATTR": ValueOf(syscall.SYS_FREMOVEXATTR), + "SYS_FSETXATTR": ValueOf(syscall.SYS_FSETXATTR), + "SYS_FSTAT": ValueOf(syscall.SYS_FSTAT), + "SYS_FSTAT64": ValueOf(syscall.SYS_FSTAT64), + "SYS_FSTATAT64": ValueOf(syscall.SYS_FSTATAT64), + "SYS_FSTATFS": ValueOf(syscall.SYS_FSTATFS), + "SYS_FSTATFS64": ValueOf(syscall.SYS_FSTATFS64), + "SYS_FSYNC": ValueOf(syscall.SYS_FSYNC), + "SYS_FTIME": ValueOf(syscall.SYS_FTIME), + "SYS_FTRUNCATE": ValueOf(syscall.SYS_FTRUNCATE), + "SYS_FTRUNCATE64": ValueOf(syscall.SYS_FTRUNCATE64), + "SYS_FUTEX": ValueOf(syscall.SYS_FUTEX), + "SYS_FUTIMESAT": ValueOf(syscall.SYS_FUTIMESAT), + "SYS_GETCPU": ValueOf(syscall.SYS_GETCPU), + "SYS_GETCWD": ValueOf(syscall.SYS_GETCWD), + "SYS_GETDENTS": ValueOf(syscall.SYS_GETDENTS), + "SYS_GETDENTS64": ValueOf(syscall.SYS_GETDENTS64), + "SYS_GETEGID": ValueOf(syscall.SYS_GETEGID), + "SYS_GETEGID32": ValueOf(syscall.SYS_GETEGID32), + "SYS_GETEUID": ValueOf(syscall.SYS_GETEUID), + "SYS_GETEUID32": ValueOf(syscall.SYS_GETEUID32), + "SYS_GETGID": ValueOf(syscall.SYS_GETGID), + "SYS_GETGID32": ValueOf(syscall.SYS_GETGID32), + "SYS_GETGROUPS": ValueOf(syscall.SYS_GETGROUPS), + "SYS_GETGROUPS32": ValueOf(syscall.SYS_GETGROUPS32), + "SYS_GETITIMER": ValueOf(syscall.SYS_GETITIMER), + "SYS_GETPGID": ValueOf(syscall.SYS_GETPGID), + "SYS_GETPGRP": ValueOf(syscall.SYS_GETPGRP), + "SYS_GETPID": ValueOf(syscall.SYS_GETPID), + "SYS_GETPMSG": ValueOf(syscall.SYS_GETPMSG), + "SYS_GETPPID": ValueOf(syscall.SYS_GETPPID), + "SYS_GETPRIORITY": ValueOf(syscall.SYS_GETPRIORITY), + "SYS_GETRESGID": ValueOf(syscall.SYS_GETRESGID), + "SYS_GETRESGID32": ValueOf(syscall.SYS_GETRESGID32), + "SYS_GETRESUID": ValueOf(syscall.SYS_GETRESUID), + "SYS_GETRESUID32": ValueOf(syscall.SYS_GETRESUID32), + "SYS_GETRLIMIT": ValueOf(syscall.SYS_GETRLIMIT), + "SYS_GETRUSAGE": ValueOf(syscall.SYS_GETRUSAGE), + "SYS_GETSID": ValueOf(syscall.SYS_GETSID), + "SYS_GETTID": ValueOf(syscall.SYS_GETTID), + "SYS_GETTIMEOFDAY": ValueOf(syscall.SYS_GETTIMEOFDAY), + "SYS_GETUID": ValueOf(syscall.SYS_GETUID), + "SYS_GETUID32": ValueOf(syscall.SYS_GETUID32), + "SYS_GETXATTR": ValueOf(syscall.SYS_GETXATTR), + "SYS_GET_KERNEL_SYMS": ValueOf(syscall.SYS_GET_KERNEL_SYMS), + "SYS_GET_MEMPOLICY": ValueOf(syscall.SYS_GET_MEMPOLICY), + "SYS_GET_ROBUST_LIST": ValueOf(syscall.SYS_GET_ROBUST_LIST), + "SYS_GET_THREAD_AREA": ValueOf(syscall.SYS_GET_THREAD_AREA), + "SYS_GTTY": ValueOf(syscall.SYS_GTTY), + "SYS_IDLE": ValueOf(syscall.SYS_IDLE), + "SYS_INIT_MODULE": ValueOf(syscall.SYS_INIT_MODULE), + "SYS_INOTIFY_ADD_WATCH": ValueOf(syscall.SYS_INOTIFY_ADD_WATCH), + "SYS_INOTIFY_INIT": ValueOf(syscall.SYS_INOTIFY_INIT), + "SYS_INOTIFY_INIT1": ValueOf(syscall.SYS_INOTIFY_INIT1), + "SYS_INOTIFY_RM_WATCH": ValueOf(syscall.SYS_INOTIFY_RM_WATCH), + "SYS_IOCTL": ValueOf(syscall.SYS_IOCTL), + "SYS_IOPERM": ValueOf(syscall.SYS_IOPERM), + "SYS_IOPL": ValueOf(syscall.SYS_IOPL), + "SYS_IOPRIO_GET": ValueOf(syscall.SYS_IOPRIO_GET), + "SYS_IOPRIO_SET": ValueOf(syscall.SYS_IOPRIO_SET), + "SYS_IO_CANCEL": ValueOf(syscall.SYS_IO_CANCEL), + "SYS_IO_DESTROY": ValueOf(syscall.SYS_IO_DESTROY), + "SYS_IO_GETEVENTS": ValueOf(syscall.SYS_IO_GETEVENTS), + "SYS_IO_SETUP": ValueOf(syscall.SYS_IO_SETUP), + "SYS_IO_SUBMIT": ValueOf(syscall.SYS_IO_SUBMIT), + "SYS_IPC": ValueOf(syscall.SYS_IPC), + "SYS_KEXEC_LOAD": ValueOf(syscall.SYS_KEXEC_LOAD), + "SYS_KEYCTL": ValueOf(syscall.SYS_KEYCTL), + "SYS_KILL": ValueOf(syscall.SYS_KILL), + "SYS_LCHOWN": ValueOf(syscall.SYS_LCHOWN), + "SYS_LCHOWN32": ValueOf(syscall.SYS_LCHOWN32), + "SYS_LGETXATTR": ValueOf(syscall.SYS_LGETXATTR), + "SYS_LINK": ValueOf(syscall.SYS_LINK), + "SYS_LINKAT": ValueOf(syscall.SYS_LINKAT), + "SYS_LISTXATTR": ValueOf(syscall.SYS_LISTXATTR), + "SYS_LLISTXATTR": ValueOf(syscall.SYS_LLISTXATTR), + "SYS_LOCK": ValueOf(syscall.SYS_LOCK), + "SYS_LOOKUP_DCOOKIE": ValueOf(syscall.SYS_LOOKUP_DCOOKIE), + "SYS_LREMOVEXATTR": ValueOf(syscall.SYS_LREMOVEXATTR), + "SYS_LSEEK": ValueOf(syscall.SYS_LSEEK), + "SYS_LSETXATTR": ValueOf(syscall.SYS_LSETXATTR), + "SYS_LSTAT": ValueOf(syscall.SYS_LSTAT), + "SYS_LSTAT64": ValueOf(syscall.SYS_LSTAT64), + "SYS_MADVISE": ValueOf(syscall.SYS_MADVISE), + "SYS_MADVISE1": ValueOf(syscall.SYS_MADVISE1), + "SYS_MBIND": ValueOf(syscall.SYS_MBIND), + "SYS_MIGRATE_PAGES": ValueOf(syscall.SYS_MIGRATE_PAGES), + "SYS_MINCORE": ValueOf(syscall.SYS_MINCORE), + "SYS_MKDIR": ValueOf(syscall.SYS_MKDIR), + "SYS_MKDIRAT": ValueOf(syscall.SYS_MKDIRAT), + "SYS_MKNOD": ValueOf(syscall.SYS_MKNOD), + "SYS_MKNODAT": ValueOf(syscall.SYS_MKNODAT), + "SYS_MLOCK": ValueOf(syscall.SYS_MLOCK), + "SYS_MLOCKALL": ValueOf(syscall.SYS_MLOCKALL), + "SYS_MMAP": ValueOf(syscall.SYS_MMAP), + "SYS_MMAP2": ValueOf(syscall.SYS_MMAP2), + "SYS_MODIFY_LDT": ValueOf(syscall.SYS_MODIFY_LDT), + "SYS_MOUNT": ValueOf(syscall.SYS_MOUNT), + "SYS_MOVE_PAGES": ValueOf(syscall.SYS_MOVE_PAGES), + "SYS_MPROTECT": ValueOf(syscall.SYS_MPROTECT), + "SYS_MPX": ValueOf(syscall.SYS_MPX), + "SYS_MQ_GETSETATTR": ValueOf(syscall.SYS_MQ_GETSETATTR), + "SYS_MQ_NOTIFY": ValueOf(syscall.SYS_MQ_NOTIFY), + "SYS_MQ_OPEN": ValueOf(syscall.SYS_MQ_OPEN), + "SYS_MQ_TIMEDRECEIVE": ValueOf(syscall.SYS_MQ_TIMEDRECEIVE), + "SYS_MQ_TIMEDSEND": ValueOf(syscall.SYS_MQ_TIMEDSEND), + "SYS_MQ_UNLINK": ValueOf(syscall.SYS_MQ_UNLINK), + "SYS_MREMAP": ValueOf(syscall.SYS_MREMAP), + "SYS_MSYNC": ValueOf(syscall.SYS_MSYNC), + "SYS_MUNLOCK": ValueOf(syscall.SYS_MUNLOCK), + "SYS_MUNLOCKALL": ValueOf(syscall.SYS_MUNLOCKALL), + "SYS_MUNMAP": ValueOf(syscall.SYS_MUNMAP), + "SYS_NANOSLEEP": ValueOf(syscall.SYS_NANOSLEEP), + "SYS_NFSSERVCTL": ValueOf(syscall.SYS_NFSSERVCTL), + "SYS_NICE": ValueOf(syscall.SYS_NICE), + "SYS_OLDFSTAT": ValueOf(syscall.SYS_OLDFSTAT), + "SYS_OLDLSTAT": ValueOf(syscall.SYS_OLDLSTAT), + "SYS_OLDOLDUNAME": ValueOf(syscall.SYS_OLDOLDUNAME), + "SYS_OLDSTAT": ValueOf(syscall.SYS_OLDSTAT), + "SYS_OLDUNAME": ValueOf(syscall.SYS_OLDUNAME), + "SYS_OPEN": ValueOf(syscall.SYS_OPEN), + "SYS_OPENAT": ValueOf(syscall.SYS_OPENAT), + "SYS_PAUSE": ValueOf(syscall.SYS_PAUSE), + "SYS_PERF_EVENT_OPEN": ValueOf(syscall.SYS_PERF_EVENT_OPEN), + "SYS_PERSONALITY": ValueOf(syscall.SYS_PERSONALITY), + "SYS_PIPE": ValueOf(syscall.SYS_PIPE), + "SYS_PIPE2": ValueOf(syscall.SYS_PIPE2), + "SYS_PIVOT_ROOT": ValueOf(syscall.SYS_PIVOT_ROOT), + "SYS_POLL": ValueOf(syscall.SYS_POLL), + "SYS_PPOLL": ValueOf(syscall.SYS_PPOLL), + "SYS_PRCTL": ValueOf(syscall.SYS_PRCTL), + "SYS_PREAD64": ValueOf(syscall.SYS_PREAD64), + "SYS_PREADV": ValueOf(syscall.SYS_PREADV), + "SYS_PRLIMIT64": ValueOf(syscall.SYS_PRLIMIT64), + "SYS_PROF": ValueOf(syscall.SYS_PROF), + "SYS_PROFIL": ValueOf(syscall.SYS_PROFIL), + "SYS_PSELECT6": ValueOf(syscall.SYS_PSELECT6), + "SYS_PTRACE": ValueOf(syscall.SYS_PTRACE), + "SYS_PUTPMSG": ValueOf(syscall.SYS_PUTPMSG), + "SYS_PWRITE64": ValueOf(syscall.SYS_PWRITE64), + "SYS_PWRITEV": ValueOf(syscall.SYS_PWRITEV), + "SYS_QUERY_MODULE": ValueOf(syscall.SYS_QUERY_MODULE), + "SYS_QUOTACTL": ValueOf(syscall.SYS_QUOTACTL), + "SYS_READ": ValueOf(syscall.SYS_READ), + "SYS_READAHEAD": ValueOf(syscall.SYS_READAHEAD), + "SYS_READDIR": ValueOf(syscall.SYS_READDIR), + "SYS_READLINK": ValueOf(syscall.SYS_READLINK), + "SYS_READLINKAT": ValueOf(syscall.SYS_READLINKAT), + "SYS_READV": ValueOf(syscall.SYS_READV), + "SYS_REBOOT": ValueOf(syscall.SYS_REBOOT), + "SYS_RECVMMSG": ValueOf(syscall.SYS_RECVMMSG), + "SYS_REMAP_FILE_PAGES": ValueOf(syscall.SYS_REMAP_FILE_PAGES), + "SYS_REMOVEXATTR": ValueOf(syscall.SYS_REMOVEXATTR), + "SYS_RENAME": ValueOf(syscall.SYS_RENAME), + "SYS_RENAMEAT": ValueOf(syscall.SYS_RENAMEAT), + "SYS_REQUEST_KEY": ValueOf(syscall.SYS_REQUEST_KEY), + "SYS_RESTART_SYSCALL": ValueOf(syscall.SYS_RESTART_SYSCALL), + "SYS_RMDIR": ValueOf(syscall.SYS_RMDIR), + "SYS_RT_SIGACTION": ValueOf(syscall.SYS_RT_SIGACTION), + "SYS_RT_SIGPENDING": ValueOf(syscall.SYS_RT_SIGPENDING), + "SYS_RT_SIGPROCMASK": ValueOf(syscall.SYS_RT_SIGPROCMASK), + "SYS_RT_SIGQUEUEINFO": ValueOf(syscall.SYS_RT_SIGQUEUEINFO), + "SYS_RT_SIGRETURN": ValueOf(syscall.SYS_RT_SIGRETURN), + "SYS_RT_SIGSUSPEND": ValueOf(syscall.SYS_RT_SIGSUSPEND), + "SYS_RT_SIGTIMEDWAIT": ValueOf(syscall.SYS_RT_SIGTIMEDWAIT), + "SYS_RT_TGSIGQUEUEINFO": ValueOf(syscall.SYS_RT_TGSIGQUEUEINFO), + "SYS_SCHED_GETAFFINITY": ValueOf(syscall.SYS_SCHED_GETAFFINITY), + "SYS_SCHED_GETPARAM": ValueOf(syscall.SYS_SCHED_GETPARAM), + "SYS_SCHED_GETSCHEDULER": ValueOf(syscall.SYS_SCHED_GETSCHEDULER), + "SYS_SCHED_GET_PRIORITY_MAX": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MAX), + "SYS_SCHED_GET_PRIORITY_MIN": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MIN), + "SYS_SCHED_RR_GET_INTERVAL": ValueOf(syscall.SYS_SCHED_RR_GET_INTERVAL), + "SYS_SCHED_SETAFFINITY": ValueOf(syscall.SYS_SCHED_SETAFFINITY), + "SYS_SCHED_SETPARAM": ValueOf(syscall.SYS_SCHED_SETPARAM), + "SYS_SCHED_SETSCHEDULER": ValueOf(syscall.SYS_SCHED_SETSCHEDULER), + "SYS_SCHED_YIELD": ValueOf(syscall.SYS_SCHED_YIELD), + "SYS_SELECT": ValueOf(syscall.SYS_SELECT), + "SYS_SENDFILE": ValueOf(syscall.SYS_SENDFILE), + "SYS_SENDFILE64": ValueOf(syscall.SYS_SENDFILE64), + "SYS_SETDOMAINNAME": ValueOf(syscall.SYS_SETDOMAINNAME), + "SYS_SETFSGID": ValueOf(syscall.SYS_SETFSGID), + "SYS_SETFSGID32": ValueOf(syscall.SYS_SETFSGID32), + "SYS_SETFSUID": ValueOf(syscall.SYS_SETFSUID), + "SYS_SETFSUID32": ValueOf(syscall.SYS_SETFSUID32), + "SYS_SETGID": ValueOf(syscall.SYS_SETGID), + "SYS_SETGID32": ValueOf(syscall.SYS_SETGID32), + "SYS_SETGROUPS": ValueOf(syscall.SYS_SETGROUPS), + "SYS_SETGROUPS32": ValueOf(syscall.SYS_SETGROUPS32), + "SYS_SETHOSTNAME": ValueOf(syscall.SYS_SETHOSTNAME), + "SYS_SETITIMER": ValueOf(syscall.SYS_SETITIMER), + "SYS_SETPGID": ValueOf(syscall.SYS_SETPGID), + "SYS_SETPRIORITY": ValueOf(syscall.SYS_SETPRIORITY), + "SYS_SETREGID": ValueOf(syscall.SYS_SETREGID), + "SYS_SETREGID32": ValueOf(syscall.SYS_SETREGID32), + "SYS_SETRESGID": ValueOf(syscall.SYS_SETRESGID), + "SYS_SETRESGID32": ValueOf(syscall.SYS_SETRESGID32), + "SYS_SETRESUID": ValueOf(syscall.SYS_SETRESUID), + "SYS_SETRESUID32": ValueOf(syscall.SYS_SETRESUID32), + "SYS_SETREUID": ValueOf(syscall.SYS_SETREUID), + "SYS_SETREUID32": ValueOf(syscall.SYS_SETREUID32), + "SYS_SETRLIMIT": ValueOf(syscall.SYS_SETRLIMIT), + "SYS_SETSID": ValueOf(syscall.SYS_SETSID), + "SYS_SETTIMEOFDAY": ValueOf(syscall.SYS_SETTIMEOFDAY), + "SYS_SETUID": ValueOf(syscall.SYS_SETUID), + "SYS_SETUID32": ValueOf(syscall.SYS_SETUID32), + "SYS_SETXATTR": ValueOf(syscall.SYS_SETXATTR), + "SYS_SET_MEMPOLICY": ValueOf(syscall.SYS_SET_MEMPOLICY), + "SYS_SET_ROBUST_LIST": ValueOf(syscall.SYS_SET_ROBUST_LIST), + "SYS_SET_THREAD_AREA": ValueOf(syscall.SYS_SET_THREAD_AREA), + "SYS_SET_TID_ADDRESS": ValueOf(syscall.SYS_SET_TID_ADDRESS), + "SYS_SGETMASK": ValueOf(syscall.SYS_SGETMASK), + "SYS_SIGACTION": ValueOf(syscall.SYS_SIGACTION), + "SYS_SIGALTSTACK": ValueOf(syscall.SYS_SIGALTSTACK), + "SYS_SIGNAL": ValueOf(syscall.SYS_SIGNAL), + "SYS_SIGNALFD": ValueOf(syscall.SYS_SIGNALFD), + "SYS_SIGNALFD4": ValueOf(syscall.SYS_SIGNALFD4), + "SYS_SIGPENDING": ValueOf(syscall.SYS_SIGPENDING), + "SYS_SIGPROCMASK": ValueOf(syscall.SYS_SIGPROCMASK), + "SYS_SIGRETURN": ValueOf(syscall.SYS_SIGRETURN), + "SYS_SIGSUSPEND": ValueOf(syscall.SYS_SIGSUSPEND), + "SYS_SOCKETCALL": ValueOf(syscall.SYS_SOCKETCALL), + "SYS_SPLICE": ValueOf(syscall.SYS_SPLICE), + "SYS_SSETMASK": ValueOf(syscall.SYS_SSETMASK), + "SYS_STAT": ValueOf(syscall.SYS_STAT), + "SYS_STAT64": ValueOf(syscall.SYS_STAT64), + "SYS_STATFS": ValueOf(syscall.SYS_STATFS), + "SYS_STATFS64": ValueOf(syscall.SYS_STATFS64), + "SYS_STIME": ValueOf(syscall.SYS_STIME), + "SYS_STTY": ValueOf(syscall.SYS_STTY), + "SYS_SWAPOFF": ValueOf(syscall.SYS_SWAPOFF), + "SYS_SWAPON": ValueOf(syscall.SYS_SWAPON), + "SYS_SYMLINK": ValueOf(syscall.SYS_SYMLINK), + "SYS_SYMLINKAT": ValueOf(syscall.SYS_SYMLINKAT), + "SYS_SYNC": ValueOf(syscall.SYS_SYNC), + "SYS_SYNC_FILE_RANGE": ValueOf(syscall.SYS_SYNC_FILE_RANGE), + "SYS_SYSFS": ValueOf(syscall.SYS_SYSFS), + "SYS_SYSINFO": ValueOf(syscall.SYS_SYSINFO), + "SYS_SYSLOG": ValueOf(syscall.SYS_SYSLOG), + "SYS_TEE": ValueOf(syscall.SYS_TEE), + "SYS_TGKILL": ValueOf(syscall.SYS_TGKILL), + "SYS_TIME": ValueOf(syscall.SYS_TIME), + "SYS_TIMERFD_CREATE": ValueOf(syscall.SYS_TIMERFD_CREATE), + "SYS_TIMERFD_GETTIME": ValueOf(syscall.SYS_TIMERFD_GETTIME), + "SYS_TIMERFD_SETTIME": ValueOf(syscall.SYS_TIMERFD_SETTIME), + "SYS_TIMER_CREATE": ValueOf(syscall.SYS_TIMER_CREATE), + "SYS_TIMER_DELETE": ValueOf(syscall.SYS_TIMER_DELETE), + "SYS_TIMER_GETOVERRUN": ValueOf(syscall.SYS_TIMER_GETOVERRUN), + "SYS_TIMER_GETTIME": ValueOf(syscall.SYS_TIMER_GETTIME), + "SYS_TIMER_SETTIME": ValueOf(syscall.SYS_TIMER_SETTIME), + "SYS_TIMES": ValueOf(syscall.SYS_TIMES), + "SYS_TKILL": ValueOf(syscall.SYS_TKILL), + "SYS_TRUNCATE": ValueOf(syscall.SYS_TRUNCATE), + "SYS_TRUNCATE64": ValueOf(syscall.SYS_TRUNCATE64), + "SYS_UGETRLIMIT": ValueOf(syscall.SYS_UGETRLIMIT), + "SYS_ULIMIT": ValueOf(syscall.SYS_ULIMIT), + "SYS_UMASK": ValueOf(syscall.SYS_UMASK), + "SYS_UMOUNT": ValueOf(syscall.SYS_UMOUNT), + "SYS_UMOUNT2": ValueOf(syscall.SYS_UMOUNT2), + "SYS_UNAME": ValueOf(syscall.SYS_UNAME), + "SYS_UNLINK": ValueOf(syscall.SYS_UNLINK), + "SYS_UNLINKAT": ValueOf(syscall.SYS_UNLINKAT), + "SYS_UNSHARE": ValueOf(syscall.SYS_UNSHARE), + "SYS_USELIB": ValueOf(syscall.SYS_USELIB), + "SYS_USTAT": ValueOf(syscall.SYS_USTAT), + "SYS_UTIME": ValueOf(syscall.SYS_UTIME), + "SYS_UTIMENSAT": ValueOf(syscall.SYS_UTIMENSAT), + "SYS_UTIMES": ValueOf(syscall.SYS_UTIMES), + "SYS_VFORK": ValueOf(syscall.SYS_VFORK), + "SYS_VHANGUP": ValueOf(syscall.SYS_VHANGUP), + "SYS_VM86": ValueOf(syscall.SYS_VM86), + "SYS_VM86OLD": ValueOf(syscall.SYS_VM86OLD), + "SYS_VMSPLICE": ValueOf(syscall.SYS_VMSPLICE), + "SYS_VSERVER": ValueOf(syscall.SYS_VSERVER), + "SYS_WAIT4": ValueOf(syscall.SYS_WAIT4), + "SYS_WAITID": ValueOf(syscall.SYS_WAITID), + "SYS_WAITPID": ValueOf(syscall.SYS_WAITPID), + "SYS_WRITE": ValueOf(syscall.SYS_WRITE), + "SYS_WRITEV": ValueOf(syscall.SYS_WRITEV), + "SYS__LLSEEK": ValueOf(syscall.SYS__LLSEEK), + "SYS__NEWSELECT": ValueOf(syscall.SYS__NEWSELECT), + "SYS__SYSCTL": ValueOf(syscall.SYS__SYSCTL), + "S_BLKSIZE": ValueOf(syscall.S_BLKSIZE), + "S_IEXEC": ValueOf(syscall.S_IEXEC), + "S_IFBLK": ValueOf(syscall.S_IFBLK), + "S_IFCHR": ValueOf(syscall.S_IFCHR), + "S_IFDIR": ValueOf(syscall.S_IFDIR), + "S_IFIFO": ValueOf(syscall.S_IFIFO), + "S_IFLNK": ValueOf(syscall.S_IFLNK), + "S_IFMT": ValueOf(syscall.S_IFMT), + "S_IFREG": ValueOf(syscall.S_IFREG), + "S_IFSOCK": ValueOf(syscall.S_IFSOCK), + "S_IREAD": ValueOf(syscall.S_IREAD), + "S_IRGRP": ValueOf(syscall.S_IRGRP), + "S_IROTH": ValueOf(syscall.S_IROTH), + "S_IRUSR": ValueOf(syscall.S_IRUSR), + "S_IRWXG": ValueOf(syscall.S_IRWXG), + "S_IRWXO": ValueOf(syscall.S_IRWXO), + "S_IRWXU": ValueOf(syscall.S_IRWXU), + "S_ISGID": ValueOf(syscall.S_ISGID), + "S_ISUID": ValueOf(syscall.S_ISUID), + "S_ISVTX": ValueOf(syscall.S_ISVTX), + "S_IWGRP": ValueOf(syscall.S_IWGRP), + "S_IWOTH": ValueOf(syscall.S_IWOTH), + "S_IWRITE": ValueOf(syscall.S_IWRITE), + "S_IWUSR": ValueOf(syscall.S_IWUSR), + "S_IXGRP": ValueOf(syscall.S_IXGRP), + "S_IXOTH": ValueOf(syscall.S_IXOTH), + "S_IXUSR": ValueOf(syscall.S_IXUSR), + "Seek": ValueOf(syscall.Seek), + "Select": ValueOf(syscall.Select), + "Sendfile": ValueOf(syscall.Sendfile), + "Sendmsg": ValueOf(syscall.Sendmsg), + "SendmsgN": ValueOf(syscall.SendmsgN), + "Sendto": ValueOf(syscall.Sendto), + "SetLsfPromisc": ValueOf(syscall.SetLsfPromisc), + "SetNonblock": ValueOf(syscall.SetNonblock), + "Setdomainname": ValueOf(syscall.Setdomainname), + "Setenv": ValueOf(syscall.Setenv), + "Setfsgid": ValueOf(syscall.Setfsgid), + "Setfsuid": ValueOf(syscall.Setfsuid), + "Setgid": ValueOf(syscall.Setgid), + "Setgroups": ValueOf(syscall.Setgroups), + "Sethostname": ValueOf(syscall.Sethostname), + "Setpgid": ValueOf(syscall.Setpgid), + "Setpriority": ValueOf(syscall.Setpriority), + "Setregid": ValueOf(syscall.Setregid), + "Setresgid": ValueOf(syscall.Setresgid), + "Setresuid": ValueOf(syscall.Setresuid), + "Setreuid": ValueOf(syscall.Setreuid), + "Setrlimit": ValueOf(syscall.Setrlimit), + "Setsid": ValueOf(syscall.Setsid), + "SetsockoptByte": ValueOf(syscall.SetsockoptByte), + "SetsockoptICMPv6Filter": ValueOf(syscall.SetsockoptICMPv6Filter), + "SetsockoptIPMreq": ValueOf(syscall.SetsockoptIPMreq), + "SetsockoptIPMreqn": ValueOf(syscall.SetsockoptIPMreqn), + "SetsockoptIPv6Mreq": ValueOf(syscall.SetsockoptIPv6Mreq), + "SetsockoptInet4Addr": ValueOf(syscall.SetsockoptInet4Addr), + "SetsockoptInt": ValueOf(syscall.SetsockoptInt), + "SetsockoptLinger": ValueOf(syscall.SetsockoptLinger), + "SetsockoptString": ValueOf(syscall.SetsockoptString), + "SetsockoptTimeval": ValueOf(syscall.SetsockoptTimeval), + "Settimeofday": ValueOf(syscall.Settimeofday), + "Setuid": ValueOf(syscall.Setuid), + "Setxattr": ValueOf(syscall.Setxattr), + "Shutdown": ValueOf(syscall.Shutdown), + "SizeofCmsghdr": ValueOf(syscall.SizeofCmsghdr), + "SizeofICMPv6Filter": ValueOf(syscall.SizeofICMPv6Filter), + "SizeofIPMreq": ValueOf(syscall.SizeofIPMreq), + "SizeofIPMreqn": ValueOf(syscall.SizeofIPMreqn), + "SizeofIPv6MTUInfo": ValueOf(syscall.SizeofIPv6MTUInfo), + "SizeofIPv6Mreq": ValueOf(syscall.SizeofIPv6Mreq), + "SizeofIfAddrmsg": ValueOf(syscall.SizeofIfAddrmsg), + "SizeofIfInfomsg": ValueOf(syscall.SizeofIfInfomsg), + "SizeofInet4Pktinfo": ValueOf(syscall.SizeofInet4Pktinfo), + "SizeofInet6Pktinfo": ValueOf(syscall.SizeofInet6Pktinfo), + "SizeofInotifyEvent": ValueOf(syscall.SizeofInotifyEvent), + "SizeofLinger": ValueOf(syscall.SizeofLinger), + "SizeofMsghdr": ValueOf(syscall.SizeofMsghdr), + "SizeofNlAttr": ValueOf(syscall.SizeofNlAttr), + "SizeofNlMsgerr": ValueOf(syscall.SizeofNlMsgerr), + "SizeofNlMsghdr": ValueOf(syscall.SizeofNlMsghdr), + "SizeofRtAttr": ValueOf(syscall.SizeofRtAttr), + "SizeofRtGenmsg": ValueOf(syscall.SizeofRtGenmsg), + "SizeofRtMsg": ValueOf(syscall.SizeofRtMsg), + "SizeofRtNexthop": ValueOf(syscall.SizeofRtNexthop), + "SizeofSockFilter": ValueOf(syscall.SizeofSockFilter), + "SizeofSockFprog": ValueOf(syscall.SizeofSockFprog), + "SizeofSockaddrAny": ValueOf(syscall.SizeofSockaddrAny), + "SizeofSockaddrInet4": ValueOf(syscall.SizeofSockaddrInet4), + "SizeofSockaddrInet6": ValueOf(syscall.SizeofSockaddrInet6), + "SizeofSockaddrLinklayer": ValueOf(syscall.SizeofSockaddrLinklayer), + "SizeofSockaddrNetlink": ValueOf(syscall.SizeofSockaddrNetlink), + "SizeofSockaddrUnix": ValueOf(syscall.SizeofSockaddrUnix), + "SizeofTCPInfo": ValueOf(syscall.SizeofTCPInfo), + "SizeofUcred": ValueOf(syscall.SizeofUcred), + "SlicePtrFromStrings": ValueOf(syscall.SlicePtrFromStrings), + "Socket": ValueOf(syscall.Socket), + "SocketDisableIPv6": ValueOf(&syscall.SocketDisableIPv6).Elem(), + "Socketpair": ValueOf(syscall.Socketpair), + "Splice": ValueOf(syscall.Splice), + "StartProcess": ValueOf(syscall.StartProcess), + "Stat": ValueOf(syscall.Stat), + "Statfs": ValueOf(syscall.Statfs), + "Stderr": ValueOf(&syscall.Stderr).Elem(), + "Stdin": ValueOf(&syscall.Stdin).Elem(), + "Stdout": ValueOf(&syscall.Stdout).Elem(), + "StringBytePtr": ValueOf(syscall.StringBytePtr), + "StringByteSlice": ValueOf(syscall.StringByteSlice), + "StringSlicePtr": ValueOf(syscall.StringSlicePtr), + "Symlink": ValueOf(syscall.Symlink), + "Sync": ValueOf(syscall.Sync), + "SyncFileRange": ValueOf(syscall.SyncFileRange), + "Syscall": ValueOf(syscall.Syscall), + "Syscall6": ValueOf(syscall.Syscall6), + "Sysinfo": ValueOf(syscall.Sysinfo), + "TCGETS": ValueOf(syscall.TCGETS), + "TCIFLUSH": ValueOf(syscall.TCIFLUSH), + "TCIOFLUSH": ValueOf(syscall.TCIOFLUSH), + "TCOFLUSH": ValueOf(syscall.TCOFLUSH), + "TCP_CONGESTION": ValueOf(syscall.TCP_CONGESTION), + "TCP_CORK": ValueOf(syscall.TCP_CORK), + "TCP_DEFER_ACCEPT": ValueOf(syscall.TCP_DEFER_ACCEPT), + "TCP_INFO": ValueOf(syscall.TCP_INFO), + "TCP_KEEPCNT": ValueOf(syscall.TCP_KEEPCNT), + "TCP_KEEPIDLE": ValueOf(syscall.TCP_KEEPIDLE), + "TCP_KEEPINTVL": ValueOf(syscall.TCP_KEEPINTVL), + "TCP_LINGER2": ValueOf(syscall.TCP_LINGER2), + "TCP_MAXSEG": ValueOf(syscall.TCP_MAXSEG), + "TCP_MAXWIN": ValueOf(syscall.TCP_MAXWIN), + "TCP_MAX_WINSHIFT": ValueOf(syscall.TCP_MAX_WINSHIFT), + "TCP_MD5SIG": ValueOf(syscall.TCP_MD5SIG), + "TCP_MD5SIG_MAXKEYLEN": ValueOf(syscall.TCP_MD5SIG_MAXKEYLEN), + "TCP_MSS": ValueOf(syscall.TCP_MSS), + "TCP_NODELAY": ValueOf(syscall.TCP_NODELAY), + "TCP_QUICKACK": ValueOf(syscall.TCP_QUICKACK), + "TCP_SYNCNT": ValueOf(syscall.TCP_SYNCNT), + "TCP_WINDOW_CLAMP": ValueOf(syscall.TCP_WINDOW_CLAMP), + "TCSETS": ValueOf(syscall.TCSETS), + "TIOCCBRK": ValueOf(syscall.TIOCCBRK), + "TIOCCONS": ValueOf(syscall.TIOCCONS), + "TIOCEXCL": ValueOf(syscall.TIOCEXCL), + "TIOCGDEV": ValueOf(uint32(syscall.TIOCGDEV)), + "TIOCGETD": ValueOf(syscall.TIOCGETD), + "TIOCGICOUNT": ValueOf(syscall.TIOCGICOUNT), + "TIOCGLCKTRMIOS": ValueOf(syscall.TIOCGLCKTRMIOS), + "TIOCGPGRP": ValueOf(syscall.TIOCGPGRP), + "TIOCGPTN": ValueOf(uint32(syscall.TIOCGPTN)), + "TIOCGRS485": ValueOf(syscall.TIOCGRS485), + "TIOCGSERIAL": ValueOf(syscall.TIOCGSERIAL), + "TIOCGSID": ValueOf(syscall.TIOCGSID), + "TIOCGSOFTCAR": ValueOf(syscall.TIOCGSOFTCAR), + "TIOCGWINSZ": ValueOf(syscall.TIOCGWINSZ), + "TIOCINQ": ValueOf(syscall.TIOCINQ), + "TIOCLINUX": ValueOf(syscall.TIOCLINUX), + "TIOCMBIC": ValueOf(syscall.TIOCMBIC), + "TIOCMBIS": ValueOf(syscall.TIOCMBIS), + "TIOCMGET": ValueOf(syscall.TIOCMGET), + "TIOCMIWAIT": ValueOf(syscall.TIOCMIWAIT), + "TIOCMSET": ValueOf(syscall.TIOCMSET), + "TIOCM_CAR": ValueOf(syscall.TIOCM_CAR), + "TIOCM_CD": ValueOf(syscall.TIOCM_CD), + "TIOCM_CTS": ValueOf(syscall.TIOCM_CTS), + "TIOCM_DSR": ValueOf(syscall.TIOCM_DSR), + "TIOCM_DTR": ValueOf(syscall.TIOCM_DTR), + "TIOCM_LE": ValueOf(syscall.TIOCM_LE), + "TIOCM_RI": ValueOf(syscall.TIOCM_RI), + "TIOCM_RNG": ValueOf(syscall.TIOCM_RNG), + "TIOCM_RTS": ValueOf(syscall.TIOCM_RTS), + "TIOCM_SR": ValueOf(syscall.TIOCM_SR), + "TIOCM_ST": ValueOf(syscall.TIOCM_ST), + "TIOCNOTTY": ValueOf(syscall.TIOCNOTTY), + "TIOCNXCL": ValueOf(syscall.TIOCNXCL), + "TIOCOUTQ": ValueOf(syscall.TIOCOUTQ), + "TIOCPKT": ValueOf(syscall.TIOCPKT), + "TIOCPKT_DATA": ValueOf(syscall.TIOCPKT_DATA), + "TIOCPKT_DOSTOP": ValueOf(syscall.TIOCPKT_DOSTOP), + "TIOCPKT_FLUSHREAD": ValueOf(syscall.TIOCPKT_FLUSHREAD), + "TIOCPKT_FLUSHWRITE": ValueOf(syscall.TIOCPKT_FLUSHWRITE), + "TIOCPKT_IOCTL": ValueOf(syscall.TIOCPKT_IOCTL), + "TIOCPKT_NOSTOP": ValueOf(syscall.TIOCPKT_NOSTOP), + "TIOCPKT_START": ValueOf(syscall.TIOCPKT_START), + "TIOCPKT_STOP": ValueOf(syscall.TIOCPKT_STOP), + "TIOCSBRK": ValueOf(syscall.TIOCSBRK), + "TIOCSCTTY": ValueOf(syscall.TIOCSCTTY), + "TIOCSERCONFIG": ValueOf(syscall.TIOCSERCONFIG), + "TIOCSERGETLSR": ValueOf(syscall.TIOCSERGETLSR), + "TIOCSERGETMULTI": ValueOf(syscall.TIOCSERGETMULTI), + "TIOCSERGSTRUCT": ValueOf(syscall.TIOCSERGSTRUCT), + "TIOCSERGWILD": ValueOf(syscall.TIOCSERGWILD), + "TIOCSERSETMULTI": ValueOf(syscall.TIOCSERSETMULTI), + "TIOCSERSWILD": ValueOf(syscall.TIOCSERSWILD), + "TIOCSER_TEMT": ValueOf(syscall.TIOCSER_TEMT), + "TIOCSETD": ValueOf(syscall.TIOCSETD), + "TIOCSIG": ValueOf(syscall.TIOCSIG), + "TIOCSLCKTRMIOS": ValueOf(syscall.TIOCSLCKTRMIOS), + "TIOCSPGRP": ValueOf(syscall.TIOCSPGRP), + "TIOCSPTLCK": ValueOf(syscall.TIOCSPTLCK), + "TIOCSRS485": ValueOf(syscall.TIOCSRS485), + "TIOCSSERIAL": ValueOf(syscall.TIOCSSERIAL), + "TIOCSSOFTCAR": ValueOf(syscall.TIOCSSOFTCAR), + "TIOCSTI": ValueOf(syscall.TIOCSTI), + "TIOCSWINSZ": ValueOf(syscall.TIOCSWINSZ), + "TOSTOP": ValueOf(syscall.TOSTOP), + "TUNATTACHFILTER": ValueOf(syscall.TUNATTACHFILTER), + "TUNDETACHFILTER": ValueOf(syscall.TUNDETACHFILTER), + "TUNGETFEATURES": ValueOf(uint32(syscall.TUNGETFEATURES)), + "TUNGETIFF": ValueOf(uint32(syscall.TUNGETIFF)), + "TUNGETSNDBUF": ValueOf(uint32(syscall.TUNGETSNDBUF)), + "TUNGETVNETHDRSZ": ValueOf(uint32(syscall.TUNGETVNETHDRSZ)), + "TUNSETDEBUG": ValueOf(syscall.TUNSETDEBUG), + "TUNSETGROUP": ValueOf(syscall.TUNSETGROUP), + "TUNSETIFF": ValueOf(syscall.TUNSETIFF), + "TUNSETLINK": ValueOf(syscall.TUNSETLINK), + "TUNSETNOCSUM": ValueOf(syscall.TUNSETNOCSUM), + "TUNSETOFFLOAD": ValueOf(syscall.TUNSETOFFLOAD), + "TUNSETOWNER": ValueOf(syscall.TUNSETOWNER), + "TUNSETPERSIST": ValueOf(syscall.TUNSETPERSIST), + "TUNSETSNDBUF": ValueOf(syscall.TUNSETSNDBUF), + "TUNSETTXFILTER": ValueOf(syscall.TUNSETTXFILTER), + "TUNSETVNETHDRSZ": ValueOf(syscall.TUNSETVNETHDRSZ), + "Tee": ValueOf(syscall.Tee), + "Tgkill": ValueOf(syscall.Tgkill), + "Time": ValueOf(syscall.Time), + "Times": ValueOf(syscall.Times), + "TimespecToNsec": ValueOf(syscall.TimespecToNsec), + "TimevalToNsec": ValueOf(syscall.TimevalToNsec), + "Truncate": ValueOf(syscall.Truncate), + "Umask": ValueOf(syscall.Umask), + "Uname": ValueOf(syscall.Uname), + "UnixCredentials": ValueOf(syscall.UnixCredentials), + "UnixRights": ValueOf(syscall.UnixRights), + "Unlink": ValueOf(syscall.Unlink), + "Unlinkat": ValueOf(syscall.Unlinkat), + "Unmount": ValueOf(syscall.Unmount), + "Unsetenv": ValueOf(syscall.Unsetenv), + "Unshare": ValueOf(syscall.Unshare), + "Ustat": ValueOf(syscall.Ustat), + "Utime": ValueOf(syscall.Utime), + "Utimes": ValueOf(syscall.Utimes), + "UtimesNano": ValueOf(syscall.UtimesNano), + "VDISCARD": ValueOf(syscall.VDISCARD), + "VEOF": ValueOf(syscall.VEOF), + "VEOL": ValueOf(syscall.VEOL), + "VEOL2": ValueOf(syscall.VEOL2), + "VERASE": ValueOf(syscall.VERASE), + "VINTR": ValueOf(syscall.VINTR), + "VKILL": ValueOf(syscall.VKILL), + "VLNEXT": ValueOf(syscall.VLNEXT), + "VMIN": ValueOf(syscall.VMIN), + "VQUIT": ValueOf(syscall.VQUIT), + "VREPRINT": ValueOf(syscall.VREPRINT), + "VSTART": ValueOf(syscall.VSTART), + "VSTOP": ValueOf(syscall.VSTOP), + "VSUSP": ValueOf(syscall.VSUSP), + "VSWTC": ValueOf(syscall.VSWTC), + "VTIME": ValueOf(syscall.VTIME), + "VWERASE": ValueOf(syscall.VWERASE), + "WALL": ValueOf(syscall.WALL), + "WCLONE": ValueOf(uint32(syscall.WCLONE)), + "WCONTINUED": ValueOf(syscall.WCONTINUED), + "WEXITED": ValueOf(syscall.WEXITED), + "WNOHANG": ValueOf(syscall.WNOHANG), + "WNOTHREAD": ValueOf(syscall.WNOTHREAD), + "WNOWAIT": ValueOf(syscall.WNOWAIT), + "WORDSIZE": ValueOf(syscall.WORDSIZE), + "WSTOPPED": ValueOf(syscall.WSTOPPED), + "WUNTRACED": ValueOf(syscall.WUNTRACED), + "Wait4": ValueOf(syscall.Wait4), + "Write": ValueOf(syscall.Write), + "XCASE": ValueOf(syscall.XCASE), + },Types: map[string]Type{ + "Cmsghdr": TypeOf((*syscall.Cmsghdr)(nil)).Elem(), + "Credential": TypeOf((*syscall.Credential)(nil)).Elem(), + "Dirent": TypeOf((*syscall.Dirent)(nil)).Elem(), + "EpollEvent": TypeOf((*syscall.EpollEvent)(nil)).Elem(), + "Errno": TypeOf((*syscall.Errno)(nil)).Elem(), + "FdSet": TypeOf((*syscall.FdSet)(nil)).Elem(), + "Flock_t": TypeOf((*syscall.Flock_t)(nil)).Elem(), + "Fsid": TypeOf((*syscall.Fsid)(nil)).Elem(), + "ICMPv6Filter": TypeOf((*syscall.ICMPv6Filter)(nil)).Elem(), + "IPMreq": TypeOf((*syscall.IPMreq)(nil)).Elem(), + "IPMreqn": TypeOf((*syscall.IPMreqn)(nil)).Elem(), + "IPv6MTUInfo": TypeOf((*syscall.IPv6MTUInfo)(nil)).Elem(), + "IPv6Mreq": TypeOf((*syscall.IPv6Mreq)(nil)).Elem(), + "IfAddrmsg": TypeOf((*syscall.IfAddrmsg)(nil)).Elem(), + "IfInfomsg": TypeOf((*syscall.IfInfomsg)(nil)).Elem(), + "Inet4Pktinfo": TypeOf((*syscall.Inet4Pktinfo)(nil)).Elem(), + "Inet6Pktinfo": TypeOf((*syscall.Inet6Pktinfo)(nil)).Elem(), + "InotifyEvent": TypeOf((*syscall.InotifyEvent)(nil)).Elem(), + "Iovec": TypeOf((*syscall.Iovec)(nil)).Elem(), + "Linger": TypeOf((*syscall.Linger)(nil)).Elem(), + "Msghdr": TypeOf((*syscall.Msghdr)(nil)).Elem(), + "NetlinkMessage": TypeOf((*syscall.NetlinkMessage)(nil)).Elem(), + "NetlinkRouteAttr": TypeOf((*syscall.NetlinkRouteAttr)(nil)).Elem(), + "NetlinkRouteRequest": TypeOf((*syscall.NetlinkRouteRequest)(nil)).Elem(), + "NlAttr": TypeOf((*syscall.NlAttr)(nil)).Elem(), + "NlMsgerr": TypeOf((*syscall.NlMsgerr)(nil)).Elem(), + "NlMsghdr": TypeOf((*syscall.NlMsghdr)(nil)).Elem(), + "ProcAttr": TypeOf((*syscall.ProcAttr)(nil)).Elem(), + "PtraceRegs": TypeOf((*syscall.PtraceRegs)(nil)).Elem(), + "RawSockaddr": TypeOf((*syscall.RawSockaddr)(nil)).Elem(), + "RawSockaddrAny": TypeOf((*syscall.RawSockaddrAny)(nil)).Elem(), + "RawSockaddrInet4": TypeOf((*syscall.RawSockaddrInet4)(nil)).Elem(), + "RawSockaddrInet6": TypeOf((*syscall.RawSockaddrInet6)(nil)).Elem(), + "RawSockaddrLinklayer": TypeOf((*syscall.RawSockaddrLinklayer)(nil)).Elem(), + "RawSockaddrNetlink": TypeOf((*syscall.RawSockaddrNetlink)(nil)).Elem(), + "RawSockaddrUnix": TypeOf((*syscall.RawSockaddrUnix)(nil)).Elem(), + "Rlimit": TypeOf((*syscall.Rlimit)(nil)).Elem(), + "RtAttr": TypeOf((*syscall.RtAttr)(nil)).Elem(), + "RtGenmsg": TypeOf((*syscall.RtGenmsg)(nil)).Elem(), + "RtMsg": TypeOf((*syscall.RtMsg)(nil)).Elem(), + "RtNexthop": TypeOf((*syscall.RtNexthop)(nil)).Elem(), + "Rusage": TypeOf((*syscall.Rusage)(nil)).Elem(), + "Signal": TypeOf((*syscall.Signal)(nil)).Elem(), + "SockFilter": TypeOf((*syscall.SockFilter)(nil)).Elem(), + "SockFprog": TypeOf((*syscall.SockFprog)(nil)).Elem(), + "Sockaddr": TypeOf((*syscall.Sockaddr)(nil)).Elem(), + "SockaddrInet4": TypeOf((*syscall.SockaddrInet4)(nil)).Elem(), + "SockaddrInet6": TypeOf((*syscall.SockaddrInet6)(nil)).Elem(), + "SockaddrLinklayer": TypeOf((*syscall.SockaddrLinklayer)(nil)).Elem(), + "SockaddrNetlink": TypeOf((*syscall.SockaddrNetlink)(nil)).Elem(), + "SockaddrUnix": TypeOf((*syscall.SockaddrUnix)(nil)).Elem(), + "SocketControlMessage": TypeOf((*syscall.SocketControlMessage)(nil)).Elem(), + "Stat_t": TypeOf((*syscall.Stat_t)(nil)).Elem(), + "Statfs_t": TypeOf((*syscall.Statfs_t)(nil)).Elem(), + "SysProcAttr": TypeOf((*syscall.SysProcAttr)(nil)).Elem(), + "SysProcIDMap": TypeOf((*syscall.SysProcIDMap)(nil)).Elem(), + "Sysinfo_t": TypeOf((*syscall.Sysinfo_t)(nil)).Elem(), + "TCPInfo": TypeOf((*syscall.TCPInfo)(nil)).Elem(), + "Termios": TypeOf((*syscall.Termios)(nil)).Elem(), + "Time_t": TypeOf((*syscall.Time_t)(nil)).Elem(), + "Timespec": TypeOf((*syscall.Timespec)(nil)).Elem(), + "Timeval": TypeOf((*syscall.Timeval)(nil)).Elem(), + "Timex": TypeOf((*syscall.Timex)(nil)).Elem(), + "Tms": TypeOf((*syscall.Tms)(nil)).Elem(), + "Ucred": TypeOf((*syscall.Ucred)(nil)).Elem(), + "Ustat_t": TypeOf((*syscall.Ustat_t)(nil)).Elem(), + "Utimbuf": TypeOf((*syscall.Utimbuf)(nil)).Elem(), + "Utsname": TypeOf((*syscall.Utsname)(nil)).Elem(), + "WaitStatus": TypeOf((*syscall.WaitStatus)(nil)).Elem(), + },Untypeds: map[string]string{ + "AF_ALG": "int:38", + "AF_APPLETALK": "int:5", + "AF_ASH": "int:18", + "AF_ATMPVC": "int:8", + "AF_ATMSVC": "int:20", + "AF_AX25": "int:3", + "AF_BLUETOOTH": "int:31", + "AF_BRIDGE": "int:7", + "AF_CAIF": "int:37", + "AF_CAN": "int:29", + "AF_DECnet": "int:12", + "AF_ECONET": "int:19", + "AF_FILE": "int:1", + "AF_IEEE802154": "int:36", + "AF_INET": "int:2", + "AF_INET6": "int:10", + "AF_IPX": "int:4", + "AF_IRDA": "int:23", + "AF_ISDN": "int:34", + "AF_IUCV": "int:32", + "AF_KEY": "int:15", + "AF_LLC": "int:26", + "AF_LOCAL": "int:1", + "AF_MAX": "int:39", + "AF_NETBEUI": "int:13", + "AF_NETLINK": "int:16", + "AF_NETROM": "int:6", + "AF_PACKET": "int:17", + "AF_PHONET": "int:35", + "AF_PPPOX": "int:24", + "AF_RDS": "int:21", + "AF_ROSE": "int:11", + "AF_ROUTE": "int:16", + "AF_RXRPC": "int:33", + "AF_SECURITY": "int:14", + "AF_SNA": "int:22", + "AF_TIPC": "int:30", + "AF_UNIX": "int:1", + "AF_UNSPEC": "int:0", + "AF_WANPIPE": "int:25", + "AF_X25": "int:9", + "ARPHRD_ADAPT": "int:264", + "ARPHRD_APPLETLK": "int:8", + "ARPHRD_ARCNET": "int:7", + "ARPHRD_ASH": "int:781", + "ARPHRD_ATM": "int:19", + "ARPHRD_AX25": "int:3", + "ARPHRD_BIF": "int:775", + "ARPHRD_CHAOS": "int:5", + "ARPHRD_CISCO": "int:513", + "ARPHRD_CSLIP": "int:257", + "ARPHRD_CSLIP6": "int:259", + "ARPHRD_DDCMP": "int:517", + "ARPHRD_DLCI": "int:15", + "ARPHRD_ECONET": "int:782", + "ARPHRD_EETHER": "int:2", + "ARPHRD_ETHER": "int:1", + "ARPHRD_EUI64": "int:27", + "ARPHRD_FCAL": "int:785", + "ARPHRD_FCFABRIC": "int:787", + "ARPHRD_FCPL": "int:786", + "ARPHRD_FCPP": "int:784", + "ARPHRD_FDDI": "int:774", + "ARPHRD_FRAD": "int:770", + "ARPHRD_HDLC": "int:513", + "ARPHRD_HIPPI": "int:780", + "ARPHRD_HWX25": "int:272", + "ARPHRD_IEEE1394": "int:24", + "ARPHRD_IEEE802": "int:6", + "ARPHRD_IEEE80211": "int:801", + "ARPHRD_IEEE80211_PRISM": "int:802", + "ARPHRD_IEEE80211_RADIOTAP": "int:803", + "ARPHRD_IEEE802154": "int:804", + "ARPHRD_IEEE802154_PHY": "int:805", + "ARPHRD_IEEE802_TR": "int:800", + "ARPHRD_INFINIBAND": "int:32", + "ARPHRD_IPDDP": "int:777", + "ARPHRD_IPGRE": "int:778", + "ARPHRD_IRDA": "int:783", + "ARPHRD_LAPB": "int:516", + "ARPHRD_LOCALTLK": "int:773", + "ARPHRD_LOOPBACK": "int:772", + "ARPHRD_METRICOM": "int:23", + "ARPHRD_NETROM": "int:0", + "ARPHRD_NONE": "int:65534", + "ARPHRD_PIMREG": "int:779", + "ARPHRD_PPP": "int:512", + "ARPHRD_PRONET": "int:4", + "ARPHRD_RAWHDLC": "int:518", + "ARPHRD_ROSE": "int:270", + "ARPHRD_RSRVD": "int:260", + "ARPHRD_SIT": "int:776", + "ARPHRD_SKIP": "int:771", + "ARPHRD_SLIP": "int:256", + "ARPHRD_SLIP6": "int:258", + "ARPHRD_TUNNEL": "int:768", + "ARPHRD_TUNNEL6": "int:769", + "ARPHRD_VOID": "int:65535", + "ARPHRD_X25": "int:271", + "B0": "int:0", + "B1000000": "int:4104", + "B110": "int:3", + "B115200": "int:4098", + "B1152000": "int:4105", + "B1200": "int:9", + "B134": "int:4", + "B150": "int:5", + "B1500000": "int:4106", + "B1800": "int:10", + "B19200": "int:14", + "B200": "int:6", + "B2000000": "int:4107", + "B230400": "int:4099", + "B2400": "int:11", + "B2500000": "int:4108", + "B300": "int:7", + "B3000000": "int:4109", + "B3500000": "int:4110", + "B38400": "int:15", + "B4000000": "int:4111", + "B460800": "int:4100", + "B4800": "int:12", + "B50": "int:1", + "B500000": "int:4101", + "B57600": "int:4097", + "B576000": "int:4102", + "B600": "int:8", + "B75": "int:2", + "B921600": "int:4103", + "B9600": "int:13", + "BPF_A": "int:16", + "BPF_ABS": "int:32", + "BPF_ADD": "int:0", + "BPF_ALU": "int:4", + "BPF_AND": "int:80", + "BPF_B": "int:16", + "BPF_DIV": "int:48", + "BPF_H": "int:8", + "BPF_IMM": "int:0", + "BPF_IND": "int:64", + "BPF_JA": "int:0", + "BPF_JEQ": "int:16", + "BPF_JGE": "int:48", + "BPF_JGT": "int:32", + "BPF_JMP": "int:5", + "BPF_JSET": "int:64", + "BPF_K": "int:0", + "BPF_LD": "int:0", + "BPF_LDX": "int:1", + "BPF_LEN": "int:128", + "BPF_LSH": "int:96", + "BPF_MAJOR_VERSION": "int:1", + "BPF_MAXINSNS": "int:4096", + "BPF_MEM": "int:96", + "BPF_MEMWORDS": "int:16", + "BPF_MINOR_VERSION": "int:1", + "BPF_MISC": "int:7", + "BPF_MSH": "int:160", + "BPF_MUL": "int:32", + "BPF_NEG": "int:128", + "BPF_OR": "int:64", + "BPF_RET": "int:6", + "BPF_RSH": "int:112", + "BPF_ST": "int:2", + "BPF_STX": "int:3", + "BPF_SUB": "int:16", + "BPF_TAX": "int:0", + "BPF_TXA": "int:128", + "BPF_W": "int:0", + "BPF_X": "int:8", + "BRKINT": "int:2", + "CLOCAL": "int:2048", + "CLONE_CHILD_CLEARTID": "int:2097152", + "CLONE_CHILD_SETTID": "int:16777216", + "CLONE_DETACHED": "int:4194304", + "CLONE_FILES": "int:1024", + "CLONE_FS": "int:512", + "CLONE_IO": "int:2147483648", + "CLONE_NEWIPC": "int:134217728", + "CLONE_NEWNET": "int:1073741824", + "CLONE_NEWNS": "int:131072", + "CLONE_NEWPID": "int:536870912", + "CLONE_NEWUSER": "int:268435456", + "CLONE_NEWUTS": "int:67108864", + "CLONE_PARENT": "int:32768", + "CLONE_PARENT_SETTID": "int:1048576", + "CLONE_PTRACE": "int:8192", + "CLONE_SETTLS": "int:524288", + "CLONE_SIGHAND": "int:2048", + "CLONE_SYSVSEM": "int:262144", + "CLONE_THREAD": "int:65536", + "CLONE_UNTRACED": "int:8388608", + "CLONE_VFORK": "int:16384", + "CLONE_VM": "int:256", + "CREAD": "int:128", + "CS5": "int:0", + "CS6": "int:16", + "CS7": "int:32", + "CS8": "int:48", + "CSIZE": "int:48", + "CSTOPB": "int:64", + "DT_BLK": "int:6", + "DT_CHR": "int:2", + "DT_DIR": "int:4", + "DT_FIFO": "int:1", + "DT_LNK": "int:10", + "DT_REG": "int:8", + "DT_SOCK": "int:12", + "DT_UNKNOWN": "int:0", + "DT_WHT": "int:14", + "ECHO": "int:8", + "ECHOCTL": "int:512", + "ECHOE": "int:16", + "ECHOK": "int:32", + "ECHOKE": "int:2048", + "ECHONL": "int:64", + "ECHOPRT": "int:1024", + "EPOLLERR": "int:8", + "EPOLLET": "int:-2147483648", + "EPOLLHUP": "int:16", + "EPOLLIN": "int:1", + "EPOLLMSG": "int:1024", + "EPOLLONESHOT": "int:1073741824", + "EPOLLOUT": "int:4", + "EPOLLPRI": "int:2", + "EPOLLRDBAND": "int:128", + "EPOLLRDHUP": "int:8192", + "EPOLLRDNORM": "int:64", + "EPOLLWRBAND": "int:512", + "EPOLLWRNORM": "int:256", + "EPOLL_CLOEXEC": "int:524288", + "EPOLL_CTL_ADD": "int:1", + "EPOLL_CTL_DEL": "int:2", + "EPOLL_CTL_MOD": "int:3", + "EPOLL_NONBLOCK": "int:2048", + "ETH_P_1588": "int:35063", + "ETH_P_8021Q": "int:33024", + "ETH_P_802_2": "int:4", + "ETH_P_802_3": "int:1", + "ETH_P_AARP": "int:33011", + "ETH_P_ALL": "int:3", + "ETH_P_AOE": "int:34978", + "ETH_P_ARCNET": "int:26", + "ETH_P_ARP": "int:2054", + "ETH_P_ATALK": "int:32923", + "ETH_P_ATMFATE": "int:34948", + "ETH_P_ATMMPOA": "int:34892", + "ETH_P_AX25": "int:2", + "ETH_P_BPQ": "int:2303", + "ETH_P_CAIF": "int:247", + "ETH_P_CAN": "int:12", + "ETH_P_CONTROL": "int:22", + "ETH_P_CUST": "int:24582", + "ETH_P_DDCMP": "int:6", + "ETH_P_DEC": "int:24576", + "ETH_P_DIAG": "int:24581", + "ETH_P_DNA_DL": "int:24577", + "ETH_P_DNA_RC": "int:24578", + "ETH_P_DNA_RT": "int:24579", + "ETH_P_DSA": "int:27", + "ETH_P_ECONET": "int:24", + "ETH_P_EDSA": "int:56026", + "ETH_P_FCOE": "int:35078", + "ETH_P_FIP": "int:35092", + "ETH_P_HDLC": "int:25", + "ETH_P_IEEE802154": "int:246", + "ETH_P_IEEEPUP": "int:2560", + "ETH_P_IEEEPUPAT": "int:2561", + "ETH_P_IP": "int:2048", + "ETH_P_IPV6": "int:34525", + "ETH_P_IPX": "int:33079", + "ETH_P_IRDA": "int:23", + "ETH_P_LAT": "int:24580", + "ETH_P_LINK_CTL": "int:34924", + "ETH_P_LOCALTALK": "int:9", + "ETH_P_LOOP": "int:96", + "ETH_P_MOBITEX": "int:21", + "ETH_P_MPLS_MC": "int:34888", + "ETH_P_MPLS_UC": "int:34887", + "ETH_P_PAE": "int:34958", + "ETH_P_PAUSE": "int:34824", + "ETH_P_PHONET": "int:245", + "ETH_P_PPPTALK": "int:16", + "ETH_P_PPP_DISC": "int:34915", + "ETH_P_PPP_MP": "int:8", + "ETH_P_PPP_SES": "int:34916", + "ETH_P_PUP": "int:512", + "ETH_P_PUPAT": "int:513", + "ETH_P_RARP": "int:32821", + "ETH_P_SCA": "int:24583", + "ETH_P_SLOW": "int:34825", + "ETH_P_SNAP": "int:5", + "ETH_P_TEB": "int:25944", + "ETH_P_TIPC": "int:35018", + "ETH_P_TRAILER": "int:28", + "ETH_P_TR_802_2": "int:17", + "ETH_P_WAN_PPP": "int:7", + "ETH_P_WCCP": "int:34878", + "ETH_P_X25": "int:2053", + "FD_CLOEXEC": "int:1", + "FD_SETSIZE": "int:1024", + "FLUSHO": "int:4096", + "F_DUPFD": "int:0", + "F_DUPFD_CLOEXEC": "int:1030", + "F_EXLCK": "int:4", + "F_GETFD": "int:1", + "F_GETFL": "int:3", + "F_GETLEASE": "int:1025", + "F_GETLK": "int:12", + "F_GETLK64": "int:12", + "F_GETOWN": "int:9", + "F_GETOWN_EX": "int:16", + "F_GETPIPE_SZ": "int:1032", + "F_GETSIG": "int:11", + "F_LOCK": "int:1", + "F_NOTIFY": "int:1026", + "F_OK": "int:0", + "F_RDLCK": "int:0", + "F_SETFD": "int:2", + "F_SETFL": "int:4", + "F_SETLEASE": "int:1024", + "F_SETLK": "int:13", + "F_SETLK64": "int:13", + "F_SETLKW": "int:14", + "F_SETLKW64": "int:14", + "F_SETOWN": "int:8", + "F_SETOWN_EX": "int:15", + "F_SETPIPE_SZ": "int:1031", + "F_SETSIG": "int:10", + "F_SHLCK": "int:8", + "F_TEST": "int:3", + "F_TLOCK": "int:2", + "F_ULOCK": "int:0", + "F_UNLCK": "int:2", + "F_WRLCK": "int:1", + "HUPCL": "int:1024", + "ICANON": "int:2", + "ICMPV6_FILTER": "int:1", + "ICRNL": "int:256", + "IEXTEN": "int:32768", + "IFA_ADDRESS": "int:1", + "IFA_ANYCAST": "int:5", + "IFA_BROADCAST": "int:4", + "IFA_CACHEINFO": "int:6", + "IFA_F_DADFAILED": "int:8", + "IFA_F_DEPRECATED": "int:32", + "IFA_F_HOMEADDRESS": "int:16", + "IFA_F_NODAD": "int:2", + "IFA_F_OPTIMISTIC": "int:4", + "IFA_F_PERMANENT": "int:128", + "IFA_F_SECONDARY": "int:1", + "IFA_F_TEMPORARY": "int:1", + "IFA_F_TENTATIVE": "int:64", + "IFA_LABEL": "int:3", + "IFA_LOCAL": "int:2", + "IFA_MAX": "int:7", + "IFA_MULTICAST": "int:7", + "IFA_UNSPEC": "int:0", + "IFF_ALLMULTI": "int:512", + "IFF_AUTOMEDIA": "int:16384", + "IFF_BROADCAST": "int:2", + "IFF_DEBUG": "int:4", + "IFF_DYNAMIC": "int:32768", + "IFF_LOOPBACK": "int:8", + "IFF_MASTER": "int:1024", + "IFF_MULTICAST": "int:4096", + "IFF_NOARP": "int:128", + "IFF_NOTRAILERS": "int:32", + "IFF_NO_PI": "int:4096", + "IFF_ONE_QUEUE": "int:8192", + "IFF_POINTOPOINT": "int:16", + "IFF_PORTSEL": "int:8192", + "IFF_PROMISC": "int:256", + "IFF_RUNNING": "int:64", + "IFF_SLAVE": "int:2048", + "IFF_TAP": "int:2", + "IFF_TUN": "int:1", + "IFF_TUN_EXCL": "int:32768", + "IFF_UP": "int:1", + "IFF_VNET_HDR": "int:16384", + "IFLA_ADDRESS": "int:1", + "IFLA_BROADCAST": "int:2", + "IFLA_COST": "int:8", + "IFLA_IFALIAS": "int:20", + "IFLA_IFNAME": "int:3", + "IFLA_LINK": "int:5", + "IFLA_LINKINFO": "int:18", + "IFLA_LINKMODE": "int:17", + "IFLA_MAP": "int:14", + "IFLA_MASTER": "int:10", + "IFLA_MAX": "int:29", + "IFLA_MTU": "int:4", + "IFLA_NET_NS_PID": "int:19", + "IFLA_OPERSTATE": "int:16", + "IFLA_PRIORITY": "int:9", + "IFLA_PROTINFO": "int:12", + "IFLA_QDISC": "int:6", + "IFLA_STATS": "int:7", + "IFLA_TXQLEN": "int:13", + "IFLA_UNSPEC": "int:0", + "IFLA_WEIGHT": "int:15", + "IFLA_WIRELESS": "int:11", + "IFNAMSIZ": "int:16", + "IGNBRK": "int:1", + "IGNCR": "int:128", + "IGNPAR": "int:4", + "IMAXBEL": "int:8192", + "INLCR": "int:64", + "INPCK": "int:16", + "IN_ACCESS": "int:1", + "IN_ALL_EVENTS": "int:4095", + "IN_ATTRIB": "int:4", + "IN_CLASSA_HOST": "int:16777215", + "IN_CLASSA_MAX": "int:128", + "IN_CLASSA_NET": "int:4278190080", + "IN_CLASSA_NSHIFT": "int:24", + "IN_CLASSB_HOST": "int:65535", + "IN_CLASSB_MAX": "int:65536", + "IN_CLASSB_NET": "int:4294901760", + "IN_CLASSB_NSHIFT": "int:16", + "IN_CLASSC_HOST": "int:255", + "IN_CLASSC_NET": "int:4294967040", + "IN_CLASSC_NSHIFT": "int:8", + "IN_CLOEXEC": "int:524288", + "IN_CLOSE": "int:24", + "IN_CLOSE_NOWRITE": "int:16", + "IN_CLOSE_WRITE": "int:8", + "IN_CREATE": "int:256", + "IN_DELETE": "int:512", + "IN_DELETE_SELF": "int:1024", + "IN_DONT_FOLLOW": "int:33554432", + "IN_EXCL_UNLINK": "int:67108864", + "IN_IGNORED": "int:32768", + "IN_ISDIR": "int:1073741824", + "IN_LOOPBACKNET": "int:127", + "IN_MASK_ADD": "int:536870912", + "IN_MODIFY": "int:2", + "IN_MOVE": "int:192", + "IN_MOVED_FROM": "int:64", + "IN_MOVED_TO": "int:128", + "IN_MOVE_SELF": "int:2048", + "IN_NONBLOCK": "int:2048", + "IN_ONESHOT": "int:2147483648", + "IN_ONLYDIR": "int:16777216", + "IN_OPEN": "int:32", + "IN_Q_OVERFLOW": "int:16384", + "IN_UNMOUNT": "int:8192", + "IPPROTO_AH": "int:51", + "IPPROTO_COMP": "int:108", + "IPPROTO_DCCP": "int:33", + "IPPROTO_DSTOPTS": "int:60", + "IPPROTO_EGP": "int:8", + "IPPROTO_ENCAP": "int:98", + "IPPROTO_ESP": "int:50", + "IPPROTO_FRAGMENT": "int:44", + "IPPROTO_GRE": "int:47", + "IPPROTO_HOPOPTS": "int:0", + "IPPROTO_ICMP": "int:1", + "IPPROTO_ICMPV6": "int:58", + "IPPROTO_IDP": "int:22", + "IPPROTO_IGMP": "int:2", + "IPPROTO_IP": "int:0", + "IPPROTO_IPIP": "int:4", + "IPPROTO_IPV6": "int:41", + "IPPROTO_MTP": "int:92", + "IPPROTO_NONE": "int:59", + "IPPROTO_PIM": "int:103", + "IPPROTO_PUP": "int:12", + "IPPROTO_RAW": "int:255", + "IPPROTO_ROUTING": "int:43", + "IPPROTO_RSVP": "int:46", + "IPPROTO_SCTP": "int:132", + "IPPROTO_TCP": "int:6", + "IPPROTO_TP": "int:29", + "IPPROTO_UDP": "int:17", + "IPPROTO_UDPLITE": "int:136", + "IPV6_2292DSTOPTS": "int:4", + "IPV6_2292HOPLIMIT": "int:8", + "IPV6_2292HOPOPTS": "int:3", + "IPV6_2292PKTINFO": "int:2", + "IPV6_2292PKTOPTIONS": "int:6", + "IPV6_2292RTHDR": "int:5", + "IPV6_ADDRFORM": "int:1", + "IPV6_ADD_MEMBERSHIP": "int:20", + "IPV6_AUTHHDR": "int:10", + "IPV6_CHECKSUM": "int:7", + "IPV6_DROP_MEMBERSHIP": "int:21", + "IPV6_DSTOPTS": "int:59", + "IPV6_HOPLIMIT": "int:52", + "IPV6_HOPOPTS": "int:54", + "IPV6_IPSEC_POLICY": "int:34", + "IPV6_JOIN_ANYCAST": "int:27", + "IPV6_JOIN_GROUP": "int:20", + "IPV6_LEAVE_ANYCAST": "int:28", + "IPV6_LEAVE_GROUP": "int:21", + "IPV6_MTU": "int:24", + "IPV6_MTU_DISCOVER": "int:23", + "IPV6_MULTICAST_HOPS": "int:18", + "IPV6_MULTICAST_IF": "int:17", + "IPV6_MULTICAST_LOOP": "int:19", + "IPV6_NEXTHOP": "int:9", + "IPV6_PKTINFO": "int:50", + "IPV6_PMTUDISC_DO": "int:2", + "IPV6_PMTUDISC_DONT": "int:0", + "IPV6_PMTUDISC_PROBE": "int:3", + "IPV6_PMTUDISC_WANT": "int:1", + "IPV6_RECVDSTOPTS": "int:58", + "IPV6_RECVERR": "int:25", + "IPV6_RECVHOPLIMIT": "int:51", + "IPV6_RECVHOPOPTS": "int:53", + "IPV6_RECVPKTINFO": "int:49", + "IPV6_RECVRTHDR": "int:56", + "IPV6_RECVTCLASS": "int:66", + "IPV6_ROUTER_ALERT": "int:22", + "IPV6_RTHDR": "int:57", + "IPV6_RTHDRDSTOPTS": "int:55", + "IPV6_RTHDR_LOOSE": "int:0", + "IPV6_RTHDR_STRICT": "int:1", + "IPV6_RTHDR_TYPE_0": "int:0", + "IPV6_RXDSTOPTS": "int:59", + "IPV6_RXHOPOPTS": "int:54", + "IPV6_TCLASS": "int:67", + "IPV6_UNICAST_HOPS": "int:16", + "IPV6_V6ONLY": "int:26", + "IPV6_XFRM_POLICY": "int:35", + "IP_ADD_MEMBERSHIP": "int:35", + "IP_ADD_SOURCE_MEMBERSHIP": "int:39", + "IP_BLOCK_SOURCE": "int:38", + "IP_DEFAULT_MULTICAST_LOOP": "int:1", + "IP_DEFAULT_MULTICAST_TTL": "int:1", + "IP_DF": "int:16384", + "IP_DROP_MEMBERSHIP": "int:36", + "IP_DROP_SOURCE_MEMBERSHIP": "int:40", + "IP_FREEBIND": "int:15", + "IP_HDRINCL": "int:3", + "IP_IPSEC_POLICY": "int:16", + "IP_MAXPACKET": "int:65535", + "IP_MAX_MEMBERSHIPS": "int:20", + "IP_MF": "int:8192", + "IP_MINTTL": "int:21", + "IP_MSFILTER": "int:41", + "IP_MSS": "int:576", + "IP_MTU": "int:14", + "IP_MTU_DISCOVER": "int:10", + "IP_MULTICAST_IF": "int:32", + "IP_MULTICAST_LOOP": "int:34", + "IP_MULTICAST_TTL": "int:33", + "IP_OFFMASK": "int:8191", + "IP_OPTIONS": "int:4", + "IP_ORIGDSTADDR": "int:20", + "IP_PASSSEC": "int:18", + "IP_PKTINFO": "int:8", + "IP_PKTOPTIONS": "int:9", + "IP_PMTUDISC": "int:10", + "IP_PMTUDISC_DO": "int:2", + "IP_PMTUDISC_DONT": "int:0", + "IP_PMTUDISC_PROBE": "int:3", + "IP_PMTUDISC_WANT": "int:1", + "IP_RECVERR": "int:11", + "IP_RECVOPTS": "int:6", + "IP_RECVORIGDSTADDR": "int:20", + "IP_RECVRETOPTS": "int:7", + "IP_RECVTOS": "int:13", + "IP_RECVTTL": "int:12", + "IP_RETOPTS": "int:7", + "IP_RF": "int:32768", + "IP_ROUTER_ALERT": "int:5", + "IP_TOS": "int:1", + "IP_TRANSPARENT": "int:19", + "IP_TTL": "int:2", + "IP_UNBLOCK_SOURCE": "int:37", + "IP_XFRM_POLICY": "int:17", + "ISIG": "int:1", + "ISTRIP": "int:32", + "IUCLC": "int:512", + "IUTF8": "int:16384", + "IXANY": "int:2048", + "IXOFF": "int:4096", + "IXON": "int:1024", + "ImplementsGetwd": "bool:true", + "LINUX_REBOOT_CMD_CAD_OFF": "int:0", + "LINUX_REBOOT_CMD_CAD_ON": "int:2309737967", + "LINUX_REBOOT_CMD_HALT": "int:3454992675", + "LINUX_REBOOT_CMD_KEXEC": "int:1163412803", + "LINUX_REBOOT_CMD_POWER_OFF": "int:1126301404", + "LINUX_REBOOT_CMD_RESTART": "int:19088743", + "LINUX_REBOOT_CMD_RESTART2": "int:2712847316", + "LINUX_REBOOT_CMD_SW_SUSPEND": "int:3489725666", + "LINUX_REBOOT_MAGIC1": "int:4276215469", + "LINUX_REBOOT_MAGIC2": "int:672274793", + "LOCK_EX": "int:2", + "LOCK_NB": "int:4", + "LOCK_SH": "int:1", + "LOCK_UN": "int:8", + "MADV_DOFORK": "int:11", + "MADV_DONTFORK": "int:10", + "MADV_DONTNEED": "int:4", + "MADV_HUGEPAGE": "int:14", + "MADV_HWPOISON": "int:100", + "MADV_MERGEABLE": "int:12", + "MADV_NOHUGEPAGE": "int:15", + "MADV_NORMAL": "int:0", + "MADV_RANDOM": "int:1", + "MADV_REMOVE": "int:9", + "MADV_SEQUENTIAL": "int:2", + "MADV_UNMERGEABLE": "int:13", + "MADV_WILLNEED": "int:3", + "MAP_32BIT": "int:64", + "MAP_ANON": "int:32", + "MAP_ANONYMOUS": "int:32", + "MAP_DENYWRITE": "int:2048", + "MAP_EXECUTABLE": "int:4096", + "MAP_FILE": "int:0", + "MAP_FIXED": "int:16", + "MAP_GROWSDOWN": "int:256", + "MAP_HUGETLB": "int:262144", + "MAP_LOCKED": "int:8192", + "MAP_NONBLOCK": "int:65536", + "MAP_NORESERVE": "int:16384", + "MAP_POPULATE": "int:32768", + "MAP_PRIVATE": "int:2", + "MAP_SHARED": "int:1", + "MAP_STACK": "int:131072", + "MAP_TYPE": "int:15", + "MCL_CURRENT": "int:1", + "MCL_FUTURE": "int:2", + "MNT_DETACH": "int:2", + "MNT_EXPIRE": "int:4", + "MNT_FORCE": "int:1", + "MSG_CMSG_CLOEXEC": "int:1073741824", + "MSG_CONFIRM": "int:2048", + "MSG_CTRUNC": "int:8", + "MSG_DONTROUTE": "int:4", + "MSG_DONTWAIT": "int:64", + "MSG_EOR": "int:128", + "MSG_ERRQUEUE": "int:8192", + "MSG_FASTOPEN": "int:536870912", + "MSG_FIN": "int:512", + "MSG_MORE": "int:32768", + "MSG_NOSIGNAL": "int:16384", + "MSG_OOB": "int:1", + "MSG_PEEK": "int:2", + "MSG_PROXY": "int:16", + "MSG_RST": "int:4096", + "MSG_SYN": "int:1024", + "MSG_TRUNC": "int:32", + "MSG_TRYHARD": "int:4", + "MSG_WAITALL": "int:256", + "MSG_WAITFORONE": "int:65536", + "MS_ACTIVE": "int:1073741824", + "MS_ASYNC": "int:1", + "MS_BIND": "int:4096", + "MS_DIRSYNC": "int:128", + "MS_INVALIDATE": "int:2", + "MS_I_VERSION": "int:8388608", + "MS_KERNMOUNT": "int:4194304", + "MS_MANDLOCK": "int:64", + "MS_MGC_MSK": "int:4294901760", + "MS_MGC_VAL": "int:3236757504", + "MS_MOVE": "int:8192", + "MS_NOATIME": "int:1024", + "MS_NODEV": "int:4", + "MS_NODIRATIME": "int:2048", + "MS_NOEXEC": "int:8", + "MS_NOSUID": "int:2", + "MS_NOUSER": "int:-2147483648", + "MS_POSIXACL": "int:65536", + "MS_PRIVATE": "int:262144", + "MS_RDONLY": "int:1", + "MS_REC": "int:16384", + "MS_RELATIME": "int:2097152", + "MS_REMOUNT": "int:32", + "MS_RMT_MASK": "int:8388689", + "MS_SHARED": "int:1048576", + "MS_SILENT": "int:32768", + "MS_SLAVE": "int:524288", + "MS_STRICTATIME": "int:16777216", + "MS_SYNC": "int:4", + "MS_SYNCHRONOUS": "int:16", + "MS_UNBINDABLE": "int:131072", + "NAME_MAX": "int:255", + "NETLINK_ADD_MEMBERSHIP": "int:1", + "NETLINK_AUDIT": "int:9", + "NETLINK_BROADCAST_ERROR": "int:4", + "NETLINK_CONNECTOR": "int:11", + "NETLINK_DNRTMSG": "int:14", + "NETLINK_DROP_MEMBERSHIP": "int:2", + "NETLINK_ECRYPTFS": "int:19", + "NETLINK_FIB_LOOKUP": "int:10", + "NETLINK_FIREWALL": "int:3", + "NETLINK_GENERIC": "int:16", + "NETLINK_INET_DIAG": "int:4", + "NETLINK_IP6_FW": "int:13", + "NETLINK_ISCSI": "int:8", + "NETLINK_KOBJECT_UEVENT": "int:15", + "NETLINK_NETFILTER": "int:12", + "NETLINK_NFLOG": "int:5", + "NETLINK_NO_ENOBUFS": "int:5", + "NETLINK_PKTINFO": "int:3", + "NETLINK_ROUTE": "int:0", + "NETLINK_SCSITRANSPORT": "int:18", + "NETLINK_SELINUX": "int:7", + "NETLINK_UNUSED": "int:1", + "NETLINK_USERSOCK": "int:2", + "NETLINK_XFRM": "int:6", + "NLA_ALIGNTO": "int:4", + "NLA_F_NESTED": "int:32768", + "NLA_F_NET_BYTEORDER": "int:16384", + "NLA_HDRLEN": "int:4", + "NLMSG_ALIGNTO": "int:4", + "NLMSG_DONE": "int:3", + "NLMSG_ERROR": "int:2", + "NLMSG_HDRLEN": "int:16", + "NLMSG_MIN_TYPE": "int:16", + "NLMSG_NOOP": "int:1", + "NLMSG_OVERRUN": "int:4", + "NLM_F_ACK": "int:4", + "NLM_F_APPEND": "int:2048", + "NLM_F_ATOMIC": "int:1024", + "NLM_F_CREATE": "int:1024", + "NLM_F_DUMP": "int:768", + "NLM_F_ECHO": "int:8", + "NLM_F_EXCL": "int:512", + "NLM_F_MATCH": "int:512", + "NLM_F_MULTI": "int:2", + "NLM_F_REPLACE": "int:256", + "NLM_F_REQUEST": "int:1", + "NLM_F_ROOT": "int:256", + "NOFLSH": "int:128", + "OCRNL": "int:8", + "OFDEL": "int:128", + "OFILL": "int:64", + "OLCUC": "int:2", + "ONLCR": "int:4", + "ONLRET": "int:32", + "ONOCR": "int:16", + "OPOST": "int:1", + "O_ACCMODE": "int:3", + "O_APPEND": "int:1024", + "O_ASYNC": "int:8192", + "O_CLOEXEC": "int:524288", + "O_CREAT": "int:64", + "O_DIRECT": "int:16384", + "O_DIRECTORY": "int:65536", + "O_DSYNC": "int:4096", + "O_EXCL": "int:128", + "O_FSYNC": "int:1052672", + "O_LARGEFILE": "int:32768", + "O_NDELAY": "int:2048", + "O_NOATIME": "int:262144", + "O_NOCTTY": "int:256", + "O_NOFOLLOW": "int:131072", + "O_NONBLOCK": "int:2048", + "O_RDONLY": "int:0", + "O_RDWR": "int:2", + "O_RSYNC": "int:1052672", + "O_SYNC": "int:1052672", + "O_TRUNC": "int:512", + "O_WRONLY": "int:1", + "PACKET_ADD_MEMBERSHIP": "int:1", + "PACKET_BROADCAST": "int:1", + "PACKET_DROP_MEMBERSHIP": "int:2", + "PACKET_FASTROUTE": "int:6", + "PACKET_HOST": "int:0", + "PACKET_LOOPBACK": "int:5", + "PACKET_MR_ALLMULTI": "int:2", + "PACKET_MR_MULTICAST": "int:0", + "PACKET_MR_PROMISC": "int:1", + "PACKET_MULTICAST": "int:2", + "PACKET_OTHERHOST": "int:3", + "PACKET_OUTGOING": "int:4", + "PACKET_RECV_OUTPUT": "int:3", + "PACKET_RX_RING": "int:5", + "PACKET_STATISTICS": "int:6", + "PARENB": "int:256", + "PARMRK": "int:8", + "PARODD": "int:512", + "PENDIN": "int:16384", + "PRIO_PGRP": "int:1", + "PRIO_PROCESS": "int:0", + "PRIO_USER": "int:2", + "PROT_EXEC": "int:4", + "PROT_GROWSDOWN": "int:16777216", + "PROT_GROWSUP": "int:33554432", + "PROT_NONE": "int:0", + "PROT_READ": "int:1", + "PROT_WRITE": "int:2", + "PR_CAPBSET_DROP": "int:24", + "PR_CAPBSET_READ": "int:23", + "PR_ENDIAN_BIG": "int:0", + "PR_ENDIAN_LITTLE": "int:1", + "PR_ENDIAN_PPC_LITTLE": "int:2", + "PR_FPEMU_NOPRINT": "int:1", + "PR_FPEMU_SIGFPE": "int:2", + "PR_FP_EXC_ASYNC": "int:2", + "PR_FP_EXC_DISABLED": "int:0", + "PR_FP_EXC_DIV": "int:65536", + "PR_FP_EXC_INV": "int:1048576", + "PR_FP_EXC_NONRECOV": "int:1", + "PR_FP_EXC_OVF": "int:131072", + "PR_FP_EXC_PRECISE": "int:3", + "PR_FP_EXC_RES": "int:524288", + "PR_FP_EXC_SW_ENABLE": "int:128", + "PR_FP_EXC_UND": "int:262144", + "PR_GET_DUMPABLE": "int:3", + "PR_GET_ENDIAN": "int:19", + "PR_GET_FPEMU": "int:9", + "PR_GET_FPEXC": "int:11", + "PR_GET_KEEPCAPS": "int:7", + "PR_GET_NAME": "int:16", + "PR_GET_PDEATHSIG": "int:2", + "PR_GET_SECCOMP": "int:21", + "PR_GET_SECUREBITS": "int:27", + "PR_GET_TIMERSLACK": "int:30", + "PR_GET_TIMING": "int:13", + "PR_GET_TSC": "int:25", + "PR_GET_UNALIGN": "int:5", + "PR_MCE_KILL": "int:33", + "PR_MCE_KILL_CLEAR": "int:0", + "PR_MCE_KILL_DEFAULT": "int:2", + "PR_MCE_KILL_EARLY": "int:1", + "PR_MCE_KILL_GET": "int:34", + "PR_MCE_KILL_LATE": "int:0", + "PR_MCE_KILL_SET": "int:1", + "PR_SET_DUMPABLE": "int:4", + "PR_SET_ENDIAN": "int:20", + "PR_SET_FPEMU": "int:10", + "PR_SET_FPEXC": "int:12", + "PR_SET_KEEPCAPS": "int:8", + "PR_SET_NAME": "int:15", + "PR_SET_PDEATHSIG": "int:1", + "PR_SET_PTRACER": "int:1499557217", + "PR_SET_SECCOMP": "int:22", + "PR_SET_SECUREBITS": "int:28", + "PR_SET_TIMERSLACK": "int:29", + "PR_SET_TIMING": "int:14", + "PR_SET_TSC": "int:26", + "PR_SET_UNALIGN": "int:6", + "PR_TASK_PERF_EVENTS_DISABLE": "int:31", + "PR_TASK_PERF_EVENTS_ENABLE": "int:32", + "PR_TIMING_STATISTICAL": "int:0", + "PR_TIMING_TIMESTAMP": "int:1", + "PR_TSC_ENABLE": "int:1", + "PR_TSC_SIGSEGV": "int:2", + "PR_UNALIGN_NOPRINT": "int:1", + "PR_UNALIGN_SIGBUS": "int:2", + "PTRACE_ATTACH": "int:16", + "PTRACE_CONT": "int:7", + "PTRACE_DETACH": "int:17", + "PTRACE_EVENT_CLONE": "int:3", + "PTRACE_EVENT_EXEC": "int:4", + "PTRACE_EVENT_EXIT": "int:6", + "PTRACE_EVENT_FORK": "int:1", + "PTRACE_EVENT_VFORK": "int:2", + "PTRACE_EVENT_VFORK_DONE": "int:5", + "PTRACE_GETEVENTMSG": "int:16897", + "PTRACE_GETFPREGS": "int:14", + "PTRACE_GETFPXREGS": "int:18", + "PTRACE_GETREGS": "int:12", + "PTRACE_GETREGSET": "int:16900", + "PTRACE_GETSIGINFO": "int:16898", + "PTRACE_GET_THREAD_AREA": "int:25", + "PTRACE_KILL": "int:8", + "PTRACE_OLDSETOPTIONS": "int:21", + "PTRACE_O_MASK": "int:127", + "PTRACE_O_TRACECLONE": "int:8", + "PTRACE_O_TRACEEXEC": "int:16", + "PTRACE_O_TRACEEXIT": "int:64", + "PTRACE_O_TRACEFORK": "int:2", + "PTRACE_O_TRACESYSGOOD": "int:1", + "PTRACE_O_TRACEVFORK": "int:4", + "PTRACE_O_TRACEVFORKDONE": "int:32", + "PTRACE_PEEKDATA": "int:2", + "PTRACE_PEEKTEXT": "int:1", + "PTRACE_PEEKUSR": "int:3", + "PTRACE_POKEDATA": "int:5", + "PTRACE_POKETEXT": "int:4", + "PTRACE_POKEUSR": "int:6", + "PTRACE_SETFPREGS": "int:15", + "PTRACE_SETFPXREGS": "int:19", + "PTRACE_SETOPTIONS": "int:16896", + "PTRACE_SETREGS": "int:13", + "PTRACE_SETREGSET": "int:16901", + "PTRACE_SETSIGINFO": "int:16899", + "PTRACE_SET_THREAD_AREA": "int:26", + "PTRACE_SINGLEBLOCK": "int:33", + "PTRACE_SINGLESTEP": "int:9", + "PTRACE_SYSCALL": "int:24", + "PTRACE_SYSEMU": "int:31", + "PTRACE_SYSEMU_SINGLESTEP": "int:32", + "PTRACE_TRACEME": "int:0", + "PathMax": "int:4096", + "RLIMIT_AS": "int:9", + "RLIMIT_CORE": "int:4", + "RLIMIT_CPU": "int:0", + "RLIMIT_DATA": "int:2", + "RLIMIT_FSIZE": "int:1", + "RLIMIT_NOFILE": "int:7", + "RLIMIT_STACK": "int:3", + "RLIM_INFINITY": "int:-1", + "RTAX_ADVMSS": "int:8", + "RTAX_CWND": "int:7", + "RTAX_FEATURES": "int:12", + "RTAX_FEATURE_ALLFRAG": "int:8", + "RTAX_FEATURE_ECN": "int:1", + "RTAX_FEATURE_SACK": "int:2", + "RTAX_FEATURE_TIMESTAMP": "int:4", + "RTAX_HOPLIMIT": "int:10", + "RTAX_INITCWND": "int:11", + "RTAX_INITRWND": "int:14", + "RTAX_LOCK": "int:1", + "RTAX_MAX": "int:14", + "RTAX_MTU": "int:2", + "RTAX_REORDERING": "int:9", + "RTAX_RTO_MIN": "int:13", + "RTAX_RTT": "int:4", + "RTAX_RTTVAR": "int:5", + "RTAX_SSTHRESH": "int:6", + "RTAX_UNSPEC": "int:0", + "RTAX_WINDOW": "int:3", + "RTA_ALIGNTO": "int:4", + "RTA_CACHEINFO": "int:12", + "RTA_DST": "int:1", + "RTA_FLOW": "int:11", + "RTA_GATEWAY": "int:5", + "RTA_IIF": "int:3", + "RTA_MAX": "int:16", + "RTA_METRICS": "int:8", + "RTA_MULTIPATH": "int:9", + "RTA_OIF": "int:4", + "RTA_PREFSRC": "int:7", + "RTA_PRIORITY": "int:6", + "RTA_SRC": "int:2", + "RTA_TABLE": "int:15", + "RTA_UNSPEC": "int:0", + "RTCF_DIRECTSRC": "int:67108864", + "RTCF_DOREDIRECT": "int:16777216", + "RTCF_LOG": "int:33554432", + "RTCF_MASQ": "int:4194304", + "RTCF_NAT": "int:8388608", + "RTCF_VALVE": "int:2097152", + "RTF_ADDRCLASSMASK": "int:4160749568", + "RTF_ADDRCONF": "int:262144", + "RTF_ALLONLINK": "int:131072", + "RTF_BROADCAST": "int:268435456", + "RTF_CACHE": "int:16777216", + "RTF_DEFAULT": "int:65536", + "RTF_DYNAMIC": "int:16", + "RTF_FLOW": "int:33554432", + "RTF_GATEWAY": "int:2", + "RTF_HOST": "int:4", + "RTF_INTERFACE": "int:1073741824", + "RTF_IRTT": "int:256", + "RTF_LINKRT": "int:1048576", + "RTF_LOCAL": "int:2147483648", + "RTF_MODIFIED": "int:32", + "RTF_MSS": "int:64", + "RTF_MTU": "int:64", + "RTF_MULTICAST": "int:536870912", + "RTF_NAT": "int:134217728", + "RTF_NOFORWARD": "int:4096", + "RTF_NONEXTHOP": "int:2097152", + "RTF_NOPMTUDISC": "int:16384", + "RTF_POLICY": "int:67108864", + "RTF_REINSTATE": "int:8", + "RTF_REJECT": "int:512", + "RTF_STATIC": "int:1024", + "RTF_THROW": "int:8192", + "RTF_UP": "int:1", + "RTF_WINDOW": "int:128", + "RTF_XRESOLVE": "int:2048", + "RTM_BASE": "int:16", + "RTM_DELACTION": "int:49", + "RTM_DELADDR": "int:21", + "RTM_DELADDRLABEL": "int:73", + "RTM_DELLINK": "int:17", + "RTM_DELNEIGH": "int:29", + "RTM_DELQDISC": "int:37", + "RTM_DELROUTE": "int:25", + "RTM_DELRULE": "int:33", + "RTM_DELTCLASS": "int:41", + "RTM_DELTFILTER": "int:45", + "RTM_F_CLONED": "int:512", + "RTM_F_EQUALIZE": "int:1024", + "RTM_F_NOTIFY": "int:256", + "RTM_F_PREFIX": "int:2048", + "RTM_GETACTION": "int:50", + "RTM_GETADDR": "int:22", + "RTM_GETADDRLABEL": "int:74", + "RTM_GETANYCAST": "int:62", + "RTM_GETDCB": "int:78", + "RTM_GETLINK": "int:18", + "RTM_GETMULTICAST": "int:58", + "RTM_GETNEIGH": "int:30", + "RTM_GETNEIGHTBL": "int:66", + "RTM_GETQDISC": "int:38", + "RTM_GETROUTE": "int:26", + "RTM_GETRULE": "int:34", + "RTM_GETTCLASS": "int:42", + "RTM_GETTFILTER": "int:46", + "RTM_MAX": "int:79", + "RTM_NEWACTION": "int:48", + "RTM_NEWADDR": "int:20", + "RTM_NEWADDRLABEL": "int:72", + "RTM_NEWLINK": "int:16", + "RTM_NEWNDUSEROPT": "int:68", + "RTM_NEWNEIGH": "int:28", + "RTM_NEWNEIGHTBL": "int:64", + "RTM_NEWPREFIX": "int:52", + "RTM_NEWQDISC": "int:36", + "RTM_NEWROUTE": "int:24", + "RTM_NEWRULE": "int:32", + "RTM_NEWTCLASS": "int:40", + "RTM_NEWTFILTER": "int:44", + "RTM_NR_FAMILIES": "int:16", + "RTM_NR_MSGTYPES": "int:64", + "RTM_SETDCB": "int:79", + "RTM_SETLINK": "int:19", + "RTM_SETNEIGHTBL": "int:67", + "RTNH_ALIGNTO": "int:4", + "RTNH_F_DEAD": "int:1", + "RTNH_F_ONLINK": "int:4", + "RTNH_F_PERVASIVE": "int:2", + "RTNLGRP_IPV4_IFADDR": "int:5", + "RTNLGRP_IPV4_MROUTE": "int:6", + "RTNLGRP_IPV4_ROUTE": "int:7", + "RTNLGRP_IPV4_RULE": "int:8", + "RTNLGRP_IPV6_IFADDR": "int:9", + "RTNLGRP_IPV6_IFINFO": "int:12", + "RTNLGRP_IPV6_MROUTE": "int:10", + "RTNLGRP_IPV6_PREFIX": "int:18", + "RTNLGRP_IPV6_ROUTE": "int:11", + "RTNLGRP_IPV6_RULE": "int:19", + "RTNLGRP_LINK": "int:1", + "RTNLGRP_ND_USEROPT": "int:20", + "RTNLGRP_NEIGH": "int:3", + "RTNLGRP_NONE": "int:0", + "RTNLGRP_NOTIFY": "int:2", + "RTNLGRP_TC": "int:4", + "RTN_ANYCAST": "int:4", + "RTN_BLACKHOLE": "int:6", + "RTN_BROADCAST": "int:3", + "RTN_LOCAL": "int:2", + "RTN_MAX": "int:11", + "RTN_MULTICAST": "int:5", + "RTN_NAT": "int:10", + "RTN_PROHIBIT": "int:8", + "RTN_THROW": "int:9", + "RTN_UNICAST": "int:1", + "RTN_UNREACHABLE": "int:7", + "RTN_UNSPEC": "int:0", + "RTN_XRESOLVE": "int:11", + "RTPROT_BIRD": "int:12", + "RTPROT_BOOT": "int:3", + "RTPROT_DHCP": "int:16", + "RTPROT_DNROUTED": "int:13", + "RTPROT_GATED": "int:8", + "RTPROT_KERNEL": "int:2", + "RTPROT_MRT": "int:10", + "RTPROT_NTK": "int:15", + "RTPROT_RA": "int:9", + "RTPROT_REDIRECT": "int:1", + "RTPROT_STATIC": "int:4", + "RTPROT_UNSPEC": "int:0", + "RTPROT_XORP": "int:14", + "RTPROT_ZEBRA": "int:11", + "RT_CLASS_DEFAULT": "int:253", + "RT_CLASS_LOCAL": "int:255", + "RT_CLASS_MAIN": "int:254", + "RT_CLASS_MAX": "int:255", + "RT_CLASS_UNSPEC": "int:0", + "RT_SCOPE_HOST": "int:254", + "RT_SCOPE_LINK": "int:253", + "RT_SCOPE_NOWHERE": "int:255", + "RT_SCOPE_SITE": "int:200", + "RT_SCOPE_UNIVERSE": "int:0", + "RT_TABLE_COMPAT": "int:252", + "RT_TABLE_DEFAULT": "int:253", + "RT_TABLE_LOCAL": "int:255", + "RT_TABLE_MAIN": "int:254", + "RT_TABLE_MAX": "int:4294967295", + "RT_TABLE_UNSPEC": "int:0", + "RUSAGE_CHILDREN": "int:-1", + "RUSAGE_SELF": "int:0", + "RUSAGE_THREAD": "int:1", + "SCM_CREDENTIALS": "int:2", + "SCM_RIGHTS": "int:1", + "SCM_TIMESTAMP": "int:29", + "SCM_TIMESTAMPING": "int:37", + "SCM_TIMESTAMPNS": "int:35", + "SHUT_RD": "int:0", + "SHUT_RDWR": "int:2", + "SHUT_WR": "int:1", + "SIOCADDDLCI": "int:35200", + "SIOCADDMULTI": "int:35121", + "SIOCADDRT": "int:35083", + "SIOCATMARK": "int:35077", + "SIOCDARP": "int:35155", + "SIOCDELDLCI": "int:35201", + "SIOCDELMULTI": "int:35122", + "SIOCDELRT": "int:35084", + "SIOCDEVPRIVATE": "int:35312", + "SIOCDIFADDR": "int:35126", + "SIOCDRARP": "int:35168", + "SIOCGARP": "int:35156", + "SIOCGIFADDR": "int:35093", + "SIOCGIFBR": "int:35136", + "SIOCGIFBRDADDR": "int:35097", + "SIOCGIFCONF": "int:35090", + "SIOCGIFCOUNT": "int:35128", + "SIOCGIFDSTADDR": "int:35095", + "SIOCGIFENCAP": "int:35109", + "SIOCGIFFLAGS": "int:35091", + "SIOCGIFHWADDR": "int:35111", + "SIOCGIFINDEX": "int:35123", + "SIOCGIFMAP": "int:35184", + "SIOCGIFMEM": "int:35103", + "SIOCGIFMETRIC": "int:35101", + "SIOCGIFMTU": "int:35105", + "SIOCGIFNAME": "int:35088", + "SIOCGIFNETMASK": "int:35099", + "SIOCGIFPFLAGS": "int:35125", + "SIOCGIFSLAVE": "int:35113", + "SIOCGIFTXQLEN": "int:35138", + "SIOCGPGRP": "int:35076", + "SIOCGRARP": "int:35169", + "SIOCGSTAMP": "int:35078", + "SIOCGSTAMPNS": "int:35079", + "SIOCPROTOPRIVATE": "int:35296", + "SIOCRTMSG": "int:35085", + "SIOCSARP": "int:35157", + "SIOCSIFADDR": "int:35094", + "SIOCSIFBR": "int:35137", + "SIOCSIFBRDADDR": "int:35098", + "SIOCSIFDSTADDR": "int:35096", + "SIOCSIFENCAP": "int:35110", + "SIOCSIFFLAGS": "int:35092", + "SIOCSIFHWADDR": "int:35108", + "SIOCSIFHWBROADCAST": "int:35127", + "SIOCSIFLINK": "int:35089", + "SIOCSIFMAP": "int:35185", + "SIOCSIFMEM": "int:35104", + "SIOCSIFMETRIC": "int:35102", + "SIOCSIFMTU": "int:35106", + "SIOCSIFNAME": "int:35107", + "SIOCSIFNETMASK": "int:35100", + "SIOCSIFPFLAGS": "int:35124", + "SIOCSIFSLAVE": "int:35120", + "SIOCSIFTXQLEN": "int:35139", + "SIOCSPGRP": "int:35074", + "SIOCSRARP": "int:35170", + "SOCK_CLOEXEC": "int:524288", + "SOCK_DCCP": "int:6", + "SOCK_DGRAM": "int:2", + "SOCK_NONBLOCK": "int:2048", + "SOCK_PACKET": "int:10", + "SOCK_RAW": "int:3", + "SOCK_RDM": "int:4", + "SOCK_SEQPACKET": "int:5", + "SOCK_STREAM": "int:1", + "SOL_AAL": "int:265", + "SOL_ATM": "int:264", + "SOL_DECNET": "int:261", + "SOL_ICMPV6": "int:58", + "SOL_IP": "int:0", + "SOL_IPV6": "int:41", + "SOL_IRDA": "int:266", + "SOL_PACKET": "int:263", + "SOL_RAW": "int:255", + "SOL_SOCKET": "int:1", + "SOL_TCP": "int:6", + "SOL_X25": "int:262", + "SOMAXCONN": "int:128", + "SO_ACCEPTCONN": "int:30", + "SO_ATTACH_FILTER": "int:26", + "SO_BINDTODEVICE": "int:25", + "SO_BROADCAST": "int:6", + "SO_BSDCOMPAT": "int:14", + "SO_DEBUG": "int:1", + "SO_DETACH_FILTER": "int:27", + "SO_DOMAIN": "int:39", + "SO_DONTROUTE": "int:5", + "SO_ERROR": "int:4", + "SO_KEEPALIVE": "int:9", + "SO_LINGER": "int:13", + "SO_MARK": "int:36", + "SO_NO_CHECK": "int:11", + "SO_OOBINLINE": "int:10", + "SO_PASSCRED": "int:16", + "SO_PASSSEC": "int:34", + "SO_PEERCRED": "int:17", + "SO_PEERNAME": "int:28", + "SO_PEERSEC": "int:31", + "SO_PRIORITY": "int:12", + "SO_PROTOCOL": "int:38", + "SO_RCVBUF": "int:8", + "SO_RCVBUFFORCE": "int:33", + "SO_RCVLOWAT": "int:18", + "SO_RCVTIMEO": "int:20", + "SO_REUSEADDR": "int:2", + "SO_RXQ_OVFL": "int:40", + "SO_SECURITY_AUTHENTICATION": "int:22", + "SO_SECURITY_ENCRYPTION_NETWORK": "int:24", + "SO_SECURITY_ENCRYPTION_TRANSPORT": "int:23", + "SO_SNDBUF": "int:7", + "SO_SNDBUFFORCE": "int:32", + "SO_SNDLOWAT": "int:19", + "SO_SNDTIMEO": "int:21", + "SO_TIMESTAMP": "int:29", + "SO_TIMESTAMPING": "int:37", + "SO_TIMESTAMPNS": "int:35", + "SO_TYPE": "int:3", + "SYS_ACCESS": "int:33", + "SYS_ACCT": "int:51", + "SYS_ADD_KEY": "int:286", + "SYS_ADJTIMEX": "int:124", + "SYS_AFS_SYSCALL": "int:137", + "SYS_ALARM": "int:27", + "SYS_BDFLUSH": "int:134", + "SYS_BREAK": "int:17", + "SYS_BRK": "int:45", + "SYS_CAPGET": "int:184", + "SYS_CAPSET": "int:185", + "SYS_CHDIR": "int:12", + "SYS_CHMOD": "int:15", + "SYS_CHOWN": "int:182", + "SYS_CHOWN32": "int:212", + "SYS_CHROOT": "int:61", + "SYS_CLOCK_GETRES": "int:266", + "SYS_CLOCK_GETTIME": "int:265", + "SYS_CLOCK_NANOSLEEP": "int:267", + "SYS_CLOCK_SETTIME": "int:264", + "SYS_CLONE": "int:120", + "SYS_CLOSE": "int:6", + "SYS_CREAT": "int:8", + "SYS_CREATE_MODULE": "int:127", + "SYS_DELETE_MODULE": "int:129", + "SYS_DUP": "int:41", + "SYS_DUP2": "int:63", + "SYS_DUP3": "int:330", + "SYS_EPOLL_CREATE": "int:254", + "SYS_EPOLL_CREATE1": "int:329", + "SYS_EPOLL_CTL": "int:255", + "SYS_EPOLL_PWAIT": "int:319", + "SYS_EPOLL_WAIT": "int:256", + "SYS_EVENTFD": "int:323", + "SYS_EVENTFD2": "int:328", + "SYS_EXECVE": "int:11", + "SYS_EXIT": "int:1", + "SYS_EXIT_GROUP": "int:252", + "SYS_FACCESSAT": "int:307", + "SYS_FADVISE64": "int:250", + "SYS_FADVISE64_64": "int:272", + "SYS_FALLOCATE": "int:324", + "SYS_FANOTIFY_INIT": "int:338", + "SYS_FANOTIFY_MARK": "int:339", + "SYS_FCHDIR": "int:133", + "SYS_FCHMOD": "int:94", + "SYS_FCHMODAT": "int:306", + "SYS_FCHOWN": "int:95", + "SYS_FCHOWN32": "int:207", + "SYS_FCHOWNAT": "int:298", + "SYS_FCNTL": "int:55", + "SYS_FCNTL64": "int:221", + "SYS_FDATASYNC": "int:148", + "SYS_FGETXATTR": "int:231", + "SYS_FLISTXATTR": "int:234", + "SYS_FLOCK": "int:143", + "SYS_FORK": "int:2", + "SYS_FREMOVEXATTR": "int:237", + "SYS_FSETXATTR": "int:228", + "SYS_FSTAT": "int:108", + "SYS_FSTAT64": "int:197", + "SYS_FSTATAT64": "int:300", + "SYS_FSTATFS": "int:100", + "SYS_FSTATFS64": "int:269", + "SYS_FSYNC": "int:118", + "SYS_FTIME": "int:35", + "SYS_FTRUNCATE": "int:93", + "SYS_FTRUNCATE64": "int:194", + "SYS_FUTEX": "int:240", + "SYS_FUTIMESAT": "int:299", + "SYS_GETCPU": "int:318", + "SYS_GETCWD": "int:183", + "SYS_GETDENTS": "int:141", + "SYS_GETDENTS64": "int:220", + "SYS_GETEGID": "int:50", + "SYS_GETEGID32": "int:202", + "SYS_GETEUID": "int:49", + "SYS_GETEUID32": "int:201", + "SYS_GETGID": "int:47", + "SYS_GETGID32": "int:200", + "SYS_GETGROUPS": "int:80", + "SYS_GETGROUPS32": "int:205", + "SYS_GETITIMER": "int:105", + "SYS_GETPGID": "int:132", + "SYS_GETPGRP": "int:65", + "SYS_GETPID": "int:20", + "SYS_GETPMSG": "int:188", + "SYS_GETPPID": "int:64", + "SYS_GETPRIORITY": "int:96", + "SYS_GETRESGID": "int:171", + "SYS_GETRESGID32": "int:211", + "SYS_GETRESUID": "int:165", + "SYS_GETRESUID32": "int:209", + "SYS_GETRLIMIT": "int:76", + "SYS_GETRUSAGE": "int:77", + "SYS_GETSID": "int:147", + "SYS_GETTID": "int:224", + "SYS_GETTIMEOFDAY": "int:78", + "SYS_GETUID": "int:24", + "SYS_GETUID32": "int:199", + "SYS_GETXATTR": "int:229", + "SYS_GET_KERNEL_SYMS": "int:130", + "SYS_GET_MEMPOLICY": "int:275", + "SYS_GET_ROBUST_LIST": "int:312", + "SYS_GET_THREAD_AREA": "int:244", + "SYS_GTTY": "int:32", + "SYS_IDLE": "int:112", + "SYS_INIT_MODULE": "int:128", + "SYS_INOTIFY_ADD_WATCH": "int:292", + "SYS_INOTIFY_INIT": "int:291", + "SYS_INOTIFY_INIT1": "int:332", + "SYS_INOTIFY_RM_WATCH": "int:293", + "SYS_IOCTL": "int:54", + "SYS_IOPERM": "int:101", + "SYS_IOPL": "int:110", + "SYS_IOPRIO_GET": "int:290", + "SYS_IOPRIO_SET": "int:289", + "SYS_IO_CANCEL": "int:249", + "SYS_IO_DESTROY": "int:246", + "SYS_IO_GETEVENTS": "int:247", + "SYS_IO_SETUP": "int:245", + "SYS_IO_SUBMIT": "int:248", + "SYS_IPC": "int:117", + "SYS_KEXEC_LOAD": "int:283", + "SYS_KEYCTL": "int:288", + "SYS_KILL": "int:37", + "SYS_LCHOWN": "int:16", + "SYS_LCHOWN32": "int:198", + "SYS_LGETXATTR": "int:230", + "SYS_LINK": "int:9", + "SYS_LINKAT": "int:303", + "SYS_LISTXATTR": "int:232", + "SYS_LLISTXATTR": "int:233", + "SYS_LOCK": "int:53", + "SYS_LOOKUP_DCOOKIE": "int:253", + "SYS_LREMOVEXATTR": "int:236", + "SYS_LSEEK": "int:19", + "SYS_LSETXATTR": "int:227", + "SYS_LSTAT": "int:107", + "SYS_LSTAT64": "int:196", + "SYS_MADVISE": "int:219", + "SYS_MADVISE1": "int:219", + "SYS_MBIND": "int:274", + "SYS_MIGRATE_PAGES": "int:294", + "SYS_MINCORE": "int:218", + "SYS_MKDIR": "int:39", + "SYS_MKDIRAT": "int:296", + "SYS_MKNOD": "int:14", + "SYS_MKNODAT": "int:297", + "SYS_MLOCK": "int:150", + "SYS_MLOCKALL": "int:152", + "SYS_MMAP": "int:90", + "SYS_MMAP2": "int:192", + "SYS_MODIFY_LDT": "int:123", + "SYS_MOUNT": "int:21", + "SYS_MOVE_PAGES": "int:317", + "SYS_MPROTECT": "int:125", + "SYS_MPX": "int:56", + "SYS_MQ_GETSETATTR": "int:282", + "SYS_MQ_NOTIFY": "int:281", + "SYS_MQ_OPEN": "int:277", + "SYS_MQ_TIMEDRECEIVE": "int:280", + "SYS_MQ_TIMEDSEND": "int:279", + "SYS_MQ_UNLINK": "int:278", + "SYS_MREMAP": "int:163", + "SYS_MSYNC": "int:144", + "SYS_MUNLOCK": "int:151", + "SYS_MUNLOCKALL": "int:153", + "SYS_MUNMAP": "int:91", + "SYS_NANOSLEEP": "int:162", + "SYS_NFSSERVCTL": "int:169", + "SYS_NICE": "int:34", + "SYS_OLDFSTAT": "int:28", + "SYS_OLDLSTAT": "int:84", + "SYS_OLDOLDUNAME": "int:59", + "SYS_OLDSTAT": "int:18", + "SYS_OLDUNAME": "int:109", + "SYS_OPEN": "int:5", + "SYS_OPENAT": "int:295", + "SYS_PAUSE": "int:29", + "SYS_PERF_EVENT_OPEN": "int:336", + "SYS_PERSONALITY": "int:136", + "SYS_PIPE": "int:42", + "SYS_PIPE2": "int:331", + "SYS_PIVOT_ROOT": "int:217", + "SYS_POLL": "int:168", + "SYS_PPOLL": "int:309", + "SYS_PRCTL": "int:172", + "SYS_PREAD64": "int:180", + "SYS_PREADV": "int:333", + "SYS_PRLIMIT64": "int:340", + "SYS_PROF": "int:44", + "SYS_PROFIL": "int:98", + "SYS_PSELECT6": "int:308", + "SYS_PTRACE": "int:26", + "SYS_PUTPMSG": "int:189", + "SYS_PWRITE64": "int:181", + "SYS_PWRITEV": "int:334", + "SYS_QUERY_MODULE": "int:167", + "SYS_QUOTACTL": "int:131", + "SYS_READ": "int:3", + "SYS_READAHEAD": "int:225", + "SYS_READDIR": "int:89", + "SYS_READLINK": "int:85", + "SYS_READLINKAT": "int:305", + "SYS_READV": "int:145", + "SYS_REBOOT": "int:88", + "SYS_RECVMMSG": "int:337", + "SYS_REMAP_FILE_PAGES": "int:257", + "SYS_REMOVEXATTR": "int:235", + "SYS_RENAME": "int:38", + "SYS_RENAMEAT": "int:302", + "SYS_REQUEST_KEY": "int:287", + "SYS_RESTART_SYSCALL": "int:0", + "SYS_RMDIR": "int:40", + "SYS_RT_SIGACTION": "int:174", + "SYS_RT_SIGPENDING": "int:176", + "SYS_RT_SIGPROCMASK": "int:175", + "SYS_RT_SIGQUEUEINFO": "int:178", + "SYS_RT_SIGRETURN": "int:173", + "SYS_RT_SIGSUSPEND": "int:179", + "SYS_RT_SIGTIMEDWAIT": "int:177", + "SYS_RT_TGSIGQUEUEINFO": "int:335", + "SYS_SCHED_GETAFFINITY": "int:242", + "SYS_SCHED_GETPARAM": "int:155", + "SYS_SCHED_GETSCHEDULER": "int:157", + "SYS_SCHED_GET_PRIORITY_MAX": "int:159", + "SYS_SCHED_GET_PRIORITY_MIN": "int:160", + "SYS_SCHED_RR_GET_INTERVAL": "int:161", + "SYS_SCHED_SETAFFINITY": "int:241", + "SYS_SCHED_SETPARAM": "int:154", + "SYS_SCHED_SETSCHEDULER": "int:156", + "SYS_SCHED_YIELD": "int:158", + "SYS_SELECT": "int:82", + "SYS_SENDFILE": "int:187", + "SYS_SENDFILE64": "int:239", + "SYS_SETDOMAINNAME": "int:121", + "SYS_SETFSGID": "int:139", + "SYS_SETFSGID32": "int:216", + "SYS_SETFSUID": "int:138", + "SYS_SETFSUID32": "int:215", + "SYS_SETGID": "int:46", + "SYS_SETGID32": "int:214", + "SYS_SETGROUPS": "int:81", + "SYS_SETGROUPS32": "int:206", + "SYS_SETHOSTNAME": "int:74", + "SYS_SETITIMER": "int:104", + "SYS_SETPGID": "int:57", + "SYS_SETPRIORITY": "int:97", + "SYS_SETREGID": "int:71", + "SYS_SETREGID32": "int:204", + "SYS_SETRESGID": "int:170", + "SYS_SETRESGID32": "int:210", + "SYS_SETRESUID": "int:164", + "SYS_SETRESUID32": "int:208", + "SYS_SETREUID": "int:70", + "SYS_SETREUID32": "int:203", + "SYS_SETRLIMIT": "int:75", + "SYS_SETSID": "int:66", + "SYS_SETTIMEOFDAY": "int:79", + "SYS_SETUID": "int:23", + "SYS_SETUID32": "int:213", + "SYS_SETXATTR": "int:226", + "SYS_SET_MEMPOLICY": "int:276", + "SYS_SET_ROBUST_LIST": "int:311", + "SYS_SET_THREAD_AREA": "int:243", + "SYS_SET_TID_ADDRESS": "int:258", + "SYS_SGETMASK": "int:68", + "SYS_SIGACTION": "int:67", + "SYS_SIGALTSTACK": "int:186", + "SYS_SIGNAL": "int:48", + "SYS_SIGNALFD": "int:321", + "SYS_SIGNALFD4": "int:327", + "SYS_SIGPENDING": "int:73", + "SYS_SIGPROCMASK": "int:126", + "SYS_SIGRETURN": "int:119", + "SYS_SIGSUSPEND": "int:72", + "SYS_SOCKETCALL": "int:102", + "SYS_SPLICE": "int:313", + "SYS_SSETMASK": "int:69", + "SYS_STAT": "int:106", + "SYS_STAT64": "int:195", + "SYS_STATFS": "int:99", + "SYS_STATFS64": "int:268", + "SYS_STIME": "int:25", + "SYS_STTY": "int:31", + "SYS_SWAPOFF": "int:115", + "SYS_SWAPON": "int:87", + "SYS_SYMLINK": "int:83", + "SYS_SYMLINKAT": "int:304", + "SYS_SYNC": "int:36", + "SYS_SYNC_FILE_RANGE": "int:314", + "SYS_SYSFS": "int:135", + "SYS_SYSINFO": "int:116", + "SYS_SYSLOG": "int:103", + "SYS_TEE": "int:315", + "SYS_TGKILL": "int:270", + "SYS_TIME": "int:13", + "SYS_TIMERFD_CREATE": "int:322", + "SYS_TIMERFD_GETTIME": "int:326", + "SYS_TIMERFD_SETTIME": "int:325", + "SYS_TIMER_CREATE": "int:259", + "SYS_TIMER_DELETE": "int:263", + "SYS_TIMER_GETOVERRUN": "int:262", + "SYS_TIMER_GETTIME": "int:261", + "SYS_TIMER_SETTIME": "int:260", + "SYS_TIMES": "int:43", + "SYS_TKILL": "int:238", + "SYS_TRUNCATE": "int:92", + "SYS_TRUNCATE64": "int:193", + "SYS_UGETRLIMIT": "int:191", + "SYS_ULIMIT": "int:58", + "SYS_UMASK": "int:60", + "SYS_UMOUNT": "int:22", + "SYS_UMOUNT2": "int:52", + "SYS_UNAME": "int:122", + "SYS_UNLINK": "int:10", + "SYS_UNLINKAT": "int:301", + "SYS_UNSHARE": "int:310", + "SYS_USELIB": "int:86", + "SYS_USTAT": "int:62", + "SYS_UTIME": "int:30", + "SYS_UTIMENSAT": "int:320", + "SYS_UTIMES": "int:271", + "SYS_VFORK": "int:190", + "SYS_VHANGUP": "int:111", + "SYS_VM86": "int:166", + "SYS_VM86OLD": "int:113", + "SYS_VMSPLICE": "int:316", + "SYS_VSERVER": "int:273", + "SYS_WAIT4": "int:114", + "SYS_WAITID": "int:284", + "SYS_WAITPID": "int:7", + "SYS_WRITE": "int:4", + "SYS_WRITEV": "int:146", + "SYS__LLSEEK": "int:140", + "SYS__NEWSELECT": "int:142", + "SYS__SYSCTL": "int:149", + "S_BLKSIZE": "int:512", + "S_IEXEC": "int:64", + "S_IFBLK": "int:24576", + "S_IFCHR": "int:8192", + "S_IFDIR": "int:16384", + "S_IFIFO": "int:4096", + "S_IFLNK": "int:40960", + "S_IFMT": "int:61440", + "S_IFREG": "int:32768", + "S_IFSOCK": "int:49152", + "S_IREAD": "int:256", + "S_IRGRP": "int:32", + "S_IROTH": "int:4", + "S_IRUSR": "int:256", + "S_IRWXG": "int:56", + "S_IRWXO": "int:7", + "S_IRWXU": "int:448", + "S_ISGID": "int:1024", + "S_ISUID": "int:2048", + "S_ISVTX": "int:512", + "S_IWGRP": "int:16", + "S_IWOTH": "int:2", + "S_IWRITE": "int:128", + "S_IWUSR": "int:128", + "S_IXGRP": "int:8", + "S_IXOTH": "int:1", + "S_IXUSR": "int:64", + "SizeofCmsghdr": "int:12", + "SizeofICMPv6Filter": "int:32", + "SizeofIPMreq": "int:8", + "SizeofIPMreqn": "int:12", + "SizeofIPv6MTUInfo": "int:32", + "SizeofIPv6Mreq": "int:20", + "SizeofIfAddrmsg": "int:8", + "SizeofIfInfomsg": "int:16", + "SizeofInet4Pktinfo": "int:12", + "SizeofInet6Pktinfo": "int:20", + "SizeofInotifyEvent": "int:16", + "SizeofLinger": "int:8", + "SizeofMsghdr": "int:28", + "SizeofNlAttr": "int:4", + "SizeofNlMsgerr": "int:20", + "SizeofNlMsghdr": "int:16", + "SizeofRtAttr": "int:4", + "SizeofRtGenmsg": "int:1", + "SizeofRtMsg": "int:12", + "SizeofRtNexthop": "int:8", + "SizeofSockFilter": "int:8", + "SizeofSockFprog": "int:8", + "SizeofSockaddrAny": "int:112", + "SizeofSockaddrInet4": "int:16", + "SizeofSockaddrInet6": "int:28", + "SizeofSockaddrLinklayer": "int:20", + "SizeofSockaddrNetlink": "int:12", + "SizeofSockaddrUnix": "int:110", + "SizeofTCPInfo": "int:104", + "SizeofUcred": "int:12", + "TCGETS": "int:21505", + "TCIFLUSH": "int:0", + "TCIOFLUSH": "int:2", + "TCOFLUSH": "int:1", + "TCP_CONGESTION": "int:13", + "TCP_CORK": "int:3", + "TCP_DEFER_ACCEPT": "int:9", + "TCP_INFO": "int:11", + "TCP_KEEPCNT": "int:6", + "TCP_KEEPIDLE": "int:4", + "TCP_KEEPINTVL": "int:5", + "TCP_LINGER2": "int:8", + "TCP_MAXSEG": "int:2", + "TCP_MAXWIN": "int:65535", + "TCP_MAX_WINSHIFT": "int:14", + "TCP_MD5SIG": "int:14", + "TCP_MD5SIG_MAXKEYLEN": "int:80", + "TCP_MSS": "int:512", + "TCP_NODELAY": "int:1", + "TCP_QUICKACK": "int:12", + "TCP_SYNCNT": "int:7", + "TCP_WINDOW_CLAMP": "int:10", + "TCSETS": "int:21506", + "TIOCCBRK": "int:21544", + "TIOCCONS": "int:21533", + "TIOCEXCL": "int:21516", + "TIOCGDEV": "int:2147767346", + "TIOCGETD": "int:21540", + "TIOCGICOUNT": "int:21597", + "TIOCGLCKTRMIOS": "int:21590", + "TIOCGPGRP": "int:21519", + "TIOCGPTN": "int:2147767344", + "TIOCGRS485": "int:21550", + "TIOCGSERIAL": "int:21534", + "TIOCGSID": "int:21545", + "TIOCGSOFTCAR": "int:21529", + "TIOCGWINSZ": "int:21523", + "TIOCINQ": "int:21531", + "TIOCLINUX": "int:21532", + "TIOCMBIC": "int:21527", + "TIOCMBIS": "int:21526", + "TIOCMGET": "int:21525", + "TIOCMIWAIT": "int:21596", + "TIOCMSET": "int:21528", + "TIOCM_CAR": "int:64", + "TIOCM_CD": "int:64", + "TIOCM_CTS": "int:32", + "TIOCM_DSR": "int:256", + "TIOCM_DTR": "int:2", + "TIOCM_LE": "int:1", + "TIOCM_RI": "int:128", + "TIOCM_RNG": "int:128", + "TIOCM_RTS": "int:4", + "TIOCM_SR": "int:16", + "TIOCM_ST": "int:8", + "TIOCNOTTY": "int:21538", + "TIOCNXCL": "int:21517", + "TIOCOUTQ": "int:21521", + "TIOCPKT": "int:21536", + "TIOCPKT_DATA": "int:0", + "TIOCPKT_DOSTOP": "int:32", + "TIOCPKT_FLUSHREAD": "int:1", + "TIOCPKT_FLUSHWRITE": "int:2", + "TIOCPKT_IOCTL": "int:64", + "TIOCPKT_NOSTOP": "int:16", + "TIOCPKT_START": "int:8", + "TIOCPKT_STOP": "int:4", + "TIOCSBRK": "int:21543", + "TIOCSCTTY": "int:21518", + "TIOCSERCONFIG": "int:21587", + "TIOCSERGETLSR": "int:21593", + "TIOCSERGETMULTI": "int:21594", + "TIOCSERGSTRUCT": "int:21592", + "TIOCSERGWILD": "int:21588", + "TIOCSERSETMULTI": "int:21595", + "TIOCSERSWILD": "int:21589", + "TIOCSER_TEMT": "int:1", + "TIOCSETD": "int:21539", + "TIOCSIG": "int:1074025526", + "TIOCSLCKTRMIOS": "int:21591", + "TIOCSPGRP": "int:21520", + "TIOCSPTLCK": "int:1074025521", + "TIOCSRS485": "int:21551", + "TIOCSSERIAL": "int:21535", + "TIOCSSOFTCAR": "int:21530", + "TIOCSTI": "int:21522", + "TIOCSWINSZ": "int:21524", + "TOSTOP": "int:256", + "TUNATTACHFILTER": "int:1074287829", + "TUNDETACHFILTER": "int:1074287830", + "TUNGETFEATURES": "int:2147767503", + "TUNGETIFF": "int:2147767506", + "TUNGETSNDBUF": "int:2147767507", + "TUNGETVNETHDRSZ": "int:2147767511", + "TUNSETDEBUG": "int:1074025673", + "TUNSETGROUP": "int:1074025678", + "TUNSETIFF": "int:1074025674", + "TUNSETLINK": "int:1074025677", + "TUNSETNOCSUM": "int:1074025672", + "TUNSETOFFLOAD": "int:1074025680", + "TUNSETOWNER": "int:1074025676", + "TUNSETPERSIST": "int:1074025675", + "TUNSETSNDBUF": "int:1074025684", + "TUNSETTXFILTER": "int:1074025681", + "TUNSETVNETHDRSZ": "int:1074025688", + "VDISCARD": "int:13", + "VEOF": "int:4", + "VEOL": "int:11", + "VEOL2": "int:16", + "VERASE": "int:2", + "VINTR": "int:0", + "VKILL": "int:3", + "VLNEXT": "int:15", + "VMIN": "int:6", + "VQUIT": "int:1", + "VREPRINT": "int:12", + "VSTART": "int:8", + "VSTOP": "int:9", + "VSUSP": "int:10", + "VSWTC": "int:7", + "VTIME": "int:5", + "VWERASE": "int:14", + "WALL": "int:1073741824", + "WCLONE": "int:2147483648", + "WCONTINUED": "int:8", + "WEXITED": "int:4", + "WNOHANG": "int:1", + "WNOTHREAD": "int:536870912", + "WNOWAIT": "int:16777216", + "WORDSIZE": "int:32", + "WSTOPPED": "int:2", + "WUNTRACED": "int:2", + "XCASE": "int:4", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_amd64.go b/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_amd64.go new file mode 100644 index 0000000..d3a6f88 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_amd64.go @@ -0,0 +1,3902 @@ +// +build !gccgo + +// this file was generated by gomacro command: import _b "syscall" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "syscall" +) + +// reflection: allow interpreted code to import "syscall" +func init() { + Packages["syscall"] = Package{ + Binds: map[string]Value{ + "AF_ALG": ValueOf(syscall.AF_ALG), + "AF_APPLETALK": ValueOf(syscall.AF_APPLETALK), + "AF_ASH": ValueOf(syscall.AF_ASH), + "AF_ATMPVC": ValueOf(syscall.AF_ATMPVC), + "AF_ATMSVC": ValueOf(syscall.AF_ATMSVC), + "AF_AX25": ValueOf(syscall.AF_AX25), + "AF_BLUETOOTH": ValueOf(syscall.AF_BLUETOOTH), + "AF_BRIDGE": ValueOf(syscall.AF_BRIDGE), + "AF_CAIF": ValueOf(syscall.AF_CAIF), + "AF_CAN": ValueOf(syscall.AF_CAN), + "AF_DECnet": ValueOf(syscall.AF_DECnet), + "AF_ECONET": ValueOf(syscall.AF_ECONET), + "AF_FILE": ValueOf(syscall.AF_FILE), + "AF_IEEE802154": ValueOf(syscall.AF_IEEE802154), + "AF_INET": ValueOf(syscall.AF_INET), + "AF_INET6": ValueOf(syscall.AF_INET6), + "AF_IPX": ValueOf(syscall.AF_IPX), + "AF_IRDA": ValueOf(syscall.AF_IRDA), + "AF_ISDN": ValueOf(syscall.AF_ISDN), + "AF_IUCV": ValueOf(syscall.AF_IUCV), + "AF_KEY": ValueOf(syscall.AF_KEY), + "AF_LLC": ValueOf(syscall.AF_LLC), + "AF_LOCAL": ValueOf(syscall.AF_LOCAL), + "AF_MAX": ValueOf(syscall.AF_MAX), + "AF_NETBEUI": ValueOf(syscall.AF_NETBEUI), + "AF_NETLINK": ValueOf(syscall.AF_NETLINK), + "AF_NETROM": ValueOf(syscall.AF_NETROM), + "AF_PACKET": ValueOf(syscall.AF_PACKET), + "AF_PHONET": ValueOf(syscall.AF_PHONET), + "AF_PPPOX": ValueOf(syscall.AF_PPPOX), + "AF_RDS": ValueOf(syscall.AF_RDS), + "AF_ROSE": ValueOf(syscall.AF_ROSE), + "AF_ROUTE": ValueOf(syscall.AF_ROUTE), + "AF_RXRPC": ValueOf(syscall.AF_RXRPC), + "AF_SECURITY": ValueOf(syscall.AF_SECURITY), + "AF_SNA": ValueOf(syscall.AF_SNA), + "AF_TIPC": ValueOf(syscall.AF_TIPC), + "AF_UNIX": ValueOf(syscall.AF_UNIX), + "AF_UNSPEC": ValueOf(syscall.AF_UNSPEC), + "AF_WANPIPE": ValueOf(syscall.AF_WANPIPE), + "AF_X25": ValueOf(syscall.AF_X25), + "ARPHRD_ADAPT": ValueOf(syscall.ARPHRD_ADAPT), + "ARPHRD_APPLETLK": ValueOf(syscall.ARPHRD_APPLETLK), + "ARPHRD_ARCNET": ValueOf(syscall.ARPHRD_ARCNET), + "ARPHRD_ASH": ValueOf(syscall.ARPHRD_ASH), + "ARPHRD_ATM": ValueOf(syscall.ARPHRD_ATM), + "ARPHRD_AX25": ValueOf(syscall.ARPHRD_AX25), + "ARPHRD_BIF": ValueOf(syscall.ARPHRD_BIF), + "ARPHRD_CHAOS": ValueOf(syscall.ARPHRD_CHAOS), + "ARPHRD_CISCO": ValueOf(syscall.ARPHRD_CISCO), + "ARPHRD_CSLIP": ValueOf(syscall.ARPHRD_CSLIP), + "ARPHRD_CSLIP6": ValueOf(syscall.ARPHRD_CSLIP6), + "ARPHRD_DDCMP": ValueOf(syscall.ARPHRD_DDCMP), + "ARPHRD_DLCI": ValueOf(syscall.ARPHRD_DLCI), + "ARPHRD_ECONET": ValueOf(syscall.ARPHRD_ECONET), + "ARPHRD_EETHER": ValueOf(syscall.ARPHRD_EETHER), + "ARPHRD_ETHER": ValueOf(syscall.ARPHRD_ETHER), + "ARPHRD_EUI64": ValueOf(syscall.ARPHRD_EUI64), + "ARPHRD_FCAL": ValueOf(syscall.ARPHRD_FCAL), + "ARPHRD_FCFABRIC": ValueOf(syscall.ARPHRD_FCFABRIC), + "ARPHRD_FCPL": ValueOf(syscall.ARPHRD_FCPL), + "ARPHRD_FCPP": ValueOf(syscall.ARPHRD_FCPP), + "ARPHRD_FDDI": ValueOf(syscall.ARPHRD_FDDI), + "ARPHRD_FRAD": ValueOf(syscall.ARPHRD_FRAD), + "ARPHRD_HDLC": ValueOf(syscall.ARPHRD_HDLC), + "ARPHRD_HIPPI": ValueOf(syscall.ARPHRD_HIPPI), + "ARPHRD_HWX25": ValueOf(syscall.ARPHRD_HWX25), + "ARPHRD_IEEE1394": ValueOf(syscall.ARPHRD_IEEE1394), + "ARPHRD_IEEE802": ValueOf(syscall.ARPHRD_IEEE802), + "ARPHRD_IEEE80211": ValueOf(syscall.ARPHRD_IEEE80211), + "ARPHRD_IEEE80211_PRISM": ValueOf(syscall.ARPHRD_IEEE80211_PRISM), + "ARPHRD_IEEE80211_RADIOTAP": ValueOf(syscall.ARPHRD_IEEE80211_RADIOTAP), + "ARPHRD_IEEE802154": ValueOf(syscall.ARPHRD_IEEE802154), + "ARPHRD_IEEE802154_PHY": ValueOf(syscall.ARPHRD_IEEE802154_PHY), + "ARPHRD_IEEE802_TR": ValueOf(syscall.ARPHRD_IEEE802_TR), + "ARPHRD_INFINIBAND": ValueOf(syscall.ARPHRD_INFINIBAND), + "ARPHRD_IPDDP": ValueOf(syscall.ARPHRD_IPDDP), + "ARPHRD_IPGRE": ValueOf(syscall.ARPHRD_IPGRE), + "ARPHRD_IRDA": ValueOf(syscall.ARPHRD_IRDA), + "ARPHRD_LAPB": ValueOf(syscall.ARPHRD_LAPB), + "ARPHRD_LOCALTLK": ValueOf(syscall.ARPHRD_LOCALTLK), + "ARPHRD_LOOPBACK": ValueOf(syscall.ARPHRD_LOOPBACK), + "ARPHRD_METRICOM": ValueOf(syscall.ARPHRD_METRICOM), + "ARPHRD_NETROM": ValueOf(syscall.ARPHRD_NETROM), + "ARPHRD_NONE": ValueOf(syscall.ARPHRD_NONE), + "ARPHRD_PIMREG": ValueOf(syscall.ARPHRD_PIMREG), + "ARPHRD_PPP": ValueOf(syscall.ARPHRD_PPP), + "ARPHRD_PRONET": ValueOf(syscall.ARPHRD_PRONET), + "ARPHRD_RAWHDLC": ValueOf(syscall.ARPHRD_RAWHDLC), + "ARPHRD_ROSE": ValueOf(syscall.ARPHRD_ROSE), + "ARPHRD_RSRVD": ValueOf(syscall.ARPHRD_RSRVD), + "ARPHRD_SIT": ValueOf(syscall.ARPHRD_SIT), + "ARPHRD_SKIP": ValueOf(syscall.ARPHRD_SKIP), + "ARPHRD_SLIP": ValueOf(syscall.ARPHRD_SLIP), + "ARPHRD_SLIP6": ValueOf(syscall.ARPHRD_SLIP6), + "ARPHRD_TUNNEL": ValueOf(syscall.ARPHRD_TUNNEL), + "ARPHRD_TUNNEL6": ValueOf(syscall.ARPHRD_TUNNEL6), + "ARPHRD_VOID": ValueOf(syscall.ARPHRD_VOID), + "ARPHRD_X25": ValueOf(syscall.ARPHRD_X25), + "Accept": ValueOf(syscall.Accept), + "Accept4": ValueOf(syscall.Accept4), + "Access": ValueOf(syscall.Access), + "Acct": ValueOf(syscall.Acct), + "Adjtimex": ValueOf(syscall.Adjtimex), + "AttachLsf": ValueOf(syscall.AttachLsf), + "B0": ValueOf(syscall.B0), + "B1000000": ValueOf(syscall.B1000000), + "B110": ValueOf(syscall.B110), + "B115200": ValueOf(syscall.B115200), + "B1152000": ValueOf(syscall.B1152000), + "B1200": ValueOf(syscall.B1200), + "B134": ValueOf(syscall.B134), + "B150": ValueOf(syscall.B150), + "B1500000": ValueOf(syscall.B1500000), + "B1800": ValueOf(syscall.B1800), + "B19200": ValueOf(syscall.B19200), + "B200": ValueOf(syscall.B200), + "B2000000": ValueOf(syscall.B2000000), + "B230400": ValueOf(syscall.B230400), + "B2400": ValueOf(syscall.B2400), + "B2500000": ValueOf(syscall.B2500000), + "B300": ValueOf(syscall.B300), + "B3000000": ValueOf(syscall.B3000000), + "B3500000": ValueOf(syscall.B3500000), + "B38400": ValueOf(syscall.B38400), + "B4000000": ValueOf(syscall.B4000000), + "B460800": ValueOf(syscall.B460800), + "B4800": ValueOf(syscall.B4800), + "B50": ValueOf(syscall.B50), + "B500000": ValueOf(syscall.B500000), + "B57600": ValueOf(syscall.B57600), + "B576000": ValueOf(syscall.B576000), + "B600": ValueOf(syscall.B600), + "B75": ValueOf(syscall.B75), + "B921600": ValueOf(syscall.B921600), + "B9600": ValueOf(syscall.B9600), + "BPF_A": ValueOf(syscall.BPF_A), + "BPF_ABS": ValueOf(syscall.BPF_ABS), + "BPF_ADD": ValueOf(syscall.BPF_ADD), + "BPF_ALU": ValueOf(syscall.BPF_ALU), + "BPF_AND": ValueOf(syscall.BPF_AND), + "BPF_B": ValueOf(syscall.BPF_B), + "BPF_DIV": ValueOf(syscall.BPF_DIV), + "BPF_H": ValueOf(syscall.BPF_H), + "BPF_IMM": ValueOf(syscall.BPF_IMM), + "BPF_IND": ValueOf(syscall.BPF_IND), + "BPF_JA": ValueOf(syscall.BPF_JA), + "BPF_JEQ": ValueOf(syscall.BPF_JEQ), + "BPF_JGE": ValueOf(syscall.BPF_JGE), + "BPF_JGT": ValueOf(syscall.BPF_JGT), + "BPF_JMP": ValueOf(syscall.BPF_JMP), + "BPF_JSET": ValueOf(syscall.BPF_JSET), + "BPF_K": ValueOf(syscall.BPF_K), + "BPF_LD": ValueOf(syscall.BPF_LD), + "BPF_LDX": ValueOf(syscall.BPF_LDX), + "BPF_LEN": ValueOf(syscall.BPF_LEN), + "BPF_LSH": ValueOf(syscall.BPF_LSH), + "BPF_MAJOR_VERSION": ValueOf(syscall.BPF_MAJOR_VERSION), + "BPF_MAXINSNS": ValueOf(syscall.BPF_MAXINSNS), + "BPF_MEM": ValueOf(syscall.BPF_MEM), + "BPF_MEMWORDS": ValueOf(syscall.BPF_MEMWORDS), + "BPF_MINOR_VERSION": ValueOf(syscall.BPF_MINOR_VERSION), + "BPF_MISC": ValueOf(syscall.BPF_MISC), + "BPF_MSH": ValueOf(syscall.BPF_MSH), + "BPF_MUL": ValueOf(syscall.BPF_MUL), + "BPF_NEG": ValueOf(syscall.BPF_NEG), + "BPF_OR": ValueOf(syscall.BPF_OR), + "BPF_RET": ValueOf(syscall.BPF_RET), + "BPF_RSH": ValueOf(syscall.BPF_RSH), + "BPF_ST": ValueOf(syscall.BPF_ST), + "BPF_STX": ValueOf(syscall.BPF_STX), + "BPF_SUB": ValueOf(syscall.BPF_SUB), + "BPF_TAX": ValueOf(syscall.BPF_TAX), + "BPF_TXA": ValueOf(syscall.BPF_TXA), + "BPF_W": ValueOf(syscall.BPF_W), + "BPF_X": ValueOf(syscall.BPF_X), + "BRKINT": ValueOf(syscall.BRKINT), + "Bind": ValueOf(syscall.Bind), + "BindToDevice": ValueOf(syscall.BindToDevice), + "BytePtrFromString": ValueOf(syscall.BytePtrFromString), + "ByteSliceFromString": ValueOf(syscall.ByteSliceFromString), + "CLOCAL": ValueOf(syscall.CLOCAL), + "CLONE_CHILD_CLEARTID": ValueOf(syscall.CLONE_CHILD_CLEARTID), + "CLONE_CHILD_SETTID": ValueOf(syscall.CLONE_CHILD_SETTID), + "CLONE_DETACHED": ValueOf(syscall.CLONE_DETACHED), + "CLONE_FILES": ValueOf(syscall.CLONE_FILES), + "CLONE_FS": ValueOf(syscall.CLONE_FS), + "CLONE_IO": ValueOf(uint32(syscall.CLONE_IO)), + "CLONE_NEWIPC": ValueOf(syscall.CLONE_NEWIPC), + "CLONE_NEWNET": ValueOf(syscall.CLONE_NEWNET), + "CLONE_NEWNS": ValueOf(syscall.CLONE_NEWNS), + "CLONE_NEWPID": ValueOf(syscall.CLONE_NEWPID), + "CLONE_NEWUSER": ValueOf(syscall.CLONE_NEWUSER), + "CLONE_NEWUTS": ValueOf(syscall.CLONE_NEWUTS), + "CLONE_PARENT": ValueOf(syscall.CLONE_PARENT), + "CLONE_PARENT_SETTID": ValueOf(syscall.CLONE_PARENT_SETTID), + "CLONE_PTRACE": ValueOf(syscall.CLONE_PTRACE), + "CLONE_SETTLS": ValueOf(syscall.CLONE_SETTLS), + "CLONE_SIGHAND": ValueOf(syscall.CLONE_SIGHAND), + "CLONE_SYSVSEM": ValueOf(syscall.CLONE_SYSVSEM), + "CLONE_THREAD": ValueOf(syscall.CLONE_THREAD), + "CLONE_UNTRACED": ValueOf(syscall.CLONE_UNTRACED), + "CLONE_VFORK": ValueOf(syscall.CLONE_VFORK), + "CLONE_VM": ValueOf(syscall.CLONE_VM), + "CREAD": ValueOf(syscall.CREAD), + "CS5": ValueOf(syscall.CS5), + "CS6": ValueOf(syscall.CS6), + "CS7": ValueOf(syscall.CS7), + "CS8": ValueOf(syscall.CS8), + "CSIZE": ValueOf(syscall.CSIZE), + "CSTOPB": ValueOf(syscall.CSTOPB), + "Chdir": ValueOf(syscall.Chdir), + "Chmod": ValueOf(syscall.Chmod), + "Chown": ValueOf(syscall.Chown), + "Chroot": ValueOf(syscall.Chroot), + "Clearenv": ValueOf(syscall.Clearenv), + "Close": ValueOf(syscall.Close), + "CloseOnExec": ValueOf(syscall.CloseOnExec), + "CmsgLen": ValueOf(syscall.CmsgLen), + "CmsgSpace": ValueOf(syscall.CmsgSpace), + "Connect": ValueOf(syscall.Connect), + "Creat": ValueOf(syscall.Creat), + "DT_BLK": ValueOf(syscall.DT_BLK), + "DT_CHR": ValueOf(syscall.DT_CHR), + "DT_DIR": ValueOf(syscall.DT_DIR), + "DT_FIFO": ValueOf(syscall.DT_FIFO), + "DT_LNK": ValueOf(syscall.DT_LNK), + "DT_REG": ValueOf(syscall.DT_REG), + "DT_SOCK": ValueOf(syscall.DT_SOCK), + "DT_UNKNOWN": ValueOf(syscall.DT_UNKNOWN), + "DT_WHT": ValueOf(syscall.DT_WHT), + "DetachLsf": ValueOf(syscall.DetachLsf), + "Dup": ValueOf(syscall.Dup), + "Dup2": ValueOf(syscall.Dup2), + "Dup3": ValueOf(syscall.Dup3), + "E2BIG": ValueOf(syscall.E2BIG), + "EACCES": ValueOf(syscall.EACCES), + "EADDRINUSE": ValueOf(syscall.EADDRINUSE), + "EADDRNOTAVAIL": ValueOf(syscall.EADDRNOTAVAIL), + "EADV": ValueOf(syscall.EADV), + "EAFNOSUPPORT": ValueOf(syscall.EAFNOSUPPORT), + "EAGAIN": ValueOf(syscall.EAGAIN), + "EALREADY": ValueOf(syscall.EALREADY), + "EBADE": ValueOf(syscall.EBADE), + "EBADF": ValueOf(syscall.EBADF), + "EBADFD": ValueOf(syscall.EBADFD), + "EBADMSG": ValueOf(syscall.EBADMSG), + "EBADR": ValueOf(syscall.EBADR), + "EBADRQC": ValueOf(syscall.EBADRQC), + "EBADSLT": ValueOf(syscall.EBADSLT), + "EBFONT": ValueOf(syscall.EBFONT), + "EBUSY": ValueOf(syscall.EBUSY), + "ECANCELED": ValueOf(syscall.ECANCELED), + "ECHILD": ValueOf(syscall.ECHILD), + "ECHO": ValueOf(syscall.ECHO), + "ECHOCTL": ValueOf(syscall.ECHOCTL), + "ECHOE": ValueOf(syscall.ECHOE), + "ECHOK": ValueOf(syscall.ECHOK), + "ECHOKE": ValueOf(syscall.ECHOKE), + "ECHONL": ValueOf(syscall.ECHONL), + "ECHOPRT": ValueOf(syscall.ECHOPRT), + "ECHRNG": ValueOf(syscall.ECHRNG), + "ECOMM": ValueOf(syscall.ECOMM), + "ECONNABORTED": ValueOf(syscall.ECONNABORTED), + "ECONNREFUSED": ValueOf(syscall.ECONNREFUSED), + "ECONNRESET": ValueOf(syscall.ECONNRESET), + "EDEADLK": ValueOf(syscall.EDEADLK), + "EDEADLOCK": ValueOf(syscall.EDEADLOCK), + "EDESTADDRREQ": ValueOf(syscall.EDESTADDRREQ), + "EDOM": ValueOf(syscall.EDOM), + "EDOTDOT": ValueOf(syscall.EDOTDOT), + "EDQUOT": ValueOf(syscall.EDQUOT), + "EEXIST": ValueOf(syscall.EEXIST), + "EFAULT": ValueOf(syscall.EFAULT), + "EFBIG": ValueOf(syscall.EFBIG), + "EHOSTDOWN": ValueOf(syscall.EHOSTDOWN), + "EHOSTUNREACH": ValueOf(syscall.EHOSTUNREACH), + "EIDRM": ValueOf(syscall.EIDRM), + "EILSEQ": ValueOf(syscall.EILSEQ), + "EINPROGRESS": ValueOf(syscall.EINPROGRESS), + "EINTR": ValueOf(syscall.EINTR), + "EINVAL": ValueOf(syscall.EINVAL), + "EIO": ValueOf(syscall.EIO), + "EISCONN": ValueOf(syscall.EISCONN), + "EISDIR": ValueOf(syscall.EISDIR), + "EISNAM": ValueOf(syscall.EISNAM), + "EKEYEXPIRED": ValueOf(syscall.EKEYEXPIRED), + "EKEYREJECTED": ValueOf(syscall.EKEYREJECTED), + "EKEYREVOKED": ValueOf(syscall.EKEYREVOKED), + "EL2HLT": ValueOf(syscall.EL2HLT), + "EL2NSYNC": ValueOf(syscall.EL2NSYNC), + "EL3HLT": ValueOf(syscall.EL3HLT), + "EL3RST": ValueOf(syscall.EL3RST), + "ELIBACC": ValueOf(syscall.ELIBACC), + "ELIBBAD": ValueOf(syscall.ELIBBAD), + "ELIBEXEC": ValueOf(syscall.ELIBEXEC), + "ELIBMAX": ValueOf(syscall.ELIBMAX), + "ELIBSCN": ValueOf(syscall.ELIBSCN), + "ELNRNG": ValueOf(syscall.ELNRNG), + "ELOOP": ValueOf(syscall.ELOOP), + "EMEDIUMTYPE": ValueOf(syscall.EMEDIUMTYPE), + "EMFILE": ValueOf(syscall.EMFILE), + "EMLINK": ValueOf(syscall.EMLINK), + "EMSGSIZE": ValueOf(syscall.EMSGSIZE), + "EMULTIHOP": ValueOf(syscall.EMULTIHOP), + "ENAMETOOLONG": ValueOf(syscall.ENAMETOOLONG), + "ENAVAIL": ValueOf(syscall.ENAVAIL), + "ENETDOWN": ValueOf(syscall.ENETDOWN), + "ENETRESET": ValueOf(syscall.ENETRESET), + "ENETUNREACH": ValueOf(syscall.ENETUNREACH), + "ENFILE": ValueOf(syscall.ENFILE), + "ENOANO": ValueOf(syscall.ENOANO), + "ENOBUFS": ValueOf(syscall.ENOBUFS), + "ENOCSI": ValueOf(syscall.ENOCSI), + "ENODATA": ValueOf(syscall.ENODATA), + "ENODEV": ValueOf(syscall.ENODEV), + "ENOENT": ValueOf(syscall.ENOENT), + "ENOEXEC": ValueOf(syscall.ENOEXEC), + "ENOKEY": ValueOf(syscall.ENOKEY), + "ENOLCK": ValueOf(syscall.ENOLCK), + "ENOLINK": ValueOf(syscall.ENOLINK), + "ENOMEDIUM": ValueOf(syscall.ENOMEDIUM), + "ENOMEM": ValueOf(syscall.ENOMEM), + "ENOMSG": ValueOf(syscall.ENOMSG), + "ENONET": ValueOf(syscall.ENONET), + "ENOPKG": ValueOf(syscall.ENOPKG), + "ENOPROTOOPT": ValueOf(syscall.ENOPROTOOPT), + "ENOSPC": ValueOf(syscall.ENOSPC), + "ENOSR": ValueOf(syscall.ENOSR), + "ENOSTR": ValueOf(syscall.ENOSTR), + "ENOSYS": ValueOf(syscall.ENOSYS), + "ENOTBLK": ValueOf(syscall.ENOTBLK), + "ENOTCONN": ValueOf(syscall.ENOTCONN), + "ENOTDIR": ValueOf(syscall.ENOTDIR), + "ENOTEMPTY": ValueOf(syscall.ENOTEMPTY), + "ENOTNAM": ValueOf(syscall.ENOTNAM), + "ENOTRECOVERABLE": ValueOf(syscall.ENOTRECOVERABLE), + "ENOTSOCK": ValueOf(syscall.ENOTSOCK), + "ENOTSUP": ValueOf(syscall.ENOTSUP), + "ENOTTY": ValueOf(syscall.ENOTTY), + "ENOTUNIQ": ValueOf(syscall.ENOTUNIQ), + "ENXIO": ValueOf(syscall.ENXIO), + "EOPNOTSUPP": ValueOf(syscall.EOPNOTSUPP), + "EOVERFLOW": ValueOf(syscall.EOVERFLOW), + "EOWNERDEAD": ValueOf(syscall.EOWNERDEAD), + "EPERM": ValueOf(syscall.EPERM), + "EPFNOSUPPORT": ValueOf(syscall.EPFNOSUPPORT), + "EPIPE": ValueOf(syscall.EPIPE), + "EPOLLERR": ValueOf(syscall.EPOLLERR), + "EPOLLET": ValueOf(syscall.EPOLLET), + "EPOLLHUP": ValueOf(syscall.EPOLLHUP), + "EPOLLIN": ValueOf(syscall.EPOLLIN), + "EPOLLMSG": ValueOf(syscall.EPOLLMSG), + "EPOLLONESHOT": ValueOf(syscall.EPOLLONESHOT), + "EPOLLOUT": ValueOf(syscall.EPOLLOUT), + "EPOLLPRI": ValueOf(syscall.EPOLLPRI), + "EPOLLRDBAND": ValueOf(syscall.EPOLLRDBAND), + "EPOLLRDHUP": ValueOf(syscall.EPOLLRDHUP), + "EPOLLRDNORM": ValueOf(syscall.EPOLLRDNORM), + "EPOLLWRBAND": ValueOf(syscall.EPOLLWRBAND), + "EPOLLWRNORM": ValueOf(syscall.EPOLLWRNORM), + "EPOLL_CLOEXEC": ValueOf(syscall.EPOLL_CLOEXEC), + "EPOLL_CTL_ADD": ValueOf(syscall.EPOLL_CTL_ADD), + "EPOLL_CTL_DEL": ValueOf(syscall.EPOLL_CTL_DEL), + "EPOLL_CTL_MOD": ValueOf(syscall.EPOLL_CTL_MOD), + "EPOLL_NONBLOCK": ValueOf(syscall.EPOLL_NONBLOCK), + "EPROTO": ValueOf(syscall.EPROTO), + "EPROTONOSUPPORT": ValueOf(syscall.EPROTONOSUPPORT), + "EPROTOTYPE": ValueOf(syscall.EPROTOTYPE), + "ERANGE": ValueOf(syscall.ERANGE), + "EREMCHG": ValueOf(syscall.EREMCHG), + "EREMOTE": ValueOf(syscall.EREMOTE), + "EREMOTEIO": ValueOf(syscall.EREMOTEIO), + "ERESTART": ValueOf(syscall.ERESTART), + "ERFKILL": ValueOf(syscall.ERFKILL), + "EROFS": ValueOf(syscall.EROFS), + "ESHUTDOWN": ValueOf(syscall.ESHUTDOWN), + "ESOCKTNOSUPPORT": ValueOf(syscall.ESOCKTNOSUPPORT), + "ESPIPE": ValueOf(syscall.ESPIPE), + "ESRCH": ValueOf(syscall.ESRCH), + "ESRMNT": ValueOf(syscall.ESRMNT), + "ESTALE": ValueOf(syscall.ESTALE), + "ESTRPIPE": ValueOf(syscall.ESTRPIPE), + "ETH_P_1588": ValueOf(syscall.ETH_P_1588), + "ETH_P_8021Q": ValueOf(syscall.ETH_P_8021Q), + "ETH_P_802_2": ValueOf(syscall.ETH_P_802_2), + "ETH_P_802_3": ValueOf(syscall.ETH_P_802_3), + "ETH_P_AARP": ValueOf(syscall.ETH_P_AARP), + "ETH_P_ALL": ValueOf(syscall.ETH_P_ALL), + "ETH_P_AOE": ValueOf(syscall.ETH_P_AOE), + "ETH_P_ARCNET": ValueOf(syscall.ETH_P_ARCNET), + "ETH_P_ARP": ValueOf(syscall.ETH_P_ARP), + "ETH_P_ATALK": ValueOf(syscall.ETH_P_ATALK), + "ETH_P_ATMFATE": ValueOf(syscall.ETH_P_ATMFATE), + "ETH_P_ATMMPOA": ValueOf(syscall.ETH_P_ATMMPOA), + "ETH_P_AX25": ValueOf(syscall.ETH_P_AX25), + "ETH_P_BPQ": ValueOf(syscall.ETH_P_BPQ), + "ETH_P_CAIF": ValueOf(syscall.ETH_P_CAIF), + "ETH_P_CAN": ValueOf(syscall.ETH_P_CAN), + "ETH_P_CONTROL": ValueOf(syscall.ETH_P_CONTROL), + "ETH_P_CUST": ValueOf(syscall.ETH_P_CUST), + "ETH_P_DDCMP": ValueOf(syscall.ETH_P_DDCMP), + "ETH_P_DEC": ValueOf(syscall.ETH_P_DEC), + "ETH_P_DIAG": ValueOf(syscall.ETH_P_DIAG), + "ETH_P_DNA_DL": ValueOf(syscall.ETH_P_DNA_DL), + "ETH_P_DNA_RC": ValueOf(syscall.ETH_P_DNA_RC), + "ETH_P_DNA_RT": ValueOf(syscall.ETH_P_DNA_RT), + "ETH_P_DSA": ValueOf(syscall.ETH_P_DSA), + "ETH_P_ECONET": ValueOf(syscall.ETH_P_ECONET), + "ETH_P_EDSA": ValueOf(syscall.ETH_P_EDSA), + "ETH_P_FCOE": ValueOf(syscall.ETH_P_FCOE), + "ETH_P_FIP": ValueOf(syscall.ETH_P_FIP), + "ETH_P_HDLC": ValueOf(syscall.ETH_P_HDLC), + "ETH_P_IEEE802154": ValueOf(syscall.ETH_P_IEEE802154), + "ETH_P_IEEEPUP": ValueOf(syscall.ETH_P_IEEEPUP), + "ETH_P_IEEEPUPAT": ValueOf(syscall.ETH_P_IEEEPUPAT), + "ETH_P_IP": ValueOf(syscall.ETH_P_IP), + "ETH_P_IPV6": ValueOf(syscall.ETH_P_IPV6), + "ETH_P_IPX": ValueOf(syscall.ETH_P_IPX), + "ETH_P_IRDA": ValueOf(syscall.ETH_P_IRDA), + "ETH_P_LAT": ValueOf(syscall.ETH_P_LAT), + "ETH_P_LINK_CTL": ValueOf(syscall.ETH_P_LINK_CTL), + "ETH_P_LOCALTALK": ValueOf(syscall.ETH_P_LOCALTALK), + "ETH_P_LOOP": ValueOf(syscall.ETH_P_LOOP), + "ETH_P_MOBITEX": ValueOf(syscall.ETH_P_MOBITEX), + "ETH_P_MPLS_MC": ValueOf(syscall.ETH_P_MPLS_MC), + "ETH_P_MPLS_UC": ValueOf(syscall.ETH_P_MPLS_UC), + "ETH_P_PAE": ValueOf(syscall.ETH_P_PAE), + "ETH_P_PAUSE": ValueOf(syscall.ETH_P_PAUSE), + "ETH_P_PHONET": ValueOf(syscall.ETH_P_PHONET), + "ETH_P_PPPTALK": ValueOf(syscall.ETH_P_PPPTALK), + "ETH_P_PPP_DISC": ValueOf(syscall.ETH_P_PPP_DISC), + "ETH_P_PPP_MP": ValueOf(syscall.ETH_P_PPP_MP), + "ETH_P_PPP_SES": ValueOf(syscall.ETH_P_PPP_SES), + "ETH_P_PUP": ValueOf(syscall.ETH_P_PUP), + "ETH_P_PUPAT": ValueOf(syscall.ETH_P_PUPAT), + "ETH_P_RARP": ValueOf(syscall.ETH_P_RARP), + "ETH_P_SCA": ValueOf(syscall.ETH_P_SCA), + "ETH_P_SLOW": ValueOf(syscall.ETH_P_SLOW), + "ETH_P_SNAP": ValueOf(syscall.ETH_P_SNAP), + "ETH_P_TEB": ValueOf(syscall.ETH_P_TEB), + "ETH_P_TIPC": ValueOf(syscall.ETH_P_TIPC), + "ETH_P_TRAILER": ValueOf(syscall.ETH_P_TRAILER), + "ETH_P_TR_802_2": ValueOf(syscall.ETH_P_TR_802_2), + "ETH_P_WAN_PPP": ValueOf(syscall.ETH_P_WAN_PPP), + "ETH_P_WCCP": ValueOf(syscall.ETH_P_WCCP), + "ETH_P_X25": ValueOf(syscall.ETH_P_X25), + "ETIME": ValueOf(syscall.ETIME), + "ETIMEDOUT": ValueOf(syscall.ETIMEDOUT), + "ETOOMANYREFS": ValueOf(syscall.ETOOMANYREFS), + "ETXTBSY": ValueOf(syscall.ETXTBSY), + "EUCLEAN": ValueOf(syscall.EUCLEAN), + "EUNATCH": ValueOf(syscall.EUNATCH), + "EUSERS": ValueOf(syscall.EUSERS), + "EWOULDBLOCK": ValueOf(syscall.EWOULDBLOCK), + "EXDEV": ValueOf(syscall.EXDEV), + "EXFULL": ValueOf(syscall.EXFULL), + "Environ": ValueOf(syscall.Environ), + "EpollCreate": ValueOf(syscall.EpollCreate), + "EpollCreate1": ValueOf(syscall.EpollCreate1), + "EpollCtl": ValueOf(syscall.EpollCtl), + "EpollWait": ValueOf(syscall.EpollWait), + "Exec": ValueOf(syscall.Exec), + "Exit": ValueOf(syscall.Exit), + "FD_CLOEXEC": ValueOf(syscall.FD_CLOEXEC), + "FD_SETSIZE": ValueOf(syscall.FD_SETSIZE), + "FLUSHO": ValueOf(syscall.FLUSHO), + "F_DUPFD": ValueOf(syscall.F_DUPFD), + "F_DUPFD_CLOEXEC": ValueOf(syscall.F_DUPFD_CLOEXEC), + "F_EXLCK": ValueOf(syscall.F_EXLCK), + "F_GETFD": ValueOf(syscall.F_GETFD), + "F_GETFL": ValueOf(syscall.F_GETFL), + "F_GETLEASE": ValueOf(syscall.F_GETLEASE), + "F_GETLK": ValueOf(syscall.F_GETLK), + "F_GETLK64": ValueOf(syscall.F_GETLK64), + "F_GETOWN": ValueOf(syscall.F_GETOWN), + "F_GETOWN_EX": ValueOf(syscall.F_GETOWN_EX), + "F_GETPIPE_SZ": ValueOf(syscall.F_GETPIPE_SZ), + "F_GETSIG": ValueOf(syscall.F_GETSIG), + "F_LOCK": ValueOf(syscall.F_LOCK), + "F_NOTIFY": ValueOf(syscall.F_NOTIFY), + "F_OK": ValueOf(syscall.F_OK), + "F_RDLCK": ValueOf(syscall.F_RDLCK), + "F_SETFD": ValueOf(syscall.F_SETFD), + "F_SETFL": ValueOf(syscall.F_SETFL), + "F_SETLEASE": ValueOf(syscall.F_SETLEASE), + "F_SETLK": ValueOf(syscall.F_SETLK), + "F_SETLK64": ValueOf(syscall.F_SETLK64), + "F_SETLKW": ValueOf(syscall.F_SETLKW), + "F_SETLKW64": ValueOf(syscall.F_SETLKW64), + "F_SETOWN": ValueOf(syscall.F_SETOWN), + "F_SETOWN_EX": ValueOf(syscall.F_SETOWN_EX), + "F_SETPIPE_SZ": ValueOf(syscall.F_SETPIPE_SZ), + "F_SETSIG": ValueOf(syscall.F_SETSIG), + "F_SHLCK": ValueOf(syscall.F_SHLCK), + "F_TEST": ValueOf(syscall.F_TEST), + "F_TLOCK": ValueOf(syscall.F_TLOCK), + "F_ULOCK": ValueOf(syscall.F_ULOCK), + "F_UNLCK": ValueOf(syscall.F_UNLCK), + "F_WRLCK": ValueOf(syscall.F_WRLCK), + "Faccessat": ValueOf(syscall.Faccessat), + "Fallocate": ValueOf(syscall.Fallocate), + "Fchdir": ValueOf(syscall.Fchdir), + "Fchmod": ValueOf(syscall.Fchmod), + "Fchmodat": ValueOf(syscall.Fchmodat), + "Fchown": ValueOf(syscall.Fchown), + "Fchownat": ValueOf(syscall.Fchownat), + "FcntlFlock": ValueOf(syscall.FcntlFlock), + "Fdatasync": ValueOf(syscall.Fdatasync), + "Flock": ValueOf(syscall.Flock), + "ForkExec": ValueOf(syscall.ForkExec), + "ForkLock": ValueOf(&syscall.ForkLock).Elem(), + "Fstat": ValueOf(syscall.Fstat), + "Fstatfs": ValueOf(syscall.Fstatfs), + "Fsync": ValueOf(syscall.Fsync), + "Ftruncate": ValueOf(syscall.Ftruncate), + "Futimes": ValueOf(syscall.Futimes), + "Futimesat": ValueOf(syscall.Futimesat), + "Getcwd": ValueOf(syscall.Getcwd), + "Getdents": ValueOf(syscall.Getdents), + "Getegid": ValueOf(syscall.Getegid), + "Getenv": ValueOf(syscall.Getenv), + "Geteuid": ValueOf(syscall.Geteuid), + "Getgid": ValueOf(syscall.Getgid), + "Getgroups": ValueOf(syscall.Getgroups), + "Getpagesize": ValueOf(syscall.Getpagesize), + "Getpeername": ValueOf(syscall.Getpeername), + "Getpgid": ValueOf(syscall.Getpgid), + "Getpgrp": ValueOf(syscall.Getpgrp), + "Getpid": ValueOf(syscall.Getpid), + "Getppid": ValueOf(syscall.Getppid), + "Getpriority": ValueOf(syscall.Getpriority), + "Getrlimit": ValueOf(syscall.Getrlimit), + "Getrusage": ValueOf(syscall.Getrusage), + "Getsockname": ValueOf(syscall.Getsockname), + "GetsockoptICMPv6Filter": ValueOf(syscall.GetsockoptICMPv6Filter), + "GetsockoptIPMreq": ValueOf(syscall.GetsockoptIPMreq), + "GetsockoptIPMreqn": ValueOf(syscall.GetsockoptIPMreqn), + "GetsockoptIPv6MTUInfo": ValueOf(syscall.GetsockoptIPv6MTUInfo), + "GetsockoptIPv6Mreq": ValueOf(syscall.GetsockoptIPv6Mreq), + "GetsockoptInet4Addr": ValueOf(syscall.GetsockoptInet4Addr), + "GetsockoptInt": ValueOf(syscall.GetsockoptInt), + "GetsockoptUcred": ValueOf(syscall.GetsockoptUcred), + "Gettid": ValueOf(syscall.Gettid), + "Gettimeofday": ValueOf(syscall.Gettimeofday), + "Getuid": ValueOf(syscall.Getuid), + "Getwd": ValueOf(syscall.Getwd), + "Getxattr": ValueOf(syscall.Getxattr), + "HUPCL": ValueOf(syscall.HUPCL), + "ICANON": ValueOf(syscall.ICANON), + "ICMPV6_FILTER": ValueOf(syscall.ICMPV6_FILTER), + "ICRNL": ValueOf(syscall.ICRNL), + "IEXTEN": ValueOf(syscall.IEXTEN), + "IFA_ADDRESS": ValueOf(syscall.IFA_ADDRESS), + "IFA_ANYCAST": ValueOf(syscall.IFA_ANYCAST), + "IFA_BROADCAST": ValueOf(syscall.IFA_BROADCAST), + "IFA_CACHEINFO": ValueOf(syscall.IFA_CACHEINFO), + "IFA_F_DADFAILED": ValueOf(syscall.IFA_F_DADFAILED), + "IFA_F_DEPRECATED": ValueOf(syscall.IFA_F_DEPRECATED), + "IFA_F_HOMEADDRESS": ValueOf(syscall.IFA_F_HOMEADDRESS), + "IFA_F_NODAD": ValueOf(syscall.IFA_F_NODAD), + "IFA_F_OPTIMISTIC": ValueOf(syscall.IFA_F_OPTIMISTIC), + "IFA_F_PERMANENT": ValueOf(syscall.IFA_F_PERMANENT), + "IFA_F_SECONDARY": ValueOf(syscall.IFA_F_SECONDARY), + "IFA_F_TEMPORARY": ValueOf(syscall.IFA_F_TEMPORARY), + "IFA_F_TENTATIVE": ValueOf(syscall.IFA_F_TENTATIVE), + "IFA_LABEL": ValueOf(syscall.IFA_LABEL), + "IFA_LOCAL": ValueOf(syscall.IFA_LOCAL), + "IFA_MAX": ValueOf(syscall.IFA_MAX), + "IFA_MULTICAST": ValueOf(syscall.IFA_MULTICAST), + "IFA_UNSPEC": ValueOf(syscall.IFA_UNSPEC), + "IFF_ALLMULTI": ValueOf(syscall.IFF_ALLMULTI), + "IFF_AUTOMEDIA": ValueOf(syscall.IFF_AUTOMEDIA), + "IFF_BROADCAST": ValueOf(syscall.IFF_BROADCAST), + "IFF_DEBUG": ValueOf(syscall.IFF_DEBUG), + "IFF_DYNAMIC": ValueOf(syscall.IFF_DYNAMIC), + "IFF_LOOPBACK": ValueOf(syscall.IFF_LOOPBACK), + "IFF_MASTER": ValueOf(syscall.IFF_MASTER), + "IFF_MULTICAST": ValueOf(syscall.IFF_MULTICAST), + "IFF_NOARP": ValueOf(syscall.IFF_NOARP), + "IFF_NOTRAILERS": ValueOf(syscall.IFF_NOTRAILERS), + "IFF_NO_PI": ValueOf(syscall.IFF_NO_PI), + "IFF_ONE_QUEUE": ValueOf(syscall.IFF_ONE_QUEUE), + "IFF_POINTOPOINT": ValueOf(syscall.IFF_POINTOPOINT), + "IFF_PORTSEL": ValueOf(syscall.IFF_PORTSEL), + "IFF_PROMISC": ValueOf(syscall.IFF_PROMISC), + "IFF_RUNNING": ValueOf(syscall.IFF_RUNNING), + "IFF_SLAVE": ValueOf(syscall.IFF_SLAVE), + "IFF_TAP": ValueOf(syscall.IFF_TAP), + "IFF_TUN": ValueOf(syscall.IFF_TUN), + "IFF_TUN_EXCL": ValueOf(syscall.IFF_TUN_EXCL), + "IFF_UP": ValueOf(syscall.IFF_UP), + "IFF_VNET_HDR": ValueOf(syscall.IFF_VNET_HDR), + "IFLA_ADDRESS": ValueOf(syscall.IFLA_ADDRESS), + "IFLA_BROADCAST": ValueOf(syscall.IFLA_BROADCAST), + "IFLA_COST": ValueOf(syscall.IFLA_COST), + "IFLA_IFALIAS": ValueOf(syscall.IFLA_IFALIAS), + "IFLA_IFNAME": ValueOf(syscall.IFLA_IFNAME), + "IFLA_LINK": ValueOf(syscall.IFLA_LINK), + "IFLA_LINKINFO": ValueOf(syscall.IFLA_LINKINFO), + "IFLA_LINKMODE": ValueOf(syscall.IFLA_LINKMODE), + "IFLA_MAP": ValueOf(syscall.IFLA_MAP), + "IFLA_MASTER": ValueOf(syscall.IFLA_MASTER), + "IFLA_MAX": ValueOf(syscall.IFLA_MAX), + "IFLA_MTU": ValueOf(syscall.IFLA_MTU), + "IFLA_NET_NS_PID": ValueOf(syscall.IFLA_NET_NS_PID), + "IFLA_OPERSTATE": ValueOf(syscall.IFLA_OPERSTATE), + "IFLA_PRIORITY": ValueOf(syscall.IFLA_PRIORITY), + "IFLA_PROTINFO": ValueOf(syscall.IFLA_PROTINFO), + "IFLA_QDISC": ValueOf(syscall.IFLA_QDISC), + "IFLA_STATS": ValueOf(syscall.IFLA_STATS), + "IFLA_TXQLEN": ValueOf(syscall.IFLA_TXQLEN), + "IFLA_UNSPEC": ValueOf(syscall.IFLA_UNSPEC), + "IFLA_WEIGHT": ValueOf(syscall.IFLA_WEIGHT), + "IFLA_WIRELESS": ValueOf(syscall.IFLA_WIRELESS), + "IFNAMSIZ": ValueOf(syscall.IFNAMSIZ), + "IGNBRK": ValueOf(syscall.IGNBRK), + "IGNCR": ValueOf(syscall.IGNCR), + "IGNPAR": ValueOf(syscall.IGNPAR), + "IMAXBEL": ValueOf(syscall.IMAXBEL), + "INLCR": ValueOf(syscall.INLCR), + "INPCK": ValueOf(syscall.INPCK), + "IN_ACCESS": ValueOf(syscall.IN_ACCESS), + "IN_ALL_EVENTS": ValueOf(syscall.IN_ALL_EVENTS), + "IN_ATTRIB": ValueOf(syscall.IN_ATTRIB), + "IN_CLASSA_HOST": ValueOf(syscall.IN_CLASSA_HOST), + "IN_CLASSA_MAX": ValueOf(syscall.IN_CLASSA_MAX), + "IN_CLASSA_NET": ValueOf(uint32(syscall.IN_CLASSA_NET)), + "IN_CLASSA_NSHIFT": ValueOf(syscall.IN_CLASSA_NSHIFT), + "IN_CLASSB_HOST": ValueOf(syscall.IN_CLASSB_HOST), + "IN_CLASSB_MAX": ValueOf(syscall.IN_CLASSB_MAX), + "IN_CLASSB_NET": ValueOf(uint32(syscall.IN_CLASSB_NET)), + "IN_CLASSB_NSHIFT": ValueOf(syscall.IN_CLASSB_NSHIFT), + "IN_CLASSC_HOST": ValueOf(syscall.IN_CLASSC_HOST), + "IN_CLASSC_NET": ValueOf(uint32(syscall.IN_CLASSC_NET)), + "IN_CLASSC_NSHIFT": ValueOf(syscall.IN_CLASSC_NSHIFT), + "IN_CLOEXEC": ValueOf(syscall.IN_CLOEXEC), + "IN_CLOSE": ValueOf(syscall.IN_CLOSE), + "IN_CLOSE_NOWRITE": ValueOf(syscall.IN_CLOSE_NOWRITE), + "IN_CLOSE_WRITE": ValueOf(syscall.IN_CLOSE_WRITE), + "IN_CREATE": ValueOf(syscall.IN_CREATE), + "IN_DELETE": ValueOf(syscall.IN_DELETE), + "IN_DELETE_SELF": ValueOf(syscall.IN_DELETE_SELF), + "IN_DONT_FOLLOW": ValueOf(syscall.IN_DONT_FOLLOW), + "IN_EXCL_UNLINK": ValueOf(syscall.IN_EXCL_UNLINK), + "IN_IGNORED": ValueOf(syscall.IN_IGNORED), + "IN_ISDIR": ValueOf(syscall.IN_ISDIR), + "IN_LOOPBACKNET": ValueOf(syscall.IN_LOOPBACKNET), + "IN_MASK_ADD": ValueOf(syscall.IN_MASK_ADD), + "IN_MODIFY": ValueOf(syscall.IN_MODIFY), + "IN_MOVE": ValueOf(syscall.IN_MOVE), + "IN_MOVED_FROM": ValueOf(syscall.IN_MOVED_FROM), + "IN_MOVED_TO": ValueOf(syscall.IN_MOVED_TO), + "IN_MOVE_SELF": ValueOf(syscall.IN_MOVE_SELF), + "IN_NONBLOCK": ValueOf(syscall.IN_NONBLOCK), + "IN_ONESHOT": ValueOf(uint32(syscall.IN_ONESHOT)), + "IN_ONLYDIR": ValueOf(syscall.IN_ONLYDIR), + "IN_OPEN": ValueOf(syscall.IN_OPEN), + "IN_Q_OVERFLOW": ValueOf(syscall.IN_Q_OVERFLOW), + "IN_UNMOUNT": ValueOf(syscall.IN_UNMOUNT), + "IPPROTO_AH": ValueOf(syscall.IPPROTO_AH), + "IPPROTO_COMP": ValueOf(syscall.IPPROTO_COMP), + "IPPROTO_DCCP": ValueOf(syscall.IPPROTO_DCCP), + "IPPROTO_DSTOPTS": ValueOf(syscall.IPPROTO_DSTOPTS), + "IPPROTO_EGP": ValueOf(syscall.IPPROTO_EGP), + "IPPROTO_ENCAP": ValueOf(syscall.IPPROTO_ENCAP), + "IPPROTO_ESP": ValueOf(syscall.IPPROTO_ESP), + "IPPROTO_FRAGMENT": ValueOf(syscall.IPPROTO_FRAGMENT), + "IPPROTO_GRE": ValueOf(syscall.IPPROTO_GRE), + "IPPROTO_HOPOPTS": ValueOf(syscall.IPPROTO_HOPOPTS), + "IPPROTO_ICMP": ValueOf(syscall.IPPROTO_ICMP), + "IPPROTO_ICMPV6": ValueOf(syscall.IPPROTO_ICMPV6), + "IPPROTO_IDP": ValueOf(syscall.IPPROTO_IDP), + "IPPROTO_IGMP": ValueOf(syscall.IPPROTO_IGMP), + "IPPROTO_IP": ValueOf(syscall.IPPROTO_IP), + "IPPROTO_IPIP": ValueOf(syscall.IPPROTO_IPIP), + "IPPROTO_IPV6": ValueOf(syscall.IPPROTO_IPV6), + "IPPROTO_MTP": ValueOf(syscall.IPPROTO_MTP), + "IPPROTO_NONE": ValueOf(syscall.IPPROTO_NONE), + "IPPROTO_PIM": ValueOf(syscall.IPPROTO_PIM), + "IPPROTO_PUP": ValueOf(syscall.IPPROTO_PUP), + "IPPROTO_RAW": ValueOf(syscall.IPPROTO_RAW), + "IPPROTO_ROUTING": ValueOf(syscall.IPPROTO_ROUTING), + "IPPROTO_RSVP": ValueOf(syscall.IPPROTO_RSVP), + "IPPROTO_SCTP": ValueOf(syscall.IPPROTO_SCTP), + "IPPROTO_TCP": ValueOf(syscall.IPPROTO_TCP), + "IPPROTO_TP": ValueOf(syscall.IPPROTO_TP), + "IPPROTO_UDP": ValueOf(syscall.IPPROTO_UDP), + "IPPROTO_UDPLITE": ValueOf(syscall.IPPROTO_UDPLITE), + "IPV6_2292DSTOPTS": ValueOf(syscall.IPV6_2292DSTOPTS), + "IPV6_2292HOPLIMIT": ValueOf(syscall.IPV6_2292HOPLIMIT), + "IPV6_2292HOPOPTS": ValueOf(syscall.IPV6_2292HOPOPTS), + "IPV6_2292PKTINFO": ValueOf(syscall.IPV6_2292PKTINFO), + "IPV6_2292PKTOPTIONS": ValueOf(syscall.IPV6_2292PKTOPTIONS), + "IPV6_2292RTHDR": ValueOf(syscall.IPV6_2292RTHDR), + "IPV6_ADDRFORM": ValueOf(syscall.IPV6_ADDRFORM), + "IPV6_ADD_MEMBERSHIP": ValueOf(syscall.IPV6_ADD_MEMBERSHIP), + "IPV6_AUTHHDR": ValueOf(syscall.IPV6_AUTHHDR), + "IPV6_CHECKSUM": ValueOf(syscall.IPV6_CHECKSUM), + "IPV6_DROP_MEMBERSHIP": ValueOf(syscall.IPV6_DROP_MEMBERSHIP), + "IPV6_DSTOPTS": ValueOf(syscall.IPV6_DSTOPTS), + "IPV6_HOPLIMIT": ValueOf(syscall.IPV6_HOPLIMIT), + "IPV6_HOPOPTS": ValueOf(syscall.IPV6_HOPOPTS), + "IPV6_IPSEC_POLICY": ValueOf(syscall.IPV6_IPSEC_POLICY), + "IPV6_JOIN_ANYCAST": ValueOf(syscall.IPV6_JOIN_ANYCAST), + "IPV6_JOIN_GROUP": ValueOf(syscall.IPV6_JOIN_GROUP), + "IPV6_LEAVE_ANYCAST": ValueOf(syscall.IPV6_LEAVE_ANYCAST), + "IPV6_LEAVE_GROUP": ValueOf(syscall.IPV6_LEAVE_GROUP), + "IPV6_MTU": ValueOf(syscall.IPV6_MTU), + "IPV6_MTU_DISCOVER": ValueOf(syscall.IPV6_MTU_DISCOVER), + "IPV6_MULTICAST_HOPS": ValueOf(syscall.IPV6_MULTICAST_HOPS), + "IPV6_MULTICAST_IF": ValueOf(syscall.IPV6_MULTICAST_IF), + "IPV6_MULTICAST_LOOP": ValueOf(syscall.IPV6_MULTICAST_LOOP), + "IPV6_NEXTHOP": ValueOf(syscall.IPV6_NEXTHOP), + "IPV6_PKTINFO": ValueOf(syscall.IPV6_PKTINFO), + "IPV6_PMTUDISC_DO": ValueOf(syscall.IPV6_PMTUDISC_DO), + "IPV6_PMTUDISC_DONT": ValueOf(syscall.IPV6_PMTUDISC_DONT), + "IPV6_PMTUDISC_PROBE": ValueOf(syscall.IPV6_PMTUDISC_PROBE), + "IPV6_PMTUDISC_WANT": ValueOf(syscall.IPV6_PMTUDISC_WANT), + "IPV6_RECVDSTOPTS": ValueOf(syscall.IPV6_RECVDSTOPTS), + "IPV6_RECVERR": ValueOf(syscall.IPV6_RECVERR), + "IPV6_RECVHOPLIMIT": ValueOf(syscall.IPV6_RECVHOPLIMIT), + "IPV6_RECVHOPOPTS": ValueOf(syscall.IPV6_RECVHOPOPTS), + "IPV6_RECVPKTINFO": ValueOf(syscall.IPV6_RECVPKTINFO), + "IPV6_RECVRTHDR": ValueOf(syscall.IPV6_RECVRTHDR), + "IPV6_RECVTCLASS": ValueOf(syscall.IPV6_RECVTCLASS), + "IPV6_ROUTER_ALERT": ValueOf(syscall.IPV6_ROUTER_ALERT), + "IPV6_RTHDR": ValueOf(syscall.IPV6_RTHDR), + "IPV6_RTHDRDSTOPTS": ValueOf(syscall.IPV6_RTHDRDSTOPTS), + "IPV6_RTHDR_LOOSE": ValueOf(syscall.IPV6_RTHDR_LOOSE), + "IPV6_RTHDR_STRICT": ValueOf(syscall.IPV6_RTHDR_STRICT), + "IPV6_RTHDR_TYPE_0": ValueOf(syscall.IPV6_RTHDR_TYPE_0), + "IPV6_RXDSTOPTS": ValueOf(syscall.IPV6_RXDSTOPTS), + "IPV6_RXHOPOPTS": ValueOf(syscall.IPV6_RXHOPOPTS), + "IPV6_TCLASS": ValueOf(syscall.IPV6_TCLASS), + "IPV6_UNICAST_HOPS": ValueOf(syscall.IPV6_UNICAST_HOPS), + "IPV6_V6ONLY": ValueOf(syscall.IPV6_V6ONLY), + "IPV6_XFRM_POLICY": ValueOf(syscall.IPV6_XFRM_POLICY), + "IP_ADD_MEMBERSHIP": ValueOf(syscall.IP_ADD_MEMBERSHIP), + "IP_ADD_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_ADD_SOURCE_MEMBERSHIP), + "IP_BLOCK_SOURCE": ValueOf(syscall.IP_BLOCK_SOURCE), + "IP_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IP_DEFAULT_MULTICAST_LOOP), + "IP_DEFAULT_MULTICAST_TTL": ValueOf(syscall.IP_DEFAULT_MULTICAST_TTL), + "IP_DF": ValueOf(syscall.IP_DF), + "IP_DROP_MEMBERSHIP": ValueOf(syscall.IP_DROP_MEMBERSHIP), + "IP_DROP_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_DROP_SOURCE_MEMBERSHIP), + "IP_FREEBIND": ValueOf(syscall.IP_FREEBIND), + "IP_HDRINCL": ValueOf(syscall.IP_HDRINCL), + "IP_IPSEC_POLICY": ValueOf(syscall.IP_IPSEC_POLICY), + "IP_MAXPACKET": ValueOf(syscall.IP_MAXPACKET), + "IP_MAX_MEMBERSHIPS": ValueOf(syscall.IP_MAX_MEMBERSHIPS), + "IP_MF": ValueOf(syscall.IP_MF), + "IP_MINTTL": ValueOf(syscall.IP_MINTTL), + "IP_MSFILTER": ValueOf(syscall.IP_MSFILTER), + "IP_MSS": ValueOf(syscall.IP_MSS), + "IP_MTU": ValueOf(syscall.IP_MTU), + "IP_MTU_DISCOVER": ValueOf(syscall.IP_MTU_DISCOVER), + "IP_MULTICAST_IF": ValueOf(syscall.IP_MULTICAST_IF), + "IP_MULTICAST_LOOP": ValueOf(syscall.IP_MULTICAST_LOOP), + "IP_MULTICAST_TTL": ValueOf(syscall.IP_MULTICAST_TTL), + "IP_OFFMASK": ValueOf(syscall.IP_OFFMASK), + "IP_OPTIONS": ValueOf(syscall.IP_OPTIONS), + "IP_ORIGDSTADDR": ValueOf(syscall.IP_ORIGDSTADDR), + "IP_PASSSEC": ValueOf(syscall.IP_PASSSEC), + "IP_PKTINFO": ValueOf(syscall.IP_PKTINFO), + "IP_PKTOPTIONS": ValueOf(syscall.IP_PKTOPTIONS), + "IP_PMTUDISC": ValueOf(syscall.IP_PMTUDISC), + "IP_PMTUDISC_DO": ValueOf(syscall.IP_PMTUDISC_DO), + "IP_PMTUDISC_DONT": ValueOf(syscall.IP_PMTUDISC_DONT), + "IP_PMTUDISC_PROBE": ValueOf(syscall.IP_PMTUDISC_PROBE), + "IP_PMTUDISC_WANT": ValueOf(syscall.IP_PMTUDISC_WANT), + "IP_RECVERR": ValueOf(syscall.IP_RECVERR), + "IP_RECVOPTS": ValueOf(syscall.IP_RECVOPTS), + "IP_RECVORIGDSTADDR": ValueOf(syscall.IP_RECVORIGDSTADDR), + "IP_RECVRETOPTS": ValueOf(syscall.IP_RECVRETOPTS), + "IP_RECVTOS": ValueOf(syscall.IP_RECVTOS), + "IP_RECVTTL": ValueOf(syscall.IP_RECVTTL), + "IP_RETOPTS": ValueOf(syscall.IP_RETOPTS), + "IP_RF": ValueOf(syscall.IP_RF), + "IP_ROUTER_ALERT": ValueOf(syscall.IP_ROUTER_ALERT), + "IP_TOS": ValueOf(syscall.IP_TOS), + "IP_TRANSPARENT": ValueOf(syscall.IP_TRANSPARENT), + "IP_TTL": ValueOf(syscall.IP_TTL), + "IP_UNBLOCK_SOURCE": ValueOf(syscall.IP_UNBLOCK_SOURCE), + "IP_XFRM_POLICY": ValueOf(syscall.IP_XFRM_POLICY), + "ISIG": ValueOf(syscall.ISIG), + "ISTRIP": ValueOf(syscall.ISTRIP), + "IUCLC": ValueOf(syscall.IUCLC), + "IUTF8": ValueOf(syscall.IUTF8), + "IXANY": ValueOf(syscall.IXANY), + "IXOFF": ValueOf(syscall.IXOFF), + "IXON": ValueOf(syscall.IXON), + "ImplementsGetwd": ValueOf(syscall.ImplementsGetwd), + "InotifyAddWatch": ValueOf(syscall.InotifyAddWatch), + "InotifyInit": ValueOf(syscall.InotifyInit), + "InotifyInit1": ValueOf(syscall.InotifyInit1), + "InotifyRmWatch": ValueOf(syscall.InotifyRmWatch), + "Ioperm": ValueOf(syscall.Ioperm), + "Iopl": ValueOf(syscall.Iopl), + "Kill": ValueOf(syscall.Kill), + "Klogctl": ValueOf(syscall.Klogctl), + "LINUX_REBOOT_CMD_CAD_OFF": ValueOf(syscall.LINUX_REBOOT_CMD_CAD_OFF), + "LINUX_REBOOT_CMD_CAD_ON": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_CAD_ON)), + "LINUX_REBOOT_CMD_HALT": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_HALT)), + "LINUX_REBOOT_CMD_KEXEC": ValueOf(syscall.LINUX_REBOOT_CMD_KEXEC), + "LINUX_REBOOT_CMD_POWER_OFF": ValueOf(syscall.LINUX_REBOOT_CMD_POWER_OFF), + "LINUX_REBOOT_CMD_RESTART": ValueOf(syscall.LINUX_REBOOT_CMD_RESTART), + "LINUX_REBOOT_CMD_RESTART2": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_RESTART2)), + "LINUX_REBOOT_CMD_SW_SUSPEND": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_SW_SUSPEND)), + "LINUX_REBOOT_MAGIC1": ValueOf(uint32(syscall.LINUX_REBOOT_MAGIC1)), + "LINUX_REBOOT_MAGIC2": ValueOf(syscall.LINUX_REBOOT_MAGIC2), + "LOCK_EX": ValueOf(syscall.LOCK_EX), + "LOCK_NB": ValueOf(syscall.LOCK_NB), + "LOCK_SH": ValueOf(syscall.LOCK_SH), + "LOCK_UN": ValueOf(syscall.LOCK_UN), + "Lchown": ValueOf(syscall.Lchown), + "Link": ValueOf(syscall.Link), + "Listen": ValueOf(syscall.Listen), + "Listxattr": ValueOf(syscall.Listxattr), + "LsfJump": ValueOf(syscall.LsfJump), + "LsfSocket": ValueOf(syscall.LsfSocket), + "LsfStmt": ValueOf(syscall.LsfStmt), + "Lstat": ValueOf(syscall.Lstat), + "MADV_DOFORK": ValueOf(syscall.MADV_DOFORK), + "MADV_DONTFORK": ValueOf(syscall.MADV_DONTFORK), + "MADV_DONTNEED": ValueOf(syscall.MADV_DONTNEED), + "MADV_HUGEPAGE": ValueOf(syscall.MADV_HUGEPAGE), + "MADV_HWPOISON": ValueOf(syscall.MADV_HWPOISON), + "MADV_MERGEABLE": ValueOf(syscall.MADV_MERGEABLE), + "MADV_NOHUGEPAGE": ValueOf(syscall.MADV_NOHUGEPAGE), + "MADV_NORMAL": ValueOf(syscall.MADV_NORMAL), + "MADV_RANDOM": ValueOf(syscall.MADV_RANDOM), + "MADV_REMOVE": ValueOf(syscall.MADV_REMOVE), + "MADV_SEQUENTIAL": ValueOf(syscall.MADV_SEQUENTIAL), + "MADV_UNMERGEABLE": ValueOf(syscall.MADV_UNMERGEABLE), + "MADV_WILLNEED": ValueOf(syscall.MADV_WILLNEED), + "MAP_32BIT": ValueOf(syscall.MAP_32BIT), + "MAP_ANON": ValueOf(syscall.MAP_ANON), + "MAP_ANONYMOUS": ValueOf(syscall.MAP_ANONYMOUS), + "MAP_DENYWRITE": ValueOf(syscall.MAP_DENYWRITE), + "MAP_EXECUTABLE": ValueOf(syscall.MAP_EXECUTABLE), + "MAP_FILE": ValueOf(syscall.MAP_FILE), + "MAP_FIXED": ValueOf(syscall.MAP_FIXED), + "MAP_GROWSDOWN": ValueOf(syscall.MAP_GROWSDOWN), + "MAP_HUGETLB": ValueOf(syscall.MAP_HUGETLB), + "MAP_LOCKED": ValueOf(syscall.MAP_LOCKED), + "MAP_NONBLOCK": ValueOf(syscall.MAP_NONBLOCK), + "MAP_NORESERVE": ValueOf(syscall.MAP_NORESERVE), + "MAP_POPULATE": ValueOf(syscall.MAP_POPULATE), + "MAP_PRIVATE": ValueOf(syscall.MAP_PRIVATE), + "MAP_SHARED": ValueOf(syscall.MAP_SHARED), + "MAP_STACK": ValueOf(syscall.MAP_STACK), + "MAP_TYPE": ValueOf(syscall.MAP_TYPE), + "MCL_CURRENT": ValueOf(syscall.MCL_CURRENT), + "MCL_FUTURE": ValueOf(syscall.MCL_FUTURE), + "MNT_DETACH": ValueOf(syscall.MNT_DETACH), + "MNT_EXPIRE": ValueOf(syscall.MNT_EXPIRE), + "MNT_FORCE": ValueOf(syscall.MNT_FORCE), + "MSG_CMSG_CLOEXEC": ValueOf(syscall.MSG_CMSG_CLOEXEC), + "MSG_CONFIRM": ValueOf(syscall.MSG_CONFIRM), + "MSG_CTRUNC": ValueOf(syscall.MSG_CTRUNC), + "MSG_DONTROUTE": ValueOf(syscall.MSG_DONTROUTE), + "MSG_DONTWAIT": ValueOf(syscall.MSG_DONTWAIT), + "MSG_EOR": ValueOf(syscall.MSG_EOR), + "MSG_ERRQUEUE": ValueOf(syscall.MSG_ERRQUEUE), + "MSG_FASTOPEN": ValueOf(syscall.MSG_FASTOPEN), + "MSG_FIN": ValueOf(syscall.MSG_FIN), + "MSG_MORE": ValueOf(syscall.MSG_MORE), + "MSG_NOSIGNAL": ValueOf(syscall.MSG_NOSIGNAL), + "MSG_OOB": ValueOf(syscall.MSG_OOB), + "MSG_PEEK": ValueOf(syscall.MSG_PEEK), + "MSG_PROXY": ValueOf(syscall.MSG_PROXY), + "MSG_RST": ValueOf(syscall.MSG_RST), + "MSG_SYN": ValueOf(syscall.MSG_SYN), + "MSG_TRUNC": ValueOf(syscall.MSG_TRUNC), + "MSG_TRYHARD": ValueOf(syscall.MSG_TRYHARD), + "MSG_WAITALL": ValueOf(syscall.MSG_WAITALL), + "MSG_WAITFORONE": ValueOf(syscall.MSG_WAITFORONE), + "MS_ACTIVE": ValueOf(syscall.MS_ACTIVE), + "MS_ASYNC": ValueOf(syscall.MS_ASYNC), + "MS_BIND": ValueOf(syscall.MS_BIND), + "MS_DIRSYNC": ValueOf(syscall.MS_DIRSYNC), + "MS_INVALIDATE": ValueOf(syscall.MS_INVALIDATE), + "MS_I_VERSION": ValueOf(syscall.MS_I_VERSION), + "MS_KERNMOUNT": ValueOf(syscall.MS_KERNMOUNT), + "MS_MANDLOCK": ValueOf(syscall.MS_MANDLOCK), + "MS_MGC_MSK": ValueOf(uint32(syscall.MS_MGC_MSK)), + "MS_MGC_VAL": ValueOf(uint32(syscall.MS_MGC_VAL)), + "MS_MOVE": ValueOf(syscall.MS_MOVE), + "MS_NOATIME": ValueOf(syscall.MS_NOATIME), + "MS_NODEV": ValueOf(syscall.MS_NODEV), + "MS_NODIRATIME": ValueOf(syscall.MS_NODIRATIME), + "MS_NOEXEC": ValueOf(syscall.MS_NOEXEC), + "MS_NOSUID": ValueOf(syscall.MS_NOSUID), + "MS_NOUSER": ValueOf(syscall.MS_NOUSER), + "MS_POSIXACL": ValueOf(syscall.MS_POSIXACL), + "MS_PRIVATE": ValueOf(syscall.MS_PRIVATE), + "MS_RDONLY": ValueOf(syscall.MS_RDONLY), + "MS_REC": ValueOf(syscall.MS_REC), + "MS_RELATIME": ValueOf(syscall.MS_RELATIME), + "MS_REMOUNT": ValueOf(syscall.MS_REMOUNT), + "MS_RMT_MASK": ValueOf(syscall.MS_RMT_MASK), + "MS_SHARED": ValueOf(syscall.MS_SHARED), + "MS_SILENT": ValueOf(syscall.MS_SILENT), + "MS_SLAVE": ValueOf(syscall.MS_SLAVE), + "MS_STRICTATIME": ValueOf(syscall.MS_STRICTATIME), + "MS_SYNC": ValueOf(syscall.MS_SYNC), + "MS_SYNCHRONOUS": ValueOf(syscall.MS_SYNCHRONOUS), + "MS_UNBINDABLE": ValueOf(syscall.MS_UNBINDABLE), + "Madvise": ValueOf(syscall.Madvise), + "Mkdir": ValueOf(syscall.Mkdir), + "Mkdirat": ValueOf(syscall.Mkdirat), + "Mkfifo": ValueOf(syscall.Mkfifo), + "Mknod": ValueOf(syscall.Mknod), + "Mknodat": ValueOf(syscall.Mknodat), + "Mlock": ValueOf(syscall.Mlock), + "Mlockall": ValueOf(syscall.Mlockall), + "Mmap": ValueOf(syscall.Mmap), + "Mount": ValueOf(syscall.Mount), + "Mprotect": ValueOf(syscall.Mprotect), + "Munlock": ValueOf(syscall.Munlock), + "Munlockall": ValueOf(syscall.Munlockall), + "Munmap": ValueOf(syscall.Munmap), + "NAME_MAX": ValueOf(syscall.NAME_MAX), + "NETLINK_ADD_MEMBERSHIP": ValueOf(syscall.NETLINK_ADD_MEMBERSHIP), + "NETLINK_AUDIT": ValueOf(syscall.NETLINK_AUDIT), + "NETLINK_BROADCAST_ERROR": ValueOf(syscall.NETLINK_BROADCAST_ERROR), + "NETLINK_CONNECTOR": ValueOf(syscall.NETLINK_CONNECTOR), + "NETLINK_DNRTMSG": ValueOf(syscall.NETLINK_DNRTMSG), + "NETLINK_DROP_MEMBERSHIP": ValueOf(syscall.NETLINK_DROP_MEMBERSHIP), + "NETLINK_ECRYPTFS": ValueOf(syscall.NETLINK_ECRYPTFS), + "NETLINK_FIB_LOOKUP": ValueOf(syscall.NETLINK_FIB_LOOKUP), + "NETLINK_FIREWALL": ValueOf(syscall.NETLINK_FIREWALL), + "NETLINK_GENERIC": ValueOf(syscall.NETLINK_GENERIC), + "NETLINK_INET_DIAG": ValueOf(syscall.NETLINK_INET_DIAG), + "NETLINK_IP6_FW": ValueOf(syscall.NETLINK_IP6_FW), + "NETLINK_ISCSI": ValueOf(syscall.NETLINK_ISCSI), + "NETLINK_KOBJECT_UEVENT": ValueOf(syscall.NETLINK_KOBJECT_UEVENT), + "NETLINK_NETFILTER": ValueOf(syscall.NETLINK_NETFILTER), + "NETLINK_NFLOG": ValueOf(syscall.NETLINK_NFLOG), + "NETLINK_NO_ENOBUFS": ValueOf(syscall.NETLINK_NO_ENOBUFS), + "NETLINK_PKTINFO": ValueOf(syscall.NETLINK_PKTINFO), + "NETLINK_ROUTE": ValueOf(syscall.NETLINK_ROUTE), + "NETLINK_SCSITRANSPORT": ValueOf(syscall.NETLINK_SCSITRANSPORT), + "NETLINK_SELINUX": ValueOf(syscall.NETLINK_SELINUX), + "NETLINK_UNUSED": ValueOf(syscall.NETLINK_UNUSED), + "NETLINK_USERSOCK": ValueOf(syscall.NETLINK_USERSOCK), + "NETLINK_XFRM": ValueOf(syscall.NETLINK_XFRM), + "NLA_ALIGNTO": ValueOf(syscall.NLA_ALIGNTO), + "NLA_F_NESTED": ValueOf(syscall.NLA_F_NESTED), + "NLA_F_NET_BYTEORDER": ValueOf(syscall.NLA_F_NET_BYTEORDER), + "NLA_HDRLEN": ValueOf(syscall.NLA_HDRLEN), + "NLMSG_ALIGNTO": ValueOf(syscall.NLMSG_ALIGNTO), + "NLMSG_DONE": ValueOf(syscall.NLMSG_DONE), + "NLMSG_ERROR": ValueOf(syscall.NLMSG_ERROR), + "NLMSG_HDRLEN": ValueOf(syscall.NLMSG_HDRLEN), + "NLMSG_MIN_TYPE": ValueOf(syscall.NLMSG_MIN_TYPE), + "NLMSG_NOOP": ValueOf(syscall.NLMSG_NOOP), + "NLMSG_OVERRUN": ValueOf(syscall.NLMSG_OVERRUN), + "NLM_F_ACK": ValueOf(syscall.NLM_F_ACK), + "NLM_F_APPEND": ValueOf(syscall.NLM_F_APPEND), + "NLM_F_ATOMIC": ValueOf(syscall.NLM_F_ATOMIC), + "NLM_F_CREATE": ValueOf(syscall.NLM_F_CREATE), + "NLM_F_DUMP": ValueOf(syscall.NLM_F_DUMP), + "NLM_F_ECHO": ValueOf(syscall.NLM_F_ECHO), + "NLM_F_EXCL": ValueOf(syscall.NLM_F_EXCL), + "NLM_F_MATCH": ValueOf(syscall.NLM_F_MATCH), + "NLM_F_MULTI": ValueOf(syscall.NLM_F_MULTI), + "NLM_F_REPLACE": ValueOf(syscall.NLM_F_REPLACE), + "NLM_F_REQUEST": ValueOf(syscall.NLM_F_REQUEST), + "NLM_F_ROOT": ValueOf(syscall.NLM_F_ROOT), + "NOFLSH": ValueOf(syscall.NOFLSH), + "Nanosleep": ValueOf(syscall.Nanosleep), + "NetlinkRIB": ValueOf(syscall.NetlinkRIB), + "NsecToTimespec": ValueOf(syscall.NsecToTimespec), + "NsecToTimeval": ValueOf(syscall.NsecToTimeval), + "OCRNL": ValueOf(syscall.OCRNL), + "OFDEL": ValueOf(syscall.OFDEL), + "OFILL": ValueOf(syscall.OFILL), + "OLCUC": ValueOf(syscall.OLCUC), + "ONLCR": ValueOf(syscall.ONLCR), + "ONLRET": ValueOf(syscall.ONLRET), + "ONOCR": ValueOf(syscall.ONOCR), + "OPOST": ValueOf(syscall.OPOST), + "O_ACCMODE": ValueOf(syscall.O_ACCMODE), + "O_APPEND": ValueOf(syscall.O_APPEND), + "O_ASYNC": ValueOf(syscall.O_ASYNC), + "O_CLOEXEC": ValueOf(syscall.O_CLOEXEC), + "O_CREAT": ValueOf(syscall.O_CREAT), + "O_DIRECT": ValueOf(syscall.O_DIRECT), + "O_DIRECTORY": ValueOf(syscall.O_DIRECTORY), + "O_DSYNC": ValueOf(syscall.O_DSYNC), + "O_EXCL": ValueOf(syscall.O_EXCL), + "O_FSYNC": ValueOf(syscall.O_FSYNC), + "O_LARGEFILE": ValueOf(syscall.O_LARGEFILE), + "O_NDELAY": ValueOf(syscall.O_NDELAY), + "O_NOATIME": ValueOf(syscall.O_NOATIME), + "O_NOCTTY": ValueOf(syscall.O_NOCTTY), + "O_NOFOLLOW": ValueOf(syscall.O_NOFOLLOW), + "O_NONBLOCK": ValueOf(syscall.O_NONBLOCK), + "O_RDONLY": ValueOf(syscall.O_RDONLY), + "O_RDWR": ValueOf(syscall.O_RDWR), + "O_RSYNC": ValueOf(syscall.O_RSYNC), + "O_SYNC": ValueOf(syscall.O_SYNC), + "O_TRUNC": ValueOf(syscall.O_TRUNC), + "O_WRONLY": ValueOf(syscall.O_WRONLY), + "Open": ValueOf(syscall.Open), + "Openat": ValueOf(syscall.Openat), + "PACKET_ADD_MEMBERSHIP": ValueOf(syscall.PACKET_ADD_MEMBERSHIP), + "PACKET_BROADCAST": ValueOf(syscall.PACKET_BROADCAST), + "PACKET_DROP_MEMBERSHIP": ValueOf(syscall.PACKET_DROP_MEMBERSHIP), + "PACKET_FASTROUTE": ValueOf(syscall.PACKET_FASTROUTE), + "PACKET_HOST": ValueOf(syscall.PACKET_HOST), + "PACKET_LOOPBACK": ValueOf(syscall.PACKET_LOOPBACK), + "PACKET_MR_ALLMULTI": ValueOf(syscall.PACKET_MR_ALLMULTI), + "PACKET_MR_MULTICAST": ValueOf(syscall.PACKET_MR_MULTICAST), + "PACKET_MR_PROMISC": ValueOf(syscall.PACKET_MR_PROMISC), + "PACKET_MULTICAST": ValueOf(syscall.PACKET_MULTICAST), + "PACKET_OTHERHOST": ValueOf(syscall.PACKET_OTHERHOST), + "PACKET_OUTGOING": ValueOf(syscall.PACKET_OUTGOING), + "PACKET_RECV_OUTPUT": ValueOf(syscall.PACKET_RECV_OUTPUT), + "PACKET_RX_RING": ValueOf(syscall.PACKET_RX_RING), + "PACKET_STATISTICS": ValueOf(syscall.PACKET_STATISTICS), + "PARENB": ValueOf(syscall.PARENB), + "PARMRK": ValueOf(syscall.PARMRK), + "PARODD": ValueOf(syscall.PARODD), + "PENDIN": ValueOf(syscall.PENDIN), + "PRIO_PGRP": ValueOf(syscall.PRIO_PGRP), + "PRIO_PROCESS": ValueOf(syscall.PRIO_PROCESS), + "PRIO_USER": ValueOf(syscall.PRIO_USER), + "PROT_EXEC": ValueOf(syscall.PROT_EXEC), + "PROT_GROWSDOWN": ValueOf(syscall.PROT_GROWSDOWN), + "PROT_GROWSUP": ValueOf(syscall.PROT_GROWSUP), + "PROT_NONE": ValueOf(syscall.PROT_NONE), + "PROT_READ": ValueOf(syscall.PROT_READ), + "PROT_WRITE": ValueOf(syscall.PROT_WRITE), + "PR_CAPBSET_DROP": ValueOf(syscall.PR_CAPBSET_DROP), + "PR_CAPBSET_READ": ValueOf(syscall.PR_CAPBSET_READ), + "PR_ENDIAN_BIG": ValueOf(syscall.PR_ENDIAN_BIG), + "PR_ENDIAN_LITTLE": ValueOf(syscall.PR_ENDIAN_LITTLE), + "PR_ENDIAN_PPC_LITTLE": ValueOf(syscall.PR_ENDIAN_PPC_LITTLE), + "PR_FPEMU_NOPRINT": ValueOf(syscall.PR_FPEMU_NOPRINT), + "PR_FPEMU_SIGFPE": ValueOf(syscall.PR_FPEMU_SIGFPE), + "PR_FP_EXC_ASYNC": ValueOf(syscall.PR_FP_EXC_ASYNC), + "PR_FP_EXC_DISABLED": ValueOf(syscall.PR_FP_EXC_DISABLED), + "PR_FP_EXC_DIV": ValueOf(syscall.PR_FP_EXC_DIV), + "PR_FP_EXC_INV": ValueOf(syscall.PR_FP_EXC_INV), + "PR_FP_EXC_NONRECOV": ValueOf(syscall.PR_FP_EXC_NONRECOV), + "PR_FP_EXC_OVF": ValueOf(syscall.PR_FP_EXC_OVF), + "PR_FP_EXC_PRECISE": ValueOf(syscall.PR_FP_EXC_PRECISE), + "PR_FP_EXC_RES": ValueOf(syscall.PR_FP_EXC_RES), + "PR_FP_EXC_SW_ENABLE": ValueOf(syscall.PR_FP_EXC_SW_ENABLE), + "PR_FP_EXC_UND": ValueOf(syscall.PR_FP_EXC_UND), + "PR_GET_DUMPABLE": ValueOf(syscall.PR_GET_DUMPABLE), + "PR_GET_ENDIAN": ValueOf(syscall.PR_GET_ENDIAN), + "PR_GET_FPEMU": ValueOf(syscall.PR_GET_FPEMU), + "PR_GET_FPEXC": ValueOf(syscall.PR_GET_FPEXC), + "PR_GET_KEEPCAPS": ValueOf(syscall.PR_GET_KEEPCAPS), + "PR_GET_NAME": ValueOf(syscall.PR_GET_NAME), + "PR_GET_PDEATHSIG": ValueOf(syscall.PR_GET_PDEATHSIG), + "PR_GET_SECCOMP": ValueOf(syscall.PR_GET_SECCOMP), + "PR_GET_SECUREBITS": ValueOf(syscall.PR_GET_SECUREBITS), + "PR_GET_TIMERSLACK": ValueOf(syscall.PR_GET_TIMERSLACK), + "PR_GET_TIMING": ValueOf(syscall.PR_GET_TIMING), + "PR_GET_TSC": ValueOf(syscall.PR_GET_TSC), + "PR_GET_UNALIGN": ValueOf(syscall.PR_GET_UNALIGN), + "PR_MCE_KILL": ValueOf(syscall.PR_MCE_KILL), + "PR_MCE_KILL_CLEAR": ValueOf(syscall.PR_MCE_KILL_CLEAR), + "PR_MCE_KILL_DEFAULT": ValueOf(syscall.PR_MCE_KILL_DEFAULT), + "PR_MCE_KILL_EARLY": ValueOf(syscall.PR_MCE_KILL_EARLY), + "PR_MCE_KILL_GET": ValueOf(syscall.PR_MCE_KILL_GET), + "PR_MCE_KILL_LATE": ValueOf(syscall.PR_MCE_KILL_LATE), + "PR_MCE_KILL_SET": ValueOf(syscall.PR_MCE_KILL_SET), + "PR_SET_DUMPABLE": ValueOf(syscall.PR_SET_DUMPABLE), + "PR_SET_ENDIAN": ValueOf(syscall.PR_SET_ENDIAN), + "PR_SET_FPEMU": ValueOf(syscall.PR_SET_FPEMU), + "PR_SET_FPEXC": ValueOf(syscall.PR_SET_FPEXC), + "PR_SET_KEEPCAPS": ValueOf(syscall.PR_SET_KEEPCAPS), + "PR_SET_NAME": ValueOf(syscall.PR_SET_NAME), + "PR_SET_PDEATHSIG": ValueOf(syscall.PR_SET_PDEATHSIG), + "PR_SET_PTRACER": ValueOf(syscall.PR_SET_PTRACER), + "PR_SET_SECCOMP": ValueOf(syscall.PR_SET_SECCOMP), + "PR_SET_SECUREBITS": ValueOf(syscall.PR_SET_SECUREBITS), + "PR_SET_TIMERSLACK": ValueOf(syscall.PR_SET_TIMERSLACK), + "PR_SET_TIMING": ValueOf(syscall.PR_SET_TIMING), + "PR_SET_TSC": ValueOf(syscall.PR_SET_TSC), + "PR_SET_UNALIGN": ValueOf(syscall.PR_SET_UNALIGN), + "PR_TASK_PERF_EVENTS_DISABLE": ValueOf(syscall.PR_TASK_PERF_EVENTS_DISABLE), + "PR_TASK_PERF_EVENTS_ENABLE": ValueOf(syscall.PR_TASK_PERF_EVENTS_ENABLE), + "PR_TIMING_STATISTICAL": ValueOf(syscall.PR_TIMING_STATISTICAL), + "PR_TIMING_TIMESTAMP": ValueOf(syscall.PR_TIMING_TIMESTAMP), + "PR_TSC_ENABLE": ValueOf(syscall.PR_TSC_ENABLE), + "PR_TSC_SIGSEGV": ValueOf(syscall.PR_TSC_SIGSEGV), + "PR_UNALIGN_NOPRINT": ValueOf(syscall.PR_UNALIGN_NOPRINT), + "PR_UNALIGN_SIGBUS": ValueOf(syscall.PR_UNALIGN_SIGBUS), + "PTRACE_ARCH_PRCTL": ValueOf(syscall.PTRACE_ARCH_PRCTL), + "PTRACE_ATTACH": ValueOf(syscall.PTRACE_ATTACH), + "PTRACE_CONT": ValueOf(syscall.PTRACE_CONT), + "PTRACE_DETACH": ValueOf(syscall.PTRACE_DETACH), + "PTRACE_EVENT_CLONE": ValueOf(syscall.PTRACE_EVENT_CLONE), + "PTRACE_EVENT_EXEC": ValueOf(syscall.PTRACE_EVENT_EXEC), + "PTRACE_EVENT_EXIT": ValueOf(syscall.PTRACE_EVENT_EXIT), + "PTRACE_EVENT_FORK": ValueOf(syscall.PTRACE_EVENT_FORK), + "PTRACE_EVENT_VFORK": ValueOf(syscall.PTRACE_EVENT_VFORK), + "PTRACE_EVENT_VFORK_DONE": ValueOf(syscall.PTRACE_EVENT_VFORK_DONE), + "PTRACE_GETEVENTMSG": ValueOf(syscall.PTRACE_GETEVENTMSG), + "PTRACE_GETFPREGS": ValueOf(syscall.PTRACE_GETFPREGS), + "PTRACE_GETFPXREGS": ValueOf(syscall.PTRACE_GETFPXREGS), + "PTRACE_GETREGS": ValueOf(syscall.PTRACE_GETREGS), + "PTRACE_GETREGSET": ValueOf(syscall.PTRACE_GETREGSET), + "PTRACE_GETSIGINFO": ValueOf(syscall.PTRACE_GETSIGINFO), + "PTRACE_GET_THREAD_AREA": ValueOf(syscall.PTRACE_GET_THREAD_AREA), + "PTRACE_KILL": ValueOf(syscall.PTRACE_KILL), + "PTRACE_OLDSETOPTIONS": ValueOf(syscall.PTRACE_OLDSETOPTIONS), + "PTRACE_O_MASK": ValueOf(syscall.PTRACE_O_MASK), + "PTRACE_O_TRACECLONE": ValueOf(syscall.PTRACE_O_TRACECLONE), + "PTRACE_O_TRACEEXEC": ValueOf(syscall.PTRACE_O_TRACEEXEC), + "PTRACE_O_TRACEEXIT": ValueOf(syscall.PTRACE_O_TRACEEXIT), + "PTRACE_O_TRACEFORK": ValueOf(syscall.PTRACE_O_TRACEFORK), + "PTRACE_O_TRACESYSGOOD": ValueOf(syscall.PTRACE_O_TRACESYSGOOD), + "PTRACE_O_TRACEVFORK": ValueOf(syscall.PTRACE_O_TRACEVFORK), + "PTRACE_O_TRACEVFORKDONE": ValueOf(syscall.PTRACE_O_TRACEVFORKDONE), + "PTRACE_PEEKDATA": ValueOf(syscall.PTRACE_PEEKDATA), + "PTRACE_PEEKTEXT": ValueOf(syscall.PTRACE_PEEKTEXT), + "PTRACE_PEEKUSR": ValueOf(syscall.PTRACE_PEEKUSR), + "PTRACE_POKEDATA": ValueOf(syscall.PTRACE_POKEDATA), + "PTRACE_POKETEXT": ValueOf(syscall.PTRACE_POKETEXT), + "PTRACE_POKEUSR": ValueOf(syscall.PTRACE_POKEUSR), + "PTRACE_SETFPREGS": ValueOf(syscall.PTRACE_SETFPREGS), + "PTRACE_SETFPXREGS": ValueOf(syscall.PTRACE_SETFPXREGS), + "PTRACE_SETOPTIONS": ValueOf(syscall.PTRACE_SETOPTIONS), + "PTRACE_SETREGS": ValueOf(syscall.PTRACE_SETREGS), + "PTRACE_SETREGSET": ValueOf(syscall.PTRACE_SETREGSET), + "PTRACE_SETSIGINFO": ValueOf(syscall.PTRACE_SETSIGINFO), + "PTRACE_SET_THREAD_AREA": ValueOf(syscall.PTRACE_SET_THREAD_AREA), + "PTRACE_SINGLEBLOCK": ValueOf(syscall.PTRACE_SINGLEBLOCK), + "PTRACE_SINGLESTEP": ValueOf(syscall.PTRACE_SINGLESTEP), + "PTRACE_SYSCALL": ValueOf(syscall.PTRACE_SYSCALL), + "PTRACE_SYSEMU": ValueOf(syscall.PTRACE_SYSEMU), + "PTRACE_SYSEMU_SINGLESTEP": ValueOf(syscall.PTRACE_SYSEMU_SINGLESTEP), + "PTRACE_TRACEME": ValueOf(syscall.PTRACE_TRACEME), + "ParseDirent": ValueOf(syscall.ParseDirent), + "ParseNetlinkMessage": ValueOf(syscall.ParseNetlinkMessage), + "ParseNetlinkRouteAttr": ValueOf(syscall.ParseNetlinkRouteAttr), + "ParseSocketControlMessage": ValueOf(syscall.ParseSocketControlMessage), + "ParseUnixCredentials": ValueOf(syscall.ParseUnixCredentials), + "ParseUnixRights": ValueOf(syscall.ParseUnixRights), + "PathMax": ValueOf(syscall.PathMax), + "Pause": ValueOf(syscall.Pause), + "Pipe": ValueOf(syscall.Pipe), + "Pipe2": ValueOf(syscall.Pipe2), + "PivotRoot": ValueOf(syscall.PivotRoot), + "Pread": ValueOf(syscall.Pread), + "PtraceAttach": ValueOf(syscall.PtraceAttach), + "PtraceCont": ValueOf(syscall.PtraceCont), + "PtraceDetach": ValueOf(syscall.PtraceDetach), + "PtraceGetEventMsg": ValueOf(syscall.PtraceGetEventMsg), + "PtraceGetRegs": ValueOf(syscall.PtraceGetRegs), + "PtracePeekData": ValueOf(syscall.PtracePeekData), + "PtracePeekText": ValueOf(syscall.PtracePeekText), + "PtracePokeData": ValueOf(syscall.PtracePokeData), + "PtracePokeText": ValueOf(syscall.PtracePokeText), + "PtraceSetOptions": ValueOf(syscall.PtraceSetOptions), + "PtraceSetRegs": ValueOf(syscall.PtraceSetRegs), + "PtraceSingleStep": ValueOf(syscall.PtraceSingleStep), + "PtraceSyscall": ValueOf(syscall.PtraceSyscall), + "Pwrite": ValueOf(syscall.Pwrite), + "RLIMIT_AS": ValueOf(syscall.RLIMIT_AS), + "RLIMIT_CORE": ValueOf(syscall.RLIMIT_CORE), + "RLIMIT_CPU": ValueOf(syscall.RLIMIT_CPU), + "RLIMIT_DATA": ValueOf(syscall.RLIMIT_DATA), + "RLIMIT_FSIZE": ValueOf(syscall.RLIMIT_FSIZE), + "RLIMIT_NOFILE": ValueOf(syscall.RLIMIT_NOFILE), + "RLIMIT_STACK": ValueOf(syscall.RLIMIT_STACK), + "RLIM_INFINITY": ValueOf(syscall.RLIM_INFINITY), + "RTAX_ADVMSS": ValueOf(syscall.RTAX_ADVMSS), + "RTAX_CWND": ValueOf(syscall.RTAX_CWND), + "RTAX_FEATURES": ValueOf(syscall.RTAX_FEATURES), + "RTAX_FEATURE_ALLFRAG": ValueOf(syscall.RTAX_FEATURE_ALLFRAG), + "RTAX_FEATURE_ECN": ValueOf(syscall.RTAX_FEATURE_ECN), + "RTAX_FEATURE_SACK": ValueOf(syscall.RTAX_FEATURE_SACK), + "RTAX_FEATURE_TIMESTAMP": ValueOf(syscall.RTAX_FEATURE_TIMESTAMP), + "RTAX_HOPLIMIT": ValueOf(syscall.RTAX_HOPLIMIT), + "RTAX_INITCWND": ValueOf(syscall.RTAX_INITCWND), + "RTAX_INITRWND": ValueOf(syscall.RTAX_INITRWND), + "RTAX_LOCK": ValueOf(syscall.RTAX_LOCK), + "RTAX_MAX": ValueOf(syscall.RTAX_MAX), + "RTAX_MTU": ValueOf(syscall.RTAX_MTU), + "RTAX_REORDERING": ValueOf(syscall.RTAX_REORDERING), + "RTAX_RTO_MIN": ValueOf(syscall.RTAX_RTO_MIN), + "RTAX_RTT": ValueOf(syscall.RTAX_RTT), + "RTAX_RTTVAR": ValueOf(syscall.RTAX_RTTVAR), + "RTAX_SSTHRESH": ValueOf(syscall.RTAX_SSTHRESH), + "RTAX_UNSPEC": ValueOf(syscall.RTAX_UNSPEC), + "RTAX_WINDOW": ValueOf(syscall.RTAX_WINDOW), + "RTA_ALIGNTO": ValueOf(syscall.RTA_ALIGNTO), + "RTA_CACHEINFO": ValueOf(syscall.RTA_CACHEINFO), + "RTA_DST": ValueOf(syscall.RTA_DST), + "RTA_FLOW": ValueOf(syscall.RTA_FLOW), + "RTA_GATEWAY": ValueOf(syscall.RTA_GATEWAY), + "RTA_IIF": ValueOf(syscall.RTA_IIF), + "RTA_MAX": ValueOf(syscall.RTA_MAX), + "RTA_METRICS": ValueOf(syscall.RTA_METRICS), + "RTA_MULTIPATH": ValueOf(syscall.RTA_MULTIPATH), + "RTA_OIF": ValueOf(syscall.RTA_OIF), + "RTA_PREFSRC": ValueOf(syscall.RTA_PREFSRC), + "RTA_PRIORITY": ValueOf(syscall.RTA_PRIORITY), + "RTA_SRC": ValueOf(syscall.RTA_SRC), + "RTA_TABLE": ValueOf(syscall.RTA_TABLE), + "RTA_UNSPEC": ValueOf(syscall.RTA_UNSPEC), + "RTCF_DIRECTSRC": ValueOf(syscall.RTCF_DIRECTSRC), + "RTCF_DOREDIRECT": ValueOf(syscall.RTCF_DOREDIRECT), + "RTCF_LOG": ValueOf(syscall.RTCF_LOG), + "RTCF_MASQ": ValueOf(syscall.RTCF_MASQ), + "RTCF_NAT": ValueOf(syscall.RTCF_NAT), + "RTCF_VALVE": ValueOf(syscall.RTCF_VALVE), + "RTF_ADDRCLASSMASK": ValueOf(uint32(syscall.RTF_ADDRCLASSMASK)), + "RTF_ADDRCONF": ValueOf(syscall.RTF_ADDRCONF), + "RTF_ALLONLINK": ValueOf(syscall.RTF_ALLONLINK), + "RTF_BROADCAST": ValueOf(syscall.RTF_BROADCAST), + "RTF_CACHE": ValueOf(syscall.RTF_CACHE), + "RTF_DEFAULT": ValueOf(syscall.RTF_DEFAULT), + "RTF_DYNAMIC": ValueOf(syscall.RTF_DYNAMIC), + "RTF_FLOW": ValueOf(syscall.RTF_FLOW), + "RTF_GATEWAY": ValueOf(syscall.RTF_GATEWAY), + "RTF_HOST": ValueOf(syscall.RTF_HOST), + "RTF_INTERFACE": ValueOf(syscall.RTF_INTERFACE), + "RTF_IRTT": ValueOf(syscall.RTF_IRTT), + "RTF_LINKRT": ValueOf(syscall.RTF_LINKRT), + "RTF_LOCAL": ValueOf(uint32(syscall.RTF_LOCAL)), + "RTF_MODIFIED": ValueOf(syscall.RTF_MODIFIED), + "RTF_MSS": ValueOf(syscall.RTF_MSS), + "RTF_MTU": ValueOf(syscall.RTF_MTU), + "RTF_MULTICAST": ValueOf(syscall.RTF_MULTICAST), + "RTF_NAT": ValueOf(syscall.RTF_NAT), + "RTF_NOFORWARD": ValueOf(syscall.RTF_NOFORWARD), + "RTF_NONEXTHOP": ValueOf(syscall.RTF_NONEXTHOP), + "RTF_NOPMTUDISC": ValueOf(syscall.RTF_NOPMTUDISC), + "RTF_POLICY": ValueOf(syscall.RTF_POLICY), + "RTF_REINSTATE": ValueOf(syscall.RTF_REINSTATE), + "RTF_REJECT": ValueOf(syscall.RTF_REJECT), + "RTF_STATIC": ValueOf(syscall.RTF_STATIC), + "RTF_THROW": ValueOf(syscall.RTF_THROW), + "RTF_UP": ValueOf(syscall.RTF_UP), + "RTF_WINDOW": ValueOf(syscall.RTF_WINDOW), + "RTF_XRESOLVE": ValueOf(syscall.RTF_XRESOLVE), + "RTM_BASE": ValueOf(syscall.RTM_BASE), + "RTM_DELACTION": ValueOf(syscall.RTM_DELACTION), + "RTM_DELADDR": ValueOf(syscall.RTM_DELADDR), + "RTM_DELADDRLABEL": ValueOf(syscall.RTM_DELADDRLABEL), + "RTM_DELLINK": ValueOf(syscall.RTM_DELLINK), + "RTM_DELNEIGH": ValueOf(syscall.RTM_DELNEIGH), + "RTM_DELQDISC": ValueOf(syscall.RTM_DELQDISC), + "RTM_DELROUTE": ValueOf(syscall.RTM_DELROUTE), + "RTM_DELRULE": ValueOf(syscall.RTM_DELRULE), + "RTM_DELTCLASS": ValueOf(syscall.RTM_DELTCLASS), + "RTM_DELTFILTER": ValueOf(syscall.RTM_DELTFILTER), + "RTM_F_CLONED": ValueOf(syscall.RTM_F_CLONED), + "RTM_F_EQUALIZE": ValueOf(syscall.RTM_F_EQUALIZE), + "RTM_F_NOTIFY": ValueOf(syscall.RTM_F_NOTIFY), + "RTM_F_PREFIX": ValueOf(syscall.RTM_F_PREFIX), + "RTM_GETACTION": ValueOf(syscall.RTM_GETACTION), + "RTM_GETADDR": ValueOf(syscall.RTM_GETADDR), + "RTM_GETADDRLABEL": ValueOf(syscall.RTM_GETADDRLABEL), + "RTM_GETANYCAST": ValueOf(syscall.RTM_GETANYCAST), + "RTM_GETDCB": ValueOf(syscall.RTM_GETDCB), + "RTM_GETLINK": ValueOf(syscall.RTM_GETLINK), + "RTM_GETMULTICAST": ValueOf(syscall.RTM_GETMULTICAST), + "RTM_GETNEIGH": ValueOf(syscall.RTM_GETNEIGH), + "RTM_GETNEIGHTBL": ValueOf(syscall.RTM_GETNEIGHTBL), + "RTM_GETQDISC": ValueOf(syscall.RTM_GETQDISC), + "RTM_GETROUTE": ValueOf(syscall.RTM_GETROUTE), + "RTM_GETRULE": ValueOf(syscall.RTM_GETRULE), + "RTM_GETTCLASS": ValueOf(syscall.RTM_GETTCLASS), + "RTM_GETTFILTER": ValueOf(syscall.RTM_GETTFILTER), + "RTM_MAX": ValueOf(syscall.RTM_MAX), + "RTM_NEWACTION": ValueOf(syscall.RTM_NEWACTION), + "RTM_NEWADDR": ValueOf(syscall.RTM_NEWADDR), + "RTM_NEWADDRLABEL": ValueOf(syscall.RTM_NEWADDRLABEL), + "RTM_NEWLINK": ValueOf(syscall.RTM_NEWLINK), + "RTM_NEWNDUSEROPT": ValueOf(syscall.RTM_NEWNDUSEROPT), + "RTM_NEWNEIGH": ValueOf(syscall.RTM_NEWNEIGH), + "RTM_NEWNEIGHTBL": ValueOf(syscall.RTM_NEWNEIGHTBL), + "RTM_NEWPREFIX": ValueOf(syscall.RTM_NEWPREFIX), + "RTM_NEWQDISC": ValueOf(syscall.RTM_NEWQDISC), + "RTM_NEWROUTE": ValueOf(syscall.RTM_NEWROUTE), + "RTM_NEWRULE": ValueOf(syscall.RTM_NEWRULE), + "RTM_NEWTCLASS": ValueOf(syscall.RTM_NEWTCLASS), + "RTM_NEWTFILTER": ValueOf(syscall.RTM_NEWTFILTER), + "RTM_NR_FAMILIES": ValueOf(syscall.RTM_NR_FAMILIES), + "RTM_NR_MSGTYPES": ValueOf(syscall.RTM_NR_MSGTYPES), + "RTM_SETDCB": ValueOf(syscall.RTM_SETDCB), + "RTM_SETLINK": ValueOf(syscall.RTM_SETLINK), + "RTM_SETNEIGHTBL": ValueOf(syscall.RTM_SETNEIGHTBL), + "RTNH_ALIGNTO": ValueOf(syscall.RTNH_ALIGNTO), + "RTNH_F_DEAD": ValueOf(syscall.RTNH_F_DEAD), + "RTNH_F_ONLINK": ValueOf(syscall.RTNH_F_ONLINK), + "RTNH_F_PERVASIVE": ValueOf(syscall.RTNH_F_PERVASIVE), + "RTNLGRP_IPV4_IFADDR": ValueOf(syscall.RTNLGRP_IPV4_IFADDR), + "RTNLGRP_IPV4_MROUTE": ValueOf(syscall.RTNLGRP_IPV4_MROUTE), + "RTNLGRP_IPV4_ROUTE": ValueOf(syscall.RTNLGRP_IPV4_ROUTE), + "RTNLGRP_IPV4_RULE": ValueOf(syscall.RTNLGRP_IPV4_RULE), + "RTNLGRP_IPV6_IFADDR": ValueOf(syscall.RTNLGRP_IPV6_IFADDR), + "RTNLGRP_IPV6_IFINFO": ValueOf(syscall.RTNLGRP_IPV6_IFINFO), + "RTNLGRP_IPV6_MROUTE": ValueOf(syscall.RTNLGRP_IPV6_MROUTE), + "RTNLGRP_IPV6_PREFIX": ValueOf(syscall.RTNLGRP_IPV6_PREFIX), + "RTNLGRP_IPV6_ROUTE": ValueOf(syscall.RTNLGRP_IPV6_ROUTE), + "RTNLGRP_IPV6_RULE": ValueOf(syscall.RTNLGRP_IPV6_RULE), + "RTNLGRP_LINK": ValueOf(syscall.RTNLGRP_LINK), + "RTNLGRP_ND_USEROPT": ValueOf(syscall.RTNLGRP_ND_USEROPT), + "RTNLGRP_NEIGH": ValueOf(syscall.RTNLGRP_NEIGH), + "RTNLGRP_NONE": ValueOf(syscall.RTNLGRP_NONE), + "RTNLGRP_NOTIFY": ValueOf(syscall.RTNLGRP_NOTIFY), + "RTNLGRP_TC": ValueOf(syscall.RTNLGRP_TC), + "RTN_ANYCAST": ValueOf(syscall.RTN_ANYCAST), + "RTN_BLACKHOLE": ValueOf(syscall.RTN_BLACKHOLE), + "RTN_BROADCAST": ValueOf(syscall.RTN_BROADCAST), + "RTN_LOCAL": ValueOf(syscall.RTN_LOCAL), + "RTN_MAX": ValueOf(syscall.RTN_MAX), + "RTN_MULTICAST": ValueOf(syscall.RTN_MULTICAST), + "RTN_NAT": ValueOf(syscall.RTN_NAT), + "RTN_PROHIBIT": ValueOf(syscall.RTN_PROHIBIT), + "RTN_THROW": ValueOf(syscall.RTN_THROW), + "RTN_UNICAST": ValueOf(syscall.RTN_UNICAST), + "RTN_UNREACHABLE": ValueOf(syscall.RTN_UNREACHABLE), + "RTN_UNSPEC": ValueOf(syscall.RTN_UNSPEC), + "RTN_XRESOLVE": ValueOf(syscall.RTN_XRESOLVE), + "RTPROT_BIRD": ValueOf(syscall.RTPROT_BIRD), + "RTPROT_BOOT": ValueOf(syscall.RTPROT_BOOT), + "RTPROT_DHCP": ValueOf(syscall.RTPROT_DHCP), + "RTPROT_DNROUTED": ValueOf(syscall.RTPROT_DNROUTED), + "RTPROT_GATED": ValueOf(syscall.RTPROT_GATED), + "RTPROT_KERNEL": ValueOf(syscall.RTPROT_KERNEL), + "RTPROT_MRT": ValueOf(syscall.RTPROT_MRT), + "RTPROT_NTK": ValueOf(syscall.RTPROT_NTK), + "RTPROT_RA": ValueOf(syscall.RTPROT_RA), + "RTPROT_REDIRECT": ValueOf(syscall.RTPROT_REDIRECT), + "RTPROT_STATIC": ValueOf(syscall.RTPROT_STATIC), + "RTPROT_UNSPEC": ValueOf(syscall.RTPROT_UNSPEC), + "RTPROT_XORP": ValueOf(syscall.RTPROT_XORP), + "RTPROT_ZEBRA": ValueOf(syscall.RTPROT_ZEBRA), + "RT_CLASS_DEFAULT": ValueOf(syscall.RT_CLASS_DEFAULT), + "RT_CLASS_LOCAL": ValueOf(syscall.RT_CLASS_LOCAL), + "RT_CLASS_MAIN": ValueOf(syscall.RT_CLASS_MAIN), + "RT_CLASS_MAX": ValueOf(syscall.RT_CLASS_MAX), + "RT_CLASS_UNSPEC": ValueOf(syscall.RT_CLASS_UNSPEC), + "RT_SCOPE_HOST": ValueOf(syscall.RT_SCOPE_HOST), + "RT_SCOPE_LINK": ValueOf(syscall.RT_SCOPE_LINK), + "RT_SCOPE_NOWHERE": ValueOf(syscall.RT_SCOPE_NOWHERE), + "RT_SCOPE_SITE": ValueOf(syscall.RT_SCOPE_SITE), + "RT_SCOPE_UNIVERSE": ValueOf(syscall.RT_SCOPE_UNIVERSE), + "RT_TABLE_COMPAT": ValueOf(syscall.RT_TABLE_COMPAT), + "RT_TABLE_DEFAULT": ValueOf(syscall.RT_TABLE_DEFAULT), + "RT_TABLE_LOCAL": ValueOf(syscall.RT_TABLE_LOCAL), + "RT_TABLE_MAIN": ValueOf(syscall.RT_TABLE_MAIN), + "RT_TABLE_MAX": ValueOf(uint32(syscall.RT_TABLE_MAX)), + "RT_TABLE_UNSPEC": ValueOf(syscall.RT_TABLE_UNSPEC), + "RUSAGE_CHILDREN": ValueOf(syscall.RUSAGE_CHILDREN), + "RUSAGE_SELF": ValueOf(syscall.RUSAGE_SELF), + "RUSAGE_THREAD": ValueOf(syscall.RUSAGE_THREAD), + "RawSyscall": ValueOf(syscall.RawSyscall), + "RawSyscall6": ValueOf(syscall.RawSyscall6), + "Read": ValueOf(syscall.Read), + "ReadDirent": ValueOf(syscall.ReadDirent), + "Readlink": ValueOf(syscall.Readlink), + "Reboot": ValueOf(syscall.Reboot), + "Recvfrom": ValueOf(syscall.Recvfrom), + "Recvmsg": ValueOf(syscall.Recvmsg), + "Removexattr": ValueOf(syscall.Removexattr), + "Rename": ValueOf(syscall.Rename), + "Renameat": ValueOf(syscall.Renameat), + "Rmdir": ValueOf(syscall.Rmdir), + "SCM_CREDENTIALS": ValueOf(syscall.SCM_CREDENTIALS), + "SCM_RIGHTS": ValueOf(syscall.SCM_RIGHTS), + "SCM_TIMESTAMP": ValueOf(syscall.SCM_TIMESTAMP), + "SCM_TIMESTAMPING": ValueOf(syscall.SCM_TIMESTAMPING), + "SCM_TIMESTAMPNS": ValueOf(syscall.SCM_TIMESTAMPNS), + "SHUT_RD": ValueOf(syscall.SHUT_RD), + "SHUT_RDWR": ValueOf(syscall.SHUT_RDWR), + "SHUT_WR": ValueOf(syscall.SHUT_WR), + "SIGABRT": ValueOf(syscall.SIGABRT), + "SIGALRM": ValueOf(syscall.SIGALRM), + "SIGBUS": ValueOf(syscall.SIGBUS), + "SIGCHLD": ValueOf(syscall.SIGCHLD), + "SIGCLD": ValueOf(syscall.SIGCLD), + "SIGCONT": ValueOf(syscall.SIGCONT), + "SIGFPE": ValueOf(syscall.SIGFPE), + "SIGHUP": ValueOf(syscall.SIGHUP), + "SIGILL": ValueOf(syscall.SIGILL), + "SIGINT": ValueOf(syscall.SIGINT), + "SIGIO": ValueOf(syscall.SIGIO), + "SIGIOT": ValueOf(syscall.SIGIOT), + "SIGKILL": ValueOf(syscall.SIGKILL), + "SIGPIPE": ValueOf(syscall.SIGPIPE), + "SIGPOLL": ValueOf(syscall.SIGPOLL), + "SIGPROF": ValueOf(syscall.SIGPROF), + "SIGPWR": ValueOf(syscall.SIGPWR), + "SIGQUIT": ValueOf(syscall.SIGQUIT), + "SIGSEGV": ValueOf(syscall.SIGSEGV), + "SIGSTKFLT": ValueOf(syscall.SIGSTKFLT), + "SIGSTOP": ValueOf(syscall.SIGSTOP), + "SIGSYS": ValueOf(syscall.SIGSYS), + "SIGTERM": ValueOf(syscall.SIGTERM), + "SIGTRAP": ValueOf(syscall.SIGTRAP), + "SIGTSTP": ValueOf(syscall.SIGTSTP), + "SIGTTIN": ValueOf(syscall.SIGTTIN), + "SIGTTOU": ValueOf(syscall.SIGTTOU), + "SIGUNUSED": ValueOf(syscall.SIGUNUSED), + "SIGURG": ValueOf(syscall.SIGURG), + "SIGUSR1": ValueOf(syscall.SIGUSR1), + "SIGUSR2": ValueOf(syscall.SIGUSR2), + "SIGVTALRM": ValueOf(syscall.SIGVTALRM), + "SIGWINCH": ValueOf(syscall.SIGWINCH), + "SIGXCPU": ValueOf(syscall.SIGXCPU), + "SIGXFSZ": ValueOf(syscall.SIGXFSZ), + "SIOCADDDLCI": ValueOf(syscall.SIOCADDDLCI), + "SIOCADDMULTI": ValueOf(syscall.SIOCADDMULTI), + "SIOCADDRT": ValueOf(syscall.SIOCADDRT), + "SIOCATMARK": ValueOf(syscall.SIOCATMARK), + "SIOCDARP": ValueOf(syscall.SIOCDARP), + "SIOCDELDLCI": ValueOf(syscall.SIOCDELDLCI), + "SIOCDELMULTI": ValueOf(syscall.SIOCDELMULTI), + "SIOCDELRT": ValueOf(syscall.SIOCDELRT), + "SIOCDEVPRIVATE": ValueOf(syscall.SIOCDEVPRIVATE), + "SIOCDIFADDR": ValueOf(syscall.SIOCDIFADDR), + "SIOCDRARP": ValueOf(syscall.SIOCDRARP), + "SIOCGARP": ValueOf(syscall.SIOCGARP), + "SIOCGIFADDR": ValueOf(syscall.SIOCGIFADDR), + "SIOCGIFBR": ValueOf(syscall.SIOCGIFBR), + "SIOCGIFBRDADDR": ValueOf(syscall.SIOCGIFBRDADDR), + "SIOCGIFCONF": ValueOf(syscall.SIOCGIFCONF), + "SIOCGIFCOUNT": ValueOf(syscall.SIOCGIFCOUNT), + "SIOCGIFDSTADDR": ValueOf(syscall.SIOCGIFDSTADDR), + "SIOCGIFENCAP": ValueOf(syscall.SIOCGIFENCAP), + "SIOCGIFFLAGS": ValueOf(syscall.SIOCGIFFLAGS), + "SIOCGIFHWADDR": ValueOf(syscall.SIOCGIFHWADDR), + "SIOCGIFINDEX": ValueOf(syscall.SIOCGIFINDEX), + "SIOCGIFMAP": ValueOf(syscall.SIOCGIFMAP), + "SIOCGIFMEM": ValueOf(syscall.SIOCGIFMEM), + "SIOCGIFMETRIC": ValueOf(syscall.SIOCGIFMETRIC), + "SIOCGIFMTU": ValueOf(syscall.SIOCGIFMTU), + "SIOCGIFNAME": ValueOf(syscall.SIOCGIFNAME), + "SIOCGIFNETMASK": ValueOf(syscall.SIOCGIFNETMASK), + "SIOCGIFPFLAGS": ValueOf(syscall.SIOCGIFPFLAGS), + "SIOCGIFSLAVE": ValueOf(syscall.SIOCGIFSLAVE), + "SIOCGIFTXQLEN": ValueOf(syscall.SIOCGIFTXQLEN), + "SIOCGPGRP": ValueOf(syscall.SIOCGPGRP), + "SIOCGRARP": ValueOf(syscall.SIOCGRARP), + "SIOCGSTAMP": ValueOf(syscall.SIOCGSTAMP), + "SIOCGSTAMPNS": ValueOf(syscall.SIOCGSTAMPNS), + "SIOCPROTOPRIVATE": ValueOf(syscall.SIOCPROTOPRIVATE), + "SIOCRTMSG": ValueOf(syscall.SIOCRTMSG), + "SIOCSARP": ValueOf(syscall.SIOCSARP), + "SIOCSIFADDR": ValueOf(syscall.SIOCSIFADDR), + "SIOCSIFBR": ValueOf(syscall.SIOCSIFBR), + "SIOCSIFBRDADDR": ValueOf(syscall.SIOCSIFBRDADDR), + "SIOCSIFDSTADDR": ValueOf(syscall.SIOCSIFDSTADDR), + "SIOCSIFENCAP": ValueOf(syscall.SIOCSIFENCAP), + "SIOCSIFFLAGS": ValueOf(syscall.SIOCSIFFLAGS), + "SIOCSIFHWADDR": ValueOf(syscall.SIOCSIFHWADDR), + "SIOCSIFHWBROADCAST": ValueOf(syscall.SIOCSIFHWBROADCAST), + "SIOCSIFLINK": ValueOf(syscall.SIOCSIFLINK), + "SIOCSIFMAP": ValueOf(syscall.SIOCSIFMAP), + "SIOCSIFMEM": ValueOf(syscall.SIOCSIFMEM), + "SIOCSIFMETRIC": ValueOf(syscall.SIOCSIFMETRIC), + "SIOCSIFMTU": ValueOf(syscall.SIOCSIFMTU), + "SIOCSIFNAME": ValueOf(syscall.SIOCSIFNAME), + "SIOCSIFNETMASK": ValueOf(syscall.SIOCSIFNETMASK), + "SIOCSIFPFLAGS": ValueOf(syscall.SIOCSIFPFLAGS), + "SIOCSIFSLAVE": ValueOf(syscall.SIOCSIFSLAVE), + "SIOCSIFTXQLEN": ValueOf(syscall.SIOCSIFTXQLEN), + "SIOCSPGRP": ValueOf(syscall.SIOCSPGRP), + "SIOCSRARP": ValueOf(syscall.SIOCSRARP), + "SOCK_CLOEXEC": ValueOf(syscall.SOCK_CLOEXEC), + "SOCK_DCCP": ValueOf(syscall.SOCK_DCCP), + "SOCK_DGRAM": ValueOf(syscall.SOCK_DGRAM), + "SOCK_NONBLOCK": ValueOf(syscall.SOCK_NONBLOCK), + "SOCK_PACKET": ValueOf(syscall.SOCK_PACKET), + "SOCK_RAW": ValueOf(syscall.SOCK_RAW), + "SOCK_RDM": ValueOf(syscall.SOCK_RDM), + "SOCK_SEQPACKET": ValueOf(syscall.SOCK_SEQPACKET), + "SOCK_STREAM": ValueOf(syscall.SOCK_STREAM), + "SOL_AAL": ValueOf(syscall.SOL_AAL), + "SOL_ATM": ValueOf(syscall.SOL_ATM), + "SOL_DECNET": ValueOf(syscall.SOL_DECNET), + "SOL_ICMPV6": ValueOf(syscall.SOL_ICMPV6), + "SOL_IP": ValueOf(syscall.SOL_IP), + "SOL_IPV6": ValueOf(syscall.SOL_IPV6), + "SOL_IRDA": ValueOf(syscall.SOL_IRDA), + "SOL_PACKET": ValueOf(syscall.SOL_PACKET), + "SOL_RAW": ValueOf(syscall.SOL_RAW), + "SOL_SOCKET": ValueOf(syscall.SOL_SOCKET), + "SOL_TCP": ValueOf(syscall.SOL_TCP), + "SOL_X25": ValueOf(syscall.SOL_X25), + "SOMAXCONN": ValueOf(syscall.SOMAXCONN), + "SO_ACCEPTCONN": ValueOf(syscall.SO_ACCEPTCONN), + "SO_ATTACH_FILTER": ValueOf(syscall.SO_ATTACH_FILTER), + "SO_BINDTODEVICE": ValueOf(syscall.SO_BINDTODEVICE), + "SO_BROADCAST": ValueOf(syscall.SO_BROADCAST), + "SO_BSDCOMPAT": ValueOf(syscall.SO_BSDCOMPAT), + "SO_DEBUG": ValueOf(syscall.SO_DEBUG), + "SO_DETACH_FILTER": ValueOf(syscall.SO_DETACH_FILTER), + "SO_DOMAIN": ValueOf(syscall.SO_DOMAIN), + "SO_DONTROUTE": ValueOf(syscall.SO_DONTROUTE), + "SO_ERROR": ValueOf(syscall.SO_ERROR), + "SO_KEEPALIVE": ValueOf(syscall.SO_KEEPALIVE), + "SO_LINGER": ValueOf(syscall.SO_LINGER), + "SO_MARK": ValueOf(syscall.SO_MARK), + "SO_NO_CHECK": ValueOf(syscall.SO_NO_CHECK), + "SO_OOBINLINE": ValueOf(syscall.SO_OOBINLINE), + "SO_PASSCRED": ValueOf(syscall.SO_PASSCRED), + "SO_PASSSEC": ValueOf(syscall.SO_PASSSEC), + "SO_PEERCRED": ValueOf(syscall.SO_PEERCRED), + "SO_PEERNAME": ValueOf(syscall.SO_PEERNAME), + "SO_PEERSEC": ValueOf(syscall.SO_PEERSEC), + "SO_PRIORITY": ValueOf(syscall.SO_PRIORITY), + "SO_PROTOCOL": ValueOf(syscall.SO_PROTOCOL), + "SO_RCVBUF": ValueOf(syscall.SO_RCVBUF), + "SO_RCVBUFFORCE": ValueOf(syscall.SO_RCVBUFFORCE), + "SO_RCVLOWAT": ValueOf(syscall.SO_RCVLOWAT), + "SO_RCVTIMEO": ValueOf(syscall.SO_RCVTIMEO), + "SO_REUSEADDR": ValueOf(syscall.SO_REUSEADDR), + "SO_RXQ_OVFL": ValueOf(syscall.SO_RXQ_OVFL), + "SO_SECURITY_AUTHENTICATION": ValueOf(syscall.SO_SECURITY_AUTHENTICATION), + "SO_SECURITY_ENCRYPTION_NETWORK": ValueOf(syscall.SO_SECURITY_ENCRYPTION_NETWORK), + "SO_SECURITY_ENCRYPTION_TRANSPORT": ValueOf(syscall.SO_SECURITY_ENCRYPTION_TRANSPORT), + "SO_SNDBUF": ValueOf(syscall.SO_SNDBUF), + "SO_SNDBUFFORCE": ValueOf(syscall.SO_SNDBUFFORCE), + "SO_SNDLOWAT": ValueOf(syscall.SO_SNDLOWAT), + "SO_SNDTIMEO": ValueOf(syscall.SO_SNDTIMEO), + "SO_TIMESTAMP": ValueOf(syscall.SO_TIMESTAMP), + "SO_TIMESTAMPING": ValueOf(syscall.SO_TIMESTAMPING), + "SO_TIMESTAMPNS": ValueOf(syscall.SO_TIMESTAMPNS), + "SO_TYPE": ValueOf(syscall.SO_TYPE), + "SYS_ACCEPT": ValueOf(syscall.SYS_ACCEPT), + "SYS_ACCEPT4": ValueOf(syscall.SYS_ACCEPT4), + "SYS_ACCESS": ValueOf(syscall.SYS_ACCESS), + "SYS_ACCT": ValueOf(syscall.SYS_ACCT), + "SYS_ADD_KEY": ValueOf(syscall.SYS_ADD_KEY), + "SYS_ADJTIMEX": ValueOf(syscall.SYS_ADJTIMEX), + "SYS_AFS_SYSCALL": ValueOf(syscall.SYS_AFS_SYSCALL), + "SYS_ALARM": ValueOf(syscall.SYS_ALARM), + "SYS_ARCH_PRCTL": ValueOf(syscall.SYS_ARCH_PRCTL), + "SYS_BIND": ValueOf(syscall.SYS_BIND), + "SYS_BRK": ValueOf(syscall.SYS_BRK), + "SYS_CAPGET": ValueOf(syscall.SYS_CAPGET), + "SYS_CAPSET": ValueOf(syscall.SYS_CAPSET), + "SYS_CHDIR": ValueOf(syscall.SYS_CHDIR), + "SYS_CHMOD": ValueOf(syscall.SYS_CHMOD), + "SYS_CHOWN": ValueOf(syscall.SYS_CHOWN), + "SYS_CHROOT": ValueOf(syscall.SYS_CHROOT), + "SYS_CLOCK_GETRES": ValueOf(syscall.SYS_CLOCK_GETRES), + "SYS_CLOCK_GETTIME": ValueOf(syscall.SYS_CLOCK_GETTIME), + "SYS_CLOCK_NANOSLEEP": ValueOf(syscall.SYS_CLOCK_NANOSLEEP), + "SYS_CLOCK_SETTIME": ValueOf(syscall.SYS_CLOCK_SETTIME), + "SYS_CLONE": ValueOf(syscall.SYS_CLONE), + "SYS_CLOSE": ValueOf(syscall.SYS_CLOSE), + "SYS_CONNECT": ValueOf(syscall.SYS_CONNECT), + "SYS_CREAT": ValueOf(syscall.SYS_CREAT), + "SYS_CREATE_MODULE": ValueOf(syscall.SYS_CREATE_MODULE), + "SYS_DELETE_MODULE": ValueOf(syscall.SYS_DELETE_MODULE), + "SYS_DUP": ValueOf(syscall.SYS_DUP), + "SYS_DUP2": ValueOf(syscall.SYS_DUP2), + "SYS_DUP3": ValueOf(syscall.SYS_DUP3), + "SYS_EPOLL_CREATE": ValueOf(syscall.SYS_EPOLL_CREATE), + "SYS_EPOLL_CREATE1": ValueOf(syscall.SYS_EPOLL_CREATE1), + "SYS_EPOLL_CTL": ValueOf(syscall.SYS_EPOLL_CTL), + "SYS_EPOLL_CTL_OLD": ValueOf(syscall.SYS_EPOLL_CTL_OLD), + "SYS_EPOLL_PWAIT": ValueOf(syscall.SYS_EPOLL_PWAIT), + "SYS_EPOLL_WAIT": ValueOf(syscall.SYS_EPOLL_WAIT), + "SYS_EPOLL_WAIT_OLD": ValueOf(syscall.SYS_EPOLL_WAIT_OLD), + "SYS_EVENTFD": ValueOf(syscall.SYS_EVENTFD), + "SYS_EVENTFD2": ValueOf(syscall.SYS_EVENTFD2), + "SYS_EXECVE": ValueOf(syscall.SYS_EXECVE), + "SYS_EXIT": ValueOf(syscall.SYS_EXIT), + "SYS_EXIT_GROUP": ValueOf(syscall.SYS_EXIT_GROUP), + "SYS_FACCESSAT": ValueOf(syscall.SYS_FACCESSAT), + "SYS_FADVISE64": ValueOf(syscall.SYS_FADVISE64), + "SYS_FALLOCATE": ValueOf(syscall.SYS_FALLOCATE), + "SYS_FANOTIFY_INIT": ValueOf(syscall.SYS_FANOTIFY_INIT), + "SYS_FANOTIFY_MARK": ValueOf(syscall.SYS_FANOTIFY_MARK), + "SYS_FCHDIR": ValueOf(syscall.SYS_FCHDIR), + "SYS_FCHMOD": ValueOf(syscall.SYS_FCHMOD), + "SYS_FCHMODAT": ValueOf(syscall.SYS_FCHMODAT), + "SYS_FCHOWN": ValueOf(syscall.SYS_FCHOWN), + "SYS_FCHOWNAT": ValueOf(syscall.SYS_FCHOWNAT), + "SYS_FCNTL": ValueOf(syscall.SYS_FCNTL), + "SYS_FDATASYNC": ValueOf(syscall.SYS_FDATASYNC), + "SYS_FGETXATTR": ValueOf(syscall.SYS_FGETXATTR), + "SYS_FLISTXATTR": ValueOf(syscall.SYS_FLISTXATTR), + "SYS_FLOCK": ValueOf(syscall.SYS_FLOCK), + "SYS_FORK": ValueOf(syscall.SYS_FORK), + "SYS_FREMOVEXATTR": ValueOf(syscall.SYS_FREMOVEXATTR), + "SYS_FSETXATTR": ValueOf(syscall.SYS_FSETXATTR), + "SYS_FSTAT": ValueOf(syscall.SYS_FSTAT), + "SYS_FSTATFS": ValueOf(syscall.SYS_FSTATFS), + "SYS_FSYNC": ValueOf(syscall.SYS_FSYNC), + "SYS_FTRUNCATE": ValueOf(syscall.SYS_FTRUNCATE), + "SYS_FUTEX": ValueOf(syscall.SYS_FUTEX), + "SYS_FUTIMESAT": ValueOf(syscall.SYS_FUTIMESAT), + "SYS_GETCWD": ValueOf(syscall.SYS_GETCWD), + "SYS_GETDENTS": ValueOf(syscall.SYS_GETDENTS), + "SYS_GETDENTS64": ValueOf(syscall.SYS_GETDENTS64), + "SYS_GETEGID": ValueOf(syscall.SYS_GETEGID), + "SYS_GETEUID": ValueOf(syscall.SYS_GETEUID), + "SYS_GETGID": ValueOf(syscall.SYS_GETGID), + "SYS_GETGROUPS": ValueOf(syscall.SYS_GETGROUPS), + "SYS_GETITIMER": ValueOf(syscall.SYS_GETITIMER), + "SYS_GETPEERNAME": ValueOf(syscall.SYS_GETPEERNAME), + "SYS_GETPGID": ValueOf(syscall.SYS_GETPGID), + "SYS_GETPGRP": ValueOf(syscall.SYS_GETPGRP), + "SYS_GETPID": ValueOf(syscall.SYS_GETPID), + "SYS_GETPMSG": ValueOf(syscall.SYS_GETPMSG), + "SYS_GETPPID": ValueOf(syscall.SYS_GETPPID), + "SYS_GETPRIORITY": ValueOf(syscall.SYS_GETPRIORITY), + "SYS_GETRESGID": ValueOf(syscall.SYS_GETRESGID), + "SYS_GETRESUID": ValueOf(syscall.SYS_GETRESUID), + "SYS_GETRLIMIT": ValueOf(syscall.SYS_GETRLIMIT), + "SYS_GETRUSAGE": ValueOf(syscall.SYS_GETRUSAGE), + "SYS_GETSID": ValueOf(syscall.SYS_GETSID), + "SYS_GETSOCKNAME": ValueOf(syscall.SYS_GETSOCKNAME), + "SYS_GETSOCKOPT": ValueOf(syscall.SYS_GETSOCKOPT), + "SYS_GETTID": ValueOf(syscall.SYS_GETTID), + "SYS_GETTIMEOFDAY": ValueOf(syscall.SYS_GETTIMEOFDAY), + "SYS_GETUID": ValueOf(syscall.SYS_GETUID), + "SYS_GETXATTR": ValueOf(syscall.SYS_GETXATTR), + "SYS_GET_KERNEL_SYMS": ValueOf(syscall.SYS_GET_KERNEL_SYMS), + "SYS_GET_MEMPOLICY": ValueOf(syscall.SYS_GET_MEMPOLICY), + "SYS_GET_ROBUST_LIST": ValueOf(syscall.SYS_GET_ROBUST_LIST), + "SYS_GET_THREAD_AREA": ValueOf(syscall.SYS_GET_THREAD_AREA), + "SYS_INIT_MODULE": ValueOf(syscall.SYS_INIT_MODULE), + "SYS_INOTIFY_ADD_WATCH": ValueOf(syscall.SYS_INOTIFY_ADD_WATCH), + "SYS_INOTIFY_INIT": ValueOf(syscall.SYS_INOTIFY_INIT), + "SYS_INOTIFY_INIT1": ValueOf(syscall.SYS_INOTIFY_INIT1), + "SYS_INOTIFY_RM_WATCH": ValueOf(syscall.SYS_INOTIFY_RM_WATCH), + "SYS_IOCTL": ValueOf(syscall.SYS_IOCTL), + "SYS_IOPERM": ValueOf(syscall.SYS_IOPERM), + "SYS_IOPL": ValueOf(syscall.SYS_IOPL), + "SYS_IOPRIO_GET": ValueOf(syscall.SYS_IOPRIO_GET), + "SYS_IOPRIO_SET": ValueOf(syscall.SYS_IOPRIO_SET), + "SYS_IO_CANCEL": ValueOf(syscall.SYS_IO_CANCEL), + "SYS_IO_DESTROY": ValueOf(syscall.SYS_IO_DESTROY), + "SYS_IO_GETEVENTS": ValueOf(syscall.SYS_IO_GETEVENTS), + "SYS_IO_SETUP": ValueOf(syscall.SYS_IO_SETUP), + "SYS_IO_SUBMIT": ValueOf(syscall.SYS_IO_SUBMIT), + "SYS_KEXEC_LOAD": ValueOf(syscall.SYS_KEXEC_LOAD), + "SYS_KEYCTL": ValueOf(syscall.SYS_KEYCTL), + "SYS_KILL": ValueOf(syscall.SYS_KILL), + "SYS_LCHOWN": ValueOf(syscall.SYS_LCHOWN), + "SYS_LGETXATTR": ValueOf(syscall.SYS_LGETXATTR), + "SYS_LINK": ValueOf(syscall.SYS_LINK), + "SYS_LINKAT": ValueOf(syscall.SYS_LINKAT), + "SYS_LISTEN": ValueOf(syscall.SYS_LISTEN), + "SYS_LISTXATTR": ValueOf(syscall.SYS_LISTXATTR), + "SYS_LLISTXATTR": ValueOf(syscall.SYS_LLISTXATTR), + "SYS_LOOKUP_DCOOKIE": ValueOf(syscall.SYS_LOOKUP_DCOOKIE), + "SYS_LREMOVEXATTR": ValueOf(syscall.SYS_LREMOVEXATTR), + "SYS_LSEEK": ValueOf(syscall.SYS_LSEEK), + "SYS_LSETXATTR": ValueOf(syscall.SYS_LSETXATTR), + "SYS_LSTAT": ValueOf(syscall.SYS_LSTAT), + "SYS_MADVISE": ValueOf(syscall.SYS_MADVISE), + "SYS_MBIND": ValueOf(syscall.SYS_MBIND), + "SYS_MIGRATE_PAGES": ValueOf(syscall.SYS_MIGRATE_PAGES), + "SYS_MINCORE": ValueOf(syscall.SYS_MINCORE), + "SYS_MKDIR": ValueOf(syscall.SYS_MKDIR), + "SYS_MKDIRAT": ValueOf(syscall.SYS_MKDIRAT), + "SYS_MKNOD": ValueOf(syscall.SYS_MKNOD), + "SYS_MKNODAT": ValueOf(syscall.SYS_MKNODAT), + "SYS_MLOCK": ValueOf(syscall.SYS_MLOCK), + "SYS_MLOCKALL": ValueOf(syscall.SYS_MLOCKALL), + "SYS_MMAP": ValueOf(syscall.SYS_MMAP), + "SYS_MODIFY_LDT": ValueOf(syscall.SYS_MODIFY_LDT), + "SYS_MOUNT": ValueOf(syscall.SYS_MOUNT), + "SYS_MOVE_PAGES": ValueOf(syscall.SYS_MOVE_PAGES), + "SYS_MPROTECT": ValueOf(syscall.SYS_MPROTECT), + "SYS_MQ_GETSETATTR": ValueOf(syscall.SYS_MQ_GETSETATTR), + "SYS_MQ_NOTIFY": ValueOf(syscall.SYS_MQ_NOTIFY), + "SYS_MQ_OPEN": ValueOf(syscall.SYS_MQ_OPEN), + "SYS_MQ_TIMEDRECEIVE": ValueOf(syscall.SYS_MQ_TIMEDRECEIVE), + "SYS_MQ_TIMEDSEND": ValueOf(syscall.SYS_MQ_TIMEDSEND), + "SYS_MQ_UNLINK": ValueOf(syscall.SYS_MQ_UNLINK), + "SYS_MREMAP": ValueOf(syscall.SYS_MREMAP), + "SYS_MSGCTL": ValueOf(syscall.SYS_MSGCTL), + "SYS_MSGGET": ValueOf(syscall.SYS_MSGGET), + "SYS_MSGRCV": ValueOf(syscall.SYS_MSGRCV), + "SYS_MSGSND": ValueOf(syscall.SYS_MSGSND), + "SYS_MSYNC": ValueOf(syscall.SYS_MSYNC), + "SYS_MUNLOCK": ValueOf(syscall.SYS_MUNLOCK), + "SYS_MUNLOCKALL": ValueOf(syscall.SYS_MUNLOCKALL), + "SYS_MUNMAP": ValueOf(syscall.SYS_MUNMAP), + "SYS_NANOSLEEP": ValueOf(syscall.SYS_NANOSLEEP), + "SYS_NEWFSTATAT": ValueOf(syscall.SYS_NEWFSTATAT), + "SYS_NFSSERVCTL": ValueOf(syscall.SYS_NFSSERVCTL), + "SYS_OPEN": ValueOf(syscall.SYS_OPEN), + "SYS_OPENAT": ValueOf(syscall.SYS_OPENAT), + "SYS_PAUSE": ValueOf(syscall.SYS_PAUSE), + "SYS_PERF_EVENT_OPEN": ValueOf(syscall.SYS_PERF_EVENT_OPEN), + "SYS_PERSONALITY": ValueOf(syscall.SYS_PERSONALITY), + "SYS_PIPE": ValueOf(syscall.SYS_PIPE), + "SYS_PIPE2": ValueOf(syscall.SYS_PIPE2), + "SYS_PIVOT_ROOT": ValueOf(syscall.SYS_PIVOT_ROOT), + "SYS_POLL": ValueOf(syscall.SYS_POLL), + "SYS_PPOLL": ValueOf(syscall.SYS_PPOLL), + "SYS_PRCTL": ValueOf(syscall.SYS_PRCTL), + "SYS_PREAD64": ValueOf(syscall.SYS_PREAD64), + "SYS_PREADV": ValueOf(syscall.SYS_PREADV), + "SYS_PRLIMIT64": ValueOf(syscall.SYS_PRLIMIT64), + "SYS_PSELECT6": ValueOf(syscall.SYS_PSELECT6), + "SYS_PTRACE": ValueOf(syscall.SYS_PTRACE), + "SYS_PUTPMSG": ValueOf(syscall.SYS_PUTPMSG), + "SYS_PWRITE64": ValueOf(syscall.SYS_PWRITE64), + "SYS_PWRITEV": ValueOf(syscall.SYS_PWRITEV), + "SYS_QUERY_MODULE": ValueOf(syscall.SYS_QUERY_MODULE), + "SYS_QUOTACTL": ValueOf(syscall.SYS_QUOTACTL), + "SYS_READ": ValueOf(syscall.SYS_READ), + "SYS_READAHEAD": ValueOf(syscall.SYS_READAHEAD), + "SYS_READLINK": ValueOf(syscall.SYS_READLINK), + "SYS_READLINKAT": ValueOf(syscall.SYS_READLINKAT), + "SYS_READV": ValueOf(syscall.SYS_READV), + "SYS_REBOOT": ValueOf(syscall.SYS_REBOOT), + "SYS_RECVFROM": ValueOf(syscall.SYS_RECVFROM), + "SYS_RECVMMSG": ValueOf(syscall.SYS_RECVMMSG), + "SYS_RECVMSG": ValueOf(syscall.SYS_RECVMSG), + "SYS_REMAP_FILE_PAGES": ValueOf(syscall.SYS_REMAP_FILE_PAGES), + "SYS_REMOVEXATTR": ValueOf(syscall.SYS_REMOVEXATTR), + "SYS_RENAME": ValueOf(syscall.SYS_RENAME), + "SYS_RENAMEAT": ValueOf(syscall.SYS_RENAMEAT), + "SYS_REQUEST_KEY": ValueOf(syscall.SYS_REQUEST_KEY), + "SYS_RESTART_SYSCALL": ValueOf(syscall.SYS_RESTART_SYSCALL), + "SYS_RMDIR": ValueOf(syscall.SYS_RMDIR), + "SYS_RT_SIGACTION": ValueOf(syscall.SYS_RT_SIGACTION), + "SYS_RT_SIGPENDING": ValueOf(syscall.SYS_RT_SIGPENDING), + "SYS_RT_SIGPROCMASK": ValueOf(syscall.SYS_RT_SIGPROCMASK), + "SYS_RT_SIGQUEUEINFO": ValueOf(syscall.SYS_RT_SIGQUEUEINFO), + "SYS_RT_SIGRETURN": ValueOf(syscall.SYS_RT_SIGRETURN), + "SYS_RT_SIGSUSPEND": ValueOf(syscall.SYS_RT_SIGSUSPEND), + "SYS_RT_SIGTIMEDWAIT": ValueOf(syscall.SYS_RT_SIGTIMEDWAIT), + "SYS_RT_TGSIGQUEUEINFO": ValueOf(syscall.SYS_RT_TGSIGQUEUEINFO), + "SYS_SCHED_GETAFFINITY": ValueOf(syscall.SYS_SCHED_GETAFFINITY), + "SYS_SCHED_GETPARAM": ValueOf(syscall.SYS_SCHED_GETPARAM), + "SYS_SCHED_GETSCHEDULER": ValueOf(syscall.SYS_SCHED_GETSCHEDULER), + "SYS_SCHED_GET_PRIORITY_MAX": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MAX), + "SYS_SCHED_GET_PRIORITY_MIN": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MIN), + "SYS_SCHED_RR_GET_INTERVAL": ValueOf(syscall.SYS_SCHED_RR_GET_INTERVAL), + "SYS_SCHED_SETAFFINITY": ValueOf(syscall.SYS_SCHED_SETAFFINITY), + "SYS_SCHED_SETPARAM": ValueOf(syscall.SYS_SCHED_SETPARAM), + "SYS_SCHED_SETSCHEDULER": ValueOf(syscall.SYS_SCHED_SETSCHEDULER), + "SYS_SCHED_YIELD": ValueOf(syscall.SYS_SCHED_YIELD), + "SYS_SECURITY": ValueOf(syscall.SYS_SECURITY), + "SYS_SELECT": ValueOf(syscall.SYS_SELECT), + "SYS_SEMCTL": ValueOf(syscall.SYS_SEMCTL), + "SYS_SEMGET": ValueOf(syscall.SYS_SEMGET), + "SYS_SEMOP": ValueOf(syscall.SYS_SEMOP), + "SYS_SEMTIMEDOP": ValueOf(syscall.SYS_SEMTIMEDOP), + "SYS_SENDFILE": ValueOf(syscall.SYS_SENDFILE), + "SYS_SENDMSG": ValueOf(syscall.SYS_SENDMSG), + "SYS_SENDTO": ValueOf(syscall.SYS_SENDTO), + "SYS_SETDOMAINNAME": ValueOf(syscall.SYS_SETDOMAINNAME), + "SYS_SETFSGID": ValueOf(syscall.SYS_SETFSGID), + "SYS_SETFSUID": ValueOf(syscall.SYS_SETFSUID), + "SYS_SETGID": ValueOf(syscall.SYS_SETGID), + "SYS_SETGROUPS": ValueOf(syscall.SYS_SETGROUPS), + "SYS_SETHOSTNAME": ValueOf(syscall.SYS_SETHOSTNAME), + "SYS_SETITIMER": ValueOf(syscall.SYS_SETITIMER), + "SYS_SETPGID": ValueOf(syscall.SYS_SETPGID), + "SYS_SETPRIORITY": ValueOf(syscall.SYS_SETPRIORITY), + "SYS_SETREGID": ValueOf(syscall.SYS_SETREGID), + "SYS_SETRESGID": ValueOf(syscall.SYS_SETRESGID), + "SYS_SETRESUID": ValueOf(syscall.SYS_SETRESUID), + "SYS_SETREUID": ValueOf(syscall.SYS_SETREUID), + "SYS_SETRLIMIT": ValueOf(syscall.SYS_SETRLIMIT), + "SYS_SETSID": ValueOf(syscall.SYS_SETSID), + "SYS_SETSOCKOPT": ValueOf(syscall.SYS_SETSOCKOPT), + "SYS_SETTIMEOFDAY": ValueOf(syscall.SYS_SETTIMEOFDAY), + "SYS_SETUID": ValueOf(syscall.SYS_SETUID), + "SYS_SETXATTR": ValueOf(syscall.SYS_SETXATTR), + "SYS_SET_MEMPOLICY": ValueOf(syscall.SYS_SET_MEMPOLICY), + "SYS_SET_ROBUST_LIST": ValueOf(syscall.SYS_SET_ROBUST_LIST), + "SYS_SET_THREAD_AREA": ValueOf(syscall.SYS_SET_THREAD_AREA), + "SYS_SET_TID_ADDRESS": ValueOf(syscall.SYS_SET_TID_ADDRESS), + "SYS_SHMAT": ValueOf(syscall.SYS_SHMAT), + "SYS_SHMCTL": ValueOf(syscall.SYS_SHMCTL), + "SYS_SHMDT": ValueOf(syscall.SYS_SHMDT), + "SYS_SHMGET": ValueOf(syscall.SYS_SHMGET), + "SYS_SHUTDOWN": ValueOf(syscall.SYS_SHUTDOWN), + "SYS_SIGALTSTACK": ValueOf(syscall.SYS_SIGALTSTACK), + "SYS_SIGNALFD": ValueOf(syscall.SYS_SIGNALFD), + "SYS_SIGNALFD4": ValueOf(syscall.SYS_SIGNALFD4), + "SYS_SOCKET": ValueOf(syscall.SYS_SOCKET), + "SYS_SOCKETPAIR": ValueOf(syscall.SYS_SOCKETPAIR), + "SYS_SPLICE": ValueOf(syscall.SYS_SPLICE), + "SYS_STAT": ValueOf(syscall.SYS_STAT), + "SYS_STATFS": ValueOf(syscall.SYS_STATFS), + "SYS_SWAPOFF": ValueOf(syscall.SYS_SWAPOFF), + "SYS_SWAPON": ValueOf(syscall.SYS_SWAPON), + "SYS_SYMLINK": ValueOf(syscall.SYS_SYMLINK), + "SYS_SYMLINKAT": ValueOf(syscall.SYS_SYMLINKAT), + "SYS_SYNC": ValueOf(syscall.SYS_SYNC), + "SYS_SYNC_FILE_RANGE": ValueOf(syscall.SYS_SYNC_FILE_RANGE), + "SYS_SYSFS": ValueOf(syscall.SYS_SYSFS), + "SYS_SYSINFO": ValueOf(syscall.SYS_SYSINFO), + "SYS_SYSLOG": ValueOf(syscall.SYS_SYSLOG), + "SYS_TEE": ValueOf(syscall.SYS_TEE), + "SYS_TGKILL": ValueOf(syscall.SYS_TGKILL), + "SYS_TIME": ValueOf(syscall.SYS_TIME), + "SYS_TIMERFD_CREATE": ValueOf(syscall.SYS_TIMERFD_CREATE), + "SYS_TIMERFD_GETTIME": ValueOf(syscall.SYS_TIMERFD_GETTIME), + "SYS_TIMERFD_SETTIME": ValueOf(syscall.SYS_TIMERFD_SETTIME), + "SYS_TIMER_CREATE": ValueOf(syscall.SYS_TIMER_CREATE), + "SYS_TIMER_DELETE": ValueOf(syscall.SYS_TIMER_DELETE), + "SYS_TIMER_GETOVERRUN": ValueOf(syscall.SYS_TIMER_GETOVERRUN), + "SYS_TIMER_GETTIME": ValueOf(syscall.SYS_TIMER_GETTIME), + "SYS_TIMER_SETTIME": ValueOf(syscall.SYS_TIMER_SETTIME), + "SYS_TIMES": ValueOf(syscall.SYS_TIMES), + "SYS_TKILL": ValueOf(syscall.SYS_TKILL), + "SYS_TRUNCATE": ValueOf(syscall.SYS_TRUNCATE), + "SYS_TUXCALL": ValueOf(syscall.SYS_TUXCALL), + "SYS_UMASK": ValueOf(syscall.SYS_UMASK), + "SYS_UMOUNT2": ValueOf(syscall.SYS_UMOUNT2), + "SYS_UNAME": ValueOf(syscall.SYS_UNAME), + "SYS_UNLINK": ValueOf(syscall.SYS_UNLINK), + "SYS_UNLINKAT": ValueOf(syscall.SYS_UNLINKAT), + "SYS_UNSHARE": ValueOf(syscall.SYS_UNSHARE), + "SYS_USELIB": ValueOf(syscall.SYS_USELIB), + "SYS_USTAT": ValueOf(syscall.SYS_USTAT), + "SYS_UTIME": ValueOf(syscall.SYS_UTIME), + "SYS_UTIMENSAT": ValueOf(syscall.SYS_UTIMENSAT), + "SYS_UTIMES": ValueOf(syscall.SYS_UTIMES), + "SYS_VFORK": ValueOf(syscall.SYS_VFORK), + "SYS_VHANGUP": ValueOf(syscall.SYS_VHANGUP), + "SYS_VMSPLICE": ValueOf(syscall.SYS_VMSPLICE), + "SYS_VSERVER": ValueOf(syscall.SYS_VSERVER), + "SYS_WAIT4": ValueOf(syscall.SYS_WAIT4), + "SYS_WAITID": ValueOf(syscall.SYS_WAITID), + "SYS_WRITE": ValueOf(syscall.SYS_WRITE), + "SYS_WRITEV": ValueOf(syscall.SYS_WRITEV), + "SYS__SYSCTL": ValueOf(syscall.SYS__SYSCTL), + "S_BLKSIZE": ValueOf(syscall.S_BLKSIZE), + "S_IEXEC": ValueOf(syscall.S_IEXEC), + "S_IFBLK": ValueOf(syscall.S_IFBLK), + "S_IFCHR": ValueOf(syscall.S_IFCHR), + "S_IFDIR": ValueOf(syscall.S_IFDIR), + "S_IFIFO": ValueOf(syscall.S_IFIFO), + "S_IFLNK": ValueOf(syscall.S_IFLNK), + "S_IFMT": ValueOf(syscall.S_IFMT), + "S_IFREG": ValueOf(syscall.S_IFREG), + "S_IFSOCK": ValueOf(syscall.S_IFSOCK), + "S_IREAD": ValueOf(syscall.S_IREAD), + "S_IRGRP": ValueOf(syscall.S_IRGRP), + "S_IROTH": ValueOf(syscall.S_IROTH), + "S_IRUSR": ValueOf(syscall.S_IRUSR), + "S_IRWXG": ValueOf(syscall.S_IRWXG), + "S_IRWXO": ValueOf(syscall.S_IRWXO), + "S_IRWXU": ValueOf(syscall.S_IRWXU), + "S_ISGID": ValueOf(syscall.S_ISGID), + "S_ISUID": ValueOf(syscall.S_ISUID), + "S_ISVTX": ValueOf(syscall.S_ISVTX), + "S_IWGRP": ValueOf(syscall.S_IWGRP), + "S_IWOTH": ValueOf(syscall.S_IWOTH), + "S_IWRITE": ValueOf(syscall.S_IWRITE), + "S_IWUSR": ValueOf(syscall.S_IWUSR), + "S_IXGRP": ValueOf(syscall.S_IXGRP), + "S_IXOTH": ValueOf(syscall.S_IXOTH), + "S_IXUSR": ValueOf(syscall.S_IXUSR), + "Seek": ValueOf(syscall.Seek), + "Select": ValueOf(syscall.Select), + "Sendfile": ValueOf(syscall.Sendfile), + "Sendmsg": ValueOf(syscall.Sendmsg), + "SendmsgN": ValueOf(syscall.SendmsgN), + "Sendto": ValueOf(syscall.Sendto), + "SetLsfPromisc": ValueOf(syscall.SetLsfPromisc), + "SetNonblock": ValueOf(syscall.SetNonblock), + "Setdomainname": ValueOf(syscall.Setdomainname), + "Setenv": ValueOf(syscall.Setenv), + "Setfsgid": ValueOf(syscall.Setfsgid), + "Setfsuid": ValueOf(syscall.Setfsuid), + "Setgid": ValueOf(syscall.Setgid), + "Setgroups": ValueOf(syscall.Setgroups), + "Sethostname": ValueOf(syscall.Sethostname), + "Setpgid": ValueOf(syscall.Setpgid), + "Setpriority": ValueOf(syscall.Setpriority), + "Setregid": ValueOf(syscall.Setregid), + "Setresgid": ValueOf(syscall.Setresgid), + "Setresuid": ValueOf(syscall.Setresuid), + "Setreuid": ValueOf(syscall.Setreuid), + "Setrlimit": ValueOf(syscall.Setrlimit), + "Setsid": ValueOf(syscall.Setsid), + "SetsockoptByte": ValueOf(syscall.SetsockoptByte), + "SetsockoptICMPv6Filter": ValueOf(syscall.SetsockoptICMPv6Filter), + "SetsockoptIPMreq": ValueOf(syscall.SetsockoptIPMreq), + "SetsockoptIPMreqn": ValueOf(syscall.SetsockoptIPMreqn), + "SetsockoptIPv6Mreq": ValueOf(syscall.SetsockoptIPv6Mreq), + "SetsockoptInet4Addr": ValueOf(syscall.SetsockoptInet4Addr), + "SetsockoptInt": ValueOf(syscall.SetsockoptInt), + "SetsockoptLinger": ValueOf(syscall.SetsockoptLinger), + "SetsockoptString": ValueOf(syscall.SetsockoptString), + "SetsockoptTimeval": ValueOf(syscall.SetsockoptTimeval), + "Settimeofday": ValueOf(syscall.Settimeofday), + "Setuid": ValueOf(syscall.Setuid), + "Setxattr": ValueOf(syscall.Setxattr), + "Shutdown": ValueOf(syscall.Shutdown), + "SizeofCmsghdr": ValueOf(syscall.SizeofCmsghdr), + "SizeofICMPv6Filter": ValueOf(syscall.SizeofICMPv6Filter), + "SizeofIPMreq": ValueOf(syscall.SizeofIPMreq), + "SizeofIPMreqn": ValueOf(syscall.SizeofIPMreqn), + "SizeofIPv6MTUInfo": ValueOf(syscall.SizeofIPv6MTUInfo), + "SizeofIPv6Mreq": ValueOf(syscall.SizeofIPv6Mreq), + "SizeofIfAddrmsg": ValueOf(syscall.SizeofIfAddrmsg), + "SizeofIfInfomsg": ValueOf(syscall.SizeofIfInfomsg), + "SizeofInet4Pktinfo": ValueOf(syscall.SizeofInet4Pktinfo), + "SizeofInet6Pktinfo": ValueOf(syscall.SizeofInet6Pktinfo), + "SizeofInotifyEvent": ValueOf(syscall.SizeofInotifyEvent), + "SizeofLinger": ValueOf(syscall.SizeofLinger), + "SizeofMsghdr": ValueOf(syscall.SizeofMsghdr), + "SizeofNlAttr": ValueOf(syscall.SizeofNlAttr), + "SizeofNlMsgerr": ValueOf(syscall.SizeofNlMsgerr), + "SizeofNlMsghdr": ValueOf(syscall.SizeofNlMsghdr), + "SizeofRtAttr": ValueOf(syscall.SizeofRtAttr), + "SizeofRtGenmsg": ValueOf(syscall.SizeofRtGenmsg), + "SizeofRtMsg": ValueOf(syscall.SizeofRtMsg), + "SizeofRtNexthop": ValueOf(syscall.SizeofRtNexthop), + "SizeofSockFilter": ValueOf(syscall.SizeofSockFilter), + "SizeofSockFprog": ValueOf(syscall.SizeofSockFprog), + "SizeofSockaddrAny": ValueOf(syscall.SizeofSockaddrAny), + "SizeofSockaddrInet4": ValueOf(syscall.SizeofSockaddrInet4), + "SizeofSockaddrInet6": ValueOf(syscall.SizeofSockaddrInet6), + "SizeofSockaddrLinklayer": ValueOf(syscall.SizeofSockaddrLinklayer), + "SizeofSockaddrNetlink": ValueOf(syscall.SizeofSockaddrNetlink), + "SizeofSockaddrUnix": ValueOf(syscall.SizeofSockaddrUnix), + "SizeofTCPInfo": ValueOf(syscall.SizeofTCPInfo), + "SizeofUcred": ValueOf(syscall.SizeofUcred), + "SlicePtrFromStrings": ValueOf(syscall.SlicePtrFromStrings), + "Socket": ValueOf(syscall.Socket), + "SocketDisableIPv6": ValueOf(&syscall.SocketDisableIPv6).Elem(), + "Socketpair": ValueOf(syscall.Socketpair), + "Splice": ValueOf(syscall.Splice), + "StartProcess": ValueOf(syscall.StartProcess), + "Stat": ValueOf(syscall.Stat), + "Statfs": ValueOf(syscall.Statfs), + "Stderr": ValueOf(&syscall.Stderr).Elem(), + "Stdin": ValueOf(&syscall.Stdin).Elem(), + "Stdout": ValueOf(&syscall.Stdout).Elem(), + "StringBytePtr": ValueOf(syscall.StringBytePtr), + "StringByteSlice": ValueOf(syscall.StringByteSlice), + "StringSlicePtr": ValueOf(syscall.StringSlicePtr), + "Symlink": ValueOf(syscall.Symlink), + "Sync": ValueOf(syscall.Sync), + "SyncFileRange": ValueOf(syscall.SyncFileRange), + "Syscall": ValueOf(syscall.Syscall), + "Syscall6": ValueOf(syscall.Syscall6), + "Sysinfo": ValueOf(syscall.Sysinfo), + "TCGETS": ValueOf(syscall.TCGETS), + "TCIFLUSH": ValueOf(syscall.TCIFLUSH), + "TCIOFLUSH": ValueOf(syscall.TCIOFLUSH), + "TCOFLUSH": ValueOf(syscall.TCOFLUSH), + "TCP_CONGESTION": ValueOf(syscall.TCP_CONGESTION), + "TCP_CORK": ValueOf(syscall.TCP_CORK), + "TCP_DEFER_ACCEPT": ValueOf(syscall.TCP_DEFER_ACCEPT), + "TCP_INFO": ValueOf(syscall.TCP_INFO), + "TCP_KEEPCNT": ValueOf(syscall.TCP_KEEPCNT), + "TCP_KEEPIDLE": ValueOf(syscall.TCP_KEEPIDLE), + "TCP_KEEPINTVL": ValueOf(syscall.TCP_KEEPINTVL), + "TCP_LINGER2": ValueOf(syscall.TCP_LINGER2), + "TCP_MAXSEG": ValueOf(syscall.TCP_MAXSEG), + "TCP_MAXWIN": ValueOf(syscall.TCP_MAXWIN), + "TCP_MAX_WINSHIFT": ValueOf(syscall.TCP_MAX_WINSHIFT), + "TCP_MD5SIG": ValueOf(syscall.TCP_MD5SIG), + "TCP_MD5SIG_MAXKEYLEN": ValueOf(syscall.TCP_MD5SIG_MAXKEYLEN), + "TCP_MSS": ValueOf(syscall.TCP_MSS), + "TCP_NODELAY": ValueOf(syscall.TCP_NODELAY), + "TCP_QUICKACK": ValueOf(syscall.TCP_QUICKACK), + "TCP_SYNCNT": ValueOf(syscall.TCP_SYNCNT), + "TCP_WINDOW_CLAMP": ValueOf(syscall.TCP_WINDOW_CLAMP), + "TCSETS": ValueOf(syscall.TCSETS), + "TIOCCBRK": ValueOf(syscall.TIOCCBRK), + "TIOCCONS": ValueOf(syscall.TIOCCONS), + "TIOCEXCL": ValueOf(syscall.TIOCEXCL), + "TIOCGDEV": ValueOf(uint32(syscall.TIOCGDEV)), + "TIOCGETD": ValueOf(syscall.TIOCGETD), + "TIOCGICOUNT": ValueOf(syscall.TIOCGICOUNT), + "TIOCGLCKTRMIOS": ValueOf(syscall.TIOCGLCKTRMIOS), + "TIOCGPGRP": ValueOf(syscall.TIOCGPGRP), + "TIOCGPTN": ValueOf(uint32(syscall.TIOCGPTN)), + "TIOCGRS485": ValueOf(syscall.TIOCGRS485), + "TIOCGSERIAL": ValueOf(syscall.TIOCGSERIAL), + "TIOCGSID": ValueOf(syscall.TIOCGSID), + "TIOCGSOFTCAR": ValueOf(syscall.TIOCGSOFTCAR), + "TIOCGWINSZ": ValueOf(syscall.TIOCGWINSZ), + "TIOCINQ": ValueOf(syscall.TIOCINQ), + "TIOCLINUX": ValueOf(syscall.TIOCLINUX), + "TIOCMBIC": ValueOf(syscall.TIOCMBIC), + "TIOCMBIS": ValueOf(syscall.TIOCMBIS), + "TIOCMGET": ValueOf(syscall.TIOCMGET), + "TIOCMIWAIT": ValueOf(syscall.TIOCMIWAIT), + "TIOCMSET": ValueOf(syscall.TIOCMSET), + "TIOCM_CAR": ValueOf(syscall.TIOCM_CAR), + "TIOCM_CD": ValueOf(syscall.TIOCM_CD), + "TIOCM_CTS": ValueOf(syscall.TIOCM_CTS), + "TIOCM_DSR": ValueOf(syscall.TIOCM_DSR), + "TIOCM_DTR": ValueOf(syscall.TIOCM_DTR), + "TIOCM_LE": ValueOf(syscall.TIOCM_LE), + "TIOCM_RI": ValueOf(syscall.TIOCM_RI), + "TIOCM_RNG": ValueOf(syscall.TIOCM_RNG), + "TIOCM_RTS": ValueOf(syscall.TIOCM_RTS), + "TIOCM_SR": ValueOf(syscall.TIOCM_SR), + "TIOCM_ST": ValueOf(syscall.TIOCM_ST), + "TIOCNOTTY": ValueOf(syscall.TIOCNOTTY), + "TIOCNXCL": ValueOf(syscall.TIOCNXCL), + "TIOCOUTQ": ValueOf(syscall.TIOCOUTQ), + "TIOCPKT": ValueOf(syscall.TIOCPKT), + "TIOCPKT_DATA": ValueOf(syscall.TIOCPKT_DATA), + "TIOCPKT_DOSTOP": ValueOf(syscall.TIOCPKT_DOSTOP), + "TIOCPKT_FLUSHREAD": ValueOf(syscall.TIOCPKT_FLUSHREAD), + "TIOCPKT_FLUSHWRITE": ValueOf(syscall.TIOCPKT_FLUSHWRITE), + "TIOCPKT_IOCTL": ValueOf(syscall.TIOCPKT_IOCTL), + "TIOCPKT_NOSTOP": ValueOf(syscall.TIOCPKT_NOSTOP), + "TIOCPKT_START": ValueOf(syscall.TIOCPKT_START), + "TIOCPKT_STOP": ValueOf(syscall.TIOCPKT_STOP), + "TIOCSBRK": ValueOf(syscall.TIOCSBRK), + "TIOCSCTTY": ValueOf(syscall.TIOCSCTTY), + "TIOCSERCONFIG": ValueOf(syscall.TIOCSERCONFIG), + "TIOCSERGETLSR": ValueOf(syscall.TIOCSERGETLSR), + "TIOCSERGETMULTI": ValueOf(syscall.TIOCSERGETMULTI), + "TIOCSERGSTRUCT": ValueOf(syscall.TIOCSERGSTRUCT), + "TIOCSERGWILD": ValueOf(syscall.TIOCSERGWILD), + "TIOCSERSETMULTI": ValueOf(syscall.TIOCSERSETMULTI), + "TIOCSERSWILD": ValueOf(syscall.TIOCSERSWILD), + "TIOCSER_TEMT": ValueOf(syscall.TIOCSER_TEMT), + "TIOCSETD": ValueOf(syscall.TIOCSETD), + "TIOCSIG": ValueOf(syscall.TIOCSIG), + "TIOCSLCKTRMIOS": ValueOf(syscall.TIOCSLCKTRMIOS), + "TIOCSPGRP": ValueOf(syscall.TIOCSPGRP), + "TIOCSPTLCK": ValueOf(syscall.TIOCSPTLCK), + "TIOCSRS485": ValueOf(syscall.TIOCSRS485), + "TIOCSSERIAL": ValueOf(syscall.TIOCSSERIAL), + "TIOCSSOFTCAR": ValueOf(syscall.TIOCSSOFTCAR), + "TIOCSTI": ValueOf(syscall.TIOCSTI), + "TIOCSWINSZ": ValueOf(syscall.TIOCSWINSZ), + "TOSTOP": ValueOf(syscall.TOSTOP), + "TUNATTACHFILTER": ValueOf(syscall.TUNATTACHFILTER), + "TUNDETACHFILTER": ValueOf(syscall.TUNDETACHFILTER), + "TUNGETFEATURES": ValueOf(uint32(syscall.TUNGETFEATURES)), + "TUNGETIFF": ValueOf(uint32(syscall.TUNGETIFF)), + "TUNGETSNDBUF": ValueOf(uint32(syscall.TUNGETSNDBUF)), + "TUNGETVNETHDRSZ": ValueOf(uint32(syscall.TUNGETVNETHDRSZ)), + "TUNSETDEBUG": ValueOf(syscall.TUNSETDEBUG), + "TUNSETGROUP": ValueOf(syscall.TUNSETGROUP), + "TUNSETIFF": ValueOf(syscall.TUNSETIFF), + "TUNSETLINK": ValueOf(syscall.TUNSETLINK), + "TUNSETNOCSUM": ValueOf(syscall.TUNSETNOCSUM), + "TUNSETOFFLOAD": ValueOf(syscall.TUNSETOFFLOAD), + "TUNSETOWNER": ValueOf(syscall.TUNSETOWNER), + "TUNSETPERSIST": ValueOf(syscall.TUNSETPERSIST), + "TUNSETSNDBUF": ValueOf(syscall.TUNSETSNDBUF), + "TUNSETTXFILTER": ValueOf(syscall.TUNSETTXFILTER), + "TUNSETVNETHDRSZ": ValueOf(syscall.TUNSETVNETHDRSZ), + "Tee": ValueOf(syscall.Tee), + "Tgkill": ValueOf(syscall.Tgkill), + "Time": ValueOf(syscall.Time), + "Times": ValueOf(syscall.Times), + "TimespecToNsec": ValueOf(syscall.TimespecToNsec), + "TimevalToNsec": ValueOf(syscall.TimevalToNsec), + "Truncate": ValueOf(syscall.Truncate), + "Umask": ValueOf(syscall.Umask), + "Uname": ValueOf(syscall.Uname), + "UnixCredentials": ValueOf(syscall.UnixCredentials), + "UnixRights": ValueOf(syscall.UnixRights), + "Unlink": ValueOf(syscall.Unlink), + "Unlinkat": ValueOf(syscall.Unlinkat), + "Unmount": ValueOf(syscall.Unmount), + "Unsetenv": ValueOf(syscall.Unsetenv), + "Unshare": ValueOf(syscall.Unshare), + "Ustat": ValueOf(syscall.Ustat), + "Utime": ValueOf(syscall.Utime), + "Utimes": ValueOf(syscall.Utimes), + "UtimesNano": ValueOf(syscall.UtimesNano), + "VDISCARD": ValueOf(syscall.VDISCARD), + "VEOF": ValueOf(syscall.VEOF), + "VEOL": ValueOf(syscall.VEOL), + "VEOL2": ValueOf(syscall.VEOL2), + "VERASE": ValueOf(syscall.VERASE), + "VINTR": ValueOf(syscall.VINTR), + "VKILL": ValueOf(syscall.VKILL), + "VLNEXT": ValueOf(syscall.VLNEXT), + "VMIN": ValueOf(syscall.VMIN), + "VQUIT": ValueOf(syscall.VQUIT), + "VREPRINT": ValueOf(syscall.VREPRINT), + "VSTART": ValueOf(syscall.VSTART), + "VSTOP": ValueOf(syscall.VSTOP), + "VSUSP": ValueOf(syscall.VSUSP), + "VSWTC": ValueOf(syscall.VSWTC), + "VTIME": ValueOf(syscall.VTIME), + "VWERASE": ValueOf(syscall.VWERASE), + "WALL": ValueOf(syscall.WALL), + "WCLONE": ValueOf(uint32(syscall.WCLONE)), + "WCONTINUED": ValueOf(syscall.WCONTINUED), + "WEXITED": ValueOf(syscall.WEXITED), + "WNOHANG": ValueOf(syscall.WNOHANG), + "WNOTHREAD": ValueOf(syscall.WNOTHREAD), + "WNOWAIT": ValueOf(syscall.WNOWAIT), + "WORDSIZE": ValueOf(syscall.WORDSIZE), + "WSTOPPED": ValueOf(syscall.WSTOPPED), + "WUNTRACED": ValueOf(syscall.WUNTRACED), + "Wait4": ValueOf(syscall.Wait4), + "Write": ValueOf(syscall.Write), + "XCASE": ValueOf(syscall.XCASE), + },Types: map[string]Type{ + "Cmsghdr": TypeOf((*syscall.Cmsghdr)(nil)).Elem(), + "Credential": TypeOf((*syscall.Credential)(nil)).Elem(), + "Dirent": TypeOf((*syscall.Dirent)(nil)).Elem(), + "EpollEvent": TypeOf((*syscall.EpollEvent)(nil)).Elem(), + "Errno": TypeOf((*syscall.Errno)(nil)).Elem(), + "FdSet": TypeOf((*syscall.FdSet)(nil)).Elem(), + "Flock_t": TypeOf((*syscall.Flock_t)(nil)).Elem(), + "Fsid": TypeOf((*syscall.Fsid)(nil)).Elem(), + "ICMPv6Filter": TypeOf((*syscall.ICMPv6Filter)(nil)).Elem(), + "IPMreq": TypeOf((*syscall.IPMreq)(nil)).Elem(), + "IPMreqn": TypeOf((*syscall.IPMreqn)(nil)).Elem(), + "IPv6MTUInfo": TypeOf((*syscall.IPv6MTUInfo)(nil)).Elem(), + "IPv6Mreq": TypeOf((*syscall.IPv6Mreq)(nil)).Elem(), + "IfAddrmsg": TypeOf((*syscall.IfAddrmsg)(nil)).Elem(), + "IfInfomsg": TypeOf((*syscall.IfInfomsg)(nil)).Elem(), + "Inet4Pktinfo": TypeOf((*syscall.Inet4Pktinfo)(nil)).Elem(), + "Inet6Pktinfo": TypeOf((*syscall.Inet6Pktinfo)(nil)).Elem(), + "InotifyEvent": TypeOf((*syscall.InotifyEvent)(nil)).Elem(), + "Iovec": TypeOf((*syscall.Iovec)(nil)).Elem(), + "Linger": TypeOf((*syscall.Linger)(nil)).Elem(), + "Msghdr": TypeOf((*syscall.Msghdr)(nil)).Elem(), + "NetlinkMessage": TypeOf((*syscall.NetlinkMessage)(nil)).Elem(), + "NetlinkRouteAttr": TypeOf((*syscall.NetlinkRouteAttr)(nil)).Elem(), + "NetlinkRouteRequest": TypeOf((*syscall.NetlinkRouteRequest)(nil)).Elem(), + "NlAttr": TypeOf((*syscall.NlAttr)(nil)).Elem(), + "NlMsgerr": TypeOf((*syscall.NlMsgerr)(nil)).Elem(), + "NlMsghdr": TypeOf((*syscall.NlMsghdr)(nil)).Elem(), + "ProcAttr": TypeOf((*syscall.ProcAttr)(nil)).Elem(), + "PtraceRegs": TypeOf((*syscall.PtraceRegs)(nil)).Elem(), + "RawSockaddr": TypeOf((*syscall.RawSockaddr)(nil)).Elem(), + "RawSockaddrAny": TypeOf((*syscall.RawSockaddrAny)(nil)).Elem(), + "RawSockaddrInet4": TypeOf((*syscall.RawSockaddrInet4)(nil)).Elem(), + "RawSockaddrInet6": TypeOf((*syscall.RawSockaddrInet6)(nil)).Elem(), + "RawSockaddrLinklayer": TypeOf((*syscall.RawSockaddrLinklayer)(nil)).Elem(), + "RawSockaddrNetlink": TypeOf((*syscall.RawSockaddrNetlink)(nil)).Elem(), + "RawSockaddrUnix": TypeOf((*syscall.RawSockaddrUnix)(nil)).Elem(), + "Rlimit": TypeOf((*syscall.Rlimit)(nil)).Elem(), + "RtAttr": TypeOf((*syscall.RtAttr)(nil)).Elem(), + "RtGenmsg": TypeOf((*syscall.RtGenmsg)(nil)).Elem(), + "RtMsg": TypeOf((*syscall.RtMsg)(nil)).Elem(), + "RtNexthop": TypeOf((*syscall.RtNexthop)(nil)).Elem(), + "Rusage": TypeOf((*syscall.Rusage)(nil)).Elem(), + "Signal": TypeOf((*syscall.Signal)(nil)).Elem(), + "SockFilter": TypeOf((*syscall.SockFilter)(nil)).Elem(), + "SockFprog": TypeOf((*syscall.SockFprog)(nil)).Elem(), + "Sockaddr": TypeOf((*syscall.Sockaddr)(nil)).Elem(), + "SockaddrInet4": TypeOf((*syscall.SockaddrInet4)(nil)).Elem(), + "SockaddrInet6": TypeOf((*syscall.SockaddrInet6)(nil)).Elem(), + "SockaddrLinklayer": TypeOf((*syscall.SockaddrLinklayer)(nil)).Elem(), + "SockaddrNetlink": TypeOf((*syscall.SockaddrNetlink)(nil)).Elem(), + "SockaddrUnix": TypeOf((*syscall.SockaddrUnix)(nil)).Elem(), + "SocketControlMessage": TypeOf((*syscall.SocketControlMessage)(nil)).Elem(), + "Stat_t": TypeOf((*syscall.Stat_t)(nil)).Elem(), + "Statfs_t": TypeOf((*syscall.Statfs_t)(nil)).Elem(), + "SysProcAttr": TypeOf((*syscall.SysProcAttr)(nil)).Elem(), + "SysProcIDMap": TypeOf((*syscall.SysProcIDMap)(nil)).Elem(), + "Sysinfo_t": TypeOf((*syscall.Sysinfo_t)(nil)).Elem(), + "TCPInfo": TypeOf((*syscall.TCPInfo)(nil)).Elem(), + "Termios": TypeOf((*syscall.Termios)(nil)).Elem(), + "Time_t": TypeOf((*syscall.Time_t)(nil)).Elem(), + "Timespec": TypeOf((*syscall.Timespec)(nil)).Elem(), + "Timeval": TypeOf((*syscall.Timeval)(nil)).Elem(), + "Timex": TypeOf((*syscall.Timex)(nil)).Elem(), + "Tms": TypeOf((*syscall.Tms)(nil)).Elem(), + "Ucred": TypeOf((*syscall.Ucred)(nil)).Elem(), + "Ustat_t": TypeOf((*syscall.Ustat_t)(nil)).Elem(), + "Utimbuf": TypeOf((*syscall.Utimbuf)(nil)).Elem(), + "Utsname": TypeOf((*syscall.Utsname)(nil)).Elem(), + "WaitStatus": TypeOf((*syscall.WaitStatus)(nil)).Elem(), + },Untypeds: map[string]string{ + "AF_ALG": "int:38", + "AF_APPLETALK": "int:5", + "AF_ASH": "int:18", + "AF_ATMPVC": "int:8", + "AF_ATMSVC": "int:20", + "AF_AX25": "int:3", + "AF_BLUETOOTH": "int:31", + "AF_BRIDGE": "int:7", + "AF_CAIF": "int:37", + "AF_CAN": "int:29", + "AF_DECnet": "int:12", + "AF_ECONET": "int:19", + "AF_FILE": "int:1", + "AF_IEEE802154": "int:36", + "AF_INET": "int:2", + "AF_INET6": "int:10", + "AF_IPX": "int:4", + "AF_IRDA": "int:23", + "AF_ISDN": "int:34", + "AF_IUCV": "int:32", + "AF_KEY": "int:15", + "AF_LLC": "int:26", + "AF_LOCAL": "int:1", + "AF_MAX": "int:39", + "AF_NETBEUI": "int:13", + "AF_NETLINK": "int:16", + "AF_NETROM": "int:6", + "AF_PACKET": "int:17", + "AF_PHONET": "int:35", + "AF_PPPOX": "int:24", + "AF_RDS": "int:21", + "AF_ROSE": "int:11", + "AF_ROUTE": "int:16", + "AF_RXRPC": "int:33", + "AF_SECURITY": "int:14", + "AF_SNA": "int:22", + "AF_TIPC": "int:30", + "AF_UNIX": "int:1", + "AF_UNSPEC": "int:0", + "AF_WANPIPE": "int:25", + "AF_X25": "int:9", + "ARPHRD_ADAPT": "int:264", + "ARPHRD_APPLETLK": "int:8", + "ARPHRD_ARCNET": "int:7", + "ARPHRD_ASH": "int:781", + "ARPHRD_ATM": "int:19", + "ARPHRD_AX25": "int:3", + "ARPHRD_BIF": "int:775", + "ARPHRD_CHAOS": "int:5", + "ARPHRD_CISCO": "int:513", + "ARPHRD_CSLIP": "int:257", + "ARPHRD_CSLIP6": "int:259", + "ARPHRD_DDCMP": "int:517", + "ARPHRD_DLCI": "int:15", + "ARPHRD_ECONET": "int:782", + "ARPHRD_EETHER": "int:2", + "ARPHRD_ETHER": "int:1", + "ARPHRD_EUI64": "int:27", + "ARPHRD_FCAL": "int:785", + "ARPHRD_FCFABRIC": "int:787", + "ARPHRD_FCPL": "int:786", + "ARPHRD_FCPP": "int:784", + "ARPHRD_FDDI": "int:774", + "ARPHRD_FRAD": "int:770", + "ARPHRD_HDLC": "int:513", + "ARPHRD_HIPPI": "int:780", + "ARPHRD_HWX25": "int:272", + "ARPHRD_IEEE1394": "int:24", + "ARPHRD_IEEE802": "int:6", + "ARPHRD_IEEE80211": "int:801", + "ARPHRD_IEEE80211_PRISM": "int:802", + "ARPHRD_IEEE80211_RADIOTAP": "int:803", + "ARPHRD_IEEE802154": "int:804", + "ARPHRD_IEEE802154_PHY": "int:805", + "ARPHRD_IEEE802_TR": "int:800", + "ARPHRD_INFINIBAND": "int:32", + "ARPHRD_IPDDP": "int:777", + "ARPHRD_IPGRE": "int:778", + "ARPHRD_IRDA": "int:783", + "ARPHRD_LAPB": "int:516", + "ARPHRD_LOCALTLK": "int:773", + "ARPHRD_LOOPBACK": "int:772", + "ARPHRD_METRICOM": "int:23", + "ARPHRD_NETROM": "int:0", + "ARPHRD_NONE": "int:65534", + "ARPHRD_PIMREG": "int:779", + "ARPHRD_PPP": "int:512", + "ARPHRD_PRONET": "int:4", + "ARPHRD_RAWHDLC": "int:518", + "ARPHRD_ROSE": "int:270", + "ARPHRD_RSRVD": "int:260", + "ARPHRD_SIT": "int:776", + "ARPHRD_SKIP": "int:771", + "ARPHRD_SLIP": "int:256", + "ARPHRD_SLIP6": "int:258", + "ARPHRD_TUNNEL": "int:768", + "ARPHRD_TUNNEL6": "int:769", + "ARPHRD_VOID": "int:65535", + "ARPHRD_X25": "int:271", + "B0": "int:0", + "B1000000": "int:4104", + "B110": "int:3", + "B115200": "int:4098", + "B1152000": "int:4105", + "B1200": "int:9", + "B134": "int:4", + "B150": "int:5", + "B1500000": "int:4106", + "B1800": "int:10", + "B19200": "int:14", + "B200": "int:6", + "B2000000": "int:4107", + "B230400": "int:4099", + "B2400": "int:11", + "B2500000": "int:4108", + "B300": "int:7", + "B3000000": "int:4109", + "B3500000": "int:4110", + "B38400": "int:15", + "B4000000": "int:4111", + "B460800": "int:4100", + "B4800": "int:12", + "B50": "int:1", + "B500000": "int:4101", + "B57600": "int:4097", + "B576000": "int:4102", + "B600": "int:8", + "B75": "int:2", + "B921600": "int:4103", + "B9600": "int:13", + "BPF_A": "int:16", + "BPF_ABS": "int:32", + "BPF_ADD": "int:0", + "BPF_ALU": "int:4", + "BPF_AND": "int:80", + "BPF_B": "int:16", + "BPF_DIV": "int:48", + "BPF_H": "int:8", + "BPF_IMM": "int:0", + "BPF_IND": "int:64", + "BPF_JA": "int:0", + "BPF_JEQ": "int:16", + "BPF_JGE": "int:48", + "BPF_JGT": "int:32", + "BPF_JMP": "int:5", + "BPF_JSET": "int:64", + "BPF_K": "int:0", + "BPF_LD": "int:0", + "BPF_LDX": "int:1", + "BPF_LEN": "int:128", + "BPF_LSH": "int:96", + "BPF_MAJOR_VERSION": "int:1", + "BPF_MAXINSNS": "int:4096", + "BPF_MEM": "int:96", + "BPF_MEMWORDS": "int:16", + "BPF_MINOR_VERSION": "int:1", + "BPF_MISC": "int:7", + "BPF_MSH": "int:160", + "BPF_MUL": "int:32", + "BPF_NEG": "int:128", + "BPF_OR": "int:64", + "BPF_RET": "int:6", + "BPF_RSH": "int:112", + "BPF_ST": "int:2", + "BPF_STX": "int:3", + "BPF_SUB": "int:16", + "BPF_TAX": "int:0", + "BPF_TXA": "int:128", + "BPF_W": "int:0", + "BPF_X": "int:8", + "BRKINT": "int:2", + "CLOCAL": "int:2048", + "CLONE_CHILD_CLEARTID": "int:2097152", + "CLONE_CHILD_SETTID": "int:16777216", + "CLONE_DETACHED": "int:4194304", + "CLONE_FILES": "int:1024", + "CLONE_FS": "int:512", + "CLONE_IO": "int:2147483648", + "CLONE_NEWIPC": "int:134217728", + "CLONE_NEWNET": "int:1073741824", + "CLONE_NEWNS": "int:131072", + "CLONE_NEWPID": "int:536870912", + "CLONE_NEWUSER": "int:268435456", + "CLONE_NEWUTS": "int:67108864", + "CLONE_PARENT": "int:32768", + "CLONE_PARENT_SETTID": "int:1048576", + "CLONE_PTRACE": "int:8192", + "CLONE_SETTLS": "int:524288", + "CLONE_SIGHAND": "int:2048", + "CLONE_SYSVSEM": "int:262144", + "CLONE_THREAD": "int:65536", + "CLONE_UNTRACED": "int:8388608", + "CLONE_VFORK": "int:16384", + "CLONE_VM": "int:256", + "CREAD": "int:128", + "CS5": "int:0", + "CS6": "int:16", + "CS7": "int:32", + "CS8": "int:48", + "CSIZE": "int:48", + "CSTOPB": "int:64", + "DT_BLK": "int:6", + "DT_CHR": "int:2", + "DT_DIR": "int:4", + "DT_FIFO": "int:1", + "DT_LNK": "int:10", + "DT_REG": "int:8", + "DT_SOCK": "int:12", + "DT_UNKNOWN": "int:0", + "DT_WHT": "int:14", + "ECHO": "int:8", + "ECHOCTL": "int:512", + "ECHOE": "int:16", + "ECHOK": "int:32", + "ECHOKE": "int:2048", + "ECHONL": "int:64", + "ECHOPRT": "int:1024", + "EPOLLERR": "int:8", + "EPOLLET": "int:-2147483648", + "EPOLLHUP": "int:16", + "EPOLLIN": "int:1", + "EPOLLMSG": "int:1024", + "EPOLLONESHOT": "int:1073741824", + "EPOLLOUT": "int:4", + "EPOLLPRI": "int:2", + "EPOLLRDBAND": "int:128", + "EPOLLRDHUP": "int:8192", + "EPOLLRDNORM": "int:64", + "EPOLLWRBAND": "int:512", + "EPOLLWRNORM": "int:256", + "EPOLL_CLOEXEC": "int:524288", + "EPOLL_CTL_ADD": "int:1", + "EPOLL_CTL_DEL": "int:2", + "EPOLL_CTL_MOD": "int:3", + "EPOLL_NONBLOCK": "int:2048", + "ETH_P_1588": "int:35063", + "ETH_P_8021Q": "int:33024", + "ETH_P_802_2": "int:4", + "ETH_P_802_3": "int:1", + "ETH_P_AARP": "int:33011", + "ETH_P_ALL": "int:3", + "ETH_P_AOE": "int:34978", + "ETH_P_ARCNET": "int:26", + "ETH_P_ARP": "int:2054", + "ETH_P_ATALK": "int:32923", + "ETH_P_ATMFATE": "int:34948", + "ETH_P_ATMMPOA": "int:34892", + "ETH_P_AX25": "int:2", + "ETH_P_BPQ": "int:2303", + "ETH_P_CAIF": "int:247", + "ETH_P_CAN": "int:12", + "ETH_P_CONTROL": "int:22", + "ETH_P_CUST": "int:24582", + "ETH_P_DDCMP": "int:6", + "ETH_P_DEC": "int:24576", + "ETH_P_DIAG": "int:24581", + "ETH_P_DNA_DL": "int:24577", + "ETH_P_DNA_RC": "int:24578", + "ETH_P_DNA_RT": "int:24579", + "ETH_P_DSA": "int:27", + "ETH_P_ECONET": "int:24", + "ETH_P_EDSA": "int:56026", + "ETH_P_FCOE": "int:35078", + "ETH_P_FIP": "int:35092", + "ETH_P_HDLC": "int:25", + "ETH_P_IEEE802154": "int:246", + "ETH_P_IEEEPUP": "int:2560", + "ETH_P_IEEEPUPAT": "int:2561", + "ETH_P_IP": "int:2048", + "ETH_P_IPV6": "int:34525", + "ETH_P_IPX": "int:33079", + "ETH_P_IRDA": "int:23", + "ETH_P_LAT": "int:24580", + "ETH_P_LINK_CTL": "int:34924", + "ETH_P_LOCALTALK": "int:9", + "ETH_P_LOOP": "int:96", + "ETH_P_MOBITEX": "int:21", + "ETH_P_MPLS_MC": "int:34888", + "ETH_P_MPLS_UC": "int:34887", + "ETH_P_PAE": "int:34958", + "ETH_P_PAUSE": "int:34824", + "ETH_P_PHONET": "int:245", + "ETH_P_PPPTALK": "int:16", + "ETH_P_PPP_DISC": "int:34915", + "ETH_P_PPP_MP": "int:8", + "ETH_P_PPP_SES": "int:34916", + "ETH_P_PUP": "int:512", + "ETH_P_PUPAT": "int:513", + "ETH_P_RARP": "int:32821", + "ETH_P_SCA": "int:24583", + "ETH_P_SLOW": "int:34825", + "ETH_P_SNAP": "int:5", + "ETH_P_TEB": "int:25944", + "ETH_P_TIPC": "int:35018", + "ETH_P_TRAILER": "int:28", + "ETH_P_TR_802_2": "int:17", + "ETH_P_WAN_PPP": "int:7", + "ETH_P_WCCP": "int:34878", + "ETH_P_X25": "int:2053", + "FD_CLOEXEC": "int:1", + "FD_SETSIZE": "int:1024", + "FLUSHO": "int:4096", + "F_DUPFD": "int:0", + "F_DUPFD_CLOEXEC": "int:1030", + "F_EXLCK": "int:4", + "F_GETFD": "int:1", + "F_GETFL": "int:3", + "F_GETLEASE": "int:1025", + "F_GETLK": "int:5", + "F_GETLK64": "int:5", + "F_GETOWN": "int:9", + "F_GETOWN_EX": "int:16", + "F_GETPIPE_SZ": "int:1032", + "F_GETSIG": "int:11", + "F_LOCK": "int:1", + "F_NOTIFY": "int:1026", + "F_OK": "int:0", + "F_RDLCK": "int:0", + "F_SETFD": "int:2", + "F_SETFL": "int:4", + "F_SETLEASE": "int:1024", + "F_SETLK": "int:6", + "F_SETLK64": "int:6", + "F_SETLKW": "int:7", + "F_SETLKW64": "int:7", + "F_SETOWN": "int:8", + "F_SETOWN_EX": "int:15", + "F_SETPIPE_SZ": "int:1031", + "F_SETSIG": "int:10", + "F_SHLCK": "int:8", + "F_TEST": "int:3", + "F_TLOCK": "int:2", + "F_ULOCK": "int:0", + "F_UNLCK": "int:2", + "F_WRLCK": "int:1", + "HUPCL": "int:1024", + "ICANON": "int:2", + "ICMPV6_FILTER": "int:1", + "ICRNL": "int:256", + "IEXTEN": "int:32768", + "IFA_ADDRESS": "int:1", + "IFA_ANYCAST": "int:5", + "IFA_BROADCAST": "int:4", + "IFA_CACHEINFO": "int:6", + "IFA_F_DADFAILED": "int:8", + "IFA_F_DEPRECATED": "int:32", + "IFA_F_HOMEADDRESS": "int:16", + "IFA_F_NODAD": "int:2", + "IFA_F_OPTIMISTIC": "int:4", + "IFA_F_PERMANENT": "int:128", + "IFA_F_SECONDARY": "int:1", + "IFA_F_TEMPORARY": "int:1", + "IFA_F_TENTATIVE": "int:64", + "IFA_LABEL": "int:3", + "IFA_LOCAL": "int:2", + "IFA_MAX": "int:7", + "IFA_MULTICAST": "int:7", + "IFA_UNSPEC": "int:0", + "IFF_ALLMULTI": "int:512", + "IFF_AUTOMEDIA": "int:16384", + "IFF_BROADCAST": "int:2", + "IFF_DEBUG": "int:4", + "IFF_DYNAMIC": "int:32768", + "IFF_LOOPBACK": "int:8", + "IFF_MASTER": "int:1024", + "IFF_MULTICAST": "int:4096", + "IFF_NOARP": "int:128", + "IFF_NOTRAILERS": "int:32", + "IFF_NO_PI": "int:4096", + "IFF_ONE_QUEUE": "int:8192", + "IFF_POINTOPOINT": "int:16", + "IFF_PORTSEL": "int:8192", + "IFF_PROMISC": "int:256", + "IFF_RUNNING": "int:64", + "IFF_SLAVE": "int:2048", + "IFF_TAP": "int:2", + "IFF_TUN": "int:1", + "IFF_TUN_EXCL": "int:32768", + "IFF_UP": "int:1", + "IFF_VNET_HDR": "int:16384", + "IFLA_ADDRESS": "int:1", + "IFLA_BROADCAST": "int:2", + "IFLA_COST": "int:8", + "IFLA_IFALIAS": "int:20", + "IFLA_IFNAME": "int:3", + "IFLA_LINK": "int:5", + "IFLA_LINKINFO": "int:18", + "IFLA_LINKMODE": "int:17", + "IFLA_MAP": "int:14", + "IFLA_MASTER": "int:10", + "IFLA_MAX": "int:29", + "IFLA_MTU": "int:4", + "IFLA_NET_NS_PID": "int:19", + "IFLA_OPERSTATE": "int:16", + "IFLA_PRIORITY": "int:9", + "IFLA_PROTINFO": "int:12", + "IFLA_QDISC": "int:6", + "IFLA_STATS": "int:7", + "IFLA_TXQLEN": "int:13", + "IFLA_UNSPEC": "int:0", + "IFLA_WEIGHT": "int:15", + "IFLA_WIRELESS": "int:11", + "IFNAMSIZ": "int:16", + "IGNBRK": "int:1", + "IGNCR": "int:128", + "IGNPAR": "int:4", + "IMAXBEL": "int:8192", + "INLCR": "int:64", + "INPCK": "int:16", + "IN_ACCESS": "int:1", + "IN_ALL_EVENTS": "int:4095", + "IN_ATTRIB": "int:4", + "IN_CLASSA_HOST": "int:16777215", + "IN_CLASSA_MAX": "int:128", + "IN_CLASSA_NET": "int:4278190080", + "IN_CLASSA_NSHIFT": "int:24", + "IN_CLASSB_HOST": "int:65535", + "IN_CLASSB_MAX": "int:65536", + "IN_CLASSB_NET": "int:4294901760", + "IN_CLASSB_NSHIFT": "int:16", + "IN_CLASSC_HOST": "int:255", + "IN_CLASSC_NET": "int:4294967040", + "IN_CLASSC_NSHIFT": "int:8", + "IN_CLOEXEC": "int:524288", + "IN_CLOSE": "int:24", + "IN_CLOSE_NOWRITE": "int:16", + "IN_CLOSE_WRITE": "int:8", + "IN_CREATE": "int:256", + "IN_DELETE": "int:512", + "IN_DELETE_SELF": "int:1024", + "IN_DONT_FOLLOW": "int:33554432", + "IN_EXCL_UNLINK": "int:67108864", + "IN_IGNORED": "int:32768", + "IN_ISDIR": "int:1073741824", + "IN_LOOPBACKNET": "int:127", + "IN_MASK_ADD": "int:536870912", + "IN_MODIFY": "int:2", + "IN_MOVE": "int:192", + "IN_MOVED_FROM": "int:64", + "IN_MOVED_TO": "int:128", + "IN_MOVE_SELF": "int:2048", + "IN_NONBLOCK": "int:2048", + "IN_ONESHOT": "int:2147483648", + "IN_ONLYDIR": "int:16777216", + "IN_OPEN": "int:32", + "IN_Q_OVERFLOW": "int:16384", + "IN_UNMOUNT": "int:8192", + "IPPROTO_AH": "int:51", + "IPPROTO_COMP": "int:108", + "IPPROTO_DCCP": "int:33", + "IPPROTO_DSTOPTS": "int:60", + "IPPROTO_EGP": "int:8", + "IPPROTO_ENCAP": "int:98", + "IPPROTO_ESP": "int:50", + "IPPROTO_FRAGMENT": "int:44", + "IPPROTO_GRE": "int:47", + "IPPROTO_HOPOPTS": "int:0", + "IPPROTO_ICMP": "int:1", + "IPPROTO_ICMPV6": "int:58", + "IPPROTO_IDP": "int:22", + "IPPROTO_IGMP": "int:2", + "IPPROTO_IP": "int:0", + "IPPROTO_IPIP": "int:4", + "IPPROTO_IPV6": "int:41", + "IPPROTO_MTP": "int:92", + "IPPROTO_NONE": "int:59", + "IPPROTO_PIM": "int:103", + "IPPROTO_PUP": "int:12", + "IPPROTO_RAW": "int:255", + "IPPROTO_ROUTING": "int:43", + "IPPROTO_RSVP": "int:46", + "IPPROTO_SCTP": "int:132", + "IPPROTO_TCP": "int:6", + "IPPROTO_TP": "int:29", + "IPPROTO_UDP": "int:17", + "IPPROTO_UDPLITE": "int:136", + "IPV6_2292DSTOPTS": "int:4", + "IPV6_2292HOPLIMIT": "int:8", + "IPV6_2292HOPOPTS": "int:3", + "IPV6_2292PKTINFO": "int:2", + "IPV6_2292PKTOPTIONS": "int:6", + "IPV6_2292RTHDR": "int:5", + "IPV6_ADDRFORM": "int:1", + "IPV6_ADD_MEMBERSHIP": "int:20", + "IPV6_AUTHHDR": "int:10", + "IPV6_CHECKSUM": "int:7", + "IPV6_DROP_MEMBERSHIP": "int:21", + "IPV6_DSTOPTS": "int:59", + "IPV6_HOPLIMIT": "int:52", + "IPV6_HOPOPTS": "int:54", + "IPV6_IPSEC_POLICY": "int:34", + "IPV6_JOIN_ANYCAST": "int:27", + "IPV6_JOIN_GROUP": "int:20", + "IPV6_LEAVE_ANYCAST": "int:28", + "IPV6_LEAVE_GROUP": "int:21", + "IPV6_MTU": "int:24", + "IPV6_MTU_DISCOVER": "int:23", + "IPV6_MULTICAST_HOPS": "int:18", + "IPV6_MULTICAST_IF": "int:17", + "IPV6_MULTICAST_LOOP": "int:19", + "IPV6_NEXTHOP": "int:9", + "IPV6_PKTINFO": "int:50", + "IPV6_PMTUDISC_DO": "int:2", + "IPV6_PMTUDISC_DONT": "int:0", + "IPV6_PMTUDISC_PROBE": "int:3", + "IPV6_PMTUDISC_WANT": "int:1", + "IPV6_RECVDSTOPTS": "int:58", + "IPV6_RECVERR": "int:25", + "IPV6_RECVHOPLIMIT": "int:51", + "IPV6_RECVHOPOPTS": "int:53", + "IPV6_RECVPKTINFO": "int:49", + "IPV6_RECVRTHDR": "int:56", + "IPV6_RECVTCLASS": "int:66", + "IPV6_ROUTER_ALERT": "int:22", + "IPV6_RTHDR": "int:57", + "IPV6_RTHDRDSTOPTS": "int:55", + "IPV6_RTHDR_LOOSE": "int:0", + "IPV6_RTHDR_STRICT": "int:1", + "IPV6_RTHDR_TYPE_0": "int:0", + "IPV6_RXDSTOPTS": "int:59", + "IPV6_RXHOPOPTS": "int:54", + "IPV6_TCLASS": "int:67", + "IPV6_UNICAST_HOPS": "int:16", + "IPV6_V6ONLY": "int:26", + "IPV6_XFRM_POLICY": "int:35", + "IP_ADD_MEMBERSHIP": "int:35", + "IP_ADD_SOURCE_MEMBERSHIP": "int:39", + "IP_BLOCK_SOURCE": "int:38", + "IP_DEFAULT_MULTICAST_LOOP": "int:1", + "IP_DEFAULT_MULTICAST_TTL": "int:1", + "IP_DF": "int:16384", + "IP_DROP_MEMBERSHIP": "int:36", + "IP_DROP_SOURCE_MEMBERSHIP": "int:40", + "IP_FREEBIND": "int:15", + "IP_HDRINCL": "int:3", + "IP_IPSEC_POLICY": "int:16", + "IP_MAXPACKET": "int:65535", + "IP_MAX_MEMBERSHIPS": "int:20", + "IP_MF": "int:8192", + "IP_MINTTL": "int:21", + "IP_MSFILTER": "int:41", + "IP_MSS": "int:576", + "IP_MTU": "int:14", + "IP_MTU_DISCOVER": "int:10", + "IP_MULTICAST_IF": "int:32", + "IP_MULTICAST_LOOP": "int:34", + "IP_MULTICAST_TTL": "int:33", + "IP_OFFMASK": "int:8191", + "IP_OPTIONS": "int:4", + "IP_ORIGDSTADDR": "int:20", + "IP_PASSSEC": "int:18", + "IP_PKTINFO": "int:8", + "IP_PKTOPTIONS": "int:9", + "IP_PMTUDISC": "int:10", + "IP_PMTUDISC_DO": "int:2", + "IP_PMTUDISC_DONT": "int:0", + "IP_PMTUDISC_PROBE": "int:3", + "IP_PMTUDISC_WANT": "int:1", + "IP_RECVERR": "int:11", + "IP_RECVOPTS": "int:6", + "IP_RECVORIGDSTADDR": "int:20", + "IP_RECVRETOPTS": "int:7", + "IP_RECVTOS": "int:13", + "IP_RECVTTL": "int:12", + "IP_RETOPTS": "int:7", + "IP_RF": "int:32768", + "IP_ROUTER_ALERT": "int:5", + "IP_TOS": "int:1", + "IP_TRANSPARENT": "int:19", + "IP_TTL": "int:2", + "IP_UNBLOCK_SOURCE": "int:37", + "IP_XFRM_POLICY": "int:17", + "ISIG": "int:1", + "ISTRIP": "int:32", + "IUCLC": "int:512", + "IUTF8": "int:16384", + "IXANY": "int:2048", + "IXOFF": "int:4096", + "IXON": "int:1024", + "ImplementsGetwd": "bool:true", + "LINUX_REBOOT_CMD_CAD_OFF": "int:0", + "LINUX_REBOOT_CMD_CAD_ON": "int:2309737967", + "LINUX_REBOOT_CMD_HALT": "int:3454992675", + "LINUX_REBOOT_CMD_KEXEC": "int:1163412803", + "LINUX_REBOOT_CMD_POWER_OFF": "int:1126301404", + "LINUX_REBOOT_CMD_RESTART": "int:19088743", + "LINUX_REBOOT_CMD_RESTART2": "int:2712847316", + "LINUX_REBOOT_CMD_SW_SUSPEND": "int:3489725666", + "LINUX_REBOOT_MAGIC1": "int:4276215469", + "LINUX_REBOOT_MAGIC2": "int:672274793", + "LOCK_EX": "int:2", + "LOCK_NB": "int:4", + "LOCK_SH": "int:1", + "LOCK_UN": "int:8", + "MADV_DOFORK": "int:11", + "MADV_DONTFORK": "int:10", + "MADV_DONTNEED": "int:4", + "MADV_HUGEPAGE": "int:14", + "MADV_HWPOISON": "int:100", + "MADV_MERGEABLE": "int:12", + "MADV_NOHUGEPAGE": "int:15", + "MADV_NORMAL": "int:0", + "MADV_RANDOM": "int:1", + "MADV_REMOVE": "int:9", + "MADV_SEQUENTIAL": "int:2", + "MADV_UNMERGEABLE": "int:13", + "MADV_WILLNEED": "int:3", + "MAP_32BIT": "int:64", + "MAP_ANON": "int:32", + "MAP_ANONYMOUS": "int:32", + "MAP_DENYWRITE": "int:2048", + "MAP_EXECUTABLE": "int:4096", + "MAP_FILE": "int:0", + "MAP_FIXED": "int:16", + "MAP_GROWSDOWN": "int:256", + "MAP_HUGETLB": "int:262144", + "MAP_LOCKED": "int:8192", + "MAP_NONBLOCK": "int:65536", + "MAP_NORESERVE": "int:16384", + "MAP_POPULATE": "int:32768", + "MAP_PRIVATE": "int:2", + "MAP_SHARED": "int:1", + "MAP_STACK": "int:131072", + "MAP_TYPE": "int:15", + "MCL_CURRENT": "int:1", + "MCL_FUTURE": "int:2", + "MNT_DETACH": "int:2", + "MNT_EXPIRE": "int:4", + "MNT_FORCE": "int:1", + "MSG_CMSG_CLOEXEC": "int:1073741824", + "MSG_CONFIRM": "int:2048", + "MSG_CTRUNC": "int:8", + "MSG_DONTROUTE": "int:4", + "MSG_DONTWAIT": "int:64", + "MSG_EOR": "int:128", + "MSG_ERRQUEUE": "int:8192", + "MSG_FASTOPEN": "int:536870912", + "MSG_FIN": "int:512", + "MSG_MORE": "int:32768", + "MSG_NOSIGNAL": "int:16384", + "MSG_OOB": "int:1", + "MSG_PEEK": "int:2", + "MSG_PROXY": "int:16", + "MSG_RST": "int:4096", + "MSG_SYN": "int:1024", + "MSG_TRUNC": "int:32", + "MSG_TRYHARD": "int:4", + "MSG_WAITALL": "int:256", + "MSG_WAITFORONE": "int:65536", + "MS_ACTIVE": "int:1073741824", + "MS_ASYNC": "int:1", + "MS_BIND": "int:4096", + "MS_DIRSYNC": "int:128", + "MS_INVALIDATE": "int:2", + "MS_I_VERSION": "int:8388608", + "MS_KERNMOUNT": "int:4194304", + "MS_MANDLOCK": "int:64", + "MS_MGC_MSK": "int:4294901760", + "MS_MGC_VAL": "int:3236757504", + "MS_MOVE": "int:8192", + "MS_NOATIME": "int:1024", + "MS_NODEV": "int:4", + "MS_NODIRATIME": "int:2048", + "MS_NOEXEC": "int:8", + "MS_NOSUID": "int:2", + "MS_NOUSER": "int:-2147483648", + "MS_POSIXACL": "int:65536", + "MS_PRIVATE": "int:262144", + "MS_RDONLY": "int:1", + "MS_REC": "int:16384", + "MS_RELATIME": "int:2097152", + "MS_REMOUNT": "int:32", + "MS_RMT_MASK": "int:8388689", + "MS_SHARED": "int:1048576", + "MS_SILENT": "int:32768", + "MS_SLAVE": "int:524288", + "MS_STRICTATIME": "int:16777216", + "MS_SYNC": "int:4", + "MS_SYNCHRONOUS": "int:16", + "MS_UNBINDABLE": "int:131072", + "NAME_MAX": "int:255", + "NETLINK_ADD_MEMBERSHIP": "int:1", + "NETLINK_AUDIT": "int:9", + "NETLINK_BROADCAST_ERROR": "int:4", + "NETLINK_CONNECTOR": "int:11", + "NETLINK_DNRTMSG": "int:14", + "NETLINK_DROP_MEMBERSHIP": "int:2", + "NETLINK_ECRYPTFS": "int:19", + "NETLINK_FIB_LOOKUP": "int:10", + "NETLINK_FIREWALL": "int:3", + "NETLINK_GENERIC": "int:16", + "NETLINK_INET_DIAG": "int:4", + "NETLINK_IP6_FW": "int:13", + "NETLINK_ISCSI": "int:8", + "NETLINK_KOBJECT_UEVENT": "int:15", + "NETLINK_NETFILTER": "int:12", + "NETLINK_NFLOG": "int:5", + "NETLINK_NO_ENOBUFS": "int:5", + "NETLINK_PKTINFO": "int:3", + "NETLINK_ROUTE": "int:0", + "NETLINK_SCSITRANSPORT": "int:18", + "NETLINK_SELINUX": "int:7", + "NETLINK_UNUSED": "int:1", + "NETLINK_USERSOCK": "int:2", + "NETLINK_XFRM": "int:6", + "NLA_ALIGNTO": "int:4", + "NLA_F_NESTED": "int:32768", + "NLA_F_NET_BYTEORDER": "int:16384", + "NLA_HDRLEN": "int:4", + "NLMSG_ALIGNTO": "int:4", + "NLMSG_DONE": "int:3", + "NLMSG_ERROR": "int:2", + "NLMSG_HDRLEN": "int:16", + "NLMSG_MIN_TYPE": "int:16", + "NLMSG_NOOP": "int:1", + "NLMSG_OVERRUN": "int:4", + "NLM_F_ACK": "int:4", + "NLM_F_APPEND": "int:2048", + "NLM_F_ATOMIC": "int:1024", + "NLM_F_CREATE": "int:1024", + "NLM_F_DUMP": "int:768", + "NLM_F_ECHO": "int:8", + "NLM_F_EXCL": "int:512", + "NLM_F_MATCH": "int:512", + "NLM_F_MULTI": "int:2", + "NLM_F_REPLACE": "int:256", + "NLM_F_REQUEST": "int:1", + "NLM_F_ROOT": "int:256", + "NOFLSH": "int:128", + "OCRNL": "int:8", + "OFDEL": "int:128", + "OFILL": "int:64", + "OLCUC": "int:2", + "ONLCR": "int:4", + "ONLRET": "int:32", + "ONOCR": "int:16", + "OPOST": "int:1", + "O_ACCMODE": "int:3", + "O_APPEND": "int:1024", + "O_ASYNC": "int:8192", + "O_CLOEXEC": "int:524288", + "O_CREAT": "int:64", + "O_DIRECT": "int:16384", + "O_DIRECTORY": "int:65536", + "O_DSYNC": "int:4096", + "O_EXCL": "int:128", + "O_FSYNC": "int:1052672", + "O_LARGEFILE": "int:0", + "O_NDELAY": "int:2048", + "O_NOATIME": "int:262144", + "O_NOCTTY": "int:256", + "O_NOFOLLOW": "int:131072", + "O_NONBLOCK": "int:2048", + "O_RDONLY": "int:0", + "O_RDWR": "int:2", + "O_RSYNC": "int:1052672", + "O_SYNC": "int:1052672", + "O_TRUNC": "int:512", + "O_WRONLY": "int:1", + "PACKET_ADD_MEMBERSHIP": "int:1", + "PACKET_BROADCAST": "int:1", + "PACKET_DROP_MEMBERSHIP": "int:2", + "PACKET_FASTROUTE": "int:6", + "PACKET_HOST": "int:0", + "PACKET_LOOPBACK": "int:5", + "PACKET_MR_ALLMULTI": "int:2", + "PACKET_MR_MULTICAST": "int:0", + "PACKET_MR_PROMISC": "int:1", + "PACKET_MULTICAST": "int:2", + "PACKET_OTHERHOST": "int:3", + "PACKET_OUTGOING": "int:4", + "PACKET_RECV_OUTPUT": "int:3", + "PACKET_RX_RING": "int:5", + "PACKET_STATISTICS": "int:6", + "PARENB": "int:256", + "PARMRK": "int:8", + "PARODD": "int:512", + "PENDIN": "int:16384", + "PRIO_PGRP": "int:1", + "PRIO_PROCESS": "int:0", + "PRIO_USER": "int:2", + "PROT_EXEC": "int:4", + "PROT_GROWSDOWN": "int:16777216", + "PROT_GROWSUP": "int:33554432", + "PROT_NONE": "int:0", + "PROT_READ": "int:1", + "PROT_WRITE": "int:2", + "PR_CAPBSET_DROP": "int:24", + "PR_CAPBSET_READ": "int:23", + "PR_ENDIAN_BIG": "int:0", + "PR_ENDIAN_LITTLE": "int:1", + "PR_ENDIAN_PPC_LITTLE": "int:2", + "PR_FPEMU_NOPRINT": "int:1", + "PR_FPEMU_SIGFPE": "int:2", + "PR_FP_EXC_ASYNC": "int:2", + "PR_FP_EXC_DISABLED": "int:0", + "PR_FP_EXC_DIV": "int:65536", + "PR_FP_EXC_INV": "int:1048576", + "PR_FP_EXC_NONRECOV": "int:1", + "PR_FP_EXC_OVF": "int:131072", + "PR_FP_EXC_PRECISE": "int:3", + "PR_FP_EXC_RES": "int:524288", + "PR_FP_EXC_SW_ENABLE": "int:128", + "PR_FP_EXC_UND": "int:262144", + "PR_GET_DUMPABLE": "int:3", + "PR_GET_ENDIAN": "int:19", + "PR_GET_FPEMU": "int:9", + "PR_GET_FPEXC": "int:11", + "PR_GET_KEEPCAPS": "int:7", + "PR_GET_NAME": "int:16", + "PR_GET_PDEATHSIG": "int:2", + "PR_GET_SECCOMP": "int:21", + "PR_GET_SECUREBITS": "int:27", + "PR_GET_TIMERSLACK": "int:30", + "PR_GET_TIMING": "int:13", + "PR_GET_TSC": "int:25", + "PR_GET_UNALIGN": "int:5", + "PR_MCE_KILL": "int:33", + "PR_MCE_KILL_CLEAR": "int:0", + "PR_MCE_KILL_DEFAULT": "int:2", + "PR_MCE_KILL_EARLY": "int:1", + "PR_MCE_KILL_GET": "int:34", + "PR_MCE_KILL_LATE": "int:0", + "PR_MCE_KILL_SET": "int:1", + "PR_SET_DUMPABLE": "int:4", + "PR_SET_ENDIAN": "int:20", + "PR_SET_FPEMU": "int:10", + "PR_SET_FPEXC": "int:12", + "PR_SET_KEEPCAPS": "int:8", + "PR_SET_NAME": "int:15", + "PR_SET_PDEATHSIG": "int:1", + "PR_SET_PTRACER": "int:1499557217", + "PR_SET_SECCOMP": "int:22", + "PR_SET_SECUREBITS": "int:28", + "PR_SET_TIMERSLACK": "int:29", + "PR_SET_TIMING": "int:14", + "PR_SET_TSC": "int:26", + "PR_SET_UNALIGN": "int:6", + "PR_TASK_PERF_EVENTS_DISABLE": "int:31", + "PR_TASK_PERF_EVENTS_ENABLE": "int:32", + "PR_TIMING_STATISTICAL": "int:0", + "PR_TIMING_TIMESTAMP": "int:1", + "PR_TSC_ENABLE": "int:1", + "PR_TSC_SIGSEGV": "int:2", + "PR_UNALIGN_NOPRINT": "int:1", + "PR_UNALIGN_SIGBUS": "int:2", + "PTRACE_ARCH_PRCTL": "int:30", + "PTRACE_ATTACH": "int:16", + "PTRACE_CONT": "int:7", + "PTRACE_DETACH": "int:17", + "PTRACE_EVENT_CLONE": "int:3", + "PTRACE_EVENT_EXEC": "int:4", + "PTRACE_EVENT_EXIT": "int:6", + "PTRACE_EVENT_FORK": "int:1", + "PTRACE_EVENT_VFORK": "int:2", + "PTRACE_EVENT_VFORK_DONE": "int:5", + "PTRACE_GETEVENTMSG": "int:16897", + "PTRACE_GETFPREGS": "int:14", + "PTRACE_GETFPXREGS": "int:18", + "PTRACE_GETREGS": "int:12", + "PTRACE_GETREGSET": "int:16900", + "PTRACE_GETSIGINFO": "int:16898", + "PTRACE_GET_THREAD_AREA": "int:25", + "PTRACE_KILL": "int:8", + "PTRACE_OLDSETOPTIONS": "int:21", + "PTRACE_O_MASK": "int:127", + "PTRACE_O_TRACECLONE": "int:8", + "PTRACE_O_TRACEEXEC": "int:16", + "PTRACE_O_TRACEEXIT": "int:64", + "PTRACE_O_TRACEFORK": "int:2", + "PTRACE_O_TRACESYSGOOD": "int:1", + "PTRACE_O_TRACEVFORK": "int:4", + "PTRACE_O_TRACEVFORKDONE": "int:32", + "PTRACE_PEEKDATA": "int:2", + "PTRACE_PEEKTEXT": "int:1", + "PTRACE_PEEKUSR": "int:3", + "PTRACE_POKEDATA": "int:5", + "PTRACE_POKETEXT": "int:4", + "PTRACE_POKEUSR": "int:6", + "PTRACE_SETFPREGS": "int:15", + "PTRACE_SETFPXREGS": "int:19", + "PTRACE_SETOPTIONS": "int:16896", + "PTRACE_SETREGS": "int:13", + "PTRACE_SETREGSET": "int:16901", + "PTRACE_SETSIGINFO": "int:16899", + "PTRACE_SET_THREAD_AREA": "int:26", + "PTRACE_SINGLEBLOCK": "int:33", + "PTRACE_SINGLESTEP": "int:9", + "PTRACE_SYSCALL": "int:24", + "PTRACE_SYSEMU": "int:31", + "PTRACE_SYSEMU_SINGLESTEP": "int:32", + "PTRACE_TRACEME": "int:0", + "PathMax": "int:4096", + "RLIMIT_AS": "int:9", + "RLIMIT_CORE": "int:4", + "RLIMIT_CPU": "int:0", + "RLIMIT_DATA": "int:2", + "RLIMIT_FSIZE": "int:1", + "RLIMIT_NOFILE": "int:7", + "RLIMIT_STACK": "int:3", + "RLIM_INFINITY": "int:-1", + "RTAX_ADVMSS": "int:8", + "RTAX_CWND": "int:7", + "RTAX_FEATURES": "int:12", + "RTAX_FEATURE_ALLFRAG": "int:8", + "RTAX_FEATURE_ECN": "int:1", + "RTAX_FEATURE_SACK": "int:2", + "RTAX_FEATURE_TIMESTAMP": "int:4", + "RTAX_HOPLIMIT": "int:10", + "RTAX_INITCWND": "int:11", + "RTAX_INITRWND": "int:14", + "RTAX_LOCK": "int:1", + "RTAX_MAX": "int:14", + "RTAX_MTU": "int:2", + "RTAX_REORDERING": "int:9", + "RTAX_RTO_MIN": "int:13", + "RTAX_RTT": "int:4", + "RTAX_RTTVAR": "int:5", + "RTAX_SSTHRESH": "int:6", + "RTAX_UNSPEC": "int:0", + "RTAX_WINDOW": "int:3", + "RTA_ALIGNTO": "int:4", + "RTA_CACHEINFO": "int:12", + "RTA_DST": "int:1", + "RTA_FLOW": "int:11", + "RTA_GATEWAY": "int:5", + "RTA_IIF": "int:3", + "RTA_MAX": "int:16", + "RTA_METRICS": "int:8", + "RTA_MULTIPATH": "int:9", + "RTA_OIF": "int:4", + "RTA_PREFSRC": "int:7", + "RTA_PRIORITY": "int:6", + "RTA_SRC": "int:2", + "RTA_TABLE": "int:15", + "RTA_UNSPEC": "int:0", + "RTCF_DIRECTSRC": "int:67108864", + "RTCF_DOREDIRECT": "int:16777216", + "RTCF_LOG": "int:33554432", + "RTCF_MASQ": "int:4194304", + "RTCF_NAT": "int:8388608", + "RTCF_VALVE": "int:2097152", + "RTF_ADDRCLASSMASK": "int:4160749568", + "RTF_ADDRCONF": "int:262144", + "RTF_ALLONLINK": "int:131072", + "RTF_BROADCAST": "int:268435456", + "RTF_CACHE": "int:16777216", + "RTF_DEFAULT": "int:65536", + "RTF_DYNAMIC": "int:16", + "RTF_FLOW": "int:33554432", + "RTF_GATEWAY": "int:2", + "RTF_HOST": "int:4", + "RTF_INTERFACE": "int:1073741824", + "RTF_IRTT": "int:256", + "RTF_LINKRT": "int:1048576", + "RTF_LOCAL": "int:2147483648", + "RTF_MODIFIED": "int:32", + "RTF_MSS": "int:64", + "RTF_MTU": "int:64", + "RTF_MULTICAST": "int:536870912", + "RTF_NAT": "int:134217728", + "RTF_NOFORWARD": "int:4096", + "RTF_NONEXTHOP": "int:2097152", + "RTF_NOPMTUDISC": "int:16384", + "RTF_POLICY": "int:67108864", + "RTF_REINSTATE": "int:8", + "RTF_REJECT": "int:512", + "RTF_STATIC": "int:1024", + "RTF_THROW": "int:8192", + "RTF_UP": "int:1", + "RTF_WINDOW": "int:128", + "RTF_XRESOLVE": "int:2048", + "RTM_BASE": "int:16", + "RTM_DELACTION": "int:49", + "RTM_DELADDR": "int:21", + "RTM_DELADDRLABEL": "int:73", + "RTM_DELLINK": "int:17", + "RTM_DELNEIGH": "int:29", + "RTM_DELQDISC": "int:37", + "RTM_DELROUTE": "int:25", + "RTM_DELRULE": "int:33", + "RTM_DELTCLASS": "int:41", + "RTM_DELTFILTER": "int:45", + "RTM_F_CLONED": "int:512", + "RTM_F_EQUALIZE": "int:1024", + "RTM_F_NOTIFY": "int:256", + "RTM_F_PREFIX": "int:2048", + "RTM_GETACTION": "int:50", + "RTM_GETADDR": "int:22", + "RTM_GETADDRLABEL": "int:74", + "RTM_GETANYCAST": "int:62", + "RTM_GETDCB": "int:78", + "RTM_GETLINK": "int:18", + "RTM_GETMULTICAST": "int:58", + "RTM_GETNEIGH": "int:30", + "RTM_GETNEIGHTBL": "int:66", + "RTM_GETQDISC": "int:38", + "RTM_GETROUTE": "int:26", + "RTM_GETRULE": "int:34", + "RTM_GETTCLASS": "int:42", + "RTM_GETTFILTER": "int:46", + "RTM_MAX": "int:79", + "RTM_NEWACTION": "int:48", + "RTM_NEWADDR": "int:20", + "RTM_NEWADDRLABEL": "int:72", + "RTM_NEWLINK": "int:16", + "RTM_NEWNDUSEROPT": "int:68", + "RTM_NEWNEIGH": "int:28", + "RTM_NEWNEIGHTBL": "int:64", + "RTM_NEWPREFIX": "int:52", + "RTM_NEWQDISC": "int:36", + "RTM_NEWROUTE": "int:24", + "RTM_NEWRULE": "int:32", + "RTM_NEWTCLASS": "int:40", + "RTM_NEWTFILTER": "int:44", + "RTM_NR_FAMILIES": "int:16", + "RTM_NR_MSGTYPES": "int:64", + "RTM_SETDCB": "int:79", + "RTM_SETLINK": "int:19", + "RTM_SETNEIGHTBL": "int:67", + "RTNH_ALIGNTO": "int:4", + "RTNH_F_DEAD": "int:1", + "RTNH_F_ONLINK": "int:4", + "RTNH_F_PERVASIVE": "int:2", + "RTNLGRP_IPV4_IFADDR": "int:5", + "RTNLGRP_IPV4_MROUTE": "int:6", + "RTNLGRP_IPV4_ROUTE": "int:7", + "RTNLGRP_IPV4_RULE": "int:8", + "RTNLGRP_IPV6_IFADDR": "int:9", + "RTNLGRP_IPV6_IFINFO": "int:12", + "RTNLGRP_IPV6_MROUTE": "int:10", + "RTNLGRP_IPV6_PREFIX": "int:18", + "RTNLGRP_IPV6_ROUTE": "int:11", + "RTNLGRP_IPV6_RULE": "int:19", + "RTNLGRP_LINK": "int:1", + "RTNLGRP_ND_USEROPT": "int:20", + "RTNLGRP_NEIGH": "int:3", + "RTNLGRP_NONE": "int:0", + "RTNLGRP_NOTIFY": "int:2", + "RTNLGRP_TC": "int:4", + "RTN_ANYCAST": "int:4", + "RTN_BLACKHOLE": "int:6", + "RTN_BROADCAST": "int:3", + "RTN_LOCAL": "int:2", + "RTN_MAX": "int:11", + "RTN_MULTICAST": "int:5", + "RTN_NAT": "int:10", + "RTN_PROHIBIT": "int:8", + "RTN_THROW": "int:9", + "RTN_UNICAST": "int:1", + "RTN_UNREACHABLE": "int:7", + "RTN_UNSPEC": "int:0", + "RTN_XRESOLVE": "int:11", + "RTPROT_BIRD": "int:12", + "RTPROT_BOOT": "int:3", + "RTPROT_DHCP": "int:16", + "RTPROT_DNROUTED": "int:13", + "RTPROT_GATED": "int:8", + "RTPROT_KERNEL": "int:2", + "RTPROT_MRT": "int:10", + "RTPROT_NTK": "int:15", + "RTPROT_RA": "int:9", + "RTPROT_REDIRECT": "int:1", + "RTPROT_STATIC": "int:4", + "RTPROT_UNSPEC": "int:0", + "RTPROT_XORP": "int:14", + "RTPROT_ZEBRA": "int:11", + "RT_CLASS_DEFAULT": "int:253", + "RT_CLASS_LOCAL": "int:255", + "RT_CLASS_MAIN": "int:254", + "RT_CLASS_MAX": "int:255", + "RT_CLASS_UNSPEC": "int:0", + "RT_SCOPE_HOST": "int:254", + "RT_SCOPE_LINK": "int:253", + "RT_SCOPE_NOWHERE": "int:255", + "RT_SCOPE_SITE": "int:200", + "RT_SCOPE_UNIVERSE": "int:0", + "RT_TABLE_COMPAT": "int:252", + "RT_TABLE_DEFAULT": "int:253", + "RT_TABLE_LOCAL": "int:255", + "RT_TABLE_MAIN": "int:254", + "RT_TABLE_MAX": "int:4294967295", + "RT_TABLE_UNSPEC": "int:0", + "RUSAGE_CHILDREN": "int:-1", + "RUSAGE_SELF": "int:0", + "RUSAGE_THREAD": "int:1", + "SCM_CREDENTIALS": "int:2", + "SCM_RIGHTS": "int:1", + "SCM_TIMESTAMP": "int:29", + "SCM_TIMESTAMPING": "int:37", + "SCM_TIMESTAMPNS": "int:35", + "SHUT_RD": "int:0", + "SHUT_RDWR": "int:2", + "SHUT_WR": "int:1", + "SIOCADDDLCI": "int:35200", + "SIOCADDMULTI": "int:35121", + "SIOCADDRT": "int:35083", + "SIOCATMARK": "int:35077", + "SIOCDARP": "int:35155", + "SIOCDELDLCI": "int:35201", + "SIOCDELMULTI": "int:35122", + "SIOCDELRT": "int:35084", + "SIOCDEVPRIVATE": "int:35312", + "SIOCDIFADDR": "int:35126", + "SIOCDRARP": "int:35168", + "SIOCGARP": "int:35156", + "SIOCGIFADDR": "int:35093", + "SIOCGIFBR": "int:35136", + "SIOCGIFBRDADDR": "int:35097", + "SIOCGIFCONF": "int:35090", + "SIOCGIFCOUNT": "int:35128", + "SIOCGIFDSTADDR": "int:35095", + "SIOCGIFENCAP": "int:35109", + "SIOCGIFFLAGS": "int:35091", + "SIOCGIFHWADDR": "int:35111", + "SIOCGIFINDEX": "int:35123", + "SIOCGIFMAP": "int:35184", + "SIOCGIFMEM": "int:35103", + "SIOCGIFMETRIC": "int:35101", + "SIOCGIFMTU": "int:35105", + "SIOCGIFNAME": "int:35088", + "SIOCGIFNETMASK": "int:35099", + "SIOCGIFPFLAGS": "int:35125", + "SIOCGIFSLAVE": "int:35113", + "SIOCGIFTXQLEN": "int:35138", + "SIOCGPGRP": "int:35076", + "SIOCGRARP": "int:35169", + "SIOCGSTAMP": "int:35078", + "SIOCGSTAMPNS": "int:35079", + "SIOCPROTOPRIVATE": "int:35296", + "SIOCRTMSG": "int:35085", + "SIOCSARP": "int:35157", + "SIOCSIFADDR": "int:35094", + "SIOCSIFBR": "int:35137", + "SIOCSIFBRDADDR": "int:35098", + "SIOCSIFDSTADDR": "int:35096", + "SIOCSIFENCAP": "int:35110", + "SIOCSIFFLAGS": "int:35092", + "SIOCSIFHWADDR": "int:35108", + "SIOCSIFHWBROADCAST": "int:35127", + "SIOCSIFLINK": "int:35089", + "SIOCSIFMAP": "int:35185", + "SIOCSIFMEM": "int:35104", + "SIOCSIFMETRIC": "int:35102", + "SIOCSIFMTU": "int:35106", + "SIOCSIFNAME": "int:35107", + "SIOCSIFNETMASK": "int:35100", + "SIOCSIFPFLAGS": "int:35124", + "SIOCSIFSLAVE": "int:35120", + "SIOCSIFTXQLEN": "int:35139", + "SIOCSPGRP": "int:35074", + "SIOCSRARP": "int:35170", + "SOCK_CLOEXEC": "int:524288", + "SOCK_DCCP": "int:6", + "SOCK_DGRAM": "int:2", + "SOCK_NONBLOCK": "int:2048", + "SOCK_PACKET": "int:10", + "SOCK_RAW": "int:3", + "SOCK_RDM": "int:4", + "SOCK_SEQPACKET": "int:5", + "SOCK_STREAM": "int:1", + "SOL_AAL": "int:265", + "SOL_ATM": "int:264", + "SOL_DECNET": "int:261", + "SOL_ICMPV6": "int:58", + "SOL_IP": "int:0", + "SOL_IPV6": "int:41", + "SOL_IRDA": "int:266", + "SOL_PACKET": "int:263", + "SOL_RAW": "int:255", + "SOL_SOCKET": "int:1", + "SOL_TCP": "int:6", + "SOL_X25": "int:262", + "SOMAXCONN": "int:128", + "SO_ACCEPTCONN": "int:30", + "SO_ATTACH_FILTER": "int:26", + "SO_BINDTODEVICE": "int:25", + "SO_BROADCAST": "int:6", + "SO_BSDCOMPAT": "int:14", + "SO_DEBUG": "int:1", + "SO_DETACH_FILTER": "int:27", + "SO_DOMAIN": "int:39", + "SO_DONTROUTE": "int:5", + "SO_ERROR": "int:4", + "SO_KEEPALIVE": "int:9", + "SO_LINGER": "int:13", + "SO_MARK": "int:36", + "SO_NO_CHECK": "int:11", + "SO_OOBINLINE": "int:10", + "SO_PASSCRED": "int:16", + "SO_PASSSEC": "int:34", + "SO_PEERCRED": "int:17", + "SO_PEERNAME": "int:28", + "SO_PEERSEC": "int:31", + "SO_PRIORITY": "int:12", + "SO_PROTOCOL": "int:38", + "SO_RCVBUF": "int:8", + "SO_RCVBUFFORCE": "int:33", + "SO_RCVLOWAT": "int:18", + "SO_RCVTIMEO": "int:20", + "SO_REUSEADDR": "int:2", + "SO_RXQ_OVFL": "int:40", + "SO_SECURITY_AUTHENTICATION": "int:22", + "SO_SECURITY_ENCRYPTION_NETWORK": "int:24", + "SO_SECURITY_ENCRYPTION_TRANSPORT": "int:23", + "SO_SNDBUF": "int:7", + "SO_SNDBUFFORCE": "int:32", + "SO_SNDLOWAT": "int:19", + "SO_SNDTIMEO": "int:21", + "SO_TIMESTAMP": "int:29", + "SO_TIMESTAMPING": "int:37", + "SO_TIMESTAMPNS": "int:35", + "SO_TYPE": "int:3", + "SYS_ACCEPT": "int:43", + "SYS_ACCEPT4": "int:288", + "SYS_ACCESS": "int:21", + "SYS_ACCT": "int:163", + "SYS_ADD_KEY": "int:248", + "SYS_ADJTIMEX": "int:159", + "SYS_AFS_SYSCALL": "int:183", + "SYS_ALARM": "int:37", + "SYS_ARCH_PRCTL": "int:158", + "SYS_BIND": "int:49", + "SYS_BRK": "int:12", + "SYS_CAPGET": "int:125", + "SYS_CAPSET": "int:126", + "SYS_CHDIR": "int:80", + "SYS_CHMOD": "int:90", + "SYS_CHOWN": "int:92", + "SYS_CHROOT": "int:161", + "SYS_CLOCK_GETRES": "int:229", + "SYS_CLOCK_GETTIME": "int:228", + "SYS_CLOCK_NANOSLEEP": "int:230", + "SYS_CLOCK_SETTIME": "int:227", + "SYS_CLONE": "int:56", + "SYS_CLOSE": "int:3", + "SYS_CONNECT": "int:42", + "SYS_CREAT": "int:85", + "SYS_CREATE_MODULE": "int:174", + "SYS_DELETE_MODULE": "int:176", + "SYS_DUP": "int:32", + "SYS_DUP2": "int:33", + "SYS_DUP3": "int:292", + "SYS_EPOLL_CREATE": "int:213", + "SYS_EPOLL_CREATE1": "int:291", + "SYS_EPOLL_CTL": "int:233", + "SYS_EPOLL_CTL_OLD": "int:214", + "SYS_EPOLL_PWAIT": "int:281", + "SYS_EPOLL_WAIT": "int:232", + "SYS_EPOLL_WAIT_OLD": "int:215", + "SYS_EVENTFD": "int:284", + "SYS_EVENTFD2": "int:290", + "SYS_EXECVE": "int:59", + "SYS_EXIT": "int:60", + "SYS_EXIT_GROUP": "int:231", + "SYS_FACCESSAT": "int:269", + "SYS_FADVISE64": "int:221", + "SYS_FALLOCATE": "int:285", + "SYS_FANOTIFY_INIT": "int:300", + "SYS_FANOTIFY_MARK": "int:301", + "SYS_FCHDIR": "int:81", + "SYS_FCHMOD": "int:91", + "SYS_FCHMODAT": "int:268", + "SYS_FCHOWN": "int:93", + "SYS_FCHOWNAT": "int:260", + "SYS_FCNTL": "int:72", + "SYS_FDATASYNC": "int:75", + "SYS_FGETXATTR": "int:193", + "SYS_FLISTXATTR": "int:196", + "SYS_FLOCK": "int:73", + "SYS_FORK": "int:57", + "SYS_FREMOVEXATTR": "int:199", + "SYS_FSETXATTR": "int:190", + "SYS_FSTAT": "int:5", + "SYS_FSTATFS": "int:138", + "SYS_FSYNC": "int:74", + "SYS_FTRUNCATE": "int:77", + "SYS_FUTEX": "int:202", + "SYS_FUTIMESAT": "int:261", + "SYS_GETCWD": "int:79", + "SYS_GETDENTS": "int:78", + "SYS_GETDENTS64": "int:217", + "SYS_GETEGID": "int:108", + "SYS_GETEUID": "int:107", + "SYS_GETGID": "int:104", + "SYS_GETGROUPS": "int:115", + "SYS_GETITIMER": "int:36", + "SYS_GETPEERNAME": "int:52", + "SYS_GETPGID": "int:121", + "SYS_GETPGRP": "int:111", + "SYS_GETPID": "int:39", + "SYS_GETPMSG": "int:181", + "SYS_GETPPID": "int:110", + "SYS_GETPRIORITY": "int:140", + "SYS_GETRESGID": "int:120", + "SYS_GETRESUID": "int:118", + "SYS_GETRLIMIT": "int:97", + "SYS_GETRUSAGE": "int:98", + "SYS_GETSID": "int:124", + "SYS_GETSOCKNAME": "int:51", + "SYS_GETSOCKOPT": "int:55", + "SYS_GETTID": "int:186", + "SYS_GETTIMEOFDAY": "int:96", + "SYS_GETUID": "int:102", + "SYS_GETXATTR": "int:191", + "SYS_GET_KERNEL_SYMS": "int:177", + "SYS_GET_MEMPOLICY": "int:239", + "SYS_GET_ROBUST_LIST": "int:274", + "SYS_GET_THREAD_AREA": "int:211", + "SYS_INIT_MODULE": "int:175", + "SYS_INOTIFY_ADD_WATCH": "int:254", + "SYS_INOTIFY_INIT": "int:253", + "SYS_INOTIFY_INIT1": "int:294", + "SYS_INOTIFY_RM_WATCH": "int:255", + "SYS_IOCTL": "int:16", + "SYS_IOPERM": "int:173", + "SYS_IOPL": "int:172", + "SYS_IOPRIO_GET": "int:252", + "SYS_IOPRIO_SET": "int:251", + "SYS_IO_CANCEL": "int:210", + "SYS_IO_DESTROY": "int:207", + "SYS_IO_GETEVENTS": "int:208", + "SYS_IO_SETUP": "int:206", + "SYS_IO_SUBMIT": "int:209", + "SYS_KEXEC_LOAD": "int:246", + "SYS_KEYCTL": "int:250", + "SYS_KILL": "int:62", + "SYS_LCHOWN": "int:94", + "SYS_LGETXATTR": "int:192", + "SYS_LINK": "int:86", + "SYS_LINKAT": "int:265", + "SYS_LISTEN": "int:50", + "SYS_LISTXATTR": "int:194", + "SYS_LLISTXATTR": "int:195", + "SYS_LOOKUP_DCOOKIE": "int:212", + "SYS_LREMOVEXATTR": "int:198", + "SYS_LSEEK": "int:8", + "SYS_LSETXATTR": "int:189", + "SYS_LSTAT": "int:6", + "SYS_MADVISE": "int:28", + "SYS_MBIND": "int:237", + "SYS_MIGRATE_PAGES": "int:256", + "SYS_MINCORE": "int:27", + "SYS_MKDIR": "int:83", + "SYS_MKDIRAT": "int:258", + "SYS_MKNOD": "int:133", + "SYS_MKNODAT": "int:259", + "SYS_MLOCK": "int:149", + "SYS_MLOCKALL": "int:151", + "SYS_MMAP": "int:9", + "SYS_MODIFY_LDT": "int:154", + "SYS_MOUNT": "int:165", + "SYS_MOVE_PAGES": "int:279", + "SYS_MPROTECT": "int:10", + "SYS_MQ_GETSETATTR": "int:245", + "SYS_MQ_NOTIFY": "int:244", + "SYS_MQ_OPEN": "int:240", + "SYS_MQ_TIMEDRECEIVE": "int:243", + "SYS_MQ_TIMEDSEND": "int:242", + "SYS_MQ_UNLINK": "int:241", + "SYS_MREMAP": "int:25", + "SYS_MSGCTL": "int:71", + "SYS_MSGGET": "int:68", + "SYS_MSGRCV": "int:70", + "SYS_MSGSND": "int:69", + "SYS_MSYNC": "int:26", + "SYS_MUNLOCK": "int:150", + "SYS_MUNLOCKALL": "int:152", + "SYS_MUNMAP": "int:11", + "SYS_NANOSLEEP": "int:35", + "SYS_NEWFSTATAT": "int:262", + "SYS_NFSSERVCTL": "int:180", + "SYS_OPEN": "int:2", + "SYS_OPENAT": "int:257", + "SYS_PAUSE": "int:34", + "SYS_PERF_EVENT_OPEN": "int:298", + "SYS_PERSONALITY": "int:135", + "SYS_PIPE": "int:22", + "SYS_PIPE2": "int:293", + "SYS_PIVOT_ROOT": "int:155", + "SYS_POLL": "int:7", + "SYS_PPOLL": "int:271", + "SYS_PRCTL": "int:157", + "SYS_PREAD64": "int:17", + "SYS_PREADV": "int:295", + "SYS_PRLIMIT64": "int:302", + "SYS_PSELECT6": "int:270", + "SYS_PTRACE": "int:101", + "SYS_PUTPMSG": "int:182", + "SYS_PWRITE64": "int:18", + "SYS_PWRITEV": "int:296", + "SYS_QUERY_MODULE": "int:178", + "SYS_QUOTACTL": "int:179", + "SYS_READ": "int:0", + "SYS_READAHEAD": "int:187", + "SYS_READLINK": "int:89", + "SYS_READLINKAT": "int:267", + "SYS_READV": "int:19", + "SYS_REBOOT": "int:169", + "SYS_RECVFROM": "int:45", + "SYS_RECVMMSG": "int:299", + "SYS_RECVMSG": "int:47", + "SYS_REMAP_FILE_PAGES": "int:216", + "SYS_REMOVEXATTR": "int:197", + "SYS_RENAME": "int:82", + "SYS_RENAMEAT": "int:264", + "SYS_REQUEST_KEY": "int:249", + "SYS_RESTART_SYSCALL": "int:219", + "SYS_RMDIR": "int:84", + "SYS_RT_SIGACTION": "int:13", + "SYS_RT_SIGPENDING": "int:127", + "SYS_RT_SIGPROCMASK": "int:14", + "SYS_RT_SIGQUEUEINFO": "int:129", + "SYS_RT_SIGRETURN": "int:15", + "SYS_RT_SIGSUSPEND": "int:130", + "SYS_RT_SIGTIMEDWAIT": "int:128", + "SYS_RT_TGSIGQUEUEINFO": "int:297", + "SYS_SCHED_GETAFFINITY": "int:204", + "SYS_SCHED_GETPARAM": "int:143", + "SYS_SCHED_GETSCHEDULER": "int:145", + "SYS_SCHED_GET_PRIORITY_MAX": "int:146", + "SYS_SCHED_GET_PRIORITY_MIN": "int:147", + "SYS_SCHED_RR_GET_INTERVAL": "int:148", + "SYS_SCHED_SETAFFINITY": "int:203", + "SYS_SCHED_SETPARAM": "int:142", + "SYS_SCHED_SETSCHEDULER": "int:144", + "SYS_SCHED_YIELD": "int:24", + "SYS_SECURITY": "int:185", + "SYS_SELECT": "int:23", + "SYS_SEMCTL": "int:66", + "SYS_SEMGET": "int:64", + "SYS_SEMOP": "int:65", + "SYS_SEMTIMEDOP": "int:220", + "SYS_SENDFILE": "int:40", + "SYS_SENDMSG": "int:46", + "SYS_SENDTO": "int:44", + "SYS_SETDOMAINNAME": "int:171", + "SYS_SETFSGID": "int:123", + "SYS_SETFSUID": "int:122", + "SYS_SETGID": "int:106", + "SYS_SETGROUPS": "int:116", + "SYS_SETHOSTNAME": "int:170", + "SYS_SETITIMER": "int:38", + "SYS_SETPGID": "int:109", + "SYS_SETPRIORITY": "int:141", + "SYS_SETREGID": "int:114", + "SYS_SETRESGID": "int:119", + "SYS_SETRESUID": "int:117", + "SYS_SETREUID": "int:113", + "SYS_SETRLIMIT": "int:160", + "SYS_SETSID": "int:112", + "SYS_SETSOCKOPT": "int:54", + "SYS_SETTIMEOFDAY": "int:164", + "SYS_SETUID": "int:105", + "SYS_SETXATTR": "int:188", + "SYS_SET_MEMPOLICY": "int:238", + "SYS_SET_ROBUST_LIST": "int:273", + "SYS_SET_THREAD_AREA": "int:205", + "SYS_SET_TID_ADDRESS": "int:218", + "SYS_SHMAT": "int:30", + "SYS_SHMCTL": "int:31", + "SYS_SHMDT": "int:67", + "SYS_SHMGET": "int:29", + "SYS_SHUTDOWN": "int:48", + "SYS_SIGALTSTACK": "int:131", + "SYS_SIGNALFD": "int:282", + "SYS_SIGNALFD4": "int:289", + "SYS_SOCKET": "int:41", + "SYS_SOCKETPAIR": "int:53", + "SYS_SPLICE": "int:275", + "SYS_STAT": "int:4", + "SYS_STATFS": "int:137", + "SYS_SWAPOFF": "int:168", + "SYS_SWAPON": "int:167", + "SYS_SYMLINK": "int:88", + "SYS_SYMLINKAT": "int:266", + "SYS_SYNC": "int:162", + "SYS_SYNC_FILE_RANGE": "int:277", + "SYS_SYSFS": "int:139", + "SYS_SYSINFO": "int:99", + "SYS_SYSLOG": "int:103", + "SYS_TEE": "int:276", + "SYS_TGKILL": "int:234", + "SYS_TIME": "int:201", + "SYS_TIMERFD_CREATE": "int:283", + "SYS_TIMERFD_GETTIME": "int:287", + "SYS_TIMERFD_SETTIME": "int:286", + "SYS_TIMER_CREATE": "int:222", + "SYS_TIMER_DELETE": "int:226", + "SYS_TIMER_GETOVERRUN": "int:225", + "SYS_TIMER_GETTIME": "int:224", + "SYS_TIMER_SETTIME": "int:223", + "SYS_TIMES": "int:100", + "SYS_TKILL": "int:200", + "SYS_TRUNCATE": "int:76", + "SYS_TUXCALL": "int:184", + "SYS_UMASK": "int:95", + "SYS_UMOUNT2": "int:166", + "SYS_UNAME": "int:63", + "SYS_UNLINK": "int:87", + "SYS_UNLINKAT": "int:263", + "SYS_UNSHARE": "int:272", + "SYS_USELIB": "int:134", + "SYS_USTAT": "int:136", + "SYS_UTIME": "int:132", + "SYS_UTIMENSAT": "int:280", + "SYS_UTIMES": "int:235", + "SYS_VFORK": "int:58", + "SYS_VHANGUP": "int:153", + "SYS_VMSPLICE": "int:278", + "SYS_VSERVER": "int:236", + "SYS_WAIT4": "int:61", + "SYS_WAITID": "int:247", + "SYS_WRITE": "int:1", + "SYS_WRITEV": "int:20", + "SYS__SYSCTL": "int:156", + "S_BLKSIZE": "int:512", + "S_IEXEC": "int:64", + "S_IFBLK": "int:24576", + "S_IFCHR": "int:8192", + "S_IFDIR": "int:16384", + "S_IFIFO": "int:4096", + "S_IFLNK": "int:40960", + "S_IFMT": "int:61440", + "S_IFREG": "int:32768", + "S_IFSOCK": "int:49152", + "S_IREAD": "int:256", + "S_IRGRP": "int:32", + "S_IROTH": "int:4", + "S_IRUSR": "int:256", + "S_IRWXG": "int:56", + "S_IRWXO": "int:7", + "S_IRWXU": "int:448", + "S_ISGID": "int:1024", + "S_ISUID": "int:2048", + "S_ISVTX": "int:512", + "S_IWGRP": "int:16", + "S_IWOTH": "int:2", + "S_IWRITE": "int:128", + "S_IWUSR": "int:128", + "S_IXGRP": "int:8", + "S_IXOTH": "int:1", + "S_IXUSR": "int:64", + "SizeofCmsghdr": "int:16", + "SizeofICMPv6Filter": "int:32", + "SizeofIPMreq": "int:8", + "SizeofIPMreqn": "int:12", + "SizeofIPv6MTUInfo": "int:32", + "SizeofIPv6Mreq": "int:20", + "SizeofIfAddrmsg": "int:8", + "SizeofIfInfomsg": "int:16", + "SizeofInet4Pktinfo": "int:12", + "SizeofInet6Pktinfo": "int:20", + "SizeofInotifyEvent": "int:16", + "SizeofLinger": "int:8", + "SizeofMsghdr": "int:56", + "SizeofNlAttr": "int:4", + "SizeofNlMsgerr": "int:20", + "SizeofNlMsghdr": "int:16", + "SizeofRtAttr": "int:4", + "SizeofRtGenmsg": "int:1", + "SizeofRtMsg": "int:12", + "SizeofRtNexthop": "int:8", + "SizeofSockFilter": "int:8", + "SizeofSockFprog": "int:16", + "SizeofSockaddrAny": "int:112", + "SizeofSockaddrInet4": "int:16", + "SizeofSockaddrInet6": "int:28", + "SizeofSockaddrLinklayer": "int:20", + "SizeofSockaddrNetlink": "int:12", + "SizeofSockaddrUnix": "int:110", + "SizeofTCPInfo": "int:104", + "SizeofUcred": "int:12", + "TCGETS": "int:21505", + "TCIFLUSH": "int:0", + "TCIOFLUSH": "int:2", + "TCOFLUSH": "int:1", + "TCP_CONGESTION": "int:13", + "TCP_CORK": "int:3", + "TCP_DEFER_ACCEPT": "int:9", + "TCP_INFO": "int:11", + "TCP_KEEPCNT": "int:6", + "TCP_KEEPIDLE": "int:4", + "TCP_KEEPINTVL": "int:5", + "TCP_LINGER2": "int:8", + "TCP_MAXSEG": "int:2", + "TCP_MAXWIN": "int:65535", + "TCP_MAX_WINSHIFT": "int:14", + "TCP_MD5SIG": "int:14", + "TCP_MD5SIG_MAXKEYLEN": "int:80", + "TCP_MSS": "int:512", + "TCP_NODELAY": "int:1", + "TCP_QUICKACK": "int:12", + "TCP_SYNCNT": "int:7", + "TCP_WINDOW_CLAMP": "int:10", + "TCSETS": "int:21506", + "TIOCCBRK": "int:21544", + "TIOCCONS": "int:21533", + "TIOCEXCL": "int:21516", + "TIOCGDEV": "int:2147767346", + "TIOCGETD": "int:21540", + "TIOCGICOUNT": "int:21597", + "TIOCGLCKTRMIOS": "int:21590", + "TIOCGPGRP": "int:21519", + "TIOCGPTN": "int:2147767344", + "TIOCGRS485": "int:21550", + "TIOCGSERIAL": "int:21534", + "TIOCGSID": "int:21545", + "TIOCGSOFTCAR": "int:21529", + "TIOCGWINSZ": "int:21523", + "TIOCINQ": "int:21531", + "TIOCLINUX": "int:21532", + "TIOCMBIC": "int:21527", + "TIOCMBIS": "int:21526", + "TIOCMGET": "int:21525", + "TIOCMIWAIT": "int:21596", + "TIOCMSET": "int:21528", + "TIOCM_CAR": "int:64", + "TIOCM_CD": "int:64", + "TIOCM_CTS": "int:32", + "TIOCM_DSR": "int:256", + "TIOCM_DTR": "int:2", + "TIOCM_LE": "int:1", + "TIOCM_RI": "int:128", + "TIOCM_RNG": "int:128", + "TIOCM_RTS": "int:4", + "TIOCM_SR": "int:16", + "TIOCM_ST": "int:8", + "TIOCNOTTY": "int:21538", + "TIOCNXCL": "int:21517", + "TIOCOUTQ": "int:21521", + "TIOCPKT": "int:21536", + "TIOCPKT_DATA": "int:0", + "TIOCPKT_DOSTOP": "int:32", + "TIOCPKT_FLUSHREAD": "int:1", + "TIOCPKT_FLUSHWRITE": "int:2", + "TIOCPKT_IOCTL": "int:64", + "TIOCPKT_NOSTOP": "int:16", + "TIOCPKT_START": "int:8", + "TIOCPKT_STOP": "int:4", + "TIOCSBRK": "int:21543", + "TIOCSCTTY": "int:21518", + "TIOCSERCONFIG": "int:21587", + "TIOCSERGETLSR": "int:21593", + "TIOCSERGETMULTI": "int:21594", + "TIOCSERGSTRUCT": "int:21592", + "TIOCSERGWILD": "int:21588", + "TIOCSERSETMULTI": "int:21595", + "TIOCSERSWILD": "int:21589", + "TIOCSER_TEMT": "int:1", + "TIOCSETD": "int:21539", + "TIOCSIG": "int:1074025526", + "TIOCSLCKTRMIOS": "int:21591", + "TIOCSPGRP": "int:21520", + "TIOCSPTLCK": "int:1074025521", + "TIOCSRS485": "int:21551", + "TIOCSSERIAL": "int:21535", + "TIOCSSOFTCAR": "int:21530", + "TIOCSTI": "int:21522", + "TIOCSWINSZ": "int:21524", + "TOSTOP": "int:256", + "TUNATTACHFILTER": "int:1074812117", + "TUNDETACHFILTER": "int:1074812118", + "TUNGETFEATURES": "int:2147767503", + "TUNGETIFF": "int:2147767506", + "TUNGETSNDBUF": "int:2147767507", + "TUNGETVNETHDRSZ": "int:2147767511", + "TUNSETDEBUG": "int:1074025673", + "TUNSETGROUP": "int:1074025678", + "TUNSETIFF": "int:1074025674", + "TUNSETLINK": "int:1074025677", + "TUNSETNOCSUM": "int:1074025672", + "TUNSETOFFLOAD": "int:1074025680", + "TUNSETOWNER": "int:1074025676", + "TUNSETPERSIST": "int:1074025675", + "TUNSETSNDBUF": "int:1074025684", + "TUNSETTXFILTER": "int:1074025681", + "TUNSETVNETHDRSZ": "int:1074025688", + "VDISCARD": "int:13", + "VEOF": "int:4", + "VEOL": "int:11", + "VEOL2": "int:16", + "VERASE": "int:2", + "VINTR": "int:0", + "VKILL": "int:3", + "VLNEXT": "int:15", + "VMIN": "int:6", + "VQUIT": "int:1", + "VREPRINT": "int:12", + "VSTART": "int:8", + "VSTOP": "int:9", + "VSUSP": "int:10", + "VSWTC": "int:7", + "VTIME": "int:5", + "VWERASE": "int:14", + "WALL": "int:1073741824", + "WCLONE": "int:2147483648", + "WCONTINUED": "int:8", + "WEXITED": "int:4", + "WNOHANG": "int:1", + "WNOTHREAD": "int:536870912", + "WNOWAIT": "int:16777216", + "WORDSIZE": "int:64", + "WSTOPPED": "int:2", + "WUNTRACED": "int:2", + "XCASE": "int:4", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_arm.go b/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_arm.go new file mode 100644 index 0000000..25589ad --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_arm.go @@ -0,0 +1,2249 @@ +// +build !gccgo + +// this file was generated by gomacro command: import "syscall" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "syscall" +) + +func init() { + Packages["syscall"] = Package{ + Binds: map[string]Value{ + "AF_ALG": ValueOf(syscall.AF_ALG), + "AF_APPLETALK": ValueOf(syscall.AF_APPLETALK), + "AF_ASH": ValueOf(syscall.AF_ASH), + "AF_ATMPVC": ValueOf(syscall.AF_ATMPVC), + "AF_ATMSVC": ValueOf(syscall.AF_ATMSVC), + "AF_AX25": ValueOf(syscall.AF_AX25), + "AF_BLUETOOTH": ValueOf(syscall.AF_BLUETOOTH), + "AF_BRIDGE": ValueOf(syscall.AF_BRIDGE), + "AF_CAIF": ValueOf(syscall.AF_CAIF), + "AF_CAN": ValueOf(syscall.AF_CAN), + "AF_DECnet": ValueOf(syscall.AF_DECnet), + "AF_ECONET": ValueOf(syscall.AF_ECONET), + "AF_FILE": ValueOf(syscall.AF_FILE), + "AF_IEEE802154": ValueOf(syscall.AF_IEEE802154), + "AF_INET": ValueOf(syscall.AF_INET), + "AF_INET6": ValueOf(syscall.AF_INET6), + "AF_IPX": ValueOf(syscall.AF_IPX), + "AF_IRDA": ValueOf(syscall.AF_IRDA), + "AF_ISDN": ValueOf(syscall.AF_ISDN), + "AF_IUCV": ValueOf(syscall.AF_IUCV), + "AF_KEY": ValueOf(syscall.AF_KEY), + "AF_LLC": ValueOf(syscall.AF_LLC), + "AF_LOCAL": ValueOf(syscall.AF_LOCAL), + "AF_MAX": ValueOf(syscall.AF_MAX), + "AF_NETBEUI": ValueOf(syscall.AF_NETBEUI), + "AF_NETLINK": ValueOf(syscall.AF_NETLINK), + "AF_NETROM": ValueOf(syscall.AF_NETROM), + "AF_PACKET": ValueOf(syscall.AF_PACKET), + "AF_PHONET": ValueOf(syscall.AF_PHONET), + "AF_PPPOX": ValueOf(syscall.AF_PPPOX), + "AF_RDS": ValueOf(syscall.AF_RDS), + "AF_ROSE": ValueOf(syscall.AF_ROSE), + "AF_ROUTE": ValueOf(syscall.AF_ROUTE), + "AF_RXRPC": ValueOf(syscall.AF_RXRPC), + "AF_SECURITY": ValueOf(syscall.AF_SECURITY), + "AF_SNA": ValueOf(syscall.AF_SNA), + "AF_TIPC": ValueOf(syscall.AF_TIPC), + "AF_UNIX": ValueOf(syscall.AF_UNIX), + "AF_UNSPEC": ValueOf(syscall.AF_UNSPEC), + "AF_WANPIPE": ValueOf(syscall.AF_WANPIPE), + "AF_X25": ValueOf(syscall.AF_X25), + "ARPHRD_ADAPT": ValueOf(syscall.ARPHRD_ADAPT), + "ARPHRD_APPLETLK": ValueOf(syscall.ARPHRD_APPLETLK), + "ARPHRD_ARCNET": ValueOf(syscall.ARPHRD_ARCNET), + "ARPHRD_ASH": ValueOf(syscall.ARPHRD_ASH), + "ARPHRD_ATM": ValueOf(syscall.ARPHRD_ATM), + "ARPHRD_AX25": ValueOf(syscall.ARPHRD_AX25), + "ARPHRD_BIF": ValueOf(syscall.ARPHRD_BIF), + "ARPHRD_CHAOS": ValueOf(syscall.ARPHRD_CHAOS), + "ARPHRD_CISCO": ValueOf(syscall.ARPHRD_CISCO), + "ARPHRD_CSLIP": ValueOf(syscall.ARPHRD_CSLIP), + "ARPHRD_CSLIP6": ValueOf(syscall.ARPHRD_CSLIP6), + "ARPHRD_DDCMP": ValueOf(syscall.ARPHRD_DDCMP), + "ARPHRD_DLCI": ValueOf(syscall.ARPHRD_DLCI), + "ARPHRD_ECONET": ValueOf(syscall.ARPHRD_ECONET), + "ARPHRD_EETHER": ValueOf(syscall.ARPHRD_EETHER), + "ARPHRD_ETHER": ValueOf(syscall.ARPHRD_ETHER), + "ARPHRD_EUI64": ValueOf(syscall.ARPHRD_EUI64), + "ARPHRD_FCAL": ValueOf(syscall.ARPHRD_FCAL), + "ARPHRD_FCFABRIC": ValueOf(syscall.ARPHRD_FCFABRIC), + "ARPHRD_FCPL": ValueOf(syscall.ARPHRD_FCPL), + "ARPHRD_FCPP": ValueOf(syscall.ARPHRD_FCPP), + "ARPHRD_FDDI": ValueOf(syscall.ARPHRD_FDDI), + "ARPHRD_FRAD": ValueOf(syscall.ARPHRD_FRAD), + "ARPHRD_HDLC": ValueOf(syscall.ARPHRD_HDLC), + "ARPHRD_HIPPI": ValueOf(syscall.ARPHRD_HIPPI), + "ARPHRD_HWX25": ValueOf(syscall.ARPHRD_HWX25), + "ARPHRD_IEEE1394": ValueOf(syscall.ARPHRD_IEEE1394), + "ARPHRD_IEEE802": ValueOf(syscall.ARPHRD_IEEE802), + "ARPHRD_IEEE80211": ValueOf(syscall.ARPHRD_IEEE80211), + "ARPHRD_IEEE80211_PRISM": ValueOf(syscall.ARPHRD_IEEE80211_PRISM), + "ARPHRD_IEEE80211_RADIOTAP": ValueOf(syscall.ARPHRD_IEEE80211_RADIOTAP), + "ARPHRD_IEEE802154": ValueOf(syscall.ARPHRD_IEEE802154), + "ARPHRD_IEEE802154_PHY": ValueOf(syscall.ARPHRD_IEEE802154_PHY), + "ARPHRD_IEEE802_TR": ValueOf(syscall.ARPHRD_IEEE802_TR), + "ARPHRD_INFINIBAND": ValueOf(syscall.ARPHRD_INFINIBAND), + "ARPHRD_IPDDP": ValueOf(syscall.ARPHRD_IPDDP), + "ARPHRD_IPGRE": ValueOf(syscall.ARPHRD_IPGRE), + "ARPHRD_IRDA": ValueOf(syscall.ARPHRD_IRDA), + "ARPHRD_LAPB": ValueOf(syscall.ARPHRD_LAPB), + "ARPHRD_LOCALTLK": ValueOf(syscall.ARPHRD_LOCALTLK), + "ARPHRD_LOOPBACK": ValueOf(syscall.ARPHRD_LOOPBACK), + "ARPHRD_METRICOM": ValueOf(syscall.ARPHRD_METRICOM), + "ARPHRD_NETROM": ValueOf(syscall.ARPHRD_NETROM), + "ARPHRD_NONE": ValueOf(syscall.ARPHRD_NONE), + "ARPHRD_PIMREG": ValueOf(syscall.ARPHRD_PIMREG), + "ARPHRD_PPP": ValueOf(syscall.ARPHRD_PPP), + "ARPHRD_PRONET": ValueOf(syscall.ARPHRD_PRONET), + "ARPHRD_RAWHDLC": ValueOf(syscall.ARPHRD_RAWHDLC), + "ARPHRD_ROSE": ValueOf(syscall.ARPHRD_ROSE), + "ARPHRD_RSRVD": ValueOf(syscall.ARPHRD_RSRVD), + "ARPHRD_SIT": ValueOf(syscall.ARPHRD_SIT), + "ARPHRD_SKIP": ValueOf(syscall.ARPHRD_SKIP), + "ARPHRD_SLIP": ValueOf(syscall.ARPHRD_SLIP), + "ARPHRD_SLIP6": ValueOf(syscall.ARPHRD_SLIP6), + "ARPHRD_TUNNEL": ValueOf(syscall.ARPHRD_TUNNEL), + "ARPHRD_TUNNEL6": ValueOf(syscall.ARPHRD_TUNNEL6), + "ARPHRD_VOID": ValueOf(syscall.ARPHRD_VOID), + "ARPHRD_X25": ValueOf(syscall.ARPHRD_X25), + "Accept": ValueOf(syscall.Accept), + "Accept4": ValueOf(syscall.Accept4), + "Access": ValueOf(syscall.Access), + "Acct": ValueOf(syscall.Acct), + "Adjtimex": ValueOf(syscall.Adjtimex), + "AttachLsf": ValueOf(syscall.AttachLsf), + "B0": ValueOf(syscall.B0), + "B1000000": ValueOf(syscall.B1000000), + "B110": ValueOf(syscall.B110), + "B115200": ValueOf(syscall.B115200), + "B1152000": ValueOf(syscall.B1152000), + "B1200": ValueOf(syscall.B1200), + "B134": ValueOf(syscall.B134), + "B150": ValueOf(syscall.B150), + "B1500000": ValueOf(syscall.B1500000), + "B1800": ValueOf(syscall.B1800), + "B19200": ValueOf(syscall.B19200), + "B200": ValueOf(syscall.B200), + "B2000000": ValueOf(syscall.B2000000), + "B230400": ValueOf(syscall.B230400), + "B2400": ValueOf(syscall.B2400), + "B2500000": ValueOf(syscall.B2500000), + "B300": ValueOf(syscall.B300), + "B3000000": ValueOf(syscall.B3000000), + "B3500000": ValueOf(syscall.B3500000), + "B38400": ValueOf(syscall.B38400), + "B4000000": ValueOf(syscall.B4000000), + "B460800": ValueOf(syscall.B460800), + "B4800": ValueOf(syscall.B4800), + "B50": ValueOf(syscall.B50), + "B500000": ValueOf(syscall.B500000), + "B57600": ValueOf(syscall.B57600), + "B576000": ValueOf(syscall.B576000), + "B600": ValueOf(syscall.B600), + "B75": ValueOf(syscall.B75), + "B921600": ValueOf(syscall.B921600), + "B9600": ValueOf(syscall.B9600), + "BPF_A": ValueOf(syscall.BPF_A), + "BPF_ABS": ValueOf(syscall.BPF_ABS), + "BPF_ADD": ValueOf(syscall.BPF_ADD), + "BPF_ALU": ValueOf(syscall.BPF_ALU), + "BPF_AND": ValueOf(syscall.BPF_AND), + "BPF_B": ValueOf(syscall.BPF_B), + "BPF_DIV": ValueOf(syscall.BPF_DIV), + "BPF_H": ValueOf(syscall.BPF_H), + "BPF_IMM": ValueOf(syscall.BPF_IMM), + "BPF_IND": ValueOf(syscall.BPF_IND), + "BPF_JA": ValueOf(syscall.BPF_JA), + "BPF_JEQ": ValueOf(syscall.BPF_JEQ), + "BPF_JGE": ValueOf(syscall.BPF_JGE), + "BPF_JGT": ValueOf(syscall.BPF_JGT), + "BPF_JMP": ValueOf(syscall.BPF_JMP), + "BPF_JSET": ValueOf(syscall.BPF_JSET), + "BPF_K": ValueOf(syscall.BPF_K), + "BPF_LD": ValueOf(syscall.BPF_LD), + "BPF_LDX": ValueOf(syscall.BPF_LDX), + "BPF_LEN": ValueOf(syscall.BPF_LEN), + "BPF_LSH": ValueOf(syscall.BPF_LSH), + "BPF_MAJOR_VERSION": ValueOf(syscall.BPF_MAJOR_VERSION), + "BPF_MAXINSNS": ValueOf(syscall.BPF_MAXINSNS), + "BPF_MEM": ValueOf(syscall.BPF_MEM), + "BPF_MEMWORDS": ValueOf(syscall.BPF_MEMWORDS), + "BPF_MINOR_VERSION": ValueOf(syscall.BPF_MINOR_VERSION), + "BPF_MISC": ValueOf(syscall.BPF_MISC), + "BPF_MSH": ValueOf(syscall.BPF_MSH), + "BPF_MUL": ValueOf(syscall.BPF_MUL), + "BPF_NEG": ValueOf(syscall.BPF_NEG), + "BPF_OR": ValueOf(syscall.BPF_OR), + "BPF_RET": ValueOf(syscall.BPF_RET), + "BPF_RSH": ValueOf(syscall.BPF_RSH), + "BPF_ST": ValueOf(syscall.BPF_ST), + "BPF_STX": ValueOf(syscall.BPF_STX), + "BPF_SUB": ValueOf(syscall.BPF_SUB), + "BPF_TAX": ValueOf(syscall.BPF_TAX), + "BPF_TXA": ValueOf(syscall.BPF_TXA), + "BPF_W": ValueOf(syscall.BPF_W), + "BPF_X": ValueOf(syscall.BPF_X), + "BRKINT": ValueOf(syscall.BRKINT), + "Bind": ValueOf(syscall.Bind), + "BindToDevice": ValueOf(syscall.BindToDevice), + "BytePtrFromString": ValueOf(syscall.BytePtrFromString), + "ByteSliceFromString": ValueOf(syscall.ByteSliceFromString), + "CLOCAL": ValueOf(syscall.CLOCAL), + "CLONE_CHILD_CLEARTID": ValueOf(syscall.CLONE_CHILD_CLEARTID), + "CLONE_CHILD_SETTID": ValueOf(syscall.CLONE_CHILD_SETTID), + "CLONE_DETACHED": ValueOf(syscall.CLONE_DETACHED), + "CLONE_FILES": ValueOf(syscall.CLONE_FILES), + "CLONE_FS": ValueOf(syscall.CLONE_FS), + "CLONE_IO": ValueOf(uint64(syscall.CLONE_IO)), + "CLONE_NEWIPC": ValueOf(syscall.CLONE_NEWIPC), + "CLONE_NEWNET": ValueOf(syscall.CLONE_NEWNET), + "CLONE_NEWNS": ValueOf(syscall.CLONE_NEWNS), + "CLONE_NEWPID": ValueOf(syscall.CLONE_NEWPID), + "CLONE_NEWUSER": ValueOf(syscall.CLONE_NEWUSER), + "CLONE_NEWUTS": ValueOf(syscall.CLONE_NEWUTS), + "CLONE_PARENT": ValueOf(syscall.CLONE_PARENT), + "CLONE_PARENT_SETTID": ValueOf(syscall.CLONE_PARENT_SETTID), + "CLONE_PTRACE": ValueOf(syscall.CLONE_PTRACE), + "CLONE_SETTLS": ValueOf(syscall.CLONE_SETTLS), + "CLONE_SIGHAND": ValueOf(syscall.CLONE_SIGHAND), + "CLONE_SYSVSEM": ValueOf(syscall.CLONE_SYSVSEM), + "CLONE_THREAD": ValueOf(syscall.CLONE_THREAD), + "CLONE_UNTRACED": ValueOf(syscall.CLONE_UNTRACED), + "CLONE_VFORK": ValueOf(syscall.CLONE_VFORK), + "CLONE_VM": ValueOf(syscall.CLONE_VM), + "CREAD": ValueOf(syscall.CREAD), + "CS5": ValueOf(syscall.CS5), + "CS6": ValueOf(syscall.CS6), + "CS7": ValueOf(syscall.CS7), + "CS8": ValueOf(syscall.CS8), + "CSIZE": ValueOf(syscall.CSIZE), + "CSTOPB": ValueOf(syscall.CSTOPB), + "Chdir": ValueOf(syscall.Chdir), + "Chmod": ValueOf(syscall.Chmod), + "Chown": ValueOf(syscall.Chown), + "Chroot": ValueOf(syscall.Chroot), + "Clearenv": ValueOf(syscall.Clearenv), + "Close": ValueOf(syscall.Close), + "CloseOnExec": ValueOf(syscall.CloseOnExec), + "CmsgLen": ValueOf(syscall.CmsgLen), + "CmsgSpace": ValueOf(syscall.CmsgSpace), + "Connect": ValueOf(syscall.Connect), + "Creat": ValueOf(syscall.Creat), + "DT_BLK": ValueOf(syscall.DT_BLK), + "DT_CHR": ValueOf(syscall.DT_CHR), + "DT_DIR": ValueOf(syscall.DT_DIR), + "DT_FIFO": ValueOf(syscall.DT_FIFO), + "DT_LNK": ValueOf(syscall.DT_LNK), + "DT_REG": ValueOf(syscall.DT_REG), + "DT_SOCK": ValueOf(syscall.DT_SOCK), + "DT_UNKNOWN": ValueOf(syscall.DT_UNKNOWN), + "DT_WHT": ValueOf(syscall.DT_WHT), + "DetachLsf": ValueOf(syscall.DetachLsf), + "Dup": ValueOf(syscall.Dup), + "Dup2": ValueOf(syscall.Dup2), + "Dup3": ValueOf(syscall.Dup3), + "E2BIG": ValueOf(syscall.E2BIG), + "EACCES": ValueOf(syscall.EACCES), + "EADDRINUSE": ValueOf(syscall.EADDRINUSE), + "EADDRNOTAVAIL": ValueOf(syscall.EADDRNOTAVAIL), + "EADV": ValueOf(syscall.EADV), + "EAFNOSUPPORT": ValueOf(syscall.EAFNOSUPPORT), + "EAGAIN": ValueOf(syscall.EAGAIN), + "EALREADY": ValueOf(syscall.EALREADY), + "EBADE": ValueOf(syscall.EBADE), + "EBADF": ValueOf(syscall.EBADF), + "EBADFD": ValueOf(syscall.EBADFD), + "EBADMSG": ValueOf(syscall.EBADMSG), + "EBADR": ValueOf(syscall.EBADR), + "EBADRQC": ValueOf(syscall.EBADRQC), + "EBADSLT": ValueOf(syscall.EBADSLT), + "EBFONT": ValueOf(syscall.EBFONT), + "EBUSY": ValueOf(syscall.EBUSY), + "ECANCELED": ValueOf(syscall.ECANCELED), + "ECHILD": ValueOf(syscall.ECHILD), + "ECHO": ValueOf(syscall.ECHO), + "ECHOCTL": ValueOf(syscall.ECHOCTL), + "ECHOE": ValueOf(syscall.ECHOE), + "ECHOK": ValueOf(syscall.ECHOK), + "ECHOKE": ValueOf(syscall.ECHOKE), + "ECHONL": ValueOf(syscall.ECHONL), + "ECHOPRT": ValueOf(syscall.ECHOPRT), + "ECHRNG": ValueOf(syscall.ECHRNG), + "ECOMM": ValueOf(syscall.ECOMM), + "ECONNABORTED": ValueOf(syscall.ECONNABORTED), + "ECONNREFUSED": ValueOf(syscall.ECONNREFUSED), + "ECONNRESET": ValueOf(syscall.ECONNRESET), + "EDEADLK": ValueOf(syscall.EDEADLK), + "EDEADLOCK": ValueOf(syscall.EDEADLOCK), + "EDESTADDRREQ": ValueOf(syscall.EDESTADDRREQ), + "EDOM": ValueOf(syscall.EDOM), + "EDOTDOT": ValueOf(syscall.EDOTDOT), + "EDQUOT": ValueOf(syscall.EDQUOT), + "EEXIST": ValueOf(syscall.EEXIST), + "EFAULT": ValueOf(syscall.EFAULT), + "EFBIG": ValueOf(syscall.EFBIG), + "EHOSTDOWN": ValueOf(syscall.EHOSTDOWN), + "EHOSTUNREACH": ValueOf(syscall.EHOSTUNREACH), + "EHWPOISON": ValueOf(syscall.EHWPOISON), + "EIDRM": ValueOf(syscall.EIDRM), + "EILSEQ": ValueOf(syscall.EILSEQ), + "EINPROGRESS": ValueOf(syscall.EINPROGRESS), + "EINTR": ValueOf(syscall.EINTR), + "EINVAL": ValueOf(syscall.EINVAL), + "EIO": ValueOf(syscall.EIO), + "EISCONN": ValueOf(syscall.EISCONN), + "EISDIR": ValueOf(syscall.EISDIR), + "EISNAM": ValueOf(syscall.EISNAM), + "EKEYEXPIRED": ValueOf(syscall.EKEYEXPIRED), + "EKEYREJECTED": ValueOf(syscall.EKEYREJECTED), + "EKEYREVOKED": ValueOf(syscall.EKEYREVOKED), + "EL2HLT": ValueOf(syscall.EL2HLT), + "EL2NSYNC": ValueOf(syscall.EL2NSYNC), + "EL3HLT": ValueOf(syscall.EL3HLT), + "EL3RST": ValueOf(syscall.EL3RST), + "ELF_NGREG": ValueOf(syscall.ELF_NGREG), + "ELF_PRARGSZ": ValueOf(syscall.ELF_PRARGSZ), + "ELIBACC": ValueOf(syscall.ELIBACC), + "ELIBBAD": ValueOf(syscall.ELIBBAD), + "ELIBEXEC": ValueOf(syscall.ELIBEXEC), + "ELIBMAX": ValueOf(syscall.ELIBMAX), + "ELIBSCN": ValueOf(syscall.ELIBSCN), + "ELNRNG": ValueOf(syscall.ELNRNG), + "ELOOP": ValueOf(syscall.ELOOP), + "EMEDIUMTYPE": ValueOf(syscall.EMEDIUMTYPE), + "EMFILE": ValueOf(syscall.EMFILE), + "EMLINK": ValueOf(syscall.EMLINK), + "EMSGSIZE": ValueOf(syscall.EMSGSIZE), + "EMULTIHOP": ValueOf(syscall.EMULTIHOP), + "ENAMETOOLONG": ValueOf(syscall.ENAMETOOLONG), + "ENAVAIL": ValueOf(syscall.ENAVAIL), + "ENETDOWN": ValueOf(syscall.ENETDOWN), + "ENETRESET": ValueOf(syscall.ENETRESET), + "ENETUNREACH": ValueOf(syscall.ENETUNREACH), + "ENFILE": ValueOf(syscall.ENFILE), + "ENOANO": ValueOf(syscall.ENOANO), + "ENOBUFS": ValueOf(syscall.ENOBUFS), + "ENOCSI": ValueOf(syscall.ENOCSI), + "ENODATA": ValueOf(syscall.ENODATA), + "ENODEV": ValueOf(syscall.ENODEV), + "ENOENT": ValueOf(syscall.ENOENT), + "ENOEXEC": ValueOf(syscall.ENOEXEC), + "ENOKEY": ValueOf(syscall.ENOKEY), + "ENOLCK": ValueOf(syscall.ENOLCK), + "ENOLINK": ValueOf(syscall.ENOLINK), + "ENOMEDIUM": ValueOf(syscall.ENOMEDIUM), + "ENOMEM": ValueOf(syscall.ENOMEM), + "ENOMSG": ValueOf(syscall.ENOMSG), + "ENONET": ValueOf(syscall.ENONET), + "ENOPKG": ValueOf(syscall.ENOPKG), + "ENOPROTOOPT": ValueOf(syscall.ENOPROTOOPT), + "ENOSPC": ValueOf(syscall.ENOSPC), + "ENOSR": ValueOf(syscall.ENOSR), + "ENOSTR": ValueOf(syscall.ENOSTR), + "ENOSYS": ValueOf(syscall.ENOSYS), + "ENOTBLK": ValueOf(syscall.ENOTBLK), + "ENOTCONN": ValueOf(syscall.ENOTCONN), + "ENOTDIR": ValueOf(syscall.ENOTDIR), + "ENOTEMPTY": ValueOf(syscall.ENOTEMPTY), + "ENOTNAM": ValueOf(syscall.ENOTNAM), + "ENOTRECOVERABLE": ValueOf(syscall.ENOTRECOVERABLE), + "ENOTSOCK": ValueOf(syscall.ENOTSOCK), + "ENOTSUP": ValueOf(syscall.ENOTSUP), + "ENOTTY": ValueOf(syscall.ENOTTY), + "ENOTUNIQ": ValueOf(syscall.ENOTUNIQ), + "ENXIO": ValueOf(syscall.ENXIO), + "EOPNOTSUPP": ValueOf(syscall.EOPNOTSUPP), + "EOVERFLOW": ValueOf(syscall.EOVERFLOW), + "EOWNERDEAD": ValueOf(syscall.EOWNERDEAD), + "EPERM": ValueOf(syscall.EPERM), + "EPFNOSUPPORT": ValueOf(syscall.EPFNOSUPPORT), + "EPIPE": ValueOf(syscall.EPIPE), + "EPOLLERR": ValueOf(syscall.EPOLLERR), + "EPOLLET": ValueOf(syscall.EPOLLET), + "EPOLLHUP": ValueOf(syscall.EPOLLHUP), + "EPOLLIN": ValueOf(syscall.EPOLLIN), + "EPOLLMSG": ValueOf(syscall.EPOLLMSG), + "EPOLLONESHOT": ValueOf(syscall.EPOLLONESHOT), + "EPOLLOUT": ValueOf(syscall.EPOLLOUT), + "EPOLLPRI": ValueOf(syscall.EPOLLPRI), + "EPOLLRDBAND": ValueOf(syscall.EPOLLRDBAND), + "EPOLLRDHUP": ValueOf(syscall.EPOLLRDHUP), + "EPOLLRDNORM": ValueOf(syscall.EPOLLRDNORM), + "EPOLLWRBAND": ValueOf(syscall.EPOLLWRBAND), + "EPOLLWRNORM": ValueOf(syscall.EPOLLWRNORM), + "EPOLL_CLOEXEC": ValueOf(syscall.EPOLL_CLOEXEC), + "EPOLL_CTL_ADD": ValueOf(syscall.EPOLL_CTL_ADD), + "EPOLL_CTL_DEL": ValueOf(syscall.EPOLL_CTL_DEL), + "EPOLL_CTL_MOD": ValueOf(syscall.EPOLL_CTL_MOD), + "EPOLL_NONBLOCK": ValueOf(syscall.EPOLL_NONBLOCK), + "EPROTO": ValueOf(syscall.EPROTO), + "EPROTONOSUPPORT": ValueOf(syscall.EPROTONOSUPPORT), + "EPROTOTYPE": ValueOf(syscall.EPROTOTYPE), + "ERANGE": ValueOf(syscall.ERANGE), + "EREMCHG": ValueOf(syscall.EREMCHG), + "EREMOTE": ValueOf(syscall.EREMOTE), + "EREMOTEIO": ValueOf(syscall.EREMOTEIO), + "ERESTART": ValueOf(syscall.ERESTART), + "ERFKILL": ValueOf(syscall.ERFKILL), + "EROFS": ValueOf(syscall.EROFS), + "ESHUTDOWN": ValueOf(syscall.ESHUTDOWN), + "ESOCKTNOSUPPORT": ValueOf(syscall.ESOCKTNOSUPPORT), + "ESPIPE": ValueOf(syscall.ESPIPE), + "ESRCH": ValueOf(syscall.ESRCH), + "ESRMNT": ValueOf(syscall.ESRMNT), + "ESTALE": ValueOf(syscall.ESTALE), + "ESTRPIPE": ValueOf(syscall.ESTRPIPE), + "ETH_P_1588": ValueOf(syscall.ETH_P_1588), + "ETH_P_8021Q": ValueOf(syscall.ETH_P_8021Q), + "ETH_P_802_2": ValueOf(syscall.ETH_P_802_2), + "ETH_P_802_3": ValueOf(syscall.ETH_P_802_3), + "ETH_P_AARP": ValueOf(syscall.ETH_P_AARP), + "ETH_P_ALL": ValueOf(syscall.ETH_P_ALL), + "ETH_P_AOE": ValueOf(syscall.ETH_P_AOE), + "ETH_P_ARCNET": ValueOf(syscall.ETH_P_ARCNET), + "ETH_P_ARP": ValueOf(syscall.ETH_P_ARP), + "ETH_P_ATALK": ValueOf(syscall.ETH_P_ATALK), + "ETH_P_ATMFATE": ValueOf(syscall.ETH_P_ATMFATE), + "ETH_P_ATMMPOA": ValueOf(syscall.ETH_P_ATMMPOA), + "ETH_P_AX25": ValueOf(syscall.ETH_P_AX25), + "ETH_P_BPQ": ValueOf(syscall.ETH_P_BPQ), + "ETH_P_CAIF": ValueOf(syscall.ETH_P_CAIF), + "ETH_P_CAN": ValueOf(syscall.ETH_P_CAN), + "ETH_P_CONTROL": ValueOf(syscall.ETH_P_CONTROL), + "ETH_P_CUST": ValueOf(syscall.ETH_P_CUST), + "ETH_P_DDCMP": ValueOf(syscall.ETH_P_DDCMP), + "ETH_P_DEC": ValueOf(syscall.ETH_P_DEC), + "ETH_P_DIAG": ValueOf(syscall.ETH_P_DIAG), + "ETH_P_DNA_DL": ValueOf(syscall.ETH_P_DNA_DL), + "ETH_P_DNA_RC": ValueOf(syscall.ETH_P_DNA_RC), + "ETH_P_DNA_RT": ValueOf(syscall.ETH_P_DNA_RT), + "ETH_P_DSA": ValueOf(syscall.ETH_P_DSA), + "ETH_P_ECONET": ValueOf(syscall.ETH_P_ECONET), + "ETH_P_EDSA": ValueOf(syscall.ETH_P_EDSA), + "ETH_P_FCOE": ValueOf(syscall.ETH_P_FCOE), + "ETH_P_FIP": ValueOf(syscall.ETH_P_FIP), + "ETH_P_HDLC": ValueOf(syscall.ETH_P_HDLC), + "ETH_P_IEEE802154": ValueOf(syscall.ETH_P_IEEE802154), + "ETH_P_IEEEPUP": ValueOf(syscall.ETH_P_IEEEPUP), + "ETH_P_IEEEPUPAT": ValueOf(syscall.ETH_P_IEEEPUPAT), + "ETH_P_IP": ValueOf(syscall.ETH_P_IP), + "ETH_P_IPV6": ValueOf(syscall.ETH_P_IPV6), + "ETH_P_IPX": ValueOf(syscall.ETH_P_IPX), + "ETH_P_IRDA": ValueOf(syscall.ETH_P_IRDA), + "ETH_P_LAT": ValueOf(syscall.ETH_P_LAT), + "ETH_P_LINK_CTL": ValueOf(syscall.ETH_P_LINK_CTL), + "ETH_P_LOCALTALK": ValueOf(syscall.ETH_P_LOCALTALK), + "ETH_P_LOOP": ValueOf(syscall.ETH_P_LOOP), + "ETH_P_MOBITEX": ValueOf(syscall.ETH_P_MOBITEX), + "ETH_P_MPLS_MC": ValueOf(syscall.ETH_P_MPLS_MC), + "ETH_P_MPLS_UC": ValueOf(syscall.ETH_P_MPLS_UC), + "ETH_P_PAE": ValueOf(syscall.ETH_P_PAE), + "ETH_P_PAUSE": ValueOf(syscall.ETH_P_PAUSE), + "ETH_P_PHONET": ValueOf(syscall.ETH_P_PHONET), + "ETH_P_PPPTALK": ValueOf(syscall.ETH_P_PPPTALK), + "ETH_P_PPP_DISC": ValueOf(syscall.ETH_P_PPP_DISC), + "ETH_P_PPP_MP": ValueOf(syscall.ETH_P_PPP_MP), + "ETH_P_PPP_SES": ValueOf(syscall.ETH_P_PPP_SES), + "ETH_P_PUP": ValueOf(syscall.ETH_P_PUP), + "ETH_P_PUPAT": ValueOf(syscall.ETH_P_PUPAT), + "ETH_P_RARP": ValueOf(syscall.ETH_P_RARP), + "ETH_P_SCA": ValueOf(syscall.ETH_P_SCA), + "ETH_P_SLOW": ValueOf(syscall.ETH_P_SLOW), + "ETH_P_SNAP": ValueOf(syscall.ETH_P_SNAP), + "ETH_P_TEB": ValueOf(syscall.ETH_P_TEB), + "ETH_P_TIPC": ValueOf(syscall.ETH_P_TIPC), + "ETH_P_TRAILER": ValueOf(syscall.ETH_P_TRAILER), + "ETH_P_TR_802_2": ValueOf(syscall.ETH_P_TR_802_2), + "ETH_P_WAN_PPP": ValueOf(syscall.ETH_P_WAN_PPP), + "ETH_P_WCCP": ValueOf(syscall.ETH_P_WCCP), + "ETH_P_X25": ValueOf(syscall.ETH_P_X25), + "ETIME": ValueOf(syscall.ETIME), + "ETIMEDOUT": ValueOf(syscall.ETIMEDOUT), + "ETOOMANYREFS": ValueOf(syscall.ETOOMANYREFS), + "ETXTBSY": ValueOf(syscall.ETXTBSY), + "EUCLEAN": ValueOf(syscall.EUCLEAN), + "EUNATCH": ValueOf(syscall.EUNATCH), + "EUSERS": ValueOf(syscall.EUSERS), + "EWOULDBLOCK": ValueOf(syscall.EWOULDBLOCK), + "EXDEV": ValueOf(syscall.EXDEV), + "EXFULL": ValueOf(syscall.EXFULL), + "Environ": ValueOf(syscall.Environ), + "EpollCreate": ValueOf(syscall.EpollCreate), + "EpollCreate1": ValueOf(syscall.EpollCreate1), + "EpollCtl": ValueOf(syscall.EpollCtl), + "EpollWait": ValueOf(syscall.EpollWait), + "Exec": ValueOf(syscall.Exec), + "Exit": ValueOf(syscall.Exit), + "FD_CLOEXEC": ValueOf(syscall.FD_CLOEXEC), + "FD_SETSIZE": ValueOf(syscall.FD_SETSIZE), + "FLUSHO": ValueOf(syscall.FLUSHO), + "F_DUPFD": ValueOf(syscall.F_DUPFD), + "F_DUPFD_CLOEXEC": ValueOf(syscall.F_DUPFD_CLOEXEC), + "F_EXLCK": ValueOf(syscall.F_EXLCK), + "F_GETFD": ValueOf(syscall.F_GETFD), + "F_GETFL": ValueOf(syscall.F_GETFL), + "F_GETLEASE": ValueOf(syscall.F_GETLEASE), + "F_GETLK": ValueOf(syscall.F_GETLK), + "F_GETLK64": ValueOf(syscall.F_GETLK64), + "F_GETOWN": ValueOf(syscall.F_GETOWN), + "F_GETOWN_EX": ValueOf(syscall.F_GETOWN_EX), + "F_GETPIPE_SZ": ValueOf(syscall.F_GETPIPE_SZ), + "F_GETSIG": ValueOf(syscall.F_GETSIG), + "F_LOCK": ValueOf(syscall.F_LOCK), + "F_NOTIFY": ValueOf(syscall.F_NOTIFY), + "F_OK": ValueOf(syscall.F_OK), + "F_RDLCK": ValueOf(syscall.F_RDLCK), + "F_SETFD": ValueOf(syscall.F_SETFD), + "F_SETFL": ValueOf(syscall.F_SETFL), + "F_SETLEASE": ValueOf(syscall.F_SETLEASE), + "F_SETLK": ValueOf(syscall.F_SETLK), + "F_SETLK64": ValueOf(syscall.F_SETLK64), + "F_SETLKW": ValueOf(syscall.F_SETLKW), + "F_SETLKW64": ValueOf(syscall.F_SETLKW64), + "F_SETOWN": ValueOf(syscall.F_SETOWN), + "F_SETOWN_EX": ValueOf(syscall.F_SETOWN_EX), + "F_SETPIPE_SZ": ValueOf(syscall.F_SETPIPE_SZ), + "F_SETSIG": ValueOf(syscall.F_SETSIG), + "F_SHLCK": ValueOf(syscall.F_SHLCK), + "F_TEST": ValueOf(syscall.F_TEST), + "F_TLOCK": ValueOf(syscall.F_TLOCK), + "F_ULOCK": ValueOf(syscall.F_ULOCK), + "F_UNLCK": ValueOf(syscall.F_UNLCK), + "F_WRLCK": ValueOf(syscall.F_WRLCK), + "Faccessat": ValueOf(syscall.Faccessat), + "Fallocate": ValueOf(syscall.Fallocate), + "Fchdir": ValueOf(syscall.Fchdir), + "Fchmod": ValueOf(syscall.Fchmod), + "Fchmodat": ValueOf(syscall.Fchmodat), + "Fchown": ValueOf(syscall.Fchown), + "Fchownat": ValueOf(syscall.Fchownat), + "FcntlFlock": ValueOf(syscall.FcntlFlock), + "Fdatasync": ValueOf(syscall.Fdatasync), + "Flock": ValueOf(syscall.Flock), + "ForkExec": ValueOf(syscall.ForkExec), + "ForkLock": ValueOf(&syscall.ForkLock).Elem(), + "Fstat": ValueOf(syscall.Fstat), + "Fstatfs": ValueOf(syscall.Fstatfs), + "Fsync": ValueOf(syscall.Fsync), + "Ftruncate": ValueOf(syscall.Ftruncate), + "Futimes": ValueOf(syscall.Futimes), + "Futimesat": ValueOf(syscall.Futimesat), + "Getcwd": ValueOf(syscall.Getcwd), + "Getdents": ValueOf(syscall.Getdents), + "Getegid": ValueOf(syscall.Getegid), + "Getenv": ValueOf(syscall.Getenv), + "Geteuid": ValueOf(syscall.Geteuid), + "Getgid": ValueOf(syscall.Getgid), + "Getgroups": ValueOf(syscall.Getgroups), + "Getpagesize": ValueOf(syscall.Getpagesize), + "Getpeername": ValueOf(syscall.Getpeername), + "Getpgid": ValueOf(syscall.Getpgid), + "Getpgrp": ValueOf(syscall.Getpgrp), + "Getpid": ValueOf(syscall.Getpid), + "Getppid": ValueOf(syscall.Getppid), + "Getpriority": ValueOf(syscall.Getpriority), + "Getrlimit": ValueOf(syscall.Getrlimit), + "Getrusage": ValueOf(syscall.Getrusage), + "Getsockname": ValueOf(syscall.Getsockname), + "GetsockoptICMPv6Filter": ValueOf(syscall.GetsockoptICMPv6Filter), + "GetsockoptIPMreq": ValueOf(syscall.GetsockoptIPMreq), + "GetsockoptIPMreqn": ValueOf(syscall.GetsockoptIPMreqn), + "GetsockoptIPv6MTUInfo": ValueOf(syscall.GetsockoptIPv6MTUInfo), + "GetsockoptIPv6Mreq": ValueOf(syscall.GetsockoptIPv6Mreq), + "GetsockoptInet4Addr": ValueOf(syscall.GetsockoptInet4Addr), + "GetsockoptInt": ValueOf(syscall.GetsockoptInt), + "GetsockoptUcred": ValueOf(syscall.GetsockoptUcred), + "Gettid": ValueOf(syscall.Gettid), + "Gettimeofday": ValueOf(syscall.Gettimeofday), + "Getuid": ValueOf(syscall.Getuid), + "Getwd": ValueOf(syscall.Getwd), + "Getxattr": ValueOf(syscall.Getxattr), + "HUPCL": ValueOf(syscall.HUPCL), + "ICANON": ValueOf(syscall.ICANON), + "ICMPV6_FILTER": ValueOf(syscall.ICMPV6_FILTER), + "ICRNL": ValueOf(syscall.ICRNL), + "IEXTEN": ValueOf(syscall.IEXTEN), + "IFA_ADDRESS": ValueOf(syscall.IFA_ADDRESS), + "IFA_ANYCAST": ValueOf(syscall.IFA_ANYCAST), + "IFA_BROADCAST": ValueOf(syscall.IFA_BROADCAST), + "IFA_CACHEINFO": ValueOf(syscall.IFA_CACHEINFO), + "IFA_F_DADFAILED": ValueOf(syscall.IFA_F_DADFAILED), + "IFA_F_DEPRECATED": ValueOf(syscall.IFA_F_DEPRECATED), + "IFA_F_HOMEADDRESS": ValueOf(syscall.IFA_F_HOMEADDRESS), + "IFA_F_NODAD": ValueOf(syscall.IFA_F_NODAD), + "IFA_F_OPTIMISTIC": ValueOf(syscall.IFA_F_OPTIMISTIC), + "IFA_F_PERMANENT": ValueOf(syscall.IFA_F_PERMANENT), + "IFA_F_SECONDARY": ValueOf(syscall.IFA_F_SECONDARY), + "IFA_F_TEMPORARY": ValueOf(syscall.IFA_F_TEMPORARY), + "IFA_F_TENTATIVE": ValueOf(syscall.IFA_F_TENTATIVE), + "IFA_LABEL": ValueOf(syscall.IFA_LABEL), + "IFA_LOCAL": ValueOf(syscall.IFA_LOCAL), + "IFA_MAX": ValueOf(syscall.IFA_MAX), + "IFA_MULTICAST": ValueOf(syscall.IFA_MULTICAST), + "IFA_UNSPEC": ValueOf(syscall.IFA_UNSPEC), + "IFF_ALLMULTI": ValueOf(syscall.IFF_ALLMULTI), + "IFF_AUTOMEDIA": ValueOf(syscall.IFF_AUTOMEDIA), + "IFF_BROADCAST": ValueOf(syscall.IFF_BROADCAST), + "IFF_DEBUG": ValueOf(syscall.IFF_DEBUG), + "IFF_DYNAMIC": ValueOf(syscall.IFF_DYNAMIC), + "IFF_LOOPBACK": ValueOf(syscall.IFF_LOOPBACK), + "IFF_MASTER": ValueOf(syscall.IFF_MASTER), + "IFF_MULTICAST": ValueOf(syscall.IFF_MULTICAST), + "IFF_NOARP": ValueOf(syscall.IFF_NOARP), + "IFF_NOTRAILERS": ValueOf(syscall.IFF_NOTRAILERS), + "IFF_NO_PI": ValueOf(syscall.IFF_NO_PI), + "IFF_ONE_QUEUE": ValueOf(syscall.IFF_ONE_QUEUE), + "IFF_POINTOPOINT": ValueOf(syscall.IFF_POINTOPOINT), + "IFF_PORTSEL": ValueOf(syscall.IFF_PORTSEL), + "IFF_PROMISC": ValueOf(syscall.IFF_PROMISC), + "IFF_RUNNING": ValueOf(syscall.IFF_RUNNING), + "IFF_SLAVE": ValueOf(syscall.IFF_SLAVE), + "IFF_TAP": ValueOf(syscall.IFF_TAP), + "IFF_TUN": ValueOf(syscall.IFF_TUN), + "IFF_TUN_EXCL": ValueOf(syscall.IFF_TUN_EXCL), + "IFF_UP": ValueOf(syscall.IFF_UP), + "IFF_VNET_HDR": ValueOf(syscall.IFF_VNET_HDR), + "IFLA_ADDRESS": ValueOf(syscall.IFLA_ADDRESS), + "IFLA_BROADCAST": ValueOf(syscall.IFLA_BROADCAST), + "IFLA_COST": ValueOf(syscall.IFLA_COST), + "IFLA_IFALIAS": ValueOf(syscall.IFLA_IFALIAS), + "IFLA_IFNAME": ValueOf(syscall.IFLA_IFNAME), + "IFLA_LINK": ValueOf(syscall.IFLA_LINK), + "IFLA_LINKINFO": ValueOf(syscall.IFLA_LINKINFO), + "IFLA_LINKMODE": ValueOf(syscall.IFLA_LINKMODE), + "IFLA_MAP": ValueOf(syscall.IFLA_MAP), + "IFLA_MASTER": ValueOf(syscall.IFLA_MASTER), + "IFLA_MAX": ValueOf(syscall.IFLA_MAX), + "IFLA_MTU": ValueOf(syscall.IFLA_MTU), + "IFLA_NET_NS_PID": ValueOf(syscall.IFLA_NET_NS_PID), + "IFLA_OPERSTATE": ValueOf(syscall.IFLA_OPERSTATE), + "IFLA_PRIORITY": ValueOf(syscall.IFLA_PRIORITY), + "IFLA_PROTINFO": ValueOf(syscall.IFLA_PROTINFO), + "IFLA_QDISC": ValueOf(syscall.IFLA_QDISC), + "IFLA_STATS": ValueOf(syscall.IFLA_STATS), + "IFLA_TXQLEN": ValueOf(syscall.IFLA_TXQLEN), + "IFLA_UNSPEC": ValueOf(syscall.IFLA_UNSPEC), + "IFLA_WEIGHT": ValueOf(syscall.IFLA_WEIGHT), + "IFLA_WIRELESS": ValueOf(syscall.IFLA_WIRELESS), + "IFNAMSIZ": ValueOf(syscall.IFNAMSIZ), + "IGNBRK": ValueOf(syscall.IGNBRK), + "IGNCR": ValueOf(syscall.IGNCR), + "IGNPAR": ValueOf(syscall.IGNPAR), + "IMAXBEL": ValueOf(syscall.IMAXBEL), + "INLCR": ValueOf(syscall.INLCR), + "INPCK": ValueOf(syscall.INPCK), + "IN_ACCESS": ValueOf(syscall.IN_ACCESS), + "IN_ALL_EVENTS": ValueOf(syscall.IN_ALL_EVENTS), + "IN_ATTRIB": ValueOf(syscall.IN_ATTRIB), + "IN_CLASSA_HOST": ValueOf(syscall.IN_CLASSA_HOST), + "IN_CLASSA_MAX": ValueOf(syscall.IN_CLASSA_MAX), + "IN_CLASSA_NET": ValueOf(uint64(syscall.IN_CLASSA_NET)), + "IN_CLASSA_NSHIFT": ValueOf(syscall.IN_CLASSA_NSHIFT), + "IN_CLASSB_HOST": ValueOf(syscall.IN_CLASSB_HOST), + "IN_CLASSB_MAX": ValueOf(syscall.IN_CLASSB_MAX), + "IN_CLASSB_NET": ValueOf(uint64(syscall.IN_CLASSB_NET)), + "IN_CLASSB_NSHIFT": ValueOf(syscall.IN_CLASSB_NSHIFT), + "IN_CLASSC_HOST": ValueOf(syscall.IN_CLASSC_HOST), + "IN_CLASSC_NET": ValueOf(uint64(syscall.IN_CLASSC_NET)), + "IN_CLASSC_NSHIFT": ValueOf(syscall.IN_CLASSC_NSHIFT), + "IN_CLOEXEC": ValueOf(syscall.IN_CLOEXEC), + "IN_CLOSE": ValueOf(syscall.IN_CLOSE), + "IN_CLOSE_NOWRITE": ValueOf(syscall.IN_CLOSE_NOWRITE), + "IN_CLOSE_WRITE": ValueOf(syscall.IN_CLOSE_WRITE), + "IN_CREATE": ValueOf(syscall.IN_CREATE), + "IN_DELETE": ValueOf(syscall.IN_DELETE), + "IN_DELETE_SELF": ValueOf(syscall.IN_DELETE_SELF), + "IN_DONT_FOLLOW": ValueOf(syscall.IN_DONT_FOLLOW), + "IN_EXCL_UNLINK": ValueOf(syscall.IN_EXCL_UNLINK), + "IN_IGNORED": ValueOf(syscall.IN_IGNORED), + "IN_ISDIR": ValueOf(syscall.IN_ISDIR), + "IN_LOOPBACKNET": ValueOf(syscall.IN_LOOPBACKNET), + "IN_MASK_ADD": ValueOf(syscall.IN_MASK_ADD), + "IN_MODIFY": ValueOf(syscall.IN_MODIFY), + "IN_MOVE": ValueOf(syscall.IN_MOVE), + "IN_MOVED_FROM": ValueOf(syscall.IN_MOVED_FROM), + "IN_MOVED_TO": ValueOf(syscall.IN_MOVED_TO), + "IN_MOVE_SELF": ValueOf(syscall.IN_MOVE_SELF), + "IN_NONBLOCK": ValueOf(syscall.IN_NONBLOCK), + "IN_ONESHOT": ValueOf(uint64(syscall.IN_ONESHOT)), + "IN_ONLYDIR": ValueOf(syscall.IN_ONLYDIR), + "IN_OPEN": ValueOf(syscall.IN_OPEN), + "IN_Q_OVERFLOW": ValueOf(syscall.IN_Q_OVERFLOW), + "IN_UNMOUNT": ValueOf(syscall.IN_UNMOUNT), + "IPPROTO_AH": ValueOf(syscall.IPPROTO_AH), + "IPPROTO_COMP": ValueOf(syscall.IPPROTO_COMP), + "IPPROTO_DCCP": ValueOf(syscall.IPPROTO_DCCP), + "IPPROTO_DSTOPTS": ValueOf(syscall.IPPROTO_DSTOPTS), + "IPPROTO_EGP": ValueOf(syscall.IPPROTO_EGP), + "IPPROTO_ENCAP": ValueOf(syscall.IPPROTO_ENCAP), + "IPPROTO_ESP": ValueOf(syscall.IPPROTO_ESP), + "IPPROTO_FRAGMENT": ValueOf(syscall.IPPROTO_FRAGMENT), + "IPPROTO_GRE": ValueOf(syscall.IPPROTO_GRE), + "IPPROTO_HOPOPTS": ValueOf(syscall.IPPROTO_HOPOPTS), + "IPPROTO_ICMP": ValueOf(syscall.IPPROTO_ICMP), + "IPPROTO_ICMPV6": ValueOf(syscall.IPPROTO_ICMPV6), + "IPPROTO_IDP": ValueOf(syscall.IPPROTO_IDP), + "IPPROTO_IGMP": ValueOf(syscall.IPPROTO_IGMP), + "IPPROTO_IP": ValueOf(syscall.IPPROTO_IP), + "IPPROTO_IPIP": ValueOf(syscall.IPPROTO_IPIP), + "IPPROTO_IPV6": ValueOf(syscall.IPPROTO_IPV6), + "IPPROTO_MTP": ValueOf(syscall.IPPROTO_MTP), + "IPPROTO_NONE": ValueOf(syscall.IPPROTO_NONE), + "IPPROTO_PIM": ValueOf(syscall.IPPROTO_PIM), + "IPPROTO_PUP": ValueOf(syscall.IPPROTO_PUP), + "IPPROTO_RAW": ValueOf(syscall.IPPROTO_RAW), + "IPPROTO_ROUTING": ValueOf(syscall.IPPROTO_ROUTING), + "IPPROTO_RSVP": ValueOf(syscall.IPPROTO_RSVP), + "IPPROTO_SCTP": ValueOf(syscall.IPPROTO_SCTP), + "IPPROTO_TCP": ValueOf(syscall.IPPROTO_TCP), + "IPPROTO_TP": ValueOf(syscall.IPPROTO_TP), + "IPPROTO_UDP": ValueOf(syscall.IPPROTO_UDP), + "IPPROTO_UDPLITE": ValueOf(syscall.IPPROTO_UDPLITE), + "IPV6_2292DSTOPTS": ValueOf(syscall.IPV6_2292DSTOPTS), + "IPV6_2292HOPLIMIT": ValueOf(syscall.IPV6_2292HOPLIMIT), + "IPV6_2292HOPOPTS": ValueOf(syscall.IPV6_2292HOPOPTS), + "IPV6_2292PKTINFO": ValueOf(syscall.IPV6_2292PKTINFO), + "IPV6_2292PKTOPTIONS": ValueOf(syscall.IPV6_2292PKTOPTIONS), + "IPV6_2292RTHDR": ValueOf(syscall.IPV6_2292RTHDR), + "IPV6_ADDRFORM": ValueOf(syscall.IPV6_ADDRFORM), + "IPV6_ADD_MEMBERSHIP": ValueOf(syscall.IPV6_ADD_MEMBERSHIP), + "IPV6_AUTHHDR": ValueOf(syscall.IPV6_AUTHHDR), + "IPV6_CHECKSUM": ValueOf(syscall.IPV6_CHECKSUM), + "IPV6_DROP_MEMBERSHIP": ValueOf(syscall.IPV6_DROP_MEMBERSHIP), + "IPV6_DSTOPTS": ValueOf(syscall.IPV6_DSTOPTS), + "IPV6_HOPLIMIT": ValueOf(syscall.IPV6_HOPLIMIT), + "IPV6_HOPOPTS": ValueOf(syscall.IPV6_HOPOPTS), + "IPV6_IPSEC_POLICY": ValueOf(syscall.IPV6_IPSEC_POLICY), + "IPV6_JOIN_ANYCAST": ValueOf(syscall.IPV6_JOIN_ANYCAST), + "IPV6_JOIN_GROUP": ValueOf(syscall.IPV6_JOIN_GROUP), + "IPV6_LEAVE_ANYCAST": ValueOf(syscall.IPV6_LEAVE_ANYCAST), + "IPV6_LEAVE_GROUP": ValueOf(syscall.IPV6_LEAVE_GROUP), + "IPV6_MTU": ValueOf(syscall.IPV6_MTU), + "IPV6_MTU_DISCOVER": ValueOf(syscall.IPV6_MTU_DISCOVER), + "IPV6_MULTICAST_HOPS": ValueOf(syscall.IPV6_MULTICAST_HOPS), + "IPV6_MULTICAST_IF": ValueOf(syscall.IPV6_MULTICAST_IF), + "IPV6_MULTICAST_LOOP": ValueOf(syscall.IPV6_MULTICAST_LOOP), + "IPV6_NEXTHOP": ValueOf(syscall.IPV6_NEXTHOP), + "IPV6_PKTINFO": ValueOf(syscall.IPV6_PKTINFO), + "IPV6_PMTUDISC_DO": ValueOf(syscall.IPV6_PMTUDISC_DO), + "IPV6_PMTUDISC_DONT": ValueOf(syscall.IPV6_PMTUDISC_DONT), + "IPV6_PMTUDISC_PROBE": ValueOf(syscall.IPV6_PMTUDISC_PROBE), + "IPV6_PMTUDISC_WANT": ValueOf(syscall.IPV6_PMTUDISC_WANT), + "IPV6_RECVDSTOPTS": ValueOf(syscall.IPV6_RECVDSTOPTS), + "IPV6_RECVERR": ValueOf(syscall.IPV6_RECVERR), + "IPV6_RECVHOPLIMIT": ValueOf(syscall.IPV6_RECVHOPLIMIT), + "IPV6_RECVHOPOPTS": ValueOf(syscall.IPV6_RECVHOPOPTS), + "IPV6_RECVPKTINFO": ValueOf(syscall.IPV6_RECVPKTINFO), + "IPV6_RECVRTHDR": ValueOf(syscall.IPV6_RECVRTHDR), + "IPV6_RECVTCLASS": ValueOf(syscall.IPV6_RECVTCLASS), + "IPV6_ROUTER_ALERT": ValueOf(syscall.IPV6_ROUTER_ALERT), + "IPV6_RTHDR": ValueOf(syscall.IPV6_RTHDR), + "IPV6_RTHDRDSTOPTS": ValueOf(syscall.IPV6_RTHDRDSTOPTS), + "IPV6_RTHDR_LOOSE": ValueOf(syscall.IPV6_RTHDR_LOOSE), + "IPV6_RTHDR_STRICT": ValueOf(syscall.IPV6_RTHDR_STRICT), + "IPV6_RTHDR_TYPE_0": ValueOf(syscall.IPV6_RTHDR_TYPE_0), + "IPV6_RXDSTOPTS": ValueOf(syscall.IPV6_RXDSTOPTS), + "IPV6_RXHOPOPTS": ValueOf(syscall.IPV6_RXHOPOPTS), + "IPV6_TCLASS": ValueOf(syscall.IPV6_TCLASS), + "IPV6_UNICAST_HOPS": ValueOf(syscall.IPV6_UNICAST_HOPS), + "IPV6_V6ONLY": ValueOf(syscall.IPV6_V6ONLY), + "IPV6_XFRM_POLICY": ValueOf(syscall.IPV6_XFRM_POLICY), + "IP_ADD_MEMBERSHIP": ValueOf(syscall.IP_ADD_MEMBERSHIP), + "IP_ADD_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_ADD_SOURCE_MEMBERSHIP), + "IP_BLOCK_SOURCE": ValueOf(syscall.IP_BLOCK_SOURCE), + "IP_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IP_DEFAULT_MULTICAST_LOOP), + "IP_DEFAULT_MULTICAST_TTL": ValueOf(syscall.IP_DEFAULT_MULTICAST_TTL), + "IP_DF": ValueOf(syscall.IP_DF), + "IP_DROP_MEMBERSHIP": ValueOf(syscall.IP_DROP_MEMBERSHIP), + "IP_DROP_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_DROP_SOURCE_MEMBERSHIP), + "IP_FREEBIND": ValueOf(syscall.IP_FREEBIND), + "IP_HDRINCL": ValueOf(syscall.IP_HDRINCL), + "IP_IPSEC_POLICY": ValueOf(syscall.IP_IPSEC_POLICY), + "IP_MAXPACKET": ValueOf(syscall.IP_MAXPACKET), + "IP_MAX_MEMBERSHIPS": ValueOf(syscall.IP_MAX_MEMBERSHIPS), + "IP_MF": ValueOf(syscall.IP_MF), + "IP_MINTTL": ValueOf(syscall.IP_MINTTL), + "IP_MSFILTER": ValueOf(syscall.IP_MSFILTER), + "IP_MSS": ValueOf(syscall.IP_MSS), + "IP_MTU": ValueOf(syscall.IP_MTU), + "IP_MTU_DISCOVER": ValueOf(syscall.IP_MTU_DISCOVER), + "IP_MULTICAST_IF": ValueOf(syscall.IP_MULTICAST_IF), + "IP_MULTICAST_LOOP": ValueOf(syscall.IP_MULTICAST_LOOP), + "IP_MULTICAST_TTL": ValueOf(syscall.IP_MULTICAST_TTL), + "IP_OFFMASK": ValueOf(syscall.IP_OFFMASK), + "IP_OPTIONS": ValueOf(syscall.IP_OPTIONS), + "IP_ORIGDSTADDR": ValueOf(syscall.IP_ORIGDSTADDR), + "IP_PASSSEC": ValueOf(syscall.IP_PASSSEC), + "IP_PKTINFO": ValueOf(syscall.IP_PKTINFO), + "IP_PKTOPTIONS": ValueOf(syscall.IP_PKTOPTIONS), + "IP_PMTUDISC": ValueOf(syscall.IP_PMTUDISC), + "IP_PMTUDISC_DO": ValueOf(syscall.IP_PMTUDISC_DO), + "IP_PMTUDISC_DONT": ValueOf(syscall.IP_PMTUDISC_DONT), + "IP_PMTUDISC_PROBE": ValueOf(syscall.IP_PMTUDISC_PROBE), + "IP_PMTUDISC_WANT": ValueOf(syscall.IP_PMTUDISC_WANT), + "IP_RECVERR": ValueOf(syscall.IP_RECVERR), + "IP_RECVOPTS": ValueOf(syscall.IP_RECVOPTS), + "IP_RECVORIGDSTADDR": ValueOf(syscall.IP_RECVORIGDSTADDR), + "IP_RECVRETOPTS": ValueOf(syscall.IP_RECVRETOPTS), + "IP_RECVTOS": ValueOf(syscall.IP_RECVTOS), + "IP_RECVTTL": ValueOf(syscall.IP_RECVTTL), + "IP_RETOPTS": ValueOf(syscall.IP_RETOPTS), + "IP_RF": ValueOf(syscall.IP_RF), + "IP_ROUTER_ALERT": ValueOf(syscall.IP_ROUTER_ALERT), + "IP_TOS": ValueOf(syscall.IP_TOS), + "IP_TRANSPARENT": ValueOf(syscall.IP_TRANSPARENT), + "IP_TTL": ValueOf(syscall.IP_TTL), + "IP_UNBLOCK_SOURCE": ValueOf(syscall.IP_UNBLOCK_SOURCE), + "IP_XFRM_POLICY": ValueOf(syscall.IP_XFRM_POLICY), + "ISIG": ValueOf(syscall.ISIG), + "ISTRIP": ValueOf(syscall.ISTRIP), + "IUCLC": ValueOf(syscall.IUCLC), + "IUTF8": ValueOf(syscall.IUTF8), + "IXANY": ValueOf(syscall.IXANY), + "IXOFF": ValueOf(syscall.IXOFF), + "IXON": ValueOf(syscall.IXON), + "ImplementsGetwd": ValueOf(syscall.ImplementsGetwd), + "InotifyAddWatch": ValueOf(syscall.InotifyAddWatch), + "InotifyInit": ValueOf(syscall.InotifyInit), + "InotifyInit1": ValueOf(syscall.InotifyInit1), + "InotifyRmWatch": ValueOf(syscall.InotifyRmWatch), + "Kill": ValueOf(syscall.Kill), + "Klogctl": ValueOf(syscall.Klogctl), + "LINUX_REBOOT_CMD_CAD_OFF": ValueOf(syscall.LINUX_REBOOT_CMD_CAD_OFF), + "LINUX_REBOOT_CMD_CAD_ON": ValueOf(uint64(syscall.LINUX_REBOOT_CMD_CAD_ON)), + "LINUX_REBOOT_CMD_HALT": ValueOf(uint64(syscall.LINUX_REBOOT_CMD_HALT)), + "LINUX_REBOOT_CMD_KEXEC": ValueOf(syscall.LINUX_REBOOT_CMD_KEXEC), + "LINUX_REBOOT_CMD_POWER_OFF": ValueOf(syscall.LINUX_REBOOT_CMD_POWER_OFF), + "LINUX_REBOOT_CMD_RESTART": ValueOf(syscall.LINUX_REBOOT_CMD_RESTART), + "LINUX_REBOOT_CMD_RESTART2": ValueOf(uint64(syscall.LINUX_REBOOT_CMD_RESTART2)), + "LINUX_REBOOT_CMD_SW_SUSPEND": ValueOf(uint64(syscall.LINUX_REBOOT_CMD_SW_SUSPEND)), + "LINUX_REBOOT_MAGIC1": ValueOf(uint64(syscall.LINUX_REBOOT_MAGIC1)), + "LINUX_REBOOT_MAGIC2": ValueOf(syscall.LINUX_REBOOT_MAGIC2), + "LOCK_EX": ValueOf(syscall.LOCK_EX), + "LOCK_NB": ValueOf(syscall.LOCK_NB), + "LOCK_SH": ValueOf(syscall.LOCK_SH), + "LOCK_UN": ValueOf(syscall.LOCK_UN), + "Lchown": ValueOf(syscall.Lchown), + "Link": ValueOf(syscall.Link), + "Listen": ValueOf(syscall.Listen), + "Listxattr": ValueOf(syscall.Listxattr), + "LsfJump": ValueOf(syscall.LsfJump), + "LsfSocket": ValueOf(syscall.LsfSocket), + "LsfStmt": ValueOf(syscall.LsfStmt), + "Lstat": ValueOf(syscall.Lstat), + "MADV_DOFORK": ValueOf(syscall.MADV_DOFORK), + "MADV_DONTFORK": ValueOf(syscall.MADV_DONTFORK), + "MADV_DONTNEED": ValueOf(syscall.MADV_DONTNEED), + "MADV_HUGEPAGE": ValueOf(syscall.MADV_HUGEPAGE), + "MADV_HWPOISON": ValueOf(syscall.MADV_HWPOISON), + "MADV_MERGEABLE": ValueOf(syscall.MADV_MERGEABLE), + "MADV_NOHUGEPAGE": ValueOf(syscall.MADV_NOHUGEPAGE), + "MADV_NORMAL": ValueOf(syscall.MADV_NORMAL), + "MADV_RANDOM": ValueOf(syscall.MADV_RANDOM), + "MADV_REMOVE": ValueOf(syscall.MADV_REMOVE), + "MADV_SEQUENTIAL": ValueOf(syscall.MADV_SEQUENTIAL), + "MADV_UNMERGEABLE": ValueOf(syscall.MADV_UNMERGEABLE), + "MADV_WILLNEED": ValueOf(syscall.MADV_WILLNEED), + "MAP_ANON": ValueOf(syscall.MAP_ANON), + "MAP_ANONYMOUS": ValueOf(syscall.MAP_ANONYMOUS), + "MAP_DENYWRITE": ValueOf(syscall.MAP_DENYWRITE), + "MAP_EXECUTABLE": ValueOf(syscall.MAP_EXECUTABLE), + "MAP_FILE": ValueOf(syscall.MAP_FILE), + "MAP_FIXED": ValueOf(syscall.MAP_FIXED), + "MAP_GROWSDOWN": ValueOf(syscall.MAP_GROWSDOWN), + "MAP_LOCKED": ValueOf(syscall.MAP_LOCKED), + "MAP_NONBLOCK": ValueOf(syscall.MAP_NONBLOCK), + "MAP_NORESERVE": ValueOf(syscall.MAP_NORESERVE), + "MAP_POPULATE": ValueOf(syscall.MAP_POPULATE), + "MAP_PRIVATE": ValueOf(syscall.MAP_PRIVATE), + "MAP_SHARED": ValueOf(syscall.MAP_SHARED), + "MAP_TYPE": ValueOf(syscall.MAP_TYPE), + "MCL_CURRENT": ValueOf(syscall.MCL_CURRENT), + "MCL_FUTURE": ValueOf(syscall.MCL_FUTURE), + "MNT_DETACH": ValueOf(syscall.MNT_DETACH), + "MNT_EXPIRE": ValueOf(syscall.MNT_EXPIRE), + "MNT_FORCE": ValueOf(syscall.MNT_FORCE), + "MSG_CMSG_CLOEXEC": ValueOf(syscall.MSG_CMSG_CLOEXEC), + "MSG_CONFIRM": ValueOf(syscall.MSG_CONFIRM), + "MSG_CTRUNC": ValueOf(syscall.MSG_CTRUNC), + "MSG_DONTROUTE": ValueOf(syscall.MSG_DONTROUTE), + "MSG_DONTWAIT": ValueOf(syscall.MSG_DONTWAIT), + "MSG_EOR": ValueOf(syscall.MSG_EOR), + "MSG_ERRQUEUE": ValueOf(syscall.MSG_ERRQUEUE), + "MSG_FASTOPEN": ValueOf(syscall.MSG_FASTOPEN), + "MSG_FIN": ValueOf(syscall.MSG_FIN), + "MSG_MORE": ValueOf(syscall.MSG_MORE), + "MSG_NOSIGNAL": ValueOf(syscall.MSG_NOSIGNAL), + "MSG_OOB": ValueOf(syscall.MSG_OOB), + "MSG_PEEK": ValueOf(syscall.MSG_PEEK), + "MSG_PROXY": ValueOf(syscall.MSG_PROXY), + "MSG_RST": ValueOf(syscall.MSG_RST), + "MSG_SYN": ValueOf(syscall.MSG_SYN), + "MSG_TRUNC": ValueOf(syscall.MSG_TRUNC), + "MSG_TRYHARD": ValueOf(syscall.MSG_TRYHARD), + "MSG_WAITALL": ValueOf(syscall.MSG_WAITALL), + "MSG_WAITFORONE": ValueOf(syscall.MSG_WAITFORONE), + "MS_ACTIVE": ValueOf(syscall.MS_ACTIVE), + "MS_ASYNC": ValueOf(syscall.MS_ASYNC), + "MS_BIND": ValueOf(syscall.MS_BIND), + "MS_DIRSYNC": ValueOf(syscall.MS_DIRSYNC), + "MS_INVALIDATE": ValueOf(syscall.MS_INVALIDATE), + "MS_I_VERSION": ValueOf(syscall.MS_I_VERSION), + "MS_KERNMOUNT": ValueOf(syscall.MS_KERNMOUNT), + "MS_MANDLOCK": ValueOf(syscall.MS_MANDLOCK), + "MS_MGC_MSK": ValueOf(uint64(syscall.MS_MGC_MSK)), + "MS_MGC_VAL": ValueOf(uint64(syscall.MS_MGC_VAL)), + "MS_MOVE": ValueOf(syscall.MS_MOVE), + "MS_NOATIME": ValueOf(syscall.MS_NOATIME), + "MS_NODEV": ValueOf(syscall.MS_NODEV), + "MS_NODIRATIME": ValueOf(syscall.MS_NODIRATIME), + "MS_NOEXEC": ValueOf(syscall.MS_NOEXEC), + "MS_NOSUID": ValueOf(syscall.MS_NOSUID), + "MS_NOUSER": ValueOf(syscall.MS_NOUSER), + "MS_POSIXACL": ValueOf(syscall.MS_POSIXACL), + "MS_PRIVATE": ValueOf(syscall.MS_PRIVATE), + "MS_RDONLY": ValueOf(syscall.MS_RDONLY), + "MS_REC": ValueOf(syscall.MS_REC), + "MS_RELATIME": ValueOf(syscall.MS_RELATIME), + "MS_REMOUNT": ValueOf(syscall.MS_REMOUNT), + "MS_RMT_MASK": ValueOf(syscall.MS_RMT_MASK), + "MS_SHARED": ValueOf(syscall.MS_SHARED), + "MS_SILENT": ValueOf(syscall.MS_SILENT), + "MS_SLAVE": ValueOf(syscall.MS_SLAVE), + "MS_STRICTATIME": ValueOf(syscall.MS_STRICTATIME), + "MS_SYNC": ValueOf(syscall.MS_SYNC), + "MS_SYNCHRONOUS": ValueOf(syscall.MS_SYNCHRONOUS), + "MS_UNBINDABLE": ValueOf(syscall.MS_UNBINDABLE), + "Madvise": ValueOf(syscall.Madvise), + "Mkdir": ValueOf(syscall.Mkdir), + "Mkdirat": ValueOf(syscall.Mkdirat), + "Mkfifo": ValueOf(syscall.Mkfifo), + "Mknod": ValueOf(syscall.Mknod), + "Mknodat": ValueOf(syscall.Mknodat), + "Mlock": ValueOf(syscall.Mlock), + "Mlockall": ValueOf(syscall.Mlockall), + "Mmap": ValueOf(syscall.Mmap), + "Mount": ValueOf(syscall.Mount), + "Mprotect": ValueOf(syscall.Mprotect), + "Munlock": ValueOf(syscall.Munlock), + "Munlockall": ValueOf(syscall.Munlockall), + "Munmap": ValueOf(syscall.Munmap), + "NAME_MAX": ValueOf(syscall.NAME_MAX), + "NETLINK_ADD_MEMBERSHIP": ValueOf(syscall.NETLINK_ADD_MEMBERSHIP), + "NETLINK_AUDIT": ValueOf(syscall.NETLINK_AUDIT), + "NETLINK_BROADCAST_ERROR": ValueOf(syscall.NETLINK_BROADCAST_ERROR), + "NETLINK_CONNECTOR": ValueOf(syscall.NETLINK_CONNECTOR), + "NETLINK_DNRTMSG": ValueOf(syscall.NETLINK_DNRTMSG), + "NETLINK_DROP_MEMBERSHIP": ValueOf(syscall.NETLINK_DROP_MEMBERSHIP), + "NETLINK_ECRYPTFS": ValueOf(syscall.NETLINK_ECRYPTFS), + "NETLINK_FIB_LOOKUP": ValueOf(syscall.NETLINK_FIB_LOOKUP), + "NETLINK_FIREWALL": ValueOf(syscall.NETLINK_FIREWALL), + "NETLINK_GENERIC": ValueOf(syscall.NETLINK_GENERIC), + "NETLINK_INET_DIAG": ValueOf(syscall.NETLINK_INET_DIAG), + "NETLINK_IP6_FW": ValueOf(syscall.NETLINK_IP6_FW), + "NETLINK_ISCSI": ValueOf(syscall.NETLINK_ISCSI), + "NETLINK_KOBJECT_UEVENT": ValueOf(syscall.NETLINK_KOBJECT_UEVENT), + "NETLINK_NETFILTER": ValueOf(syscall.NETLINK_NETFILTER), + "NETLINK_NFLOG": ValueOf(syscall.NETLINK_NFLOG), + "NETLINK_NO_ENOBUFS": ValueOf(syscall.NETLINK_NO_ENOBUFS), + "NETLINK_PKTINFO": ValueOf(syscall.NETLINK_PKTINFO), + "NETLINK_RDMA": ValueOf(syscall.NETLINK_RDMA), + "NETLINK_ROUTE": ValueOf(syscall.NETLINK_ROUTE), + "NETLINK_SCSITRANSPORT": ValueOf(syscall.NETLINK_SCSITRANSPORT), + "NETLINK_SELINUX": ValueOf(syscall.NETLINK_SELINUX), + "NETLINK_UNUSED": ValueOf(syscall.NETLINK_UNUSED), + "NETLINK_USERSOCK": ValueOf(syscall.NETLINK_USERSOCK), + "NETLINK_XFRM": ValueOf(syscall.NETLINK_XFRM), + "NLA_ALIGNTO": ValueOf(syscall.NLA_ALIGNTO), + "NLA_F_NESTED": ValueOf(syscall.NLA_F_NESTED), + "NLA_F_NET_BYTEORDER": ValueOf(syscall.NLA_F_NET_BYTEORDER), + "NLA_HDRLEN": ValueOf(syscall.NLA_HDRLEN), + "NLMSG_ALIGNTO": ValueOf(syscall.NLMSG_ALIGNTO), + "NLMSG_DONE": ValueOf(syscall.NLMSG_DONE), + "NLMSG_ERROR": ValueOf(syscall.NLMSG_ERROR), + "NLMSG_HDRLEN": ValueOf(syscall.NLMSG_HDRLEN), + "NLMSG_MIN_TYPE": ValueOf(syscall.NLMSG_MIN_TYPE), + "NLMSG_NOOP": ValueOf(syscall.NLMSG_NOOP), + "NLMSG_OVERRUN": ValueOf(syscall.NLMSG_OVERRUN), + "NLM_F_ACK": ValueOf(syscall.NLM_F_ACK), + "NLM_F_APPEND": ValueOf(syscall.NLM_F_APPEND), + "NLM_F_ATOMIC": ValueOf(syscall.NLM_F_ATOMIC), + "NLM_F_CREATE": ValueOf(syscall.NLM_F_CREATE), + "NLM_F_DUMP": ValueOf(syscall.NLM_F_DUMP), + "NLM_F_ECHO": ValueOf(syscall.NLM_F_ECHO), + "NLM_F_EXCL": ValueOf(syscall.NLM_F_EXCL), + "NLM_F_MATCH": ValueOf(syscall.NLM_F_MATCH), + "NLM_F_MULTI": ValueOf(syscall.NLM_F_MULTI), + "NLM_F_REPLACE": ValueOf(syscall.NLM_F_REPLACE), + "NLM_F_REQUEST": ValueOf(syscall.NLM_F_REQUEST), + "NLM_F_ROOT": ValueOf(syscall.NLM_F_ROOT), + "NOFLSH": ValueOf(syscall.NOFLSH), + "Nanosleep": ValueOf(syscall.Nanosleep), + "NetlinkRIB": ValueOf(syscall.NetlinkRIB), + "NsecToTimespec": ValueOf(syscall.NsecToTimespec), + "NsecToTimeval": ValueOf(syscall.NsecToTimeval), + "OCRNL": ValueOf(syscall.OCRNL), + "OFDEL": ValueOf(syscall.OFDEL), + "OFILL": ValueOf(syscall.OFILL), + "OLCUC": ValueOf(syscall.OLCUC), + "ONLCR": ValueOf(syscall.ONLCR), + "ONLRET": ValueOf(syscall.ONLRET), + "ONOCR": ValueOf(syscall.ONOCR), + "OPOST": ValueOf(syscall.OPOST), + "O_ACCMODE": ValueOf(syscall.O_ACCMODE), + "O_APPEND": ValueOf(syscall.O_APPEND), + "O_ASYNC": ValueOf(syscall.O_ASYNC), + "O_CLOEXEC": ValueOf(syscall.O_CLOEXEC), + "O_CREAT": ValueOf(syscall.O_CREAT), + "O_DIRECT": ValueOf(syscall.O_DIRECT), + "O_DIRECTORY": ValueOf(syscall.O_DIRECTORY), + "O_DSYNC": ValueOf(syscall.O_DSYNC), + "O_EXCL": ValueOf(syscall.O_EXCL), + "O_FSYNC": ValueOf(syscall.O_FSYNC), + "O_LARGEFILE": ValueOf(syscall.O_LARGEFILE), + "O_NDELAY": ValueOf(syscall.O_NDELAY), + "O_NOATIME": ValueOf(syscall.O_NOATIME), + "O_NOCTTY": ValueOf(syscall.O_NOCTTY), + "O_NOFOLLOW": ValueOf(syscall.O_NOFOLLOW), + "O_NONBLOCK": ValueOf(syscall.O_NONBLOCK), + "O_RDONLY": ValueOf(syscall.O_RDONLY), + "O_RDWR": ValueOf(syscall.O_RDWR), + "O_RSYNC": ValueOf(syscall.O_RSYNC), + "O_SYNC": ValueOf(syscall.O_SYNC), + "O_TRUNC": ValueOf(syscall.O_TRUNC), + "O_WRONLY": ValueOf(syscall.O_WRONLY), + "Open": ValueOf(syscall.Open), + "Openat": ValueOf(syscall.Openat), + "PACKET_ADD_MEMBERSHIP": ValueOf(syscall.PACKET_ADD_MEMBERSHIP), + "PACKET_BROADCAST": ValueOf(syscall.PACKET_BROADCAST), + "PACKET_DROP_MEMBERSHIP": ValueOf(syscall.PACKET_DROP_MEMBERSHIP), + "PACKET_FASTROUTE": ValueOf(syscall.PACKET_FASTROUTE), + "PACKET_HOST": ValueOf(syscall.PACKET_HOST), + "PACKET_LOOPBACK": ValueOf(syscall.PACKET_LOOPBACK), + "PACKET_MR_ALLMULTI": ValueOf(syscall.PACKET_MR_ALLMULTI), + "PACKET_MR_MULTICAST": ValueOf(syscall.PACKET_MR_MULTICAST), + "PACKET_MR_PROMISC": ValueOf(syscall.PACKET_MR_PROMISC), + "PACKET_MULTICAST": ValueOf(syscall.PACKET_MULTICAST), + "PACKET_OTHERHOST": ValueOf(syscall.PACKET_OTHERHOST), + "PACKET_OUTGOING": ValueOf(syscall.PACKET_OUTGOING), + "PACKET_RECV_OUTPUT": ValueOf(syscall.PACKET_RECV_OUTPUT), + "PACKET_RX_RING": ValueOf(syscall.PACKET_RX_RING), + "PACKET_STATISTICS": ValueOf(syscall.PACKET_STATISTICS), + "PARENB": ValueOf(syscall.PARENB), + "PARMRK": ValueOf(syscall.PARMRK), + "PARODD": ValueOf(syscall.PARODD), + "PENDIN": ValueOf(syscall.PENDIN), + "PRIO_PGRP": ValueOf(syscall.PRIO_PGRP), + "PRIO_PROCESS": ValueOf(syscall.PRIO_PROCESS), + "PRIO_USER": ValueOf(syscall.PRIO_USER), + "PROT_EXEC": ValueOf(syscall.PROT_EXEC), + "PROT_GROWSDOWN": ValueOf(syscall.PROT_GROWSDOWN), + "PROT_GROWSUP": ValueOf(syscall.PROT_GROWSUP), + "PROT_NONE": ValueOf(syscall.PROT_NONE), + "PROT_READ": ValueOf(syscall.PROT_READ), + "PROT_WRITE": ValueOf(syscall.PROT_WRITE), + "PR_CAPBSET_DROP": ValueOf(syscall.PR_CAPBSET_DROP), + "PR_CAPBSET_READ": ValueOf(syscall.PR_CAPBSET_READ), + "PR_CLEAR_SECCOMP_FILTER": ValueOf(syscall.PR_CLEAR_SECCOMP_FILTER), + "PR_ENDIAN_BIG": ValueOf(syscall.PR_ENDIAN_BIG), + "PR_ENDIAN_LITTLE": ValueOf(syscall.PR_ENDIAN_LITTLE), + "PR_ENDIAN_PPC_LITTLE": ValueOf(syscall.PR_ENDIAN_PPC_LITTLE), + "PR_FPEMU_NOPRINT": ValueOf(syscall.PR_FPEMU_NOPRINT), + "PR_FPEMU_SIGFPE": ValueOf(syscall.PR_FPEMU_SIGFPE), + "PR_FP_EXC_ASYNC": ValueOf(syscall.PR_FP_EXC_ASYNC), + "PR_FP_EXC_DISABLED": ValueOf(syscall.PR_FP_EXC_DISABLED), + "PR_FP_EXC_DIV": ValueOf(syscall.PR_FP_EXC_DIV), + "PR_FP_EXC_INV": ValueOf(syscall.PR_FP_EXC_INV), + "PR_FP_EXC_NONRECOV": ValueOf(syscall.PR_FP_EXC_NONRECOV), + "PR_FP_EXC_OVF": ValueOf(syscall.PR_FP_EXC_OVF), + "PR_FP_EXC_PRECISE": ValueOf(syscall.PR_FP_EXC_PRECISE), + "PR_FP_EXC_RES": ValueOf(syscall.PR_FP_EXC_RES), + "PR_FP_EXC_SW_ENABLE": ValueOf(syscall.PR_FP_EXC_SW_ENABLE), + "PR_FP_EXC_UND": ValueOf(syscall.PR_FP_EXC_UND), + "PR_GET_DUMPABLE": ValueOf(syscall.PR_GET_DUMPABLE), + "PR_GET_ENDIAN": ValueOf(syscall.PR_GET_ENDIAN), + "PR_GET_FPEMU": ValueOf(syscall.PR_GET_FPEMU), + "PR_GET_FPEXC": ValueOf(syscall.PR_GET_FPEXC), + "PR_GET_KEEPCAPS": ValueOf(syscall.PR_GET_KEEPCAPS), + "PR_GET_NAME": ValueOf(syscall.PR_GET_NAME), + "PR_GET_PDEATHSIG": ValueOf(syscall.PR_GET_PDEATHSIG), + "PR_GET_SECCOMP": ValueOf(syscall.PR_GET_SECCOMP), + "PR_GET_SECCOMP_FILTER": ValueOf(syscall.PR_GET_SECCOMP_FILTER), + "PR_GET_SECUREBITS": ValueOf(syscall.PR_GET_SECUREBITS), + "PR_GET_TIMERSLACK": ValueOf(syscall.PR_GET_TIMERSLACK), + "PR_GET_TIMING": ValueOf(syscall.PR_GET_TIMING), + "PR_GET_TSC": ValueOf(syscall.PR_GET_TSC), + "PR_GET_UNALIGN": ValueOf(syscall.PR_GET_UNALIGN), + "PR_MCE_KILL": ValueOf(syscall.PR_MCE_KILL), + "PR_MCE_KILL_CLEAR": ValueOf(syscall.PR_MCE_KILL_CLEAR), + "PR_MCE_KILL_DEFAULT": ValueOf(syscall.PR_MCE_KILL_DEFAULT), + "PR_MCE_KILL_EARLY": ValueOf(syscall.PR_MCE_KILL_EARLY), + "PR_MCE_KILL_GET": ValueOf(syscall.PR_MCE_KILL_GET), + "PR_MCE_KILL_LATE": ValueOf(syscall.PR_MCE_KILL_LATE), + "PR_MCE_KILL_SET": ValueOf(syscall.PR_MCE_KILL_SET), + "PR_SECCOMP_FILTER_EVENT": ValueOf(syscall.PR_SECCOMP_FILTER_EVENT), + "PR_SECCOMP_FILTER_SYSCALL": ValueOf(syscall.PR_SECCOMP_FILTER_SYSCALL), + "PR_SET_DUMPABLE": ValueOf(syscall.PR_SET_DUMPABLE), + "PR_SET_ENDIAN": ValueOf(syscall.PR_SET_ENDIAN), + "PR_SET_FPEMU": ValueOf(syscall.PR_SET_FPEMU), + "PR_SET_FPEXC": ValueOf(syscall.PR_SET_FPEXC), + "PR_SET_KEEPCAPS": ValueOf(syscall.PR_SET_KEEPCAPS), + "PR_SET_NAME": ValueOf(syscall.PR_SET_NAME), + "PR_SET_PDEATHSIG": ValueOf(syscall.PR_SET_PDEATHSIG), + "PR_SET_PTRACER": ValueOf(syscall.PR_SET_PTRACER), + "PR_SET_SECCOMP": ValueOf(syscall.PR_SET_SECCOMP), + "PR_SET_SECCOMP_FILTER": ValueOf(syscall.PR_SET_SECCOMP_FILTER), + "PR_SET_SECUREBITS": ValueOf(syscall.PR_SET_SECUREBITS), + "PR_SET_TIMERSLACK": ValueOf(syscall.PR_SET_TIMERSLACK), + "PR_SET_TIMING": ValueOf(syscall.PR_SET_TIMING), + "PR_SET_TSC": ValueOf(syscall.PR_SET_TSC), + "PR_SET_UNALIGN": ValueOf(syscall.PR_SET_UNALIGN), + "PR_TASK_PERF_EVENTS_DISABLE": ValueOf(syscall.PR_TASK_PERF_EVENTS_DISABLE), + "PR_TASK_PERF_EVENTS_ENABLE": ValueOf(syscall.PR_TASK_PERF_EVENTS_ENABLE), + "PR_TIMING_STATISTICAL": ValueOf(syscall.PR_TIMING_STATISTICAL), + "PR_TIMING_TIMESTAMP": ValueOf(syscall.PR_TIMING_TIMESTAMP), + "PR_TSC_ENABLE": ValueOf(syscall.PR_TSC_ENABLE), + "PR_TSC_SIGSEGV": ValueOf(syscall.PR_TSC_SIGSEGV), + "PR_UNALIGN_NOPRINT": ValueOf(syscall.PR_UNALIGN_NOPRINT), + "PR_UNALIGN_SIGBUS": ValueOf(syscall.PR_UNALIGN_SIGBUS), + "PTRACE_ATTACH": ValueOf(syscall.PTRACE_ATTACH), + "PTRACE_CONT": ValueOf(syscall.PTRACE_CONT), + "PTRACE_DETACH": ValueOf(syscall.PTRACE_DETACH), + "PTRACE_EVENT_CLONE": ValueOf(syscall.PTRACE_EVENT_CLONE), + "PTRACE_EVENT_EXEC": ValueOf(syscall.PTRACE_EVENT_EXEC), + "PTRACE_EVENT_EXIT": ValueOf(syscall.PTRACE_EVENT_EXIT), + "PTRACE_EVENT_FORK": ValueOf(syscall.PTRACE_EVENT_FORK), + "PTRACE_EVENT_VFORK": ValueOf(syscall.PTRACE_EVENT_VFORK), + "PTRACE_EVENT_VFORK_DONE": ValueOf(syscall.PTRACE_EVENT_VFORK_DONE), + "PTRACE_GETCRUNCHREGS": ValueOf(syscall.PTRACE_GETCRUNCHREGS), + "PTRACE_GETEVENTMSG": ValueOf(syscall.PTRACE_GETEVENTMSG), + "PTRACE_GETFPREGS": ValueOf(syscall.PTRACE_GETFPREGS), + "PTRACE_GETHBPREGS": ValueOf(syscall.PTRACE_GETHBPREGS), + "PTRACE_GETREGS": ValueOf(syscall.PTRACE_GETREGS), + "PTRACE_GETREGSET": ValueOf(syscall.PTRACE_GETREGSET), + "PTRACE_GETSIGINFO": ValueOf(syscall.PTRACE_GETSIGINFO), + "PTRACE_GETVFPREGS": ValueOf(syscall.PTRACE_GETVFPREGS), + "PTRACE_GETWMMXREGS": ValueOf(syscall.PTRACE_GETWMMXREGS), + "PTRACE_GET_THREAD_AREA": ValueOf(syscall.PTRACE_GET_THREAD_AREA), + "PTRACE_KILL": ValueOf(syscall.PTRACE_KILL), + "PTRACE_OLDSETOPTIONS": ValueOf(syscall.PTRACE_OLDSETOPTIONS), + "PTRACE_O_MASK": ValueOf(syscall.PTRACE_O_MASK), + "PTRACE_O_TRACECLONE": ValueOf(syscall.PTRACE_O_TRACECLONE), + "PTRACE_O_TRACEEXEC": ValueOf(syscall.PTRACE_O_TRACEEXEC), + "PTRACE_O_TRACEEXIT": ValueOf(syscall.PTRACE_O_TRACEEXIT), + "PTRACE_O_TRACEFORK": ValueOf(syscall.PTRACE_O_TRACEFORK), + "PTRACE_O_TRACESYSGOOD": ValueOf(syscall.PTRACE_O_TRACESYSGOOD), + "PTRACE_O_TRACEVFORK": ValueOf(syscall.PTRACE_O_TRACEVFORK), + "PTRACE_O_TRACEVFORKDONE": ValueOf(syscall.PTRACE_O_TRACEVFORKDONE), + "PTRACE_PEEKDATA": ValueOf(syscall.PTRACE_PEEKDATA), + "PTRACE_PEEKTEXT": ValueOf(syscall.PTRACE_PEEKTEXT), + "PTRACE_PEEKUSR": ValueOf(syscall.PTRACE_PEEKUSR), + "PTRACE_POKEDATA": ValueOf(syscall.PTRACE_POKEDATA), + "PTRACE_POKETEXT": ValueOf(syscall.PTRACE_POKETEXT), + "PTRACE_POKEUSR": ValueOf(syscall.PTRACE_POKEUSR), + "PTRACE_SETCRUNCHREGS": ValueOf(syscall.PTRACE_SETCRUNCHREGS), + "PTRACE_SETFPREGS": ValueOf(syscall.PTRACE_SETFPREGS), + "PTRACE_SETHBPREGS": ValueOf(syscall.PTRACE_SETHBPREGS), + "PTRACE_SETOPTIONS": ValueOf(syscall.PTRACE_SETOPTIONS), + "PTRACE_SETREGS": ValueOf(syscall.PTRACE_SETREGS), + "PTRACE_SETREGSET": ValueOf(syscall.PTRACE_SETREGSET), + "PTRACE_SETSIGINFO": ValueOf(syscall.PTRACE_SETSIGINFO), + "PTRACE_SETVFPREGS": ValueOf(syscall.PTRACE_SETVFPREGS), + "PTRACE_SETWMMXREGS": ValueOf(syscall.PTRACE_SETWMMXREGS), + "PTRACE_SET_SYSCALL": ValueOf(syscall.PTRACE_SET_SYSCALL), + "PTRACE_SINGLESTEP": ValueOf(syscall.PTRACE_SINGLESTEP), + "PTRACE_SYSCALL": ValueOf(syscall.PTRACE_SYSCALL), + "PTRACE_TRACEME": ValueOf(syscall.PTRACE_TRACEME), + "PT_DATA_ADDR": ValueOf(syscall.PT_DATA_ADDR), + "PT_TEXT_ADDR": ValueOf(syscall.PT_TEXT_ADDR), + "PT_TEXT_END_ADDR": ValueOf(syscall.PT_TEXT_END_ADDR), + "ParseDirent": ValueOf(syscall.ParseDirent), + "ParseNetlinkMessage": ValueOf(syscall.ParseNetlinkMessage), + "ParseNetlinkRouteAttr": ValueOf(syscall.ParseNetlinkRouteAttr), + "ParseSocketControlMessage": ValueOf(syscall.ParseSocketControlMessage), + "ParseUnixCredentials": ValueOf(syscall.ParseUnixCredentials), + "ParseUnixRights": ValueOf(syscall.ParseUnixRights), + "PathMax": ValueOf(syscall.PathMax), + "Pause": ValueOf(syscall.Pause), + "Pipe": ValueOf(syscall.Pipe), + "Pipe2": ValueOf(syscall.Pipe2), + "PivotRoot": ValueOf(syscall.PivotRoot), + "Pread": ValueOf(syscall.Pread), + "PtraceAttach": ValueOf(syscall.PtraceAttach), + "PtraceCont": ValueOf(syscall.PtraceCont), + "PtraceDetach": ValueOf(syscall.PtraceDetach), + "PtraceGetEventMsg": ValueOf(syscall.PtraceGetEventMsg), + "PtraceGetRegs": ValueOf(syscall.PtraceGetRegs), + "PtracePeekData": ValueOf(syscall.PtracePeekData), + "PtracePeekText": ValueOf(syscall.PtracePeekText), + "PtracePokeData": ValueOf(syscall.PtracePokeData), + "PtracePokeText": ValueOf(syscall.PtracePokeText), + "PtraceSetOptions": ValueOf(syscall.PtraceSetOptions), + "PtraceSetRegs": ValueOf(syscall.PtraceSetRegs), + "PtraceSingleStep": ValueOf(syscall.PtraceSingleStep), + "PtraceSyscall": ValueOf(syscall.PtraceSyscall), + "Pwrite": ValueOf(syscall.Pwrite), + "RLIMIT_AS": ValueOf(syscall.RLIMIT_AS), + "RLIMIT_CORE": ValueOf(syscall.RLIMIT_CORE), + "RLIMIT_CPU": ValueOf(syscall.RLIMIT_CPU), + "RLIMIT_DATA": ValueOf(syscall.RLIMIT_DATA), + "RLIMIT_FSIZE": ValueOf(syscall.RLIMIT_FSIZE), + "RLIMIT_NOFILE": ValueOf(syscall.RLIMIT_NOFILE), + "RLIMIT_STACK": ValueOf(syscall.RLIMIT_STACK), + "RLIM_INFINITY": ValueOf(syscall.RLIM_INFINITY), + "RTAX_ADVMSS": ValueOf(syscall.RTAX_ADVMSS), + "RTAX_CWND": ValueOf(syscall.RTAX_CWND), + "RTAX_FEATURES": ValueOf(syscall.RTAX_FEATURES), + "RTAX_FEATURE_ALLFRAG": ValueOf(syscall.RTAX_FEATURE_ALLFRAG), + "RTAX_FEATURE_ECN": ValueOf(syscall.RTAX_FEATURE_ECN), + "RTAX_FEATURE_SACK": ValueOf(syscall.RTAX_FEATURE_SACK), + "RTAX_FEATURE_TIMESTAMP": ValueOf(syscall.RTAX_FEATURE_TIMESTAMP), + "RTAX_HOPLIMIT": ValueOf(syscall.RTAX_HOPLIMIT), + "RTAX_INITCWND": ValueOf(syscall.RTAX_INITCWND), + "RTAX_INITRWND": ValueOf(syscall.RTAX_INITRWND), + "RTAX_LOCK": ValueOf(syscall.RTAX_LOCK), + "RTAX_MAX": ValueOf(syscall.RTAX_MAX), + "RTAX_MTU": ValueOf(syscall.RTAX_MTU), + "RTAX_REORDERING": ValueOf(syscall.RTAX_REORDERING), + "RTAX_RTO_MIN": ValueOf(syscall.RTAX_RTO_MIN), + "RTAX_RTT": ValueOf(syscall.RTAX_RTT), + "RTAX_RTTVAR": ValueOf(syscall.RTAX_RTTVAR), + "RTAX_SSTHRESH": ValueOf(syscall.RTAX_SSTHRESH), + "RTAX_UNSPEC": ValueOf(syscall.RTAX_UNSPEC), + "RTAX_WINDOW": ValueOf(syscall.RTAX_WINDOW), + "RTA_ALIGNTO": ValueOf(syscall.RTA_ALIGNTO), + "RTA_CACHEINFO": ValueOf(syscall.RTA_CACHEINFO), + "RTA_DST": ValueOf(syscall.RTA_DST), + "RTA_FLOW": ValueOf(syscall.RTA_FLOW), + "RTA_GATEWAY": ValueOf(syscall.RTA_GATEWAY), + "RTA_IIF": ValueOf(syscall.RTA_IIF), + "RTA_MAX": ValueOf(syscall.RTA_MAX), + "RTA_METRICS": ValueOf(syscall.RTA_METRICS), + "RTA_MULTIPATH": ValueOf(syscall.RTA_MULTIPATH), + "RTA_OIF": ValueOf(syscall.RTA_OIF), + "RTA_PREFSRC": ValueOf(syscall.RTA_PREFSRC), + "RTA_PRIORITY": ValueOf(syscall.RTA_PRIORITY), + "RTA_SRC": ValueOf(syscall.RTA_SRC), + "RTA_TABLE": ValueOf(syscall.RTA_TABLE), + "RTA_UNSPEC": ValueOf(syscall.RTA_UNSPEC), + "RTCF_DIRECTSRC": ValueOf(syscall.RTCF_DIRECTSRC), + "RTCF_DOREDIRECT": ValueOf(syscall.RTCF_DOREDIRECT), + "RTCF_LOG": ValueOf(syscall.RTCF_LOG), + "RTCF_MASQ": ValueOf(syscall.RTCF_MASQ), + "RTCF_NAT": ValueOf(syscall.RTCF_NAT), + "RTCF_VALVE": ValueOf(syscall.RTCF_VALVE), + "RTF_ADDRCLASSMASK": ValueOf(uint64(syscall.RTF_ADDRCLASSMASK)), + "RTF_ADDRCONF": ValueOf(syscall.RTF_ADDRCONF), + "RTF_ALLONLINK": ValueOf(syscall.RTF_ALLONLINK), + "RTF_BROADCAST": ValueOf(syscall.RTF_BROADCAST), + "RTF_CACHE": ValueOf(syscall.RTF_CACHE), + "RTF_DEFAULT": ValueOf(syscall.RTF_DEFAULT), + "RTF_DYNAMIC": ValueOf(syscall.RTF_DYNAMIC), + "RTF_FLOW": ValueOf(syscall.RTF_FLOW), + "RTF_GATEWAY": ValueOf(syscall.RTF_GATEWAY), + "RTF_HOST": ValueOf(syscall.RTF_HOST), + "RTF_INTERFACE": ValueOf(syscall.RTF_INTERFACE), + "RTF_IRTT": ValueOf(syscall.RTF_IRTT), + "RTF_LINKRT": ValueOf(syscall.RTF_LINKRT), + "RTF_LOCAL": ValueOf(uint64(syscall.RTF_LOCAL)), + "RTF_MODIFIED": ValueOf(syscall.RTF_MODIFIED), + "RTF_MSS": ValueOf(syscall.RTF_MSS), + "RTF_MTU": ValueOf(syscall.RTF_MTU), + "RTF_MULTICAST": ValueOf(syscall.RTF_MULTICAST), + "RTF_NAT": ValueOf(syscall.RTF_NAT), + "RTF_NOFORWARD": ValueOf(syscall.RTF_NOFORWARD), + "RTF_NONEXTHOP": ValueOf(syscall.RTF_NONEXTHOP), + "RTF_NOPMTUDISC": ValueOf(syscall.RTF_NOPMTUDISC), + "RTF_POLICY": ValueOf(syscall.RTF_POLICY), + "RTF_REINSTATE": ValueOf(syscall.RTF_REINSTATE), + "RTF_REJECT": ValueOf(syscall.RTF_REJECT), + "RTF_STATIC": ValueOf(syscall.RTF_STATIC), + "RTF_THROW": ValueOf(syscall.RTF_THROW), + "RTF_UP": ValueOf(syscall.RTF_UP), + "RTF_WINDOW": ValueOf(syscall.RTF_WINDOW), + "RTF_XRESOLVE": ValueOf(syscall.RTF_XRESOLVE), + "RTM_BASE": ValueOf(syscall.RTM_BASE), + "RTM_DELACTION": ValueOf(syscall.RTM_DELACTION), + "RTM_DELADDR": ValueOf(syscall.RTM_DELADDR), + "RTM_DELADDRLABEL": ValueOf(syscall.RTM_DELADDRLABEL), + "RTM_DELLINK": ValueOf(syscall.RTM_DELLINK), + "RTM_DELNEIGH": ValueOf(syscall.RTM_DELNEIGH), + "RTM_DELQDISC": ValueOf(syscall.RTM_DELQDISC), + "RTM_DELROUTE": ValueOf(syscall.RTM_DELROUTE), + "RTM_DELRULE": ValueOf(syscall.RTM_DELRULE), + "RTM_DELTCLASS": ValueOf(syscall.RTM_DELTCLASS), + "RTM_DELTFILTER": ValueOf(syscall.RTM_DELTFILTER), + "RTM_F_CLONED": ValueOf(syscall.RTM_F_CLONED), + "RTM_F_EQUALIZE": ValueOf(syscall.RTM_F_EQUALIZE), + "RTM_F_NOTIFY": ValueOf(syscall.RTM_F_NOTIFY), + "RTM_F_PREFIX": ValueOf(syscall.RTM_F_PREFIX), + "RTM_GETACTION": ValueOf(syscall.RTM_GETACTION), + "RTM_GETADDR": ValueOf(syscall.RTM_GETADDR), + "RTM_GETADDRLABEL": ValueOf(syscall.RTM_GETADDRLABEL), + "RTM_GETANYCAST": ValueOf(syscall.RTM_GETANYCAST), + "RTM_GETDCB": ValueOf(syscall.RTM_GETDCB), + "RTM_GETLINK": ValueOf(syscall.RTM_GETLINK), + "RTM_GETMULTICAST": ValueOf(syscall.RTM_GETMULTICAST), + "RTM_GETNEIGH": ValueOf(syscall.RTM_GETNEIGH), + "RTM_GETNEIGHTBL": ValueOf(syscall.RTM_GETNEIGHTBL), + "RTM_GETQDISC": ValueOf(syscall.RTM_GETQDISC), + "RTM_GETROUTE": ValueOf(syscall.RTM_GETROUTE), + "RTM_GETRULE": ValueOf(syscall.RTM_GETRULE), + "RTM_GETTCLASS": ValueOf(syscall.RTM_GETTCLASS), + "RTM_GETTFILTER": ValueOf(syscall.RTM_GETTFILTER), + "RTM_MAX": ValueOf(syscall.RTM_MAX), + "RTM_NEWACTION": ValueOf(syscall.RTM_NEWACTION), + "RTM_NEWADDR": ValueOf(syscall.RTM_NEWADDR), + "RTM_NEWADDRLABEL": ValueOf(syscall.RTM_NEWADDRLABEL), + "RTM_NEWLINK": ValueOf(syscall.RTM_NEWLINK), + "RTM_NEWNDUSEROPT": ValueOf(syscall.RTM_NEWNDUSEROPT), + "RTM_NEWNEIGH": ValueOf(syscall.RTM_NEWNEIGH), + "RTM_NEWNEIGHTBL": ValueOf(syscall.RTM_NEWNEIGHTBL), + "RTM_NEWPREFIX": ValueOf(syscall.RTM_NEWPREFIX), + "RTM_NEWQDISC": ValueOf(syscall.RTM_NEWQDISC), + "RTM_NEWROUTE": ValueOf(syscall.RTM_NEWROUTE), + "RTM_NEWRULE": ValueOf(syscall.RTM_NEWRULE), + "RTM_NEWTCLASS": ValueOf(syscall.RTM_NEWTCLASS), + "RTM_NEWTFILTER": ValueOf(syscall.RTM_NEWTFILTER), + "RTM_NR_FAMILIES": ValueOf(syscall.RTM_NR_FAMILIES), + "RTM_NR_MSGTYPES": ValueOf(syscall.RTM_NR_MSGTYPES), + "RTM_SETDCB": ValueOf(syscall.RTM_SETDCB), + "RTM_SETLINK": ValueOf(syscall.RTM_SETLINK), + "RTM_SETNEIGHTBL": ValueOf(syscall.RTM_SETNEIGHTBL), + "RTNH_ALIGNTO": ValueOf(syscall.RTNH_ALIGNTO), + "RTNH_F_DEAD": ValueOf(syscall.RTNH_F_DEAD), + "RTNH_F_ONLINK": ValueOf(syscall.RTNH_F_ONLINK), + "RTNH_F_PERVASIVE": ValueOf(syscall.RTNH_F_PERVASIVE), + "RTNLGRP_IPV4_IFADDR": ValueOf(syscall.RTNLGRP_IPV4_IFADDR), + "RTNLGRP_IPV4_MROUTE": ValueOf(syscall.RTNLGRP_IPV4_MROUTE), + "RTNLGRP_IPV4_ROUTE": ValueOf(syscall.RTNLGRP_IPV4_ROUTE), + "RTNLGRP_IPV4_RULE": ValueOf(syscall.RTNLGRP_IPV4_RULE), + "RTNLGRP_IPV6_IFADDR": ValueOf(syscall.RTNLGRP_IPV6_IFADDR), + "RTNLGRP_IPV6_IFINFO": ValueOf(syscall.RTNLGRP_IPV6_IFINFO), + "RTNLGRP_IPV6_MROUTE": ValueOf(syscall.RTNLGRP_IPV6_MROUTE), + "RTNLGRP_IPV6_PREFIX": ValueOf(syscall.RTNLGRP_IPV6_PREFIX), + "RTNLGRP_IPV6_ROUTE": ValueOf(syscall.RTNLGRP_IPV6_ROUTE), + "RTNLGRP_IPV6_RULE": ValueOf(syscall.RTNLGRP_IPV6_RULE), + "RTNLGRP_LINK": ValueOf(syscall.RTNLGRP_LINK), + "RTNLGRP_ND_USEROPT": ValueOf(syscall.RTNLGRP_ND_USEROPT), + "RTNLGRP_NEIGH": ValueOf(syscall.RTNLGRP_NEIGH), + "RTNLGRP_NONE": ValueOf(syscall.RTNLGRP_NONE), + "RTNLGRP_NOTIFY": ValueOf(syscall.RTNLGRP_NOTIFY), + "RTNLGRP_TC": ValueOf(syscall.RTNLGRP_TC), + "RTN_ANYCAST": ValueOf(syscall.RTN_ANYCAST), + "RTN_BLACKHOLE": ValueOf(syscall.RTN_BLACKHOLE), + "RTN_BROADCAST": ValueOf(syscall.RTN_BROADCAST), + "RTN_LOCAL": ValueOf(syscall.RTN_LOCAL), + "RTN_MAX": ValueOf(syscall.RTN_MAX), + "RTN_MULTICAST": ValueOf(syscall.RTN_MULTICAST), + "RTN_NAT": ValueOf(syscall.RTN_NAT), + "RTN_PROHIBIT": ValueOf(syscall.RTN_PROHIBIT), + "RTN_THROW": ValueOf(syscall.RTN_THROW), + "RTN_UNICAST": ValueOf(syscall.RTN_UNICAST), + "RTN_UNREACHABLE": ValueOf(syscall.RTN_UNREACHABLE), + "RTN_UNSPEC": ValueOf(syscall.RTN_UNSPEC), + "RTN_XRESOLVE": ValueOf(syscall.RTN_XRESOLVE), + "RTPROT_BIRD": ValueOf(syscall.RTPROT_BIRD), + "RTPROT_BOOT": ValueOf(syscall.RTPROT_BOOT), + "RTPROT_DHCP": ValueOf(syscall.RTPROT_DHCP), + "RTPROT_DNROUTED": ValueOf(syscall.RTPROT_DNROUTED), + "RTPROT_GATED": ValueOf(syscall.RTPROT_GATED), + "RTPROT_KERNEL": ValueOf(syscall.RTPROT_KERNEL), + "RTPROT_MRT": ValueOf(syscall.RTPROT_MRT), + "RTPROT_NTK": ValueOf(syscall.RTPROT_NTK), + "RTPROT_RA": ValueOf(syscall.RTPROT_RA), + "RTPROT_REDIRECT": ValueOf(syscall.RTPROT_REDIRECT), + "RTPROT_STATIC": ValueOf(syscall.RTPROT_STATIC), + "RTPROT_UNSPEC": ValueOf(syscall.RTPROT_UNSPEC), + "RTPROT_XORP": ValueOf(syscall.RTPROT_XORP), + "RTPROT_ZEBRA": ValueOf(syscall.RTPROT_ZEBRA), + "RT_CLASS_DEFAULT": ValueOf(syscall.RT_CLASS_DEFAULT), + "RT_CLASS_LOCAL": ValueOf(syscall.RT_CLASS_LOCAL), + "RT_CLASS_MAIN": ValueOf(syscall.RT_CLASS_MAIN), + "RT_CLASS_MAX": ValueOf(syscall.RT_CLASS_MAX), + "RT_CLASS_UNSPEC": ValueOf(syscall.RT_CLASS_UNSPEC), + "RT_SCOPE_HOST": ValueOf(syscall.RT_SCOPE_HOST), + "RT_SCOPE_LINK": ValueOf(syscall.RT_SCOPE_LINK), + "RT_SCOPE_NOWHERE": ValueOf(syscall.RT_SCOPE_NOWHERE), + "RT_SCOPE_SITE": ValueOf(syscall.RT_SCOPE_SITE), + "RT_SCOPE_UNIVERSE": ValueOf(syscall.RT_SCOPE_UNIVERSE), + "RT_TABLE_COMPAT": ValueOf(syscall.RT_TABLE_COMPAT), + "RT_TABLE_DEFAULT": ValueOf(syscall.RT_TABLE_DEFAULT), + "RT_TABLE_LOCAL": ValueOf(syscall.RT_TABLE_LOCAL), + "RT_TABLE_MAIN": ValueOf(syscall.RT_TABLE_MAIN), + "RT_TABLE_MAX": ValueOf(uint64(syscall.RT_TABLE_MAX)), + "RT_TABLE_UNSPEC": ValueOf(syscall.RT_TABLE_UNSPEC), + "RUSAGE_CHILDREN": ValueOf(syscall.RUSAGE_CHILDREN), + "RUSAGE_SELF": ValueOf(syscall.RUSAGE_SELF), + "RUSAGE_THREAD": ValueOf(syscall.RUSAGE_THREAD), + "RawSyscall": ValueOf(syscall.RawSyscall), + "RawSyscall6": ValueOf(syscall.RawSyscall6), + "Read": ValueOf(syscall.Read), + "ReadDirent": ValueOf(syscall.ReadDirent), + "Readlink": ValueOf(syscall.Readlink), + "Reboot": ValueOf(syscall.Reboot), + "Recvfrom": ValueOf(syscall.Recvfrom), + "Recvmsg": ValueOf(syscall.Recvmsg), + "Removexattr": ValueOf(syscall.Removexattr), + "Rename": ValueOf(syscall.Rename), + "Renameat": ValueOf(syscall.Renameat), + "Rmdir": ValueOf(syscall.Rmdir), + "SCM_CREDENTIALS": ValueOf(syscall.SCM_CREDENTIALS), + "SCM_RIGHTS": ValueOf(syscall.SCM_RIGHTS), + "SCM_TIMESTAMP": ValueOf(syscall.SCM_TIMESTAMP), + "SCM_TIMESTAMPING": ValueOf(syscall.SCM_TIMESTAMPING), + "SCM_TIMESTAMPNS": ValueOf(syscall.SCM_TIMESTAMPNS), + "SHUT_RD": ValueOf(syscall.SHUT_RD), + "SHUT_RDWR": ValueOf(syscall.SHUT_RDWR), + "SHUT_WR": ValueOf(syscall.SHUT_WR), + "SIGABRT": ValueOf(syscall.SIGABRT), + "SIGALRM": ValueOf(syscall.SIGALRM), + "SIGBUS": ValueOf(syscall.SIGBUS), + "SIGCHLD": ValueOf(syscall.SIGCHLD), + "SIGCLD": ValueOf(syscall.SIGCLD), + "SIGCONT": ValueOf(syscall.SIGCONT), + "SIGFPE": ValueOf(syscall.SIGFPE), + "SIGHUP": ValueOf(syscall.SIGHUP), + "SIGILL": ValueOf(syscall.SIGILL), + "SIGINT": ValueOf(syscall.SIGINT), + "SIGIO": ValueOf(syscall.SIGIO), + "SIGIOT": ValueOf(syscall.SIGIOT), + "SIGKILL": ValueOf(syscall.SIGKILL), + "SIGPIPE": ValueOf(syscall.SIGPIPE), + "SIGPOLL": ValueOf(syscall.SIGPOLL), + "SIGPROF": ValueOf(syscall.SIGPROF), + "SIGPWR": ValueOf(syscall.SIGPWR), + "SIGQUIT": ValueOf(syscall.SIGQUIT), + "SIGSEGV": ValueOf(syscall.SIGSEGV), + "SIGSTKFLT": ValueOf(syscall.SIGSTKFLT), + "SIGSTOP": ValueOf(syscall.SIGSTOP), + "SIGSYS": ValueOf(syscall.SIGSYS), + "SIGTERM": ValueOf(syscall.SIGTERM), + "SIGTRAP": ValueOf(syscall.SIGTRAP), + "SIGTSTP": ValueOf(syscall.SIGTSTP), + "SIGTTIN": ValueOf(syscall.SIGTTIN), + "SIGTTOU": ValueOf(syscall.SIGTTOU), + "SIGUNUSED": ValueOf(syscall.SIGUNUSED), + "SIGURG": ValueOf(syscall.SIGURG), + "SIGUSR1": ValueOf(syscall.SIGUSR1), + "SIGUSR2": ValueOf(syscall.SIGUSR2), + "SIGVTALRM": ValueOf(syscall.SIGVTALRM), + "SIGWINCH": ValueOf(syscall.SIGWINCH), + "SIGXCPU": ValueOf(syscall.SIGXCPU), + "SIGXFSZ": ValueOf(syscall.SIGXFSZ), + "SIOCADDDLCI": ValueOf(syscall.SIOCADDDLCI), + "SIOCADDMULTI": ValueOf(syscall.SIOCADDMULTI), + "SIOCADDRT": ValueOf(syscall.SIOCADDRT), + "SIOCATMARK": ValueOf(syscall.SIOCATMARK), + "SIOCDARP": ValueOf(syscall.SIOCDARP), + "SIOCDELDLCI": ValueOf(syscall.SIOCDELDLCI), + "SIOCDELMULTI": ValueOf(syscall.SIOCDELMULTI), + "SIOCDELRT": ValueOf(syscall.SIOCDELRT), + "SIOCDEVPRIVATE": ValueOf(syscall.SIOCDEVPRIVATE), + "SIOCDIFADDR": ValueOf(syscall.SIOCDIFADDR), + "SIOCDRARP": ValueOf(syscall.SIOCDRARP), + "SIOCGARP": ValueOf(syscall.SIOCGARP), + "SIOCGIFADDR": ValueOf(syscall.SIOCGIFADDR), + "SIOCGIFBR": ValueOf(syscall.SIOCGIFBR), + "SIOCGIFBRDADDR": ValueOf(syscall.SIOCGIFBRDADDR), + "SIOCGIFCONF": ValueOf(syscall.SIOCGIFCONF), + "SIOCGIFCOUNT": ValueOf(syscall.SIOCGIFCOUNT), + "SIOCGIFDSTADDR": ValueOf(syscall.SIOCGIFDSTADDR), + "SIOCGIFENCAP": ValueOf(syscall.SIOCGIFENCAP), + "SIOCGIFFLAGS": ValueOf(syscall.SIOCGIFFLAGS), + "SIOCGIFHWADDR": ValueOf(syscall.SIOCGIFHWADDR), + "SIOCGIFINDEX": ValueOf(syscall.SIOCGIFINDEX), + "SIOCGIFMAP": ValueOf(syscall.SIOCGIFMAP), + "SIOCGIFMEM": ValueOf(syscall.SIOCGIFMEM), + "SIOCGIFMETRIC": ValueOf(syscall.SIOCGIFMETRIC), + "SIOCGIFMTU": ValueOf(syscall.SIOCGIFMTU), + "SIOCGIFNAME": ValueOf(syscall.SIOCGIFNAME), + "SIOCGIFNETMASK": ValueOf(syscall.SIOCGIFNETMASK), + "SIOCGIFPFLAGS": ValueOf(syscall.SIOCGIFPFLAGS), + "SIOCGIFSLAVE": ValueOf(syscall.SIOCGIFSLAVE), + "SIOCGIFTXQLEN": ValueOf(syscall.SIOCGIFTXQLEN), + "SIOCGPGRP": ValueOf(syscall.SIOCGPGRP), + "SIOCGRARP": ValueOf(syscall.SIOCGRARP), + "SIOCGSTAMP": ValueOf(syscall.SIOCGSTAMP), + "SIOCGSTAMPNS": ValueOf(syscall.SIOCGSTAMPNS), + "SIOCPROTOPRIVATE": ValueOf(syscall.SIOCPROTOPRIVATE), + "SIOCRTMSG": ValueOf(syscall.SIOCRTMSG), + "SIOCSARP": ValueOf(syscall.SIOCSARP), + "SIOCSIFADDR": ValueOf(syscall.SIOCSIFADDR), + "SIOCSIFBR": ValueOf(syscall.SIOCSIFBR), + "SIOCSIFBRDADDR": ValueOf(syscall.SIOCSIFBRDADDR), + "SIOCSIFDSTADDR": ValueOf(syscall.SIOCSIFDSTADDR), + "SIOCSIFENCAP": ValueOf(syscall.SIOCSIFENCAP), + "SIOCSIFFLAGS": ValueOf(syscall.SIOCSIFFLAGS), + "SIOCSIFHWADDR": ValueOf(syscall.SIOCSIFHWADDR), + "SIOCSIFHWBROADCAST": ValueOf(syscall.SIOCSIFHWBROADCAST), + "SIOCSIFLINK": ValueOf(syscall.SIOCSIFLINK), + "SIOCSIFMAP": ValueOf(syscall.SIOCSIFMAP), + "SIOCSIFMEM": ValueOf(syscall.SIOCSIFMEM), + "SIOCSIFMETRIC": ValueOf(syscall.SIOCSIFMETRIC), + "SIOCSIFMTU": ValueOf(syscall.SIOCSIFMTU), + "SIOCSIFNAME": ValueOf(syscall.SIOCSIFNAME), + "SIOCSIFNETMASK": ValueOf(syscall.SIOCSIFNETMASK), + "SIOCSIFPFLAGS": ValueOf(syscall.SIOCSIFPFLAGS), + "SIOCSIFSLAVE": ValueOf(syscall.SIOCSIFSLAVE), + "SIOCSIFTXQLEN": ValueOf(syscall.SIOCSIFTXQLEN), + "SIOCSPGRP": ValueOf(syscall.SIOCSPGRP), + "SIOCSRARP": ValueOf(syscall.SIOCSRARP), + "SOCK_CLOEXEC": ValueOf(syscall.SOCK_CLOEXEC), + "SOCK_DCCP": ValueOf(syscall.SOCK_DCCP), + "SOCK_DGRAM": ValueOf(syscall.SOCK_DGRAM), + "SOCK_NONBLOCK": ValueOf(syscall.SOCK_NONBLOCK), + "SOCK_PACKET": ValueOf(syscall.SOCK_PACKET), + "SOCK_RAW": ValueOf(syscall.SOCK_RAW), + "SOCK_RDM": ValueOf(syscall.SOCK_RDM), + "SOCK_SEQPACKET": ValueOf(syscall.SOCK_SEQPACKET), + "SOCK_STREAM": ValueOf(syscall.SOCK_STREAM), + "SOL_AAL": ValueOf(syscall.SOL_AAL), + "SOL_ATM": ValueOf(syscall.SOL_ATM), + "SOL_DECNET": ValueOf(syscall.SOL_DECNET), + "SOL_ICMPV6": ValueOf(syscall.SOL_ICMPV6), + "SOL_IP": ValueOf(syscall.SOL_IP), + "SOL_IPV6": ValueOf(syscall.SOL_IPV6), + "SOL_IRDA": ValueOf(syscall.SOL_IRDA), + "SOL_PACKET": ValueOf(syscall.SOL_PACKET), + "SOL_RAW": ValueOf(syscall.SOL_RAW), + "SOL_SOCKET": ValueOf(syscall.SOL_SOCKET), + "SOL_TCP": ValueOf(syscall.SOL_TCP), + "SOL_X25": ValueOf(syscall.SOL_X25), + "SOMAXCONN": ValueOf(syscall.SOMAXCONN), + "SO_ACCEPTCONN": ValueOf(syscall.SO_ACCEPTCONN), + "SO_ATTACH_FILTER": ValueOf(syscall.SO_ATTACH_FILTER), + "SO_BINDTODEVICE": ValueOf(syscall.SO_BINDTODEVICE), + "SO_BROADCAST": ValueOf(syscall.SO_BROADCAST), + "SO_BSDCOMPAT": ValueOf(syscall.SO_BSDCOMPAT), + "SO_DEBUG": ValueOf(syscall.SO_DEBUG), + "SO_DETACH_FILTER": ValueOf(syscall.SO_DETACH_FILTER), + "SO_DOMAIN": ValueOf(syscall.SO_DOMAIN), + "SO_DONTROUTE": ValueOf(syscall.SO_DONTROUTE), + "SO_ERROR": ValueOf(syscall.SO_ERROR), + "SO_KEEPALIVE": ValueOf(syscall.SO_KEEPALIVE), + "SO_LINGER": ValueOf(syscall.SO_LINGER), + "SO_MARK": ValueOf(syscall.SO_MARK), + "SO_NO_CHECK": ValueOf(syscall.SO_NO_CHECK), + "SO_OOBINLINE": ValueOf(syscall.SO_OOBINLINE), + "SO_PASSCRED": ValueOf(syscall.SO_PASSCRED), + "SO_PASSSEC": ValueOf(syscall.SO_PASSSEC), + "SO_PEERCRED": ValueOf(syscall.SO_PEERCRED), + "SO_PEERNAME": ValueOf(syscall.SO_PEERNAME), + "SO_PEERSEC": ValueOf(syscall.SO_PEERSEC), + "SO_PRIORITY": ValueOf(syscall.SO_PRIORITY), + "SO_PROTOCOL": ValueOf(syscall.SO_PROTOCOL), + "SO_RCVBUF": ValueOf(syscall.SO_RCVBUF), + "SO_RCVBUFFORCE": ValueOf(syscall.SO_RCVBUFFORCE), + "SO_RCVLOWAT": ValueOf(syscall.SO_RCVLOWAT), + "SO_RCVTIMEO": ValueOf(syscall.SO_RCVTIMEO), + "SO_REUSEADDR": ValueOf(syscall.SO_REUSEADDR), + "SO_RXQ_OVFL": ValueOf(syscall.SO_RXQ_OVFL), + "SO_SECURITY_AUTHENTICATION": ValueOf(syscall.SO_SECURITY_AUTHENTICATION), + "SO_SECURITY_ENCRYPTION_NETWORK": ValueOf(syscall.SO_SECURITY_ENCRYPTION_NETWORK), + "SO_SECURITY_ENCRYPTION_TRANSPORT": ValueOf(syscall.SO_SECURITY_ENCRYPTION_TRANSPORT), + "SO_SNDBUF": ValueOf(syscall.SO_SNDBUF), + "SO_SNDBUFFORCE": ValueOf(syscall.SO_SNDBUFFORCE), + "SO_SNDLOWAT": ValueOf(syscall.SO_SNDLOWAT), + "SO_SNDTIMEO": ValueOf(syscall.SO_SNDTIMEO), + "SO_TIMESTAMP": ValueOf(syscall.SO_TIMESTAMP), + "SO_TIMESTAMPING": ValueOf(syscall.SO_TIMESTAMPING), + "SO_TIMESTAMPNS": ValueOf(syscall.SO_TIMESTAMPNS), + "SO_TYPE": ValueOf(syscall.SO_TYPE), + "SYS_ACCEPT": ValueOf(syscall.SYS_ACCEPT), + "SYS_ACCEPT4": ValueOf(syscall.SYS_ACCEPT4), + "SYS_ACCESS": ValueOf(syscall.SYS_ACCESS), + "SYS_ACCT": ValueOf(syscall.SYS_ACCT), + "SYS_ADD_KEY": ValueOf(syscall.SYS_ADD_KEY), + "SYS_ADJTIMEX": ValueOf(syscall.SYS_ADJTIMEX), + "SYS_ALARM": ValueOf(syscall.SYS_ALARM), + "SYS_ARM_FADVISE64_64": ValueOf(syscall.SYS_ARM_FADVISE64_64), + "SYS_ARM_SYNC_FILE_RANGE": ValueOf(syscall.SYS_ARM_SYNC_FILE_RANGE), + "SYS_BDFLUSH": ValueOf(syscall.SYS_BDFLUSH), + "SYS_BIND": ValueOf(syscall.SYS_BIND), + "SYS_BRK": ValueOf(syscall.SYS_BRK), + "SYS_CAPGET": ValueOf(syscall.SYS_CAPGET), + "SYS_CAPSET": ValueOf(syscall.SYS_CAPSET), + "SYS_CHDIR": ValueOf(syscall.SYS_CHDIR), + "SYS_CHMOD": ValueOf(syscall.SYS_CHMOD), + "SYS_CHOWN": ValueOf(syscall.SYS_CHOWN), + "SYS_CHOWN32": ValueOf(syscall.SYS_CHOWN32), + "SYS_CHROOT": ValueOf(syscall.SYS_CHROOT), + "SYS_CLOCK_ADJTIME": ValueOf(syscall.SYS_CLOCK_ADJTIME), + "SYS_CLOCK_GETRES": ValueOf(syscall.SYS_CLOCK_GETRES), + "SYS_CLOCK_GETTIME": ValueOf(syscall.SYS_CLOCK_GETTIME), + "SYS_CLOCK_NANOSLEEP": ValueOf(syscall.SYS_CLOCK_NANOSLEEP), + "SYS_CLOCK_SETTIME": ValueOf(syscall.SYS_CLOCK_SETTIME), + "SYS_CLONE": ValueOf(syscall.SYS_CLONE), + "SYS_CLOSE": ValueOf(syscall.SYS_CLOSE), + "SYS_CONNECT": ValueOf(syscall.SYS_CONNECT), + "SYS_CREAT": ValueOf(syscall.SYS_CREAT), + "SYS_DELETE_MODULE": ValueOf(syscall.SYS_DELETE_MODULE), + "SYS_DUP": ValueOf(syscall.SYS_DUP), + "SYS_DUP2": ValueOf(syscall.SYS_DUP2), + "SYS_DUP3": ValueOf(syscall.SYS_DUP3), + "SYS_EPOLL_CREATE": ValueOf(syscall.SYS_EPOLL_CREATE), + "SYS_EPOLL_CREATE1": ValueOf(syscall.SYS_EPOLL_CREATE1), + "SYS_EPOLL_CTL": ValueOf(syscall.SYS_EPOLL_CTL), + "SYS_EPOLL_PWAIT": ValueOf(syscall.SYS_EPOLL_PWAIT), + "SYS_EPOLL_WAIT": ValueOf(syscall.SYS_EPOLL_WAIT), + "SYS_EVENTFD": ValueOf(syscall.SYS_EVENTFD), + "SYS_EVENTFD2": ValueOf(syscall.SYS_EVENTFD2), + "SYS_EXECVE": ValueOf(syscall.SYS_EXECVE), + "SYS_EXIT": ValueOf(syscall.SYS_EXIT), + "SYS_EXIT_GROUP": ValueOf(syscall.SYS_EXIT_GROUP), + "SYS_FACCESSAT": ValueOf(syscall.SYS_FACCESSAT), + "SYS_FALLOCATE": ValueOf(syscall.SYS_FALLOCATE), + "SYS_FANOTIFY_INIT": ValueOf(syscall.SYS_FANOTIFY_INIT), + "SYS_FANOTIFY_MARK": ValueOf(syscall.SYS_FANOTIFY_MARK), + "SYS_FCHDIR": ValueOf(syscall.SYS_FCHDIR), + "SYS_FCHMOD": ValueOf(syscall.SYS_FCHMOD), + "SYS_FCHMODAT": ValueOf(syscall.SYS_FCHMODAT), + "SYS_FCHOWN": ValueOf(syscall.SYS_FCHOWN), + "SYS_FCHOWN32": ValueOf(syscall.SYS_FCHOWN32), + "SYS_FCHOWNAT": ValueOf(syscall.SYS_FCHOWNAT), + "SYS_FCNTL": ValueOf(syscall.SYS_FCNTL), + "SYS_FCNTL64": ValueOf(syscall.SYS_FCNTL64), + "SYS_FDATASYNC": ValueOf(syscall.SYS_FDATASYNC), + "SYS_FGETXATTR": ValueOf(syscall.SYS_FGETXATTR), + "SYS_FLISTXATTR": ValueOf(syscall.SYS_FLISTXATTR), + "SYS_FLOCK": ValueOf(syscall.SYS_FLOCK), + "SYS_FORK": ValueOf(syscall.SYS_FORK), + "SYS_FREMOVEXATTR": ValueOf(syscall.SYS_FREMOVEXATTR), + "SYS_FSETXATTR": ValueOf(syscall.SYS_FSETXATTR), + "SYS_FSTAT": ValueOf(syscall.SYS_FSTAT), + "SYS_FSTAT64": ValueOf(syscall.SYS_FSTAT64), + "SYS_FSTATAT64": ValueOf(syscall.SYS_FSTATAT64), + "SYS_FSTATFS": ValueOf(syscall.SYS_FSTATFS), + "SYS_FSTATFS64": ValueOf(syscall.SYS_FSTATFS64), + "SYS_FSYNC": ValueOf(syscall.SYS_FSYNC), + "SYS_FTRUNCATE": ValueOf(syscall.SYS_FTRUNCATE), + "SYS_FTRUNCATE64": ValueOf(syscall.SYS_FTRUNCATE64), + "SYS_FUTEX": ValueOf(syscall.SYS_FUTEX), + "SYS_FUTIMESAT": ValueOf(syscall.SYS_FUTIMESAT), + "SYS_GETCPU": ValueOf(syscall.SYS_GETCPU), + "SYS_GETCWD": ValueOf(syscall.SYS_GETCWD), + "SYS_GETDENTS": ValueOf(syscall.SYS_GETDENTS), + "SYS_GETDENTS64": ValueOf(syscall.SYS_GETDENTS64), + "SYS_GETEGID": ValueOf(syscall.SYS_GETEGID), + "SYS_GETEGID32": ValueOf(syscall.SYS_GETEGID32), + "SYS_GETEUID": ValueOf(syscall.SYS_GETEUID), + "SYS_GETEUID32": ValueOf(syscall.SYS_GETEUID32), + "SYS_GETGID": ValueOf(syscall.SYS_GETGID), + "SYS_GETGID32": ValueOf(syscall.SYS_GETGID32), + "SYS_GETGROUPS": ValueOf(syscall.SYS_GETGROUPS), + "SYS_GETGROUPS32": ValueOf(syscall.SYS_GETGROUPS32), + "SYS_GETITIMER": ValueOf(syscall.SYS_GETITIMER), + "SYS_GETPEERNAME": ValueOf(syscall.SYS_GETPEERNAME), + "SYS_GETPGID": ValueOf(syscall.SYS_GETPGID), + "SYS_GETPGRP": ValueOf(syscall.SYS_GETPGRP), + "SYS_GETPID": ValueOf(syscall.SYS_GETPID), + "SYS_GETPPID": ValueOf(syscall.SYS_GETPPID), + "SYS_GETPRIORITY": ValueOf(syscall.SYS_GETPRIORITY), + "SYS_GETRESGID": ValueOf(syscall.SYS_GETRESGID), + "SYS_GETRESGID32": ValueOf(syscall.SYS_GETRESGID32), + "SYS_GETRESUID": ValueOf(syscall.SYS_GETRESUID), + "SYS_GETRESUID32": ValueOf(syscall.SYS_GETRESUID32), + "SYS_GETRLIMIT": ValueOf(syscall.SYS_GETRLIMIT), + "SYS_GETRUSAGE": ValueOf(syscall.SYS_GETRUSAGE), + "SYS_GETSID": ValueOf(syscall.SYS_GETSID), + "SYS_GETSOCKNAME": ValueOf(syscall.SYS_GETSOCKNAME), + "SYS_GETSOCKOPT": ValueOf(syscall.SYS_GETSOCKOPT), + "SYS_GETTID": ValueOf(syscall.SYS_GETTID), + "SYS_GETTIMEOFDAY": ValueOf(syscall.SYS_GETTIMEOFDAY), + "SYS_GETUID": ValueOf(syscall.SYS_GETUID), + "SYS_GETUID32": ValueOf(syscall.SYS_GETUID32), + "SYS_GETXATTR": ValueOf(syscall.SYS_GETXATTR), + "SYS_GET_MEMPOLICY": ValueOf(syscall.SYS_GET_MEMPOLICY), + "SYS_GET_ROBUST_LIST": ValueOf(syscall.SYS_GET_ROBUST_LIST), + "SYS_INIT_MODULE": ValueOf(syscall.SYS_INIT_MODULE), + "SYS_INOTIFY_ADD_WATCH": ValueOf(syscall.SYS_INOTIFY_ADD_WATCH), + "SYS_INOTIFY_INIT": ValueOf(syscall.SYS_INOTIFY_INIT), + "SYS_INOTIFY_INIT1": ValueOf(syscall.SYS_INOTIFY_INIT1), + "SYS_INOTIFY_RM_WATCH": ValueOf(syscall.SYS_INOTIFY_RM_WATCH), + "SYS_IOCTL": ValueOf(syscall.SYS_IOCTL), + "SYS_IOPRIO_GET": ValueOf(syscall.SYS_IOPRIO_GET), + "SYS_IOPRIO_SET": ValueOf(syscall.SYS_IOPRIO_SET), + "SYS_IO_CANCEL": ValueOf(syscall.SYS_IO_CANCEL), + "SYS_IO_DESTROY": ValueOf(syscall.SYS_IO_DESTROY), + "SYS_IO_GETEVENTS": ValueOf(syscall.SYS_IO_GETEVENTS), + "SYS_IO_SETUP": ValueOf(syscall.SYS_IO_SETUP), + "SYS_IO_SUBMIT": ValueOf(syscall.SYS_IO_SUBMIT), + "SYS_IPC": ValueOf(syscall.SYS_IPC), + "SYS_KEXEC_LOAD": ValueOf(syscall.SYS_KEXEC_LOAD), + "SYS_KEYCTL": ValueOf(syscall.SYS_KEYCTL), + "SYS_KILL": ValueOf(syscall.SYS_KILL), + "SYS_LCHOWN": ValueOf(syscall.SYS_LCHOWN), + "SYS_LCHOWN32": ValueOf(syscall.SYS_LCHOWN32), + "SYS_LGETXATTR": ValueOf(syscall.SYS_LGETXATTR), + "SYS_LINK": ValueOf(syscall.SYS_LINK), + "SYS_LINKAT": ValueOf(syscall.SYS_LINKAT), + "SYS_LISTEN": ValueOf(syscall.SYS_LISTEN), + "SYS_LISTXATTR": ValueOf(syscall.SYS_LISTXATTR), + "SYS_LLISTXATTR": ValueOf(syscall.SYS_LLISTXATTR), + "SYS_LOOKUP_DCOOKIE": ValueOf(syscall.SYS_LOOKUP_DCOOKIE), + "SYS_LREMOVEXATTR": ValueOf(syscall.SYS_LREMOVEXATTR), + "SYS_LSEEK": ValueOf(syscall.SYS_LSEEK), + "SYS_LSETXATTR": ValueOf(syscall.SYS_LSETXATTR), + "SYS_LSTAT": ValueOf(syscall.SYS_LSTAT), + "SYS_LSTAT64": ValueOf(syscall.SYS_LSTAT64), + "SYS_MADVISE": ValueOf(syscall.SYS_MADVISE), + "SYS_MBIND": ValueOf(syscall.SYS_MBIND), + "SYS_MINCORE": ValueOf(syscall.SYS_MINCORE), + "SYS_MKDIR": ValueOf(syscall.SYS_MKDIR), + "SYS_MKDIRAT": ValueOf(syscall.SYS_MKDIRAT), + "SYS_MKNOD": ValueOf(syscall.SYS_MKNOD), + "SYS_MKNODAT": ValueOf(syscall.SYS_MKNODAT), + "SYS_MLOCK": ValueOf(syscall.SYS_MLOCK), + "SYS_MLOCKALL": ValueOf(syscall.SYS_MLOCKALL), + "SYS_MMAP": ValueOf(syscall.SYS_MMAP), + "SYS_MMAP2": ValueOf(syscall.SYS_MMAP2), + "SYS_MOUNT": ValueOf(syscall.SYS_MOUNT), + "SYS_MOVE_PAGES": ValueOf(syscall.SYS_MOVE_PAGES), + "SYS_MPROTECT": ValueOf(syscall.SYS_MPROTECT), + "SYS_MQ_GETSETATTR": ValueOf(syscall.SYS_MQ_GETSETATTR), + "SYS_MQ_NOTIFY": ValueOf(syscall.SYS_MQ_NOTIFY), + "SYS_MQ_OPEN": ValueOf(syscall.SYS_MQ_OPEN), + "SYS_MQ_TIMEDRECEIVE": ValueOf(syscall.SYS_MQ_TIMEDRECEIVE), + "SYS_MQ_TIMEDSEND": ValueOf(syscall.SYS_MQ_TIMEDSEND), + "SYS_MQ_UNLINK": ValueOf(syscall.SYS_MQ_UNLINK), + "SYS_MREMAP": ValueOf(syscall.SYS_MREMAP), + "SYS_MSGCTL": ValueOf(syscall.SYS_MSGCTL), + "SYS_MSGGET": ValueOf(syscall.SYS_MSGGET), + "SYS_MSGRCV": ValueOf(syscall.SYS_MSGRCV), + "SYS_MSGSND": ValueOf(syscall.SYS_MSGSND), + "SYS_MSYNC": ValueOf(syscall.SYS_MSYNC), + "SYS_MUNLOCK": ValueOf(syscall.SYS_MUNLOCK), + "SYS_MUNLOCKALL": ValueOf(syscall.SYS_MUNLOCKALL), + "SYS_MUNMAP": ValueOf(syscall.SYS_MUNMAP), + "SYS_NAME_TO_HANDLE_AT": ValueOf(syscall.SYS_NAME_TO_HANDLE_AT), + "SYS_NANOSLEEP": ValueOf(syscall.SYS_NANOSLEEP), + "SYS_NFSSERVCTL": ValueOf(syscall.SYS_NFSSERVCTL), + "SYS_NICE": ValueOf(syscall.SYS_NICE), + "SYS_OABI_SYSCALL_BASE": ValueOf(syscall.SYS_OABI_SYSCALL_BASE), + "SYS_OPEN": ValueOf(syscall.SYS_OPEN), + "SYS_OPENAT": ValueOf(syscall.SYS_OPENAT), + "SYS_OPEN_BY_HANDLE_AT": ValueOf(syscall.SYS_OPEN_BY_HANDLE_AT), + "SYS_PAUSE": ValueOf(syscall.SYS_PAUSE), + "SYS_PCICONFIG_IOBASE": ValueOf(syscall.SYS_PCICONFIG_IOBASE), + "SYS_PCICONFIG_READ": ValueOf(syscall.SYS_PCICONFIG_READ), + "SYS_PCICONFIG_WRITE": ValueOf(syscall.SYS_PCICONFIG_WRITE), + "SYS_PERF_EVENT_OPEN": ValueOf(syscall.SYS_PERF_EVENT_OPEN), + "SYS_PERSONALITY": ValueOf(syscall.SYS_PERSONALITY), + "SYS_PIPE": ValueOf(syscall.SYS_PIPE), + "SYS_PIPE2": ValueOf(syscall.SYS_PIPE2), + "SYS_PIVOT_ROOT": ValueOf(syscall.SYS_PIVOT_ROOT), + "SYS_POLL": ValueOf(syscall.SYS_POLL), + "SYS_PPOLL": ValueOf(syscall.SYS_PPOLL), + "SYS_PRCTL": ValueOf(syscall.SYS_PRCTL), + "SYS_PREAD64": ValueOf(syscall.SYS_PREAD64), + "SYS_PREADV": ValueOf(syscall.SYS_PREADV), + "SYS_PRLIMIT64": ValueOf(syscall.SYS_PRLIMIT64), + "SYS_PROCESS_VM_READV": ValueOf(syscall.SYS_PROCESS_VM_READV), + "SYS_PROCESS_VM_WRITEV": ValueOf(syscall.SYS_PROCESS_VM_WRITEV), + "SYS_PSELECT6": ValueOf(syscall.SYS_PSELECT6), + "SYS_PTRACE": ValueOf(syscall.SYS_PTRACE), + "SYS_PWRITE64": ValueOf(syscall.SYS_PWRITE64), + "SYS_PWRITEV": ValueOf(syscall.SYS_PWRITEV), + "SYS_QUOTACTL": ValueOf(syscall.SYS_QUOTACTL), + "SYS_READ": ValueOf(syscall.SYS_READ), + "SYS_READAHEAD": ValueOf(syscall.SYS_READAHEAD), + "SYS_READDIR": ValueOf(syscall.SYS_READDIR), + "SYS_READLINK": ValueOf(syscall.SYS_READLINK), + "SYS_READLINKAT": ValueOf(syscall.SYS_READLINKAT), + "SYS_READV": ValueOf(syscall.SYS_READV), + "SYS_REBOOT": ValueOf(syscall.SYS_REBOOT), + "SYS_RECV": ValueOf(syscall.SYS_RECV), + "SYS_RECVFROM": ValueOf(syscall.SYS_RECVFROM), + "SYS_RECVMMSG": ValueOf(syscall.SYS_RECVMMSG), + "SYS_RECVMSG": ValueOf(syscall.SYS_RECVMSG), + "SYS_REMAP_FILE_PAGES": ValueOf(syscall.SYS_REMAP_FILE_PAGES), + "SYS_REMOVEXATTR": ValueOf(syscall.SYS_REMOVEXATTR), + "SYS_RENAME": ValueOf(syscall.SYS_RENAME), + "SYS_RENAMEAT": ValueOf(syscall.SYS_RENAMEAT), + "SYS_REQUEST_KEY": ValueOf(syscall.SYS_REQUEST_KEY), + "SYS_RESTART_SYSCALL": ValueOf(syscall.SYS_RESTART_SYSCALL), + "SYS_RMDIR": ValueOf(syscall.SYS_RMDIR), + "SYS_RT_SIGACTION": ValueOf(syscall.SYS_RT_SIGACTION), + "SYS_RT_SIGPENDING": ValueOf(syscall.SYS_RT_SIGPENDING), + "SYS_RT_SIGPROCMASK": ValueOf(syscall.SYS_RT_SIGPROCMASK), + "SYS_RT_SIGQUEUEINFO": ValueOf(syscall.SYS_RT_SIGQUEUEINFO), + "SYS_RT_SIGRETURN": ValueOf(syscall.SYS_RT_SIGRETURN), + "SYS_RT_SIGSUSPEND": ValueOf(syscall.SYS_RT_SIGSUSPEND), + "SYS_RT_SIGTIMEDWAIT": ValueOf(syscall.SYS_RT_SIGTIMEDWAIT), + "SYS_RT_TGSIGQUEUEINFO": ValueOf(syscall.SYS_RT_TGSIGQUEUEINFO), + "SYS_SCHED_GETAFFINITY": ValueOf(syscall.SYS_SCHED_GETAFFINITY), + "SYS_SCHED_GETPARAM": ValueOf(syscall.SYS_SCHED_GETPARAM), + "SYS_SCHED_GETSCHEDULER": ValueOf(syscall.SYS_SCHED_GETSCHEDULER), + "SYS_SCHED_GET_PRIORITY_MAX": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MAX), + "SYS_SCHED_GET_PRIORITY_MIN": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MIN), + "SYS_SCHED_RR_GET_INTERVAL": ValueOf(syscall.SYS_SCHED_RR_GET_INTERVAL), + "SYS_SCHED_SETAFFINITY": ValueOf(syscall.SYS_SCHED_SETAFFINITY), + "SYS_SCHED_SETPARAM": ValueOf(syscall.SYS_SCHED_SETPARAM), + "SYS_SCHED_SETSCHEDULER": ValueOf(syscall.SYS_SCHED_SETSCHEDULER), + "SYS_SCHED_YIELD": ValueOf(syscall.SYS_SCHED_YIELD), + "SYS_SELECT": ValueOf(syscall.SYS_SELECT), + "SYS_SEMCTL": ValueOf(syscall.SYS_SEMCTL), + "SYS_SEMGET": ValueOf(syscall.SYS_SEMGET), + "SYS_SEMOP": ValueOf(syscall.SYS_SEMOP), + "SYS_SEMTIMEDOP": ValueOf(syscall.SYS_SEMTIMEDOP), + "SYS_SEND": ValueOf(syscall.SYS_SEND), + "SYS_SENDFILE": ValueOf(syscall.SYS_SENDFILE), + "SYS_SENDFILE64": ValueOf(syscall.SYS_SENDFILE64), + "SYS_SENDMMSG": ValueOf(syscall.SYS_SENDMMSG), + "SYS_SENDMSG": ValueOf(syscall.SYS_SENDMSG), + "SYS_SENDTO": ValueOf(syscall.SYS_SENDTO), + "SYS_SETDOMAINNAME": ValueOf(syscall.SYS_SETDOMAINNAME), + "SYS_SETFSGID": ValueOf(syscall.SYS_SETFSGID), + "SYS_SETFSGID32": ValueOf(syscall.SYS_SETFSGID32), + "SYS_SETFSUID": ValueOf(syscall.SYS_SETFSUID), + "SYS_SETFSUID32": ValueOf(syscall.SYS_SETFSUID32), + "SYS_SETGID": ValueOf(syscall.SYS_SETGID), + "SYS_SETGID32": ValueOf(syscall.SYS_SETGID32), + "SYS_SETGROUPS": ValueOf(syscall.SYS_SETGROUPS), + "SYS_SETGROUPS32": ValueOf(syscall.SYS_SETGROUPS32), + "SYS_SETHOSTNAME": ValueOf(syscall.SYS_SETHOSTNAME), + "SYS_SETITIMER": ValueOf(syscall.SYS_SETITIMER), + "SYS_SETNS": ValueOf(syscall.SYS_SETNS), + "SYS_SETPGID": ValueOf(syscall.SYS_SETPGID), + "SYS_SETPRIORITY": ValueOf(syscall.SYS_SETPRIORITY), + "SYS_SETREGID": ValueOf(syscall.SYS_SETREGID), + "SYS_SETREGID32": ValueOf(syscall.SYS_SETREGID32), + "SYS_SETRESGID": ValueOf(syscall.SYS_SETRESGID), + "SYS_SETRESGID32": ValueOf(syscall.SYS_SETRESGID32), + "SYS_SETRESUID": ValueOf(syscall.SYS_SETRESUID), + "SYS_SETRESUID32": ValueOf(syscall.SYS_SETRESUID32), + "SYS_SETREUID": ValueOf(syscall.SYS_SETREUID), + "SYS_SETREUID32": ValueOf(syscall.SYS_SETREUID32), + "SYS_SETRLIMIT": ValueOf(syscall.SYS_SETRLIMIT), + "SYS_SETSID": ValueOf(syscall.SYS_SETSID), + "SYS_SETSOCKOPT": ValueOf(syscall.SYS_SETSOCKOPT), + "SYS_SETTIMEOFDAY": ValueOf(syscall.SYS_SETTIMEOFDAY), + "SYS_SETUID": ValueOf(syscall.SYS_SETUID), + "SYS_SETUID32": ValueOf(syscall.SYS_SETUID32), + "SYS_SETXATTR": ValueOf(syscall.SYS_SETXATTR), + "SYS_SET_MEMPOLICY": ValueOf(syscall.SYS_SET_MEMPOLICY), + "SYS_SET_ROBUST_LIST": ValueOf(syscall.SYS_SET_ROBUST_LIST), + "SYS_SET_TID_ADDRESS": ValueOf(syscall.SYS_SET_TID_ADDRESS), + "SYS_SHMAT": ValueOf(syscall.SYS_SHMAT), + "SYS_SHMCTL": ValueOf(syscall.SYS_SHMCTL), + "SYS_SHMDT": ValueOf(syscall.SYS_SHMDT), + "SYS_SHMGET": ValueOf(syscall.SYS_SHMGET), + "SYS_SHUTDOWN": ValueOf(syscall.SYS_SHUTDOWN), + "SYS_SIGACTION": ValueOf(syscall.SYS_SIGACTION), + "SYS_SIGALTSTACK": ValueOf(syscall.SYS_SIGALTSTACK), + "SYS_SIGNALFD": ValueOf(syscall.SYS_SIGNALFD), + "SYS_SIGNALFD4": ValueOf(syscall.SYS_SIGNALFD4), + "SYS_SIGPENDING": ValueOf(syscall.SYS_SIGPENDING), + "SYS_SIGPROCMASK": ValueOf(syscall.SYS_SIGPROCMASK), + "SYS_SIGRETURN": ValueOf(syscall.SYS_SIGRETURN), + "SYS_SIGSUSPEND": ValueOf(syscall.SYS_SIGSUSPEND), + "SYS_SOCKET": ValueOf(syscall.SYS_SOCKET), + "SYS_SOCKETCALL": ValueOf(syscall.SYS_SOCKETCALL), + "SYS_SOCKETPAIR": ValueOf(syscall.SYS_SOCKETPAIR), + "SYS_SPLICE": ValueOf(syscall.SYS_SPLICE), + "SYS_STAT": ValueOf(syscall.SYS_STAT), + "SYS_STAT64": ValueOf(syscall.SYS_STAT64), + "SYS_STATFS": ValueOf(syscall.SYS_STATFS), + "SYS_STATFS64": ValueOf(syscall.SYS_STATFS64), + "SYS_STIME": ValueOf(syscall.SYS_STIME), + "SYS_SWAPOFF": ValueOf(syscall.SYS_SWAPOFF), + "SYS_SWAPON": ValueOf(syscall.SYS_SWAPON), + "SYS_SYMLINK": ValueOf(syscall.SYS_SYMLINK), + "SYS_SYMLINKAT": ValueOf(syscall.SYS_SYMLINKAT), + "SYS_SYNC": ValueOf(syscall.SYS_SYNC), + "SYS_SYNCFS": ValueOf(syscall.SYS_SYNCFS), + "SYS_SYSCALL": ValueOf(syscall.SYS_SYSCALL), + "SYS_SYSCALL_BASE": ValueOf(syscall.SYS_SYSCALL_BASE), + "SYS_SYSFS": ValueOf(syscall.SYS_SYSFS), + "SYS_SYSINFO": ValueOf(syscall.SYS_SYSINFO), + "SYS_SYSLOG": ValueOf(syscall.SYS_SYSLOG), + "SYS_TEE": ValueOf(syscall.SYS_TEE), + "SYS_TGKILL": ValueOf(syscall.SYS_TGKILL), + "SYS_TIME": ValueOf(syscall.SYS_TIME), + "SYS_TIMERFD_CREATE": ValueOf(syscall.SYS_TIMERFD_CREATE), + "SYS_TIMERFD_GETTIME": ValueOf(syscall.SYS_TIMERFD_GETTIME), + "SYS_TIMERFD_SETTIME": ValueOf(syscall.SYS_TIMERFD_SETTIME), + "SYS_TIMER_CREATE": ValueOf(syscall.SYS_TIMER_CREATE), + "SYS_TIMER_DELETE": ValueOf(syscall.SYS_TIMER_DELETE), + "SYS_TIMER_GETOVERRUN": ValueOf(syscall.SYS_TIMER_GETOVERRUN), + "SYS_TIMER_GETTIME": ValueOf(syscall.SYS_TIMER_GETTIME), + "SYS_TIMER_SETTIME": ValueOf(syscall.SYS_TIMER_SETTIME), + "SYS_TIMES": ValueOf(syscall.SYS_TIMES), + "SYS_TKILL": ValueOf(syscall.SYS_TKILL), + "SYS_TRUNCATE": ValueOf(syscall.SYS_TRUNCATE), + "SYS_TRUNCATE64": ValueOf(syscall.SYS_TRUNCATE64), + "SYS_UGETRLIMIT": ValueOf(syscall.SYS_UGETRLIMIT), + "SYS_UMASK": ValueOf(syscall.SYS_UMASK), + "SYS_UMOUNT": ValueOf(syscall.SYS_UMOUNT), + "SYS_UMOUNT2": ValueOf(syscall.SYS_UMOUNT2), + "SYS_UNAME": ValueOf(syscall.SYS_UNAME), + "SYS_UNLINK": ValueOf(syscall.SYS_UNLINK), + "SYS_UNLINKAT": ValueOf(syscall.SYS_UNLINKAT), + "SYS_UNSHARE": ValueOf(syscall.SYS_UNSHARE), + "SYS_USELIB": ValueOf(syscall.SYS_USELIB), + "SYS_USTAT": ValueOf(syscall.SYS_USTAT), + "SYS_UTIME": ValueOf(syscall.SYS_UTIME), + "SYS_UTIMENSAT": ValueOf(syscall.SYS_UTIMENSAT), + "SYS_UTIMES": ValueOf(syscall.SYS_UTIMES), + "SYS_VFORK": ValueOf(syscall.SYS_VFORK), + "SYS_VHANGUP": ValueOf(syscall.SYS_VHANGUP), + "SYS_VMSPLICE": ValueOf(syscall.SYS_VMSPLICE), + "SYS_VSERVER": ValueOf(syscall.SYS_VSERVER), + "SYS_WAIT4": ValueOf(syscall.SYS_WAIT4), + "SYS_WAITID": ValueOf(syscall.SYS_WAITID), + "SYS_WRITE": ValueOf(syscall.SYS_WRITE), + "SYS_WRITEV": ValueOf(syscall.SYS_WRITEV), + "SYS__LLSEEK": ValueOf(syscall.SYS__LLSEEK), + "SYS__NEWSELECT": ValueOf(syscall.SYS__NEWSELECT), + "SYS__SYSCTL": ValueOf(syscall.SYS__SYSCTL), + "S_BLKSIZE": ValueOf(syscall.S_BLKSIZE), + "S_IEXEC": ValueOf(syscall.S_IEXEC), + "S_IFBLK": ValueOf(syscall.S_IFBLK), + "S_IFCHR": ValueOf(syscall.S_IFCHR), + "S_IFDIR": ValueOf(syscall.S_IFDIR), + "S_IFIFO": ValueOf(syscall.S_IFIFO), + "S_IFLNK": ValueOf(syscall.S_IFLNK), + "S_IFMT": ValueOf(syscall.S_IFMT), + "S_IFREG": ValueOf(syscall.S_IFREG), + "S_IFSOCK": ValueOf(syscall.S_IFSOCK), + "S_IREAD": ValueOf(syscall.S_IREAD), + "S_IRGRP": ValueOf(syscall.S_IRGRP), + "S_IROTH": ValueOf(syscall.S_IROTH), + "S_IRUSR": ValueOf(syscall.S_IRUSR), + "S_IRWXG": ValueOf(syscall.S_IRWXG), + "S_IRWXO": ValueOf(syscall.S_IRWXO), + "S_IRWXU": ValueOf(syscall.S_IRWXU), + "S_ISGID": ValueOf(syscall.S_ISGID), + "S_ISUID": ValueOf(syscall.S_ISUID), + "S_ISVTX": ValueOf(syscall.S_ISVTX), + "S_IWGRP": ValueOf(syscall.S_IWGRP), + "S_IWOTH": ValueOf(syscall.S_IWOTH), + "S_IWRITE": ValueOf(syscall.S_IWRITE), + "S_IWUSR": ValueOf(syscall.S_IWUSR), + "S_IXGRP": ValueOf(syscall.S_IXGRP), + "S_IXOTH": ValueOf(syscall.S_IXOTH), + "S_IXUSR": ValueOf(syscall.S_IXUSR), + "Seek": ValueOf(syscall.Seek), + "Select": ValueOf(syscall.Select), + "Sendfile": ValueOf(syscall.Sendfile), + "Sendmsg": ValueOf(syscall.Sendmsg), + "SendmsgN": ValueOf(syscall.SendmsgN), + "Sendto": ValueOf(syscall.Sendto), + "SetLsfPromisc": ValueOf(syscall.SetLsfPromisc), + "SetNonblock": ValueOf(syscall.SetNonblock), + "Setdomainname": ValueOf(syscall.Setdomainname), + "Setenv": ValueOf(syscall.Setenv), + "Setfsgid": ValueOf(syscall.Setfsgid), + "Setfsuid": ValueOf(syscall.Setfsuid), + "Setgid": ValueOf(syscall.Setgid), + "Setgroups": ValueOf(syscall.Setgroups), + "Sethostname": ValueOf(syscall.Sethostname), + "Setpgid": ValueOf(syscall.Setpgid), + "Setpriority": ValueOf(syscall.Setpriority), + "Setregid": ValueOf(syscall.Setregid), + "Setresgid": ValueOf(syscall.Setresgid), + "Setresuid": ValueOf(syscall.Setresuid), + "Setreuid": ValueOf(syscall.Setreuid), + "Setrlimit": ValueOf(syscall.Setrlimit), + "Setsid": ValueOf(syscall.Setsid), + "SetsockoptByte": ValueOf(syscall.SetsockoptByte), + "SetsockoptICMPv6Filter": ValueOf(syscall.SetsockoptICMPv6Filter), + "SetsockoptIPMreq": ValueOf(syscall.SetsockoptIPMreq), + "SetsockoptIPMreqn": ValueOf(syscall.SetsockoptIPMreqn), + "SetsockoptIPv6Mreq": ValueOf(syscall.SetsockoptIPv6Mreq), + "SetsockoptInet4Addr": ValueOf(syscall.SetsockoptInet4Addr), + "SetsockoptInt": ValueOf(syscall.SetsockoptInt), + "SetsockoptLinger": ValueOf(syscall.SetsockoptLinger), + "SetsockoptString": ValueOf(syscall.SetsockoptString), + "SetsockoptTimeval": ValueOf(syscall.SetsockoptTimeval), + "Settimeofday": ValueOf(syscall.Settimeofday), + "Setuid": ValueOf(syscall.Setuid), + "Setxattr": ValueOf(syscall.Setxattr), + "Shutdown": ValueOf(syscall.Shutdown), + "SizeofCmsghdr": ValueOf(syscall.SizeofCmsghdr), + "SizeofICMPv6Filter": ValueOf(syscall.SizeofICMPv6Filter), + "SizeofIPMreq": ValueOf(syscall.SizeofIPMreq), + "SizeofIPMreqn": ValueOf(syscall.SizeofIPMreqn), + "SizeofIPv6MTUInfo": ValueOf(syscall.SizeofIPv6MTUInfo), + "SizeofIPv6Mreq": ValueOf(syscall.SizeofIPv6Mreq), + "SizeofIfAddrmsg": ValueOf(syscall.SizeofIfAddrmsg), + "SizeofIfInfomsg": ValueOf(syscall.SizeofIfInfomsg), + "SizeofInet4Pktinfo": ValueOf(syscall.SizeofInet4Pktinfo), + "SizeofInet6Pktinfo": ValueOf(syscall.SizeofInet6Pktinfo), + "SizeofInotifyEvent": ValueOf(syscall.SizeofInotifyEvent), + "SizeofLinger": ValueOf(syscall.SizeofLinger), + "SizeofMsghdr": ValueOf(syscall.SizeofMsghdr), + "SizeofNlAttr": ValueOf(syscall.SizeofNlAttr), + "SizeofNlMsgerr": ValueOf(syscall.SizeofNlMsgerr), + "SizeofNlMsghdr": ValueOf(syscall.SizeofNlMsghdr), + "SizeofRtAttr": ValueOf(syscall.SizeofRtAttr), + "SizeofRtGenmsg": ValueOf(syscall.SizeofRtGenmsg), + "SizeofRtMsg": ValueOf(syscall.SizeofRtMsg), + "SizeofRtNexthop": ValueOf(syscall.SizeofRtNexthop), + "SizeofSockFilter": ValueOf(syscall.SizeofSockFilter), + "SizeofSockFprog": ValueOf(syscall.SizeofSockFprog), + "SizeofSockaddrAny": ValueOf(syscall.SizeofSockaddrAny), + "SizeofSockaddrInet4": ValueOf(syscall.SizeofSockaddrInet4), + "SizeofSockaddrInet6": ValueOf(syscall.SizeofSockaddrInet6), + "SizeofSockaddrLinklayer": ValueOf(syscall.SizeofSockaddrLinklayer), + "SizeofSockaddrNetlink": ValueOf(syscall.SizeofSockaddrNetlink), + "SizeofSockaddrUnix": ValueOf(syscall.SizeofSockaddrUnix), + "SizeofTCPInfo": ValueOf(syscall.SizeofTCPInfo), + "SizeofUcred": ValueOf(syscall.SizeofUcred), + "SlicePtrFromStrings": ValueOf(syscall.SlicePtrFromStrings), + "Socket": ValueOf(syscall.Socket), + "SocketDisableIPv6": ValueOf(&syscall.SocketDisableIPv6).Elem(), + "Socketpair": ValueOf(syscall.Socketpair), + "Splice": ValueOf(syscall.Splice), + "StartProcess": ValueOf(syscall.StartProcess), + "Stat": ValueOf(syscall.Stat), + "Statfs": ValueOf(syscall.Statfs), + "Stderr": ValueOf(&syscall.Stderr).Elem(), + "Stdin": ValueOf(&syscall.Stdin).Elem(), + "Stdout": ValueOf(&syscall.Stdout).Elem(), + "StringBytePtr": ValueOf(syscall.StringBytePtr), + "StringByteSlice": ValueOf(syscall.StringByteSlice), + "StringSlicePtr": ValueOf(syscall.StringSlicePtr), + "Symlink": ValueOf(syscall.Symlink), + "Sync": ValueOf(syscall.Sync), + "Syscall": ValueOf(syscall.Syscall), + "Syscall6": ValueOf(syscall.Syscall6), + "Sysinfo": ValueOf(syscall.Sysinfo), + "TCGETS": ValueOf(syscall.TCGETS), + "TCIFLUSH": ValueOf(syscall.TCIFLUSH), + "TCIOFLUSH": ValueOf(syscall.TCIOFLUSH), + "TCOFLUSH": ValueOf(syscall.TCOFLUSH), + "TCP_CONGESTION": ValueOf(syscall.TCP_CONGESTION), + "TCP_CORK": ValueOf(syscall.TCP_CORK), + "TCP_DEFER_ACCEPT": ValueOf(syscall.TCP_DEFER_ACCEPT), + "TCP_INFO": ValueOf(syscall.TCP_INFO), + "TCP_KEEPCNT": ValueOf(syscall.TCP_KEEPCNT), + "TCP_KEEPIDLE": ValueOf(syscall.TCP_KEEPIDLE), + "TCP_KEEPINTVL": ValueOf(syscall.TCP_KEEPINTVL), + "TCP_LINGER2": ValueOf(syscall.TCP_LINGER2), + "TCP_MAXSEG": ValueOf(syscall.TCP_MAXSEG), + "TCP_MAXWIN": ValueOf(syscall.TCP_MAXWIN), + "TCP_MAX_WINSHIFT": ValueOf(syscall.TCP_MAX_WINSHIFT), + "TCP_MD5SIG": ValueOf(syscall.TCP_MD5SIG), + "TCP_MD5SIG_MAXKEYLEN": ValueOf(syscall.TCP_MD5SIG_MAXKEYLEN), + "TCP_MSS": ValueOf(syscall.TCP_MSS), + "TCP_NODELAY": ValueOf(syscall.TCP_NODELAY), + "TCP_QUICKACK": ValueOf(syscall.TCP_QUICKACK), + "TCP_SYNCNT": ValueOf(syscall.TCP_SYNCNT), + "TCP_WINDOW_CLAMP": ValueOf(syscall.TCP_WINDOW_CLAMP), + "TCSETS": ValueOf(syscall.TCSETS), + "TIOCCBRK": ValueOf(syscall.TIOCCBRK), + "TIOCCONS": ValueOf(syscall.TIOCCONS), + "TIOCEXCL": ValueOf(syscall.TIOCEXCL), + "TIOCGDEV": ValueOf(uint64(syscall.TIOCGDEV)), + "TIOCGETD": ValueOf(syscall.TIOCGETD), + "TIOCGICOUNT": ValueOf(syscall.TIOCGICOUNT), + "TIOCGLCKTRMIOS": ValueOf(syscall.TIOCGLCKTRMIOS), + "TIOCGPGRP": ValueOf(syscall.TIOCGPGRP), + "TIOCGPTN": ValueOf(uint64(syscall.TIOCGPTN)), + "TIOCGRS485": ValueOf(syscall.TIOCGRS485), + "TIOCGSERIAL": ValueOf(syscall.TIOCGSERIAL), + "TIOCGSID": ValueOf(syscall.TIOCGSID), + "TIOCGSOFTCAR": ValueOf(syscall.TIOCGSOFTCAR), + "TIOCGWINSZ": ValueOf(syscall.TIOCGWINSZ), + "TIOCINQ": ValueOf(syscall.TIOCINQ), + "TIOCLINUX": ValueOf(syscall.TIOCLINUX), + "TIOCMBIC": ValueOf(syscall.TIOCMBIC), + "TIOCMBIS": ValueOf(syscall.TIOCMBIS), + "TIOCMGET": ValueOf(syscall.TIOCMGET), + "TIOCMIWAIT": ValueOf(syscall.TIOCMIWAIT), + "TIOCMSET": ValueOf(syscall.TIOCMSET), + "TIOCM_CAR": ValueOf(syscall.TIOCM_CAR), + "TIOCM_CD": ValueOf(syscall.TIOCM_CD), + "TIOCM_CTS": ValueOf(syscall.TIOCM_CTS), + "TIOCM_DSR": ValueOf(syscall.TIOCM_DSR), + "TIOCM_DTR": ValueOf(syscall.TIOCM_DTR), + "TIOCM_LE": ValueOf(syscall.TIOCM_LE), + "TIOCM_RI": ValueOf(syscall.TIOCM_RI), + "TIOCM_RNG": ValueOf(syscall.TIOCM_RNG), + "TIOCM_RTS": ValueOf(syscall.TIOCM_RTS), + "TIOCM_SR": ValueOf(syscall.TIOCM_SR), + "TIOCM_ST": ValueOf(syscall.TIOCM_ST), + "TIOCNOTTY": ValueOf(syscall.TIOCNOTTY), + "TIOCNXCL": ValueOf(syscall.TIOCNXCL), + "TIOCOUTQ": ValueOf(syscall.TIOCOUTQ), + "TIOCPKT": ValueOf(syscall.TIOCPKT), + "TIOCPKT_DATA": ValueOf(syscall.TIOCPKT_DATA), + "TIOCPKT_DOSTOP": ValueOf(syscall.TIOCPKT_DOSTOP), + "TIOCPKT_FLUSHREAD": ValueOf(syscall.TIOCPKT_FLUSHREAD), + "TIOCPKT_FLUSHWRITE": ValueOf(syscall.TIOCPKT_FLUSHWRITE), + "TIOCPKT_IOCTL": ValueOf(syscall.TIOCPKT_IOCTL), + "TIOCPKT_NOSTOP": ValueOf(syscall.TIOCPKT_NOSTOP), + "TIOCPKT_START": ValueOf(syscall.TIOCPKT_START), + "TIOCPKT_STOP": ValueOf(syscall.TIOCPKT_STOP), + "TIOCSBRK": ValueOf(syscall.TIOCSBRK), + "TIOCSCTTY": ValueOf(syscall.TIOCSCTTY), + "TIOCSERCONFIG": ValueOf(syscall.TIOCSERCONFIG), + "TIOCSERGETLSR": ValueOf(syscall.TIOCSERGETLSR), + "TIOCSERGETMULTI": ValueOf(syscall.TIOCSERGETMULTI), + "TIOCSERGSTRUCT": ValueOf(syscall.TIOCSERGSTRUCT), + "TIOCSERGWILD": ValueOf(syscall.TIOCSERGWILD), + "TIOCSERSETMULTI": ValueOf(syscall.TIOCSERSETMULTI), + "TIOCSERSWILD": ValueOf(syscall.TIOCSERSWILD), + "TIOCSER_TEMT": ValueOf(syscall.TIOCSER_TEMT), + "TIOCSETD": ValueOf(syscall.TIOCSETD), + "TIOCSIG": ValueOf(syscall.TIOCSIG), + "TIOCSLCKTRMIOS": ValueOf(syscall.TIOCSLCKTRMIOS), + "TIOCSPGRP": ValueOf(syscall.TIOCSPGRP), + "TIOCSPTLCK": ValueOf(syscall.TIOCSPTLCK), + "TIOCSRS485": ValueOf(syscall.TIOCSRS485), + "TIOCSSERIAL": ValueOf(syscall.TIOCSSERIAL), + "TIOCSSOFTCAR": ValueOf(syscall.TIOCSSOFTCAR), + "TIOCSTI": ValueOf(syscall.TIOCSTI), + "TIOCSWINSZ": ValueOf(syscall.TIOCSWINSZ), + "TIOCVHANGUP": ValueOf(syscall.TIOCVHANGUP), + "TOSTOP": ValueOf(syscall.TOSTOP), + "TUNATTACHFILTER": ValueOf(syscall.TUNATTACHFILTER), + "TUNDETACHFILTER": ValueOf(syscall.TUNDETACHFILTER), + "TUNGETFEATURES": ValueOf(uint64(syscall.TUNGETFEATURES)), + "TUNGETIFF": ValueOf(uint64(syscall.TUNGETIFF)), + "TUNGETSNDBUF": ValueOf(uint64(syscall.TUNGETSNDBUF)), + "TUNGETVNETHDRSZ": ValueOf(uint64(syscall.TUNGETVNETHDRSZ)), + "TUNSETDEBUG": ValueOf(syscall.TUNSETDEBUG), + "TUNSETGROUP": ValueOf(syscall.TUNSETGROUP), + "TUNSETIFF": ValueOf(syscall.TUNSETIFF), + "TUNSETLINK": ValueOf(syscall.TUNSETLINK), + "TUNSETNOCSUM": ValueOf(syscall.TUNSETNOCSUM), + "TUNSETOFFLOAD": ValueOf(syscall.TUNSETOFFLOAD), + "TUNSETOWNER": ValueOf(syscall.TUNSETOWNER), + "TUNSETPERSIST": ValueOf(syscall.TUNSETPERSIST), + "TUNSETSNDBUF": ValueOf(syscall.TUNSETSNDBUF), + "TUNSETTXFILTER": ValueOf(syscall.TUNSETTXFILTER), + "TUNSETVNETHDRSZ": ValueOf(syscall.TUNSETVNETHDRSZ), + "Tee": ValueOf(syscall.Tee), + "Tgkill": ValueOf(syscall.Tgkill), + "Time": ValueOf(syscall.Time), + "Times": ValueOf(syscall.Times), + "TimespecToNsec": ValueOf(syscall.TimespecToNsec), + "TimevalToNsec": ValueOf(syscall.TimevalToNsec), + "Truncate": ValueOf(syscall.Truncate), + "Umask": ValueOf(syscall.Umask), + "Uname": ValueOf(syscall.Uname), + "UnixCredentials": ValueOf(syscall.UnixCredentials), + "UnixRights": ValueOf(syscall.UnixRights), + "Unlink": ValueOf(syscall.Unlink), + "Unlinkat": ValueOf(syscall.Unlinkat), + "Unmount": ValueOf(syscall.Unmount), + "Unsetenv": ValueOf(syscall.Unsetenv), + "Unshare": ValueOf(syscall.Unshare), + "Ustat": ValueOf(syscall.Ustat), + "Utime": ValueOf(syscall.Utime), + "Utimes": ValueOf(syscall.Utimes), + "UtimesNano": ValueOf(syscall.UtimesNano), + "VDISCARD": ValueOf(syscall.VDISCARD), + "VEOF": ValueOf(syscall.VEOF), + "VEOL": ValueOf(syscall.VEOL), + "VEOL2": ValueOf(syscall.VEOL2), + "VERASE": ValueOf(syscall.VERASE), + "VINTR": ValueOf(syscall.VINTR), + "VKILL": ValueOf(syscall.VKILL), + "VLNEXT": ValueOf(syscall.VLNEXT), + "VMIN": ValueOf(syscall.VMIN), + "VQUIT": ValueOf(syscall.VQUIT), + "VREPRINT": ValueOf(syscall.VREPRINT), + "VSTART": ValueOf(syscall.VSTART), + "VSTOP": ValueOf(syscall.VSTOP), + "VSUSP": ValueOf(syscall.VSUSP), + "VSWTC": ValueOf(syscall.VSWTC), + "VTIME": ValueOf(syscall.VTIME), + "VWERASE": ValueOf(syscall.VWERASE), + "WALL": ValueOf(syscall.WALL), + "WCLONE": ValueOf(uint64(syscall.WCLONE)), + "WCONTINUED": ValueOf(syscall.WCONTINUED), + "WEXITED": ValueOf(syscall.WEXITED), + "WNOHANG": ValueOf(syscall.WNOHANG), + "WNOTHREAD": ValueOf(syscall.WNOTHREAD), + "WNOWAIT": ValueOf(syscall.WNOWAIT), + "WORDSIZE": ValueOf(syscall.WORDSIZE), + "WSTOPPED": ValueOf(syscall.WSTOPPED), + "WUNTRACED": ValueOf(syscall.WUNTRACED), + "Wait4": ValueOf(syscall.Wait4), + "Write": ValueOf(syscall.Write), + "XCASE": ValueOf(syscall.XCASE), + }, + Types: map[string]Type{ + "Cmsghdr": TypeOf((*syscall.Cmsghdr)(nil)).Elem(), + "Credential": TypeOf((*syscall.Credential)(nil)).Elem(), + "Dirent": TypeOf((*syscall.Dirent)(nil)).Elem(), + "EpollEvent": TypeOf((*syscall.EpollEvent)(nil)).Elem(), + "Errno": TypeOf((*syscall.Errno)(nil)).Elem(), + "FdSet": TypeOf((*syscall.FdSet)(nil)).Elem(), + "Flock_t": TypeOf((*syscall.Flock_t)(nil)).Elem(), + "Fsid": TypeOf((*syscall.Fsid)(nil)).Elem(), + "ICMPv6Filter": TypeOf((*syscall.ICMPv6Filter)(nil)).Elem(), + "IPMreq": TypeOf((*syscall.IPMreq)(nil)).Elem(), + "IPMreqn": TypeOf((*syscall.IPMreqn)(nil)).Elem(), + "IPv6MTUInfo": TypeOf((*syscall.IPv6MTUInfo)(nil)).Elem(), + "IPv6Mreq": TypeOf((*syscall.IPv6Mreq)(nil)).Elem(), + "IfAddrmsg": TypeOf((*syscall.IfAddrmsg)(nil)).Elem(), + "IfInfomsg": TypeOf((*syscall.IfInfomsg)(nil)).Elem(), + "Inet4Pktinfo": TypeOf((*syscall.Inet4Pktinfo)(nil)).Elem(), + "Inet6Pktinfo": TypeOf((*syscall.Inet6Pktinfo)(nil)).Elem(), + "InotifyEvent": TypeOf((*syscall.InotifyEvent)(nil)).Elem(), + "Iovec": TypeOf((*syscall.Iovec)(nil)).Elem(), + "Linger": TypeOf((*syscall.Linger)(nil)).Elem(), + "Msghdr": TypeOf((*syscall.Msghdr)(nil)).Elem(), + "NetlinkMessage": TypeOf((*syscall.NetlinkMessage)(nil)).Elem(), + "NetlinkRouteAttr": TypeOf((*syscall.NetlinkRouteAttr)(nil)).Elem(), + "NetlinkRouteRequest": TypeOf((*syscall.NetlinkRouteRequest)(nil)).Elem(), + "NlAttr": TypeOf((*syscall.NlAttr)(nil)).Elem(), + "NlMsgerr": TypeOf((*syscall.NlMsgerr)(nil)).Elem(), + "NlMsghdr": TypeOf((*syscall.NlMsghdr)(nil)).Elem(), + "ProcAttr": TypeOf((*syscall.ProcAttr)(nil)).Elem(), + "PtraceRegs": TypeOf((*syscall.PtraceRegs)(nil)).Elem(), + "RawSockaddr": TypeOf((*syscall.RawSockaddr)(nil)).Elem(), + "RawSockaddrAny": TypeOf((*syscall.RawSockaddrAny)(nil)).Elem(), + "RawSockaddrInet4": TypeOf((*syscall.RawSockaddrInet4)(nil)).Elem(), + "RawSockaddrInet6": TypeOf((*syscall.RawSockaddrInet6)(nil)).Elem(), + "RawSockaddrLinklayer": TypeOf((*syscall.RawSockaddrLinklayer)(nil)).Elem(), + "RawSockaddrNetlink": TypeOf((*syscall.RawSockaddrNetlink)(nil)).Elem(), + "RawSockaddrUnix": TypeOf((*syscall.RawSockaddrUnix)(nil)).Elem(), + "Rlimit": TypeOf((*syscall.Rlimit)(nil)).Elem(), + "RtAttr": TypeOf((*syscall.RtAttr)(nil)).Elem(), + "RtGenmsg": TypeOf((*syscall.RtGenmsg)(nil)).Elem(), + "RtMsg": TypeOf((*syscall.RtMsg)(nil)).Elem(), + "RtNexthop": TypeOf((*syscall.RtNexthop)(nil)).Elem(), + "Rusage": TypeOf((*syscall.Rusage)(nil)).Elem(), + "Signal": TypeOf((*syscall.Signal)(nil)).Elem(), + "SockFilter": TypeOf((*syscall.SockFilter)(nil)).Elem(), + "SockFprog": TypeOf((*syscall.SockFprog)(nil)).Elem(), + "Sockaddr": TypeOf((*syscall.Sockaddr)(nil)).Elem(), + "SockaddrInet4": TypeOf((*syscall.SockaddrInet4)(nil)).Elem(), + "SockaddrInet6": TypeOf((*syscall.SockaddrInet6)(nil)).Elem(), + "SockaddrLinklayer": TypeOf((*syscall.SockaddrLinklayer)(nil)).Elem(), + "SockaddrNetlink": TypeOf((*syscall.SockaddrNetlink)(nil)).Elem(), + "SockaddrUnix": TypeOf((*syscall.SockaddrUnix)(nil)).Elem(), + "SocketControlMessage": TypeOf((*syscall.SocketControlMessage)(nil)).Elem(), + "Stat_t": TypeOf((*syscall.Stat_t)(nil)).Elem(), + "Statfs_t": TypeOf((*syscall.Statfs_t)(nil)).Elem(), + "SysProcAttr": TypeOf((*syscall.SysProcAttr)(nil)).Elem(), + "SysProcIDMap": TypeOf((*syscall.SysProcIDMap)(nil)).Elem(), + "Sysinfo_t": TypeOf((*syscall.Sysinfo_t)(nil)).Elem(), + "TCPInfo": TypeOf((*syscall.TCPInfo)(nil)).Elem(), + "Termios": TypeOf((*syscall.Termios)(nil)).Elem(), + "Time_t": TypeOf((*syscall.Time_t)(nil)).Elem(), + "Timespec": TypeOf((*syscall.Timespec)(nil)).Elem(), + "Timeval": TypeOf((*syscall.Timeval)(nil)).Elem(), + "Timex": TypeOf((*syscall.Timex)(nil)).Elem(), + "Tms": TypeOf((*syscall.Tms)(nil)).Elem(), + "Ucred": TypeOf((*syscall.Ucred)(nil)).Elem(), + "Ustat_t": TypeOf((*syscall.Ustat_t)(nil)).Elem(), + "Utimbuf": TypeOf((*syscall.Utimbuf)(nil)).Elem(), + "Utsname": TypeOf((*syscall.Utsname)(nil)).Elem(), + "WaitStatus": TypeOf((*syscall.WaitStatus)(nil)).Elem(), + }, + Proxies: map[string]Type{ + } } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_arm64.go b/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_arm64.go new file mode 100644 index 0000000..db59c95 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/syscall_linux_arm64.go @@ -0,0 +1,4213 @@ +// +build !gccgo + +// this file was generated by gomacro command: import _b "syscall" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "syscall" +) + +// reflection: allow interpreted code to import "syscall" +func init() { + Packages["syscall"] = Package{ + Binds: map[string]Value{ + "AF_ALG": ValueOf(syscall.AF_ALG), + "AF_APPLETALK": ValueOf(syscall.AF_APPLETALK), + "AF_ASH": ValueOf(syscall.AF_ASH), + "AF_ATMPVC": ValueOf(syscall.AF_ATMPVC), + "AF_ATMSVC": ValueOf(syscall.AF_ATMSVC), + "AF_AX25": ValueOf(syscall.AF_AX25), + "AF_BLUETOOTH": ValueOf(syscall.AF_BLUETOOTH), + "AF_BRIDGE": ValueOf(syscall.AF_BRIDGE), + "AF_CAIF": ValueOf(syscall.AF_CAIF), + "AF_CAN": ValueOf(syscall.AF_CAN), + "AF_DECnet": ValueOf(syscall.AF_DECnet), + "AF_ECONET": ValueOf(syscall.AF_ECONET), + "AF_FILE": ValueOf(syscall.AF_FILE), + "AF_IEEE802154": ValueOf(syscall.AF_IEEE802154), + "AF_INET": ValueOf(syscall.AF_INET), + "AF_INET6": ValueOf(syscall.AF_INET6), + "AF_IPX": ValueOf(syscall.AF_IPX), + "AF_IRDA": ValueOf(syscall.AF_IRDA), + "AF_ISDN": ValueOf(syscall.AF_ISDN), + "AF_IUCV": ValueOf(syscall.AF_IUCV), + "AF_KEY": ValueOf(syscall.AF_KEY), + "AF_LLC": ValueOf(syscall.AF_LLC), + "AF_LOCAL": ValueOf(syscall.AF_LOCAL), + "AF_MAX": ValueOf(syscall.AF_MAX), + "AF_NETBEUI": ValueOf(syscall.AF_NETBEUI), + "AF_NETLINK": ValueOf(syscall.AF_NETLINK), + "AF_NETROM": ValueOf(syscall.AF_NETROM), + "AF_NFC": ValueOf(syscall.AF_NFC), + "AF_PACKET": ValueOf(syscall.AF_PACKET), + "AF_PHONET": ValueOf(syscall.AF_PHONET), + "AF_PPPOX": ValueOf(syscall.AF_PPPOX), + "AF_RDS": ValueOf(syscall.AF_RDS), + "AF_ROSE": ValueOf(syscall.AF_ROSE), + "AF_ROUTE": ValueOf(syscall.AF_ROUTE), + "AF_RXRPC": ValueOf(syscall.AF_RXRPC), + "AF_SECURITY": ValueOf(syscall.AF_SECURITY), + "AF_SNA": ValueOf(syscall.AF_SNA), + "AF_TIPC": ValueOf(syscall.AF_TIPC), + "AF_UNIX": ValueOf(syscall.AF_UNIX), + "AF_UNSPEC": ValueOf(syscall.AF_UNSPEC), + "AF_VSOCK": ValueOf(syscall.AF_VSOCK), + "AF_WANPIPE": ValueOf(syscall.AF_WANPIPE), + "AF_X25": ValueOf(syscall.AF_X25), + "ARPHRD_ADAPT": ValueOf(syscall.ARPHRD_ADAPT), + "ARPHRD_APPLETLK": ValueOf(syscall.ARPHRD_APPLETLK), + "ARPHRD_ARCNET": ValueOf(syscall.ARPHRD_ARCNET), + "ARPHRD_ASH": ValueOf(syscall.ARPHRD_ASH), + "ARPHRD_ATM": ValueOf(syscall.ARPHRD_ATM), + "ARPHRD_AX25": ValueOf(syscall.ARPHRD_AX25), + "ARPHRD_BIF": ValueOf(syscall.ARPHRD_BIF), + "ARPHRD_CAIF": ValueOf(syscall.ARPHRD_CAIF), + "ARPHRD_CAN": ValueOf(syscall.ARPHRD_CAN), + "ARPHRD_CHAOS": ValueOf(syscall.ARPHRD_CHAOS), + "ARPHRD_CISCO": ValueOf(syscall.ARPHRD_CISCO), + "ARPHRD_CSLIP": ValueOf(syscall.ARPHRD_CSLIP), + "ARPHRD_CSLIP6": ValueOf(syscall.ARPHRD_CSLIP6), + "ARPHRD_DDCMP": ValueOf(syscall.ARPHRD_DDCMP), + "ARPHRD_DLCI": ValueOf(syscall.ARPHRD_DLCI), + "ARPHRD_ECONET": ValueOf(syscall.ARPHRD_ECONET), + "ARPHRD_EETHER": ValueOf(syscall.ARPHRD_EETHER), + "ARPHRD_ETHER": ValueOf(syscall.ARPHRD_ETHER), + "ARPHRD_EUI64": ValueOf(syscall.ARPHRD_EUI64), + "ARPHRD_FCAL": ValueOf(syscall.ARPHRD_FCAL), + "ARPHRD_FCFABRIC": ValueOf(syscall.ARPHRD_FCFABRIC), + "ARPHRD_FCPL": ValueOf(syscall.ARPHRD_FCPL), + "ARPHRD_FCPP": ValueOf(syscall.ARPHRD_FCPP), + "ARPHRD_FDDI": ValueOf(syscall.ARPHRD_FDDI), + "ARPHRD_FRAD": ValueOf(syscall.ARPHRD_FRAD), + "ARPHRD_HDLC": ValueOf(syscall.ARPHRD_HDLC), + "ARPHRD_HIPPI": ValueOf(syscall.ARPHRD_HIPPI), + "ARPHRD_HWX25": ValueOf(syscall.ARPHRD_HWX25), + "ARPHRD_IEEE1394": ValueOf(syscall.ARPHRD_IEEE1394), + "ARPHRD_IEEE802": ValueOf(syscall.ARPHRD_IEEE802), + "ARPHRD_IEEE80211": ValueOf(syscall.ARPHRD_IEEE80211), + "ARPHRD_IEEE80211_PRISM": ValueOf(syscall.ARPHRD_IEEE80211_PRISM), + "ARPHRD_IEEE80211_RADIOTAP": ValueOf(syscall.ARPHRD_IEEE80211_RADIOTAP), + "ARPHRD_IEEE802154": ValueOf(syscall.ARPHRD_IEEE802154), + "ARPHRD_IEEE802154_MONITOR": ValueOf(syscall.ARPHRD_IEEE802154_MONITOR), + "ARPHRD_IEEE802_TR": ValueOf(syscall.ARPHRD_IEEE802_TR), + "ARPHRD_INFINIBAND": ValueOf(syscall.ARPHRD_INFINIBAND), + "ARPHRD_IP6GRE": ValueOf(syscall.ARPHRD_IP6GRE), + "ARPHRD_IPDDP": ValueOf(syscall.ARPHRD_IPDDP), + "ARPHRD_IPGRE": ValueOf(syscall.ARPHRD_IPGRE), + "ARPHRD_IRDA": ValueOf(syscall.ARPHRD_IRDA), + "ARPHRD_LAPB": ValueOf(syscall.ARPHRD_LAPB), + "ARPHRD_LOCALTLK": ValueOf(syscall.ARPHRD_LOCALTLK), + "ARPHRD_LOOPBACK": ValueOf(syscall.ARPHRD_LOOPBACK), + "ARPHRD_METRICOM": ValueOf(syscall.ARPHRD_METRICOM), + "ARPHRD_NETLINK": ValueOf(syscall.ARPHRD_NETLINK), + "ARPHRD_NETROM": ValueOf(syscall.ARPHRD_NETROM), + "ARPHRD_NONE": ValueOf(syscall.ARPHRD_NONE), + "ARPHRD_PHONET": ValueOf(syscall.ARPHRD_PHONET), + "ARPHRD_PHONET_PIPE": ValueOf(syscall.ARPHRD_PHONET_PIPE), + "ARPHRD_PIMREG": ValueOf(syscall.ARPHRD_PIMREG), + "ARPHRD_PPP": ValueOf(syscall.ARPHRD_PPP), + "ARPHRD_PRONET": ValueOf(syscall.ARPHRD_PRONET), + "ARPHRD_RAWHDLC": ValueOf(syscall.ARPHRD_RAWHDLC), + "ARPHRD_ROSE": ValueOf(syscall.ARPHRD_ROSE), + "ARPHRD_RSRVD": ValueOf(syscall.ARPHRD_RSRVD), + "ARPHRD_SIT": ValueOf(syscall.ARPHRD_SIT), + "ARPHRD_SKIP": ValueOf(syscall.ARPHRD_SKIP), + "ARPHRD_SLIP": ValueOf(syscall.ARPHRD_SLIP), + "ARPHRD_SLIP6": ValueOf(syscall.ARPHRD_SLIP6), + "ARPHRD_TUNNEL": ValueOf(syscall.ARPHRD_TUNNEL), + "ARPHRD_TUNNEL6": ValueOf(syscall.ARPHRD_TUNNEL6), + "ARPHRD_VOID": ValueOf(syscall.ARPHRD_VOID), + "ARPHRD_X25": ValueOf(syscall.ARPHRD_X25), + "Accept": ValueOf(syscall.Accept), + "Accept4": ValueOf(syscall.Accept4), + "Access": ValueOf(syscall.Access), + "Acct": ValueOf(syscall.Acct), + "Adjtimex": ValueOf(syscall.Adjtimex), + "AttachLsf": ValueOf(syscall.AttachLsf), + "B0": ValueOf(syscall.B0), + "B1000000": ValueOf(syscall.B1000000), + "B110": ValueOf(syscall.B110), + "B115200": ValueOf(syscall.B115200), + "B1152000": ValueOf(syscall.B1152000), + "B1200": ValueOf(syscall.B1200), + "B134": ValueOf(syscall.B134), + "B150": ValueOf(syscall.B150), + "B1500000": ValueOf(syscall.B1500000), + "B1800": ValueOf(syscall.B1800), + "B19200": ValueOf(syscall.B19200), + "B200": ValueOf(syscall.B200), + "B2000000": ValueOf(syscall.B2000000), + "B230400": ValueOf(syscall.B230400), + "B2400": ValueOf(syscall.B2400), + "B2500000": ValueOf(syscall.B2500000), + "B300": ValueOf(syscall.B300), + "B3000000": ValueOf(syscall.B3000000), + "B3500000": ValueOf(syscall.B3500000), + "B38400": ValueOf(syscall.B38400), + "B4000000": ValueOf(syscall.B4000000), + "B460800": ValueOf(syscall.B460800), + "B4800": ValueOf(syscall.B4800), + "B50": ValueOf(syscall.B50), + "B500000": ValueOf(syscall.B500000), + "B57600": ValueOf(syscall.B57600), + "B576000": ValueOf(syscall.B576000), + "B600": ValueOf(syscall.B600), + "B75": ValueOf(syscall.B75), + "B921600": ValueOf(syscall.B921600), + "B9600": ValueOf(syscall.B9600), + "BPF_A": ValueOf(syscall.BPF_A), + "BPF_ABS": ValueOf(syscall.BPF_ABS), + "BPF_ADD": ValueOf(syscall.BPF_ADD), + "BPF_ALU": ValueOf(syscall.BPF_ALU), + "BPF_AND": ValueOf(syscall.BPF_AND), + "BPF_B": ValueOf(syscall.BPF_B), + "BPF_DIV": ValueOf(syscall.BPF_DIV), + "BPF_H": ValueOf(syscall.BPF_H), + "BPF_IMM": ValueOf(syscall.BPF_IMM), + "BPF_IND": ValueOf(syscall.BPF_IND), + "BPF_JA": ValueOf(syscall.BPF_JA), + "BPF_JEQ": ValueOf(syscall.BPF_JEQ), + "BPF_JGE": ValueOf(syscall.BPF_JGE), + "BPF_JGT": ValueOf(syscall.BPF_JGT), + "BPF_JMP": ValueOf(syscall.BPF_JMP), + "BPF_JSET": ValueOf(syscall.BPF_JSET), + "BPF_K": ValueOf(syscall.BPF_K), + "BPF_LD": ValueOf(syscall.BPF_LD), + "BPF_LDX": ValueOf(syscall.BPF_LDX), + "BPF_LEN": ValueOf(syscall.BPF_LEN), + "BPF_LSH": ValueOf(syscall.BPF_LSH), + "BPF_MAJOR_VERSION": ValueOf(syscall.BPF_MAJOR_VERSION), + "BPF_MAXINSNS": ValueOf(syscall.BPF_MAXINSNS), + "BPF_MEM": ValueOf(syscall.BPF_MEM), + "BPF_MEMWORDS": ValueOf(syscall.BPF_MEMWORDS), + "BPF_MINOR_VERSION": ValueOf(syscall.BPF_MINOR_VERSION), + "BPF_MISC": ValueOf(syscall.BPF_MISC), + "BPF_MOD": ValueOf(syscall.BPF_MOD), + "BPF_MSH": ValueOf(syscall.BPF_MSH), + "BPF_MUL": ValueOf(syscall.BPF_MUL), + "BPF_NEG": ValueOf(syscall.BPF_NEG), + "BPF_OR": ValueOf(syscall.BPF_OR), + "BPF_RET": ValueOf(syscall.BPF_RET), + "BPF_RSH": ValueOf(syscall.BPF_RSH), + "BPF_ST": ValueOf(syscall.BPF_ST), + "BPF_STX": ValueOf(syscall.BPF_STX), + "BPF_SUB": ValueOf(syscall.BPF_SUB), + "BPF_TAX": ValueOf(syscall.BPF_TAX), + "BPF_TXA": ValueOf(syscall.BPF_TXA), + "BPF_W": ValueOf(syscall.BPF_W), + "BPF_X": ValueOf(syscall.BPF_X), + "BPF_XOR": ValueOf(syscall.BPF_XOR), + "BRKINT": ValueOf(syscall.BRKINT), + "Bind": ValueOf(syscall.Bind), + "BindToDevice": ValueOf(syscall.BindToDevice), + "BytePtrFromString": ValueOf(syscall.BytePtrFromString), + "ByteSliceFromString": ValueOf(syscall.ByteSliceFromString), + "CFLUSH": ValueOf(syscall.CFLUSH), + "CLOCAL": ValueOf(syscall.CLOCAL), + "CLONE_CHILD_CLEARTID": ValueOf(syscall.CLONE_CHILD_CLEARTID), + "CLONE_CHILD_SETTID": ValueOf(syscall.CLONE_CHILD_SETTID), + "CLONE_DETACHED": ValueOf(syscall.CLONE_DETACHED), + "CLONE_FILES": ValueOf(syscall.CLONE_FILES), + "CLONE_FS": ValueOf(syscall.CLONE_FS), + "CLONE_IO": ValueOf(uint32(syscall.CLONE_IO)), + "CLONE_NEWIPC": ValueOf(syscall.CLONE_NEWIPC), + "CLONE_NEWNET": ValueOf(syscall.CLONE_NEWNET), + "CLONE_NEWNS": ValueOf(syscall.CLONE_NEWNS), + "CLONE_NEWPID": ValueOf(syscall.CLONE_NEWPID), + "CLONE_NEWUSER": ValueOf(syscall.CLONE_NEWUSER), + "CLONE_NEWUTS": ValueOf(syscall.CLONE_NEWUTS), + "CLONE_PARENT": ValueOf(syscall.CLONE_PARENT), + "CLONE_PARENT_SETTID": ValueOf(syscall.CLONE_PARENT_SETTID), + "CLONE_PTRACE": ValueOf(syscall.CLONE_PTRACE), + "CLONE_SETTLS": ValueOf(syscall.CLONE_SETTLS), + "CLONE_SIGHAND": ValueOf(syscall.CLONE_SIGHAND), + "CLONE_SYSVSEM": ValueOf(syscall.CLONE_SYSVSEM), + "CLONE_THREAD": ValueOf(syscall.CLONE_THREAD), + "CLONE_UNTRACED": ValueOf(syscall.CLONE_UNTRACED), + "CLONE_VFORK": ValueOf(syscall.CLONE_VFORK), + "CLONE_VM": ValueOf(syscall.CLONE_VM), + "CREAD": ValueOf(syscall.CREAD), + "CS5": ValueOf(syscall.CS5), + "CS6": ValueOf(syscall.CS6), + "CS7": ValueOf(syscall.CS7), + "CS8": ValueOf(syscall.CS8), + "CSIGNAL": ValueOf(syscall.CSIGNAL), + "CSIZE": ValueOf(syscall.CSIZE), + "CSTART": ValueOf(syscall.CSTART), + "CSTATUS": ValueOf(syscall.CSTATUS), + "CSTOP": ValueOf(syscall.CSTOP), + "CSTOPB": ValueOf(syscall.CSTOPB), + "CSUSP": ValueOf(syscall.CSUSP), + "Chdir": ValueOf(syscall.Chdir), + "Chmod": ValueOf(syscall.Chmod), + "Chown": ValueOf(syscall.Chown), + "Chroot": ValueOf(syscall.Chroot), + "Clearenv": ValueOf(syscall.Clearenv), + "Close": ValueOf(syscall.Close), + "CloseOnExec": ValueOf(syscall.CloseOnExec), + "CmsgLen": ValueOf(syscall.CmsgLen), + "CmsgSpace": ValueOf(syscall.CmsgSpace), + "Connect": ValueOf(syscall.Connect), + "Creat": ValueOf(syscall.Creat), + "DT_BLK": ValueOf(syscall.DT_BLK), + "DT_CHR": ValueOf(syscall.DT_CHR), + "DT_DIR": ValueOf(syscall.DT_DIR), + "DT_FIFO": ValueOf(syscall.DT_FIFO), + "DT_LNK": ValueOf(syscall.DT_LNK), + "DT_REG": ValueOf(syscall.DT_REG), + "DT_SOCK": ValueOf(syscall.DT_SOCK), + "DT_UNKNOWN": ValueOf(syscall.DT_UNKNOWN), + "DT_WHT": ValueOf(syscall.DT_WHT), + "DetachLsf": ValueOf(syscall.DetachLsf), + "Dup": ValueOf(syscall.Dup), + "Dup3": ValueOf(syscall.Dup3), + "E2BIG": ValueOf(syscall.E2BIG), + "EACCES": ValueOf(syscall.EACCES), + "EADDRINUSE": ValueOf(syscall.EADDRINUSE), + "EADDRNOTAVAIL": ValueOf(syscall.EADDRNOTAVAIL), + "EADV": ValueOf(syscall.EADV), + "EAFNOSUPPORT": ValueOf(syscall.EAFNOSUPPORT), + "EAGAIN": ValueOf(syscall.EAGAIN), + "EALREADY": ValueOf(syscall.EALREADY), + "EBADE": ValueOf(syscall.EBADE), + "EBADF": ValueOf(syscall.EBADF), + "EBADFD": ValueOf(syscall.EBADFD), + "EBADMSG": ValueOf(syscall.EBADMSG), + "EBADR": ValueOf(syscall.EBADR), + "EBADRQC": ValueOf(syscall.EBADRQC), + "EBADSLT": ValueOf(syscall.EBADSLT), + "EBFONT": ValueOf(syscall.EBFONT), + "EBUSY": ValueOf(syscall.EBUSY), + "ECANCELED": ValueOf(syscall.ECANCELED), + "ECHILD": ValueOf(syscall.ECHILD), + "ECHO": ValueOf(syscall.ECHO), + "ECHOCTL": ValueOf(syscall.ECHOCTL), + "ECHOE": ValueOf(syscall.ECHOE), + "ECHOK": ValueOf(syscall.ECHOK), + "ECHOKE": ValueOf(syscall.ECHOKE), + "ECHONL": ValueOf(syscall.ECHONL), + "ECHOPRT": ValueOf(syscall.ECHOPRT), + "ECHRNG": ValueOf(syscall.ECHRNG), + "ECOMM": ValueOf(syscall.ECOMM), + "ECONNABORTED": ValueOf(syscall.ECONNABORTED), + "ECONNREFUSED": ValueOf(syscall.ECONNREFUSED), + "ECONNRESET": ValueOf(syscall.ECONNRESET), + "EDEADLK": ValueOf(syscall.EDEADLK), + "EDEADLOCK": ValueOf(syscall.EDEADLOCK), + "EDESTADDRREQ": ValueOf(syscall.EDESTADDRREQ), + "EDOM": ValueOf(syscall.EDOM), + "EDOTDOT": ValueOf(syscall.EDOTDOT), + "EDQUOT": ValueOf(syscall.EDQUOT), + "EEXIST": ValueOf(syscall.EEXIST), + "EFAULT": ValueOf(syscall.EFAULT), + "EFBIG": ValueOf(syscall.EFBIG), + "EHOSTDOWN": ValueOf(syscall.EHOSTDOWN), + "EHOSTUNREACH": ValueOf(syscall.EHOSTUNREACH), + "EHWPOISON": ValueOf(syscall.EHWPOISON), + "EIDRM": ValueOf(syscall.EIDRM), + "EILSEQ": ValueOf(syscall.EILSEQ), + "EINPROGRESS": ValueOf(syscall.EINPROGRESS), + "EINTR": ValueOf(syscall.EINTR), + "EINVAL": ValueOf(syscall.EINVAL), + "EIO": ValueOf(syscall.EIO), + "EISCONN": ValueOf(syscall.EISCONN), + "EISDIR": ValueOf(syscall.EISDIR), + "EISNAM": ValueOf(syscall.EISNAM), + "EKEYEXPIRED": ValueOf(syscall.EKEYEXPIRED), + "EKEYREJECTED": ValueOf(syscall.EKEYREJECTED), + "EKEYREVOKED": ValueOf(syscall.EKEYREVOKED), + "EL2HLT": ValueOf(syscall.EL2HLT), + "EL2NSYNC": ValueOf(syscall.EL2NSYNC), + "EL3HLT": ValueOf(syscall.EL3HLT), + "EL3RST": ValueOf(syscall.EL3RST), + "ELIBACC": ValueOf(syscall.ELIBACC), + "ELIBBAD": ValueOf(syscall.ELIBBAD), + "ELIBEXEC": ValueOf(syscall.ELIBEXEC), + "ELIBMAX": ValueOf(syscall.ELIBMAX), + "ELIBSCN": ValueOf(syscall.ELIBSCN), + "ELNRNG": ValueOf(syscall.ELNRNG), + "ELOOP": ValueOf(syscall.ELOOP), + "EMEDIUMTYPE": ValueOf(syscall.EMEDIUMTYPE), + "EMFILE": ValueOf(syscall.EMFILE), + "EMLINK": ValueOf(syscall.EMLINK), + "EMSGSIZE": ValueOf(syscall.EMSGSIZE), + "EMULTIHOP": ValueOf(syscall.EMULTIHOP), + "ENAMETOOLONG": ValueOf(syscall.ENAMETOOLONG), + "ENAVAIL": ValueOf(syscall.ENAVAIL), + "ENCODING_DEFAULT": ValueOf(syscall.ENCODING_DEFAULT), + "ENCODING_FM_MARK": ValueOf(syscall.ENCODING_FM_MARK), + "ENCODING_FM_SPACE": ValueOf(syscall.ENCODING_FM_SPACE), + "ENCODING_MANCHESTER": ValueOf(syscall.ENCODING_MANCHESTER), + "ENCODING_NRZ": ValueOf(syscall.ENCODING_NRZ), + "ENCODING_NRZI": ValueOf(syscall.ENCODING_NRZI), + "ENETDOWN": ValueOf(syscall.ENETDOWN), + "ENETRESET": ValueOf(syscall.ENETRESET), + "ENETUNREACH": ValueOf(syscall.ENETUNREACH), + "ENFILE": ValueOf(syscall.ENFILE), + "ENOANO": ValueOf(syscall.ENOANO), + "ENOBUFS": ValueOf(syscall.ENOBUFS), + "ENOCSI": ValueOf(syscall.ENOCSI), + "ENODATA": ValueOf(syscall.ENODATA), + "ENODEV": ValueOf(syscall.ENODEV), + "ENOENT": ValueOf(syscall.ENOENT), + "ENOEXEC": ValueOf(syscall.ENOEXEC), + "ENOKEY": ValueOf(syscall.ENOKEY), + "ENOLCK": ValueOf(syscall.ENOLCK), + "ENOLINK": ValueOf(syscall.ENOLINK), + "ENOMEDIUM": ValueOf(syscall.ENOMEDIUM), + "ENOMEM": ValueOf(syscall.ENOMEM), + "ENOMSG": ValueOf(syscall.ENOMSG), + "ENONET": ValueOf(syscall.ENONET), + "ENOPKG": ValueOf(syscall.ENOPKG), + "ENOPROTOOPT": ValueOf(syscall.ENOPROTOOPT), + "ENOSPC": ValueOf(syscall.ENOSPC), + "ENOSR": ValueOf(syscall.ENOSR), + "ENOSTR": ValueOf(syscall.ENOSTR), + "ENOSYS": ValueOf(syscall.ENOSYS), + "ENOTBLK": ValueOf(syscall.ENOTBLK), + "ENOTCONN": ValueOf(syscall.ENOTCONN), + "ENOTDIR": ValueOf(syscall.ENOTDIR), + "ENOTEMPTY": ValueOf(syscall.ENOTEMPTY), + "ENOTNAM": ValueOf(syscall.ENOTNAM), + "ENOTRECOVERABLE": ValueOf(syscall.ENOTRECOVERABLE), + "ENOTSOCK": ValueOf(syscall.ENOTSOCK), + "ENOTSUP": ValueOf(syscall.ENOTSUP), + "ENOTTY": ValueOf(syscall.ENOTTY), + "ENOTUNIQ": ValueOf(syscall.ENOTUNIQ), + "ENXIO": ValueOf(syscall.ENXIO), + "EOPNOTSUPP": ValueOf(syscall.EOPNOTSUPP), + "EOVERFLOW": ValueOf(syscall.EOVERFLOW), + "EOWNERDEAD": ValueOf(syscall.EOWNERDEAD), + "EPERM": ValueOf(syscall.EPERM), + "EPFNOSUPPORT": ValueOf(syscall.EPFNOSUPPORT), + "EPIPE": ValueOf(syscall.EPIPE), + "EPOLLERR": ValueOf(syscall.EPOLLERR), + "EPOLLET": ValueOf(uint32(syscall.EPOLLET)), + "EPOLLHUP": ValueOf(syscall.EPOLLHUP), + "EPOLLIN": ValueOf(syscall.EPOLLIN), + "EPOLLMSG": ValueOf(syscall.EPOLLMSG), + "EPOLLONESHOT": ValueOf(syscall.EPOLLONESHOT), + "EPOLLOUT": ValueOf(syscall.EPOLLOUT), + "EPOLLPRI": ValueOf(syscall.EPOLLPRI), + "EPOLLRDBAND": ValueOf(syscall.EPOLLRDBAND), + "EPOLLRDHUP": ValueOf(syscall.EPOLLRDHUP), + "EPOLLRDNORM": ValueOf(syscall.EPOLLRDNORM), + "EPOLLWAKEUP": ValueOf(syscall.EPOLLWAKEUP), + "EPOLLWRBAND": ValueOf(syscall.EPOLLWRBAND), + "EPOLLWRNORM": ValueOf(syscall.EPOLLWRNORM), + "EPOLL_CLOEXEC": ValueOf(syscall.EPOLL_CLOEXEC), + "EPOLL_CTL_ADD": ValueOf(syscall.EPOLL_CTL_ADD), + "EPOLL_CTL_DEL": ValueOf(syscall.EPOLL_CTL_DEL), + "EPOLL_CTL_MOD": ValueOf(syscall.EPOLL_CTL_MOD), + "EPROTO": ValueOf(syscall.EPROTO), + "EPROTONOSUPPORT": ValueOf(syscall.EPROTONOSUPPORT), + "EPROTOTYPE": ValueOf(syscall.EPROTOTYPE), + "ERANGE": ValueOf(syscall.ERANGE), + "EREMCHG": ValueOf(syscall.EREMCHG), + "EREMOTE": ValueOf(syscall.EREMOTE), + "EREMOTEIO": ValueOf(syscall.EREMOTEIO), + "ERESTART": ValueOf(syscall.ERESTART), + "ERFKILL": ValueOf(syscall.ERFKILL), + "EROFS": ValueOf(syscall.EROFS), + "ESHUTDOWN": ValueOf(syscall.ESHUTDOWN), + "ESOCKTNOSUPPORT": ValueOf(syscall.ESOCKTNOSUPPORT), + "ESPIPE": ValueOf(syscall.ESPIPE), + "ESRCH": ValueOf(syscall.ESRCH), + "ESRMNT": ValueOf(syscall.ESRMNT), + "ESTALE": ValueOf(syscall.ESTALE), + "ESTRPIPE": ValueOf(syscall.ESTRPIPE), + "ETH_P_1588": ValueOf(syscall.ETH_P_1588), + "ETH_P_8021AD": ValueOf(syscall.ETH_P_8021AD), + "ETH_P_8021AH": ValueOf(syscall.ETH_P_8021AH), + "ETH_P_8021Q": ValueOf(syscall.ETH_P_8021Q), + "ETH_P_802_2": ValueOf(syscall.ETH_P_802_2), + "ETH_P_802_3": ValueOf(syscall.ETH_P_802_3), + "ETH_P_802_3_MIN": ValueOf(syscall.ETH_P_802_3_MIN), + "ETH_P_802_EX1": ValueOf(syscall.ETH_P_802_EX1), + "ETH_P_AARP": ValueOf(syscall.ETH_P_AARP), + "ETH_P_AF_IUCV": ValueOf(syscall.ETH_P_AF_IUCV), + "ETH_P_ALL": ValueOf(syscall.ETH_P_ALL), + "ETH_P_AOE": ValueOf(syscall.ETH_P_AOE), + "ETH_P_ARCNET": ValueOf(syscall.ETH_P_ARCNET), + "ETH_P_ARP": ValueOf(syscall.ETH_P_ARP), + "ETH_P_ATALK": ValueOf(syscall.ETH_P_ATALK), + "ETH_P_ATMFATE": ValueOf(syscall.ETH_P_ATMFATE), + "ETH_P_ATMMPOA": ValueOf(syscall.ETH_P_ATMMPOA), + "ETH_P_AX25": ValueOf(syscall.ETH_P_AX25), + "ETH_P_BATMAN": ValueOf(syscall.ETH_P_BATMAN), + "ETH_P_BPQ": ValueOf(syscall.ETH_P_BPQ), + "ETH_P_CAIF": ValueOf(syscall.ETH_P_CAIF), + "ETH_P_CAN": ValueOf(syscall.ETH_P_CAN), + "ETH_P_CANFD": ValueOf(syscall.ETH_P_CANFD), + "ETH_P_CONTROL": ValueOf(syscall.ETH_P_CONTROL), + "ETH_P_CUST": ValueOf(syscall.ETH_P_CUST), + "ETH_P_DDCMP": ValueOf(syscall.ETH_P_DDCMP), + "ETH_P_DEC": ValueOf(syscall.ETH_P_DEC), + "ETH_P_DIAG": ValueOf(syscall.ETH_P_DIAG), + "ETH_P_DNA_DL": ValueOf(syscall.ETH_P_DNA_DL), + "ETH_P_DNA_RC": ValueOf(syscall.ETH_P_DNA_RC), + "ETH_P_DNA_RT": ValueOf(syscall.ETH_P_DNA_RT), + "ETH_P_DSA": ValueOf(syscall.ETH_P_DSA), + "ETH_P_ECONET": ValueOf(syscall.ETH_P_ECONET), + "ETH_P_EDSA": ValueOf(syscall.ETH_P_EDSA), + "ETH_P_FCOE": ValueOf(syscall.ETH_P_FCOE), + "ETH_P_FIP": ValueOf(syscall.ETH_P_FIP), + "ETH_P_HDLC": ValueOf(syscall.ETH_P_HDLC), + "ETH_P_IEEE802154": ValueOf(syscall.ETH_P_IEEE802154), + "ETH_P_IEEEPUP": ValueOf(syscall.ETH_P_IEEEPUP), + "ETH_P_IEEEPUPAT": ValueOf(syscall.ETH_P_IEEEPUPAT), + "ETH_P_IP": ValueOf(syscall.ETH_P_IP), + "ETH_P_IPV6": ValueOf(syscall.ETH_P_IPV6), + "ETH_P_IPX": ValueOf(syscall.ETH_P_IPX), + "ETH_P_IRDA": ValueOf(syscall.ETH_P_IRDA), + "ETH_P_LAT": ValueOf(syscall.ETH_P_LAT), + "ETH_P_LINK_CTL": ValueOf(syscall.ETH_P_LINK_CTL), + "ETH_P_LOCALTALK": ValueOf(syscall.ETH_P_LOCALTALK), + "ETH_P_LOOP": ValueOf(syscall.ETH_P_LOOP), + "ETH_P_MOBITEX": ValueOf(syscall.ETH_P_MOBITEX), + "ETH_P_MPLS_MC": ValueOf(syscall.ETH_P_MPLS_MC), + "ETH_P_MPLS_UC": ValueOf(syscall.ETH_P_MPLS_UC), + "ETH_P_MVRP": ValueOf(syscall.ETH_P_MVRP), + "ETH_P_PAE": ValueOf(syscall.ETH_P_PAE), + "ETH_P_PAUSE": ValueOf(syscall.ETH_P_PAUSE), + "ETH_P_PHONET": ValueOf(syscall.ETH_P_PHONET), + "ETH_P_PPPTALK": ValueOf(syscall.ETH_P_PPPTALK), + "ETH_P_PPP_DISC": ValueOf(syscall.ETH_P_PPP_DISC), + "ETH_P_PPP_MP": ValueOf(syscall.ETH_P_PPP_MP), + "ETH_P_PPP_SES": ValueOf(syscall.ETH_P_PPP_SES), + "ETH_P_PRP": ValueOf(syscall.ETH_P_PRP), + "ETH_P_PUP": ValueOf(syscall.ETH_P_PUP), + "ETH_P_PUPAT": ValueOf(syscall.ETH_P_PUPAT), + "ETH_P_QINQ1": ValueOf(syscall.ETH_P_QINQ1), + "ETH_P_QINQ2": ValueOf(syscall.ETH_P_QINQ2), + "ETH_P_QINQ3": ValueOf(syscall.ETH_P_QINQ3), + "ETH_P_RARP": ValueOf(syscall.ETH_P_RARP), + "ETH_P_SCA": ValueOf(syscall.ETH_P_SCA), + "ETH_P_SLOW": ValueOf(syscall.ETH_P_SLOW), + "ETH_P_SNAP": ValueOf(syscall.ETH_P_SNAP), + "ETH_P_TDLS": ValueOf(syscall.ETH_P_TDLS), + "ETH_P_TEB": ValueOf(syscall.ETH_P_TEB), + "ETH_P_TIPC": ValueOf(syscall.ETH_P_TIPC), + "ETH_P_TRAILER": ValueOf(syscall.ETH_P_TRAILER), + "ETH_P_TR_802_2": ValueOf(syscall.ETH_P_TR_802_2), + "ETH_P_WAN_PPP": ValueOf(syscall.ETH_P_WAN_PPP), + "ETH_P_WCCP": ValueOf(syscall.ETH_P_WCCP), + "ETH_P_X25": ValueOf(syscall.ETH_P_X25), + "ETIME": ValueOf(syscall.ETIME), + "ETIMEDOUT": ValueOf(syscall.ETIMEDOUT), + "ETOOMANYREFS": ValueOf(syscall.ETOOMANYREFS), + "ETXTBSY": ValueOf(syscall.ETXTBSY), + "EUCLEAN": ValueOf(syscall.EUCLEAN), + "EUNATCH": ValueOf(syscall.EUNATCH), + "EUSERS": ValueOf(syscall.EUSERS), + "EWOULDBLOCK": ValueOf(syscall.EWOULDBLOCK), + "EXDEV": ValueOf(syscall.EXDEV), + "EXFULL": ValueOf(syscall.EXFULL), + "EXTA": ValueOf(syscall.EXTA), + "EXTB": ValueOf(syscall.EXTB), + "EXTPROC": ValueOf(syscall.EXTPROC), + "Environ": ValueOf(syscall.Environ), + "EpollCreate": ValueOf(syscall.EpollCreate), + "EpollCreate1": ValueOf(syscall.EpollCreate1), + "EpollCtl": ValueOf(syscall.EpollCtl), + "EpollWait": ValueOf(syscall.EpollWait), + "Exec": ValueOf(syscall.Exec), + "Exit": ValueOf(syscall.Exit), + "FD_CLOEXEC": ValueOf(syscall.FD_CLOEXEC), + "FD_SETSIZE": ValueOf(syscall.FD_SETSIZE), + "FLUSHO": ValueOf(syscall.FLUSHO), + "F_DUPFD": ValueOf(syscall.F_DUPFD), + "F_DUPFD_CLOEXEC": ValueOf(syscall.F_DUPFD_CLOEXEC), + "F_EXLCK": ValueOf(syscall.F_EXLCK), + "F_GETFD": ValueOf(syscall.F_GETFD), + "F_GETFL": ValueOf(syscall.F_GETFL), + "F_GETLEASE": ValueOf(syscall.F_GETLEASE), + "F_GETLK": ValueOf(syscall.F_GETLK), + "F_GETLK64": ValueOf(syscall.F_GETLK64), + "F_GETOWN": ValueOf(syscall.F_GETOWN), + "F_GETOWN_EX": ValueOf(syscall.F_GETOWN_EX), + "F_GETPIPE_SZ": ValueOf(syscall.F_GETPIPE_SZ), + "F_GETSIG": ValueOf(syscall.F_GETSIG), + "F_LOCK": ValueOf(syscall.F_LOCK), + "F_NOTIFY": ValueOf(syscall.F_NOTIFY), + "F_OK": ValueOf(syscall.F_OK), + "F_RDLCK": ValueOf(syscall.F_RDLCK), + "F_SETFD": ValueOf(syscall.F_SETFD), + "F_SETFL": ValueOf(syscall.F_SETFL), + "F_SETLEASE": ValueOf(syscall.F_SETLEASE), + "F_SETLK": ValueOf(syscall.F_SETLK), + "F_SETLK64": ValueOf(syscall.F_SETLK64), + "F_SETLKW": ValueOf(syscall.F_SETLKW), + "F_SETLKW64": ValueOf(syscall.F_SETLKW64), + "F_SETOWN": ValueOf(syscall.F_SETOWN), + "F_SETOWN_EX": ValueOf(syscall.F_SETOWN_EX), + "F_SETPIPE_SZ": ValueOf(syscall.F_SETPIPE_SZ), + "F_SETSIG": ValueOf(syscall.F_SETSIG), + "F_SHLCK": ValueOf(syscall.F_SHLCK), + "F_TEST": ValueOf(syscall.F_TEST), + "F_TLOCK": ValueOf(syscall.F_TLOCK), + "F_ULOCK": ValueOf(syscall.F_ULOCK), + "F_UNLCK": ValueOf(syscall.F_UNLCK), + "F_WRLCK": ValueOf(syscall.F_WRLCK), + "Faccessat": ValueOf(syscall.Faccessat), + "Fallocate": ValueOf(syscall.Fallocate), + "Fchdir": ValueOf(syscall.Fchdir), + "Fchmod": ValueOf(syscall.Fchmod), + "Fchmodat": ValueOf(syscall.Fchmodat), + "Fchown": ValueOf(syscall.Fchown), + "Fchownat": ValueOf(syscall.Fchownat), + "FcntlFlock": ValueOf(syscall.FcntlFlock), + "Fdatasync": ValueOf(syscall.Fdatasync), + "Flock": ValueOf(syscall.Flock), + "ForkExec": ValueOf(syscall.ForkExec), + "ForkLock": ValueOf(&syscall.ForkLock).Elem(), + "Fstat": ValueOf(syscall.Fstat), + "Fstatat": ValueOf(syscall.Fstatat), + "Fstatfs": ValueOf(syscall.Fstatfs), + "Fsync": ValueOf(syscall.Fsync), + "Ftruncate": ValueOf(syscall.Ftruncate), + "Futimes": ValueOf(syscall.Futimes), + "Futimesat": ValueOf(syscall.Futimesat), + "Getcwd": ValueOf(syscall.Getcwd), + "Getdents": ValueOf(syscall.Getdents), + "Getegid": ValueOf(syscall.Getegid), + "Getenv": ValueOf(syscall.Getenv), + "Geteuid": ValueOf(syscall.Geteuid), + "Getgid": ValueOf(syscall.Getgid), + "Getgroups": ValueOf(syscall.Getgroups), + "Getpagesize": ValueOf(syscall.Getpagesize), + "Getpeername": ValueOf(syscall.Getpeername), + "Getpgid": ValueOf(syscall.Getpgid), + "Getpgrp": ValueOf(syscall.Getpgrp), + "Getpid": ValueOf(syscall.Getpid), + "Getppid": ValueOf(syscall.Getppid), + "Getpriority": ValueOf(syscall.Getpriority), + "Getrlimit": ValueOf(syscall.Getrlimit), + "Getrusage": ValueOf(syscall.Getrusage), + "Getsockname": ValueOf(syscall.Getsockname), + "GetsockoptICMPv6Filter": ValueOf(syscall.GetsockoptICMPv6Filter), + "GetsockoptIPMreq": ValueOf(syscall.GetsockoptIPMreq), + "GetsockoptIPMreqn": ValueOf(syscall.GetsockoptIPMreqn), + "GetsockoptIPv6MTUInfo": ValueOf(syscall.GetsockoptIPv6MTUInfo), + "GetsockoptIPv6Mreq": ValueOf(syscall.GetsockoptIPv6Mreq), + "GetsockoptInet4Addr": ValueOf(syscall.GetsockoptInet4Addr), + "GetsockoptInt": ValueOf(syscall.GetsockoptInt), + "GetsockoptUcred": ValueOf(syscall.GetsockoptUcred), + "Gettid": ValueOf(syscall.Gettid), + "Gettimeofday": ValueOf(syscall.Gettimeofday), + "Getuid": ValueOf(syscall.Getuid), + "Getwd": ValueOf(syscall.Getwd), + "Getxattr": ValueOf(syscall.Getxattr), + "HUPCL": ValueOf(syscall.HUPCL), + "ICANON": ValueOf(syscall.ICANON), + "ICMPV6_FILTER": ValueOf(syscall.ICMPV6_FILTER), + "ICRNL": ValueOf(syscall.ICRNL), + "IEXTEN": ValueOf(syscall.IEXTEN), + "IFA_ADDRESS": ValueOf(syscall.IFA_ADDRESS), + "IFA_ANYCAST": ValueOf(syscall.IFA_ANYCAST), + "IFA_BROADCAST": ValueOf(syscall.IFA_BROADCAST), + "IFA_CACHEINFO": ValueOf(syscall.IFA_CACHEINFO), + "IFA_F_DADFAILED": ValueOf(syscall.IFA_F_DADFAILED), + "IFA_F_DEPRECATED": ValueOf(syscall.IFA_F_DEPRECATED), + "IFA_F_HOMEADDRESS": ValueOf(syscall.IFA_F_HOMEADDRESS), + "IFA_F_NODAD": ValueOf(syscall.IFA_F_NODAD), + "IFA_F_OPTIMISTIC": ValueOf(syscall.IFA_F_OPTIMISTIC), + "IFA_F_PERMANENT": ValueOf(syscall.IFA_F_PERMANENT), + "IFA_F_SECONDARY": ValueOf(syscall.IFA_F_SECONDARY), + "IFA_F_TEMPORARY": ValueOf(syscall.IFA_F_TEMPORARY), + "IFA_F_TENTATIVE": ValueOf(syscall.IFA_F_TENTATIVE), + "IFA_LABEL": ValueOf(syscall.IFA_LABEL), + "IFA_LOCAL": ValueOf(syscall.IFA_LOCAL), + "IFA_MAX": ValueOf(syscall.IFA_MAX), + "IFA_MULTICAST": ValueOf(syscall.IFA_MULTICAST), + "IFA_UNSPEC": ValueOf(syscall.IFA_UNSPEC), + "IFF_802_1Q_VLAN": ValueOf(syscall.IFF_802_1Q_VLAN), + "IFF_ALLMULTI": ValueOf(syscall.IFF_ALLMULTI), + "IFF_ATTACH_QUEUE": ValueOf(syscall.IFF_ATTACH_QUEUE), + "IFF_AUTOMEDIA": ValueOf(syscall.IFF_AUTOMEDIA), + "IFF_BONDING": ValueOf(syscall.IFF_BONDING), + "IFF_BRIDGE_PORT": ValueOf(syscall.IFF_BRIDGE_PORT), + "IFF_BROADCAST": ValueOf(syscall.IFF_BROADCAST), + "IFF_DEBUG": ValueOf(syscall.IFF_DEBUG), + "IFF_DETACH_QUEUE": ValueOf(syscall.IFF_DETACH_QUEUE), + "IFF_DISABLE_NETPOLL": ValueOf(syscall.IFF_DISABLE_NETPOLL), + "IFF_DONT_BRIDGE": ValueOf(syscall.IFF_DONT_BRIDGE), + "IFF_DORMANT": ValueOf(syscall.IFF_DORMANT), + "IFF_DYNAMIC": ValueOf(syscall.IFF_DYNAMIC), + "IFF_EBRIDGE": ValueOf(syscall.IFF_EBRIDGE), + "IFF_ECHO": ValueOf(syscall.IFF_ECHO), + "IFF_ISATAP": ValueOf(syscall.IFF_ISATAP), + "IFF_LIVE_ADDR_CHANGE": ValueOf(syscall.IFF_LIVE_ADDR_CHANGE), + "IFF_LOOPBACK": ValueOf(syscall.IFF_LOOPBACK), + "IFF_LOWER_UP": ValueOf(syscall.IFF_LOWER_UP), + "IFF_MACVLAN": ValueOf(syscall.IFF_MACVLAN), + "IFF_MACVLAN_PORT": ValueOf(syscall.IFF_MACVLAN_PORT), + "IFF_MASTER": ValueOf(syscall.IFF_MASTER), + "IFF_MASTER_8023AD": ValueOf(syscall.IFF_MASTER_8023AD), + "IFF_MASTER_ALB": ValueOf(syscall.IFF_MASTER_ALB), + "IFF_MASTER_ARPMON": ValueOf(syscall.IFF_MASTER_ARPMON), + "IFF_MULTICAST": ValueOf(syscall.IFF_MULTICAST), + "IFF_MULTI_QUEUE": ValueOf(syscall.IFF_MULTI_QUEUE), + "IFF_NOARP": ValueOf(syscall.IFF_NOARP), + "IFF_NOFILTER": ValueOf(syscall.IFF_NOFILTER), + "IFF_NOTRAILERS": ValueOf(syscall.IFF_NOTRAILERS), + "IFF_NO_PI": ValueOf(syscall.IFF_NO_PI), + "IFF_ONE_QUEUE": ValueOf(syscall.IFF_ONE_QUEUE), + "IFF_OVS_DATAPATH": ValueOf(syscall.IFF_OVS_DATAPATH), + "IFF_PERSIST": ValueOf(syscall.IFF_PERSIST), + "IFF_POINTOPOINT": ValueOf(syscall.IFF_POINTOPOINT), + "IFF_PORTSEL": ValueOf(syscall.IFF_PORTSEL), + "IFF_PROMISC": ValueOf(syscall.IFF_PROMISC), + "IFF_RUNNING": ValueOf(syscall.IFF_RUNNING), + "IFF_SLAVE": ValueOf(syscall.IFF_SLAVE), + "IFF_SLAVE_INACTIVE": ValueOf(syscall.IFF_SLAVE_INACTIVE), + "IFF_SLAVE_NEEDARP": ValueOf(syscall.IFF_SLAVE_NEEDARP), + "IFF_SUPP_NOFCS": ValueOf(syscall.IFF_SUPP_NOFCS), + "IFF_TAP": ValueOf(syscall.IFF_TAP), + "IFF_TEAM_PORT": ValueOf(syscall.IFF_TEAM_PORT), + "IFF_TUN": ValueOf(syscall.IFF_TUN), + "IFF_TUN_EXCL": ValueOf(syscall.IFF_TUN_EXCL), + "IFF_TX_SKB_SHARING": ValueOf(syscall.IFF_TX_SKB_SHARING), + "IFF_UNICAST_FLT": ValueOf(syscall.IFF_UNICAST_FLT), + "IFF_UP": ValueOf(syscall.IFF_UP), + "IFF_VNET_HDR": ValueOf(syscall.IFF_VNET_HDR), + "IFF_VOLATILE": ValueOf(syscall.IFF_VOLATILE), + "IFF_WAN_HDLC": ValueOf(syscall.IFF_WAN_HDLC), + "IFF_XMIT_DST_RELEASE": ValueOf(syscall.IFF_XMIT_DST_RELEASE), + "IFLA_ADDRESS": ValueOf(syscall.IFLA_ADDRESS), + "IFLA_BROADCAST": ValueOf(syscall.IFLA_BROADCAST), + "IFLA_COST": ValueOf(syscall.IFLA_COST), + "IFLA_IFALIAS": ValueOf(syscall.IFLA_IFALIAS), + "IFLA_IFNAME": ValueOf(syscall.IFLA_IFNAME), + "IFLA_LINK": ValueOf(syscall.IFLA_LINK), + "IFLA_LINKINFO": ValueOf(syscall.IFLA_LINKINFO), + "IFLA_LINKMODE": ValueOf(syscall.IFLA_LINKMODE), + "IFLA_MAP": ValueOf(syscall.IFLA_MAP), + "IFLA_MASTER": ValueOf(syscall.IFLA_MASTER), + "IFLA_MAX": ValueOf(syscall.IFLA_MAX), + "IFLA_MTU": ValueOf(syscall.IFLA_MTU), + "IFLA_NET_NS_PID": ValueOf(syscall.IFLA_NET_NS_PID), + "IFLA_OPERSTATE": ValueOf(syscall.IFLA_OPERSTATE), + "IFLA_PRIORITY": ValueOf(syscall.IFLA_PRIORITY), + "IFLA_PROTINFO": ValueOf(syscall.IFLA_PROTINFO), + "IFLA_QDISC": ValueOf(syscall.IFLA_QDISC), + "IFLA_STATS": ValueOf(syscall.IFLA_STATS), + "IFLA_TXQLEN": ValueOf(syscall.IFLA_TXQLEN), + "IFLA_UNSPEC": ValueOf(syscall.IFLA_UNSPEC), + "IFLA_WEIGHT": ValueOf(syscall.IFLA_WEIGHT), + "IFLA_WIRELESS": ValueOf(syscall.IFLA_WIRELESS), + "IFNAMSIZ": ValueOf(syscall.IFNAMSIZ), + "IGNBRK": ValueOf(syscall.IGNBRK), + "IGNCR": ValueOf(syscall.IGNCR), + "IGNPAR": ValueOf(syscall.IGNPAR), + "IMAXBEL": ValueOf(syscall.IMAXBEL), + "INLCR": ValueOf(syscall.INLCR), + "INPCK": ValueOf(syscall.INPCK), + "IN_ACCESS": ValueOf(syscall.IN_ACCESS), + "IN_ALL_EVENTS": ValueOf(syscall.IN_ALL_EVENTS), + "IN_ATTRIB": ValueOf(syscall.IN_ATTRIB), + "IN_CLASSA_HOST": ValueOf(syscall.IN_CLASSA_HOST), + "IN_CLASSA_MAX": ValueOf(syscall.IN_CLASSA_MAX), + "IN_CLASSA_NET": ValueOf(uint32(syscall.IN_CLASSA_NET)), + "IN_CLASSA_NSHIFT": ValueOf(syscall.IN_CLASSA_NSHIFT), + "IN_CLASSB_HOST": ValueOf(syscall.IN_CLASSB_HOST), + "IN_CLASSB_MAX": ValueOf(syscall.IN_CLASSB_MAX), + "IN_CLASSB_NET": ValueOf(uint32(syscall.IN_CLASSB_NET)), + "IN_CLASSB_NSHIFT": ValueOf(syscall.IN_CLASSB_NSHIFT), + "IN_CLASSC_HOST": ValueOf(syscall.IN_CLASSC_HOST), + "IN_CLASSC_NET": ValueOf(uint32(syscall.IN_CLASSC_NET)), + "IN_CLASSC_NSHIFT": ValueOf(syscall.IN_CLASSC_NSHIFT), + "IN_CLOEXEC": ValueOf(syscall.IN_CLOEXEC), + "IN_CLOSE": ValueOf(syscall.IN_CLOSE), + "IN_CLOSE_NOWRITE": ValueOf(syscall.IN_CLOSE_NOWRITE), + "IN_CLOSE_WRITE": ValueOf(syscall.IN_CLOSE_WRITE), + "IN_CREATE": ValueOf(syscall.IN_CREATE), + "IN_DELETE": ValueOf(syscall.IN_DELETE), + "IN_DELETE_SELF": ValueOf(syscall.IN_DELETE_SELF), + "IN_DONT_FOLLOW": ValueOf(syscall.IN_DONT_FOLLOW), + "IN_EXCL_UNLINK": ValueOf(syscall.IN_EXCL_UNLINK), + "IN_IGNORED": ValueOf(syscall.IN_IGNORED), + "IN_ISDIR": ValueOf(syscall.IN_ISDIR), + "IN_LOOPBACKNET": ValueOf(syscall.IN_LOOPBACKNET), + "IN_MASK_ADD": ValueOf(syscall.IN_MASK_ADD), + "IN_MODIFY": ValueOf(syscall.IN_MODIFY), + "IN_MOVE": ValueOf(syscall.IN_MOVE), + "IN_MOVED_FROM": ValueOf(syscall.IN_MOVED_FROM), + "IN_MOVED_TO": ValueOf(syscall.IN_MOVED_TO), + "IN_MOVE_SELF": ValueOf(syscall.IN_MOVE_SELF), + "IN_NONBLOCK": ValueOf(syscall.IN_NONBLOCK), + "IN_ONESHOT": ValueOf(uint32(syscall.IN_ONESHOT)), + "IN_ONLYDIR": ValueOf(syscall.IN_ONLYDIR), + "IN_OPEN": ValueOf(syscall.IN_OPEN), + "IN_Q_OVERFLOW": ValueOf(syscall.IN_Q_OVERFLOW), + "IN_UNMOUNT": ValueOf(syscall.IN_UNMOUNT), + "IPPROTO_AH": ValueOf(syscall.IPPROTO_AH), + "IPPROTO_BEETPH": ValueOf(syscall.IPPROTO_BEETPH), + "IPPROTO_COMP": ValueOf(syscall.IPPROTO_COMP), + "IPPROTO_DCCP": ValueOf(syscall.IPPROTO_DCCP), + "IPPROTO_DSTOPTS": ValueOf(syscall.IPPROTO_DSTOPTS), + "IPPROTO_EGP": ValueOf(syscall.IPPROTO_EGP), + "IPPROTO_ENCAP": ValueOf(syscall.IPPROTO_ENCAP), + "IPPROTO_ESP": ValueOf(syscall.IPPROTO_ESP), + "IPPROTO_FRAGMENT": ValueOf(syscall.IPPROTO_FRAGMENT), + "IPPROTO_GRE": ValueOf(syscall.IPPROTO_GRE), + "IPPROTO_HOPOPTS": ValueOf(syscall.IPPROTO_HOPOPTS), + "IPPROTO_ICMP": ValueOf(syscall.IPPROTO_ICMP), + "IPPROTO_ICMPV6": ValueOf(syscall.IPPROTO_ICMPV6), + "IPPROTO_IDP": ValueOf(syscall.IPPROTO_IDP), + "IPPROTO_IGMP": ValueOf(syscall.IPPROTO_IGMP), + "IPPROTO_IP": ValueOf(syscall.IPPROTO_IP), + "IPPROTO_IPIP": ValueOf(syscall.IPPROTO_IPIP), + "IPPROTO_IPV6": ValueOf(syscall.IPPROTO_IPV6), + "IPPROTO_MH": ValueOf(syscall.IPPROTO_MH), + "IPPROTO_MTP": ValueOf(syscall.IPPROTO_MTP), + "IPPROTO_NONE": ValueOf(syscall.IPPROTO_NONE), + "IPPROTO_PIM": ValueOf(syscall.IPPROTO_PIM), + "IPPROTO_PUP": ValueOf(syscall.IPPROTO_PUP), + "IPPROTO_RAW": ValueOf(syscall.IPPROTO_RAW), + "IPPROTO_ROUTING": ValueOf(syscall.IPPROTO_ROUTING), + "IPPROTO_RSVP": ValueOf(syscall.IPPROTO_RSVP), + "IPPROTO_SCTP": ValueOf(syscall.IPPROTO_SCTP), + "IPPROTO_TCP": ValueOf(syscall.IPPROTO_TCP), + "IPPROTO_TP": ValueOf(syscall.IPPROTO_TP), + "IPPROTO_UDP": ValueOf(syscall.IPPROTO_UDP), + "IPPROTO_UDPLITE": ValueOf(syscall.IPPROTO_UDPLITE), + "IPV6_2292DSTOPTS": ValueOf(syscall.IPV6_2292DSTOPTS), + "IPV6_2292HOPLIMIT": ValueOf(syscall.IPV6_2292HOPLIMIT), + "IPV6_2292HOPOPTS": ValueOf(syscall.IPV6_2292HOPOPTS), + "IPV6_2292PKTINFO": ValueOf(syscall.IPV6_2292PKTINFO), + "IPV6_2292PKTOPTIONS": ValueOf(syscall.IPV6_2292PKTOPTIONS), + "IPV6_2292RTHDR": ValueOf(syscall.IPV6_2292RTHDR), + "IPV6_ADDRFORM": ValueOf(syscall.IPV6_ADDRFORM), + "IPV6_ADD_MEMBERSHIP": ValueOf(syscall.IPV6_ADD_MEMBERSHIP), + "IPV6_AUTHHDR": ValueOf(syscall.IPV6_AUTHHDR), + "IPV6_CHECKSUM": ValueOf(syscall.IPV6_CHECKSUM), + "IPV6_DROP_MEMBERSHIP": ValueOf(syscall.IPV6_DROP_MEMBERSHIP), + "IPV6_DSTOPTS": ValueOf(syscall.IPV6_DSTOPTS), + "IPV6_HOPLIMIT": ValueOf(syscall.IPV6_HOPLIMIT), + "IPV6_HOPOPTS": ValueOf(syscall.IPV6_HOPOPTS), + "IPV6_IPSEC_POLICY": ValueOf(syscall.IPV6_IPSEC_POLICY), + "IPV6_JOIN_ANYCAST": ValueOf(syscall.IPV6_JOIN_ANYCAST), + "IPV6_JOIN_GROUP": ValueOf(syscall.IPV6_JOIN_GROUP), + "IPV6_LEAVE_ANYCAST": ValueOf(syscall.IPV6_LEAVE_ANYCAST), + "IPV6_LEAVE_GROUP": ValueOf(syscall.IPV6_LEAVE_GROUP), + "IPV6_MTU": ValueOf(syscall.IPV6_MTU), + "IPV6_MTU_DISCOVER": ValueOf(syscall.IPV6_MTU_DISCOVER), + "IPV6_MULTICAST_HOPS": ValueOf(syscall.IPV6_MULTICAST_HOPS), + "IPV6_MULTICAST_IF": ValueOf(syscall.IPV6_MULTICAST_IF), + "IPV6_MULTICAST_LOOP": ValueOf(syscall.IPV6_MULTICAST_LOOP), + "IPV6_NEXTHOP": ValueOf(syscall.IPV6_NEXTHOP), + "IPV6_PKTINFO": ValueOf(syscall.IPV6_PKTINFO), + "IPV6_PMTUDISC_DO": ValueOf(syscall.IPV6_PMTUDISC_DO), + "IPV6_PMTUDISC_DONT": ValueOf(syscall.IPV6_PMTUDISC_DONT), + "IPV6_PMTUDISC_PROBE": ValueOf(syscall.IPV6_PMTUDISC_PROBE), + "IPV6_PMTUDISC_WANT": ValueOf(syscall.IPV6_PMTUDISC_WANT), + "IPV6_RECVDSTOPTS": ValueOf(syscall.IPV6_RECVDSTOPTS), + "IPV6_RECVERR": ValueOf(syscall.IPV6_RECVERR), + "IPV6_RECVHOPLIMIT": ValueOf(syscall.IPV6_RECVHOPLIMIT), + "IPV6_RECVHOPOPTS": ValueOf(syscall.IPV6_RECVHOPOPTS), + "IPV6_RECVPKTINFO": ValueOf(syscall.IPV6_RECVPKTINFO), + "IPV6_RECVRTHDR": ValueOf(syscall.IPV6_RECVRTHDR), + "IPV6_RECVTCLASS": ValueOf(syscall.IPV6_RECVTCLASS), + "IPV6_ROUTER_ALERT": ValueOf(syscall.IPV6_ROUTER_ALERT), + "IPV6_RTHDR": ValueOf(syscall.IPV6_RTHDR), + "IPV6_RTHDRDSTOPTS": ValueOf(syscall.IPV6_RTHDRDSTOPTS), + "IPV6_RTHDR_LOOSE": ValueOf(syscall.IPV6_RTHDR_LOOSE), + "IPV6_RTHDR_STRICT": ValueOf(syscall.IPV6_RTHDR_STRICT), + "IPV6_RTHDR_TYPE_0": ValueOf(syscall.IPV6_RTHDR_TYPE_0), + "IPV6_RXDSTOPTS": ValueOf(syscall.IPV6_RXDSTOPTS), + "IPV6_RXHOPOPTS": ValueOf(syscall.IPV6_RXHOPOPTS), + "IPV6_TCLASS": ValueOf(syscall.IPV6_TCLASS), + "IPV6_UNICAST_HOPS": ValueOf(syscall.IPV6_UNICAST_HOPS), + "IPV6_V6ONLY": ValueOf(syscall.IPV6_V6ONLY), + "IPV6_XFRM_POLICY": ValueOf(syscall.IPV6_XFRM_POLICY), + "IP_ADD_MEMBERSHIP": ValueOf(syscall.IP_ADD_MEMBERSHIP), + "IP_ADD_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_ADD_SOURCE_MEMBERSHIP), + "IP_BLOCK_SOURCE": ValueOf(syscall.IP_BLOCK_SOURCE), + "IP_DEFAULT_MULTICAST_LOOP": ValueOf(syscall.IP_DEFAULT_MULTICAST_LOOP), + "IP_DEFAULT_MULTICAST_TTL": ValueOf(syscall.IP_DEFAULT_MULTICAST_TTL), + "IP_DF": ValueOf(syscall.IP_DF), + "IP_DROP_MEMBERSHIP": ValueOf(syscall.IP_DROP_MEMBERSHIP), + "IP_DROP_SOURCE_MEMBERSHIP": ValueOf(syscall.IP_DROP_SOURCE_MEMBERSHIP), + "IP_FREEBIND": ValueOf(syscall.IP_FREEBIND), + "IP_HDRINCL": ValueOf(syscall.IP_HDRINCL), + "IP_IPSEC_POLICY": ValueOf(syscall.IP_IPSEC_POLICY), + "IP_MAXPACKET": ValueOf(syscall.IP_MAXPACKET), + "IP_MAX_MEMBERSHIPS": ValueOf(syscall.IP_MAX_MEMBERSHIPS), + "IP_MF": ValueOf(syscall.IP_MF), + "IP_MINTTL": ValueOf(syscall.IP_MINTTL), + "IP_MSFILTER": ValueOf(syscall.IP_MSFILTER), + "IP_MSS": ValueOf(syscall.IP_MSS), + "IP_MTU": ValueOf(syscall.IP_MTU), + "IP_MTU_DISCOVER": ValueOf(syscall.IP_MTU_DISCOVER), + "IP_MULTICAST_ALL": ValueOf(syscall.IP_MULTICAST_ALL), + "IP_MULTICAST_IF": ValueOf(syscall.IP_MULTICAST_IF), + "IP_MULTICAST_LOOP": ValueOf(syscall.IP_MULTICAST_LOOP), + "IP_MULTICAST_TTL": ValueOf(syscall.IP_MULTICAST_TTL), + "IP_OFFMASK": ValueOf(syscall.IP_OFFMASK), + "IP_OPTIONS": ValueOf(syscall.IP_OPTIONS), + "IP_ORIGDSTADDR": ValueOf(syscall.IP_ORIGDSTADDR), + "IP_PASSSEC": ValueOf(syscall.IP_PASSSEC), + "IP_PKTINFO": ValueOf(syscall.IP_PKTINFO), + "IP_PKTOPTIONS": ValueOf(syscall.IP_PKTOPTIONS), + "IP_PMTUDISC": ValueOf(syscall.IP_PMTUDISC), + "IP_PMTUDISC_DO": ValueOf(syscall.IP_PMTUDISC_DO), + "IP_PMTUDISC_DONT": ValueOf(syscall.IP_PMTUDISC_DONT), + "IP_PMTUDISC_PROBE": ValueOf(syscall.IP_PMTUDISC_PROBE), + "IP_PMTUDISC_WANT": ValueOf(syscall.IP_PMTUDISC_WANT), + "IP_RECVERR": ValueOf(syscall.IP_RECVERR), + "IP_RECVOPTS": ValueOf(syscall.IP_RECVOPTS), + "IP_RECVORIGDSTADDR": ValueOf(syscall.IP_RECVORIGDSTADDR), + "IP_RECVRETOPTS": ValueOf(syscall.IP_RECVRETOPTS), + "IP_RECVTOS": ValueOf(syscall.IP_RECVTOS), + "IP_RECVTTL": ValueOf(syscall.IP_RECVTTL), + "IP_RETOPTS": ValueOf(syscall.IP_RETOPTS), + "IP_RF": ValueOf(syscall.IP_RF), + "IP_ROUTER_ALERT": ValueOf(syscall.IP_ROUTER_ALERT), + "IP_TOS": ValueOf(syscall.IP_TOS), + "IP_TRANSPARENT": ValueOf(syscall.IP_TRANSPARENT), + "IP_TTL": ValueOf(syscall.IP_TTL), + "IP_UNBLOCK_SOURCE": ValueOf(syscall.IP_UNBLOCK_SOURCE), + "IP_UNICAST_IF": ValueOf(syscall.IP_UNICAST_IF), + "IP_XFRM_POLICY": ValueOf(syscall.IP_XFRM_POLICY), + "ISIG": ValueOf(syscall.ISIG), + "ISTRIP": ValueOf(syscall.ISTRIP), + "IUCLC": ValueOf(syscall.IUCLC), + "IUTF8": ValueOf(syscall.IUTF8), + "IXANY": ValueOf(syscall.IXANY), + "IXOFF": ValueOf(syscall.IXOFF), + "IXON": ValueOf(syscall.IXON), + "ImplementsGetwd": ValueOf(syscall.ImplementsGetwd), + "InotifyAddWatch": ValueOf(syscall.InotifyAddWatch), + "InotifyInit": ValueOf(syscall.InotifyInit), + "InotifyInit1": ValueOf(syscall.InotifyInit1), + "InotifyRmWatch": ValueOf(syscall.InotifyRmWatch), + "Kill": ValueOf(syscall.Kill), + "Klogctl": ValueOf(syscall.Klogctl), + "LINUX_REBOOT_CMD_CAD_OFF": ValueOf(syscall.LINUX_REBOOT_CMD_CAD_OFF), + "LINUX_REBOOT_CMD_CAD_ON": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_CAD_ON)), + "LINUX_REBOOT_CMD_HALT": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_HALT)), + "LINUX_REBOOT_CMD_KEXEC": ValueOf(syscall.LINUX_REBOOT_CMD_KEXEC), + "LINUX_REBOOT_CMD_POWER_OFF": ValueOf(syscall.LINUX_REBOOT_CMD_POWER_OFF), + "LINUX_REBOOT_CMD_RESTART": ValueOf(syscall.LINUX_REBOOT_CMD_RESTART), + "LINUX_REBOOT_CMD_RESTART2": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_RESTART2)), + "LINUX_REBOOT_CMD_SW_SUSPEND": ValueOf(uint32(syscall.LINUX_REBOOT_CMD_SW_SUSPEND)), + "LINUX_REBOOT_MAGIC1": ValueOf(uint32(syscall.LINUX_REBOOT_MAGIC1)), + "LINUX_REBOOT_MAGIC2": ValueOf(syscall.LINUX_REBOOT_MAGIC2), + "LOCK_EX": ValueOf(syscall.LOCK_EX), + "LOCK_NB": ValueOf(syscall.LOCK_NB), + "LOCK_SH": ValueOf(syscall.LOCK_SH), + "LOCK_UN": ValueOf(syscall.LOCK_UN), + "Lchown": ValueOf(syscall.Lchown), + "Link": ValueOf(syscall.Link), + "Listen": ValueOf(syscall.Listen), + "Listxattr": ValueOf(syscall.Listxattr), + "LsfJump": ValueOf(syscall.LsfJump), + "LsfSocket": ValueOf(syscall.LsfSocket), + "LsfStmt": ValueOf(syscall.LsfStmt), + "Lstat": ValueOf(syscall.Lstat), + "MADV_DODUMP": ValueOf(syscall.MADV_DODUMP), + "MADV_DOFORK": ValueOf(syscall.MADV_DOFORK), + "MADV_DONTDUMP": ValueOf(syscall.MADV_DONTDUMP), + "MADV_DONTFORK": ValueOf(syscall.MADV_DONTFORK), + "MADV_DONTNEED": ValueOf(syscall.MADV_DONTNEED), + "MADV_HUGEPAGE": ValueOf(syscall.MADV_HUGEPAGE), + "MADV_HWPOISON": ValueOf(syscall.MADV_HWPOISON), + "MADV_MERGEABLE": ValueOf(syscall.MADV_MERGEABLE), + "MADV_NOHUGEPAGE": ValueOf(syscall.MADV_NOHUGEPAGE), + "MADV_NORMAL": ValueOf(syscall.MADV_NORMAL), + "MADV_RANDOM": ValueOf(syscall.MADV_RANDOM), + "MADV_REMOVE": ValueOf(syscall.MADV_REMOVE), + "MADV_SEQUENTIAL": ValueOf(syscall.MADV_SEQUENTIAL), + "MADV_UNMERGEABLE": ValueOf(syscall.MADV_UNMERGEABLE), + "MADV_WILLNEED": ValueOf(syscall.MADV_WILLNEED), + "MAP_ANON": ValueOf(syscall.MAP_ANON), + "MAP_ANONYMOUS": ValueOf(syscall.MAP_ANONYMOUS), + "MAP_DENYWRITE": ValueOf(syscall.MAP_DENYWRITE), + "MAP_EXECUTABLE": ValueOf(syscall.MAP_EXECUTABLE), + "MAP_FILE": ValueOf(syscall.MAP_FILE), + "MAP_FIXED": ValueOf(syscall.MAP_FIXED), + "MAP_GROWSDOWN": ValueOf(syscall.MAP_GROWSDOWN), + "MAP_HUGETLB": ValueOf(syscall.MAP_HUGETLB), + "MAP_HUGE_MASK": ValueOf(syscall.MAP_HUGE_MASK), + "MAP_HUGE_SHIFT": ValueOf(syscall.MAP_HUGE_SHIFT), + "MAP_LOCKED": ValueOf(syscall.MAP_LOCKED), + "MAP_NONBLOCK": ValueOf(syscall.MAP_NONBLOCK), + "MAP_NORESERVE": ValueOf(syscall.MAP_NORESERVE), + "MAP_POPULATE": ValueOf(syscall.MAP_POPULATE), + "MAP_PRIVATE": ValueOf(syscall.MAP_PRIVATE), + "MAP_SHARED": ValueOf(syscall.MAP_SHARED), + "MAP_STACK": ValueOf(syscall.MAP_STACK), + "MAP_TYPE": ValueOf(syscall.MAP_TYPE), + "MCL_CURRENT": ValueOf(syscall.MCL_CURRENT), + "MCL_FUTURE": ValueOf(syscall.MCL_FUTURE), + "MNT_DETACH": ValueOf(syscall.MNT_DETACH), + "MNT_EXPIRE": ValueOf(syscall.MNT_EXPIRE), + "MNT_FORCE": ValueOf(syscall.MNT_FORCE), + "MSG_CMSG_CLOEXEC": ValueOf(syscall.MSG_CMSG_CLOEXEC), + "MSG_CONFIRM": ValueOf(syscall.MSG_CONFIRM), + "MSG_CTRUNC": ValueOf(syscall.MSG_CTRUNC), + "MSG_DONTROUTE": ValueOf(syscall.MSG_DONTROUTE), + "MSG_DONTWAIT": ValueOf(syscall.MSG_DONTWAIT), + "MSG_EOR": ValueOf(syscall.MSG_EOR), + "MSG_ERRQUEUE": ValueOf(syscall.MSG_ERRQUEUE), + "MSG_FASTOPEN": ValueOf(syscall.MSG_FASTOPEN), + "MSG_FIN": ValueOf(syscall.MSG_FIN), + "MSG_MORE": ValueOf(syscall.MSG_MORE), + "MSG_NOSIGNAL": ValueOf(syscall.MSG_NOSIGNAL), + "MSG_OOB": ValueOf(syscall.MSG_OOB), + "MSG_PEEK": ValueOf(syscall.MSG_PEEK), + "MSG_PROXY": ValueOf(syscall.MSG_PROXY), + "MSG_RST": ValueOf(syscall.MSG_RST), + "MSG_SYN": ValueOf(syscall.MSG_SYN), + "MSG_TRUNC": ValueOf(syscall.MSG_TRUNC), + "MSG_TRYHARD": ValueOf(syscall.MSG_TRYHARD), + "MSG_WAITALL": ValueOf(syscall.MSG_WAITALL), + "MSG_WAITFORONE": ValueOf(syscall.MSG_WAITFORONE), + "MS_ACTIVE": ValueOf(syscall.MS_ACTIVE), + "MS_ASYNC": ValueOf(syscall.MS_ASYNC), + "MS_BIND": ValueOf(syscall.MS_BIND), + "MS_DIRSYNC": ValueOf(syscall.MS_DIRSYNC), + "MS_INVALIDATE": ValueOf(syscall.MS_INVALIDATE), + "MS_I_VERSION": ValueOf(syscall.MS_I_VERSION), + "MS_KERNMOUNT": ValueOf(syscall.MS_KERNMOUNT), + "MS_MANDLOCK": ValueOf(syscall.MS_MANDLOCK), + "MS_MGC_MSK": ValueOf(uint32(syscall.MS_MGC_MSK)), + "MS_MGC_VAL": ValueOf(uint32(syscall.MS_MGC_VAL)), + "MS_MOVE": ValueOf(syscall.MS_MOVE), + "MS_NOATIME": ValueOf(syscall.MS_NOATIME), + "MS_NODEV": ValueOf(syscall.MS_NODEV), + "MS_NODIRATIME": ValueOf(syscall.MS_NODIRATIME), + "MS_NOEXEC": ValueOf(syscall.MS_NOEXEC), + "MS_NOSUID": ValueOf(syscall.MS_NOSUID), + "MS_NOUSER": ValueOf(syscall.MS_NOUSER), + "MS_POSIXACL": ValueOf(syscall.MS_POSIXACL), + "MS_PRIVATE": ValueOf(syscall.MS_PRIVATE), + "MS_RDONLY": ValueOf(syscall.MS_RDONLY), + "MS_REC": ValueOf(syscall.MS_REC), + "MS_RELATIME": ValueOf(syscall.MS_RELATIME), + "MS_REMOUNT": ValueOf(syscall.MS_REMOUNT), + "MS_RMT_MASK": ValueOf(syscall.MS_RMT_MASK), + "MS_SHARED": ValueOf(syscall.MS_SHARED), + "MS_SILENT": ValueOf(syscall.MS_SILENT), + "MS_SLAVE": ValueOf(syscall.MS_SLAVE), + "MS_STRICTATIME": ValueOf(syscall.MS_STRICTATIME), + "MS_SYNC": ValueOf(syscall.MS_SYNC), + "MS_SYNCHRONOUS": ValueOf(syscall.MS_SYNCHRONOUS), + "MS_UNBINDABLE": ValueOf(syscall.MS_UNBINDABLE), + "Madvise": ValueOf(syscall.Madvise), + "Mkdir": ValueOf(syscall.Mkdir), + "Mkdirat": ValueOf(syscall.Mkdirat), + "Mkfifo": ValueOf(syscall.Mkfifo), + "Mknod": ValueOf(syscall.Mknod), + "Mknodat": ValueOf(syscall.Mknodat), + "Mlock": ValueOf(syscall.Mlock), + "Mlockall": ValueOf(syscall.Mlockall), + "Mmap": ValueOf(syscall.Mmap), + "Mount": ValueOf(syscall.Mount), + "Mprotect": ValueOf(syscall.Mprotect), + "Munlock": ValueOf(syscall.Munlock), + "Munlockall": ValueOf(syscall.Munlockall), + "Munmap": ValueOf(syscall.Munmap), + "NAME_MAX": ValueOf(syscall.NAME_MAX), + "NETLINK_ADD_MEMBERSHIP": ValueOf(syscall.NETLINK_ADD_MEMBERSHIP), + "NETLINK_AUDIT": ValueOf(syscall.NETLINK_AUDIT), + "NETLINK_BROADCAST_ERROR": ValueOf(syscall.NETLINK_BROADCAST_ERROR), + "NETLINK_CONNECTOR": ValueOf(syscall.NETLINK_CONNECTOR), + "NETLINK_CRYPTO": ValueOf(syscall.NETLINK_CRYPTO), + "NETLINK_DNRTMSG": ValueOf(syscall.NETLINK_DNRTMSG), + "NETLINK_DROP_MEMBERSHIP": ValueOf(syscall.NETLINK_DROP_MEMBERSHIP), + "NETLINK_ECRYPTFS": ValueOf(syscall.NETLINK_ECRYPTFS), + "NETLINK_FIB_LOOKUP": ValueOf(syscall.NETLINK_FIB_LOOKUP), + "NETLINK_FIREWALL": ValueOf(syscall.NETLINK_FIREWALL), + "NETLINK_GENERIC": ValueOf(syscall.NETLINK_GENERIC), + "NETLINK_INET_DIAG": ValueOf(syscall.NETLINK_INET_DIAG), + "NETLINK_IP6_FW": ValueOf(syscall.NETLINK_IP6_FW), + "NETLINK_ISCSI": ValueOf(syscall.NETLINK_ISCSI), + "NETLINK_KOBJECT_UEVENT": ValueOf(syscall.NETLINK_KOBJECT_UEVENT), + "NETLINK_NETFILTER": ValueOf(syscall.NETLINK_NETFILTER), + "NETLINK_NFLOG": ValueOf(syscall.NETLINK_NFLOG), + "NETLINK_NO_ENOBUFS": ValueOf(syscall.NETLINK_NO_ENOBUFS), + "NETLINK_PKTINFO": ValueOf(syscall.NETLINK_PKTINFO), + "NETLINK_RDMA": ValueOf(syscall.NETLINK_RDMA), + "NETLINK_ROUTE": ValueOf(syscall.NETLINK_ROUTE), + "NETLINK_RX_RING": ValueOf(syscall.NETLINK_RX_RING), + "NETLINK_SCSITRANSPORT": ValueOf(syscall.NETLINK_SCSITRANSPORT), + "NETLINK_SELINUX": ValueOf(syscall.NETLINK_SELINUX), + "NETLINK_SOCK_DIAG": ValueOf(syscall.NETLINK_SOCK_DIAG), + "NETLINK_TX_RING": ValueOf(syscall.NETLINK_TX_RING), + "NETLINK_UNUSED": ValueOf(syscall.NETLINK_UNUSED), + "NETLINK_USERSOCK": ValueOf(syscall.NETLINK_USERSOCK), + "NETLINK_XFRM": ValueOf(syscall.NETLINK_XFRM), + "NLA_ALIGNTO": ValueOf(syscall.NLA_ALIGNTO), + "NLA_F_NESTED": ValueOf(syscall.NLA_F_NESTED), + "NLA_F_NET_BYTEORDER": ValueOf(syscall.NLA_F_NET_BYTEORDER), + "NLA_HDRLEN": ValueOf(syscall.NLA_HDRLEN), + "NLMSG_ALIGNTO": ValueOf(syscall.NLMSG_ALIGNTO), + "NLMSG_DONE": ValueOf(syscall.NLMSG_DONE), + "NLMSG_ERROR": ValueOf(syscall.NLMSG_ERROR), + "NLMSG_HDRLEN": ValueOf(syscall.NLMSG_HDRLEN), + "NLMSG_MIN_TYPE": ValueOf(syscall.NLMSG_MIN_TYPE), + "NLMSG_NOOP": ValueOf(syscall.NLMSG_NOOP), + "NLMSG_OVERRUN": ValueOf(syscall.NLMSG_OVERRUN), + "NLM_F_ACK": ValueOf(syscall.NLM_F_ACK), + "NLM_F_APPEND": ValueOf(syscall.NLM_F_APPEND), + "NLM_F_ATOMIC": ValueOf(syscall.NLM_F_ATOMIC), + "NLM_F_CREATE": ValueOf(syscall.NLM_F_CREATE), + "NLM_F_DUMP": ValueOf(syscall.NLM_F_DUMP), + "NLM_F_DUMP_INTR": ValueOf(syscall.NLM_F_DUMP_INTR), + "NLM_F_ECHO": ValueOf(syscall.NLM_F_ECHO), + "NLM_F_EXCL": ValueOf(syscall.NLM_F_EXCL), + "NLM_F_MATCH": ValueOf(syscall.NLM_F_MATCH), + "NLM_F_MULTI": ValueOf(syscall.NLM_F_MULTI), + "NLM_F_REPLACE": ValueOf(syscall.NLM_F_REPLACE), + "NLM_F_REQUEST": ValueOf(syscall.NLM_F_REQUEST), + "NLM_F_ROOT": ValueOf(syscall.NLM_F_ROOT), + "NOFLSH": ValueOf(syscall.NOFLSH), + "Nanosleep": ValueOf(syscall.Nanosleep), + "NetlinkRIB": ValueOf(syscall.NetlinkRIB), + "NsecToTimespec": ValueOf(syscall.NsecToTimespec), + "NsecToTimeval": ValueOf(syscall.NsecToTimeval), + "OCRNL": ValueOf(syscall.OCRNL), + "OFDEL": ValueOf(syscall.OFDEL), + "OFILL": ValueOf(syscall.OFILL), + "OLCUC": ValueOf(syscall.OLCUC), + "ONLCR": ValueOf(syscall.ONLCR), + "ONLRET": ValueOf(syscall.ONLRET), + "ONOCR": ValueOf(syscall.ONOCR), + "OPOST": ValueOf(syscall.OPOST), + "O_ACCMODE": ValueOf(syscall.O_ACCMODE), + "O_APPEND": ValueOf(syscall.O_APPEND), + "O_ASYNC": ValueOf(syscall.O_ASYNC), + "O_CLOEXEC": ValueOf(syscall.O_CLOEXEC), + "O_CREAT": ValueOf(syscall.O_CREAT), + "O_DIRECT": ValueOf(syscall.O_DIRECT), + "O_DIRECTORY": ValueOf(syscall.O_DIRECTORY), + "O_DSYNC": ValueOf(syscall.O_DSYNC), + "O_EXCL": ValueOf(syscall.O_EXCL), + "O_FSYNC": ValueOf(syscall.O_FSYNC), + "O_LARGEFILE": ValueOf(syscall.O_LARGEFILE), + "O_NDELAY": ValueOf(syscall.O_NDELAY), + "O_NOATIME": ValueOf(syscall.O_NOATIME), + "O_NOCTTY": ValueOf(syscall.O_NOCTTY), + "O_NOFOLLOW": ValueOf(syscall.O_NOFOLLOW), + "O_NONBLOCK": ValueOf(syscall.O_NONBLOCK), + "O_PATH": ValueOf(syscall.O_PATH), + "O_RDONLY": ValueOf(syscall.O_RDONLY), + "O_RDWR": ValueOf(syscall.O_RDWR), + "O_RSYNC": ValueOf(syscall.O_RSYNC), + "O_SYNC": ValueOf(syscall.O_SYNC), + "O_TMPFILE": ValueOf(syscall.O_TMPFILE), + "O_TRUNC": ValueOf(syscall.O_TRUNC), + "O_WRONLY": ValueOf(syscall.O_WRONLY), + "Open": ValueOf(syscall.Open), + "Openat": ValueOf(syscall.Openat), + "PACKET_ADD_MEMBERSHIP": ValueOf(syscall.PACKET_ADD_MEMBERSHIP), + "PACKET_AUXDATA": ValueOf(syscall.PACKET_AUXDATA), + "PACKET_BROADCAST": ValueOf(syscall.PACKET_BROADCAST), + "PACKET_COPY_THRESH": ValueOf(syscall.PACKET_COPY_THRESH), + "PACKET_DROP_MEMBERSHIP": ValueOf(syscall.PACKET_DROP_MEMBERSHIP), + "PACKET_FANOUT": ValueOf(syscall.PACKET_FANOUT), + "PACKET_FANOUT_CPU": ValueOf(syscall.PACKET_FANOUT_CPU), + "PACKET_FANOUT_FLAG_DEFRAG": ValueOf(syscall.PACKET_FANOUT_FLAG_DEFRAG), + "PACKET_FANOUT_FLAG_ROLLOVER": ValueOf(syscall.PACKET_FANOUT_FLAG_ROLLOVER), + "PACKET_FANOUT_HASH": ValueOf(syscall.PACKET_FANOUT_HASH), + "PACKET_FANOUT_LB": ValueOf(syscall.PACKET_FANOUT_LB), + "PACKET_FANOUT_RND": ValueOf(syscall.PACKET_FANOUT_RND), + "PACKET_FANOUT_ROLLOVER": ValueOf(syscall.PACKET_FANOUT_ROLLOVER), + "PACKET_FASTROUTE": ValueOf(syscall.PACKET_FASTROUTE), + "PACKET_HDRLEN": ValueOf(syscall.PACKET_HDRLEN), + "PACKET_HOST": ValueOf(syscall.PACKET_HOST), + "PACKET_LOOPBACK": ValueOf(syscall.PACKET_LOOPBACK), + "PACKET_LOSS": ValueOf(syscall.PACKET_LOSS), + "PACKET_MR_ALLMULTI": ValueOf(syscall.PACKET_MR_ALLMULTI), + "PACKET_MR_MULTICAST": ValueOf(syscall.PACKET_MR_MULTICAST), + "PACKET_MR_PROMISC": ValueOf(syscall.PACKET_MR_PROMISC), + "PACKET_MR_UNICAST": ValueOf(syscall.PACKET_MR_UNICAST), + "PACKET_MULTICAST": ValueOf(syscall.PACKET_MULTICAST), + "PACKET_ORIGDEV": ValueOf(syscall.PACKET_ORIGDEV), + "PACKET_OTHERHOST": ValueOf(syscall.PACKET_OTHERHOST), + "PACKET_OUTGOING": ValueOf(syscall.PACKET_OUTGOING), + "PACKET_RECV_OUTPUT": ValueOf(syscall.PACKET_RECV_OUTPUT), + "PACKET_RESERVE": ValueOf(syscall.PACKET_RESERVE), + "PACKET_RX_RING": ValueOf(syscall.PACKET_RX_RING), + "PACKET_STATISTICS": ValueOf(syscall.PACKET_STATISTICS), + "PACKET_TIMESTAMP": ValueOf(syscall.PACKET_TIMESTAMP), + "PACKET_TX_HAS_OFF": ValueOf(syscall.PACKET_TX_HAS_OFF), + "PACKET_TX_RING": ValueOf(syscall.PACKET_TX_RING), + "PACKET_TX_TIMESTAMP": ValueOf(syscall.PACKET_TX_TIMESTAMP), + "PACKET_VERSION": ValueOf(syscall.PACKET_VERSION), + "PACKET_VNET_HDR": ValueOf(syscall.PACKET_VNET_HDR), + "PARENB": ValueOf(syscall.PARENB), + "PARITY_CRC16_PR0": ValueOf(syscall.PARITY_CRC16_PR0), + "PARITY_CRC16_PR0_CCITT": ValueOf(syscall.PARITY_CRC16_PR0_CCITT), + "PARITY_CRC16_PR1": ValueOf(syscall.PARITY_CRC16_PR1), + "PARITY_CRC16_PR1_CCITT": ValueOf(syscall.PARITY_CRC16_PR1_CCITT), + "PARITY_CRC32_PR0_CCITT": ValueOf(syscall.PARITY_CRC32_PR0_CCITT), + "PARITY_CRC32_PR1_CCITT": ValueOf(syscall.PARITY_CRC32_PR1_CCITT), + "PARITY_DEFAULT": ValueOf(syscall.PARITY_DEFAULT), + "PARITY_NONE": ValueOf(syscall.PARITY_NONE), + "PARMRK": ValueOf(syscall.PARMRK), + "PARODD": ValueOf(syscall.PARODD), + "PENDIN": ValueOf(syscall.PENDIN), + "PRIO_PGRP": ValueOf(syscall.PRIO_PGRP), + "PRIO_PROCESS": ValueOf(syscall.PRIO_PROCESS), + "PRIO_USER": ValueOf(syscall.PRIO_USER), + "PROT_EXEC": ValueOf(syscall.PROT_EXEC), + "PROT_GROWSDOWN": ValueOf(syscall.PROT_GROWSDOWN), + "PROT_GROWSUP": ValueOf(syscall.PROT_GROWSUP), + "PROT_NONE": ValueOf(syscall.PROT_NONE), + "PROT_READ": ValueOf(syscall.PROT_READ), + "PROT_WRITE": ValueOf(syscall.PROT_WRITE), + "PR_CAPBSET_DROP": ValueOf(syscall.PR_CAPBSET_DROP), + "PR_CAPBSET_READ": ValueOf(syscall.PR_CAPBSET_READ), + "PR_ENDIAN_BIG": ValueOf(syscall.PR_ENDIAN_BIG), + "PR_ENDIAN_LITTLE": ValueOf(syscall.PR_ENDIAN_LITTLE), + "PR_ENDIAN_PPC_LITTLE": ValueOf(syscall.PR_ENDIAN_PPC_LITTLE), + "PR_FPEMU_NOPRINT": ValueOf(syscall.PR_FPEMU_NOPRINT), + "PR_FPEMU_SIGFPE": ValueOf(syscall.PR_FPEMU_SIGFPE), + "PR_FP_EXC_ASYNC": ValueOf(syscall.PR_FP_EXC_ASYNC), + "PR_FP_EXC_DISABLED": ValueOf(syscall.PR_FP_EXC_DISABLED), + "PR_FP_EXC_DIV": ValueOf(syscall.PR_FP_EXC_DIV), + "PR_FP_EXC_INV": ValueOf(syscall.PR_FP_EXC_INV), + "PR_FP_EXC_NONRECOV": ValueOf(syscall.PR_FP_EXC_NONRECOV), + "PR_FP_EXC_OVF": ValueOf(syscall.PR_FP_EXC_OVF), + "PR_FP_EXC_PRECISE": ValueOf(syscall.PR_FP_EXC_PRECISE), + "PR_FP_EXC_RES": ValueOf(syscall.PR_FP_EXC_RES), + "PR_FP_EXC_SW_ENABLE": ValueOf(syscall.PR_FP_EXC_SW_ENABLE), + "PR_FP_EXC_UND": ValueOf(syscall.PR_FP_EXC_UND), + "PR_GET_CHILD_SUBREAPER": ValueOf(syscall.PR_GET_CHILD_SUBREAPER), + "PR_GET_DUMPABLE": ValueOf(syscall.PR_GET_DUMPABLE), + "PR_GET_ENDIAN": ValueOf(syscall.PR_GET_ENDIAN), + "PR_GET_FPEMU": ValueOf(syscall.PR_GET_FPEMU), + "PR_GET_FPEXC": ValueOf(syscall.PR_GET_FPEXC), + "PR_GET_KEEPCAPS": ValueOf(syscall.PR_GET_KEEPCAPS), + "PR_GET_NAME": ValueOf(syscall.PR_GET_NAME), + "PR_GET_NO_NEW_PRIVS": ValueOf(syscall.PR_GET_NO_NEW_PRIVS), + "PR_GET_PDEATHSIG": ValueOf(syscall.PR_GET_PDEATHSIG), + "PR_GET_SECCOMP": ValueOf(syscall.PR_GET_SECCOMP), + "PR_GET_SECUREBITS": ValueOf(syscall.PR_GET_SECUREBITS), + "PR_GET_TID_ADDRESS": ValueOf(syscall.PR_GET_TID_ADDRESS), + "PR_GET_TIMERSLACK": ValueOf(syscall.PR_GET_TIMERSLACK), + "PR_GET_TIMING": ValueOf(syscall.PR_GET_TIMING), + "PR_GET_TSC": ValueOf(syscall.PR_GET_TSC), + "PR_GET_UNALIGN": ValueOf(syscall.PR_GET_UNALIGN), + "PR_MCE_KILL": ValueOf(syscall.PR_MCE_KILL), + "PR_MCE_KILL_CLEAR": ValueOf(syscall.PR_MCE_KILL_CLEAR), + "PR_MCE_KILL_DEFAULT": ValueOf(syscall.PR_MCE_KILL_DEFAULT), + "PR_MCE_KILL_EARLY": ValueOf(syscall.PR_MCE_KILL_EARLY), + "PR_MCE_KILL_GET": ValueOf(syscall.PR_MCE_KILL_GET), + "PR_MCE_KILL_LATE": ValueOf(syscall.PR_MCE_KILL_LATE), + "PR_MCE_KILL_SET": ValueOf(syscall.PR_MCE_KILL_SET), + "PR_SET_CHILD_SUBREAPER": ValueOf(syscall.PR_SET_CHILD_SUBREAPER), + "PR_SET_DUMPABLE": ValueOf(syscall.PR_SET_DUMPABLE), + "PR_SET_ENDIAN": ValueOf(syscall.PR_SET_ENDIAN), + "PR_SET_FPEMU": ValueOf(syscall.PR_SET_FPEMU), + "PR_SET_FPEXC": ValueOf(syscall.PR_SET_FPEXC), + "PR_SET_KEEPCAPS": ValueOf(syscall.PR_SET_KEEPCAPS), + "PR_SET_MM": ValueOf(syscall.PR_SET_MM), + "PR_SET_MM_ARG_END": ValueOf(syscall.PR_SET_MM_ARG_END), + "PR_SET_MM_ARG_START": ValueOf(syscall.PR_SET_MM_ARG_START), + "PR_SET_MM_AUXV": ValueOf(syscall.PR_SET_MM_AUXV), + "PR_SET_MM_BRK": ValueOf(syscall.PR_SET_MM_BRK), + "PR_SET_MM_END_CODE": ValueOf(syscall.PR_SET_MM_END_CODE), + "PR_SET_MM_END_DATA": ValueOf(syscall.PR_SET_MM_END_DATA), + "PR_SET_MM_ENV_END": ValueOf(syscall.PR_SET_MM_ENV_END), + "PR_SET_MM_ENV_START": ValueOf(syscall.PR_SET_MM_ENV_START), + "PR_SET_MM_EXE_FILE": ValueOf(syscall.PR_SET_MM_EXE_FILE), + "PR_SET_MM_START_BRK": ValueOf(syscall.PR_SET_MM_START_BRK), + "PR_SET_MM_START_CODE": ValueOf(syscall.PR_SET_MM_START_CODE), + "PR_SET_MM_START_DATA": ValueOf(syscall.PR_SET_MM_START_DATA), + "PR_SET_MM_START_STACK": ValueOf(syscall.PR_SET_MM_START_STACK), + "PR_SET_NAME": ValueOf(syscall.PR_SET_NAME), + "PR_SET_NO_NEW_PRIVS": ValueOf(syscall.PR_SET_NO_NEW_PRIVS), + "PR_SET_PDEATHSIG": ValueOf(syscall.PR_SET_PDEATHSIG), + "PR_SET_PTRACER": ValueOf(syscall.PR_SET_PTRACER), + "PR_SET_PTRACER_ANY": ValueOf(syscall.PR_SET_PTRACER_ANY), + "PR_SET_SECCOMP": ValueOf(syscall.PR_SET_SECCOMP), + "PR_SET_SECUREBITS": ValueOf(syscall.PR_SET_SECUREBITS), + "PR_SET_TIMERSLACK": ValueOf(syscall.PR_SET_TIMERSLACK), + "PR_SET_TIMING": ValueOf(syscall.PR_SET_TIMING), + "PR_SET_TSC": ValueOf(syscall.PR_SET_TSC), + "PR_SET_UNALIGN": ValueOf(syscall.PR_SET_UNALIGN), + "PR_TASK_PERF_EVENTS_DISABLE": ValueOf(syscall.PR_TASK_PERF_EVENTS_DISABLE), + "PR_TASK_PERF_EVENTS_ENABLE": ValueOf(syscall.PR_TASK_PERF_EVENTS_ENABLE), + "PR_TIMING_STATISTICAL": ValueOf(syscall.PR_TIMING_STATISTICAL), + "PR_TIMING_TIMESTAMP": ValueOf(syscall.PR_TIMING_TIMESTAMP), + "PR_TSC_ENABLE": ValueOf(syscall.PR_TSC_ENABLE), + "PR_TSC_SIGSEGV": ValueOf(syscall.PR_TSC_SIGSEGV), + "PR_UNALIGN_NOPRINT": ValueOf(syscall.PR_UNALIGN_NOPRINT), + "PR_UNALIGN_SIGBUS": ValueOf(syscall.PR_UNALIGN_SIGBUS), + "PTRACE_ATTACH": ValueOf(syscall.PTRACE_ATTACH), + "PTRACE_CONT": ValueOf(syscall.PTRACE_CONT), + "PTRACE_DETACH": ValueOf(syscall.PTRACE_DETACH), + "PTRACE_EVENT_CLONE": ValueOf(syscall.PTRACE_EVENT_CLONE), + "PTRACE_EVENT_EXEC": ValueOf(syscall.PTRACE_EVENT_EXEC), + "PTRACE_EVENT_EXIT": ValueOf(syscall.PTRACE_EVENT_EXIT), + "PTRACE_EVENT_FORK": ValueOf(syscall.PTRACE_EVENT_FORK), + "PTRACE_EVENT_SECCOMP": ValueOf(syscall.PTRACE_EVENT_SECCOMP), + "PTRACE_EVENT_STOP": ValueOf(syscall.PTRACE_EVENT_STOP), + "PTRACE_EVENT_VFORK": ValueOf(syscall.PTRACE_EVENT_VFORK), + "PTRACE_EVENT_VFORK_DONE": ValueOf(syscall.PTRACE_EVENT_VFORK_DONE), + "PTRACE_GETEVENTMSG": ValueOf(syscall.PTRACE_GETEVENTMSG), + "PTRACE_GETREGS": ValueOf(syscall.PTRACE_GETREGS), + "PTRACE_GETREGSET": ValueOf(syscall.PTRACE_GETREGSET), + "PTRACE_GETSIGINFO": ValueOf(syscall.PTRACE_GETSIGINFO), + "PTRACE_GETSIGMASK": ValueOf(syscall.PTRACE_GETSIGMASK), + "PTRACE_INTERRUPT": ValueOf(syscall.PTRACE_INTERRUPT), + "PTRACE_KILL": ValueOf(syscall.PTRACE_KILL), + "PTRACE_LISTEN": ValueOf(syscall.PTRACE_LISTEN), + "PTRACE_O_EXITKILL": ValueOf(syscall.PTRACE_O_EXITKILL), + "PTRACE_O_MASK": ValueOf(syscall.PTRACE_O_MASK), + "PTRACE_O_TRACECLONE": ValueOf(syscall.PTRACE_O_TRACECLONE), + "PTRACE_O_TRACEEXEC": ValueOf(syscall.PTRACE_O_TRACEEXEC), + "PTRACE_O_TRACEEXIT": ValueOf(syscall.PTRACE_O_TRACEEXIT), + "PTRACE_O_TRACEFORK": ValueOf(syscall.PTRACE_O_TRACEFORK), + "PTRACE_O_TRACESECCOMP": ValueOf(syscall.PTRACE_O_TRACESECCOMP), + "PTRACE_O_TRACESYSGOOD": ValueOf(syscall.PTRACE_O_TRACESYSGOOD), + "PTRACE_O_TRACEVFORK": ValueOf(syscall.PTRACE_O_TRACEVFORK), + "PTRACE_O_TRACEVFORKDONE": ValueOf(syscall.PTRACE_O_TRACEVFORKDONE), + "PTRACE_PEEKDATA": ValueOf(syscall.PTRACE_PEEKDATA), + "PTRACE_PEEKSIGINFO": ValueOf(syscall.PTRACE_PEEKSIGINFO), + "PTRACE_PEEKSIGINFO_SHARED": ValueOf(syscall.PTRACE_PEEKSIGINFO_SHARED), + "PTRACE_PEEKTEXT": ValueOf(syscall.PTRACE_PEEKTEXT), + "PTRACE_PEEKUSR": ValueOf(syscall.PTRACE_PEEKUSR), + "PTRACE_POKEDATA": ValueOf(syscall.PTRACE_POKEDATA), + "PTRACE_POKETEXT": ValueOf(syscall.PTRACE_POKETEXT), + "PTRACE_POKEUSR": ValueOf(syscall.PTRACE_POKEUSR), + "PTRACE_SEIZE": ValueOf(syscall.PTRACE_SEIZE), + "PTRACE_SETOPTIONS": ValueOf(syscall.PTRACE_SETOPTIONS), + "PTRACE_SETREGS": ValueOf(syscall.PTRACE_SETREGS), + "PTRACE_SETREGSET": ValueOf(syscall.PTRACE_SETREGSET), + "PTRACE_SETSIGINFO": ValueOf(syscall.PTRACE_SETSIGINFO), + "PTRACE_SETSIGMASK": ValueOf(syscall.PTRACE_SETSIGMASK), + "PTRACE_SINGLESTEP": ValueOf(syscall.PTRACE_SINGLESTEP), + "PTRACE_SYSCALL": ValueOf(syscall.PTRACE_SYSCALL), + "PTRACE_TRACEME": ValueOf(syscall.PTRACE_TRACEME), + "ParseDirent": ValueOf(syscall.ParseDirent), + "ParseNetlinkMessage": ValueOf(syscall.ParseNetlinkMessage), + "ParseNetlinkRouteAttr": ValueOf(syscall.ParseNetlinkRouteAttr), + "ParseSocketControlMessage": ValueOf(syscall.ParseSocketControlMessage), + "ParseUnixCredentials": ValueOf(syscall.ParseUnixCredentials), + "ParseUnixRights": ValueOf(syscall.ParseUnixRights), + "PathMax": ValueOf(syscall.PathMax), + "Pause": ValueOf(syscall.Pause), + "Pipe": ValueOf(syscall.Pipe), + "Pipe2": ValueOf(syscall.Pipe2), + "PivotRoot": ValueOf(syscall.PivotRoot), + "Pread": ValueOf(syscall.Pread), + "PtraceAttach": ValueOf(syscall.PtraceAttach), + "PtraceCont": ValueOf(syscall.PtraceCont), + "PtraceDetach": ValueOf(syscall.PtraceDetach), + "PtraceGetEventMsg": ValueOf(syscall.PtraceGetEventMsg), + "PtraceGetRegs": ValueOf(syscall.PtraceGetRegs), + "PtracePeekData": ValueOf(syscall.PtracePeekData), + "PtracePeekText": ValueOf(syscall.PtracePeekText), + "PtracePokeData": ValueOf(syscall.PtracePokeData), + "PtracePokeText": ValueOf(syscall.PtracePokeText), + "PtraceSetOptions": ValueOf(syscall.PtraceSetOptions), + "PtraceSetRegs": ValueOf(syscall.PtraceSetRegs), + "PtraceSingleStep": ValueOf(syscall.PtraceSingleStep), + "PtraceSyscall": ValueOf(syscall.PtraceSyscall), + "Pwrite": ValueOf(syscall.Pwrite), + "RLIMIT_AS": ValueOf(syscall.RLIMIT_AS), + "RLIMIT_CORE": ValueOf(syscall.RLIMIT_CORE), + "RLIMIT_CPU": ValueOf(syscall.RLIMIT_CPU), + "RLIMIT_DATA": ValueOf(syscall.RLIMIT_DATA), + "RLIMIT_FSIZE": ValueOf(syscall.RLIMIT_FSIZE), + "RLIMIT_NOFILE": ValueOf(syscall.RLIMIT_NOFILE), + "RLIMIT_STACK": ValueOf(syscall.RLIMIT_STACK), + "RLIM_INFINITY": ValueOf(syscall.RLIM_INFINITY), + "RTAX_ADVMSS": ValueOf(syscall.RTAX_ADVMSS), + "RTAX_CWND": ValueOf(syscall.RTAX_CWND), + "RTAX_FEATURES": ValueOf(syscall.RTAX_FEATURES), + "RTAX_FEATURE_ALLFRAG": ValueOf(syscall.RTAX_FEATURE_ALLFRAG), + "RTAX_FEATURE_ECN": ValueOf(syscall.RTAX_FEATURE_ECN), + "RTAX_FEATURE_SACK": ValueOf(syscall.RTAX_FEATURE_SACK), + "RTAX_FEATURE_TIMESTAMP": ValueOf(syscall.RTAX_FEATURE_TIMESTAMP), + "RTAX_HOPLIMIT": ValueOf(syscall.RTAX_HOPLIMIT), + "RTAX_INITCWND": ValueOf(syscall.RTAX_INITCWND), + "RTAX_INITRWND": ValueOf(syscall.RTAX_INITRWND), + "RTAX_LOCK": ValueOf(syscall.RTAX_LOCK), + "RTAX_MAX": ValueOf(syscall.RTAX_MAX), + "RTAX_MTU": ValueOf(syscall.RTAX_MTU), + "RTAX_QUICKACK": ValueOf(syscall.RTAX_QUICKACK), + "RTAX_REORDERING": ValueOf(syscall.RTAX_REORDERING), + "RTAX_RTO_MIN": ValueOf(syscall.RTAX_RTO_MIN), + "RTAX_RTT": ValueOf(syscall.RTAX_RTT), + "RTAX_RTTVAR": ValueOf(syscall.RTAX_RTTVAR), + "RTAX_SSTHRESH": ValueOf(syscall.RTAX_SSTHRESH), + "RTAX_UNSPEC": ValueOf(syscall.RTAX_UNSPEC), + "RTAX_WINDOW": ValueOf(syscall.RTAX_WINDOW), + "RTA_ALIGNTO": ValueOf(syscall.RTA_ALIGNTO), + "RTA_CACHEINFO": ValueOf(syscall.RTA_CACHEINFO), + "RTA_DST": ValueOf(syscall.RTA_DST), + "RTA_FLOW": ValueOf(syscall.RTA_FLOW), + "RTA_GATEWAY": ValueOf(syscall.RTA_GATEWAY), + "RTA_IIF": ValueOf(syscall.RTA_IIF), + "RTA_MAX": ValueOf(syscall.RTA_MAX), + "RTA_METRICS": ValueOf(syscall.RTA_METRICS), + "RTA_MULTIPATH": ValueOf(syscall.RTA_MULTIPATH), + "RTA_OIF": ValueOf(syscall.RTA_OIF), + "RTA_PREFSRC": ValueOf(syscall.RTA_PREFSRC), + "RTA_PRIORITY": ValueOf(syscall.RTA_PRIORITY), + "RTA_SRC": ValueOf(syscall.RTA_SRC), + "RTA_TABLE": ValueOf(syscall.RTA_TABLE), + "RTA_UNSPEC": ValueOf(syscall.RTA_UNSPEC), + "RTCF_DIRECTSRC": ValueOf(syscall.RTCF_DIRECTSRC), + "RTCF_DOREDIRECT": ValueOf(syscall.RTCF_DOREDIRECT), + "RTCF_LOG": ValueOf(syscall.RTCF_LOG), + "RTCF_MASQ": ValueOf(syscall.RTCF_MASQ), + "RTCF_NAT": ValueOf(syscall.RTCF_NAT), + "RTCF_VALVE": ValueOf(syscall.RTCF_VALVE), + "RTF_ADDRCLASSMASK": ValueOf(uint32(syscall.RTF_ADDRCLASSMASK)), + "RTF_ADDRCONF": ValueOf(syscall.RTF_ADDRCONF), + "RTF_ALLONLINK": ValueOf(syscall.RTF_ALLONLINK), + "RTF_BROADCAST": ValueOf(syscall.RTF_BROADCAST), + "RTF_CACHE": ValueOf(syscall.RTF_CACHE), + "RTF_DEFAULT": ValueOf(syscall.RTF_DEFAULT), + "RTF_DYNAMIC": ValueOf(syscall.RTF_DYNAMIC), + "RTF_FLOW": ValueOf(syscall.RTF_FLOW), + "RTF_GATEWAY": ValueOf(syscall.RTF_GATEWAY), + "RTF_HOST": ValueOf(syscall.RTF_HOST), + "RTF_INTERFACE": ValueOf(syscall.RTF_INTERFACE), + "RTF_IRTT": ValueOf(syscall.RTF_IRTT), + "RTF_LINKRT": ValueOf(syscall.RTF_LINKRT), + "RTF_LOCAL": ValueOf(uint32(syscall.RTF_LOCAL)), + "RTF_MODIFIED": ValueOf(syscall.RTF_MODIFIED), + "RTF_MSS": ValueOf(syscall.RTF_MSS), + "RTF_MTU": ValueOf(syscall.RTF_MTU), + "RTF_MULTICAST": ValueOf(syscall.RTF_MULTICAST), + "RTF_NAT": ValueOf(syscall.RTF_NAT), + "RTF_NOFORWARD": ValueOf(syscall.RTF_NOFORWARD), + "RTF_NONEXTHOP": ValueOf(syscall.RTF_NONEXTHOP), + "RTF_NOPMTUDISC": ValueOf(syscall.RTF_NOPMTUDISC), + "RTF_POLICY": ValueOf(syscall.RTF_POLICY), + "RTF_REINSTATE": ValueOf(syscall.RTF_REINSTATE), + "RTF_REJECT": ValueOf(syscall.RTF_REJECT), + "RTF_STATIC": ValueOf(syscall.RTF_STATIC), + "RTF_THROW": ValueOf(syscall.RTF_THROW), + "RTF_UP": ValueOf(syscall.RTF_UP), + "RTF_WINDOW": ValueOf(syscall.RTF_WINDOW), + "RTF_XRESOLVE": ValueOf(syscall.RTF_XRESOLVE), + "RTM_BASE": ValueOf(syscall.RTM_BASE), + "RTM_DELACTION": ValueOf(syscall.RTM_DELACTION), + "RTM_DELADDR": ValueOf(syscall.RTM_DELADDR), + "RTM_DELADDRLABEL": ValueOf(syscall.RTM_DELADDRLABEL), + "RTM_DELLINK": ValueOf(syscall.RTM_DELLINK), + "RTM_DELMDB": ValueOf(syscall.RTM_DELMDB), + "RTM_DELNEIGH": ValueOf(syscall.RTM_DELNEIGH), + "RTM_DELQDISC": ValueOf(syscall.RTM_DELQDISC), + "RTM_DELROUTE": ValueOf(syscall.RTM_DELROUTE), + "RTM_DELRULE": ValueOf(syscall.RTM_DELRULE), + "RTM_DELTCLASS": ValueOf(syscall.RTM_DELTCLASS), + "RTM_DELTFILTER": ValueOf(syscall.RTM_DELTFILTER), + "RTM_F_CLONED": ValueOf(syscall.RTM_F_CLONED), + "RTM_F_EQUALIZE": ValueOf(syscall.RTM_F_EQUALIZE), + "RTM_F_NOTIFY": ValueOf(syscall.RTM_F_NOTIFY), + "RTM_F_PREFIX": ValueOf(syscall.RTM_F_PREFIX), + "RTM_GETACTION": ValueOf(syscall.RTM_GETACTION), + "RTM_GETADDR": ValueOf(syscall.RTM_GETADDR), + "RTM_GETADDRLABEL": ValueOf(syscall.RTM_GETADDRLABEL), + "RTM_GETANYCAST": ValueOf(syscall.RTM_GETANYCAST), + "RTM_GETDCB": ValueOf(syscall.RTM_GETDCB), + "RTM_GETLINK": ValueOf(syscall.RTM_GETLINK), + "RTM_GETMDB": ValueOf(syscall.RTM_GETMDB), + "RTM_GETMULTICAST": ValueOf(syscall.RTM_GETMULTICAST), + "RTM_GETNEIGH": ValueOf(syscall.RTM_GETNEIGH), + "RTM_GETNEIGHTBL": ValueOf(syscall.RTM_GETNEIGHTBL), + "RTM_GETNETCONF": ValueOf(syscall.RTM_GETNETCONF), + "RTM_GETQDISC": ValueOf(syscall.RTM_GETQDISC), + "RTM_GETROUTE": ValueOf(syscall.RTM_GETROUTE), + "RTM_GETRULE": ValueOf(syscall.RTM_GETRULE), + "RTM_GETTCLASS": ValueOf(syscall.RTM_GETTCLASS), + "RTM_GETTFILTER": ValueOf(syscall.RTM_GETTFILTER), + "RTM_MAX": ValueOf(syscall.RTM_MAX), + "RTM_NEWACTION": ValueOf(syscall.RTM_NEWACTION), + "RTM_NEWADDR": ValueOf(syscall.RTM_NEWADDR), + "RTM_NEWADDRLABEL": ValueOf(syscall.RTM_NEWADDRLABEL), + "RTM_NEWLINK": ValueOf(syscall.RTM_NEWLINK), + "RTM_NEWMDB": ValueOf(syscall.RTM_NEWMDB), + "RTM_NEWNDUSEROPT": ValueOf(syscall.RTM_NEWNDUSEROPT), + "RTM_NEWNEIGH": ValueOf(syscall.RTM_NEWNEIGH), + "RTM_NEWNEIGHTBL": ValueOf(syscall.RTM_NEWNEIGHTBL), + "RTM_NEWNETCONF": ValueOf(syscall.RTM_NEWNETCONF), + "RTM_NEWPREFIX": ValueOf(syscall.RTM_NEWPREFIX), + "RTM_NEWQDISC": ValueOf(syscall.RTM_NEWQDISC), + "RTM_NEWROUTE": ValueOf(syscall.RTM_NEWROUTE), + "RTM_NEWRULE": ValueOf(syscall.RTM_NEWRULE), + "RTM_NEWTCLASS": ValueOf(syscall.RTM_NEWTCLASS), + "RTM_NEWTFILTER": ValueOf(syscall.RTM_NEWTFILTER), + "RTM_NR_FAMILIES": ValueOf(syscall.RTM_NR_FAMILIES), + "RTM_NR_MSGTYPES": ValueOf(syscall.RTM_NR_MSGTYPES), + "RTM_SETDCB": ValueOf(syscall.RTM_SETDCB), + "RTM_SETLINK": ValueOf(syscall.RTM_SETLINK), + "RTM_SETNEIGHTBL": ValueOf(syscall.RTM_SETNEIGHTBL), + "RTNH_ALIGNTO": ValueOf(syscall.RTNH_ALIGNTO), + "RTNH_F_DEAD": ValueOf(syscall.RTNH_F_DEAD), + "RTNH_F_ONLINK": ValueOf(syscall.RTNH_F_ONLINK), + "RTNH_F_PERVASIVE": ValueOf(syscall.RTNH_F_PERVASIVE), + "RTNLGRP_IPV4_IFADDR": ValueOf(syscall.RTNLGRP_IPV4_IFADDR), + "RTNLGRP_IPV4_MROUTE": ValueOf(syscall.RTNLGRP_IPV4_MROUTE), + "RTNLGRP_IPV4_ROUTE": ValueOf(syscall.RTNLGRP_IPV4_ROUTE), + "RTNLGRP_IPV4_RULE": ValueOf(syscall.RTNLGRP_IPV4_RULE), + "RTNLGRP_IPV6_IFADDR": ValueOf(syscall.RTNLGRP_IPV6_IFADDR), + "RTNLGRP_IPV6_IFINFO": ValueOf(syscall.RTNLGRP_IPV6_IFINFO), + "RTNLGRP_IPV6_MROUTE": ValueOf(syscall.RTNLGRP_IPV6_MROUTE), + "RTNLGRP_IPV6_PREFIX": ValueOf(syscall.RTNLGRP_IPV6_PREFIX), + "RTNLGRP_IPV6_ROUTE": ValueOf(syscall.RTNLGRP_IPV6_ROUTE), + "RTNLGRP_IPV6_RULE": ValueOf(syscall.RTNLGRP_IPV6_RULE), + "RTNLGRP_LINK": ValueOf(syscall.RTNLGRP_LINK), + "RTNLGRP_ND_USEROPT": ValueOf(syscall.RTNLGRP_ND_USEROPT), + "RTNLGRP_NEIGH": ValueOf(syscall.RTNLGRP_NEIGH), + "RTNLGRP_NONE": ValueOf(syscall.RTNLGRP_NONE), + "RTNLGRP_NOTIFY": ValueOf(syscall.RTNLGRP_NOTIFY), + "RTNLGRP_TC": ValueOf(syscall.RTNLGRP_TC), + "RTN_ANYCAST": ValueOf(syscall.RTN_ANYCAST), + "RTN_BLACKHOLE": ValueOf(syscall.RTN_BLACKHOLE), + "RTN_BROADCAST": ValueOf(syscall.RTN_BROADCAST), + "RTN_LOCAL": ValueOf(syscall.RTN_LOCAL), + "RTN_MAX": ValueOf(syscall.RTN_MAX), + "RTN_MULTICAST": ValueOf(syscall.RTN_MULTICAST), + "RTN_NAT": ValueOf(syscall.RTN_NAT), + "RTN_PROHIBIT": ValueOf(syscall.RTN_PROHIBIT), + "RTN_THROW": ValueOf(syscall.RTN_THROW), + "RTN_UNICAST": ValueOf(syscall.RTN_UNICAST), + "RTN_UNREACHABLE": ValueOf(syscall.RTN_UNREACHABLE), + "RTN_UNSPEC": ValueOf(syscall.RTN_UNSPEC), + "RTN_XRESOLVE": ValueOf(syscall.RTN_XRESOLVE), + "RTPROT_BIRD": ValueOf(syscall.RTPROT_BIRD), + "RTPROT_BOOT": ValueOf(syscall.RTPROT_BOOT), + "RTPROT_DHCP": ValueOf(syscall.RTPROT_DHCP), + "RTPROT_DNROUTED": ValueOf(syscall.RTPROT_DNROUTED), + "RTPROT_GATED": ValueOf(syscall.RTPROT_GATED), + "RTPROT_KERNEL": ValueOf(syscall.RTPROT_KERNEL), + "RTPROT_MROUTED": ValueOf(syscall.RTPROT_MROUTED), + "RTPROT_MRT": ValueOf(syscall.RTPROT_MRT), + "RTPROT_NTK": ValueOf(syscall.RTPROT_NTK), + "RTPROT_RA": ValueOf(syscall.RTPROT_RA), + "RTPROT_REDIRECT": ValueOf(syscall.RTPROT_REDIRECT), + "RTPROT_STATIC": ValueOf(syscall.RTPROT_STATIC), + "RTPROT_UNSPEC": ValueOf(syscall.RTPROT_UNSPEC), + "RTPROT_XORP": ValueOf(syscall.RTPROT_XORP), + "RTPROT_ZEBRA": ValueOf(syscall.RTPROT_ZEBRA), + "RT_CLASS_DEFAULT": ValueOf(syscall.RT_CLASS_DEFAULT), + "RT_CLASS_LOCAL": ValueOf(syscall.RT_CLASS_LOCAL), + "RT_CLASS_MAIN": ValueOf(syscall.RT_CLASS_MAIN), + "RT_CLASS_MAX": ValueOf(syscall.RT_CLASS_MAX), + "RT_CLASS_UNSPEC": ValueOf(syscall.RT_CLASS_UNSPEC), + "RT_SCOPE_HOST": ValueOf(syscall.RT_SCOPE_HOST), + "RT_SCOPE_LINK": ValueOf(syscall.RT_SCOPE_LINK), + "RT_SCOPE_NOWHERE": ValueOf(syscall.RT_SCOPE_NOWHERE), + "RT_SCOPE_SITE": ValueOf(syscall.RT_SCOPE_SITE), + "RT_SCOPE_UNIVERSE": ValueOf(syscall.RT_SCOPE_UNIVERSE), + "RT_TABLE_COMPAT": ValueOf(syscall.RT_TABLE_COMPAT), + "RT_TABLE_DEFAULT": ValueOf(syscall.RT_TABLE_DEFAULT), + "RT_TABLE_LOCAL": ValueOf(syscall.RT_TABLE_LOCAL), + "RT_TABLE_MAIN": ValueOf(syscall.RT_TABLE_MAIN), + "RT_TABLE_MAX": ValueOf(uint32(syscall.RT_TABLE_MAX)), + "RT_TABLE_UNSPEC": ValueOf(syscall.RT_TABLE_UNSPEC), + "RUSAGE_CHILDREN": ValueOf(syscall.RUSAGE_CHILDREN), + "RUSAGE_SELF": ValueOf(syscall.RUSAGE_SELF), + "RUSAGE_THREAD": ValueOf(syscall.RUSAGE_THREAD), + "RawSyscall": ValueOf(syscall.RawSyscall), + "RawSyscall6": ValueOf(syscall.RawSyscall6), + "Read": ValueOf(syscall.Read), + "ReadDirent": ValueOf(syscall.ReadDirent), + "Readlink": ValueOf(syscall.Readlink), + "Reboot": ValueOf(syscall.Reboot), + "Recvfrom": ValueOf(syscall.Recvfrom), + "Recvmsg": ValueOf(syscall.Recvmsg), + "Removexattr": ValueOf(syscall.Removexattr), + "Rename": ValueOf(syscall.Rename), + "Renameat": ValueOf(syscall.Renameat), + "Rmdir": ValueOf(syscall.Rmdir), + "SCM_CREDENTIALS": ValueOf(syscall.SCM_CREDENTIALS), + "SCM_RIGHTS": ValueOf(syscall.SCM_RIGHTS), + "SCM_TIMESTAMP": ValueOf(syscall.SCM_TIMESTAMP), + "SCM_TIMESTAMPING": ValueOf(syscall.SCM_TIMESTAMPING), + "SCM_TIMESTAMPNS": ValueOf(syscall.SCM_TIMESTAMPNS), + "SCM_WIFI_STATUS": ValueOf(syscall.SCM_WIFI_STATUS), + "SHUT_RD": ValueOf(syscall.SHUT_RD), + "SHUT_RDWR": ValueOf(syscall.SHUT_RDWR), + "SHUT_WR": ValueOf(syscall.SHUT_WR), + "SIGABRT": ValueOf(syscall.SIGABRT), + "SIGALRM": ValueOf(syscall.SIGALRM), + "SIGBUS": ValueOf(syscall.SIGBUS), + "SIGCHLD": ValueOf(syscall.SIGCHLD), + "SIGCLD": ValueOf(syscall.SIGCLD), + "SIGCONT": ValueOf(syscall.SIGCONT), + "SIGFPE": ValueOf(syscall.SIGFPE), + "SIGHUP": ValueOf(syscall.SIGHUP), + "SIGILL": ValueOf(syscall.SIGILL), + "SIGINT": ValueOf(syscall.SIGINT), + "SIGIO": ValueOf(syscall.SIGIO), + "SIGIOT": ValueOf(syscall.SIGIOT), + "SIGKILL": ValueOf(syscall.SIGKILL), + "SIGPIPE": ValueOf(syscall.SIGPIPE), + "SIGPOLL": ValueOf(syscall.SIGPOLL), + "SIGPROF": ValueOf(syscall.SIGPROF), + "SIGPWR": ValueOf(syscall.SIGPWR), + "SIGQUIT": ValueOf(syscall.SIGQUIT), + "SIGSEGV": ValueOf(syscall.SIGSEGV), + "SIGSTKFLT": ValueOf(syscall.SIGSTKFLT), + "SIGSTOP": ValueOf(syscall.SIGSTOP), + "SIGSYS": ValueOf(syscall.SIGSYS), + "SIGTERM": ValueOf(syscall.SIGTERM), + "SIGTRAP": ValueOf(syscall.SIGTRAP), + "SIGTSTP": ValueOf(syscall.SIGTSTP), + "SIGTTIN": ValueOf(syscall.SIGTTIN), + "SIGTTOU": ValueOf(syscall.SIGTTOU), + "SIGUNUSED": ValueOf(syscall.SIGUNUSED), + "SIGURG": ValueOf(syscall.SIGURG), + "SIGUSR1": ValueOf(syscall.SIGUSR1), + "SIGUSR2": ValueOf(syscall.SIGUSR2), + "SIGVTALRM": ValueOf(syscall.SIGVTALRM), + "SIGWINCH": ValueOf(syscall.SIGWINCH), + "SIGXCPU": ValueOf(syscall.SIGXCPU), + "SIGXFSZ": ValueOf(syscall.SIGXFSZ), + "SIOCADDDLCI": ValueOf(syscall.SIOCADDDLCI), + "SIOCADDMULTI": ValueOf(syscall.SIOCADDMULTI), + "SIOCADDRT": ValueOf(syscall.SIOCADDRT), + "SIOCATMARK": ValueOf(syscall.SIOCATMARK), + "SIOCDARP": ValueOf(syscall.SIOCDARP), + "SIOCDELDLCI": ValueOf(syscall.SIOCDELDLCI), + "SIOCDELMULTI": ValueOf(syscall.SIOCDELMULTI), + "SIOCDELRT": ValueOf(syscall.SIOCDELRT), + "SIOCDEVPRIVATE": ValueOf(syscall.SIOCDEVPRIVATE), + "SIOCDIFADDR": ValueOf(syscall.SIOCDIFADDR), + "SIOCDRARP": ValueOf(syscall.SIOCDRARP), + "SIOCGARP": ValueOf(syscall.SIOCGARP), + "SIOCGIFADDR": ValueOf(syscall.SIOCGIFADDR), + "SIOCGIFBR": ValueOf(syscall.SIOCGIFBR), + "SIOCGIFBRDADDR": ValueOf(syscall.SIOCGIFBRDADDR), + "SIOCGIFCONF": ValueOf(syscall.SIOCGIFCONF), + "SIOCGIFCOUNT": ValueOf(syscall.SIOCGIFCOUNT), + "SIOCGIFDSTADDR": ValueOf(syscall.SIOCGIFDSTADDR), + "SIOCGIFENCAP": ValueOf(syscall.SIOCGIFENCAP), + "SIOCGIFFLAGS": ValueOf(syscall.SIOCGIFFLAGS), + "SIOCGIFHWADDR": ValueOf(syscall.SIOCGIFHWADDR), + "SIOCGIFINDEX": ValueOf(syscall.SIOCGIFINDEX), + "SIOCGIFMAP": ValueOf(syscall.SIOCGIFMAP), + "SIOCGIFMEM": ValueOf(syscall.SIOCGIFMEM), + "SIOCGIFMETRIC": ValueOf(syscall.SIOCGIFMETRIC), + "SIOCGIFMTU": ValueOf(syscall.SIOCGIFMTU), + "SIOCGIFNAME": ValueOf(syscall.SIOCGIFNAME), + "SIOCGIFNETMASK": ValueOf(syscall.SIOCGIFNETMASK), + "SIOCGIFPFLAGS": ValueOf(syscall.SIOCGIFPFLAGS), + "SIOCGIFSLAVE": ValueOf(syscall.SIOCGIFSLAVE), + "SIOCGIFTXQLEN": ValueOf(syscall.SIOCGIFTXQLEN), + "SIOCGPGRP": ValueOf(syscall.SIOCGPGRP), + "SIOCGRARP": ValueOf(syscall.SIOCGRARP), + "SIOCGSTAMP": ValueOf(syscall.SIOCGSTAMP), + "SIOCGSTAMPNS": ValueOf(syscall.SIOCGSTAMPNS), + "SIOCPROTOPRIVATE": ValueOf(syscall.SIOCPROTOPRIVATE), + "SIOCRTMSG": ValueOf(syscall.SIOCRTMSG), + "SIOCSARP": ValueOf(syscall.SIOCSARP), + "SIOCSIFADDR": ValueOf(syscall.SIOCSIFADDR), + "SIOCSIFBR": ValueOf(syscall.SIOCSIFBR), + "SIOCSIFBRDADDR": ValueOf(syscall.SIOCSIFBRDADDR), + "SIOCSIFDSTADDR": ValueOf(syscall.SIOCSIFDSTADDR), + "SIOCSIFENCAP": ValueOf(syscall.SIOCSIFENCAP), + "SIOCSIFFLAGS": ValueOf(syscall.SIOCSIFFLAGS), + "SIOCSIFHWADDR": ValueOf(syscall.SIOCSIFHWADDR), + "SIOCSIFHWBROADCAST": ValueOf(syscall.SIOCSIFHWBROADCAST), + "SIOCSIFLINK": ValueOf(syscall.SIOCSIFLINK), + "SIOCSIFMAP": ValueOf(syscall.SIOCSIFMAP), + "SIOCSIFMEM": ValueOf(syscall.SIOCSIFMEM), + "SIOCSIFMETRIC": ValueOf(syscall.SIOCSIFMETRIC), + "SIOCSIFMTU": ValueOf(syscall.SIOCSIFMTU), + "SIOCSIFNAME": ValueOf(syscall.SIOCSIFNAME), + "SIOCSIFNETMASK": ValueOf(syscall.SIOCSIFNETMASK), + "SIOCSIFPFLAGS": ValueOf(syscall.SIOCSIFPFLAGS), + "SIOCSIFSLAVE": ValueOf(syscall.SIOCSIFSLAVE), + "SIOCSIFTXQLEN": ValueOf(syscall.SIOCSIFTXQLEN), + "SIOCSPGRP": ValueOf(syscall.SIOCSPGRP), + "SIOCSRARP": ValueOf(syscall.SIOCSRARP), + "SOCK_CLOEXEC": ValueOf(syscall.SOCK_CLOEXEC), + "SOCK_DCCP": ValueOf(syscall.SOCK_DCCP), + "SOCK_DGRAM": ValueOf(syscall.SOCK_DGRAM), + "SOCK_NONBLOCK": ValueOf(syscall.SOCK_NONBLOCK), + "SOCK_PACKET": ValueOf(syscall.SOCK_PACKET), + "SOCK_RAW": ValueOf(syscall.SOCK_RAW), + "SOCK_RDM": ValueOf(syscall.SOCK_RDM), + "SOCK_SEQPACKET": ValueOf(syscall.SOCK_SEQPACKET), + "SOCK_STREAM": ValueOf(syscall.SOCK_STREAM), + "SOL_AAL": ValueOf(syscall.SOL_AAL), + "SOL_ATM": ValueOf(syscall.SOL_ATM), + "SOL_DECNET": ValueOf(syscall.SOL_DECNET), + "SOL_ICMPV6": ValueOf(syscall.SOL_ICMPV6), + "SOL_IP": ValueOf(syscall.SOL_IP), + "SOL_IPV6": ValueOf(syscall.SOL_IPV6), + "SOL_IRDA": ValueOf(syscall.SOL_IRDA), + "SOL_PACKET": ValueOf(syscall.SOL_PACKET), + "SOL_RAW": ValueOf(syscall.SOL_RAW), + "SOL_SOCKET": ValueOf(syscall.SOL_SOCKET), + "SOL_TCP": ValueOf(syscall.SOL_TCP), + "SOL_X25": ValueOf(syscall.SOL_X25), + "SOMAXCONN": ValueOf(syscall.SOMAXCONN), + "SO_ACCEPTCONN": ValueOf(syscall.SO_ACCEPTCONN), + "SO_ATTACH_FILTER": ValueOf(syscall.SO_ATTACH_FILTER), + "SO_BINDTODEVICE": ValueOf(syscall.SO_BINDTODEVICE), + "SO_BROADCAST": ValueOf(syscall.SO_BROADCAST), + "SO_BSDCOMPAT": ValueOf(syscall.SO_BSDCOMPAT), + "SO_BUSY_POLL": ValueOf(syscall.SO_BUSY_POLL), + "SO_DEBUG": ValueOf(syscall.SO_DEBUG), + "SO_DETACH_FILTER": ValueOf(syscall.SO_DETACH_FILTER), + "SO_DOMAIN": ValueOf(syscall.SO_DOMAIN), + "SO_DONTROUTE": ValueOf(syscall.SO_DONTROUTE), + "SO_ERROR": ValueOf(syscall.SO_ERROR), + "SO_GET_FILTER": ValueOf(syscall.SO_GET_FILTER), + "SO_KEEPALIVE": ValueOf(syscall.SO_KEEPALIVE), + "SO_LINGER": ValueOf(syscall.SO_LINGER), + "SO_LOCK_FILTER": ValueOf(syscall.SO_LOCK_FILTER), + "SO_MARK": ValueOf(syscall.SO_MARK), + "SO_MAX_PACING_RATE": ValueOf(syscall.SO_MAX_PACING_RATE), + "SO_NOFCS": ValueOf(syscall.SO_NOFCS), + "SO_NO_CHECK": ValueOf(syscall.SO_NO_CHECK), + "SO_OOBINLINE": ValueOf(syscall.SO_OOBINLINE), + "SO_PASSCRED": ValueOf(syscall.SO_PASSCRED), + "SO_PASSSEC": ValueOf(syscall.SO_PASSSEC), + "SO_PEEK_OFF": ValueOf(syscall.SO_PEEK_OFF), + "SO_PEERCRED": ValueOf(syscall.SO_PEERCRED), + "SO_PEERNAME": ValueOf(syscall.SO_PEERNAME), + "SO_PEERSEC": ValueOf(syscall.SO_PEERSEC), + "SO_PRIORITY": ValueOf(syscall.SO_PRIORITY), + "SO_PROTOCOL": ValueOf(syscall.SO_PROTOCOL), + "SO_RCVBUF": ValueOf(syscall.SO_RCVBUF), + "SO_RCVBUFFORCE": ValueOf(syscall.SO_RCVBUFFORCE), + "SO_RCVLOWAT": ValueOf(syscall.SO_RCVLOWAT), + "SO_RCVTIMEO": ValueOf(syscall.SO_RCVTIMEO), + "SO_REUSEADDR": ValueOf(syscall.SO_REUSEADDR), + "SO_REUSEPORT": ValueOf(syscall.SO_REUSEPORT), + "SO_RXQ_OVFL": ValueOf(syscall.SO_RXQ_OVFL), + "SO_SECURITY_AUTHENTICATION": ValueOf(syscall.SO_SECURITY_AUTHENTICATION), + "SO_SECURITY_ENCRYPTION_NETWORK": ValueOf(syscall.SO_SECURITY_ENCRYPTION_NETWORK), + "SO_SECURITY_ENCRYPTION_TRANSPORT": ValueOf(syscall.SO_SECURITY_ENCRYPTION_TRANSPORT), + "SO_SELECT_ERR_QUEUE": ValueOf(syscall.SO_SELECT_ERR_QUEUE), + "SO_SNDBUF": ValueOf(syscall.SO_SNDBUF), + "SO_SNDBUFFORCE": ValueOf(syscall.SO_SNDBUFFORCE), + "SO_SNDLOWAT": ValueOf(syscall.SO_SNDLOWAT), + "SO_SNDTIMEO": ValueOf(syscall.SO_SNDTIMEO), + "SO_TIMESTAMP": ValueOf(syscall.SO_TIMESTAMP), + "SO_TIMESTAMPING": ValueOf(syscall.SO_TIMESTAMPING), + "SO_TIMESTAMPNS": ValueOf(syscall.SO_TIMESTAMPNS), + "SO_TYPE": ValueOf(syscall.SO_TYPE), + "SO_WIFI_STATUS": ValueOf(syscall.SO_WIFI_STATUS), + "SYS_ACCEPT": ValueOf(syscall.SYS_ACCEPT), + "SYS_ACCEPT4": ValueOf(syscall.SYS_ACCEPT4), + "SYS_ACCT": ValueOf(syscall.SYS_ACCT), + "SYS_ADD_KEY": ValueOf(syscall.SYS_ADD_KEY), + "SYS_ADJTIMEX": ValueOf(syscall.SYS_ADJTIMEX), + "SYS_ARCH_SPECIFIC_SYSCALL": ValueOf(syscall.SYS_ARCH_SPECIFIC_SYSCALL), + "SYS_BIND": ValueOf(syscall.SYS_BIND), + "SYS_BPF": ValueOf(syscall.SYS_BPF), + "SYS_BRK": ValueOf(syscall.SYS_BRK), + "SYS_CAPGET": ValueOf(syscall.SYS_CAPGET), + "SYS_CAPSET": ValueOf(syscall.SYS_CAPSET), + "SYS_CHDIR": ValueOf(syscall.SYS_CHDIR), + "SYS_CHROOT": ValueOf(syscall.SYS_CHROOT), + "SYS_CLOCK_ADJTIME": ValueOf(syscall.SYS_CLOCK_ADJTIME), + "SYS_CLOCK_GETRES": ValueOf(syscall.SYS_CLOCK_GETRES), + "SYS_CLOCK_GETTIME": ValueOf(syscall.SYS_CLOCK_GETTIME), + "SYS_CLOCK_NANOSLEEP": ValueOf(syscall.SYS_CLOCK_NANOSLEEP), + "SYS_CLOCK_SETTIME": ValueOf(syscall.SYS_CLOCK_SETTIME), + "SYS_CLONE": ValueOf(syscall.SYS_CLONE), + "SYS_CLOSE": ValueOf(syscall.SYS_CLOSE), + "SYS_CONNECT": ValueOf(syscall.SYS_CONNECT), + "SYS_DELETE_MODULE": ValueOf(syscall.SYS_DELETE_MODULE), + "SYS_DUP": ValueOf(syscall.SYS_DUP), + "SYS_DUP3": ValueOf(syscall.SYS_DUP3), + "SYS_EPOLL_CREATE": ValueOf(syscall.SYS_EPOLL_CREATE), + "SYS_EPOLL_CREATE1": ValueOf(syscall.SYS_EPOLL_CREATE1), + "SYS_EPOLL_CTL": ValueOf(syscall.SYS_EPOLL_CTL), + "SYS_EPOLL_PWAIT": ValueOf(syscall.SYS_EPOLL_PWAIT), + "SYS_EPOLL_WAIT": ValueOf(syscall.SYS_EPOLL_WAIT), + "SYS_EVENTFD2": ValueOf(syscall.SYS_EVENTFD2), + "SYS_EXECVE": ValueOf(syscall.SYS_EXECVE), + "SYS_EXECVEAT": ValueOf(syscall.SYS_EXECVEAT), + "SYS_EXIT": ValueOf(syscall.SYS_EXIT), + "SYS_EXIT_GROUP": ValueOf(syscall.SYS_EXIT_GROUP), + "SYS_FACCESSAT": ValueOf(syscall.SYS_FACCESSAT), + "SYS_FADVISE64": ValueOf(syscall.SYS_FADVISE64), + "SYS_FALLOCATE": ValueOf(syscall.SYS_FALLOCATE), + "SYS_FANOTIFY_INIT": ValueOf(syscall.SYS_FANOTIFY_INIT), + "SYS_FANOTIFY_MARK": ValueOf(syscall.SYS_FANOTIFY_MARK), + "SYS_FCHDIR": ValueOf(syscall.SYS_FCHDIR), + "SYS_FCHMOD": ValueOf(syscall.SYS_FCHMOD), + "SYS_FCHMODAT": ValueOf(syscall.SYS_FCHMODAT), + "SYS_FCHOWN": ValueOf(syscall.SYS_FCHOWN), + "SYS_FCHOWNAT": ValueOf(syscall.SYS_FCHOWNAT), + "SYS_FCNTL": ValueOf(syscall.SYS_FCNTL), + "SYS_FDATASYNC": ValueOf(syscall.SYS_FDATASYNC), + "SYS_FGETXATTR": ValueOf(syscall.SYS_FGETXATTR), + "SYS_FINIT_MODULE": ValueOf(syscall.SYS_FINIT_MODULE), + "SYS_FLISTXATTR": ValueOf(syscall.SYS_FLISTXATTR), + "SYS_FLOCK": ValueOf(syscall.SYS_FLOCK), + "SYS_FREMOVEXATTR": ValueOf(syscall.SYS_FREMOVEXATTR), + "SYS_FSETXATTR": ValueOf(syscall.SYS_FSETXATTR), + "SYS_FSTAT": ValueOf(syscall.SYS_FSTAT), + "SYS_FSTATAT": ValueOf(syscall.SYS_FSTATAT), + "SYS_FSTATFS": ValueOf(syscall.SYS_FSTATFS), + "SYS_FSYNC": ValueOf(syscall.SYS_FSYNC), + "SYS_FTRUNCATE": ValueOf(syscall.SYS_FTRUNCATE), + "SYS_FUTEX": ValueOf(syscall.SYS_FUTEX), + "SYS_FUTIMESAT": ValueOf(syscall.SYS_FUTIMESAT), + "SYS_GETCPU": ValueOf(syscall.SYS_GETCPU), + "SYS_GETCWD": ValueOf(syscall.SYS_GETCWD), + "SYS_GETDENTS64": ValueOf(syscall.SYS_GETDENTS64), + "SYS_GETEGID": ValueOf(syscall.SYS_GETEGID), + "SYS_GETEUID": ValueOf(syscall.SYS_GETEUID), + "SYS_GETGID": ValueOf(syscall.SYS_GETGID), + "SYS_GETGROUPS": ValueOf(syscall.SYS_GETGROUPS), + "SYS_GETITIMER": ValueOf(syscall.SYS_GETITIMER), + "SYS_GETPEERNAME": ValueOf(syscall.SYS_GETPEERNAME), + "SYS_GETPGID": ValueOf(syscall.SYS_GETPGID), + "SYS_GETPGRP": ValueOf(syscall.SYS_GETPGRP), + "SYS_GETPID": ValueOf(syscall.SYS_GETPID), + "SYS_GETPPID": ValueOf(syscall.SYS_GETPPID), + "SYS_GETPRIORITY": ValueOf(syscall.SYS_GETPRIORITY), + "SYS_GETRANDOM": ValueOf(syscall.SYS_GETRANDOM), + "SYS_GETRESGID": ValueOf(syscall.SYS_GETRESGID), + "SYS_GETRESUID": ValueOf(syscall.SYS_GETRESUID), + "SYS_GETRLIMIT": ValueOf(syscall.SYS_GETRLIMIT), + "SYS_GETRUSAGE": ValueOf(syscall.SYS_GETRUSAGE), + "SYS_GETSID": ValueOf(syscall.SYS_GETSID), + "SYS_GETSOCKNAME": ValueOf(syscall.SYS_GETSOCKNAME), + "SYS_GETSOCKOPT": ValueOf(syscall.SYS_GETSOCKOPT), + "SYS_GETTID": ValueOf(syscall.SYS_GETTID), + "SYS_GETTIMEOFDAY": ValueOf(syscall.SYS_GETTIMEOFDAY), + "SYS_GETUID": ValueOf(syscall.SYS_GETUID), + "SYS_GETXATTR": ValueOf(syscall.SYS_GETXATTR), + "SYS_GET_MEMPOLICY": ValueOf(syscall.SYS_GET_MEMPOLICY), + "SYS_GET_ROBUST_LIST": ValueOf(syscall.SYS_GET_ROBUST_LIST), + "SYS_INIT_MODULE": ValueOf(syscall.SYS_INIT_MODULE), + "SYS_INOTIFY_ADD_WATCH": ValueOf(syscall.SYS_INOTIFY_ADD_WATCH), + "SYS_INOTIFY_INIT1": ValueOf(syscall.SYS_INOTIFY_INIT1), + "SYS_INOTIFY_RM_WATCH": ValueOf(syscall.SYS_INOTIFY_RM_WATCH), + "SYS_IOCTL": ValueOf(syscall.SYS_IOCTL), + "SYS_IOPRIO_GET": ValueOf(syscall.SYS_IOPRIO_GET), + "SYS_IOPRIO_SET": ValueOf(syscall.SYS_IOPRIO_SET), + "SYS_IO_CANCEL": ValueOf(syscall.SYS_IO_CANCEL), + "SYS_IO_DESTROY": ValueOf(syscall.SYS_IO_DESTROY), + "SYS_IO_GETEVENTS": ValueOf(syscall.SYS_IO_GETEVENTS), + "SYS_IO_SETUP": ValueOf(syscall.SYS_IO_SETUP), + "SYS_IO_SUBMIT": ValueOf(syscall.SYS_IO_SUBMIT), + "SYS_KCMP": ValueOf(syscall.SYS_KCMP), + "SYS_KEXEC_LOAD": ValueOf(syscall.SYS_KEXEC_LOAD), + "SYS_KEYCTL": ValueOf(syscall.SYS_KEYCTL), + "SYS_KILL": ValueOf(syscall.SYS_KILL), + "SYS_LCHOWN": ValueOf(syscall.SYS_LCHOWN), + "SYS_LGETXATTR": ValueOf(syscall.SYS_LGETXATTR), + "SYS_LINKAT": ValueOf(syscall.SYS_LINKAT), + "SYS_LISTEN": ValueOf(syscall.SYS_LISTEN), + "SYS_LISTXATTR": ValueOf(syscall.SYS_LISTXATTR), + "SYS_LLISTXATTR": ValueOf(syscall.SYS_LLISTXATTR), + "SYS_LOOKUP_DCOOKIE": ValueOf(syscall.SYS_LOOKUP_DCOOKIE), + "SYS_LREMOVEXATTR": ValueOf(syscall.SYS_LREMOVEXATTR), + "SYS_LSEEK": ValueOf(syscall.SYS_LSEEK), + "SYS_LSETXATTR": ValueOf(syscall.SYS_LSETXATTR), + "SYS_MADVISE": ValueOf(syscall.SYS_MADVISE), + "SYS_MBIND": ValueOf(syscall.SYS_MBIND), + "SYS_MEMFD_CREATE": ValueOf(syscall.SYS_MEMFD_CREATE), + "SYS_MIGRATE_PAGES": ValueOf(syscall.SYS_MIGRATE_PAGES), + "SYS_MINCORE": ValueOf(syscall.SYS_MINCORE), + "SYS_MKDIRAT": ValueOf(syscall.SYS_MKDIRAT), + "SYS_MKNODAT": ValueOf(syscall.SYS_MKNODAT), + "SYS_MLOCK": ValueOf(syscall.SYS_MLOCK), + "SYS_MLOCKALL": ValueOf(syscall.SYS_MLOCKALL), + "SYS_MMAP": ValueOf(syscall.SYS_MMAP), + "SYS_MOUNT": ValueOf(syscall.SYS_MOUNT), + "SYS_MOVE_PAGES": ValueOf(syscall.SYS_MOVE_PAGES), + "SYS_MPROTECT": ValueOf(syscall.SYS_MPROTECT), + "SYS_MQ_GETSETATTR": ValueOf(syscall.SYS_MQ_GETSETATTR), + "SYS_MQ_NOTIFY": ValueOf(syscall.SYS_MQ_NOTIFY), + "SYS_MQ_OPEN": ValueOf(syscall.SYS_MQ_OPEN), + "SYS_MQ_TIMEDRECEIVE": ValueOf(syscall.SYS_MQ_TIMEDRECEIVE), + "SYS_MQ_TIMEDSEND": ValueOf(syscall.SYS_MQ_TIMEDSEND), + "SYS_MQ_UNLINK": ValueOf(syscall.SYS_MQ_UNLINK), + "SYS_MREMAP": ValueOf(syscall.SYS_MREMAP), + "SYS_MSGCTL": ValueOf(syscall.SYS_MSGCTL), + "SYS_MSGGET": ValueOf(syscall.SYS_MSGGET), + "SYS_MSGRCV": ValueOf(syscall.SYS_MSGRCV), + "SYS_MSGSND": ValueOf(syscall.SYS_MSGSND), + "SYS_MSYNC": ValueOf(syscall.SYS_MSYNC), + "SYS_MUNLOCK": ValueOf(syscall.SYS_MUNLOCK), + "SYS_MUNLOCKALL": ValueOf(syscall.SYS_MUNLOCKALL), + "SYS_MUNMAP": ValueOf(syscall.SYS_MUNMAP), + "SYS_NAME_TO_HANDLE_AT": ValueOf(syscall.SYS_NAME_TO_HANDLE_AT), + "SYS_NANOSLEEP": ValueOf(syscall.SYS_NANOSLEEP), + "SYS_NFSSERVCTL": ValueOf(syscall.SYS_NFSSERVCTL), + "SYS_OPENAT": ValueOf(syscall.SYS_OPENAT), + "SYS_OPEN_BY_HANDLE_AT": ValueOf(syscall.SYS_OPEN_BY_HANDLE_AT), + "SYS_PAUSE": ValueOf(syscall.SYS_PAUSE), + "SYS_PERF_EVENT_OPEN": ValueOf(syscall.SYS_PERF_EVENT_OPEN), + "SYS_PERSONALITY": ValueOf(syscall.SYS_PERSONALITY), + "SYS_PIPE2": ValueOf(syscall.SYS_PIPE2), + "SYS_PIVOT_ROOT": ValueOf(syscall.SYS_PIVOT_ROOT), + "SYS_PPOLL": ValueOf(syscall.SYS_PPOLL), + "SYS_PRCTL": ValueOf(syscall.SYS_PRCTL), + "SYS_PREAD64": ValueOf(syscall.SYS_PREAD64), + "SYS_PREADV": ValueOf(syscall.SYS_PREADV), + "SYS_PRLIMIT64": ValueOf(syscall.SYS_PRLIMIT64), + "SYS_PROCESS_VM_READV": ValueOf(syscall.SYS_PROCESS_VM_READV), + "SYS_PROCESS_VM_WRITEV": ValueOf(syscall.SYS_PROCESS_VM_WRITEV), + "SYS_PSELECT6": ValueOf(syscall.SYS_PSELECT6), + "SYS_PTRACE": ValueOf(syscall.SYS_PTRACE), + "SYS_PWRITE64": ValueOf(syscall.SYS_PWRITE64), + "SYS_PWRITEV": ValueOf(syscall.SYS_PWRITEV), + "SYS_QUOTACTL": ValueOf(syscall.SYS_QUOTACTL), + "SYS_READ": ValueOf(syscall.SYS_READ), + "SYS_READAHEAD": ValueOf(syscall.SYS_READAHEAD), + "SYS_READLINKAT": ValueOf(syscall.SYS_READLINKAT), + "SYS_READV": ValueOf(syscall.SYS_READV), + "SYS_REBOOT": ValueOf(syscall.SYS_REBOOT), + "SYS_RECVFROM": ValueOf(syscall.SYS_RECVFROM), + "SYS_RECVMMSG": ValueOf(syscall.SYS_RECVMMSG), + "SYS_RECVMSG": ValueOf(syscall.SYS_RECVMSG), + "SYS_REMAP_FILE_PAGES": ValueOf(syscall.SYS_REMAP_FILE_PAGES), + "SYS_REMOVEXATTR": ValueOf(syscall.SYS_REMOVEXATTR), + "SYS_RENAMEAT": ValueOf(syscall.SYS_RENAMEAT), + "SYS_RENAMEAT2": ValueOf(syscall.SYS_RENAMEAT2), + "SYS_REQUEST_KEY": ValueOf(syscall.SYS_REQUEST_KEY), + "SYS_RESTART_SYSCALL": ValueOf(syscall.SYS_RESTART_SYSCALL), + "SYS_RT_SIGACTION": ValueOf(syscall.SYS_RT_SIGACTION), + "SYS_RT_SIGPENDING": ValueOf(syscall.SYS_RT_SIGPENDING), + "SYS_RT_SIGPROCMASK": ValueOf(syscall.SYS_RT_SIGPROCMASK), + "SYS_RT_SIGQUEUEINFO": ValueOf(syscall.SYS_RT_SIGQUEUEINFO), + "SYS_RT_SIGRETURN": ValueOf(syscall.SYS_RT_SIGRETURN), + "SYS_RT_SIGSUSPEND": ValueOf(syscall.SYS_RT_SIGSUSPEND), + "SYS_RT_SIGTIMEDWAIT": ValueOf(syscall.SYS_RT_SIGTIMEDWAIT), + "SYS_RT_TGSIGQUEUEINFO": ValueOf(syscall.SYS_RT_TGSIGQUEUEINFO), + "SYS_SCHED_GETAFFINITY": ValueOf(syscall.SYS_SCHED_GETAFFINITY), + "SYS_SCHED_GETATTR": ValueOf(syscall.SYS_SCHED_GETATTR), + "SYS_SCHED_GETPARAM": ValueOf(syscall.SYS_SCHED_GETPARAM), + "SYS_SCHED_GETSCHEDULER": ValueOf(syscall.SYS_SCHED_GETSCHEDULER), + "SYS_SCHED_GET_PRIORITY_MAX": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MAX), + "SYS_SCHED_GET_PRIORITY_MIN": ValueOf(syscall.SYS_SCHED_GET_PRIORITY_MIN), + "SYS_SCHED_RR_GET_INTERVAL": ValueOf(syscall.SYS_SCHED_RR_GET_INTERVAL), + "SYS_SCHED_SETAFFINITY": ValueOf(syscall.SYS_SCHED_SETAFFINITY), + "SYS_SCHED_SETATTR": ValueOf(syscall.SYS_SCHED_SETATTR), + "SYS_SCHED_SETPARAM": ValueOf(syscall.SYS_SCHED_SETPARAM), + "SYS_SCHED_SETSCHEDULER": ValueOf(syscall.SYS_SCHED_SETSCHEDULER), + "SYS_SCHED_YIELD": ValueOf(syscall.SYS_SCHED_YIELD), + "SYS_SECCOMP": ValueOf(syscall.SYS_SECCOMP), + "SYS_SEMCTL": ValueOf(syscall.SYS_SEMCTL), + "SYS_SEMGET": ValueOf(syscall.SYS_SEMGET), + "SYS_SEMOP": ValueOf(syscall.SYS_SEMOP), + "SYS_SEMTIMEDOP": ValueOf(syscall.SYS_SEMTIMEDOP), + "SYS_SENDFILE": ValueOf(syscall.SYS_SENDFILE), + "SYS_SENDMMSG": ValueOf(syscall.SYS_SENDMMSG), + "SYS_SENDMSG": ValueOf(syscall.SYS_SENDMSG), + "SYS_SENDTO": ValueOf(syscall.SYS_SENDTO), + "SYS_SETDOMAINNAME": ValueOf(syscall.SYS_SETDOMAINNAME), + "SYS_SETFSGID": ValueOf(syscall.SYS_SETFSGID), + "SYS_SETFSUID": ValueOf(syscall.SYS_SETFSUID), + "SYS_SETGID": ValueOf(syscall.SYS_SETGID), + "SYS_SETGROUPS": ValueOf(syscall.SYS_SETGROUPS), + "SYS_SETHOSTNAME": ValueOf(syscall.SYS_SETHOSTNAME), + "SYS_SETITIMER": ValueOf(syscall.SYS_SETITIMER), + "SYS_SETNS": ValueOf(syscall.SYS_SETNS), + "SYS_SETPGID": ValueOf(syscall.SYS_SETPGID), + "SYS_SETPRIORITY": ValueOf(syscall.SYS_SETPRIORITY), + "SYS_SETREGID": ValueOf(syscall.SYS_SETREGID), + "SYS_SETRESGID": ValueOf(syscall.SYS_SETRESGID), + "SYS_SETRESUID": ValueOf(syscall.SYS_SETRESUID), + "SYS_SETREUID": ValueOf(syscall.SYS_SETREUID), + "SYS_SETRLIMIT": ValueOf(syscall.SYS_SETRLIMIT), + "SYS_SETSID": ValueOf(syscall.SYS_SETSID), + "SYS_SETSOCKOPT": ValueOf(syscall.SYS_SETSOCKOPT), + "SYS_SETTIMEOFDAY": ValueOf(syscall.SYS_SETTIMEOFDAY), + "SYS_SETUID": ValueOf(syscall.SYS_SETUID), + "SYS_SETXATTR": ValueOf(syscall.SYS_SETXATTR), + "SYS_SET_MEMPOLICY": ValueOf(syscall.SYS_SET_MEMPOLICY), + "SYS_SET_ROBUST_LIST": ValueOf(syscall.SYS_SET_ROBUST_LIST), + "SYS_SET_TID_ADDRESS": ValueOf(syscall.SYS_SET_TID_ADDRESS), + "SYS_SHMAT": ValueOf(syscall.SYS_SHMAT), + "SYS_SHMCTL": ValueOf(syscall.SYS_SHMCTL), + "SYS_SHMDT": ValueOf(syscall.SYS_SHMDT), + "SYS_SHMGET": ValueOf(syscall.SYS_SHMGET), + "SYS_SHUTDOWN": ValueOf(syscall.SYS_SHUTDOWN), + "SYS_SIGALTSTACK": ValueOf(syscall.SYS_SIGALTSTACK), + "SYS_SIGNALFD4": ValueOf(syscall.SYS_SIGNALFD4), + "SYS_SOCKET": ValueOf(syscall.SYS_SOCKET), + "SYS_SOCKETPAIR": ValueOf(syscall.SYS_SOCKETPAIR), + "SYS_SPLICE": ValueOf(syscall.SYS_SPLICE), + "SYS_STATFS": ValueOf(syscall.SYS_STATFS), + "SYS_SWAPOFF": ValueOf(syscall.SYS_SWAPOFF), + "SYS_SWAPON": ValueOf(syscall.SYS_SWAPON), + "SYS_SYMLINKAT": ValueOf(syscall.SYS_SYMLINKAT), + "SYS_SYNC": ValueOf(syscall.SYS_SYNC), + "SYS_SYNCFS": ValueOf(syscall.SYS_SYNCFS), + "SYS_SYNC_FILE_RANGE": ValueOf(syscall.SYS_SYNC_FILE_RANGE), + "SYS_SYNC_FILE_RANGE2": ValueOf(syscall.SYS_SYNC_FILE_RANGE2), + "SYS_SYSINFO": ValueOf(syscall.SYS_SYSINFO), + "SYS_SYSLOG": ValueOf(syscall.SYS_SYSLOG), + "SYS_TEE": ValueOf(syscall.SYS_TEE), + "SYS_TGKILL": ValueOf(syscall.SYS_TGKILL), + "SYS_TIME": ValueOf(syscall.SYS_TIME), + "SYS_TIMERFD_CREATE": ValueOf(syscall.SYS_TIMERFD_CREATE), + "SYS_TIMERFD_GETTIME": ValueOf(syscall.SYS_TIMERFD_GETTIME), + "SYS_TIMERFD_SETTIME": ValueOf(syscall.SYS_TIMERFD_SETTIME), + "SYS_TIMER_CREATE": ValueOf(syscall.SYS_TIMER_CREATE), + "SYS_TIMER_DELETE": ValueOf(syscall.SYS_TIMER_DELETE), + "SYS_TIMER_GETOVERRUN": ValueOf(syscall.SYS_TIMER_GETOVERRUN), + "SYS_TIMER_GETTIME": ValueOf(syscall.SYS_TIMER_GETTIME), + "SYS_TIMER_SETTIME": ValueOf(syscall.SYS_TIMER_SETTIME), + "SYS_TIMES": ValueOf(syscall.SYS_TIMES), + "SYS_TKILL": ValueOf(syscall.SYS_TKILL), + "SYS_TRUNCATE": ValueOf(syscall.SYS_TRUNCATE), + "SYS_UMASK": ValueOf(syscall.SYS_UMASK), + "SYS_UMOUNT2": ValueOf(syscall.SYS_UMOUNT2), + "SYS_UNAME": ValueOf(syscall.SYS_UNAME), + "SYS_UNLINKAT": ValueOf(syscall.SYS_UNLINKAT), + "SYS_UNSHARE": ValueOf(syscall.SYS_UNSHARE), + "SYS_USTAT": ValueOf(syscall.SYS_USTAT), + "SYS_UTIME": ValueOf(syscall.SYS_UTIME), + "SYS_UTIMENSAT": ValueOf(syscall.SYS_UTIMENSAT), + "SYS_UTIMES": ValueOf(syscall.SYS_UTIMES), + "SYS_VHANGUP": ValueOf(syscall.SYS_VHANGUP), + "SYS_VMSPLICE": ValueOf(syscall.SYS_VMSPLICE), + "SYS_WAIT4": ValueOf(syscall.SYS_WAIT4), + "SYS_WAITID": ValueOf(syscall.SYS_WAITID), + "SYS_WRITE": ValueOf(syscall.SYS_WRITE), + "SYS_WRITEV": ValueOf(syscall.SYS_WRITEV), + "S_BLKSIZE": ValueOf(syscall.S_BLKSIZE), + "S_IEXEC": ValueOf(syscall.S_IEXEC), + "S_IFBLK": ValueOf(syscall.S_IFBLK), + "S_IFCHR": ValueOf(syscall.S_IFCHR), + "S_IFDIR": ValueOf(syscall.S_IFDIR), + "S_IFIFO": ValueOf(syscall.S_IFIFO), + "S_IFLNK": ValueOf(syscall.S_IFLNK), + "S_IFMT": ValueOf(syscall.S_IFMT), + "S_IFREG": ValueOf(syscall.S_IFREG), + "S_IFSOCK": ValueOf(syscall.S_IFSOCK), + "S_IREAD": ValueOf(syscall.S_IREAD), + "S_IRGRP": ValueOf(syscall.S_IRGRP), + "S_IROTH": ValueOf(syscall.S_IROTH), + "S_IRUSR": ValueOf(syscall.S_IRUSR), + "S_IRWXG": ValueOf(syscall.S_IRWXG), + "S_IRWXO": ValueOf(syscall.S_IRWXO), + "S_IRWXU": ValueOf(syscall.S_IRWXU), + "S_ISGID": ValueOf(syscall.S_ISGID), + "S_ISUID": ValueOf(syscall.S_ISUID), + "S_ISVTX": ValueOf(syscall.S_ISVTX), + "S_IWGRP": ValueOf(syscall.S_IWGRP), + "S_IWOTH": ValueOf(syscall.S_IWOTH), + "S_IWRITE": ValueOf(syscall.S_IWRITE), + "S_IWUSR": ValueOf(syscall.S_IWUSR), + "S_IXGRP": ValueOf(syscall.S_IXGRP), + "S_IXOTH": ValueOf(syscall.S_IXOTH), + "S_IXUSR": ValueOf(syscall.S_IXUSR), + "Seek": ValueOf(syscall.Seek), + "Select": ValueOf(syscall.Select), + "Sendfile": ValueOf(syscall.Sendfile), + "Sendmsg": ValueOf(syscall.Sendmsg), + "SendmsgN": ValueOf(syscall.SendmsgN), + "Sendto": ValueOf(syscall.Sendto), + "SetLsfPromisc": ValueOf(syscall.SetLsfPromisc), + "SetNonblock": ValueOf(syscall.SetNonblock), + "Setdomainname": ValueOf(syscall.Setdomainname), + "Setenv": ValueOf(syscall.Setenv), + "Setfsgid": ValueOf(syscall.Setfsgid), + "Setfsuid": ValueOf(syscall.Setfsuid), + "Setgid": ValueOf(syscall.Setgid), + "Setgroups": ValueOf(syscall.Setgroups), + "Sethostname": ValueOf(syscall.Sethostname), + "Setpgid": ValueOf(syscall.Setpgid), + "Setpriority": ValueOf(syscall.Setpriority), + "Setregid": ValueOf(syscall.Setregid), + "Setresgid": ValueOf(syscall.Setresgid), + "Setresuid": ValueOf(syscall.Setresuid), + "Setreuid": ValueOf(syscall.Setreuid), + "Setrlimit": ValueOf(syscall.Setrlimit), + "Setsid": ValueOf(syscall.Setsid), + "SetsockoptByte": ValueOf(syscall.SetsockoptByte), + "SetsockoptICMPv6Filter": ValueOf(syscall.SetsockoptICMPv6Filter), + "SetsockoptIPMreq": ValueOf(syscall.SetsockoptIPMreq), + "SetsockoptIPMreqn": ValueOf(syscall.SetsockoptIPMreqn), + "SetsockoptIPv6Mreq": ValueOf(syscall.SetsockoptIPv6Mreq), + "SetsockoptInet4Addr": ValueOf(syscall.SetsockoptInet4Addr), + "SetsockoptInt": ValueOf(syscall.SetsockoptInt), + "SetsockoptLinger": ValueOf(syscall.SetsockoptLinger), + "SetsockoptString": ValueOf(syscall.SetsockoptString), + "SetsockoptTimeval": ValueOf(syscall.SetsockoptTimeval), + "Settimeofday": ValueOf(syscall.Settimeofday), + "Setuid": ValueOf(syscall.Setuid), + "Setxattr": ValueOf(syscall.Setxattr), + "Shutdown": ValueOf(syscall.Shutdown), + "SizeofCmsghdr": ValueOf(syscall.SizeofCmsghdr), + "SizeofICMPv6Filter": ValueOf(syscall.SizeofICMPv6Filter), + "SizeofIPMreq": ValueOf(syscall.SizeofIPMreq), + "SizeofIPMreqn": ValueOf(syscall.SizeofIPMreqn), + "SizeofIPv6MTUInfo": ValueOf(syscall.SizeofIPv6MTUInfo), + "SizeofIPv6Mreq": ValueOf(syscall.SizeofIPv6Mreq), + "SizeofIfAddrmsg": ValueOf(syscall.SizeofIfAddrmsg), + "SizeofIfInfomsg": ValueOf(syscall.SizeofIfInfomsg), + "SizeofInet4Pktinfo": ValueOf(syscall.SizeofInet4Pktinfo), + "SizeofInet6Pktinfo": ValueOf(syscall.SizeofInet6Pktinfo), + "SizeofInotifyEvent": ValueOf(syscall.SizeofInotifyEvent), + "SizeofLinger": ValueOf(syscall.SizeofLinger), + "SizeofMsghdr": ValueOf(syscall.SizeofMsghdr), + "SizeofNlAttr": ValueOf(syscall.SizeofNlAttr), + "SizeofNlMsgerr": ValueOf(syscall.SizeofNlMsgerr), + "SizeofNlMsghdr": ValueOf(syscall.SizeofNlMsghdr), + "SizeofRtAttr": ValueOf(syscall.SizeofRtAttr), + "SizeofRtGenmsg": ValueOf(syscall.SizeofRtGenmsg), + "SizeofRtMsg": ValueOf(syscall.SizeofRtMsg), + "SizeofRtNexthop": ValueOf(syscall.SizeofRtNexthop), + "SizeofSockFilter": ValueOf(syscall.SizeofSockFilter), + "SizeofSockFprog": ValueOf(syscall.SizeofSockFprog), + "SizeofSockaddrAny": ValueOf(syscall.SizeofSockaddrAny), + "SizeofSockaddrInet4": ValueOf(syscall.SizeofSockaddrInet4), + "SizeofSockaddrInet6": ValueOf(syscall.SizeofSockaddrInet6), + "SizeofSockaddrLinklayer": ValueOf(syscall.SizeofSockaddrLinklayer), + "SizeofSockaddrNetlink": ValueOf(syscall.SizeofSockaddrNetlink), + "SizeofSockaddrUnix": ValueOf(syscall.SizeofSockaddrUnix), + "SizeofTCPInfo": ValueOf(syscall.SizeofTCPInfo), + "SizeofUcred": ValueOf(syscall.SizeofUcred), + "SlicePtrFromStrings": ValueOf(syscall.SlicePtrFromStrings), + "Socket": ValueOf(syscall.Socket), + "SocketDisableIPv6": ValueOf(&syscall.SocketDisableIPv6).Elem(), + "Socketpair": ValueOf(syscall.Socketpair), + "Splice": ValueOf(syscall.Splice), + "StartProcess": ValueOf(syscall.StartProcess), + "Stat": ValueOf(syscall.Stat), + "Statfs": ValueOf(syscall.Statfs), + "Stderr": ValueOf(&syscall.Stderr).Elem(), + "Stdin": ValueOf(&syscall.Stdin).Elem(), + "Stdout": ValueOf(&syscall.Stdout).Elem(), + "StringBytePtr": ValueOf(syscall.StringBytePtr), + "StringByteSlice": ValueOf(syscall.StringByteSlice), + "StringSlicePtr": ValueOf(syscall.StringSlicePtr), + "Symlink": ValueOf(syscall.Symlink), + "Sync": ValueOf(syscall.Sync), + "SyncFileRange": ValueOf(syscall.SyncFileRange), + "Syscall": ValueOf(syscall.Syscall), + "Syscall6": ValueOf(syscall.Syscall6), + "Sysinfo": ValueOf(syscall.Sysinfo), + "TCFLSH": ValueOf(syscall.TCFLSH), + "TCGETS": ValueOf(syscall.TCGETS), + "TCIFLUSH": ValueOf(syscall.TCIFLUSH), + "TCIOFLUSH": ValueOf(syscall.TCIOFLUSH), + "TCOFLUSH": ValueOf(syscall.TCOFLUSH), + "TCP_CONGESTION": ValueOf(syscall.TCP_CONGESTION), + "TCP_COOKIE_IN_ALWAYS": ValueOf(syscall.TCP_COOKIE_IN_ALWAYS), + "TCP_COOKIE_MAX": ValueOf(syscall.TCP_COOKIE_MAX), + "TCP_COOKIE_MIN": ValueOf(syscall.TCP_COOKIE_MIN), + "TCP_COOKIE_OUT_NEVER": ValueOf(syscall.TCP_COOKIE_OUT_NEVER), + "TCP_COOKIE_PAIR_SIZE": ValueOf(syscall.TCP_COOKIE_PAIR_SIZE), + "TCP_COOKIE_TRANSACTIONS": ValueOf(syscall.TCP_COOKIE_TRANSACTIONS), + "TCP_CORK": ValueOf(syscall.TCP_CORK), + "TCP_DEFER_ACCEPT": ValueOf(syscall.TCP_DEFER_ACCEPT), + "TCP_FASTOPEN": ValueOf(syscall.TCP_FASTOPEN), + "TCP_INFO": ValueOf(syscall.TCP_INFO), + "TCP_KEEPCNT": ValueOf(syscall.TCP_KEEPCNT), + "TCP_KEEPIDLE": ValueOf(syscall.TCP_KEEPIDLE), + "TCP_KEEPINTVL": ValueOf(syscall.TCP_KEEPINTVL), + "TCP_LINGER2": ValueOf(syscall.TCP_LINGER2), + "TCP_MAXSEG": ValueOf(syscall.TCP_MAXSEG), + "TCP_MAXWIN": ValueOf(syscall.TCP_MAXWIN), + "TCP_MAX_WINSHIFT": ValueOf(syscall.TCP_MAX_WINSHIFT), + "TCP_MD5SIG": ValueOf(syscall.TCP_MD5SIG), + "TCP_MD5SIG_MAXKEYLEN": ValueOf(syscall.TCP_MD5SIG_MAXKEYLEN), + "TCP_MSS": ValueOf(syscall.TCP_MSS), + "TCP_MSS_DEFAULT": ValueOf(syscall.TCP_MSS_DEFAULT), + "TCP_MSS_DESIRED": ValueOf(syscall.TCP_MSS_DESIRED), + "TCP_NODELAY": ValueOf(syscall.TCP_NODELAY), + "TCP_QUEUE_SEQ": ValueOf(syscall.TCP_QUEUE_SEQ), + "TCP_QUICKACK": ValueOf(syscall.TCP_QUICKACK), + "TCP_REPAIR": ValueOf(syscall.TCP_REPAIR), + "TCP_REPAIR_OPTIONS": ValueOf(syscall.TCP_REPAIR_OPTIONS), + "TCP_REPAIR_QUEUE": ValueOf(syscall.TCP_REPAIR_QUEUE), + "TCP_SYNCNT": ValueOf(syscall.TCP_SYNCNT), + "TCP_S_DATA_IN": ValueOf(syscall.TCP_S_DATA_IN), + "TCP_S_DATA_OUT": ValueOf(syscall.TCP_S_DATA_OUT), + "TCP_THIN_DUPACK": ValueOf(syscall.TCP_THIN_DUPACK), + "TCP_THIN_LINEAR_TIMEOUTS": ValueOf(syscall.TCP_THIN_LINEAR_TIMEOUTS), + "TCP_TIMESTAMP": ValueOf(syscall.TCP_TIMESTAMP), + "TCP_USER_TIMEOUT": ValueOf(syscall.TCP_USER_TIMEOUT), + "TCP_WINDOW_CLAMP": ValueOf(syscall.TCP_WINDOW_CLAMP), + "TCSAFLUSH": ValueOf(syscall.TCSAFLUSH), + "TCSETS": ValueOf(syscall.TCSETS), + "TIOCCBRK": ValueOf(syscall.TIOCCBRK), + "TIOCCONS": ValueOf(syscall.TIOCCONS), + "TIOCEXCL": ValueOf(syscall.TIOCEXCL), + "TIOCGDEV": ValueOf(uint32(syscall.TIOCGDEV)), + "TIOCGETD": ValueOf(syscall.TIOCGETD), + "TIOCGEXCL": ValueOf(uint32(syscall.TIOCGEXCL)), + "TIOCGICOUNT": ValueOf(syscall.TIOCGICOUNT), + "TIOCGLCKTRMIOS": ValueOf(syscall.TIOCGLCKTRMIOS), + "TIOCGPGRP": ValueOf(syscall.TIOCGPGRP), + "TIOCGPKT": ValueOf(uint32(syscall.TIOCGPKT)), + "TIOCGPTLCK": ValueOf(uint32(syscall.TIOCGPTLCK)), + "TIOCGPTN": ValueOf(uint32(syscall.TIOCGPTN)), + "TIOCGRS485": ValueOf(syscall.TIOCGRS485), + "TIOCGSERIAL": ValueOf(syscall.TIOCGSERIAL), + "TIOCGSID": ValueOf(syscall.TIOCGSID), + "TIOCGSOFTCAR": ValueOf(syscall.TIOCGSOFTCAR), + "TIOCGWINSZ": ValueOf(syscall.TIOCGWINSZ), + "TIOCINQ": ValueOf(syscall.TIOCINQ), + "TIOCLINUX": ValueOf(syscall.TIOCLINUX), + "TIOCMBIC": ValueOf(syscall.TIOCMBIC), + "TIOCMBIS": ValueOf(syscall.TIOCMBIS), + "TIOCMGET": ValueOf(syscall.TIOCMGET), + "TIOCMIWAIT": ValueOf(syscall.TIOCMIWAIT), + "TIOCMSET": ValueOf(syscall.TIOCMSET), + "TIOCM_CAR": ValueOf(syscall.TIOCM_CAR), + "TIOCM_CD": ValueOf(syscall.TIOCM_CD), + "TIOCM_CTS": ValueOf(syscall.TIOCM_CTS), + "TIOCM_DSR": ValueOf(syscall.TIOCM_DSR), + "TIOCM_DTR": ValueOf(syscall.TIOCM_DTR), + "TIOCM_LE": ValueOf(syscall.TIOCM_LE), + "TIOCM_RI": ValueOf(syscall.TIOCM_RI), + "TIOCM_RNG": ValueOf(syscall.TIOCM_RNG), + "TIOCM_RTS": ValueOf(syscall.TIOCM_RTS), + "TIOCM_SR": ValueOf(syscall.TIOCM_SR), + "TIOCM_ST": ValueOf(syscall.TIOCM_ST), + "TIOCNOTTY": ValueOf(syscall.TIOCNOTTY), + "TIOCNXCL": ValueOf(syscall.TIOCNXCL), + "TIOCOUTQ": ValueOf(syscall.TIOCOUTQ), + "TIOCPKT": ValueOf(syscall.TIOCPKT), + "TIOCPKT_DATA": ValueOf(syscall.TIOCPKT_DATA), + "TIOCPKT_DOSTOP": ValueOf(syscall.TIOCPKT_DOSTOP), + "TIOCPKT_FLUSHREAD": ValueOf(syscall.TIOCPKT_FLUSHREAD), + "TIOCPKT_FLUSHWRITE": ValueOf(syscall.TIOCPKT_FLUSHWRITE), + "TIOCPKT_IOCTL": ValueOf(syscall.TIOCPKT_IOCTL), + "TIOCPKT_NOSTOP": ValueOf(syscall.TIOCPKT_NOSTOP), + "TIOCPKT_START": ValueOf(syscall.TIOCPKT_START), + "TIOCPKT_STOP": ValueOf(syscall.TIOCPKT_STOP), + "TIOCSBRK": ValueOf(syscall.TIOCSBRK), + "TIOCSCTTY": ValueOf(syscall.TIOCSCTTY), + "TIOCSERCONFIG": ValueOf(syscall.TIOCSERCONFIG), + "TIOCSERGETLSR": ValueOf(syscall.TIOCSERGETLSR), + "TIOCSERGETMULTI": ValueOf(syscall.TIOCSERGETMULTI), + "TIOCSERGSTRUCT": ValueOf(syscall.TIOCSERGSTRUCT), + "TIOCSERGWILD": ValueOf(syscall.TIOCSERGWILD), + "TIOCSERSETMULTI": ValueOf(syscall.TIOCSERSETMULTI), + "TIOCSERSWILD": ValueOf(syscall.TIOCSERSWILD), + "TIOCSER_TEMT": ValueOf(syscall.TIOCSER_TEMT), + "TIOCSETD": ValueOf(syscall.TIOCSETD), + "TIOCSIG": ValueOf(syscall.TIOCSIG), + "TIOCSLCKTRMIOS": ValueOf(syscall.TIOCSLCKTRMIOS), + "TIOCSPGRP": ValueOf(syscall.TIOCSPGRP), + "TIOCSPTLCK": ValueOf(syscall.TIOCSPTLCK), + "TIOCSRS485": ValueOf(syscall.TIOCSRS485), + "TIOCSSERIAL": ValueOf(syscall.TIOCSSERIAL), + "TIOCSSOFTCAR": ValueOf(syscall.TIOCSSOFTCAR), + "TIOCSTI": ValueOf(syscall.TIOCSTI), + "TIOCSWINSZ": ValueOf(syscall.TIOCSWINSZ), + "TIOCVHANGUP": ValueOf(syscall.TIOCVHANGUP), + "TOSTOP": ValueOf(syscall.TOSTOP), + "TUNATTACHFILTER": ValueOf(syscall.TUNATTACHFILTER), + "TUNDETACHFILTER": ValueOf(syscall.TUNDETACHFILTER), + "TUNGETFEATURES": ValueOf(uint32(syscall.TUNGETFEATURES)), + "TUNGETFILTER": ValueOf(uint32(syscall.TUNGETFILTER)), + "TUNGETIFF": ValueOf(uint32(syscall.TUNGETIFF)), + "TUNGETSNDBUF": ValueOf(uint32(syscall.TUNGETSNDBUF)), + "TUNGETVNETHDRSZ": ValueOf(uint32(syscall.TUNGETVNETHDRSZ)), + "TUNSETDEBUG": ValueOf(syscall.TUNSETDEBUG), + "TUNSETGROUP": ValueOf(syscall.TUNSETGROUP), + "TUNSETIFF": ValueOf(syscall.TUNSETIFF), + "TUNSETIFINDEX": ValueOf(syscall.TUNSETIFINDEX), + "TUNSETLINK": ValueOf(syscall.TUNSETLINK), + "TUNSETNOCSUM": ValueOf(syscall.TUNSETNOCSUM), + "TUNSETOFFLOAD": ValueOf(syscall.TUNSETOFFLOAD), + "TUNSETOWNER": ValueOf(syscall.TUNSETOWNER), + "TUNSETPERSIST": ValueOf(syscall.TUNSETPERSIST), + "TUNSETQUEUE": ValueOf(syscall.TUNSETQUEUE), + "TUNSETSNDBUF": ValueOf(syscall.TUNSETSNDBUF), + "TUNSETTXFILTER": ValueOf(syscall.TUNSETTXFILTER), + "TUNSETVNETHDRSZ": ValueOf(syscall.TUNSETVNETHDRSZ), + "Tee": ValueOf(syscall.Tee), + "Tgkill": ValueOf(syscall.Tgkill), + "Time": ValueOf(syscall.Time), + "Times": ValueOf(syscall.Times), + "TimespecToNsec": ValueOf(syscall.TimespecToNsec), + "TimevalToNsec": ValueOf(syscall.TimevalToNsec), + "Truncate": ValueOf(syscall.Truncate), + "Umask": ValueOf(syscall.Umask), + "Uname": ValueOf(syscall.Uname), + "UnixCredentials": ValueOf(syscall.UnixCredentials), + "UnixRights": ValueOf(syscall.UnixRights), + "Unlink": ValueOf(syscall.Unlink), + "Unlinkat": ValueOf(syscall.Unlinkat), + "Unmount": ValueOf(syscall.Unmount), + "Unsetenv": ValueOf(syscall.Unsetenv), + "Unshare": ValueOf(syscall.Unshare), + "Ustat": ValueOf(syscall.Ustat), + "Utime": ValueOf(syscall.Utime), + "Utimes": ValueOf(syscall.Utimes), + "UtimesNano": ValueOf(syscall.UtimesNano), + "VDISCARD": ValueOf(syscall.VDISCARD), + "VEOF": ValueOf(syscall.VEOF), + "VEOL": ValueOf(syscall.VEOL), + "VEOL2": ValueOf(syscall.VEOL2), + "VERASE": ValueOf(syscall.VERASE), + "VINTR": ValueOf(syscall.VINTR), + "VKILL": ValueOf(syscall.VKILL), + "VLNEXT": ValueOf(syscall.VLNEXT), + "VMIN": ValueOf(syscall.VMIN), + "VQUIT": ValueOf(syscall.VQUIT), + "VREPRINT": ValueOf(syscall.VREPRINT), + "VSTART": ValueOf(syscall.VSTART), + "VSTOP": ValueOf(syscall.VSTOP), + "VSUSP": ValueOf(syscall.VSUSP), + "VSWTC": ValueOf(syscall.VSWTC), + "VT0": ValueOf(syscall.VT0), + "VT1": ValueOf(syscall.VT1), + "VTDLY": ValueOf(syscall.VTDLY), + "VTIME": ValueOf(syscall.VTIME), + "VWERASE": ValueOf(syscall.VWERASE), + "WALL": ValueOf(syscall.WALL), + "WCLONE": ValueOf(uint32(syscall.WCLONE)), + "WCONTINUED": ValueOf(syscall.WCONTINUED), + "WEXITED": ValueOf(syscall.WEXITED), + "WNOHANG": ValueOf(syscall.WNOHANG), + "WNOTHREAD": ValueOf(syscall.WNOTHREAD), + "WNOWAIT": ValueOf(syscall.WNOWAIT), + "WORDSIZE": ValueOf(syscall.WORDSIZE), + "WSTOPPED": ValueOf(syscall.WSTOPPED), + "WUNTRACED": ValueOf(syscall.WUNTRACED), + "Wait4": ValueOf(syscall.Wait4), + "Write": ValueOf(syscall.Write), + "XCASE": ValueOf(syscall.XCASE), + },Types: map[string]Type{ + "Cmsghdr": TypeOf((*syscall.Cmsghdr)(nil)).Elem(), + "Credential": TypeOf((*syscall.Credential)(nil)).Elem(), + "Dirent": TypeOf((*syscall.Dirent)(nil)).Elem(), + "EpollEvent": TypeOf((*syscall.EpollEvent)(nil)).Elem(), + "Errno": TypeOf((*syscall.Errno)(nil)).Elem(), + "FdSet": TypeOf((*syscall.FdSet)(nil)).Elem(), + "Flock_t": TypeOf((*syscall.Flock_t)(nil)).Elem(), + "Fsid": TypeOf((*syscall.Fsid)(nil)).Elem(), + "ICMPv6Filter": TypeOf((*syscall.ICMPv6Filter)(nil)).Elem(), + "IPMreq": TypeOf((*syscall.IPMreq)(nil)).Elem(), + "IPMreqn": TypeOf((*syscall.IPMreqn)(nil)).Elem(), + "IPv6MTUInfo": TypeOf((*syscall.IPv6MTUInfo)(nil)).Elem(), + "IPv6Mreq": TypeOf((*syscall.IPv6Mreq)(nil)).Elem(), + "IfAddrmsg": TypeOf((*syscall.IfAddrmsg)(nil)).Elem(), + "IfInfomsg": TypeOf((*syscall.IfInfomsg)(nil)).Elem(), + "Inet4Pktinfo": TypeOf((*syscall.Inet4Pktinfo)(nil)).Elem(), + "Inet6Pktinfo": TypeOf((*syscall.Inet6Pktinfo)(nil)).Elem(), + "InotifyEvent": TypeOf((*syscall.InotifyEvent)(nil)).Elem(), + "Iovec": TypeOf((*syscall.Iovec)(nil)).Elem(), + "Linger": TypeOf((*syscall.Linger)(nil)).Elem(), + "Msghdr": TypeOf((*syscall.Msghdr)(nil)).Elem(), + "NetlinkMessage": TypeOf((*syscall.NetlinkMessage)(nil)).Elem(), + "NetlinkRouteAttr": TypeOf((*syscall.NetlinkRouteAttr)(nil)).Elem(), + "NetlinkRouteRequest": TypeOf((*syscall.NetlinkRouteRequest)(nil)).Elem(), + "NlAttr": TypeOf((*syscall.NlAttr)(nil)).Elem(), + "NlMsgerr": TypeOf((*syscall.NlMsgerr)(nil)).Elem(), + "NlMsghdr": TypeOf((*syscall.NlMsghdr)(nil)).Elem(), + "ProcAttr": TypeOf((*syscall.ProcAttr)(nil)).Elem(), + "PtraceRegs": TypeOf((*syscall.PtraceRegs)(nil)).Elem(), + "RawSockaddr": TypeOf((*syscall.RawSockaddr)(nil)).Elem(), + "RawSockaddrAny": TypeOf((*syscall.RawSockaddrAny)(nil)).Elem(), + "RawSockaddrInet4": TypeOf((*syscall.RawSockaddrInet4)(nil)).Elem(), + "RawSockaddrInet6": TypeOf((*syscall.RawSockaddrInet6)(nil)).Elem(), + "RawSockaddrLinklayer": TypeOf((*syscall.RawSockaddrLinklayer)(nil)).Elem(), + "RawSockaddrNetlink": TypeOf((*syscall.RawSockaddrNetlink)(nil)).Elem(), + "RawSockaddrUnix": TypeOf((*syscall.RawSockaddrUnix)(nil)).Elem(), + "Rlimit": TypeOf((*syscall.Rlimit)(nil)).Elem(), + "RtAttr": TypeOf((*syscall.RtAttr)(nil)).Elem(), + "RtGenmsg": TypeOf((*syscall.RtGenmsg)(nil)).Elem(), + "RtMsg": TypeOf((*syscall.RtMsg)(nil)).Elem(), + "RtNexthop": TypeOf((*syscall.RtNexthop)(nil)).Elem(), + "Rusage": TypeOf((*syscall.Rusage)(nil)).Elem(), + "Signal": TypeOf((*syscall.Signal)(nil)).Elem(), + "SockFilter": TypeOf((*syscall.SockFilter)(nil)).Elem(), + "SockFprog": TypeOf((*syscall.SockFprog)(nil)).Elem(), + "Sockaddr": TypeOf((*syscall.Sockaddr)(nil)).Elem(), + "SockaddrInet4": TypeOf((*syscall.SockaddrInet4)(nil)).Elem(), + "SockaddrInet6": TypeOf((*syscall.SockaddrInet6)(nil)).Elem(), + "SockaddrLinklayer": TypeOf((*syscall.SockaddrLinklayer)(nil)).Elem(), + "SockaddrNetlink": TypeOf((*syscall.SockaddrNetlink)(nil)).Elem(), + "SockaddrUnix": TypeOf((*syscall.SockaddrUnix)(nil)).Elem(), + "SocketControlMessage": TypeOf((*syscall.SocketControlMessage)(nil)).Elem(), + "Stat_t": TypeOf((*syscall.Stat_t)(nil)).Elem(), + "Statfs_t": TypeOf((*syscall.Statfs_t)(nil)).Elem(), + "SysProcAttr": TypeOf((*syscall.SysProcAttr)(nil)).Elem(), + "SysProcIDMap": TypeOf((*syscall.SysProcIDMap)(nil)).Elem(), + "Sysinfo_t": TypeOf((*syscall.Sysinfo_t)(nil)).Elem(), + "TCPInfo": TypeOf((*syscall.TCPInfo)(nil)).Elem(), + "Termios": TypeOf((*syscall.Termios)(nil)).Elem(), + "Time_t": TypeOf((*syscall.Time_t)(nil)).Elem(), + "Timespec": TypeOf((*syscall.Timespec)(nil)).Elem(), + "Timeval": TypeOf((*syscall.Timeval)(nil)).Elem(), + "Timex": TypeOf((*syscall.Timex)(nil)).Elem(), + "Tms": TypeOf((*syscall.Tms)(nil)).Elem(), + "Ucred": TypeOf((*syscall.Ucred)(nil)).Elem(), + "Ustat_t": TypeOf((*syscall.Ustat_t)(nil)).Elem(), + "Utimbuf": TypeOf((*syscall.Utimbuf)(nil)).Elem(), + "Utsname": TypeOf((*syscall.Utsname)(nil)).Elem(), + "WaitStatus": TypeOf((*syscall.WaitStatus)(nil)).Elem(), + },Untypeds: map[string]string{ + "AF_ALG": "int:38", + "AF_APPLETALK": "int:5", + "AF_ASH": "int:18", + "AF_ATMPVC": "int:8", + "AF_ATMSVC": "int:20", + "AF_AX25": "int:3", + "AF_BLUETOOTH": "int:31", + "AF_BRIDGE": "int:7", + "AF_CAIF": "int:37", + "AF_CAN": "int:29", + "AF_DECnet": "int:12", + "AF_ECONET": "int:19", + "AF_FILE": "int:1", + "AF_IEEE802154": "int:36", + "AF_INET": "int:2", + "AF_INET6": "int:10", + "AF_IPX": "int:4", + "AF_IRDA": "int:23", + "AF_ISDN": "int:34", + "AF_IUCV": "int:32", + "AF_KEY": "int:15", + "AF_LLC": "int:26", + "AF_LOCAL": "int:1", + "AF_MAX": "int:41", + "AF_NETBEUI": "int:13", + "AF_NETLINK": "int:16", + "AF_NETROM": "int:6", + "AF_NFC": "int:39", + "AF_PACKET": "int:17", + "AF_PHONET": "int:35", + "AF_PPPOX": "int:24", + "AF_RDS": "int:21", + "AF_ROSE": "int:11", + "AF_ROUTE": "int:16", + "AF_RXRPC": "int:33", + "AF_SECURITY": "int:14", + "AF_SNA": "int:22", + "AF_TIPC": "int:30", + "AF_UNIX": "int:1", + "AF_UNSPEC": "int:0", + "AF_VSOCK": "int:40", + "AF_WANPIPE": "int:25", + "AF_X25": "int:9", + "ARPHRD_ADAPT": "int:264", + "ARPHRD_APPLETLK": "int:8", + "ARPHRD_ARCNET": "int:7", + "ARPHRD_ASH": "int:781", + "ARPHRD_ATM": "int:19", + "ARPHRD_AX25": "int:3", + "ARPHRD_BIF": "int:775", + "ARPHRD_CAIF": "int:822", + "ARPHRD_CAN": "int:280", + "ARPHRD_CHAOS": "int:5", + "ARPHRD_CISCO": "int:513", + "ARPHRD_CSLIP": "int:257", + "ARPHRD_CSLIP6": "int:259", + "ARPHRD_DDCMP": "int:517", + "ARPHRD_DLCI": "int:15", + "ARPHRD_ECONET": "int:782", + "ARPHRD_EETHER": "int:2", + "ARPHRD_ETHER": "int:1", + "ARPHRD_EUI64": "int:27", + "ARPHRD_FCAL": "int:785", + "ARPHRD_FCFABRIC": "int:787", + "ARPHRD_FCPL": "int:786", + "ARPHRD_FCPP": "int:784", + "ARPHRD_FDDI": "int:774", + "ARPHRD_FRAD": "int:770", + "ARPHRD_HDLC": "int:513", + "ARPHRD_HIPPI": "int:780", + "ARPHRD_HWX25": "int:272", + "ARPHRD_IEEE1394": "int:24", + "ARPHRD_IEEE802": "int:6", + "ARPHRD_IEEE80211": "int:801", + "ARPHRD_IEEE80211_PRISM": "int:802", + "ARPHRD_IEEE80211_RADIOTAP": "int:803", + "ARPHRD_IEEE802154": "int:804", + "ARPHRD_IEEE802154_MONITOR": "int:805", + "ARPHRD_IEEE802_TR": "int:800", + "ARPHRD_INFINIBAND": "int:32", + "ARPHRD_IP6GRE": "int:823", + "ARPHRD_IPDDP": "int:777", + "ARPHRD_IPGRE": "int:778", + "ARPHRD_IRDA": "int:783", + "ARPHRD_LAPB": "int:516", + "ARPHRD_LOCALTLK": "int:773", + "ARPHRD_LOOPBACK": "int:772", + "ARPHRD_METRICOM": "int:23", + "ARPHRD_NETLINK": "int:824", + "ARPHRD_NETROM": "int:0", + "ARPHRD_NONE": "int:65534", + "ARPHRD_PHONET": "int:820", + "ARPHRD_PHONET_PIPE": "int:821", + "ARPHRD_PIMREG": "int:779", + "ARPHRD_PPP": "int:512", + "ARPHRD_PRONET": "int:4", + "ARPHRD_RAWHDLC": "int:518", + "ARPHRD_ROSE": "int:270", + "ARPHRD_RSRVD": "int:260", + "ARPHRD_SIT": "int:776", + "ARPHRD_SKIP": "int:771", + "ARPHRD_SLIP": "int:256", + "ARPHRD_SLIP6": "int:258", + "ARPHRD_TUNNEL": "int:768", + "ARPHRD_TUNNEL6": "int:769", + "ARPHRD_VOID": "int:65535", + "ARPHRD_X25": "int:271", + "B0": "int:0", + "B1000000": "int:4104", + "B110": "int:3", + "B115200": "int:4098", + "B1152000": "int:4105", + "B1200": "int:9", + "B134": "int:4", + "B150": "int:5", + "B1500000": "int:4106", + "B1800": "int:10", + "B19200": "int:14", + "B200": "int:6", + "B2000000": "int:4107", + "B230400": "int:4099", + "B2400": "int:11", + "B2500000": "int:4108", + "B300": "int:7", + "B3000000": "int:4109", + "B3500000": "int:4110", + "B38400": "int:15", + "B4000000": "int:4111", + "B460800": "int:4100", + "B4800": "int:12", + "B50": "int:1", + "B500000": "int:4101", + "B57600": "int:4097", + "B576000": "int:4102", + "B600": "int:8", + "B75": "int:2", + "B921600": "int:4103", + "B9600": "int:13", + "BPF_A": "int:16", + "BPF_ABS": "int:32", + "BPF_ADD": "int:0", + "BPF_ALU": "int:4", + "BPF_AND": "int:80", + "BPF_B": "int:16", + "BPF_DIV": "int:48", + "BPF_H": "int:8", + "BPF_IMM": "int:0", + "BPF_IND": "int:64", + "BPF_JA": "int:0", + "BPF_JEQ": "int:16", + "BPF_JGE": "int:48", + "BPF_JGT": "int:32", + "BPF_JMP": "int:5", + "BPF_JSET": "int:64", + "BPF_K": "int:0", + "BPF_LD": "int:0", + "BPF_LDX": "int:1", + "BPF_LEN": "int:128", + "BPF_LSH": "int:96", + "BPF_MAJOR_VERSION": "int:1", + "BPF_MAXINSNS": "int:4096", + "BPF_MEM": "int:96", + "BPF_MEMWORDS": "int:16", + "BPF_MINOR_VERSION": "int:1", + "BPF_MISC": "int:7", + "BPF_MOD": "int:144", + "BPF_MSH": "int:160", + "BPF_MUL": "int:32", + "BPF_NEG": "int:128", + "BPF_OR": "int:64", + "BPF_RET": "int:6", + "BPF_RSH": "int:112", + "BPF_ST": "int:2", + "BPF_STX": "int:3", + "BPF_SUB": "int:16", + "BPF_TAX": "int:0", + "BPF_TXA": "int:128", + "BPF_W": "int:0", + "BPF_X": "int:8", + "BPF_XOR": "int:160", + "BRKINT": "int:2", + "CFLUSH": "int:15", + "CLOCAL": "int:2048", + "CLONE_CHILD_CLEARTID": "int:2097152", + "CLONE_CHILD_SETTID": "int:16777216", + "CLONE_DETACHED": "int:4194304", + "CLONE_FILES": "int:1024", + "CLONE_FS": "int:512", + "CLONE_IO": "int:2147483648", + "CLONE_NEWIPC": "int:134217728", + "CLONE_NEWNET": "int:1073741824", + "CLONE_NEWNS": "int:131072", + "CLONE_NEWPID": "int:536870912", + "CLONE_NEWUSER": "int:268435456", + "CLONE_NEWUTS": "int:67108864", + "CLONE_PARENT": "int:32768", + "CLONE_PARENT_SETTID": "int:1048576", + "CLONE_PTRACE": "int:8192", + "CLONE_SETTLS": "int:524288", + "CLONE_SIGHAND": "int:2048", + "CLONE_SYSVSEM": "int:262144", + "CLONE_THREAD": "int:65536", + "CLONE_UNTRACED": "int:8388608", + "CLONE_VFORK": "int:16384", + "CLONE_VM": "int:256", + "CREAD": "int:128", + "CS5": "int:0", + "CS6": "int:16", + "CS7": "int:32", + "CS8": "int:48", + "CSIGNAL": "int:255", + "CSIZE": "int:48", + "CSTART": "int:17", + "CSTATUS": "int:0", + "CSTOP": "int:19", + "CSTOPB": "int:64", + "CSUSP": "int:26", + "DT_BLK": "int:6", + "DT_CHR": "int:2", + "DT_DIR": "int:4", + "DT_FIFO": "int:1", + "DT_LNK": "int:10", + "DT_REG": "int:8", + "DT_SOCK": "int:12", + "DT_UNKNOWN": "int:0", + "DT_WHT": "int:14", + "ECHO": "int:8", + "ECHOCTL": "int:512", + "ECHOE": "int:16", + "ECHOK": "int:32", + "ECHOKE": "int:2048", + "ECHONL": "int:64", + "ECHOPRT": "int:1024", + "ENCODING_DEFAULT": "int:0", + "ENCODING_FM_MARK": "int:3", + "ENCODING_FM_SPACE": "int:4", + "ENCODING_MANCHESTER": "int:5", + "ENCODING_NRZ": "int:1", + "ENCODING_NRZI": "int:2", + "EPOLLERR": "int:8", + "EPOLLET": "int:2147483648", + "EPOLLHUP": "int:16", + "EPOLLIN": "int:1", + "EPOLLMSG": "int:1024", + "EPOLLONESHOT": "int:1073741824", + "EPOLLOUT": "int:4", + "EPOLLPRI": "int:2", + "EPOLLRDBAND": "int:128", + "EPOLLRDHUP": "int:8192", + "EPOLLRDNORM": "int:64", + "EPOLLWAKEUP": "int:536870912", + "EPOLLWRBAND": "int:512", + "EPOLLWRNORM": "int:256", + "EPOLL_CLOEXEC": "int:524288", + "EPOLL_CTL_ADD": "int:1", + "EPOLL_CTL_DEL": "int:2", + "EPOLL_CTL_MOD": "int:3", + "ETH_P_1588": "int:35063", + "ETH_P_8021AD": "int:34984", + "ETH_P_8021AH": "int:35047", + "ETH_P_8021Q": "int:33024", + "ETH_P_802_2": "int:4", + "ETH_P_802_3": "int:1", + "ETH_P_802_3_MIN": "int:1536", + "ETH_P_802_EX1": "int:34997", + "ETH_P_AARP": "int:33011", + "ETH_P_AF_IUCV": "int:64507", + "ETH_P_ALL": "int:3", + "ETH_P_AOE": "int:34978", + "ETH_P_ARCNET": "int:26", + "ETH_P_ARP": "int:2054", + "ETH_P_ATALK": "int:32923", + "ETH_P_ATMFATE": "int:34948", + "ETH_P_ATMMPOA": "int:34892", + "ETH_P_AX25": "int:2", + "ETH_P_BATMAN": "int:17157", + "ETH_P_BPQ": "int:2303", + "ETH_P_CAIF": "int:247", + "ETH_P_CAN": "int:12", + "ETH_P_CANFD": "int:13", + "ETH_P_CONTROL": "int:22", + "ETH_P_CUST": "int:24582", + "ETH_P_DDCMP": "int:6", + "ETH_P_DEC": "int:24576", + "ETH_P_DIAG": "int:24581", + "ETH_P_DNA_DL": "int:24577", + "ETH_P_DNA_RC": "int:24578", + "ETH_P_DNA_RT": "int:24579", + "ETH_P_DSA": "int:27", + "ETH_P_ECONET": "int:24", + "ETH_P_EDSA": "int:56026", + "ETH_P_FCOE": "int:35078", + "ETH_P_FIP": "int:35092", + "ETH_P_HDLC": "int:25", + "ETH_P_IEEE802154": "int:246", + "ETH_P_IEEEPUP": "int:2560", + "ETH_P_IEEEPUPAT": "int:2561", + "ETH_P_IP": "int:2048", + "ETH_P_IPV6": "int:34525", + "ETH_P_IPX": "int:33079", + "ETH_P_IRDA": "int:23", + "ETH_P_LAT": "int:24580", + "ETH_P_LINK_CTL": "int:34924", + "ETH_P_LOCALTALK": "int:9", + "ETH_P_LOOP": "int:96", + "ETH_P_MOBITEX": "int:21", + "ETH_P_MPLS_MC": "int:34888", + "ETH_P_MPLS_UC": "int:34887", + "ETH_P_MVRP": "int:35061", + "ETH_P_PAE": "int:34958", + "ETH_P_PAUSE": "int:34824", + "ETH_P_PHONET": "int:245", + "ETH_P_PPPTALK": "int:16", + "ETH_P_PPP_DISC": "int:34915", + "ETH_P_PPP_MP": "int:8", + "ETH_P_PPP_SES": "int:34916", + "ETH_P_PRP": "int:35067", + "ETH_P_PUP": "int:512", + "ETH_P_PUPAT": "int:513", + "ETH_P_QINQ1": "int:37120", + "ETH_P_QINQ2": "int:37376", + "ETH_P_QINQ3": "int:37632", + "ETH_P_RARP": "int:32821", + "ETH_P_SCA": "int:24583", + "ETH_P_SLOW": "int:34825", + "ETH_P_SNAP": "int:5", + "ETH_P_TDLS": "int:35085", + "ETH_P_TEB": "int:25944", + "ETH_P_TIPC": "int:35018", + "ETH_P_TRAILER": "int:28", + "ETH_P_TR_802_2": "int:17", + "ETH_P_WAN_PPP": "int:7", + "ETH_P_WCCP": "int:34878", + "ETH_P_X25": "int:2053", + "EXTA": "int:14", + "EXTB": "int:15", + "EXTPROC": "int:65536", + "FD_CLOEXEC": "int:1", + "FD_SETSIZE": "int:1024", + "FLUSHO": "int:4096", + "F_DUPFD": "int:0", + "F_DUPFD_CLOEXEC": "int:1030", + "F_EXLCK": "int:4", + "F_GETFD": "int:1", + "F_GETFL": "int:3", + "F_GETLEASE": "int:1025", + "F_GETLK": "int:5", + "F_GETLK64": "int:5", + "F_GETOWN": "int:9", + "F_GETOWN_EX": "int:16", + "F_GETPIPE_SZ": "int:1032", + "F_GETSIG": "int:11", + "F_LOCK": "int:1", + "F_NOTIFY": "int:1026", + "F_OK": "int:0", + "F_RDLCK": "int:0", + "F_SETFD": "int:2", + "F_SETFL": "int:4", + "F_SETLEASE": "int:1024", + "F_SETLK": "int:6", + "F_SETLK64": "int:6", + "F_SETLKW": "int:7", + "F_SETLKW64": "int:7", + "F_SETOWN": "int:8", + "F_SETOWN_EX": "int:15", + "F_SETPIPE_SZ": "int:1031", + "F_SETSIG": "int:10", + "F_SHLCK": "int:8", + "F_TEST": "int:3", + "F_TLOCK": "int:2", + "F_ULOCK": "int:0", + "F_UNLCK": "int:2", + "F_WRLCK": "int:1", + "HUPCL": "int:1024", + "ICANON": "int:2", + "ICMPV6_FILTER": "int:1", + "ICRNL": "int:256", + "IEXTEN": "int:32768", + "IFA_ADDRESS": "int:1", + "IFA_ANYCAST": "int:5", + "IFA_BROADCAST": "int:4", + "IFA_CACHEINFO": "int:6", + "IFA_F_DADFAILED": "int:8", + "IFA_F_DEPRECATED": "int:32", + "IFA_F_HOMEADDRESS": "int:16", + "IFA_F_NODAD": "int:2", + "IFA_F_OPTIMISTIC": "int:4", + "IFA_F_PERMANENT": "int:128", + "IFA_F_SECONDARY": "int:1", + "IFA_F_TEMPORARY": "int:1", + "IFA_F_TENTATIVE": "int:64", + "IFA_LABEL": "int:3", + "IFA_LOCAL": "int:2", + "IFA_MAX": "int:7", + "IFA_MULTICAST": "int:7", + "IFA_UNSPEC": "int:0", + "IFF_802_1Q_VLAN": "int:1", + "IFF_ALLMULTI": "int:512", + "IFF_ATTACH_QUEUE": "int:512", + "IFF_AUTOMEDIA": "int:16384", + "IFF_BONDING": "int:32", + "IFF_BRIDGE_PORT": "int:16384", + "IFF_BROADCAST": "int:2", + "IFF_DEBUG": "int:4", + "IFF_DETACH_QUEUE": "int:1024", + "IFF_DISABLE_NETPOLL": "int:4096", + "IFF_DONT_BRIDGE": "int:2048", + "IFF_DORMANT": "int:131072", + "IFF_DYNAMIC": "int:32768", + "IFF_EBRIDGE": "int:2", + "IFF_ECHO": "int:262144", + "IFF_ISATAP": "int:128", + "IFF_LIVE_ADDR_CHANGE": "int:1048576", + "IFF_LOOPBACK": "int:8", + "IFF_LOWER_UP": "int:65536", + "IFF_MACVLAN": "int:2097152", + "IFF_MACVLAN_PORT": "int:8192", + "IFF_MASTER": "int:1024", + "IFF_MASTER_8023AD": "int:8", + "IFF_MASTER_ALB": "int:16", + "IFF_MASTER_ARPMON": "int:256", + "IFF_MULTICAST": "int:4096", + "IFF_MULTI_QUEUE": "int:256", + "IFF_NOARP": "int:128", + "IFF_NOFILTER": "int:4096", + "IFF_NOTRAILERS": "int:32", + "IFF_NO_PI": "int:4096", + "IFF_ONE_QUEUE": "int:8192", + "IFF_OVS_DATAPATH": "int:32768", + "IFF_PERSIST": "int:2048", + "IFF_POINTOPOINT": "int:16", + "IFF_PORTSEL": "int:8192", + "IFF_PROMISC": "int:256", + "IFF_RUNNING": "int:64", + "IFF_SLAVE": "int:2048", + "IFF_SLAVE_INACTIVE": "int:4", + "IFF_SLAVE_NEEDARP": "int:64", + "IFF_SUPP_NOFCS": "int:524288", + "IFF_TAP": "int:2", + "IFF_TEAM_PORT": "int:262144", + "IFF_TUN": "int:1", + "IFF_TUN_EXCL": "int:32768", + "IFF_TX_SKB_SHARING": "int:65536", + "IFF_UNICAST_FLT": "int:131072", + "IFF_UP": "int:1", + "IFF_VNET_HDR": "int:16384", + "IFF_VOLATILE": "int:461914", + "IFF_WAN_HDLC": "int:512", + "IFF_XMIT_DST_RELEASE": "int:1024", + "IFLA_ADDRESS": "int:1", + "IFLA_BROADCAST": "int:2", + "IFLA_COST": "int:8", + "IFLA_IFALIAS": "int:20", + "IFLA_IFNAME": "int:3", + "IFLA_LINK": "int:5", + "IFLA_LINKINFO": "int:18", + "IFLA_LINKMODE": "int:17", + "IFLA_MAP": "int:14", + "IFLA_MASTER": "int:10", + "IFLA_MAX": "int:36", + "IFLA_MTU": "int:4", + "IFLA_NET_NS_PID": "int:19", + "IFLA_OPERSTATE": "int:16", + "IFLA_PRIORITY": "int:9", + "IFLA_PROTINFO": "int:12", + "IFLA_QDISC": "int:6", + "IFLA_STATS": "int:7", + "IFLA_TXQLEN": "int:13", + "IFLA_UNSPEC": "int:0", + "IFLA_WEIGHT": "int:15", + "IFLA_WIRELESS": "int:11", + "IFNAMSIZ": "int:16", + "IGNBRK": "int:1", + "IGNCR": "int:128", + "IGNPAR": "int:4", + "IMAXBEL": "int:8192", + "INLCR": "int:64", + "INPCK": "int:16", + "IN_ACCESS": "int:1", + "IN_ALL_EVENTS": "int:4095", + "IN_ATTRIB": "int:4", + "IN_CLASSA_HOST": "int:16777215", + "IN_CLASSA_MAX": "int:128", + "IN_CLASSA_NET": "int:4278190080", + "IN_CLASSA_NSHIFT": "int:24", + "IN_CLASSB_HOST": "int:65535", + "IN_CLASSB_MAX": "int:65536", + "IN_CLASSB_NET": "int:4294901760", + "IN_CLASSB_NSHIFT": "int:16", + "IN_CLASSC_HOST": "int:255", + "IN_CLASSC_NET": "int:4294967040", + "IN_CLASSC_NSHIFT": "int:8", + "IN_CLOEXEC": "int:524288", + "IN_CLOSE": "int:24", + "IN_CLOSE_NOWRITE": "int:16", + "IN_CLOSE_WRITE": "int:8", + "IN_CREATE": "int:256", + "IN_DELETE": "int:512", + "IN_DELETE_SELF": "int:1024", + "IN_DONT_FOLLOW": "int:33554432", + "IN_EXCL_UNLINK": "int:67108864", + "IN_IGNORED": "int:32768", + "IN_ISDIR": "int:1073741824", + "IN_LOOPBACKNET": "int:127", + "IN_MASK_ADD": "int:536870912", + "IN_MODIFY": "int:2", + "IN_MOVE": "int:192", + "IN_MOVED_FROM": "int:64", + "IN_MOVED_TO": "int:128", + "IN_MOVE_SELF": "int:2048", + "IN_NONBLOCK": "int:2048", + "IN_ONESHOT": "int:2147483648", + "IN_ONLYDIR": "int:16777216", + "IN_OPEN": "int:32", + "IN_Q_OVERFLOW": "int:16384", + "IN_UNMOUNT": "int:8192", + "IPPROTO_AH": "int:51", + "IPPROTO_BEETPH": "int:94", + "IPPROTO_COMP": "int:108", + "IPPROTO_DCCP": "int:33", + "IPPROTO_DSTOPTS": "int:60", + "IPPROTO_EGP": "int:8", + "IPPROTO_ENCAP": "int:98", + "IPPROTO_ESP": "int:50", + "IPPROTO_FRAGMENT": "int:44", + "IPPROTO_GRE": "int:47", + "IPPROTO_HOPOPTS": "int:0", + "IPPROTO_ICMP": "int:1", + "IPPROTO_ICMPV6": "int:58", + "IPPROTO_IDP": "int:22", + "IPPROTO_IGMP": "int:2", + "IPPROTO_IP": "int:0", + "IPPROTO_IPIP": "int:4", + "IPPROTO_IPV6": "int:41", + "IPPROTO_MH": "int:135", + "IPPROTO_MTP": "int:92", + "IPPROTO_NONE": "int:59", + "IPPROTO_PIM": "int:103", + "IPPROTO_PUP": "int:12", + "IPPROTO_RAW": "int:255", + "IPPROTO_ROUTING": "int:43", + "IPPROTO_RSVP": "int:46", + "IPPROTO_SCTP": "int:132", + "IPPROTO_TCP": "int:6", + "IPPROTO_TP": "int:29", + "IPPROTO_UDP": "int:17", + "IPPROTO_UDPLITE": "int:136", + "IPV6_2292DSTOPTS": "int:4", + "IPV6_2292HOPLIMIT": "int:8", + "IPV6_2292HOPOPTS": "int:3", + "IPV6_2292PKTINFO": "int:2", + "IPV6_2292PKTOPTIONS": "int:6", + "IPV6_2292RTHDR": "int:5", + "IPV6_ADDRFORM": "int:1", + "IPV6_ADD_MEMBERSHIP": "int:20", + "IPV6_AUTHHDR": "int:10", + "IPV6_CHECKSUM": "int:7", + "IPV6_DROP_MEMBERSHIP": "int:21", + "IPV6_DSTOPTS": "int:59", + "IPV6_HOPLIMIT": "int:52", + "IPV6_HOPOPTS": "int:54", + "IPV6_IPSEC_POLICY": "int:34", + "IPV6_JOIN_ANYCAST": "int:27", + "IPV6_JOIN_GROUP": "int:20", + "IPV6_LEAVE_ANYCAST": "int:28", + "IPV6_LEAVE_GROUP": "int:21", + "IPV6_MTU": "int:24", + "IPV6_MTU_DISCOVER": "int:23", + "IPV6_MULTICAST_HOPS": "int:18", + "IPV6_MULTICAST_IF": "int:17", + "IPV6_MULTICAST_LOOP": "int:19", + "IPV6_NEXTHOP": "int:9", + "IPV6_PKTINFO": "int:50", + "IPV6_PMTUDISC_DO": "int:2", + "IPV6_PMTUDISC_DONT": "int:0", + "IPV6_PMTUDISC_PROBE": "int:3", + "IPV6_PMTUDISC_WANT": "int:1", + "IPV6_RECVDSTOPTS": "int:58", + "IPV6_RECVERR": "int:25", + "IPV6_RECVHOPLIMIT": "int:51", + "IPV6_RECVHOPOPTS": "int:53", + "IPV6_RECVPKTINFO": "int:49", + "IPV6_RECVRTHDR": "int:56", + "IPV6_RECVTCLASS": "int:66", + "IPV6_ROUTER_ALERT": "int:22", + "IPV6_RTHDR": "int:57", + "IPV6_RTHDRDSTOPTS": "int:55", + "IPV6_RTHDR_LOOSE": "int:0", + "IPV6_RTHDR_STRICT": "int:1", + "IPV6_RTHDR_TYPE_0": "int:0", + "IPV6_RXDSTOPTS": "int:59", + "IPV6_RXHOPOPTS": "int:54", + "IPV6_TCLASS": "int:67", + "IPV6_UNICAST_HOPS": "int:16", + "IPV6_V6ONLY": "int:26", + "IPV6_XFRM_POLICY": "int:35", + "IP_ADD_MEMBERSHIP": "int:35", + "IP_ADD_SOURCE_MEMBERSHIP": "int:39", + "IP_BLOCK_SOURCE": "int:38", + "IP_DEFAULT_MULTICAST_LOOP": "int:1", + "IP_DEFAULT_MULTICAST_TTL": "int:1", + "IP_DF": "int:16384", + "IP_DROP_MEMBERSHIP": "int:36", + "IP_DROP_SOURCE_MEMBERSHIP": "int:40", + "IP_FREEBIND": "int:15", + "IP_HDRINCL": "int:3", + "IP_IPSEC_POLICY": "int:16", + "IP_MAXPACKET": "int:65535", + "IP_MAX_MEMBERSHIPS": "int:20", + "IP_MF": "int:8192", + "IP_MINTTL": "int:21", + "IP_MSFILTER": "int:41", + "IP_MSS": "int:576", + "IP_MTU": "int:14", + "IP_MTU_DISCOVER": "int:10", + "IP_MULTICAST_ALL": "int:49", + "IP_MULTICAST_IF": "int:32", + "IP_MULTICAST_LOOP": "int:34", + "IP_MULTICAST_TTL": "int:33", + "IP_OFFMASK": "int:8191", + "IP_OPTIONS": "int:4", + "IP_ORIGDSTADDR": "int:20", + "IP_PASSSEC": "int:18", + "IP_PKTINFO": "int:8", + "IP_PKTOPTIONS": "int:9", + "IP_PMTUDISC": "int:10", + "IP_PMTUDISC_DO": "int:2", + "IP_PMTUDISC_DONT": "int:0", + "IP_PMTUDISC_PROBE": "int:3", + "IP_PMTUDISC_WANT": "int:1", + "IP_RECVERR": "int:11", + "IP_RECVOPTS": "int:6", + "IP_RECVORIGDSTADDR": "int:20", + "IP_RECVRETOPTS": "int:7", + "IP_RECVTOS": "int:13", + "IP_RECVTTL": "int:12", + "IP_RETOPTS": "int:7", + "IP_RF": "int:32768", + "IP_ROUTER_ALERT": "int:5", + "IP_TOS": "int:1", + "IP_TRANSPARENT": "int:19", + "IP_TTL": "int:2", + "IP_UNBLOCK_SOURCE": "int:37", + "IP_UNICAST_IF": "int:50", + "IP_XFRM_POLICY": "int:17", + "ISIG": "int:1", + "ISTRIP": "int:32", + "IUCLC": "int:512", + "IUTF8": "int:16384", + "IXANY": "int:2048", + "IXOFF": "int:4096", + "IXON": "int:1024", + "ImplementsGetwd": "bool:true", + "LINUX_REBOOT_CMD_CAD_OFF": "int:0", + "LINUX_REBOOT_CMD_CAD_ON": "int:2309737967", + "LINUX_REBOOT_CMD_HALT": "int:3454992675", + "LINUX_REBOOT_CMD_KEXEC": "int:1163412803", + "LINUX_REBOOT_CMD_POWER_OFF": "int:1126301404", + "LINUX_REBOOT_CMD_RESTART": "int:19088743", + "LINUX_REBOOT_CMD_RESTART2": "int:2712847316", + "LINUX_REBOOT_CMD_SW_SUSPEND": "int:3489725666", + "LINUX_REBOOT_MAGIC1": "int:4276215469", + "LINUX_REBOOT_MAGIC2": "int:672274793", + "LOCK_EX": "int:2", + "LOCK_NB": "int:4", + "LOCK_SH": "int:1", + "LOCK_UN": "int:8", + "MADV_DODUMP": "int:17", + "MADV_DOFORK": "int:11", + "MADV_DONTDUMP": "int:16", + "MADV_DONTFORK": "int:10", + "MADV_DONTNEED": "int:4", + "MADV_HUGEPAGE": "int:14", + "MADV_HWPOISON": "int:100", + "MADV_MERGEABLE": "int:12", + "MADV_NOHUGEPAGE": "int:15", + "MADV_NORMAL": "int:0", + "MADV_RANDOM": "int:1", + "MADV_REMOVE": "int:9", + "MADV_SEQUENTIAL": "int:2", + "MADV_UNMERGEABLE": "int:13", + "MADV_WILLNEED": "int:3", + "MAP_ANON": "int:32", + "MAP_ANONYMOUS": "int:32", + "MAP_DENYWRITE": "int:2048", + "MAP_EXECUTABLE": "int:4096", + "MAP_FILE": "int:0", + "MAP_FIXED": "int:16", + "MAP_GROWSDOWN": "int:256", + "MAP_HUGETLB": "int:262144", + "MAP_HUGE_MASK": "int:63", + "MAP_HUGE_SHIFT": "int:26", + "MAP_LOCKED": "int:8192", + "MAP_NONBLOCK": "int:65536", + "MAP_NORESERVE": "int:16384", + "MAP_POPULATE": "int:32768", + "MAP_PRIVATE": "int:2", + "MAP_SHARED": "int:1", + "MAP_STACK": "int:131072", + "MAP_TYPE": "int:15", + "MCL_CURRENT": "int:1", + "MCL_FUTURE": "int:2", + "MNT_DETACH": "int:2", + "MNT_EXPIRE": "int:4", + "MNT_FORCE": "int:1", + "MSG_CMSG_CLOEXEC": "int:1073741824", + "MSG_CONFIRM": "int:2048", + "MSG_CTRUNC": "int:8", + "MSG_DONTROUTE": "int:4", + "MSG_DONTWAIT": "int:64", + "MSG_EOR": "int:128", + "MSG_ERRQUEUE": "int:8192", + "MSG_FASTOPEN": "int:536870912", + "MSG_FIN": "int:512", + "MSG_MORE": "int:32768", + "MSG_NOSIGNAL": "int:16384", + "MSG_OOB": "int:1", + "MSG_PEEK": "int:2", + "MSG_PROXY": "int:16", + "MSG_RST": "int:4096", + "MSG_SYN": "int:1024", + "MSG_TRUNC": "int:32", + "MSG_TRYHARD": "int:4", + "MSG_WAITALL": "int:256", + "MSG_WAITFORONE": "int:65536", + "MS_ACTIVE": "int:1073741824", + "MS_ASYNC": "int:1", + "MS_BIND": "int:4096", + "MS_DIRSYNC": "int:128", + "MS_INVALIDATE": "int:2", + "MS_I_VERSION": "int:8388608", + "MS_KERNMOUNT": "int:4194304", + "MS_MANDLOCK": "int:64", + "MS_MGC_MSK": "int:4294901760", + "MS_MGC_VAL": "int:3236757504", + "MS_MOVE": "int:8192", + "MS_NOATIME": "int:1024", + "MS_NODEV": "int:4", + "MS_NODIRATIME": "int:2048", + "MS_NOEXEC": "int:8", + "MS_NOSUID": "int:2", + "MS_NOUSER": "int:-2147483648", + "MS_POSIXACL": "int:65536", + "MS_PRIVATE": "int:262144", + "MS_RDONLY": "int:1", + "MS_REC": "int:16384", + "MS_RELATIME": "int:2097152", + "MS_REMOUNT": "int:32", + "MS_RMT_MASK": "int:8388689", + "MS_SHARED": "int:1048576", + "MS_SILENT": "int:32768", + "MS_SLAVE": "int:524288", + "MS_STRICTATIME": "int:16777216", + "MS_SYNC": "int:4", + "MS_SYNCHRONOUS": "int:16", + "MS_UNBINDABLE": "int:131072", + "NAME_MAX": "int:255", + "NETLINK_ADD_MEMBERSHIP": "int:1", + "NETLINK_AUDIT": "int:9", + "NETLINK_BROADCAST_ERROR": "int:4", + "NETLINK_CONNECTOR": "int:11", + "NETLINK_CRYPTO": "int:21", + "NETLINK_DNRTMSG": "int:14", + "NETLINK_DROP_MEMBERSHIP": "int:2", + "NETLINK_ECRYPTFS": "int:19", + "NETLINK_FIB_LOOKUP": "int:10", + "NETLINK_FIREWALL": "int:3", + "NETLINK_GENERIC": "int:16", + "NETLINK_INET_DIAG": "int:4", + "NETLINK_IP6_FW": "int:13", + "NETLINK_ISCSI": "int:8", + "NETLINK_KOBJECT_UEVENT": "int:15", + "NETLINK_NETFILTER": "int:12", + "NETLINK_NFLOG": "int:5", + "NETLINK_NO_ENOBUFS": "int:5", + "NETLINK_PKTINFO": "int:3", + "NETLINK_RDMA": "int:20", + "NETLINK_ROUTE": "int:0", + "NETLINK_RX_RING": "int:6", + "NETLINK_SCSITRANSPORT": "int:18", + "NETLINK_SELINUX": "int:7", + "NETLINK_SOCK_DIAG": "int:4", + "NETLINK_TX_RING": "int:7", + "NETLINK_UNUSED": "int:1", + "NETLINK_USERSOCK": "int:2", + "NETLINK_XFRM": "int:6", + "NLA_ALIGNTO": "int:4", + "NLA_F_NESTED": "int:32768", + "NLA_F_NET_BYTEORDER": "int:16384", + "NLA_HDRLEN": "int:4", + "NLMSG_ALIGNTO": "int:4", + "NLMSG_DONE": "int:3", + "NLMSG_ERROR": "int:2", + "NLMSG_HDRLEN": "int:16", + "NLMSG_MIN_TYPE": "int:16", + "NLMSG_NOOP": "int:1", + "NLMSG_OVERRUN": "int:4", + "NLM_F_ACK": "int:4", + "NLM_F_APPEND": "int:2048", + "NLM_F_ATOMIC": "int:1024", + "NLM_F_CREATE": "int:1024", + "NLM_F_DUMP": "int:768", + "NLM_F_DUMP_INTR": "int:16", + "NLM_F_ECHO": "int:8", + "NLM_F_EXCL": "int:512", + "NLM_F_MATCH": "int:512", + "NLM_F_MULTI": "int:2", + "NLM_F_REPLACE": "int:256", + "NLM_F_REQUEST": "int:1", + "NLM_F_ROOT": "int:256", + "NOFLSH": "int:128", + "OCRNL": "int:8", + "OFDEL": "int:128", + "OFILL": "int:64", + "OLCUC": "int:2", + "ONLCR": "int:4", + "ONLRET": "int:32", + "ONOCR": "int:16", + "OPOST": "int:1", + "O_ACCMODE": "int:3", + "O_APPEND": "int:1024", + "O_ASYNC": "int:8192", + "O_CLOEXEC": "int:524288", + "O_CREAT": "int:64", + "O_DIRECT": "int:65536", + "O_DIRECTORY": "int:16384", + "O_DSYNC": "int:4096", + "O_EXCL": "int:128", + "O_FSYNC": "int:1052672", + "O_LARGEFILE": "int:0", + "O_NDELAY": "int:2048", + "O_NOATIME": "int:262144", + "O_NOCTTY": "int:256", + "O_NOFOLLOW": "int:32768", + "O_NONBLOCK": "int:2048", + "O_PATH": "int:2097152", + "O_RDONLY": "int:0", + "O_RDWR": "int:2", + "O_RSYNC": "int:1052672", + "O_SYNC": "int:1052672", + "O_TMPFILE": "int:4259840", + "O_TRUNC": "int:512", + "O_WRONLY": "int:1", + "PACKET_ADD_MEMBERSHIP": "int:1", + "PACKET_AUXDATA": "int:8", + "PACKET_BROADCAST": "int:1", + "PACKET_COPY_THRESH": "int:7", + "PACKET_DROP_MEMBERSHIP": "int:2", + "PACKET_FANOUT": "int:18", + "PACKET_FANOUT_CPU": "int:2", + "PACKET_FANOUT_FLAG_DEFRAG": "int:32768", + "PACKET_FANOUT_FLAG_ROLLOVER": "int:4096", + "PACKET_FANOUT_HASH": "int:0", + "PACKET_FANOUT_LB": "int:1", + "PACKET_FANOUT_RND": "int:4", + "PACKET_FANOUT_ROLLOVER": "int:3", + "PACKET_FASTROUTE": "int:6", + "PACKET_HDRLEN": "int:11", + "PACKET_HOST": "int:0", + "PACKET_LOOPBACK": "int:5", + "PACKET_LOSS": "int:14", + "PACKET_MR_ALLMULTI": "int:2", + "PACKET_MR_MULTICAST": "int:0", + "PACKET_MR_PROMISC": "int:1", + "PACKET_MR_UNICAST": "int:3", + "PACKET_MULTICAST": "int:2", + "PACKET_ORIGDEV": "int:9", + "PACKET_OTHERHOST": "int:3", + "PACKET_OUTGOING": "int:4", + "PACKET_RECV_OUTPUT": "int:3", + "PACKET_RESERVE": "int:12", + "PACKET_RX_RING": "int:5", + "PACKET_STATISTICS": "int:6", + "PACKET_TIMESTAMP": "int:17", + "PACKET_TX_HAS_OFF": "int:19", + "PACKET_TX_RING": "int:13", + "PACKET_TX_TIMESTAMP": "int:16", + "PACKET_VERSION": "int:10", + "PACKET_VNET_HDR": "int:15", + "PARENB": "int:256", + "PARITY_CRC16_PR0": "int:2", + "PARITY_CRC16_PR0_CCITT": "int:4", + "PARITY_CRC16_PR1": "int:3", + "PARITY_CRC16_PR1_CCITT": "int:5", + "PARITY_CRC32_PR0_CCITT": "int:6", + "PARITY_CRC32_PR1_CCITT": "int:7", + "PARITY_DEFAULT": "int:0", + "PARITY_NONE": "int:1", + "PARMRK": "int:8", + "PARODD": "int:512", + "PENDIN": "int:16384", + "PRIO_PGRP": "int:1", + "PRIO_PROCESS": "int:0", + "PRIO_USER": "int:2", + "PROT_EXEC": "int:4", + "PROT_GROWSDOWN": "int:16777216", + "PROT_GROWSUP": "int:33554432", + "PROT_NONE": "int:0", + "PROT_READ": "int:1", + "PROT_WRITE": "int:2", + "PR_CAPBSET_DROP": "int:24", + "PR_CAPBSET_READ": "int:23", + "PR_ENDIAN_BIG": "int:0", + "PR_ENDIAN_LITTLE": "int:1", + "PR_ENDIAN_PPC_LITTLE": "int:2", + "PR_FPEMU_NOPRINT": "int:1", + "PR_FPEMU_SIGFPE": "int:2", + "PR_FP_EXC_ASYNC": "int:2", + "PR_FP_EXC_DISABLED": "int:0", + "PR_FP_EXC_DIV": "int:65536", + "PR_FP_EXC_INV": "int:1048576", + "PR_FP_EXC_NONRECOV": "int:1", + "PR_FP_EXC_OVF": "int:131072", + "PR_FP_EXC_PRECISE": "int:3", + "PR_FP_EXC_RES": "int:524288", + "PR_FP_EXC_SW_ENABLE": "int:128", + "PR_FP_EXC_UND": "int:262144", + "PR_GET_CHILD_SUBREAPER": "int:37", + "PR_GET_DUMPABLE": "int:3", + "PR_GET_ENDIAN": "int:19", + "PR_GET_FPEMU": "int:9", + "PR_GET_FPEXC": "int:11", + "PR_GET_KEEPCAPS": "int:7", + "PR_GET_NAME": "int:16", + "PR_GET_NO_NEW_PRIVS": "int:39", + "PR_GET_PDEATHSIG": "int:2", + "PR_GET_SECCOMP": "int:21", + "PR_GET_SECUREBITS": "int:27", + "PR_GET_TID_ADDRESS": "int:40", + "PR_GET_TIMERSLACK": "int:30", + "PR_GET_TIMING": "int:13", + "PR_GET_TSC": "int:25", + "PR_GET_UNALIGN": "int:5", + "PR_MCE_KILL": "int:33", + "PR_MCE_KILL_CLEAR": "int:0", + "PR_MCE_KILL_DEFAULT": "int:2", + "PR_MCE_KILL_EARLY": "int:1", + "PR_MCE_KILL_GET": "int:34", + "PR_MCE_KILL_LATE": "int:0", + "PR_MCE_KILL_SET": "int:1", + "PR_SET_CHILD_SUBREAPER": "int:36", + "PR_SET_DUMPABLE": "int:4", + "PR_SET_ENDIAN": "int:20", + "PR_SET_FPEMU": "int:10", + "PR_SET_FPEXC": "int:12", + "PR_SET_KEEPCAPS": "int:8", + "PR_SET_MM": "int:35", + "PR_SET_MM_ARG_END": "int:9", + "PR_SET_MM_ARG_START": "int:8", + "PR_SET_MM_AUXV": "int:12", + "PR_SET_MM_BRK": "int:7", + "PR_SET_MM_END_CODE": "int:2", + "PR_SET_MM_END_DATA": "int:4", + "PR_SET_MM_ENV_END": "int:11", + "PR_SET_MM_ENV_START": "int:10", + "PR_SET_MM_EXE_FILE": "int:13", + "PR_SET_MM_START_BRK": "int:6", + "PR_SET_MM_START_CODE": "int:1", + "PR_SET_MM_START_DATA": "int:3", + "PR_SET_MM_START_STACK": "int:5", + "PR_SET_NAME": "int:15", + "PR_SET_NO_NEW_PRIVS": "int:38", + "PR_SET_PDEATHSIG": "int:1", + "PR_SET_PTRACER": "int:1499557217", + "PR_SET_PTRACER_ANY": "int:-1", + "PR_SET_SECCOMP": "int:22", + "PR_SET_SECUREBITS": "int:28", + "PR_SET_TIMERSLACK": "int:29", + "PR_SET_TIMING": "int:14", + "PR_SET_TSC": "int:26", + "PR_SET_UNALIGN": "int:6", + "PR_TASK_PERF_EVENTS_DISABLE": "int:31", + "PR_TASK_PERF_EVENTS_ENABLE": "int:32", + "PR_TIMING_STATISTICAL": "int:0", + "PR_TIMING_TIMESTAMP": "int:1", + "PR_TSC_ENABLE": "int:1", + "PR_TSC_SIGSEGV": "int:2", + "PR_UNALIGN_NOPRINT": "int:1", + "PR_UNALIGN_SIGBUS": "int:2", + "PTRACE_ATTACH": "int:16", + "PTRACE_CONT": "int:7", + "PTRACE_DETACH": "int:17", + "PTRACE_EVENT_CLONE": "int:3", + "PTRACE_EVENT_EXEC": "int:4", + "PTRACE_EVENT_EXIT": "int:6", + "PTRACE_EVENT_FORK": "int:1", + "PTRACE_EVENT_SECCOMP": "int:7", + "PTRACE_EVENT_STOP": "int:128", + "PTRACE_EVENT_VFORK": "int:2", + "PTRACE_EVENT_VFORK_DONE": "int:5", + "PTRACE_GETEVENTMSG": "int:16897", + "PTRACE_GETREGS": "int:12", + "PTRACE_GETREGSET": "int:16900", + "PTRACE_GETSIGINFO": "int:16898", + "PTRACE_GETSIGMASK": "int:16906", + "PTRACE_INTERRUPT": "int:16903", + "PTRACE_KILL": "int:8", + "PTRACE_LISTEN": "int:16904", + "PTRACE_O_EXITKILL": "int:1048576", + "PTRACE_O_MASK": "int:1048831", + "PTRACE_O_TRACECLONE": "int:8", + "PTRACE_O_TRACEEXEC": "int:16", + "PTRACE_O_TRACEEXIT": "int:64", + "PTRACE_O_TRACEFORK": "int:2", + "PTRACE_O_TRACESECCOMP": "int:128", + "PTRACE_O_TRACESYSGOOD": "int:1", + "PTRACE_O_TRACEVFORK": "int:4", + "PTRACE_O_TRACEVFORKDONE": "int:32", + "PTRACE_PEEKDATA": "int:2", + "PTRACE_PEEKSIGINFO": "int:16905", + "PTRACE_PEEKSIGINFO_SHARED": "int:1", + "PTRACE_PEEKTEXT": "int:1", + "PTRACE_PEEKUSR": "int:3", + "PTRACE_POKEDATA": "int:5", + "PTRACE_POKETEXT": "int:4", + "PTRACE_POKEUSR": "int:6", + "PTRACE_SEIZE": "int:16902", + "PTRACE_SETOPTIONS": "int:16896", + "PTRACE_SETREGS": "int:13", + "PTRACE_SETREGSET": "int:16901", + "PTRACE_SETSIGINFO": "int:16899", + "PTRACE_SETSIGMASK": "int:16907", + "PTRACE_SINGLESTEP": "int:9", + "PTRACE_SYSCALL": "int:24", + "PTRACE_TRACEME": "int:0", + "PathMax": "int:4096", + "RLIMIT_AS": "int:9", + "RLIMIT_CORE": "int:4", + "RLIMIT_CPU": "int:0", + "RLIMIT_DATA": "int:2", + "RLIMIT_FSIZE": "int:1", + "RLIMIT_NOFILE": "int:7", + "RLIMIT_STACK": "int:3", + "RLIM_INFINITY": "int:-1", + "RTAX_ADVMSS": "int:8", + "RTAX_CWND": "int:7", + "RTAX_FEATURES": "int:12", + "RTAX_FEATURE_ALLFRAG": "int:8", + "RTAX_FEATURE_ECN": "int:1", + "RTAX_FEATURE_SACK": "int:2", + "RTAX_FEATURE_TIMESTAMP": "int:4", + "RTAX_HOPLIMIT": "int:10", + "RTAX_INITCWND": "int:11", + "RTAX_INITRWND": "int:14", + "RTAX_LOCK": "int:1", + "RTAX_MAX": "int:15", + "RTAX_MTU": "int:2", + "RTAX_QUICKACK": "int:15", + "RTAX_REORDERING": "int:9", + "RTAX_RTO_MIN": "int:13", + "RTAX_RTT": "int:4", + "RTAX_RTTVAR": "int:5", + "RTAX_SSTHRESH": "int:6", + "RTAX_UNSPEC": "int:0", + "RTAX_WINDOW": "int:3", + "RTA_ALIGNTO": "int:4", + "RTA_CACHEINFO": "int:12", + "RTA_DST": "int:1", + "RTA_FLOW": "int:11", + "RTA_GATEWAY": "int:5", + "RTA_IIF": "int:3", + "RTA_MAX": "int:17", + "RTA_METRICS": "int:8", + "RTA_MULTIPATH": "int:9", + "RTA_OIF": "int:4", + "RTA_PREFSRC": "int:7", + "RTA_PRIORITY": "int:6", + "RTA_SRC": "int:2", + "RTA_TABLE": "int:15", + "RTA_UNSPEC": "int:0", + "RTCF_DIRECTSRC": "int:67108864", + "RTCF_DOREDIRECT": "int:16777216", + "RTCF_LOG": "int:33554432", + "RTCF_MASQ": "int:4194304", + "RTCF_NAT": "int:8388608", + "RTCF_VALVE": "int:2097152", + "RTF_ADDRCLASSMASK": "int:4160749568", + "RTF_ADDRCONF": "int:262144", + "RTF_ALLONLINK": "int:131072", + "RTF_BROADCAST": "int:268435456", + "RTF_CACHE": "int:16777216", + "RTF_DEFAULT": "int:65536", + "RTF_DYNAMIC": "int:16", + "RTF_FLOW": "int:33554432", + "RTF_GATEWAY": "int:2", + "RTF_HOST": "int:4", + "RTF_INTERFACE": "int:1073741824", + "RTF_IRTT": "int:256", + "RTF_LINKRT": "int:1048576", + "RTF_LOCAL": "int:2147483648", + "RTF_MODIFIED": "int:32", + "RTF_MSS": "int:64", + "RTF_MTU": "int:64", + "RTF_MULTICAST": "int:536870912", + "RTF_NAT": "int:134217728", + "RTF_NOFORWARD": "int:4096", + "RTF_NONEXTHOP": "int:2097152", + "RTF_NOPMTUDISC": "int:16384", + "RTF_POLICY": "int:67108864", + "RTF_REINSTATE": "int:8", + "RTF_REJECT": "int:512", + "RTF_STATIC": "int:1024", + "RTF_THROW": "int:8192", + "RTF_UP": "int:1", + "RTF_WINDOW": "int:128", + "RTF_XRESOLVE": "int:2048", + "RTM_BASE": "int:16", + "RTM_DELACTION": "int:49", + "RTM_DELADDR": "int:21", + "RTM_DELADDRLABEL": "int:73", + "RTM_DELLINK": "int:17", + "RTM_DELMDB": "int:85", + "RTM_DELNEIGH": "int:29", + "RTM_DELQDISC": "int:37", + "RTM_DELROUTE": "int:25", + "RTM_DELRULE": "int:33", + "RTM_DELTCLASS": "int:41", + "RTM_DELTFILTER": "int:45", + "RTM_F_CLONED": "int:512", + "RTM_F_EQUALIZE": "int:1024", + "RTM_F_NOTIFY": "int:256", + "RTM_F_PREFIX": "int:2048", + "RTM_GETACTION": "int:50", + "RTM_GETADDR": "int:22", + "RTM_GETADDRLABEL": "int:74", + "RTM_GETANYCAST": "int:62", + "RTM_GETDCB": "int:78", + "RTM_GETLINK": "int:18", + "RTM_GETMDB": "int:86", + "RTM_GETMULTICAST": "int:58", + "RTM_GETNEIGH": "int:30", + "RTM_GETNEIGHTBL": "int:66", + "RTM_GETNETCONF": "int:82", + "RTM_GETQDISC": "int:38", + "RTM_GETROUTE": "int:26", + "RTM_GETRULE": "int:34", + "RTM_GETTCLASS": "int:42", + "RTM_GETTFILTER": "int:46", + "RTM_MAX": "int:87", + "RTM_NEWACTION": "int:48", + "RTM_NEWADDR": "int:20", + "RTM_NEWADDRLABEL": "int:72", + "RTM_NEWLINK": "int:16", + "RTM_NEWMDB": "int:84", + "RTM_NEWNDUSEROPT": "int:68", + "RTM_NEWNEIGH": "int:28", + "RTM_NEWNEIGHTBL": "int:64", + "RTM_NEWNETCONF": "int:80", + "RTM_NEWPREFIX": "int:52", + "RTM_NEWQDISC": "int:36", + "RTM_NEWROUTE": "int:24", + "RTM_NEWRULE": "int:32", + "RTM_NEWTCLASS": "int:40", + "RTM_NEWTFILTER": "int:44", + "RTM_NR_FAMILIES": "int:18", + "RTM_NR_MSGTYPES": "int:72", + "RTM_SETDCB": "int:79", + "RTM_SETLINK": "int:19", + "RTM_SETNEIGHTBL": "int:67", + "RTNH_ALIGNTO": "int:4", + "RTNH_F_DEAD": "int:1", + "RTNH_F_ONLINK": "int:4", + "RTNH_F_PERVASIVE": "int:2", + "RTNLGRP_IPV4_IFADDR": "int:5", + "RTNLGRP_IPV4_MROUTE": "int:6", + "RTNLGRP_IPV4_ROUTE": "int:7", + "RTNLGRP_IPV4_RULE": "int:8", + "RTNLGRP_IPV6_IFADDR": "int:9", + "RTNLGRP_IPV6_IFINFO": "int:12", + "RTNLGRP_IPV6_MROUTE": "int:10", + "RTNLGRP_IPV6_PREFIX": "int:18", + "RTNLGRP_IPV6_ROUTE": "int:11", + "RTNLGRP_IPV6_RULE": "int:19", + "RTNLGRP_LINK": "int:1", + "RTNLGRP_ND_USEROPT": "int:20", + "RTNLGRP_NEIGH": "int:3", + "RTNLGRP_NONE": "int:0", + "RTNLGRP_NOTIFY": "int:2", + "RTNLGRP_TC": "int:4", + "RTN_ANYCAST": "int:4", + "RTN_BLACKHOLE": "int:6", + "RTN_BROADCAST": "int:3", + "RTN_LOCAL": "int:2", + "RTN_MAX": "int:11", + "RTN_MULTICAST": "int:5", + "RTN_NAT": "int:10", + "RTN_PROHIBIT": "int:8", + "RTN_THROW": "int:9", + "RTN_UNICAST": "int:1", + "RTN_UNREACHABLE": "int:7", + "RTN_UNSPEC": "int:0", + "RTN_XRESOLVE": "int:11", + "RTPROT_BIRD": "int:12", + "RTPROT_BOOT": "int:3", + "RTPROT_DHCP": "int:16", + "RTPROT_DNROUTED": "int:13", + "RTPROT_GATED": "int:8", + "RTPROT_KERNEL": "int:2", + "RTPROT_MROUTED": "int:17", + "RTPROT_MRT": "int:10", + "RTPROT_NTK": "int:15", + "RTPROT_RA": "int:9", + "RTPROT_REDIRECT": "int:1", + "RTPROT_STATIC": "int:4", + "RTPROT_UNSPEC": "int:0", + "RTPROT_XORP": "int:14", + "RTPROT_ZEBRA": "int:11", + "RT_CLASS_DEFAULT": "int:253", + "RT_CLASS_LOCAL": "int:255", + "RT_CLASS_MAIN": "int:254", + "RT_CLASS_MAX": "int:255", + "RT_CLASS_UNSPEC": "int:0", + "RT_SCOPE_HOST": "int:254", + "RT_SCOPE_LINK": "int:253", + "RT_SCOPE_NOWHERE": "int:255", + "RT_SCOPE_SITE": "int:200", + "RT_SCOPE_UNIVERSE": "int:0", + "RT_TABLE_COMPAT": "int:252", + "RT_TABLE_DEFAULT": "int:253", + "RT_TABLE_LOCAL": "int:255", + "RT_TABLE_MAIN": "int:254", + "RT_TABLE_MAX": "int:4294967295", + "RT_TABLE_UNSPEC": "int:0", + "RUSAGE_CHILDREN": "int:-1", + "RUSAGE_SELF": "int:0", + "RUSAGE_THREAD": "int:1", + "SCM_CREDENTIALS": "int:2", + "SCM_RIGHTS": "int:1", + "SCM_TIMESTAMP": "int:29", + "SCM_TIMESTAMPING": "int:37", + "SCM_TIMESTAMPNS": "int:35", + "SCM_WIFI_STATUS": "int:41", + "SHUT_RD": "int:0", + "SHUT_RDWR": "int:2", + "SHUT_WR": "int:1", + "SIOCADDDLCI": "int:35200", + "SIOCADDMULTI": "int:35121", + "SIOCADDRT": "int:35083", + "SIOCATMARK": "int:35077", + "SIOCDARP": "int:35155", + "SIOCDELDLCI": "int:35201", + "SIOCDELMULTI": "int:35122", + "SIOCDELRT": "int:35084", + "SIOCDEVPRIVATE": "int:35312", + "SIOCDIFADDR": "int:35126", + "SIOCDRARP": "int:35168", + "SIOCGARP": "int:35156", + "SIOCGIFADDR": "int:35093", + "SIOCGIFBR": "int:35136", + "SIOCGIFBRDADDR": "int:35097", + "SIOCGIFCONF": "int:35090", + "SIOCGIFCOUNT": "int:35128", + "SIOCGIFDSTADDR": "int:35095", + "SIOCGIFENCAP": "int:35109", + "SIOCGIFFLAGS": "int:35091", + "SIOCGIFHWADDR": "int:35111", + "SIOCGIFINDEX": "int:35123", + "SIOCGIFMAP": "int:35184", + "SIOCGIFMEM": "int:35103", + "SIOCGIFMETRIC": "int:35101", + "SIOCGIFMTU": "int:35105", + "SIOCGIFNAME": "int:35088", + "SIOCGIFNETMASK": "int:35099", + "SIOCGIFPFLAGS": "int:35125", + "SIOCGIFSLAVE": "int:35113", + "SIOCGIFTXQLEN": "int:35138", + "SIOCGPGRP": "int:35076", + "SIOCGRARP": "int:35169", + "SIOCGSTAMP": "int:35078", + "SIOCGSTAMPNS": "int:35079", + "SIOCPROTOPRIVATE": "int:35296", + "SIOCRTMSG": "int:35085", + "SIOCSARP": "int:35157", + "SIOCSIFADDR": "int:35094", + "SIOCSIFBR": "int:35137", + "SIOCSIFBRDADDR": "int:35098", + "SIOCSIFDSTADDR": "int:35096", + "SIOCSIFENCAP": "int:35110", + "SIOCSIFFLAGS": "int:35092", + "SIOCSIFHWADDR": "int:35108", + "SIOCSIFHWBROADCAST": "int:35127", + "SIOCSIFLINK": "int:35089", + "SIOCSIFMAP": "int:35185", + "SIOCSIFMEM": "int:35104", + "SIOCSIFMETRIC": "int:35102", + "SIOCSIFMTU": "int:35106", + "SIOCSIFNAME": "int:35107", + "SIOCSIFNETMASK": "int:35100", + "SIOCSIFPFLAGS": "int:35124", + "SIOCSIFSLAVE": "int:35120", + "SIOCSIFTXQLEN": "int:35139", + "SIOCSPGRP": "int:35074", + "SIOCSRARP": "int:35170", + "SOCK_CLOEXEC": "int:524288", + "SOCK_DCCP": "int:6", + "SOCK_DGRAM": "int:2", + "SOCK_NONBLOCK": "int:2048", + "SOCK_PACKET": "int:10", + "SOCK_RAW": "int:3", + "SOCK_RDM": "int:4", + "SOCK_SEQPACKET": "int:5", + "SOCK_STREAM": "int:1", + "SOL_AAL": "int:265", + "SOL_ATM": "int:264", + "SOL_DECNET": "int:261", + "SOL_ICMPV6": "int:58", + "SOL_IP": "int:0", + "SOL_IPV6": "int:41", + "SOL_IRDA": "int:266", + "SOL_PACKET": "int:263", + "SOL_RAW": "int:255", + "SOL_SOCKET": "int:1", + "SOL_TCP": "int:6", + "SOL_X25": "int:262", + "SOMAXCONN": "int:128", + "SO_ACCEPTCONN": "int:30", + "SO_ATTACH_FILTER": "int:26", + "SO_BINDTODEVICE": "int:25", + "SO_BROADCAST": "int:6", + "SO_BSDCOMPAT": "int:14", + "SO_BUSY_POLL": "int:46", + "SO_DEBUG": "int:1", + "SO_DETACH_FILTER": "int:27", + "SO_DOMAIN": "int:39", + "SO_DONTROUTE": "int:5", + "SO_ERROR": "int:4", + "SO_GET_FILTER": "int:26", + "SO_KEEPALIVE": "int:9", + "SO_LINGER": "int:13", + "SO_LOCK_FILTER": "int:44", + "SO_MARK": "int:36", + "SO_MAX_PACING_RATE": "int:47", + "SO_NOFCS": "int:43", + "SO_NO_CHECK": "int:11", + "SO_OOBINLINE": "int:10", + "SO_PASSCRED": "int:16", + "SO_PASSSEC": "int:34", + "SO_PEEK_OFF": "int:42", + "SO_PEERCRED": "int:17", + "SO_PEERNAME": "int:28", + "SO_PEERSEC": "int:31", + "SO_PRIORITY": "int:12", + "SO_PROTOCOL": "int:38", + "SO_RCVBUF": "int:8", + "SO_RCVBUFFORCE": "int:33", + "SO_RCVLOWAT": "int:18", + "SO_RCVTIMEO": "int:20", + "SO_REUSEADDR": "int:2", + "SO_REUSEPORT": "int:15", + "SO_RXQ_OVFL": "int:40", + "SO_SECURITY_AUTHENTICATION": "int:22", + "SO_SECURITY_ENCRYPTION_NETWORK": "int:24", + "SO_SECURITY_ENCRYPTION_TRANSPORT": "int:23", + "SO_SELECT_ERR_QUEUE": "int:45", + "SO_SNDBUF": "int:7", + "SO_SNDBUFFORCE": "int:32", + "SO_SNDLOWAT": "int:19", + "SO_SNDTIMEO": "int:21", + "SO_TIMESTAMP": "int:29", + "SO_TIMESTAMPING": "int:37", + "SO_TIMESTAMPNS": "int:35", + "SO_TYPE": "int:3", + "SO_WIFI_STATUS": "int:41", + "SYS_ACCEPT": "int:202", + "SYS_ACCEPT4": "int:242", + "SYS_ACCT": "int:89", + "SYS_ADD_KEY": "int:217", + "SYS_ADJTIMEX": "int:171", + "SYS_ARCH_SPECIFIC_SYSCALL": "int:244", + "SYS_BIND": "int:200", + "SYS_BPF": "int:280", + "SYS_BRK": "int:214", + "SYS_CAPGET": "int:90", + "SYS_CAPSET": "int:91", + "SYS_CHDIR": "int:49", + "SYS_CHROOT": "int:51", + "SYS_CLOCK_ADJTIME": "int:266", + "SYS_CLOCK_GETRES": "int:114", + "SYS_CLOCK_GETTIME": "int:113", + "SYS_CLOCK_NANOSLEEP": "int:115", + "SYS_CLOCK_SETTIME": "int:112", + "SYS_CLONE": "int:220", + "SYS_CLOSE": "int:57", + "SYS_CONNECT": "int:203", + "SYS_DELETE_MODULE": "int:106", + "SYS_DUP": "int:23", + "SYS_DUP3": "int:24", + "SYS_EPOLL_CREATE": "int:1042", + "SYS_EPOLL_CREATE1": "int:20", + "SYS_EPOLL_CTL": "int:21", + "SYS_EPOLL_PWAIT": "int:22", + "SYS_EPOLL_WAIT": "int:1069", + "SYS_EVENTFD2": "int:19", + "SYS_EXECVE": "int:221", + "SYS_EXECVEAT": "int:281", + "SYS_EXIT": "int:93", + "SYS_EXIT_GROUP": "int:94", + "SYS_FACCESSAT": "int:48", + "SYS_FADVISE64": "int:223", + "SYS_FALLOCATE": "int:47", + "SYS_FANOTIFY_INIT": "int:262", + "SYS_FANOTIFY_MARK": "int:263", + "SYS_FCHDIR": "int:50", + "SYS_FCHMOD": "int:52", + "SYS_FCHMODAT": "int:53", + "SYS_FCHOWN": "int:55", + "SYS_FCHOWNAT": "int:54", + "SYS_FCNTL": "int:25", + "SYS_FDATASYNC": "int:83", + "SYS_FGETXATTR": "int:10", + "SYS_FINIT_MODULE": "int:273", + "SYS_FLISTXATTR": "int:13", + "SYS_FLOCK": "int:32", + "SYS_FREMOVEXATTR": "int:16", + "SYS_FSETXATTR": "int:7", + "SYS_FSTAT": "int:80", + "SYS_FSTATAT": "int:79", + "SYS_FSTATFS": "int:44", + "SYS_FSYNC": "int:82", + "SYS_FTRUNCATE": "int:46", + "SYS_FUTEX": "int:98", + "SYS_FUTIMESAT": "int:1066", + "SYS_GETCPU": "int:168", + "SYS_GETCWD": "int:17", + "SYS_GETDENTS64": "int:61", + "SYS_GETEGID": "int:177", + "SYS_GETEUID": "int:175", + "SYS_GETGID": "int:176", + "SYS_GETGROUPS": "int:158", + "SYS_GETITIMER": "int:102", + "SYS_GETPEERNAME": "int:205", + "SYS_GETPGID": "int:155", + "SYS_GETPGRP": "int:1060", + "SYS_GETPID": "int:172", + "SYS_GETPPID": "int:173", + "SYS_GETPRIORITY": "int:141", + "SYS_GETRANDOM": "int:278", + "SYS_GETRESGID": "int:150", + "SYS_GETRESUID": "int:148", + "SYS_GETRLIMIT": "int:163", + "SYS_GETRUSAGE": "int:165", + "SYS_GETSID": "int:156", + "SYS_GETSOCKNAME": "int:204", + "SYS_GETSOCKOPT": "int:209", + "SYS_GETTID": "int:178", + "SYS_GETTIMEOFDAY": "int:169", + "SYS_GETUID": "int:174", + "SYS_GETXATTR": "int:8", + "SYS_GET_MEMPOLICY": "int:236", + "SYS_GET_ROBUST_LIST": "int:100", + "SYS_INIT_MODULE": "int:105", + "SYS_INOTIFY_ADD_WATCH": "int:27", + "SYS_INOTIFY_INIT1": "int:26", + "SYS_INOTIFY_RM_WATCH": "int:28", + "SYS_IOCTL": "int:29", + "SYS_IOPRIO_GET": "int:31", + "SYS_IOPRIO_SET": "int:30", + "SYS_IO_CANCEL": "int:3", + "SYS_IO_DESTROY": "int:1", + "SYS_IO_GETEVENTS": "int:4", + "SYS_IO_SETUP": "int:0", + "SYS_IO_SUBMIT": "int:2", + "SYS_KCMP": "int:272", + "SYS_KEXEC_LOAD": "int:104", + "SYS_KEYCTL": "int:219", + "SYS_KILL": "int:129", + "SYS_LCHOWN": "int:1032", + "SYS_LGETXATTR": "int:9", + "SYS_LINKAT": "int:37", + "SYS_LISTEN": "int:201", + "SYS_LISTXATTR": "int:11", + "SYS_LLISTXATTR": "int:12", + "SYS_LOOKUP_DCOOKIE": "int:18", + "SYS_LREMOVEXATTR": "int:15", + "SYS_LSEEK": "int:62", + "SYS_LSETXATTR": "int:6", + "SYS_MADVISE": "int:233", + "SYS_MBIND": "int:235", + "SYS_MEMFD_CREATE": "int:279", + "SYS_MIGRATE_PAGES": "int:238", + "SYS_MINCORE": "int:232", + "SYS_MKDIRAT": "int:34", + "SYS_MKNODAT": "int:33", + "SYS_MLOCK": "int:228", + "SYS_MLOCKALL": "int:230", + "SYS_MMAP": "int:222", + "SYS_MOUNT": "int:40", + "SYS_MOVE_PAGES": "int:239", + "SYS_MPROTECT": "int:226", + "SYS_MQ_GETSETATTR": "int:185", + "SYS_MQ_NOTIFY": "int:184", + "SYS_MQ_OPEN": "int:180", + "SYS_MQ_TIMEDRECEIVE": "int:183", + "SYS_MQ_TIMEDSEND": "int:182", + "SYS_MQ_UNLINK": "int:181", + "SYS_MREMAP": "int:216", + "SYS_MSGCTL": "int:187", + "SYS_MSGGET": "int:186", + "SYS_MSGRCV": "int:188", + "SYS_MSGSND": "int:189", + "SYS_MSYNC": "int:227", + "SYS_MUNLOCK": "int:229", + "SYS_MUNLOCKALL": "int:231", + "SYS_MUNMAP": "int:215", + "SYS_NAME_TO_HANDLE_AT": "int:264", + "SYS_NANOSLEEP": "int:101", + "SYS_NFSSERVCTL": "int:42", + "SYS_OPENAT": "int:56", + "SYS_OPEN_BY_HANDLE_AT": "int:265", + "SYS_PAUSE": "int:1061", + "SYS_PERF_EVENT_OPEN": "int:241", + "SYS_PERSONALITY": "int:92", + "SYS_PIPE2": "int:59", + "SYS_PIVOT_ROOT": "int:41", + "SYS_PPOLL": "int:73", + "SYS_PRCTL": "int:167", + "SYS_PREAD64": "int:67", + "SYS_PREADV": "int:69", + "SYS_PRLIMIT64": "int:261", + "SYS_PROCESS_VM_READV": "int:270", + "SYS_PROCESS_VM_WRITEV": "int:271", + "SYS_PSELECT6": "int:72", + "SYS_PTRACE": "int:117", + "SYS_PWRITE64": "int:68", + "SYS_PWRITEV": "int:70", + "SYS_QUOTACTL": "int:60", + "SYS_READ": "int:63", + "SYS_READAHEAD": "int:213", + "SYS_READLINKAT": "int:78", + "SYS_READV": "int:65", + "SYS_REBOOT": "int:142", + "SYS_RECVFROM": "int:207", + "SYS_RECVMMSG": "int:243", + "SYS_RECVMSG": "int:212", + "SYS_REMAP_FILE_PAGES": "int:234", + "SYS_REMOVEXATTR": "int:14", + "SYS_RENAMEAT": "int:38", + "SYS_RENAMEAT2": "int:276", + "SYS_REQUEST_KEY": "int:218", + "SYS_RESTART_SYSCALL": "int:128", + "SYS_RT_SIGACTION": "int:134", + "SYS_RT_SIGPENDING": "int:136", + "SYS_RT_SIGPROCMASK": "int:135", + "SYS_RT_SIGQUEUEINFO": "int:138", + "SYS_RT_SIGRETURN": "int:139", + "SYS_RT_SIGSUSPEND": "int:133", + "SYS_RT_SIGTIMEDWAIT": "int:137", + "SYS_RT_TGSIGQUEUEINFO": "int:240", + "SYS_SCHED_GETAFFINITY": "int:123", + "SYS_SCHED_GETATTR": "int:275", + "SYS_SCHED_GETPARAM": "int:121", + "SYS_SCHED_GETSCHEDULER": "int:120", + "SYS_SCHED_GET_PRIORITY_MAX": "int:125", + "SYS_SCHED_GET_PRIORITY_MIN": "int:126", + "SYS_SCHED_RR_GET_INTERVAL": "int:127", + "SYS_SCHED_SETAFFINITY": "int:122", + "SYS_SCHED_SETATTR": "int:274", + "SYS_SCHED_SETPARAM": "int:118", + "SYS_SCHED_SETSCHEDULER": "int:119", + "SYS_SCHED_YIELD": "int:124", + "SYS_SECCOMP": "int:277", + "SYS_SEMCTL": "int:191", + "SYS_SEMGET": "int:190", + "SYS_SEMOP": "int:193", + "SYS_SEMTIMEDOP": "int:192", + "SYS_SENDFILE": "int:71", + "SYS_SENDMMSG": "int:269", + "SYS_SENDMSG": "int:211", + "SYS_SENDTO": "int:206", + "SYS_SETDOMAINNAME": "int:162", + "SYS_SETFSGID": "int:152", + "SYS_SETFSUID": "int:151", + "SYS_SETGID": "int:144", + "SYS_SETGROUPS": "int:159", + "SYS_SETHOSTNAME": "int:161", + "SYS_SETITIMER": "int:103", + "SYS_SETNS": "int:268", + "SYS_SETPGID": "int:154", + "SYS_SETPRIORITY": "int:140", + "SYS_SETREGID": "int:143", + "SYS_SETRESGID": "int:149", + "SYS_SETRESUID": "int:147", + "SYS_SETREUID": "int:145", + "SYS_SETRLIMIT": "int:164", + "SYS_SETSID": "int:157", + "SYS_SETSOCKOPT": "int:208", + "SYS_SETTIMEOFDAY": "int:170", + "SYS_SETUID": "int:146", + "SYS_SETXATTR": "int:5", + "SYS_SET_MEMPOLICY": "int:237", + "SYS_SET_ROBUST_LIST": "int:99", + "SYS_SET_TID_ADDRESS": "int:96", + "SYS_SHMAT": "int:196", + "SYS_SHMCTL": "int:195", + "SYS_SHMDT": "int:197", + "SYS_SHMGET": "int:194", + "SYS_SHUTDOWN": "int:210", + "SYS_SIGALTSTACK": "int:132", + "SYS_SIGNALFD4": "int:74", + "SYS_SOCKET": "int:198", + "SYS_SOCKETPAIR": "int:199", + "SYS_SPLICE": "int:76", + "SYS_STATFS": "int:43", + "SYS_SWAPOFF": "int:225", + "SYS_SWAPON": "int:224", + "SYS_SYMLINKAT": "int:36", + "SYS_SYNC": "int:81", + "SYS_SYNCFS": "int:267", + "SYS_SYNC_FILE_RANGE": "int:84", + "SYS_SYNC_FILE_RANGE2": "int:84", + "SYS_SYSINFO": "int:179", + "SYS_SYSLOG": "int:116", + "SYS_TEE": "int:77", + "SYS_TGKILL": "int:131", + "SYS_TIME": "int:1062", + "SYS_TIMERFD_CREATE": "int:85", + "SYS_TIMERFD_GETTIME": "int:87", + "SYS_TIMERFD_SETTIME": "int:86", + "SYS_TIMER_CREATE": "int:107", + "SYS_TIMER_DELETE": "int:111", + "SYS_TIMER_GETOVERRUN": "int:109", + "SYS_TIMER_GETTIME": "int:108", + "SYS_TIMER_SETTIME": "int:110", + "SYS_TIMES": "int:153", + "SYS_TKILL": "int:130", + "SYS_TRUNCATE": "int:45", + "SYS_UMASK": "int:166", + "SYS_UMOUNT2": "int:39", + "SYS_UNAME": "int:160", + "SYS_UNLINKAT": "int:35", + "SYS_UNSHARE": "int:97", + "SYS_USTAT": "int:1070", + "SYS_UTIME": "int:1063", + "SYS_UTIMENSAT": "int:88", + "SYS_UTIMES": "int:1037", + "SYS_VHANGUP": "int:58", + "SYS_VMSPLICE": "int:75", + "SYS_WAIT4": "int:260", + "SYS_WAITID": "int:95", + "SYS_WRITE": "int:64", + "SYS_WRITEV": "int:66", + "S_BLKSIZE": "int:512", + "S_IEXEC": "int:64", + "S_IFBLK": "int:24576", + "S_IFCHR": "int:8192", + "S_IFDIR": "int:16384", + "S_IFIFO": "int:4096", + "S_IFLNK": "int:40960", + "S_IFMT": "int:61440", + "S_IFREG": "int:32768", + "S_IFSOCK": "int:49152", + "S_IREAD": "int:256", + "S_IRGRP": "int:32", + "S_IROTH": "int:4", + "S_IRUSR": "int:256", + "S_IRWXG": "int:56", + "S_IRWXO": "int:7", + "S_IRWXU": "int:448", + "S_ISGID": "int:1024", + "S_ISUID": "int:2048", + "S_ISVTX": "int:512", + "S_IWGRP": "int:16", + "S_IWOTH": "int:2", + "S_IWRITE": "int:128", + "S_IWUSR": "int:128", + "S_IXGRP": "int:8", + "S_IXOTH": "int:1", + "S_IXUSR": "int:64", + "SizeofCmsghdr": "int:16", + "SizeofICMPv6Filter": "int:32", + "SizeofIPMreq": "int:8", + "SizeofIPMreqn": "int:12", + "SizeofIPv6MTUInfo": "int:32", + "SizeofIPv6Mreq": "int:20", + "SizeofIfAddrmsg": "int:8", + "SizeofIfInfomsg": "int:16", + "SizeofInet4Pktinfo": "int:12", + "SizeofInet6Pktinfo": "int:20", + "SizeofInotifyEvent": "int:16", + "SizeofLinger": "int:8", + "SizeofMsghdr": "int:56", + "SizeofNlAttr": "int:4", + "SizeofNlMsgerr": "int:20", + "SizeofNlMsghdr": "int:16", + "SizeofRtAttr": "int:4", + "SizeofRtGenmsg": "int:1", + "SizeofRtMsg": "int:12", + "SizeofRtNexthop": "int:8", + "SizeofSockFilter": "int:8", + "SizeofSockFprog": "int:16", + "SizeofSockaddrAny": "int:112", + "SizeofSockaddrInet4": "int:16", + "SizeofSockaddrInet6": "int:28", + "SizeofSockaddrLinklayer": "int:20", + "SizeofSockaddrNetlink": "int:12", + "SizeofSockaddrUnix": "int:110", + "SizeofTCPInfo": "int:104", + "SizeofUcred": "int:12", + "TCFLSH": "int:21515", + "TCGETS": "int:21505", + "TCIFLUSH": "int:0", + "TCIOFLUSH": "int:2", + "TCOFLUSH": "int:1", + "TCP_CONGESTION": "int:13", + "TCP_COOKIE_IN_ALWAYS": "int:1", + "TCP_COOKIE_MAX": "int:16", + "TCP_COOKIE_MIN": "int:8", + "TCP_COOKIE_OUT_NEVER": "int:2", + "TCP_COOKIE_PAIR_SIZE": "int:32", + "TCP_COOKIE_TRANSACTIONS": "int:15", + "TCP_CORK": "int:3", + "TCP_DEFER_ACCEPT": "int:9", + "TCP_FASTOPEN": "int:23", + "TCP_INFO": "int:11", + "TCP_KEEPCNT": "int:6", + "TCP_KEEPIDLE": "int:4", + "TCP_KEEPINTVL": "int:5", + "TCP_LINGER2": "int:8", + "TCP_MAXSEG": "int:2", + "TCP_MAXWIN": "int:65535", + "TCP_MAX_WINSHIFT": "int:14", + "TCP_MD5SIG": "int:14", + "TCP_MD5SIG_MAXKEYLEN": "int:80", + "TCP_MSS": "int:512", + "TCP_MSS_DEFAULT": "int:536", + "TCP_MSS_DESIRED": "int:1220", + "TCP_NODELAY": "int:1", + "TCP_QUEUE_SEQ": "int:21", + "TCP_QUICKACK": "int:12", + "TCP_REPAIR": "int:19", + "TCP_REPAIR_OPTIONS": "int:22", + "TCP_REPAIR_QUEUE": "int:20", + "TCP_SYNCNT": "int:7", + "TCP_S_DATA_IN": "int:4", + "TCP_S_DATA_OUT": "int:8", + "TCP_THIN_DUPACK": "int:17", + "TCP_THIN_LINEAR_TIMEOUTS": "int:16", + "TCP_TIMESTAMP": "int:24", + "TCP_USER_TIMEOUT": "int:18", + "TCP_WINDOW_CLAMP": "int:10", + "TCSAFLUSH": "int:2", + "TCSETS": "int:21506", + "TIOCCBRK": "int:21544", + "TIOCCONS": "int:21533", + "TIOCEXCL": "int:21516", + "TIOCGDEV": "int:2147767346", + "TIOCGETD": "int:21540", + "TIOCGEXCL": "int:2147767360", + "TIOCGICOUNT": "int:21597", + "TIOCGLCKTRMIOS": "int:21590", + "TIOCGPGRP": "int:21519", + "TIOCGPKT": "int:2147767352", + "TIOCGPTLCK": "int:2147767353", + "TIOCGPTN": "int:2147767344", + "TIOCGRS485": "int:21550", + "TIOCGSERIAL": "int:21534", + "TIOCGSID": "int:21545", + "TIOCGSOFTCAR": "int:21529", + "TIOCGWINSZ": "int:21523", + "TIOCINQ": "int:21531", + "TIOCLINUX": "int:21532", + "TIOCMBIC": "int:21527", + "TIOCMBIS": "int:21526", + "TIOCMGET": "int:21525", + "TIOCMIWAIT": "int:21596", + "TIOCMSET": "int:21528", + "TIOCM_CAR": "int:64", + "TIOCM_CD": "int:64", + "TIOCM_CTS": "int:32", + "TIOCM_DSR": "int:256", + "TIOCM_DTR": "int:2", + "TIOCM_LE": "int:1", + "TIOCM_RI": "int:128", + "TIOCM_RNG": "int:128", + "TIOCM_RTS": "int:4", + "TIOCM_SR": "int:16", + "TIOCM_ST": "int:8", + "TIOCNOTTY": "int:21538", + "TIOCNXCL": "int:21517", + "TIOCOUTQ": "int:21521", + "TIOCPKT": "int:21536", + "TIOCPKT_DATA": "int:0", + "TIOCPKT_DOSTOP": "int:32", + "TIOCPKT_FLUSHREAD": "int:1", + "TIOCPKT_FLUSHWRITE": "int:2", + "TIOCPKT_IOCTL": "int:64", + "TIOCPKT_NOSTOP": "int:16", + "TIOCPKT_START": "int:8", + "TIOCPKT_STOP": "int:4", + "TIOCSBRK": "int:21543", + "TIOCSCTTY": "int:21518", + "TIOCSERCONFIG": "int:21587", + "TIOCSERGETLSR": "int:21593", + "TIOCSERGETMULTI": "int:21594", + "TIOCSERGSTRUCT": "int:21592", + "TIOCSERGWILD": "int:21588", + "TIOCSERSETMULTI": "int:21595", + "TIOCSERSWILD": "int:21589", + "TIOCSER_TEMT": "int:1", + "TIOCSETD": "int:21539", + "TIOCSIG": "int:1074025526", + "TIOCSLCKTRMIOS": "int:21591", + "TIOCSPGRP": "int:21520", + "TIOCSPTLCK": "int:1074025521", + "TIOCSRS485": "int:21551", + "TIOCSSERIAL": "int:21535", + "TIOCSSOFTCAR": "int:21530", + "TIOCSTI": "int:21522", + "TIOCSWINSZ": "int:21524", + "TIOCVHANGUP": "int:21559", + "TOSTOP": "int:256", + "TUNATTACHFILTER": "int:1074812117", + "TUNDETACHFILTER": "int:1074812118", + "TUNGETFEATURES": "int:2147767503", + "TUNGETFILTER": "int:2148553947", + "TUNGETIFF": "int:2147767506", + "TUNGETSNDBUF": "int:2147767507", + "TUNGETVNETHDRSZ": "int:2147767511", + "TUNSETDEBUG": "int:1074025673", + "TUNSETGROUP": "int:1074025678", + "TUNSETIFF": "int:1074025674", + "TUNSETIFINDEX": "int:1074025690", + "TUNSETLINK": "int:1074025677", + "TUNSETNOCSUM": "int:1074025672", + "TUNSETOFFLOAD": "int:1074025680", + "TUNSETOWNER": "int:1074025676", + "TUNSETPERSIST": "int:1074025675", + "TUNSETQUEUE": "int:1074025689", + "TUNSETSNDBUF": "int:1074025684", + "TUNSETTXFILTER": "int:1074025681", + "TUNSETVNETHDRSZ": "int:1074025688", + "VDISCARD": "int:13", + "VEOF": "int:4", + "VEOL": "int:11", + "VEOL2": "int:16", + "VERASE": "int:2", + "VINTR": "int:0", + "VKILL": "int:3", + "VLNEXT": "int:15", + "VMIN": "int:6", + "VQUIT": "int:1", + "VREPRINT": "int:12", + "VSTART": "int:8", + "VSTOP": "int:9", + "VSUSP": "int:10", + "VSWTC": "int:7", + "VT0": "int:0", + "VT1": "int:16384", + "VTDLY": "int:16384", + "VTIME": "int:5", + "VWERASE": "int:14", + "WALL": "int:1073741824", + "WCLONE": "int:2147483648", + "WCONTINUED": "int:8", + "WEXITED": "int:4", + "WNOHANG": "int:1", + "WNOTHREAD": "int:536870912", + "WNOWAIT": "int:16777216", + "WORDSIZE": "int:64", + "WSTOPPED": "int:2", + "WUNTRACED": "int:2", + "XCASE": "int:4", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/syscall_windows_amd64.go b/vendor/github.com/cosmos72/gomacro/imports/syscall_windows_amd64.go new file mode 100644 index 0000000..1553245 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/syscall_windows_amd64.go @@ -0,0 +1,996 @@ +// +build !gccgo + +// this file was generated by gomacro command: import "syscall" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "syscall" +) + +func init() { + Packages["syscall"] = Package{ + Binds: map[string]Value{ + "AF_INET": ValueOf(syscall.AF_INET), + "AF_INET6": ValueOf(syscall.AF_INET6), + "AF_NETBIOS": ValueOf(syscall.AF_NETBIOS), + "AF_UNIX": ValueOf(syscall.AF_UNIX), + "AF_UNSPEC": ValueOf(syscall.AF_UNSPEC), + "AI_CANONNAME": ValueOf(syscall.AI_CANONNAME), + "AI_NUMERICHOST": ValueOf(syscall.AI_NUMERICHOST), + "AI_PASSIVE": ValueOf(syscall.AI_PASSIVE), + "APPLICATION_ERROR": ValueOf(syscall.APPLICATION_ERROR), + "AUTHTYPE_CLIENT": ValueOf(syscall.AUTHTYPE_CLIENT), + "AUTHTYPE_SERVER": ValueOf(syscall.AUTHTYPE_SERVER), + "Accept": ValueOf(syscall.Accept), + "AcceptEx": ValueOf(syscall.AcceptEx), + "BASE_PROTOCOL": ValueOf(syscall.BASE_PROTOCOL), + "Bind": ValueOf(syscall.Bind), + "BytePtrFromString": ValueOf(syscall.BytePtrFromString), + "ByteSliceFromString": ValueOf(syscall.ByteSliceFromString), + "CERT_CHAIN_POLICY_AUTHENTICODE": ValueOf(syscall.CERT_CHAIN_POLICY_AUTHENTICODE), + "CERT_CHAIN_POLICY_AUTHENTICODE_TS": ValueOf(syscall.CERT_CHAIN_POLICY_AUTHENTICODE_TS), + "CERT_CHAIN_POLICY_BASE": ValueOf(syscall.CERT_CHAIN_POLICY_BASE), + "CERT_CHAIN_POLICY_BASIC_CONSTRAINTS": ValueOf(syscall.CERT_CHAIN_POLICY_BASIC_CONSTRAINTS), + "CERT_CHAIN_POLICY_EV": ValueOf(syscall.CERT_CHAIN_POLICY_EV), + "CERT_CHAIN_POLICY_MICROSOFT_ROOT": ValueOf(syscall.CERT_CHAIN_POLICY_MICROSOFT_ROOT), + "CERT_CHAIN_POLICY_NT_AUTH": ValueOf(syscall.CERT_CHAIN_POLICY_NT_AUTH), + "CERT_CHAIN_POLICY_SSL": ValueOf(syscall.CERT_CHAIN_POLICY_SSL), + "CERT_E_CN_NO_MATCH": ValueOf(uint32(syscall.CERT_E_CN_NO_MATCH)), + "CERT_E_EXPIRED": ValueOf(uint32(syscall.CERT_E_EXPIRED)), + "CERT_E_PURPOSE": ValueOf(uint32(syscall.CERT_E_PURPOSE)), + "CERT_E_ROLE": ValueOf(uint32(syscall.CERT_E_ROLE)), + "CERT_E_UNTRUSTEDROOT": ValueOf(uint32(syscall.CERT_E_UNTRUSTEDROOT)), + "CERT_STORE_ADD_ALWAYS": ValueOf(syscall.CERT_STORE_ADD_ALWAYS), + "CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG": ValueOf(syscall.CERT_STORE_DEFER_CLOSE_UNTIL_LAST_FREE_FLAG), + "CERT_STORE_PROV_MEMORY": ValueOf(syscall.CERT_STORE_PROV_MEMORY), + "CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT": ValueOf(syscall.CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT), + "CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT": ValueOf(syscall.CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT), + "CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT": ValueOf(syscall.CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT), + "CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT": ValueOf(syscall.CERT_TRUST_HAS_NOT_SUPPORTED_CRITICAL_EXT), + "CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT": ValueOf(syscall.CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT), + "CERT_TRUST_INVALID_BASIC_CONSTRAINTS": ValueOf(syscall.CERT_TRUST_INVALID_BASIC_CONSTRAINTS), + "CERT_TRUST_INVALID_EXTENSION": ValueOf(syscall.CERT_TRUST_INVALID_EXTENSION), + "CERT_TRUST_INVALID_NAME_CONSTRAINTS": ValueOf(syscall.CERT_TRUST_INVALID_NAME_CONSTRAINTS), + "CERT_TRUST_INVALID_POLICY_CONSTRAINTS": ValueOf(syscall.CERT_TRUST_INVALID_POLICY_CONSTRAINTS), + "CERT_TRUST_IS_CYCLIC": ValueOf(syscall.CERT_TRUST_IS_CYCLIC), + "CERT_TRUST_IS_EXPLICIT_DISTRUST": ValueOf(syscall.CERT_TRUST_IS_EXPLICIT_DISTRUST), + "CERT_TRUST_IS_NOT_SIGNATURE_VALID": ValueOf(syscall.CERT_TRUST_IS_NOT_SIGNATURE_VALID), + "CERT_TRUST_IS_NOT_TIME_VALID": ValueOf(syscall.CERT_TRUST_IS_NOT_TIME_VALID), + "CERT_TRUST_IS_NOT_VALID_FOR_USAGE": ValueOf(syscall.CERT_TRUST_IS_NOT_VALID_FOR_USAGE), + "CERT_TRUST_IS_OFFLINE_REVOCATION": ValueOf(syscall.CERT_TRUST_IS_OFFLINE_REVOCATION), + "CERT_TRUST_IS_REVOKED": ValueOf(syscall.CERT_TRUST_IS_REVOKED), + "CERT_TRUST_IS_UNTRUSTED_ROOT": ValueOf(syscall.CERT_TRUST_IS_UNTRUSTED_ROOT), + "CERT_TRUST_NO_ERROR": ValueOf(syscall.CERT_TRUST_NO_ERROR), + "CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY": ValueOf(syscall.CERT_TRUST_NO_ISSUANCE_CHAIN_POLICY), + "CERT_TRUST_REVOCATION_STATUS_UNKNOWN": ValueOf(syscall.CERT_TRUST_REVOCATION_STATUS_UNKNOWN), + "CREATE_ALWAYS": ValueOf(syscall.CREATE_ALWAYS), + "CREATE_NEW": ValueOf(syscall.CREATE_NEW), + "CREATE_NEW_PROCESS_GROUP": ValueOf(syscall.CREATE_NEW_PROCESS_GROUP), + "CREATE_UNICODE_ENVIRONMENT": ValueOf(syscall.CREATE_UNICODE_ENVIRONMENT), + "CRYPT_DEFAULT_CONTAINER_OPTIONAL": ValueOf(syscall.CRYPT_DEFAULT_CONTAINER_OPTIONAL), + "CRYPT_DELETEKEYSET": ValueOf(syscall.CRYPT_DELETEKEYSET), + "CRYPT_MACHINE_KEYSET": ValueOf(syscall.CRYPT_MACHINE_KEYSET), + "CRYPT_NEWKEYSET": ValueOf(syscall.CRYPT_NEWKEYSET), + "CRYPT_SILENT": ValueOf(syscall.CRYPT_SILENT), + "CRYPT_VERIFYCONTEXT": ValueOf(uint32(syscall.CRYPT_VERIFYCONTEXT)), + "CTRL_BREAK_EVENT": ValueOf(syscall.CTRL_BREAK_EVENT), + "CTRL_C_EVENT": ValueOf(syscall.CTRL_C_EVENT), + "CancelIo": ValueOf(syscall.CancelIo), + "CancelIoEx": ValueOf(syscall.CancelIoEx), + "CertAddCertificateContextToStore": ValueOf(syscall.CertAddCertificateContextToStore), + "CertCloseStore": ValueOf(syscall.CertCloseStore), + "CertCreateCertificateContext": ValueOf(syscall.CertCreateCertificateContext), + "CertEnumCertificatesInStore": ValueOf(syscall.CertEnumCertificatesInStore), + "CertFreeCertificateChain": ValueOf(syscall.CertFreeCertificateChain), + "CertFreeCertificateContext": ValueOf(syscall.CertFreeCertificateContext), + "CertGetCertificateChain": ValueOf(syscall.CertGetCertificateChain), + "CertOpenStore": ValueOf(syscall.CertOpenStore), + "CertOpenSystemStore": ValueOf(syscall.CertOpenSystemStore), + "CertVerifyCertificateChainPolicy": ValueOf(syscall.CertVerifyCertificateChainPolicy), + "Chdir": ValueOf(syscall.Chdir), + "Chmod": ValueOf(syscall.Chmod), + "Chown": ValueOf(syscall.Chown), + "Clearenv": ValueOf(syscall.Clearenv), + "Close": ValueOf(syscall.Close), + "CloseHandle": ValueOf(syscall.CloseHandle), + "CloseOnExec": ValueOf(syscall.CloseOnExec), + "Closesocket": ValueOf(syscall.Closesocket), + "CommandLineToArgv": ValueOf(syscall.CommandLineToArgv), + "ComputerName": ValueOf(syscall.ComputerName), + "Connect": ValueOf(syscall.Connect), + "ConnectEx": ValueOf(syscall.ConnectEx), + "ConvertSidToStringSid": ValueOf(syscall.ConvertSidToStringSid), + "ConvertStringSidToSid": ValueOf(syscall.ConvertStringSidToSid), + "CopySid": ValueOf(syscall.CopySid), + "CreateDirectory": ValueOf(syscall.CreateDirectory), + "CreateFile": ValueOf(syscall.CreateFile), + "CreateFileMapping": ValueOf(syscall.CreateFileMapping), + "CreateHardLink": ValueOf(syscall.CreateHardLink), + "CreateIoCompletionPort": ValueOf(syscall.CreateIoCompletionPort), + "CreatePipe": ValueOf(syscall.CreatePipe), + "CreateProcess": ValueOf(syscall.CreateProcess), + "CreateSymbolicLink": ValueOf(syscall.CreateSymbolicLink), + "CreateToolhelp32Snapshot": ValueOf(syscall.CreateToolhelp32Snapshot), + "CryptAcquireContext": ValueOf(syscall.CryptAcquireContext), + "CryptGenRandom": ValueOf(syscall.CryptGenRandom), + "CryptReleaseContext": ValueOf(syscall.CryptReleaseContext), + "DNS_INFO_NO_RECORDS": ValueOf(syscall.DNS_INFO_NO_RECORDS), + "DNS_TYPE_A": ValueOf(syscall.DNS_TYPE_A), + "DNS_TYPE_A6": ValueOf(syscall.DNS_TYPE_A6), + "DNS_TYPE_AAAA": ValueOf(syscall.DNS_TYPE_AAAA), + "DNS_TYPE_ADDRS": ValueOf(syscall.DNS_TYPE_ADDRS), + "DNS_TYPE_AFSDB": ValueOf(syscall.DNS_TYPE_AFSDB), + "DNS_TYPE_ALL": ValueOf(syscall.DNS_TYPE_ALL), + "DNS_TYPE_ANY": ValueOf(syscall.DNS_TYPE_ANY), + "DNS_TYPE_ATMA": ValueOf(syscall.DNS_TYPE_ATMA), + "DNS_TYPE_AXFR": ValueOf(syscall.DNS_TYPE_AXFR), + "DNS_TYPE_CERT": ValueOf(syscall.DNS_TYPE_CERT), + "DNS_TYPE_CNAME": ValueOf(syscall.DNS_TYPE_CNAME), + "DNS_TYPE_DHCID": ValueOf(syscall.DNS_TYPE_DHCID), + "DNS_TYPE_DNAME": ValueOf(syscall.DNS_TYPE_DNAME), + "DNS_TYPE_DNSKEY": ValueOf(syscall.DNS_TYPE_DNSKEY), + "DNS_TYPE_DS": ValueOf(syscall.DNS_TYPE_DS), + "DNS_TYPE_EID": ValueOf(syscall.DNS_TYPE_EID), + "DNS_TYPE_GID": ValueOf(syscall.DNS_TYPE_GID), + "DNS_TYPE_GPOS": ValueOf(syscall.DNS_TYPE_GPOS), + "DNS_TYPE_HINFO": ValueOf(syscall.DNS_TYPE_HINFO), + "DNS_TYPE_ISDN": ValueOf(syscall.DNS_TYPE_ISDN), + "DNS_TYPE_IXFR": ValueOf(syscall.DNS_TYPE_IXFR), + "DNS_TYPE_KEY": ValueOf(syscall.DNS_TYPE_KEY), + "DNS_TYPE_KX": ValueOf(syscall.DNS_TYPE_KX), + "DNS_TYPE_LOC": ValueOf(syscall.DNS_TYPE_LOC), + "DNS_TYPE_MAILA": ValueOf(syscall.DNS_TYPE_MAILA), + "DNS_TYPE_MAILB": ValueOf(syscall.DNS_TYPE_MAILB), + "DNS_TYPE_MB": ValueOf(syscall.DNS_TYPE_MB), + "DNS_TYPE_MD": ValueOf(syscall.DNS_TYPE_MD), + "DNS_TYPE_MF": ValueOf(syscall.DNS_TYPE_MF), + "DNS_TYPE_MG": ValueOf(syscall.DNS_TYPE_MG), + "DNS_TYPE_MINFO": ValueOf(syscall.DNS_TYPE_MINFO), + "DNS_TYPE_MR": ValueOf(syscall.DNS_TYPE_MR), + "DNS_TYPE_MX": ValueOf(syscall.DNS_TYPE_MX), + "DNS_TYPE_NAPTR": ValueOf(syscall.DNS_TYPE_NAPTR), + "DNS_TYPE_NBSTAT": ValueOf(syscall.DNS_TYPE_NBSTAT), + "DNS_TYPE_NIMLOC": ValueOf(syscall.DNS_TYPE_NIMLOC), + "DNS_TYPE_NS": ValueOf(syscall.DNS_TYPE_NS), + "DNS_TYPE_NSAP": ValueOf(syscall.DNS_TYPE_NSAP), + "DNS_TYPE_NSAPPTR": ValueOf(syscall.DNS_TYPE_NSAPPTR), + "DNS_TYPE_NSEC": ValueOf(syscall.DNS_TYPE_NSEC), + "DNS_TYPE_NULL": ValueOf(syscall.DNS_TYPE_NULL), + "DNS_TYPE_NXT": ValueOf(syscall.DNS_TYPE_NXT), + "DNS_TYPE_OPT": ValueOf(syscall.DNS_TYPE_OPT), + "DNS_TYPE_PTR": ValueOf(syscall.DNS_TYPE_PTR), + "DNS_TYPE_PX": ValueOf(syscall.DNS_TYPE_PX), + "DNS_TYPE_RP": ValueOf(syscall.DNS_TYPE_RP), + "DNS_TYPE_RRSIG": ValueOf(syscall.DNS_TYPE_RRSIG), + "DNS_TYPE_RT": ValueOf(syscall.DNS_TYPE_RT), + "DNS_TYPE_SIG": ValueOf(syscall.DNS_TYPE_SIG), + "DNS_TYPE_SINK": ValueOf(syscall.DNS_TYPE_SINK), + "DNS_TYPE_SOA": ValueOf(syscall.DNS_TYPE_SOA), + "DNS_TYPE_SRV": ValueOf(syscall.DNS_TYPE_SRV), + "DNS_TYPE_TEXT": ValueOf(syscall.DNS_TYPE_TEXT), + "DNS_TYPE_TKEY": ValueOf(syscall.DNS_TYPE_TKEY), + "DNS_TYPE_TSIG": ValueOf(syscall.DNS_TYPE_TSIG), + "DNS_TYPE_UID": ValueOf(syscall.DNS_TYPE_UID), + "DNS_TYPE_UINFO": ValueOf(syscall.DNS_TYPE_UINFO), + "DNS_TYPE_UNSPEC": ValueOf(syscall.DNS_TYPE_UNSPEC), + "DNS_TYPE_WINS": ValueOf(syscall.DNS_TYPE_WINS), + "DNS_TYPE_WINSR": ValueOf(syscall.DNS_TYPE_WINSR), + "DNS_TYPE_WKS": ValueOf(syscall.DNS_TYPE_WKS), + "DNS_TYPE_X25": ValueOf(syscall.DNS_TYPE_X25), + "DUPLICATE_CLOSE_SOURCE": ValueOf(syscall.DUPLICATE_CLOSE_SOURCE), + "DUPLICATE_SAME_ACCESS": ValueOf(syscall.DUPLICATE_SAME_ACCESS), + "DeleteFile": ValueOf(syscall.DeleteFile), + "DeviceIoControl": ValueOf(syscall.DeviceIoControl), + "DnsNameCompare": ValueOf(syscall.DnsNameCompare), + "DnsQuery": ValueOf(syscall.DnsQuery), + "DnsRecordListFree": ValueOf(syscall.DnsRecordListFree), + "DnsSectionAdditional": ValueOf(syscall.DnsSectionAdditional), + "DnsSectionAnswer": ValueOf(syscall.DnsSectionAnswer), + "DnsSectionAuthority": ValueOf(syscall.DnsSectionAuthority), + "DnsSectionQuestion": ValueOf(syscall.DnsSectionQuestion), + "DuplicateHandle": ValueOf(syscall.DuplicateHandle), + "E2BIG": ValueOf(syscall.E2BIG), + "EACCES": ValueOf(syscall.EACCES), + "EADDRINUSE": ValueOf(syscall.EADDRINUSE), + "EADDRNOTAVAIL": ValueOf(syscall.EADDRNOTAVAIL), + "EADV": ValueOf(syscall.EADV), + "EAFNOSUPPORT": ValueOf(syscall.EAFNOSUPPORT), + "EAGAIN": ValueOf(syscall.EAGAIN), + "EALREADY": ValueOf(syscall.EALREADY), + "EBADE": ValueOf(syscall.EBADE), + "EBADF": ValueOf(syscall.EBADF), + "EBADFD": ValueOf(syscall.EBADFD), + "EBADMSG": ValueOf(syscall.EBADMSG), + "EBADR": ValueOf(syscall.EBADR), + "EBADRQC": ValueOf(syscall.EBADRQC), + "EBADSLT": ValueOf(syscall.EBADSLT), + "EBFONT": ValueOf(syscall.EBFONT), + "EBUSY": ValueOf(syscall.EBUSY), + "ECANCELED": ValueOf(syscall.ECANCELED), + "ECHILD": ValueOf(syscall.ECHILD), + "ECHRNG": ValueOf(syscall.ECHRNG), + "ECOMM": ValueOf(syscall.ECOMM), + "ECONNABORTED": ValueOf(syscall.ECONNABORTED), + "ECONNREFUSED": ValueOf(syscall.ECONNREFUSED), + "ECONNRESET": ValueOf(syscall.ECONNRESET), + "EDEADLK": ValueOf(syscall.EDEADLK), + "EDEADLOCK": ValueOf(syscall.EDEADLOCK), + "EDESTADDRREQ": ValueOf(syscall.EDESTADDRREQ), + "EDOM": ValueOf(syscall.EDOM), + "EDOTDOT": ValueOf(syscall.EDOTDOT), + "EDQUOT": ValueOf(syscall.EDQUOT), + "EEXIST": ValueOf(syscall.EEXIST), + "EFAULT": ValueOf(syscall.EFAULT), + "EFBIG": ValueOf(syscall.EFBIG), + "EHOSTDOWN": ValueOf(syscall.EHOSTDOWN), + "EHOSTUNREACH": ValueOf(syscall.EHOSTUNREACH), + "EIDRM": ValueOf(syscall.EIDRM), + "EILSEQ": ValueOf(syscall.EILSEQ), + "EINPROGRESS": ValueOf(syscall.EINPROGRESS), + "EINTR": ValueOf(syscall.EINTR), + "EINVAL": ValueOf(syscall.EINVAL), + "EIO": ValueOf(syscall.EIO), + "EISCONN": ValueOf(syscall.EISCONN), + "EISDIR": ValueOf(syscall.EISDIR), + "EISNAM": ValueOf(syscall.EISNAM), + "EKEYEXPIRED": ValueOf(syscall.EKEYEXPIRED), + "EKEYREJECTED": ValueOf(syscall.EKEYREJECTED), + "EKEYREVOKED": ValueOf(syscall.EKEYREVOKED), + "EL2HLT": ValueOf(syscall.EL2HLT), + "EL2NSYNC": ValueOf(syscall.EL2NSYNC), + "EL3HLT": ValueOf(syscall.EL3HLT), + "EL3RST": ValueOf(syscall.EL3RST), + "ELIBACC": ValueOf(syscall.ELIBACC), + "ELIBBAD": ValueOf(syscall.ELIBBAD), + "ELIBEXEC": ValueOf(syscall.ELIBEXEC), + "ELIBMAX": ValueOf(syscall.ELIBMAX), + "ELIBSCN": ValueOf(syscall.ELIBSCN), + "ELNRNG": ValueOf(syscall.ELNRNG), + "ELOOP": ValueOf(syscall.ELOOP), + "EMEDIUMTYPE": ValueOf(syscall.EMEDIUMTYPE), + "EMFILE": ValueOf(syscall.EMFILE), + "EMLINK": ValueOf(syscall.EMLINK), + "EMSGSIZE": ValueOf(syscall.EMSGSIZE), + "EMULTIHOP": ValueOf(syscall.EMULTIHOP), + "ENAMETOOLONG": ValueOf(syscall.ENAMETOOLONG), + "ENAVAIL": ValueOf(syscall.ENAVAIL), + "ENETDOWN": ValueOf(syscall.ENETDOWN), + "ENETRESET": ValueOf(syscall.ENETRESET), + "ENETUNREACH": ValueOf(syscall.ENETUNREACH), + "ENFILE": ValueOf(syscall.ENFILE), + "ENOANO": ValueOf(syscall.ENOANO), + "ENOBUFS": ValueOf(syscall.ENOBUFS), + "ENOCSI": ValueOf(syscall.ENOCSI), + "ENODATA": ValueOf(syscall.ENODATA), + "ENODEV": ValueOf(syscall.ENODEV), + "ENOENT": ValueOf(syscall.ENOENT), + "ENOEXEC": ValueOf(syscall.ENOEXEC), + "ENOKEY": ValueOf(syscall.ENOKEY), + "ENOLCK": ValueOf(syscall.ENOLCK), + "ENOLINK": ValueOf(syscall.ENOLINK), + "ENOMEDIUM": ValueOf(syscall.ENOMEDIUM), + "ENOMEM": ValueOf(syscall.ENOMEM), + "ENOMSG": ValueOf(syscall.ENOMSG), + "ENONET": ValueOf(syscall.ENONET), + "ENOPKG": ValueOf(syscall.ENOPKG), + "ENOPROTOOPT": ValueOf(syscall.ENOPROTOOPT), + "ENOSPC": ValueOf(syscall.ENOSPC), + "ENOSR": ValueOf(syscall.ENOSR), + "ENOSTR": ValueOf(syscall.ENOSTR), + "ENOSYS": ValueOf(syscall.ENOSYS), + "ENOTBLK": ValueOf(syscall.ENOTBLK), + "ENOTCONN": ValueOf(syscall.ENOTCONN), + "ENOTDIR": ValueOf(syscall.ENOTDIR), + "ENOTEMPTY": ValueOf(syscall.ENOTEMPTY), + "ENOTNAM": ValueOf(syscall.ENOTNAM), + "ENOTRECOVERABLE": ValueOf(syscall.ENOTRECOVERABLE), + "ENOTSOCK": ValueOf(syscall.ENOTSOCK), + "ENOTSUP": ValueOf(syscall.ENOTSUP), + "ENOTTY": ValueOf(syscall.ENOTTY), + "ENOTUNIQ": ValueOf(syscall.ENOTUNIQ), + "ENXIO": ValueOf(syscall.ENXIO), + "EOPNOTSUPP": ValueOf(syscall.EOPNOTSUPP), + "EOVERFLOW": ValueOf(syscall.EOVERFLOW), + "EOWNERDEAD": ValueOf(syscall.EOWNERDEAD), + "EPERM": ValueOf(syscall.EPERM), + "EPFNOSUPPORT": ValueOf(syscall.EPFNOSUPPORT), + "EPIPE": ValueOf(syscall.EPIPE), + "EPROTO": ValueOf(syscall.EPROTO), + "EPROTONOSUPPORT": ValueOf(syscall.EPROTONOSUPPORT), + "EPROTOTYPE": ValueOf(syscall.EPROTOTYPE), + "ERANGE": ValueOf(syscall.ERANGE), + "EREMCHG": ValueOf(syscall.EREMCHG), + "EREMOTE": ValueOf(syscall.EREMOTE), + "EREMOTEIO": ValueOf(syscall.EREMOTEIO), + "ERESTART": ValueOf(syscall.ERESTART), + "EROFS": ValueOf(syscall.EROFS), + "ERROR_ACCESS_DENIED": ValueOf(syscall.ERROR_ACCESS_DENIED), + "ERROR_ALREADY_EXISTS": ValueOf(syscall.ERROR_ALREADY_EXISTS), + "ERROR_BROKEN_PIPE": ValueOf(syscall.ERROR_BROKEN_PIPE), + "ERROR_BUFFER_OVERFLOW": ValueOf(syscall.ERROR_BUFFER_OVERFLOW), + "ERROR_DIR_NOT_EMPTY": ValueOf(syscall.ERROR_DIR_NOT_EMPTY), + "ERROR_ENVVAR_NOT_FOUND": ValueOf(syscall.ERROR_ENVVAR_NOT_FOUND), + "ERROR_FILE_EXISTS": ValueOf(syscall.ERROR_FILE_EXISTS), + "ERROR_FILE_NOT_FOUND": ValueOf(syscall.ERROR_FILE_NOT_FOUND), + "ERROR_HANDLE_EOF": ValueOf(syscall.ERROR_HANDLE_EOF), + "ERROR_INSUFFICIENT_BUFFER": ValueOf(syscall.ERROR_INSUFFICIENT_BUFFER), + "ERROR_IO_PENDING": ValueOf(syscall.ERROR_IO_PENDING), + "ERROR_MOD_NOT_FOUND": ValueOf(syscall.ERROR_MOD_NOT_FOUND), + "ERROR_MORE_DATA": ValueOf(syscall.ERROR_MORE_DATA), + "ERROR_NETNAME_DELETED": ValueOf(syscall.ERROR_NETNAME_DELETED), + "ERROR_NOT_FOUND": ValueOf(syscall.ERROR_NOT_FOUND), + "ERROR_NO_MORE_FILES": ValueOf(syscall.ERROR_NO_MORE_FILES), + "ERROR_OPERATION_ABORTED": ValueOf(syscall.ERROR_OPERATION_ABORTED), + "ERROR_PATH_NOT_FOUND": ValueOf(syscall.ERROR_PATH_NOT_FOUND), + "ERROR_PRIVILEGE_NOT_HELD": ValueOf(syscall.ERROR_PRIVILEGE_NOT_HELD), + "ERROR_PROC_NOT_FOUND": ValueOf(syscall.ERROR_PROC_NOT_FOUND), + "ESHUTDOWN": ValueOf(syscall.ESHUTDOWN), + "ESOCKTNOSUPPORT": ValueOf(syscall.ESOCKTNOSUPPORT), + "ESPIPE": ValueOf(syscall.ESPIPE), + "ESRCH": ValueOf(syscall.ESRCH), + "ESRMNT": ValueOf(syscall.ESRMNT), + "ESTALE": ValueOf(syscall.ESTALE), + "ESTRPIPE": ValueOf(syscall.ESTRPIPE), + "ETIME": ValueOf(syscall.ETIME), + "ETIMEDOUT": ValueOf(syscall.ETIMEDOUT), + "ETOOMANYREFS": ValueOf(syscall.ETOOMANYREFS), + "ETXTBSY": ValueOf(syscall.ETXTBSY), + "EUCLEAN": ValueOf(syscall.EUCLEAN), + "EUNATCH": ValueOf(syscall.EUNATCH), + "EUSERS": ValueOf(syscall.EUSERS), + "EWINDOWS": ValueOf(syscall.EWINDOWS), + "EWOULDBLOCK": ValueOf(syscall.EWOULDBLOCK), + "EXDEV": ValueOf(syscall.EXDEV), + "EXFULL": ValueOf(syscall.EXFULL), + "Environ": ValueOf(syscall.Environ), + "EscapeArg": ValueOf(syscall.EscapeArg), + "Exec": ValueOf(syscall.Exec), + "Exit": ValueOf(syscall.Exit), + "ExitProcess": ValueOf(syscall.ExitProcess), + "FILE_ACTION_ADDED": ValueOf(syscall.FILE_ACTION_ADDED), + "FILE_ACTION_MODIFIED": ValueOf(syscall.FILE_ACTION_MODIFIED), + "FILE_ACTION_REMOVED": ValueOf(syscall.FILE_ACTION_REMOVED), + "FILE_ACTION_RENAMED_NEW_NAME": ValueOf(syscall.FILE_ACTION_RENAMED_NEW_NAME), + "FILE_ACTION_RENAMED_OLD_NAME": ValueOf(syscall.FILE_ACTION_RENAMED_OLD_NAME), + "FILE_APPEND_DATA": ValueOf(syscall.FILE_APPEND_DATA), + "FILE_ATTRIBUTE_ARCHIVE": ValueOf(syscall.FILE_ATTRIBUTE_ARCHIVE), + "FILE_ATTRIBUTE_DIRECTORY": ValueOf(syscall.FILE_ATTRIBUTE_DIRECTORY), + "FILE_ATTRIBUTE_HIDDEN": ValueOf(syscall.FILE_ATTRIBUTE_HIDDEN), + "FILE_ATTRIBUTE_NORMAL": ValueOf(syscall.FILE_ATTRIBUTE_NORMAL), + "FILE_ATTRIBUTE_READONLY": ValueOf(syscall.FILE_ATTRIBUTE_READONLY), + "FILE_ATTRIBUTE_REPARSE_POINT": ValueOf(syscall.FILE_ATTRIBUTE_REPARSE_POINT), + "FILE_ATTRIBUTE_SYSTEM": ValueOf(syscall.FILE_ATTRIBUTE_SYSTEM), + "FILE_BEGIN": ValueOf(syscall.FILE_BEGIN), + "FILE_CURRENT": ValueOf(syscall.FILE_CURRENT), + "FILE_END": ValueOf(syscall.FILE_END), + "FILE_FLAG_BACKUP_SEMANTICS": ValueOf(syscall.FILE_FLAG_BACKUP_SEMANTICS), + "FILE_FLAG_OPEN_REPARSE_POINT": ValueOf(syscall.FILE_FLAG_OPEN_REPARSE_POINT), + "FILE_FLAG_OVERLAPPED": ValueOf(syscall.FILE_FLAG_OVERLAPPED), + "FILE_LIST_DIRECTORY": ValueOf(syscall.FILE_LIST_DIRECTORY), + "FILE_MAP_COPY": ValueOf(syscall.FILE_MAP_COPY), + "FILE_MAP_EXECUTE": ValueOf(syscall.FILE_MAP_EXECUTE), + "FILE_MAP_READ": ValueOf(syscall.FILE_MAP_READ), + "FILE_MAP_WRITE": ValueOf(syscall.FILE_MAP_WRITE), + "FILE_NOTIFY_CHANGE_ATTRIBUTES": ValueOf(syscall.FILE_NOTIFY_CHANGE_ATTRIBUTES), + "FILE_NOTIFY_CHANGE_CREATION": ValueOf(syscall.FILE_NOTIFY_CHANGE_CREATION), + "FILE_NOTIFY_CHANGE_DIR_NAME": ValueOf(syscall.FILE_NOTIFY_CHANGE_DIR_NAME), + "FILE_NOTIFY_CHANGE_FILE_NAME": ValueOf(syscall.FILE_NOTIFY_CHANGE_FILE_NAME), + "FILE_NOTIFY_CHANGE_LAST_ACCESS": ValueOf(syscall.FILE_NOTIFY_CHANGE_LAST_ACCESS), + "FILE_NOTIFY_CHANGE_LAST_WRITE": ValueOf(syscall.FILE_NOTIFY_CHANGE_LAST_WRITE), + "FILE_NOTIFY_CHANGE_SIZE": ValueOf(syscall.FILE_NOTIFY_CHANGE_SIZE), + "FILE_SHARE_DELETE": ValueOf(syscall.FILE_SHARE_DELETE), + "FILE_SHARE_READ": ValueOf(syscall.FILE_SHARE_READ), + "FILE_SHARE_WRITE": ValueOf(syscall.FILE_SHARE_WRITE), + "FILE_SKIP_COMPLETION_PORT_ON_SUCCESS": ValueOf(syscall.FILE_SKIP_COMPLETION_PORT_ON_SUCCESS), + "FILE_SKIP_SET_EVENT_ON_HANDLE": ValueOf(syscall.FILE_SKIP_SET_EVENT_ON_HANDLE), + "FILE_TYPE_CHAR": ValueOf(syscall.FILE_TYPE_CHAR), + "FILE_TYPE_DISK": ValueOf(syscall.FILE_TYPE_DISK), + "FILE_TYPE_PIPE": ValueOf(syscall.FILE_TYPE_PIPE), + "FILE_TYPE_REMOTE": ValueOf(syscall.FILE_TYPE_REMOTE), + "FILE_TYPE_UNKNOWN": ValueOf(syscall.FILE_TYPE_UNKNOWN), + "FILE_WRITE_ATTRIBUTES": ValueOf(syscall.FILE_WRITE_ATTRIBUTES), + "FORMAT_MESSAGE_ALLOCATE_BUFFER": ValueOf(syscall.FORMAT_MESSAGE_ALLOCATE_BUFFER), + "FORMAT_MESSAGE_ARGUMENT_ARRAY": ValueOf(syscall.FORMAT_MESSAGE_ARGUMENT_ARRAY), + "FORMAT_MESSAGE_FROM_HMODULE": ValueOf(syscall.FORMAT_MESSAGE_FROM_HMODULE), + "FORMAT_MESSAGE_FROM_STRING": ValueOf(syscall.FORMAT_MESSAGE_FROM_STRING), + "FORMAT_MESSAGE_FROM_SYSTEM": ValueOf(syscall.FORMAT_MESSAGE_FROM_SYSTEM), + "FORMAT_MESSAGE_IGNORE_INSERTS": ValueOf(syscall.FORMAT_MESSAGE_IGNORE_INSERTS), + "FORMAT_MESSAGE_MAX_WIDTH_MASK": ValueOf(syscall.FORMAT_MESSAGE_MAX_WIDTH_MASK), + "FSCTL_GET_REPARSE_POINT": ValueOf(syscall.FSCTL_GET_REPARSE_POINT), + "Fchdir": ValueOf(syscall.Fchdir), + "Fchmod": ValueOf(syscall.Fchmod), + "Fchown": ValueOf(syscall.Fchown), + "FindClose": ValueOf(syscall.FindClose), + "FindFirstFile": ValueOf(syscall.FindFirstFile), + "FindNextFile": ValueOf(syscall.FindNextFile), + "FlushFileBuffers": ValueOf(syscall.FlushFileBuffers), + "FlushViewOfFile": ValueOf(syscall.FlushViewOfFile), + "ForkLock": ValueOf(&syscall.ForkLock).Elem(), + "FormatMessage": ValueOf(syscall.FormatMessage), + "FreeAddrInfoW": ValueOf(syscall.FreeAddrInfoW), + "FreeEnvironmentStrings": ValueOf(syscall.FreeEnvironmentStrings), + "FreeLibrary": ValueOf(syscall.FreeLibrary), + "Fsync": ValueOf(syscall.Fsync), + "Ftruncate": ValueOf(syscall.Ftruncate), + "FullPath": ValueOf(syscall.FullPath), + "GENERIC_ALL": ValueOf(syscall.GENERIC_ALL), + "GENERIC_EXECUTE": ValueOf(syscall.GENERIC_EXECUTE), + "GENERIC_READ": ValueOf(uint32(syscall.GENERIC_READ)), + "GENERIC_WRITE": ValueOf(syscall.GENERIC_WRITE), + "GetAcceptExSockaddrs": ValueOf(syscall.GetAcceptExSockaddrs), + "GetAdaptersInfo": ValueOf(syscall.GetAdaptersInfo), + "GetAddrInfoW": ValueOf(syscall.GetAddrInfoW), + "GetCommandLine": ValueOf(syscall.GetCommandLine), + "GetComputerName": ValueOf(syscall.GetComputerName), + "GetConsoleMode": ValueOf(syscall.GetConsoleMode), + "GetCurrentDirectory": ValueOf(syscall.GetCurrentDirectory), + "GetCurrentProcess": ValueOf(syscall.GetCurrentProcess), + "GetEnvironmentStrings": ValueOf(syscall.GetEnvironmentStrings), + "GetEnvironmentVariable": ValueOf(syscall.GetEnvironmentVariable), + "GetExitCodeProcess": ValueOf(syscall.GetExitCodeProcess), + "GetFileAttributes": ValueOf(syscall.GetFileAttributes), + "GetFileAttributesEx": ValueOf(syscall.GetFileAttributesEx), + "GetFileExInfoStandard": ValueOf(syscall.GetFileExInfoStandard), + "GetFileExMaxInfoLevel": ValueOf(syscall.GetFileExMaxInfoLevel), + "GetFileInformationByHandle": ValueOf(syscall.GetFileInformationByHandle), + "GetFileType": ValueOf(syscall.GetFileType), + "GetFullPathName": ValueOf(syscall.GetFullPathName), + "GetHostByName": ValueOf(syscall.GetHostByName), + "GetIfEntry": ValueOf(syscall.GetIfEntry), + "GetLastError": ValueOf(syscall.GetLastError), + "GetLengthSid": ValueOf(syscall.GetLengthSid), + "GetLongPathName": ValueOf(syscall.GetLongPathName), + "GetProcAddress": ValueOf(syscall.GetProcAddress), + "GetProcessTimes": ValueOf(syscall.GetProcessTimes), + "GetProtoByName": ValueOf(syscall.GetProtoByName), + "GetQueuedCompletionStatus": ValueOf(syscall.GetQueuedCompletionStatus), + "GetServByName": ValueOf(syscall.GetServByName), + "GetShortPathName": ValueOf(syscall.GetShortPathName), + "GetStartupInfo": ValueOf(syscall.GetStartupInfo), + "GetStdHandle": ValueOf(syscall.GetStdHandle), + "GetSystemTimeAsFileTime": ValueOf(syscall.GetSystemTimeAsFileTime), + "GetTempPath": ValueOf(syscall.GetTempPath), + "GetTimeZoneInformation": ValueOf(syscall.GetTimeZoneInformation), + "GetTokenInformation": ValueOf(syscall.GetTokenInformation), + "GetUserNameEx": ValueOf(syscall.GetUserNameEx), + "GetUserProfileDirectory": ValueOf(syscall.GetUserProfileDirectory), + "GetVersion": ValueOf(syscall.GetVersion), + "Getegid": ValueOf(syscall.Getegid), + "Getenv": ValueOf(syscall.Getenv), + "Geteuid": ValueOf(syscall.Geteuid), + "Getgid": ValueOf(syscall.Getgid), + "Getgroups": ValueOf(syscall.Getgroups), + "Getpagesize": ValueOf(syscall.Getpagesize), + "Getpeername": ValueOf(syscall.Getpeername), + "Getpid": ValueOf(syscall.Getpid), + "Getppid": ValueOf(syscall.Getppid), + "Getsockname": ValueOf(syscall.Getsockname), + "Getsockopt": ValueOf(syscall.Getsockopt), + "GetsockoptInt": ValueOf(syscall.GetsockoptInt), + "Gettimeofday": ValueOf(syscall.Gettimeofday), + "Getuid": ValueOf(syscall.Getuid), + "Getwd": ValueOf(syscall.Getwd), + "HANDLE_FLAG_INHERIT": ValueOf(syscall.HANDLE_FLAG_INHERIT), + "HKEY_CLASSES_ROOT": ValueOf(uint32(syscall.HKEY_CLASSES_ROOT)), + "HKEY_CURRENT_CONFIG": ValueOf(uint32(syscall.HKEY_CURRENT_CONFIG)), + "HKEY_CURRENT_USER": ValueOf(uint32(syscall.HKEY_CURRENT_USER)), + "HKEY_DYN_DATA": ValueOf(uint32(syscall.HKEY_DYN_DATA)), + "HKEY_LOCAL_MACHINE": ValueOf(uint32(syscall.HKEY_LOCAL_MACHINE)), + "HKEY_PERFORMANCE_DATA": ValueOf(uint32(syscall.HKEY_PERFORMANCE_DATA)), + "HKEY_USERS": ValueOf(uint32(syscall.HKEY_USERS)), + "IFF_BROADCAST": ValueOf(syscall.IFF_BROADCAST), + "IFF_LOOPBACK": ValueOf(syscall.IFF_LOOPBACK), + "IFF_MULTICAST": ValueOf(syscall.IFF_MULTICAST), + "IFF_POINTTOPOINT": ValueOf(syscall.IFF_POINTTOPOINT), + "IFF_UP": ValueOf(syscall.IFF_UP), + "IGNORE": ValueOf(syscall.IGNORE), + "INFINITE": ValueOf(uint32(syscall.INFINITE)), + "INVALID_FILE_ATTRIBUTES": ValueOf(uint32(syscall.INVALID_FILE_ATTRIBUTES)), + "IOC_IN": ValueOf(uint32(syscall.IOC_IN)), + "IOC_INOUT": ValueOf(uint32(syscall.IOC_INOUT)), + "IOC_OUT": ValueOf(syscall.IOC_OUT), + "IOC_VENDOR": ValueOf(syscall.IOC_VENDOR), + "IOC_WS2": ValueOf(syscall.IOC_WS2), + "IO_REPARSE_TAG_SYMLINK": ValueOf(uint32(syscall.IO_REPARSE_TAG_SYMLINK)), + "IPPROTO_IP": ValueOf(syscall.IPPROTO_IP), + "IPPROTO_IPV6": ValueOf(syscall.IPPROTO_IPV6), + "IPPROTO_TCP": ValueOf(syscall.IPPROTO_TCP), + "IPPROTO_UDP": ValueOf(syscall.IPPROTO_UDP), + "IPV6_JOIN_GROUP": ValueOf(syscall.IPV6_JOIN_GROUP), + "IPV6_LEAVE_GROUP": ValueOf(syscall.IPV6_LEAVE_GROUP), + "IPV6_MULTICAST_HOPS": ValueOf(syscall.IPV6_MULTICAST_HOPS), + "IPV6_MULTICAST_IF": ValueOf(syscall.IPV6_MULTICAST_IF), + "IPV6_MULTICAST_LOOP": ValueOf(syscall.IPV6_MULTICAST_LOOP), + "IPV6_UNICAST_HOPS": ValueOf(syscall.IPV6_UNICAST_HOPS), + "IPV6_V6ONLY": ValueOf(syscall.IPV6_V6ONLY), + "IP_ADD_MEMBERSHIP": ValueOf(syscall.IP_ADD_MEMBERSHIP), + "IP_DROP_MEMBERSHIP": ValueOf(syscall.IP_DROP_MEMBERSHIP), + "IP_MULTICAST_IF": ValueOf(syscall.IP_MULTICAST_IF), + "IP_MULTICAST_LOOP": ValueOf(syscall.IP_MULTICAST_LOOP), + "IP_MULTICAST_TTL": ValueOf(syscall.IP_MULTICAST_TTL), + "IP_TOS": ValueOf(syscall.IP_TOS), + "IP_TTL": ValueOf(syscall.IP_TTL), + "ImplementsGetwd": ValueOf(syscall.ImplementsGetwd), + "InvalidHandle": ValueOf(uint64(syscall.InvalidHandle)), + "KEY_ALL_ACCESS": ValueOf(syscall.KEY_ALL_ACCESS), + "KEY_CREATE_LINK": ValueOf(syscall.KEY_CREATE_LINK), + "KEY_CREATE_SUB_KEY": ValueOf(syscall.KEY_CREATE_SUB_KEY), + "KEY_ENUMERATE_SUB_KEYS": ValueOf(syscall.KEY_ENUMERATE_SUB_KEYS), + "KEY_EXECUTE": ValueOf(syscall.KEY_EXECUTE), + "KEY_NOTIFY": ValueOf(syscall.KEY_NOTIFY), + "KEY_QUERY_VALUE": ValueOf(syscall.KEY_QUERY_VALUE), + "KEY_READ": ValueOf(syscall.KEY_READ), + "KEY_SET_VALUE": ValueOf(syscall.KEY_SET_VALUE), + "KEY_WOW64_32KEY": ValueOf(syscall.KEY_WOW64_32KEY), + "KEY_WOW64_64KEY": ValueOf(syscall.KEY_WOW64_64KEY), + "KEY_WRITE": ValueOf(syscall.KEY_WRITE), + "LANG_ENGLISH": ValueOf(syscall.LANG_ENGLISH), + "LAYERED_PROTOCOL": ValueOf(syscall.LAYERED_PROTOCOL), + "Lchown": ValueOf(syscall.Lchown), + "Link": ValueOf(syscall.Link), + "Listen": ValueOf(syscall.Listen), + "LoadCancelIoEx": ValueOf(syscall.LoadCancelIoEx), + "LoadConnectEx": ValueOf(syscall.LoadConnectEx), + "LoadCreateSymbolicLink": ValueOf(syscall.LoadCreateSymbolicLink), + "LoadDLL": ValueOf(syscall.LoadDLL), + "LoadGetAddrInfo": ValueOf(syscall.LoadGetAddrInfo), + "LoadLibrary": ValueOf(syscall.LoadLibrary), + "LoadSetFileCompletionNotificationModes": ValueOf(syscall.LoadSetFileCompletionNotificationModes), + "LocalFree": ValueOf(syscall.LocalFree), + "LookupAccountName": ValueOf(syscall.LookupAccountName), + "LookupAccountSid": ValueOf(syscall.LookupAccountSid), + "LookupSID": ValueOf(syscall.LookupSID), + "MAXIMUM_REPARSE_DATA_BUFFER_SIZE": ValueOf(syscall.MAXIMUM_REPARSE_DATA_BUFFER_SIZE), + "MAXLEN_IFDESCR": ValueOf(syscall.MAXLEN_IFDESCR), + "MAXLEN_PHYSADDR": ValueOf(syscall.MAXLEN_PHYSADDR), + "MAX_ADAPTER_ADDRESS_LENGTH": ValueOf(syscall.MAX_ADAPTER_ADDRESS_LENGTH), + "MAX_ADAPTER_DESCRIPTION_LENGTH": ValueOf(syscall.MAX_ADAPTER_DESCRIPTION_LENGTH), + "MAX_ADAPTER_NAME_LENGTH": ValueOf(syscall.MAX_ADAPTER_NAME_LENGTH), + "MAX_COMPUTERNAME_LENGTH": ValueOf(syscall.MAX_COMPUTERNAME_LENGTH), + "MAX_INTERFACE_NAME_LEN": ValueOf(syscall.MAX_INTERFACE_NAME_LEN), + "MAX_LONG_PATH": ValueOf(syscall.MAX_LONG_PATH), + "MAX_PATH": ValueOf(syscall.MAX_PATH), + "MAX_PROTOCOL_CHAIN": ValueOf(syscall.MAX_PROTOCOL_CHAIN), + "MapViewOfFile": ValueOf(syscall.MapViewOfFile), + "MaxTokenInfoClass": ValueOf(syscall.MaxTokenInfoClass), + "Mkdir": ValueOf(syscall.Mkdir), + "MoveFile": ValueOf(syscall.MoveFile), + "MustLoadDLL": ValueOf(syscall.MustLoadDLL), + "NameCanonical": ValueOf(syscall.NameCanonical), + "NameCanonicalEx": ValueOf(syscall.NameCanonicalEx), + "NameDisplay": ValueOf(syscall.NameDisplay), + "NameDnsDomain": ValueOf(syscall.NameDnsDomain), + "NameFullyQualifiedDN": ValueOf(syscall.NameFullyQualifiedDN), + "NameSamCompatible": ValueOf(syscall.NameSamCompatible), + "NameServicePrincipal": ValueOf(syscall.NameServicePrincipal), + "NameUniqueId": ValueOf(syscall.NameUniqueId), + "NameUnknown": ValueOf(syscall.NameUnknown), + "NameUserPrincipal": ValueOf(syscall.NameUserPrincipal), + "NetApiBufferFree": ValueOf(syscall.NetApiBufferFree), + "NetGetJoinInformation": ValueOf(syscall.NetGetJoinInformation), + "NetSetupDomainName": ValueOf(syscall.NetSetupDomainName), + "NetSetupUnjoined": ValueOf(syscall.NetSetupUnjoined), + "NetSetupUnknownStatus": ValueOf(syscall.NetSetupUnknownStatus), + "NetSetupWorkgroupName": ValueOf(syscall.NetSetupWorkgroupName), + "NetUserGetInfo": ValueOf(syscall.NetUserGetInfo), + "NewCallback": ValueOf(syscall.NewCallback), + "NewCallbackCDecl": ValueOf(syscall.NewCallbackCDecl), + "NewLazyDLL": ValueOf(syscall.NewLazyDLL), + "NsecToFiletime": ValueOf(syscall.NsecToFiletime), + "NsecToTimespec": ValueOf(syscall.NsecToTimespec), + "NsecToTimeval": ValueOf(syscall.NsecToTimeval), + "Ntohs": ValueOf(syscall.Ntohs), + "OID_PKIX_KP_SERVER_AUTH": ValueOf(&syscall.OID_PKIX_KP_SERVER_AUTH).Elem(), + "OID_SERVER_GATED_CRYPTO": ValueOf(&syscall.OID_SERVER_GATED_CRYPTO).Elem(), + "OID_SGC_NETSCAPE": ValueOf(&syscall.OID_SGC_NETSCAPE).Elem(), + "OPEN_ALWAYS": ValueOf(syscall.OPEN_ALWAYS), + "OPEN_EXISTING": ValueOf(syscall.OPEN_EXISTING), + "O_APPEND": ValueOf(syscall.O_APPEND), + "O_ASYNC": ValueOf(syscall.O_ASYNC), + "O_CLOEXEC": ValueOf(syscall.O_CLOEXEC), + "O_CREAT": ValueOf(syscall.O_CREAT), + "O_EXCL": ValueOf(syscall.O_EXCL), + "O_NOCTTY": ValueOf(syscall.O_NOCTTY), + "O_NONBLOCK": ValueOf(syscall.O_NONBLOCK), + "O_RDONLY": ValueOf(syscall.O_RDONLY), + "O_RDWR": ValueOf(syscall.O_RDWR), + "O_SYNC": ValueOf(syscall.O_SYNC), + "O_TRUNC": ValueOf(syscall.O_TRUNC), + "O_WRONLY": ValueOf(syscall.O_WRONLY), + "Open": ValueOf(syscall.Open), + "OpenCurrentProcessToken": ValueOf(syscall.OpenCurrentProcessToken), + "OpenProcess": ValueOf(syscall.OpenProcess), + "OpenProcessToken": ValueOf(syscall.OpenProcessToken), + "PAGE_EXECUTE_READ": ValueOf(syscall.PAGE_EXECUTE_READ), + "PAGE_EXECUTE_READWRITE": ValueOf(syscall.PAGE_EXECUTE_READWRITE), + "PAGE_EXECUTE_WRITECOPY": ValueOf(syscall.PAGE_EXECUTE_WRITECOPY), + "PAGE_READONLY": ValueOf(syscall.PAGE_READONLY), + "PAGE_READWRITE": ValueOf(syscall.PAGE_READWRITE), + "PAGE_WRITECOPY": ValueOf(syscall.PAGE_WRITECOPY), + "PFL_HIDDEN": ValueOf(syscall.PFL_HIDDEN), + "PFL_MATCHES_PROTOCOL_ZERO": ValueOf(syscall.PFL_MATCHES_PROTOCOL_ZERO), + "PFL_MULTIPLE_PROTO_ENTRIES": ValueOf(syscall.PFL_MULTIPLE_PROTO_ENTRIES), + "PFL_NETWORKDIRECT_PROVIDER": ValueOf(syscall.PFL_NETWORKDIRECT_PROVIDER), + "PFL_RECOMMENDED_PROTO_ENTRY": ValueOf(syscall.PFL_RECOMMENDED_PROTO_ENTRY), + "PKCS_7_ASN_ENCODING": ValueOf(syscall.PKCS_7_ASN_ENCODING), + "PROCESS_QUERY_INFORMATION": ValueOf(syscall.PROCESS_QUERY_INFORMATION), + "PROCESS_TERMINATE": ValueOf(syscall.PROCESS_TERMINATE), + "PROV_DH_SCHANNEL": ValueOf(syscall.PROV_DH_SCHANNEL), + "PROV_DSS": ValueOf(syscall.PROV_DSS), + "PROV_DSS_DH": ValueOf(syscall.PROV_DSS_DH), + "PROV_EC_ECDSA_FULL": ValueOf(syscall.PROV_EC_ECDSA_FULL), + "PROV_EC_ECDSA_SIG": ValueOf(syscall.PROV_EC_ECDSA_SIG), + "PROV_EC_ECNRA_FULL": ValueOf(syscall.PROV_EC_ECNRA_FULL), + "PROV_EC_ECNRA_SIG": ValueOf(syscall.PROV_EC_ECNRA_SIG), + "PROV_FORTEZZA": ValueOf(syscall.PROV_FORTEZZA), + "PROV_INTEL_SEC": ValueOf(syscall.PROV_INTEL_SEC), + "PROV_MS_EXCHANGE": ValueOf(syscall.PROV_MS_EXCHANGE), + "PROV_REPLACE_OWF": ValueOf(syscall.PROV_REPLACE_OWF), + "PROV_RNG": ValueOf(syscall.PROV_RNG), + "PROV_RSA_AES": ValueOf(syscall.PROV_RSA_AES), + "PROV_RSA_FULL": ValueOf(syscall.PROV_RSA_FULL), + "PROV_RSA_SCHANNEL": ValueOf(syscall.PROV_RSA_SCHANNEL), + "PROV_RSA_SIG": ValueOf(syscall.PROV_RSA_SIG), + "PROV_SPYRUS_LYNKS": ValueOf(syscall.PROV_SPYRUS_LYNKS), + "PROV_SSL": ValueOf(syscall.PROV_SSL), + "Pipe": ValueOf(syscall.Pipe), + "PostQueuedCompletionStatus": ValueOf(syscall.PostQueuedCompletionStatus), + "Process32First": ValueOf(syscall.Process32First), + "Process32Next": ValueOf(syscall.Process32Next), + "REG_BINARY": ValueOf(syscall.REG_BINARY), + "REG_DWORD": ValueOf(syscall.REG_DWORD), + "REG_DWORD_BIG_ENDIAN": ValueOf(syscall.REG_DWORD_BIG_ENDIAN), + "REG_DWORD_LITTLE_ENDIAN": ValueOf(syscall.REG_DWORD_LITTLE_ENDIAN), + "REG_EXPAND_SZ": ValueOf(syscall.REG_EXPAND_SZ), + "REG_FULL_RESOURCE_DESCRIPTOR": ValueOf(syscall.REG_FULL_RESOURCE_DESCRIPTOR), + "REG_LINK": ValueOf(syscall.REG_LINK), + "REG_MULTI_SZ": ValueOf(syscall.REG_MULTI_SZ), + "REG_NONE": ValueOf(syscall.REG_NONE), + "REG_QWORD": ValueOf(syscall.REG_QWORD), + "REG_QWORD_LITTLE_ENDIAN": ValueOf(syscall.REG_QWORD_LITTLE_ENDIAN), + "REG_RESOURCE_LIST": ValueOf(syscall.REG_RESOURCE_LIST), + "REG_RESOURCE_REQUIREMENTS_LIST": ValueOf(syscall.REG_RESOURCE_REQUIREMENTS_LIST), + "REG_SZ": ValueOf(syscall.REG_SZ), + "Read": ValueOf(syscall.Read), + "ReadConsole": ValueOf(syscall.ReadConsole), + "ReadDirectoryChanges": ValueOf(syscall.ReadDirectoryChanges), + "ReadFile": ValueOf(syscall.ReadFile), + "Readlink": ValueOf(syscall.Readlink), + "Recvfrom": ValueOf(syscall.Recvfrom), + "RegCloseKey": ValueOf(syscall.RegCloseKey), + "RegEnumKeyEx": ValueOf(syscall.RegEnumKeyEx), + "RegOpenKeyEx": ValueOf(syscall.RegOpenKeyEx), + "RegQueryInfoKey": ValueOf(syscall.RegQueryInfoKey), + "RegQueryValueEx": ValueOf(syscall.RegQueryValueEx), + "RemoveDirectory": ValueOf(syscall.RemoveDirectory), + "Rename": ValueOf(syscall.Rename), + "Rmdir": ValueOf(syscall.Rmdir), + "SHUT_RD": ValueOf(syscall.SHUT_RD), + "SHUT_RDWR": ValueOf(syscall.SHUT_RDWR), + "SHUT_WR": ValueOf(syscall.SHUT_WR), + "SIGABRT": ValueOf(syscall.SIGABRT), + "SIGALRM": ValueOf(syscall.SIGALRM), + "SIGBUS": ValueOf(syscall.SIGBUS), + "SIGFPE": ValueOf(syscall.SIGFPE), + "SIGHUP": ValueOf(syscall.SIGHUP), + "SIGILL": ValueOf(syscall.SIGILL), + "SIGINT": ValueOf(syscall.SIGINT), + "SIGKILL": ValueOf(syscall.SIGKILL), + "SIGPIPE": ValueOf(syscall.SIGPIPE), + "SIGQUIT": ValueOf(syscall.SIGQUIT), + "SIGSEGV": ValueOf(syscall.SIGSEGV), + "SIGTERM": ValueOf(syscall.SIGTERM), + "SIGTRAP": ValueOf(syscall.SIGTRAP), + "SIO_GET_EXTENSION_FUNCTION_POINTER": ValueOf(uint32(syscall.SIO_GET_EXTENSION_FUNCTION_POINTER)), + "SIO_GET_INTERFACE_LIST": ValueOf(syscall.SIO_GET_INTERFACE_LIST), + "SIO_KEEPALIVE_VALS": ValueOf(uint32(syscall.SIO_KEEPALIVE_VALS)), + "SIO_UDP_CONNRESET": ValueOf(uint32(syscall.SIO_UDP_CONNRESET)), + "SOCK_DGRAM": ValueOf(syscall.SOCK_DGRAM), + "SOCK_RAW": ValueOf(syscall.SOCK_RAW), + "SOCK_SEQPACKET": ValueOf(syscall.SOCK_SEQPACKET), + "SOCK_STREAM": ValueOf(syscall.SOCK_STREAM), + "SOL_SOCKET": ValueOf(syscall.SOL_SOCKET), + "SOMAXCONN": ValueOf(syscall.SOMAXCONN), + "SO_BROADCAST": ValueOf(syscall.SO_BROADCAST), + "SO_DONTROUTE": ValueOf(syscall.SO_DONTROUTE), + "SO_KEEPALIVE": ValueOf(syscall.SO_KEEPALIVE), + "SO_LINGER": ValueOf(syscall.SO_LINGER), + "SO_RCVBUF": ValueOf(syscall.SO_RCVBUF), + "SO_REUSEADDR": ValueOf(syscall.SO_REUSEADDR), + "SO_SNDBUF": ValueOf(syscall.SO_SNDBUF), + "SO_UPDATE_ACCEPT_CONTEXT": ValueOf(syscall.SO_UPDATE_ACCEPT_CONTEXT), + "SO_UPDATE_CONNECT_CONTEXT": ValueOf(syscall.SO_UPDATE_CONNECT_CONTEXT), + "STANDARD_RIGHTS_ALL": ValueOf(syscall.STANDARD_RIGHTS_ALL), + "STANDARD_RIGHTS_EXECUTE": ValueOf(syscall.STANDARD_RIGHTS_EXECUTE), + "STANDARD_RIGHTS_READ": ValueOf(syscall.STANDARD_RIGHTS_READ), + "STANDARD_RIGHTS_REQUIRED": ValueOf(syscall.STANDARD_RIGHTS_REQUIRED), + "STANDARD_RIGHTS_WRITE": ValueOf(syscall.STANDARD_RIGHTS_WRITE), + "STARTF_USESHOWWINDOW": ValueOf(syscall.STARTF_USESHOWWINDOW), + "STARTF_USESTDHANDLES": ValueOf(syscall.STARTF_USESTDHANDLES), + "STD_ERROR_HANDLE": ValueOf(syscall.STD_ERROR_HANDLE), + "STD_INPUT_HANDLE": ValueOf(syscall.STD_INPUT_HANDLE), + "STD_OUTPUT_HANDLE": ValueOf(syscall.STD_OUTPUT_HANDLE), + "SUBLANG_ENGLISH_US": ValueOf(syscall.SUBLANG_ENGLISH_US), + "SW_FORCEMINIMIZE": ValueOf(syscall.SW_FORCEMINIMIZE), + "SW_HIDE": ValueOf(syscall.SW_HIDE), + "SW_MAXIMIZE": ValueOf(syscall.SW_MAXIMIZE), + "SW_MINIMIZE": ValueOf(syscall.SW_MINIMIZE), + "SW_NORMAL": ValueOf(syscall.SW_NORMAL), + "SW_RESTORE": ValueOf(syscall.SW_RESTORE), + "SW_SHOW": ValueOf(syscall.SW_SHOW), + "SW_SHOWDEFAULT": ValueOf(syscall.SW_SHOWDEFAULT), + "SW_SHOWMAXIMIZED": ValueOf(syscall.SW_SHOWMAXIMIZED), + "SW_SHOWMINIMIZED": ValueOf(syscall.SW_SHOWMINIMIZED), + "SW_SHOWMINNOACTIVE": ValueOf(syscall.SW_SHOWMINNOACTIVE), + "SW_SHOWNA": ValueOf(syscall.SW_SHOWNA), + "SW_SHOWNOACTIVATE": ValueOf(syscall.SW_SHOWNOACTIVATE), + "SW_SHOWNORMAL": ValueOf(syscall.SW_SHOWNORMAL), + "SYMBOLIC_LINK_FLAG_DIRECTORY": ValueOf(syscall.SYMBOLIC_LINK_FLAG_DIRECTORY), + "SYNCHRONIZE": ValueOf(syscall.SYNCHRONIZE), + "S_IFBLK": ValueOf(syscall.S_IFBLK), + "S_IFCHR": ValueOf(syscall.S_IFCHR), + "S_IFDIR": ValueOf(syscall.S_IFDIR), + "S_IFIFO": ValueOf(syscall.S_IFIFO), + "S_IFLNK": ValueOf(syscall.S_IFLNK), + "S_IFMT": ValueOf(syscall.S_IFMT), + "S_IFREG": ValueOf(syscall.S_IFREG), + "S_IFSOCK": ValueOf(syscall.S_IFSOCK), + "S_IRUSR": ValueOf(syscall.S_IRUSR), + "S_ISGID": ValueOf(syscall.S_ISGID), + "S_ISUID": ValueOf(syscall.S_ISUID), + "S_ISVTX": ValueOf(syscall.S_ISVTX), + "S_IWRITE": ValueOf(syscall.S_IWRITE), + "S_IWUSR": ValueOf(syscall.S_IWUSR), + "S_IXUSR": ValueOf(syscall.S_IXUSR), + "Seek": ValueOf(syscall.Seek), + "Sendto": ValueOf(syscall.Sendto), + "SetCurrentDirectory": ValueOf(syscall.SetCurrentDirectory), + "SetEndOfFile": ValueOf(syscall.SetEndOfFile), + "SetEnvironmentVariable": ValueOf(syscall.SetEnvironmentVariable), + "SetFileAttributes": ValueOf(syscall.SetFileAttributes), + "SetFileCompletionNotificationModes": ValueOf(syscall.SetFileCompletionNotificationModes), + "SetFilePointer": ValueOf(syscall.SetFilePointer), + "SetFileTime": ValueOf(syscall.SetFileTime), + "SetHandleInformation": ValueOf(syscall.SetHandleInformation), + "SetNonblock": ValueOf(syscall.SetNonblock), + "Setenv": ValueOf(syscall.Setenv), + "Setsockopt": ValueOf(syscall.Setsockopt), + "SetsockoptIPMreq": ValueOf(syscall.SetsockoptIPMreq), + "SetsockoptIPv6Mreq": ValueOf(syscall.SetsockoptIPv6Mreq), + "SetsockoptInet4Addr": ValueOf(syscall.SetsockoptInet4Addr), + "SetsockoptInt": ValueOf(syscall.SetsockoptInt), + "SetsockoptLinger": ValueOf(syscall.SetsockoptLinger), + "SetsockoptTimeval": ValueOf(syscall.SetsockoptTimeval), + "Shutdown": ValueOf(syscall.Shutdown), + "SidTypeAlias": ValueOf(syscall.SidTypeAlias), + "SidTypeComputer": ValueOf(syscall.SidTypeComputer), + "SidTypeDeletedAccount": ValueOf(syscall.SidTypeDeletedAccount), + "SidTypeDomain": ValueOf(syscall.SidTypeDomain), + "SidTypeGroup": ValueOf(syscall.SidTypeGroup), + "SidTypeInvalid": ValueOf(syscall.SidTypeInvalid), + "SidTypeLabel": ValueOf(syscall.SidTypeLabel), + "SidTypeUnknown": ValueOf(syscall.SidTypeUnknown), + "SidTypeUser": ValueOf(syscall.SidTypeUser), + "SidTypeWellKnownGroup": ValueOf(syscall.SidTypeWellKnownGroup), + "Socket": ValueOf(syscall.Socket), + "SocketDisableIPv6": ValueOf(&syscall.SocketDisableIPv6).Elem(), + "StartProcess": ValueOf(syscall.StartProcess), + "Stderr": ValueOf(&syscall.Stderr).Elem(), + "Stdin": ValueOf(&syscall.Stdin).Elem(), + "Stdout": ValueOf(&syscall.Stdout).Elem(), + "StringBytePtr": ValueOf(syscall.StringBytePtr), + "StringByteSlice": ValueOf(syscall.StringByteSlice), + "StringToSid": ValueOf(syscall.StringToSid), + "StringToUTF16": ValueOf(syscall.StringToUTF16), + "StringToUTF16Ptr": ValueOf(syscall.StringToUTF16Ptr), + "Symlink": ValueOf(syscall.Symlink), + "Syscall": ValueOf(syscall.Syscall), + "Syscall12": ValueOf(syscall.Syscall12), + "Syscall15": ValueOf(syscall.Syscall15), + "Syscall6": ValueOf(syscall.Syscall6), + "Syscall9": ValueOf(syscall.Syscall9), + "TCP_NODELAY": ValueOf(syscall.TCP_NODELAY), + "TF_DISCONNECT": ValueOf(syscall.TF_DISCONNECT), + "TF_REUSE_SOCKET": ValueOf(syscall.TF_REUSE_SOCKET), + "TF_USE_DEFAULT_WORKER": ValueOf(syscall.TF_USE_DEFAULT_WORKER), + "TF_USE_KERNEL_APC": ValueOf(syscall.TF_USE_KERNEL_APC), + "TF_USE_SYSTEM_THREAD": ValueOf(syscall.TF_USE_SYSTEM_THREAD), + "TF_WRITE_BEHIND": ValueOf(syscall.TF_WRITE_BEHIND), + "TH32CS_INHERIT": ValueOf(uint32(syscall.TH32CS_INHERIT)), + "TH32CS_SNAPALL": ValueOf(syscall.TH32CS_SNAPALL), + "TH32CS_SNAPHEAPLIST": ValueOf(syscall.TH32CS_SNAPHEAPLIST), + "TH32CS_SNAPMODULE": ValueOf(syscall.TH32CS_SNAPMODULE), + "TH32CS_SNAPMODULE32": ValueOf(syscall.TH32CS_SNAPMODULE32), + "TH32CS_SNAPPROCESS": ValueOf(syscall.TH32CS_SNAPPROCESS), + "TH32CS_SNAPTHREAD": ValueOf(syscall.TH32CS_SNAPTHREAD), + "TIME_ZONE_ID_DAYLIGHT": ValueOf(syscall.TIME_ZONE_ID_DAYLIGHT), + "TIME_ZONE_ID_STANDARD": ValueOf(syscall.TIME_ZONE_ID_STANDARD), + "TIME_ZONE_ID_UNKNOWN": ValueOf(syscall.TIME_ZONE_ID_UNKNOWN), + "TOKEN_ADJUST_DEFAULT": ValueOf(syscall.TOKEN_ADJUST_DEFAULT), + "TOKEN_ADJUST_GROUPS": ValueOf(syscall.TOKEN_ADJUST_GROUPS), + "TOKEN_ADJUST_PRIVILEGES": ValueOf(syscall.TOKEN_ADJUST_PRIVILEGES), + "TOKEN_ALL_ACCESS": ValueOf(syscall.TOKEN_ALL_ACCESS), + "TOKEN_ASSIGN_PRIMARY": ValueOf(syscall.TOKEN_ASSIGN_PRIMARY), + "TOKEN_DUPLICATE": ValueOf(syscall.TOKEN_DUPLICATE), + "TOKEN_EXECUTE": ValueOf(syscall.TOKEN_EXECUTE), + "TOKEN_IMPERSONATE": ValueOf(syscall.TOKEN_IMPERSONATE), + "TOKEN_QUERY": ValueOf(syscall.TOKEN_QUERY), + "TOKEN_QUERY_SOURCE": ValueOf(syscall.TOKEN_QUERY_SOURCE), + "TOKEN_READ": ValueOf(syscall.TOKEN_READ), + "TOKEN_WRITE": ValueOf(syscall.TOKEN_WRITE), + "TRUNCATE_EXISTING": ValueOf(syscall.TRUNCATE_EXISTING), + "TerminateProcess": ValueOf(syscall.TerminateProcess), + "TimespecToNsec": ValueOf(syscall.TimespecToNsec), + "TokenAccessInformation": ValueOf(syscall.TokenAccessInformation), + "TokenAuditPolicy": ValueOf(syscall.TokenAuditPolicy), + "TokenDefaultDacl": ValueOf(syscall.TokenDefaultDacl), + "TokenElevation": ValueOf(syscall.TokenElevation), + "TokenElevationType": ValueOf(syscall.TokenElevationType), + "TokenGroups": ValueOf(syscall.TokenGroups), + "TokenGroupsAndPrivileges": ValueOf(syscall.TokenGroupsAndPrivileges), + "TokenHasRestrictions": ValueOf(syscall.TokenHasRestrictions), + "TokenImpersonationLevel": ValueOf(syscall.TokenImpersonationLevel), + "TokenIntegrityLevel": ValueOf(syscall.TokenIntegrityLevel), + "TokenLinkedToken": ValueOf(syscall.TokenLinkedToken), + "TokenLogonSid": ValueOf(syscall.TokenLogonSid), + "TokenMandatoryPolicy": ValueOf(syscall.TokenMandatoryPolicy), + "TokenOrigin": ValueOf(syscall.TokenOrigin), + "TokenOwner": ValueOf(syscall.TokenOwner), + "TokenPrimaryGroup": ValueOf(syscall.TokenPrimaryGroup), + "TokenPrivileges": ValueOf(syscall.TokenPrivileges), + "TokenRestrictedSids": ValueOf(syscall.TokenRestrictedSids), + "TokenSandBoxInert": ValueOf(syscall.TokenSandBoxInert), + "TokenSessionId": ValueOf(syscall.TokenSessionId), + "TokenSessionReference": ValueOf(syscall.TokenSessionReference), + "TokenSource": ValueOf(syscall.TokenSource), + "TokenStatistics": ValueOf(syscall.TokenStatistics), + "TokenType": ValueOf(syscall.TokenType), + "TokenUIAccess": ValueOf(syscall.TokenUIAccess), + "TokenUser": ValueOf(syscall.TokenUser), + "TokenVirtualizationAllowed": ValueOf(syscall.TokenVirtualizationAllowed), + "TokenVirtualizationEnabled": ValueOf(syscall.TokenVirtualizationEnabled), + "TranslateAccountName": ValueOf(syscall.TranslateAccountName), + "TranslateName": ValueOf(syscall.TranslateName), + "TransmitFile": ValueOf(syscall.TransmitFile), + "USAGE_MATCH_TYPE_AND": ValueOf(syscall.USAGE_MATCH_TYPE_AND), + "USAGE_MATCH_TYPE_OR": ValueOf(syscall.USAGE_MATCH_TYPE_OR), + "UTF16FromString": ValueOf(syscall.UTF16FromString), + "UTF16PtrFromString": ValueOf(syscall.UTF16PtrFromString), + "UTF16ToString": ValueOf(syscall.UTF16ToString), + "Unlink": ValueOf(syscall.Unlink), + "UnmapViewOfFile": ValueOf(syscall.UnmapViewOfFile), + "Unsetenv": ValueOf(syscall.Unsetenv), + "Utimes": ValueOf(syscall.Utimes), + "UtimesNano": ValueOf(syscall.UtimesNano), + "VirtualLock": ValueOf(syscall.VirtualLock), + "VirtualUnlock": ValueOf(syscall.VirtualUnlock), + "WAIT_ABANDONED": ValueOf(syscall.WAIT_ABANDONED), + "WAIT_FAILED": ValueOf(uint32(syscall.WAIT_FAILED)), + "WAIT_OBJECT_0": ValueOf(syscall.WAIT_OBJECT_0), + "WAIT_TIMEOUT": ValueOf(syscall.WAIT_TIMEOUT), + "WSACleanup": ValueOf(syscall.WSACleanup), + "WSADESCRIPTION_LEN": ValueOf(syscall.WSADESCRIPTION_LEN), + "WSAEACCES": ValueOf(syscall.WSAEACCES), + "WSAECONNRESET": ValueOf(syscall.WSAECONNRESET), + "WSAEnumProtocols": ValueOf(syscall.WSAEnumProtocols), + "WSAID_CONNECTEX": ValueOf(&syscall.WSAID_CONNECTEX).Elem(), + "WSAIoctl": ValueOf(syscall.WSAIoctl), + "WSAPROTOCOL_LEN": ValueOf(syscall.WSAPROTOCOL_LEN), + "WSARecv": ValueOf(syscall.WSARecv), + "WSARecvFrom": ValueOf(syscall.WSARecvFrom), + "WSASYS_STATUS_LEN": ValueOf(syscall.WSASYS_STATUS_LEN), + "WSASend": ValueOf(syscall.WSASend), + "WSASendTo": ValueOf(syscall.WSASendTo), + "WSASendto": ValueOf(syscall.WSASendto), + "WSAStartup": ValueOf(syscall.WSAStartup), + "WaitForSingleObject": ValueOf(syscall.WaitForSingleObject), + "Write": ValueOf(syscall.Write), + "WriteConsole": ValueOf(syscall.WriteConsole), + "WriteFile": ValueOf(syscall.WriteFile), + "X509_ASN_ENCODING": ValueOf(syscall.X509_ASN_ENCODING), + "XP1_CONNECTIONLESS": ValueOf(syscall.XP1_CONNECTIONLESS), + "XP1_CONNECT_DATA": ValueOf(syscall.XP1_CONNECT_DATA), + "XP1_DISCONNECT_DATA": ValueOf(syscall.XP1_DISCONNECT_DATA), + "XP1_EXPEDITED_DATA": ValueOf(syscall.XP1_EXPEDITED_DATA), + "XP1_GRACEFUL_CLOSE": ValueOf(syscall.XP1_GRACEFUL_CLOSE), + "XP1_GUARANTEED_DELIVERY": ValueOf(syscall.XP1_GUARANTEED_DELIVERY), + "XP1_GUARANTEED_ORDER": ValueOf(syscall.XP1_GUARANTEED_ORDER), + "XP1_IFS_HANDLES": ValueOf(syscall.XP1_IFS_HANDLES), + "XP1_MESSAGE_ORIENTED": ValueOf(syscall.XP1_MESSAGE_ORIENTED), + "XP1_MULTIPOINT_CONTROL_PLANE": ValueOf(syscall.XP1_MULTIPOINT_CONTROL_PLANE), + "XP1_MULTIPOINT_DATA_PLANE": ValueOf(syscall.XP1_MULTIPOINT_DATA_PLANE), + "XP1_PARTIAL_MESSAGE": ValueOf(syscall.XP1_PARTIAL_MESSAGE), + "XP1_PSEUDO_STREAM": ValueOf(syscall.XP1_PSEUDO_STREAM), + "XP1_QOS_SUPPORTED": ValueOf(syscall.XP1_QOS_SUPPORTED), + "XP1_SAN_SUPPORT_SDP": ValueOf(syscall.XP1_SAN_SUPPORT_SDP), + "XP1_SUPPORT_BROADCAST": ValueOf(syscall.XP1_SUPPORT_BROADCAST), + "XP1_SUPPORT_MULTIPOINT": ValueOf(syscall.XP1_SUPPORT_MULTIPOINT), + "XP1_UNI_RECV": ValueOf(syscall.XP1_UNI_RECV), + "XP1_UNI_SEND": ValueOf(syscall.XP1_UNI_SEND), + }, + Types: map[string]Type{ + "AddrinfoW": TypeOf((*syscall.AddrinfoW)(nil)).Elem(), + "ByHandleFileInformation": TypeOf((*syscall.ByHandleFileInformation)(nil)).Elem(), + "CertChainContext": TypeOf((*syscall.CertChainContext)(nil)).Elem(), + "CertChainElement": TypeOf((*syscall.CertChainElement)(nil)).Elem(), + "CertChainPara": TypeOf((*syscall.CertChainPara)(nil)).Elem(), + "CertChainPolicyPara": TypeOf((*syscall.CertChainPolicyPara)(nil)).Elem(), + "CertChainPolicyStatus": TypeOf((*syscall.CertChainPolicyStatus)(nil)).Elem(), + "CertContext": TypeOf((*syscall.CertContext)(nil)).Elem(), + "CertEnhKeyUsage": TypeOf((*syscall.CertEnhKeyUsage)(nil)).Elem(), + "CertRevocationInfo": TypeOf((*syscall.CertRevocationInfo)(nil)).Elem(), + "CertSimpleChain": TypeOf((*syscall.CertSimpleChain)(nil)).Elem(), + "CertTrustStatus": TypeOf((*syscall.CertTrustStatus)(nil)).Elem(), + "CertUsageMatch": TypeOf((*syscall.CertUsageMatch)(nil)).Elem(), + "DLL": TypeOf((*syscall.DLL)(nil)).Elem(), + "DLLError": TypeOf((*syscall.DLLError)(nil)).Elem(), + "DNSMXData": TypeOf((*syscall.DNSMXData)(nil)).Elem(), + "DNSPTRData": TypeOf((*syscall.DNSPTRData)(nil)).Elem(), + "DNSRecord": TypeOf((*syscall.DNSRecord)(nil)).Elem(), + "DNSSRVData": TypeOf((*syscall.DNSSRVData)(nil)).Elem(), + "DNSTXTData": TypeOf((*syscall.DNSTXTData)(nil)).Elem(), + "Errno": TypeOf((*syscall.Errno)(nil)).Elem(), + "FileNotifyInformation": TypeOf((*syscall.FileNotifyInformation)(nil)).Elem(), + "Filetime": TypeOf((*syscall.Filetime)(nil)).Elem(), + "GUID": TypeOf((*syscall.GUID)(nil)).Elem(), + "Handle": TypeOf((*syscall.Handle)(nil)).Elem(), + "Hostent": TypeOf((*syscall.Hostent)(nil)).Elem(), + "IPMreq": TypeOf((*syscall.IPMreq)(nil)).Elem(), + "IPv6Mreq": TypeOf((*syscall.IPv6Mreq)(nil)).Elem(), + "InterfaceInfo": TypeOf((*syscall.InterfaceInfo)(nil)).Elem(), + "IpAdapterInfo": TypeOf((*syscall.IpAdapterInfo)(nil)).Elem(), + "IpAddrString": TypeOf((*syscall.IpAddrString)(nil)).Elem(), + "IpAddressString": TypeOf((*syscall.IpAddressString)(nil)).Elem(), + "IpMaskString": TypeOf((*syscall.IpMaskString)(nil)).Elem(), + "LazyDLL": TypeOf((*syscall.LazyDLL)(nil)).Elem(), + "LazyProc": TypeOf((*syscall.LazyProc)(nil)).Elem(), + "Linger": TypeOf((*syscall.Linger)(nil)).Elem(), + "MibIfRow": TypeOf((*syscall.MibIfRow)(nil)).Elem(), + "Overlapped": TypeOf((*syscall.Overlapped)(nil)).Elem(), + "Proc": TypeOf((*syscall.Proc)(nil)).Elem(), + "ProcAttr": TypeOf((*syscall.ProcAttr)(nil)).Elem(), + "ProcessEntry32": TypeOf((*syscall.ProcessEntry32)(nil)).Elem(), + "ProcessInformation": TypeOf((*syscall.ProcessInformation)(nil)).Elem(), + "Protoent": TypeOf((*syscall.Protoent)(nil)).Elem(), + "RawSockaddr": TypeOf((*syscall.RawSockaddr)(nil)).Elem(), + "RawSockaddrAny": TypeOf((*syscall.RawSockaddrAny)(nil)).Elem(), + "RawSockaddrInet4": TypeOf((*syscall.RawSockaddrInet4)(nil)).Elem(), + "RawSockaddrInet6": TypeOf((*syscall.RawSockaddrInet6)(nil)).Elem(), + "Rusage": TypeOf((*syscall.Rusage)(nil)).Elem(), + "SID": TypeOf((*syscall.SID)(nil)).Elem(), + "SIDAndAttributes": TypeOf((*syscall.SIDAndAttributes)(nil)).Elem(), + "SSLExtraCertChainPolicyPara": TypeOf((*syscall.SSLExtraCertChainPolicyPara)(nil)).Elem(), + "SecurityAttributes": TypeOf((*syscall.SecurityAttributes)(nil)).Elem(), + "Servent": TypeOf((*syscall.Servent)(nil)).Elem(), + "Signal": TypeOf((*syscall.Signal)(nil)).Elem(), + "Sockaddr": TypeOf((*syscall.Sockaddr)(nil)).Elem(), + "SockaddrGen": TypeOf((*syscall.SockaddrGen)(nil)).Elem(), + "SockaddrInet4": TypeOf((*syscall.SockaddrInet4)(nil)).Elem(), + "SockaddrInet6": TypeOf((*syscall.SockaddrInet6)(nil)).Elem(), + "SockaddrUnix": TypeOf((*syscall.SockaddrUnix)(nil)).Elem(), + "StartupInfo": TypeOf((*syscall.StartupInfo)(nil)).Elem(), + "SysProcAttr": TypeOf((*syscall.SysProcAttr)(nil)).Elem(), + "Systemtime": TypeOf((*syscall.Systemtime)(nil)).Elem(), + "TCPKeepalive": TypeOf((*syscall.TCPKeepalive)(nil)).Elem(), + "Timespec": TypeOf((*syscall.Timespec)(nil)).Elem(), + "Timeval": TypeOf((*syscall.Timeval)(nil)).Elem(), + "Timezoneinformation": TypeOf((*syscall.Timezoneinformation)(nil)).Elem(), + "Token": TypeOf((*syscall.Token)(nil)).Elem(), + "Tokenprimarygroup": TypeOf((*syscall.Tokenprimarygroup)(nil)).Elem(), + "Tokenuser": TypeOf((*syscall.Tokenuser)(nil)).Elem(), + "TransmitFileBuffers": TypeOf((*syscall.TransmitFileBuffers)(nil)).Elem(), + "UserInfo10": TypeOf((*syscall.UserInfo10)(nil)).Elem(), + "WSABuf": TypeOf((*syscall.WSABuf)(nil)).Elem(), + "WSAData": TypeOf((*syscall.WSAData)(nil)).Elem(), + "WSAProtocolChain": TypeOf((*syscall.WSAProtocolChain)(nil)).Elem(), + "WSAProtocolInfo": TypeOf((*syscall.WSAProtocolInfo)(nil)).Elem(), + "WaitStatus": TypeOf((*syscall.WaitStatus)(nil)).Elem(), + "Win32FileAttributeData": TypeOf((*syscall.Win32FileAttributeData)(nil)).Elem(), + "Win32finddata": TypeOf((*syscall.Win32finddata)(nil)).Elem(), + }, + Proxies: map[string]Type{ + } } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/testing.go b/vendor/github.com/cosmos72/gomacro/imports/testing.go new file mode 100644 index 0000000..2c37fb9 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/testing.go @@ -0,0 +1,44 @@ +// this file was generated by gomacro command: import _b "testing" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "testing" +) + +// reflection: allow interpreted code to import "testing" +func init() { + Packages["testing"] = Package{ + Binds: map[string]Value{ + "AllocsPerRun": ValueOf(testing.AllocsPerRun), + "Benchmark": ValueOf(testing.Benchmark), + "CoverMode": ValueOf(testing.CoverMode), + "Coverage": ValueOf(testing.Coverage), + "Main": ValueOf(testing.Main), + "MainStart": ValueOf(testing.MainStart), + "RegisterCover": ValueOf(testing.RegisterCover), + "RunBenchmarks": ValueOf(testing.RunBenchmarks), + "RunExamples": ValueOf(testing.RunExamples), + "RunTests": ValueOf(testing.RunTests), + "Short": ValueOf(testing.Short), + "Verbose": ValueOf(testing.Verbose), + },Types: map[string]Type{ + "B": TypeOf((*testing.B)(nil)).Elem(), + "BenchmarkResult": TypeOf((*testing.BenchmarkResult)(nil)).Elem(), + "Cover": TypeOf((*testing.Cover)(nil)).Elem(), + "CoverBlock": TypeOf((*testing.CoverBlock)(nil)).Elem(), + "InternalBenchmark": TypeOf((*testing.InternalBenchmark)(nil)).Elem(), + "InternalExample": TypeOf((*testing.InternalExample)(nil)).Elem(), + "InternalTest": TypeOf((*testing.InternalTest)(nil)).Elem(), + "M": TypeOf((*testing.M)(nil)).Elem(), + "PB": TypeOf((*testing.PB)(nil)).Elem(), + "T": TypeOf((*testing.T)(nil)).Elem(), + "TB": TypeOf((*testing.TB)(nil)).Elem(), + },Wrappers: map[string][]string{ + "B": []string{"Error","Errorf","Fail","FailNow","Failed","Fatal","Fatalf","Log","Logf","Name","Skip","SkipNow","Skipf","Skipped",}, + "T": []string{"Error","Errorf","Fail","FailNow","Failed","Fatal","Fatalf","Log","Logf","Name","Skip","SkipNow","Skipf","Skipped",}, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/testing_iotest.go b/vendor/github.com/cosmos72/gomacro/imports/testing_iotest.go new file mode 100644 index 0000000..ac2a8aa --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/testing_iotest.go @@ -0,0 +1,25 @@ +// this file was generated by gomacro command: import _b "testing/iotest" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "testing/iotest" +) + +// reflection: allow interpreted code to import "testing/iotest" +func init() { + Packages["testing/iotest"] = Package{ + Binds: map[string]Value{ + "DataErrReader": ValueOf(iotest.DataErrReader), + "ErrTimeout": ValueOf(&iotest.ErrTimeout).Elem(), + "HalfReader": ValueOf(iotest.HalfReader), + "NewReadLogger": ValueOf(iotest.NewReadLogger), + "NewWriteLogger": ValueOf(iotest.NewWriteLogger), + "OneByteReader": ValueOf(iotest.OneByteReader), + "TimeoutReader": ValueOf(iotest.TimeoutReader), + "TruncateWriter": ValueOf(iotest.TruncateWriter), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/testing_quick.go b/vendor/github.com/cosmos72/gomacro/imports/testing_quick.go new file mode 100644 index 0000000..a3c5fd2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/testing_quick.go @@ -0,0 +1,39 @@ +// this file was generated by gomacro command: import _b "testing/quick" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "math/rand" + "reflect" + "testing/quick" +) + +// reflection: allow interpreted code to import "testing/quick" +func init() { + Packages["testing/quick"] = Package{ + Binds: map[string]Value{ + "Check": ValueOf(quick.Check), + "CheckEqual": ValueOf(quick.CheckEqual), + "Value": ValueOf(quick.Value), + },Types: map[string]Type{ + "CheckEqualError": TypeOf((*quick.CheckEqualError)(nil)).Elem(), + "CheckError": TypeOf((*quick.CheckError)(nil)).Elem(), + "Config": TypeOf((*quick.Config)(nil)).Elem(), + "Generator": TypeOf((*quick.Generator)(nil)).Elem(), + "SetupError": TypeOf((*quick.SetupError)(nil)).Elem(), + },Proxies: map[string]Type{ + "Generator": TypeOf((*Generator_testing_quick)(nil)).Elem(), + }, + } +} + +// --------------- proxy for testing/quick.Generator --------------- +type Generator_testing_quick struct { + Object interface{} + Generate_ func(_proxy_obj_ interface{}, rand *rand.Rand, size int) reflect.Value +} +func (Proxy *Generator_testing_quick) Generate(rand *rand.Rand, size int) reflect.Value { + return Proxy.Generate_(Proxy.Object, rand, size) +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/text_scanner.go b/vendor/github.com/cosmos72/gomacro/imports/text_scanner.go new file mode 100644 index 0000000..7fe1419 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/text_scanner.go @@ -0,0 +1,60 @@ +// this file was generated by gomacro command: import _b "text/scanner" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "text/scanner" +) + +// reflection: allow interpreted code to import "text/scanner" +func init() { + Packages["text/scanner"] = Package{ + Binds: map[string]Value{ + "Char": ValueOf(scanner.Char), + "Comment": ValueOf(scanner.Comment), + "EOF": ValueOf(scanner.EOF), + "Float": ValueOf(scanner.Float), + "GoTokens": ValueOf(scanner.GoTokens), + "GoWhitespace": ValueOf(int64(scanner.GoWhitespace)), + "Ident": ValueOf(scanner.Ident), + "Int": ValueOf(scanner.Int), + "RawString": ValueOf(scanner.RawString), + "ScanChars": ValueOf(scanner.ScanChars), + "ScanComments": ValueOf(scanner.ScanComments), + "ScanFloats": ValueOf(scanner.ScanFloats), + "ScanIdents": ValueOf(scanner.ScanIdents), + "ScanInts": ValueOf(scanner.ScanInts), + "ScanRawStrings": ValueOf(scanner.ScanRawStrings), + "ScanStrings": ValueOf(scanner.ScanStrings), + "SkipComments": ValueOf(scanner.SkipComments), + "String": ValueOf(scanner.String), + "TokenString": ValueOf(scanner.TokenString), + },Types: map[string]Type{ + "Position": TypeOf((*scanner.Position)(nil)).Elem(), + "Scanner": TypeOf((*scanner.Scanner)(nil)).Elem(), + },Untypeds: map[string]string{ + "Char": "int:-5", + "Comment": "int:-8", + "EOF": "int:-1", + "Float": "int:-4", + "GoTokens": "int:1012", + "GoWhitespace": "int:4294977024", + "Ident": "int:-2", + "Int": "int:-3", + "RawString": "int:-7", + "ScanChars": "int:32", + "ScanComments": "int:256", + "ScanFloats": "int:16", + "ScanIdents": "int:4", + "ScanInts": "int:8", + "ScanRawStrings": "int:128", + "ScanStrings": "int:64", + "SkipComments": "int:512", + "String": "int:-6", + },Wrappers: map[string][]string{ + "Scanner": []string{"IsValid","String",}, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/text_tabwriter.go b/vendor/github.com/cosmos72/gomacro/imports/text_tabwriter.go new file mode 100644 index 0000000..623fa81 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/text_tabwriter.go @@ -0,0 +1,29 @@ +// this file was generated by gomacro command: import _b "text/tabwriter" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "text/tabwriter" +) + +// reflection: allow interpreted code to import "text/tabwriter" +func init() { + Packages["text/tabwriter"] = Package{ + Binds: map[string]Value{ + "AlignRight": ValueOf(tabwriter.AlignRight), + "Debug": ValueOf(tabwriter.Debug), + "DiscardEmptyColumns": ValueOf(tabwriter.DiscardEmptyColumns), + "Escape": ValueOf(tabwriter.Escape), + "FilterHTML": ValueOf(tabwriter.FilterHTML), + "NewWriter": ValueOf(tabwriter.NewWriter), + "StripEscape": ValueOf(tabwriter.StripEscape), + "TabIndent": ValueOf(tabwriter.TabIndent), + },Types: map[string]Type{ + "Writer": TypeOf((*tabwriter.Writer)(nil)).Elem(), + },Untypeds: map[string]string{ + "Escape": "rune:255", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/text_template.go b/vendor/github.com/cosmos72/gomacro/imports/text_template.go new file mode 100644 index 0000000..6d9324a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/text_template.go @@ -0,0 +1,35 @@ +// this file was generated by gomacro command: import _b "text/template" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "text/template" +) + +// reflection: allow interpreted code to import "text/template" +func init() { + Packages["text/template"] = Package{ + Binds: map[string]Value{ + "HTMLEscape": ValueOf(template.HTMLEscape), + "HTMLEscapeString": ValueOf(template.HTMLEscapeString), + "HTMLEscaper": ValueOf(template.HTMLEscaper), + "IsTrue": ValueOf(template.IsTrue), + "JSEscape": ValueOf(template.JSEscape), + "JSEscapeString": ValueOf(template.JSEscapeString), + "JSEscaper": ValueOf(template.JSEscaper), + "Must": ValueOf(template.Must), + "New": ValueOf(template.New), + "ParseFiles": ValueOf(template.ParseFiles), + "ParseGlob": ValueOf(template.ParseGlob), + "URLQueryEscaper": ValueOf(template.URLQueryEscaper), + },Types: map[string]Type{ + "ExecError": TypeOf((*template.ExecError)(nil)).Elem(), + "FuncMap": TypeOf((*template.FuncMap)(nil)).Elem(), + "Template": TypeOf((*template.Template)(nil)).Elem(), + },Wrappers: map[string][]string{ + "Template": []string{"Copy","ErrorContext",}, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/text_template_parse.go b/vendor/github.com/cosmos72/gomacro/imports/text_template_parse.go new file mode 100644 index 0000000..f604512 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/text_template_parse.go @@ -0,0 +1,83 @@ +// this file was generated by gomacro command: import _b "text/template/parse" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "text/template/parse" +) + +// reflection: allow interpreted code to import "text/template/parse" +func init() { + Packages["text/template/parse"] = Package{ + Binds: map[string]Value{ + "IsEmptyTree": ValueOf(parse.IsEmptyTree), + "New": ValueOf(parse.New), + "NewIdentifier": ValueOf(parse.NewIdentifier), + "NodeAction": ValueOf(parse.NodeAction), + "NodeBool": ValueOf(parse.NodeBool), + "NodeChain": ValueOf(parse.NodeChain), + "NodeCommand": ValueOf(parse.NodeCommand), + "NodeDot": ValueOf(parse.NodeDot), + "NodeField": ValueOf(parse.NodeField), + "NodeIdentifier": ValueOf(parse.NodeIdentifier), + "NodeIf": ValueOf(parse.NodeIf), + "NodeList": ValueOf(parse.NodeList), + "NodeNil": ValueOf(parse.NodeNil), + "NodeNumber": ValueOf(parse.NodeNumber), + "NodePipe": ValueOf(parse.NodePipe), + "NodeRange": ValueOf(parse.NodeRange), + "NodeString": ValueOf(parse.NodeString), + "NodeTemplate": ValueOf(parse.NodeTemplate), + "NodeText": ValueOf(parse.NodeText), + "NodeVariable": ValueOf(parse.NodeVariable), + "NodeWith": ValueOf(parse.NodeWith), + "Parse": ValueOf(parse.Parse), + },Types: map[string]Type{ + "ActionNode": TypeOf((*parse.ActionNode)(nil)).Elem(), + "BoolNode": TypeOf((*parse.BoolNode)(nil)).Elem(), + "BranchNode": TypeOf((*parse.BranchNode)(nil)).Elem(), + "ChainNode": TypeOf((*parse.ChainNode)(nil)).Elem(), + "CommandNode": TypeOf((*parse.CommandNode)(nil)).Elem(), + "DotNode": TypeOf((*parse.DotNode)(nil)).Elem(), + "FieldNode": TypeOf((*parse.FieldNode)(nil)).Elem(), + "IdentifierNode": TypeOf((*parse.IdentifierNode)(nil)).Elem(), + "IfNode": TypeOf((*parse.IfNode)(nil)).Elem(), + "ListNode": TypeOf((*parse.ListNode)(nil)).Elem(), + "NilNode": TypeOf((*parse.NilNode)(nil)).Elem(), + "Node": TypeOf((*parse.Node)(nil)).Elem(), + "NodeType": TypeOf((*parse.NodeType)(nil)).Elem(), + "NumberNode": TypeOf((*parse.NumberNode)(nil)).Elem(), + "PipeNode": TypeOf((*parse.PipeNode)(nil)).Elem(), + "Pos": TypeOf((*parse.Pos)(nil)).Elem(), + "RangeNode": TypeOf((*parse.RangeNode)(nil)).Elem(), + "StringNode": TypeOf((*parse.StringNode)(nil)).Elem(), + "TemplateNode": TypeOf((*parse.TemplateNode)(nil)).Elem(), + "TextNode": TypeOf((*parse.TextNode)(nil)).Elem(), + "Tree": TypeOf((*parse.Tree)(nil)).Elem(), + "VariableNode": TypeOf((*parse.VariableNode)(nil)).Elem(), + "WithNode": TypeOf((*parse.WithNode)(nil)).Elem(), + },Wrappers: map[string][]string{ + "ActionNode": []string{"Position","Type",}, + "BoolNode": []string{"Position","Type",}, + "BranchNode": []string{"Position","Type",}, + "ChainNode": []string{"Position","Type",}, + "CommandNode": []string{"Position","Type",}, + "DotNode": []string{"Position",}, + "FieldNode": []string{"Position","Type",}, + "IdentifierNode": []string{"Position","Type",}, + "IfNode": []string{"Position","String","Type",}, + "ListNode": []string{"Position","Type",}, + "NilNode": []string{"Position",}, + "NumberNode": []string{"Position","Type",}, + "PipeNode": []string{"Position","Type",}, + "RangeNode": []string{"Position","String","Type",}, + "StringNode": []string{"Position","Type",}, + "TemplateNode": []string{"Position","Type",}, + "TextNode": []string{"Position","Type",}, + "VariableNode": []string{"Position","Type",}, + "WithNode": []string{"Position","String","Type",}, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/time.go b/vendor/github.com/cosmos72/gomacro/imports/time.go new file mode 100644 index 0000000..0c24cc2 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/time.go @@ -0,0 +1,100 @@ +// this file was generated by gomacro command: import _b "time" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "time" +) + +// reflection: allow interpreted code to import "time" +func init() { + Packages["time"] = Package{ + Binds: map[string]Value{ + "ANSIC": ValueOf(time.ANSIC), + "After": ValueOf(time.After), + "AfterFunc": ValueOf(time.AfterFunc), + "April": ValueOf(time.April), + "August": ValueOf(time.August), + "Date": ValueOf(time.Date), + "December": ValueOf(time.December), + "February": ValueOf(time.February), + "FixedZone": ValueOf(time.FixedZone), + "Friday": ValueOf(time.Friday), + "Hour": ValueOf(time.Hour), + "January": ValueOf(time.January), + "July": ValueOf(time.July), + "June": ValueOf(time.June), + "Kitchen": ValueOf(time.Kitchen), + "LoadLocation": ValueOf(time.LoadLocation), + "Local": ValueOf(&time.Local).Elem(), + "March": ValueOf(time.March), + "May": ValueOf(time.May), + "Microsecond": ValueOf(time.Microsecond), + "Millisecond": ValueOf(time.Millisecond), + "Minute": ValueOf(time.Minute), + "Monday": ValueOf(time.Monday), + "Nanosecond": ValueOf(time.Nanosecond), + "NewTicker": ValueOf(time.NewTicker), + "NewTimer": ValueOf(time.NewTimer), + "November": ValueOf(time.November), + "Now": ValueOf(time.Now), + "October": ValueOf(time.October), + "Parse": ValueOf(time.Parse), + "ParseDuration": ValueOf(time.ParseDuration), + "ParseInLocation": ValueOf(time.ParseInLocation), + "RFC1123": ValueOf(time.RFC1123), + "RFC1123Z": ValueOf(time.RFC1123Z), + "RFC3339": ValueOf(time.RFC3339), + "RFC3339Nano": ValueOf(time.RFC3339Nano), + "RFC822": ValueOf(time.RFC822), + "RFC822Z": ValueOf(time.RFC822Z), + "RFC850": ValueOf(time.RFC850), + "RubyDate": ValueOf(time.RubyDate), + "Saturday": ValueOf(time.Saturday), + "Second": ValueOf(time.Second), + "September": ValueOf(time.September), + "Since": ValueOf(time.Since), + "Sleep": ValueOf(time.Sleep), + "Stamp": ValueOf(time.Stamp), + "StampMicro": ValueOf(time.StampMicro), + "StampMilli": ValueOf(time.StampMilli), + "StampNano": ValueOf(time.StampNano), + "Sunday": ValueOf(time.Sunday), + "Thursday": ValueOf(time.Thursday), + "Tick": ValueOf(time.Tick), + "Tuesday": ValueOf(time.Tuesday), + "UTC": ValueOf(&time.UTC).Elem(), + "Unix": ValueOf(time.Unix), + "UnixDate": ValueOf(time.UnixDate), + "Until": ValueOf(time.Until), + "Wednesday": ValueOf(time.Wednesday), + },Types: map[string]Type{ + "Duration": TypeOf((*time.Duration)(nil)).Elem(), + "Location": TypeOf((*time.Location)(nil)).Elem(), + "Month": TypeOf((*time.Month)(nil)).Elem(), + "ParseError": TypeOf((*time.ParseError)(nil)).Elem(), + "Ticker": TypeOf((*time.Ticker)(nil)).Elem(), + "Time": TypeOf((*time.Time)(nil)).Elem(), + "Timer": TypeOf((*time.Timer)(nil)).Elem(), + "Weekday": TypeOf((*time.Weekday)(nil)).Elem(), + },Untypeds: map[string]string{ + "ANSIC": "string:Mon Jan _2 15:04:05 2006", + "Kitchen": "string:3:04PM", + "RFC1123": "string:Mon, 02 Jan 2006 15:04:05 MST", + "RFC1123Z": "string:Mon, 02 Jan 2006 15:04:05 -0700", + "RFC3339": "string:2006-01-02T15:04:05Z07:00", + "RFC3339Nano": "string:2006-01-02T15:04:05.999999999Z07:00", + "RFC822": "string:02 Jan 06 15:04 MST", + "RFC822Z": "string:02 Jan 06 15:04 -0700", + "RFC850": "string:Monday, 02-Jan-06 15:04:05 MST", + "RubyDate": "string:Mon Jan 02 15:04:05 -0700 2006", + "Stamp": "string:Jan _2 15:04:05", + "StampMicro": "string:Jan _2 15:04:05.000000", + "StampMilli": "string:Jan _2 15:04:05.000", + "StampNano": "string:Jan _2 15:04:05.000000000", + "UnixDate": "string:Mon Jan _2 15:04:05 MST 2006", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/unicode.go b/vendor/github.com/cosmos72/gomacro/imports/unicode.go new file mode 100644 index 0000000..c41b77f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/unicode.go @@ -0,0 +1,293 @@ +// this file was generated by gomacro command: import _b "unicode" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "unicode" +) + +// reflection: allow interpreted code to import "unicode" +func init() { + Packages["unicode"] = Package{ + Binds: map[string]Value{ + "ASCII_Hex_Digit": ValueOf(&unicode.ASCII_Hex_Digit).Elem(), + "Adlam": ValueOf(&unicode.Adlam).Elem(), + "Ahom": ValueOf(&unicode.Ahom).Elem(), + "Anatolian_Hieroglyphs": ValueOf(&unicode.Anatolian_Hieroglyphs).Elem(), + "Arabic": ValueOf(&unicode.Arabic).Elem(), + "Armenian": ValueOf(&unicode.Armenian).Elem(), + "Avestan": ValueOf(&unicode.Avestan).Elem(), + "AzeriCase": ValueOf(&unicode.AzeriCase).Elem(), + "Balinese": ValueOf(&unicode.Balinese).Elem(), + "Bamum": ValueOf(&unicode.Bamum).Elem(), + "Bassa_Vah": ValueOf(&unicode.Bassa_Vah).Elem(), + "Batak": ValueOf(&unicode.Batak).Elem(), + "Bengali": ValueOf(&unicode.Bengali).Elem(), + "Bhaiksuki": ValueOf(&unicode.Bhaiksuki).Elem(), + "Bidi_Control": ValueOf(&unicode.Bidi_Control).Elem(), + "Bopomofo": ValueOf(&unicode.Bopomofo).Elem(), + "Brahmi": ValueOf(&unicode.Brahmi).Elem(), + "Braille": ValueOf(&unicode.Braille).Elem(), + "Buginese": ValueOf(&unicode.Buginese).Elem(), + "Buhid": ValueOf(&unicode.Buhid).Elem(), + "C": ValueOf(&unicode.C).Elem(), + "Canadian_Aboriginal": ValueOf(&unicode.Canadian_Aboriginal).Elem(), + "Carian": ValueOf(&unicode.Carian).Elem(), + "CaseRanges": ValueOf(&unicode.CaseRanges).Elem(), + "Categories": ValueOf(&unicode.Categories).Elem(), + "Caucasian_Albanian": ValueOf(&unicode.Caucasian_Albanian).Elem(), + "Cc": ValueOf(&unicode.Cc).Elem(), + "Cf": ValueOf(&unicode.Cf).Elem(), + "Chakma": ValueOf(&unicode.Chakma).Elem(), + "Cham": ValueOf(&unicode.Cham).Elem(), + "Cherokee": ValueOf(&unicode.Cherokee).Elem(), + "Co": ValueOf(&unicode.Co).Elem(), + "Common": ValueOf(&unicode.Common).Elem(), + "Coptic": ValueOf(&unicode.Coptic).Elem(), + "Cs": ValueOf(&unicode.Cs).Elem(), + "Cuneiform": ValueOf(&unicode.Cuneiform).Elem(), + "Cypriot": ValueOf(&unicode.Cypriot).Elem(), + "Cyrillic": ValueOf(&unicode.Cyrillic).Elem(), + "Dash": ValueOf(&unicode.Dash).Elem(), + "Deprecated": ValueOf(&unicode.Deprecated).Elem(), + "Deseret": ValueOf(&unicode.Deseret).Elem(), + "Devanagari": ValueOf(&unicode.Devanagari).Elem(), + "Diacritic": ValueOf(&unicode.Diacritic).Elem(), + "Digit": ValueOf(&unicode.Digit).Elem(), + "Duployan": ValueOf(&unicode.Duployan).Elem(), + "Egyptian_Hieroglyphs": ValueOf(&unicode.Egyptian_Hieroglyphs).Elem(), + "Elbasan": ValueOf(&unicode.Elbasan).Elem(), + "Ethiopic": ValueOf(&unicode.Ethiopic).Elem(), + "Extender": ValueOf(&unicode.Extender).Elem(), + "FoldCategory": ValueOf(&unicode.FoldCategory).Elem(), + "FoldScript": ValueOf(&unicode.FoldScript).Elem(), + "Georgian": ValueOf(&unicode.Georgian).Elem(), + "Glagolitic": ValueOf(&unicode.Glagolitic).Elem(), + "Gothic": ValueOf(&unicode.Gothic).Elem(), + "Grantha": ValueOf(&unicode.Grantha).Elem(), + "GraphicRanges": ValueOf(&unicode.GraphicRanges).Elem(), + "Greek": ValueOf(&unicode.Greek).Elem(), + "Gujarati": ValueOf(&unicode.Gujarati).Elem(), + "Gurmukhi": ValueOf(&unicode.Gurmukhi).Elem(), + "Han": ValueOf(&unicode.Han).Elem(), + "Hangul": ValueOf(&unicode.Hangul).Elem(), + "Hanunoo": ValueOf(&unicode.Hanunoo).Elem(), + "Hatran": ValueOf(&unicode.Hatran).Elem(), + "Hebrew": ValueOf(&unicode.Hebrew).Elem(), + "Hex_Digit": ValueOf(&unicode.Hex_Digit).Elem(), + "Hiragana": ValueOf(&unicode.Hiragana).Elem(), + "Hyphen": ValueOf(&unicode.Hyphen).Elem(), + "IDS_Binary_Operator": ValueOf(&unicode.IDS_Binary_Operator).Elem(), + "IDS_Trinary_Operator": ValueOf(&unicode.IDS_Trinary_Operator).Elem(), + "Ideographic": ValueOf(&unicode.Ideographic).Elem(), + "Imperial_Aramaic": ValueOf(&unicode.Imperial_Aramaic).Elem(), + "In": ValueOf(unicode.In), + "Inherited": ValueOf(&unicode.Inherited).Elem(), + "Inscriptional_Pahlavi": ValueOf(&unicode.Inscriptional_Pahlavi).Elem(), + "Inscriptional_Parthian": ValueOf(&unicode.Inscriptional_Parthian).Elem(), + "Is": ValueOf(unicode.Is), + "IsControl": ValueOf(unicode.IsControl), + "IsDigit": ValueOf(unicode.IsDigit), + "IsGraphic": ValueOf(unicode.IsGraphic), + "IsLetter": ValueOf(unicode.IsLetter), + "IsLower": ValueOf(unicode.IsLower), + "IsMark": ValueOf(unicode.IsMark), + "IsNumber": ValueOf(unicode.IsNumber), + "IsOneOf": ValueOf(unicode.IsOneOf), + "IsPrint": ValueOf(unicode.IsPrint), + "IsPunct": ValueOf(unicode.IsPunct), + "IsSpace": ValueOf(unicode.IsSpace), + "IsSymbol": ValueOf(unicode.IsSymbol), + "IsTitle": ValueOf(unicode.IsTitle), + "IsUpper": ValueOf(unicode.IsUpper), + "Javanese": ValueOf(&unicode.Javanese).Elem(), + "Join_Control": ValueOf(&unicode.Join_Control).Elem(), + "Kaithi": ValueOf(&unicode.Kaithi).Elem(), + "Kannada": ValueOf(&unicode.Kannada).Elem(), + "Katakana": ValueOf(&unicode.Katakana).Elem(), + "Kayah_Li": ValueOf(&unicode.Kayah_Li).Elem(), + "Kharoshthi": ValueOf(&unicode.Kharoshthi).Elem(), + "Khmer": ValueOf(&unicode.Khmer).Elem(), + "Khojki": ValueOf(&unicode.Khojki).Elem(), + "Khudawadi": ValueOf(&unicode.Khudawadi).Elem(), + "L": ValueOf(&unicode.L).Elem(), + "Lao": ValueOf(&unicode.Lao).Elem(), + "Latin": ValueOf(&unicode.Latin).Elem(), + "Lepcha": ValueOf(&unicode.Lepcha).Elem(), + "Letter": ValueOf(&unicode.Letter).Elem(), + "Limbu": ValueOf(&unicode.Limbu).Elem(), + "Linear_A": ValueOf(&unicode.Linear_A).Elem(), + "Linear_B": ValueOf(&unicode.Linear_B).Elem(), + "Lisu": ValueOf(&unicode.Lisu).Elem(), + "Ll": ValueOf(&unicode.Ll).Elem(), + "Lm": ValueOf(&unicode.Lm).Elem(), + "Lo": ValueOf(&unicode.Lo).Elem(), + "Logical_Order_Exception": ValueOf(&unicode.Logical_Order_Exception).Elem(), + "Lower": ValueOf(&unicode.Lower).Elem(), + "LowerCase": ValueOf(unicode.LowerCase), + "Lt": ValueOf(&unicode.Lt).Elem(), + "Lu": ValueOf(&unicode.Lu).Elem(), + "Lycian": ValueOf(&unicode.Lycian).Elem(), + "Lydian": ValueOf(&unicode.Lydian).Elem(), + "M": ValueOf(&unicode.M).Elem(), + "Mahajani": ValueOf(&unicode.Mahajani).Elem(), + "Malayalam": ValueOf(&unicode.Malayalam).Elem(), + "Mandaic": ValueOf(&unicode.Mandaic).Elem(), + "Manichaean": ValueOf(&unicode.Manichaean).Elem(), + "Marchen": ValueOf(&unicode.Marchen).Elem(), + "Mark": ValueOf(&unicode.Mark).Elem(), + "MaxASCII": ValueOf(unicode.MaxASCII), + "MaxCase": ValueOf(unicode.MaxCase), + "MaxLatin1": ValueOf(unicode.MaxLatin1), + "MaxRune": ValueOf(unicode.MaxRune), + "Mc": ValueOf(&unicode.Mc).Elem(), + "Me": ValueOf(&unicode.Me).Elem(), + "Meetei_Mayek": ValueOf(&unicode.Meetei_Mayek).Elem(), + "Mende_Kikakui": ValueOf(&unicode.Mende_Kikakui).Elem(), + "Meroitic_Cursive": ValueOf(&unicode.Meroitic_Cursive).Elem(), + "Meroitic_Hieroglyphs": ValueOf(&unicode.Meroitic_Hieroglyphs).Elem(), + "Miao": ValueOf(&unicode.Miao).Elem(), + "Mn": ValueOf(&unicode.Mn).Elem(), + "Modi": ValueOf(&unicode.Modi).Elem(), + "Mongolian": ValueOf(&unicode.Mongolian).Elem(), + "Mro": ValueOf(&unicode.Mro).Elem(), + "Multani": ValueOf(&unicode.Multani).Elem(), + "Myanmar": ValueOf(&unicode.Myanmar).Elem(), + "N": ValueOf(&unicode.N).Elem(), + "Nabataean": ValueOf(&unicode.Nabataean).Elem(), + "Nd": ValueOf(&unicode.Nd).Elem(), + "New_Tai_Lue": ValueOf(&unicode.New_Tai_Lue).Elem(), + "Newa": ValueOf(&unicode.Newa).Elem(), + "Nko": ValueOf(&unicode.Nko).Elem(), + "Nl": ValueOf(&unicode.Nl).Elem(), + "No": ValueOf(&unicode.No).Elem(), + "Noncharacter_Code_Point": ValueOf(&unicode.Noncharacter_Code_Point).Elem(), + "Number": ValueOf(&unicode.Number).Elem(), + "Ogham": ValueOf(&unicode.Ogham).Elem(), + "Ol_Chiki": ValueOf(&unicode.Ol_Chiki).Elem(), + "Old_Hungarian": ValueOf(&unicode.Old_Hungarian).Elem(), + "Old_Italic": ValueOf(&unicode.Old_Italic).Elem(), + "Old_North_Arabian": ValueOf(&unicode.Old_North_Arabian).Elem(), + "Old_Permic": ValueOf(&unicode.Old_Permic).Elem(), + "Old_Persian": ValueOf(&unicode.Old_Persian).Elem(), + "Old_South_Arabian": ValueOf(&unicode.Old_South_Arabian).Elem(), + "Old_Turkic": ValueOf(&unicode.Old_Turkic).Elem(), + "Oriya": ValueOf(&unicode.Oriya).Elem(), + "Osage": ValueOf(&unicode.Osage).Elem(), + "Osmanya": ValueOf(&unicode.Osmanya).Elem(), + "Other": ValueOf(&unicode.Other).Elem(), + "Other_Alphabetic": ValueOf(&unicode.Other_Alphabetic).Elem(), + "Other_Default_Ignorable_Code_Point": ValueOf(&unicode.Other_Default_Ignorable_Code_Point).Elem(), + "Other_Grapheme_Extend": ValueOf(&unicode.Other_Grapheme_Extend).Elem(), + "Other_ID_Continue": ValueOf(&unicode.Other_ID_Continue).Elem(), + "Other_ID_Start": ValueOf(&unicode.Other_ID_Start).Elem(), + "Other_Lowercase": ValueOf(&unicode.Other_Lowercase).Elem(), + "Other_Math": ValueOf(&unicode.Other_Math).Elem(), + "Other_Uppercase": ValueOf(&unicode.Other_Uppercase).Elem(), + "P": ValueOf(&unicode.P).Elem(), + "Pahawh_Hmong": ValueOf(&unicode.Pahawh_Hmong).Elem(), + "Palmyrene": ValueOf(&unicode.Palmyrene).Elem(), + "Pattern_Syntax": ValueOf(&unicode.Pattern_Syntax).Elem(), + "Pattern_White_Space": ValueOf(&unicode.Pattern_White_Space).Elem(), + "Pau_Cin_Hau": ValueOf(&unicode.Pau_Cin_Hau).Elem(), + "Pc": ValueOf(&unicode.Pc).Elem(), + "Pd": ValueOf(&unicode.Pd).Elem(), + "Pe": ValueOf(&unicode.Pe).Elem(), + "Pf": ValueOf(&unicode.Pf).Elem(), + "Phags_Pa": ValueOf(&unicode.Phags_Pa).Elem(), + "Phoenician": ValueOf(&unicode.Phoenician).Elem(), + "Pi": ValueOf(&unicode.Pi).Elem(), + "Po": ValueOf(&unicode.Po).Elem(), + "Prepended_Concatenation_Mark": ValueOf(&unicode.Prepended_Concatenation_Mark).Elem(), + "PrintRanges": ValueOf(&unicode.PrintRanges).Elem(), + "Properties": ValueOf(&unicode.Properties).Elem(), + "Ps": ValueOf(&unicode.Ps).Elem(), + "Psalter_Pahlavi": ValueOf(&unicode.Psalter_Pahlavi).Elem(), + "Punct": ValueOf(&unicode.Punct).Elem(), + "Quotation_Mark": ValueOf(&unicode.Quotation_Mark).Elem(), + "Radical": ValueOf(&unicode.Radical).Elem(), + "Rejang": ValueOf(&unicode.Rejang).Elem(), + "ReplacementChar": ValueOf(unicode.ReplacementChar), + "Runic": ValueOf(&unicode.Runic).Elem(), + "S": ValueOf(&unicode.S).Elem(), + "STerm": ValueOf(&unicode.STerm).Elem(), + "Samaritan": ValueOf(&unicode.Samaritan).Elem(), + "Saurashtra": ValueOf(&unicode.Saurashtra).Elem(), + "Sc": ValueOf(&unicode.Sc).Elem(), + "Scripts": ValueOf(&unicode.Scripts).Elem(), + "Sentence_Terminal": ValueOf(&unicode.Sentence_Terminal).Elem(), + "Sharada": ValueOf(&unicode.Sharada).Elem(), + "Shavian": ValueOf(&unicode.Shavian).Elem(), + "Siddham": ValueOf(&unicode.Siddham).Elem(), + "SignWriting": ValueOf(&unicode.SignWriting).Elem(), + "SimpleFold": ValueOf(unicode.SimpleFold), + "Sinhala": ValueOf(&unicode.Sinhala).Elem(), + "Sk": ValueOf(&unicode.Sk).Elem(), + "Sm": ValueOf(&unicode.Sm).Elem(), + "So": ValueOf(&unicode.So).Elem(), + "Soft_Dotted": ValueOf(&unicode.Soft_Dotted).Elem(), + "Sora_Sompeng": ValueOf(&unicode.Sora_Sompeng).Elem(), + "Space": ValueOf(&unicode.Space).Elem(), + "Sundanese": ValueOf(&unicode.Sundanese).Elem(), + "Syloti_Nagri": ValueOf(&unicode.Syloti_Nagri).Elem(), + "Symbol": ValueOf(&unicode.Symbol).Elem(), + "Syriac": ValueOf(&unicode.Syriac).Elem(), + "Tagalog": ValueOf(&unicode.Tagalog).Elem(), + "Tagbanwa": ValueOf(&unicode.Tagbanwa).Elem(), + "Tai_Le": ValueOf(&unicode.Tai_Le).Elem(), + "Tai_Tham": ValueOf(&unicode.Tai_Tham).Elem(), + "Tai_Viet": ValueOf(&unicode.Tai_Viet).Elem(), + "Takri": ValueOf(&unicode.Takri).Elem(), + "Tamil": ValueOf(&unicode.Tamil).Elem(), + "Tangut": ValueOf(&unicode.Tangut).Elem(), + "Telugu": ValueOf(&unicode.Telugu).Elem(), + "Terminal_Punctuation": ValueOf(&unicode.Terminal_Punctuation).Elem(), + "Thaana": ValueOf(&unicode.Thaana).Elem(), + "Thai": ValueOf(&unicode.Thai).Elem(), + "Tibetan": ValueOf(&unicode.Tibetan).Elem(), + "Tifinagh": ValueOf(&unicode.Tifinagh).Elem(), + "Tirhuta": ValueOf(&unicode.Tirhuta).Elem(), + "Title": ValueOf(&unicode.Title).Elem(), + "TitleCase": ValueOf(unicode.TitleCase), + "To": ValueOf(unicode.To), + "ToLower": ValueOf(unicode.ToLower), + "ToTitle": ValueOf(unicode.ToTitle), + "ToUpper": ValueOf(unicode.ToUpper), + "TurkishCase": ValueOf(&unicode.TurkishCase).Elem(), + "Ugaritic": ValueOf(&unicode.Ugaritic).Elem(), + "Unified_Ideograph": ValueOf(&unicode.Unified_Ideograph).Elem(), + "Upper": ValueOf(&unicode.Upper).Elem(), + "UpperCase": ValueOf(unicode.UpperCase), + "UpperLower": ValueOf(unicode.UpperLower), + "Vai": ValueOf(&unicode.Vai).Elem(), + "Variation_Selector": ValueOf(&unicode.Variation_Selector).Elem(), + "Version": ValueOf(unicode.Version), + "Warang_Citi": ValueOf(&unicode.Warang_Citi).Elem(), + "White_Space": ValueOf(&unicode.White_Space).Elem(), + "Yi": ValueOf(&unicode.Yi).Elem(), + "Z": ValueOf(&unicode.Z).Elem(), + "Zl": ValueOf(&unicode.Zl).Elem(), + "Zp": ValueOf(&unicode.Zp).Elem(), + "Zs": ValueOf(&unicode.Zs).Elem(), + },Types: map[string]Type{ + "CaseRange": TypeOf((*unicode.CaseRange)(nil)).Elem(), + "Range16": TypeOf((*unicode.Range16)(nil)).Elem(), + "Range32": TypeOf((*unicode.Range32)(nil)).Elem(), + "RangeTable": TypeOf((*unicode.RangeTable)(nil)).Elem(), + "SpecialCase": TypeOf((*unicode.SpecialCase)(nil)).Elem(), + },Untypeds: map[string]string{ + "LowerCase": "int:1", + "MaxASCII": "rune:127", + "MaxCase": "int:3", + "MaxLatin1": "rune:255", + "MaxRune": "rune:1114111", + "ReplacementChar": "rune:65533", + "TitleCase": "int:2", + "UpperCase": "int:0", + "UpperLower": "rune:1114112", + "Version": "string:9.0.0", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/unicode_utf16.go b/vendor/github.com/cosmos72/gomacro/imports/unicode_utf16.go new file mode 100644 index 0000000..cb10290 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/unicode_utf16.go @@ -0,0 +1,22 @@ +// this file was generated by gomacro command: import _b "unicode/utf16" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "unicode/utf16" +) + +// reflection: allow interpreted code to import "unicode/utf16" +func init() { + Packages["unicode/utf16"] = Package{ + Binds: map[string]Value{ + "Decode": ValueOf(utf16.Decode), + "DecodeRune": ValueOf(utf16.DecodeRune), + "Encode": ValueOf(utf16.Encode), + "EncodeRune": ValueOf(utf16.EncodeRune), + "IsSurrogate": ValueOf(utf16.IsSurrogate), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/unicode_utf8.go b/vendor/github.com/cosmos72/gomacro/imports/unicode_utf8.go new file mode 100644 index 0000000..c4d0f1c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/unicode_utf8.go @@ -0,0 +1,40 @@ +// this file was generated by gomacro command: import _b "unicode/utf8" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "unicode/utf8" +) + +// reflection: allow interpreted code to import "unicode/utf8" +func init() { + Packages["unicode/utf8"] = Package{ + Binds: map[string]Value{ + "DecodeLastRune": ValueOf(utf8.DecodeLastRune), + "DecodeLastRuneInString": ValueOf(utf8.DecodeLastRuneInString), + "DecodeRune": ValueOf(utf8.DecodeRune), + "DecodeRuneInString": ValueOf(utf8.DecodeRuneInString), + "EncodeRune": ValueOf(utf8.EncodeRune), + "FullRune": ValueOf(utf8.FullRune), + "FullRuneInString": ValueOf(utf8.FullRuneInString), + "MaxRune": ValueOf(utf8.MaxRune), + "RuneCount": ValueOf(utf8.RuneCount), + "RuneCountInString": ValueOf(utf8.RuneCountInString), + "RuneError": ValueOf(utf8.RuneError), + "RuneLen": ValueOf(utf8.RuneLen), + "RuneSelf": ValueOf(utf8.RuneSelf), + "RuneStart": ValueOf(utf8.RuneStart), + "UTFMax": ValueOf(utf8.UTFMax), + "Valid": ValueOf(utf8.Valid), + "ValidRune": ValueOf(utf8.ValidRune), + "ValidString": ValueOf(utf8.ValidString), + },Untypeds: map[string]string{ + "MaxRune": "rune:1114111", + "RuneError": "rune:65533", + "RuneSelf": "int:128", + "UTFMax": "int:4", + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/imports/unsafe.go b/vendor/github.com/cosmos72/gomacro/imports/unsafe.go new file mode 100644 index 0000000..062d03f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/imports/unsafe.go @@ -0,0 +1,18 @@ +// this file was generated by gomacro command: import _b "unsafe" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package imports + +import ( + . "reflect" + "unsafe" +) + +// reflection: allow interpreted code to import "unsafe" +func init() { + Packages["unsafe"] = Package{ + Types: map[string]Type{ + "Pointer": TypeOf((*unsafe.Pointer)(nil)).Elem(), + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/main.go b/vendor/github.com/cosmos72/gomacro/main.go new file mode 100644 index 0000000..4e62746 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/main.go @@ -0,0 +1,114 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * main.go + * + * Created on: Feb 13, 2017 + * Author: Massimiliano Ghilardi + */ + +package main + +import ( + "fmt" + "os" + + "github.com/cosmos72/gomacro/base" + "github.com/cosmos72/gomacro/parser" +) + +func main() { + args := os.Args[1:] + + var cmd Cmd + cmd.Init() + + cmd.Options |= base.OptFastInterpreter // use fast interpreter by default + + // cmd.Options |= base.OptShowTime // | base.OptTrapPanic // | base.OptShowAfterMacroExpansion // | base.OptShowAfterParse // | base.OptDebugMacroExpand // | base.OptDebugQuasiquote + + cmd.ParserMode |= parser.Trace & 0 + + err := cmd.Main(args) + if err != nil { + fmt.Fprintln(cmd.Stderr, err) + } +} + +/* + miscellaneous annotations + + imports, generated with: find [a-u]* -type f -name \*.go | grep -v internal | grep -v testdata | grep -v cmd/ | grep -v builtin | xargs -d'\n' dirname | sort -u | while read i; do echo -n "_b \"$i\"; "; done + plus some hand-made tweaks + import ( _b "archive/tar"; _b "archive/zip"; _b "bufio"; _b "bytes"; _b "compress/bzip2"; _b "compress/flate"; _b "compress/gzip"; _b "compress/lzw"; _b "compress/zlib"; _b "container/heap"; _b "container/list"; _b "container/ring"; _b "context"; _b "crypto"; _b "crypto/aes"; _b "crypto/cipher"; _b "crypto/des"; _b "crypto/dsa"; _b "crypto/ecdsa"; _b "crypto/elliptic"; _b "crypto/hmac"; _b "crypto/md5"; _b "crypto/rand"; _b "crypto/rc4"; _b "crypto/rsa"; _b "crypto/sha1"; _b "crypto/sha256"; _b "crypto/sha512"; _b "crypto/subtle"; _b "crypto/tls"; _b "crypto/x509"; _b "crypto/x509/pkix"; _b "database/sql"; _b "database/sql/driver"; _b "debug/dwarf"; _b "debug/elf"; _b "debug/gosym"; _b "debug/macho"; _b "debug/pe"; _b "debug/plan9obj"; _b "encoding"; _b "encoding/ascii85"; _b "encoding/asn1"; _b "encoding/base32"; _b "encoding/base64"; _b "encoding/binary"; _b "encoding/csv"; _b "encoding/gob"; _b "encoding/hex"; _b "encoding/json"; _b "encoding/pem"; _b "encoding/xml"; _b "errors"; _b "expvar"; _b "flag"; _b "fmt"; _b "go/ast"; _b "go/build"; _b "go/constant"; _b "go/doc"; _b "go/format"; _b "go/importer"; _b "go/parser"; _b "go/printer"; _b "go/scanner"; _b "go/token"; _b "go/types"; _b "hash"; _b "hash/adler32"; _b "hash/crc32"; _b "hash/crc64"; _b "hash/fnv"; _b "html"; _b "html/template"; _b "image"; _b "image/color"; _b "image/color/palette"; _b "image/draw"; _b "image/gif"; _b "image/jpeg"; _b "image/png"; _b "index/suffixarray"; _b "io"; _b "io/ioutil"; _b "log"; _b "log/syslog"; _b "math"; _b "math/big"; _b "math/cmplx"; _b "math/rand"; _b "mime"; _b "mime/multipart"; _b "mime/quotedprintable"; _b "net"; _b "net/http"; _b "net/http/cgi"; _b "net/http/cookiejar"; _b "net/http/fcgi"; _b "net/http/httptest"; _b "net/http/httptrace"; _b "net/http/httputil"; _b "net/http/pprof"; _b "net/mail"; _b "net/rpc"; _b "net/rpc/jsonrpc"; _b "net/smtp"; _b "net/textproto"; _b "net/url"; _b "os"; _b "os/exec"; _b "os/signal"; _b "os/user"; _b "path"; _b "path/filepath"; _b "plugin"; _b "reflect"; _b "regexp"; _b "regexp/syntax"; _b "runtime"; _b "runtime/debug"; _b "runtime/pprof"; _b "runtime/trace"; _b "sort"; _b "strconv"; _b "strings"; _b "sync"; _b "sync/atomic"; _b "syscall"; _b "testing"; _b "testing/iotest"; _b "testing/quick"; _b "text/scanner"; _b "text/tabwriter"; _b "text/template"; _b "text/template/parse"; _b "time"; _b "unicode"; _b "unicode/utf16"; _b "unicode/utf8"; _b "unsafe" ) + + // test interfaces: + + import ( "time"; "fmt" ); var s fmt.Stringer = time.Second // ok + s.String // ok, s is the interface fmt.Stringer + + import ( "os"; "io" ); var in io.Reader = os.Stdin // ok + import "reflect"; var t = reflect.TypeOf(os.Stdin) // ok + t.Elem // ok, t is the interface reflect.Type + + // test methods-to-functions: + + time.Duration.Seconds // easy, time.Duration is a concrete type + io.Stringer.String // harder, io.Stringer is an interface + + // test methods: + + type Pair struct { A, B int }; var p Pair + func (p *Pair) Lhs() int { return p.A }; func (p *Pair) SetLhs(a int) { p.A = a } + p.SetLhs(2); p.Lhs() + + type Triple struct { Pair; C int }; var t Triple + t.Pair = p + t.SetLhs(3); t.Lhs() + + // test some valid methods: + + type Pair2 Pair; var p2 Pair2 + func (p Pair2) Foo() { } + + type SPair []Pair; var s SPair + func (p SPair) Foo() { }; s.Foo() + + type Int int; var I Int + func (x Int) Print() { println(x) }; I.Print; I.Print() + func (x *Int) Print() { println(*x) }; I.Print; I.Print() + + // test some bogus methods: + + func (p **Pair) Foo() { } + type PPair *Pair + func (p PPair) Foo() { } + func (p *PPair) Foo() { } + + // test type alias: + + type iint = int + type Int int + var i int = 1 + var ii iint = 2 + var I Int = 3 + func show(x int) { println(x) } + func Show(x Int) { println(x) } + +*/ diff --git a/vendor/github.com/cosmos72/gomacro/parser/LICENSE b/vendor/github.com/cosmos72/gomacro/parser/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/parser/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cosmos72/gomacro/parser/global.go b/vendor/github.com/cosmos72/gomacro/parser/global.go new file mode 100644 index 0000000..ac57b73 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/parser/global.go @@ -0,0 +1,153 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file contains the exported entry points for invoking the parser. + +package parser + +import ( + "fmt" + "go/ast" + "go/token" + + mt "github.com/cosmos72/gomacro/token" +) + +// A Mode value is a set of flags (or 0). +// They control the amount of source code parsed and other optional +// parser functionality. +// +type Mode uint + +const ( + PackageClauseOnly Mode = 1 << iota // stop parsing after package clause + ImportsOnly // stop parsing after import declarations + ParseComments // parse comments and add them to AST + Trace // print a trace of parsed productions + DeclarationErrors // report declaration errors + SpuriousErrors // same as AllErrors, for backward-compatibility + AllErrors = SpuriousErrors // report all errors (not just the first 10 on different lines) +) + +type Parser struct { + parser +} + +func (p *parser) Configure(mode Mode, specialChar rune) { + p.mode = mode + p.specialChar = specialChar +} + +func (p *parser) Init(fileset *mt.FileSet, filename string, lineOffset int, src []byte) { + p.init(fileset, filename, lineOffset, src, p.mode) +} + +func (p *parser) Parse() (list []ast.Node, err error) { + if p.file == nil || p.pkgScope == nil { + panic("Parser.Parse(): parser is not initialized, call Parser.Init() first") + } + + defer func() { + if e := recover(); e != nil { + // resume same panic if it's not a bailout + if _, ok := e.(bailout); !ok { + panic(e) + } + } + p.errors.Sort() + err = p.errors.Err() + p.file = nil + p.pkgScope = nil + }() + + topScope := p.topScope + + var lastpos1, lastpos2 token.Pos + list = make([]ast.Node, 0) + for p.tok != token.EOF && p.errors.Len() < 10 { + list = append(list, p.parseAny()) + // fmt.Printf("// parser position is now %d (%s). parsed %#v\n", p.pos, p.file.Position(p.pos), list[len(list)-1]) + if p.pos == lastpos1 { + p.error(p.pos, fmt.Sprintf("skipping '%s' to continue", mt.String(p.tok))) + p.next() + } else { + lastpos1 = lastpos2 + lastpos2 = p.pos + } + } + + assert(topScope == p.topScope, "unbalanced scopes") + + if p.errors.Len() > 0 { + p.errors.Sort() + return list, p.errors.Err() + } + return list, nil +} + +func (p *parser) parseAny() ast.Node { + if p.tok == token.COMMENT { + // advance to the next non-comment token + p.next() + } + var node ast.Node + switch p.tok { + case token.PACKAGE: + // not p.parseFile() because it does not support top-level statements and expressions + node = p.parsePackage() + case token.IMPORT: + node = p.parseGenDecl(token.IMPORT, p.parseImportSpec) + case token.CONST, token.TYPE, token.VAR, token.FUNC, mt.MACRO, mt.FUNCTION: + // a "func" at top level can be either a function declaration: func foo(args) /*...*/ + // or a method declaration: func (receiver) foo(args) /*...*/ + // or a function literal, i.e. a closure: func(args) /*...*/ + // since method declaration and function literal are so similar, + // there is no reasonable way to distinguish them here. + // + // decision: always parse as a declaration. + // function literals at top level must either be written ~lambda(args) /*...*/ + // or come after some other token: a variable declaration, an expression, + // or at least a '(' + node = p.parseDecl(syncDecl) + default: + node = p.parseStmt() + if expr, ok := node.(*ast.ExprStmt); ok { + // unwrap expressions + node = expr.X + } + } + return node +} + +func (p *parser) parsePackage() ast.Node { + if p.trace { + defer un(trace(p, "Package")) + } + doc := p.leadComment + pos := p.expect(token.PACKAGE) + + var names []*ast.Ident + + switch p.tok { + case token.ILLEGAL, token.EOF, token.SEMICOLON, token.RPAREN, token.RBRACE, token.RBRACK: + default: + ident := p.parseIdent() + if ident.Name == "_" && p.mode&DeclarationErrors != 0 { + p.error(p.pos, "invalid package name: _") + } + names = []*ast.Ident{ident} + } + p.expectSemi() + + return &ast.GenDecl{ + TokPos: pos, + Tok: token.PACKAGE, + Specs: []ast.Spec{ + &ast.ValueSpec{ + Doc: doc, + Names: names, + }, + }, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/parser/parser.diffs b/vendor/github.com/cosmos72/gomacro/parser/parser.diffs new file mode 100644 index 0000000..2fc6ac5 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/parser/parser.diffs @@ -0,0 +1,440 @@ +--- /usr/local/go/src/go/parser/parser.go 2017-02-16 20:27:47.000000000 +0100 ++++ parser.go 2017-04-22 17:58:50.801987424 +0200 +@@ -19,11 +19,13 @@ + import ( + "fmt" + "go/ast" +- "go/scanner" + "go/token" + "strconv" + "strings" + "unicode" ++ ++ "github.com/cosmos72/gomacro/scanner" ++ mt "github.com/cosmos72/gomacro/token" + ) + + // The parser structure holds the parser's internal state. +@@ -37,11 +39,17 @@ + trace bool // == (mode & Trace != 0) + indent int // indentation used for tracing output + ++ specialChar rune // patch: prefix for quote operators ' ` , ,@ ++ fileset *token.FileSet ++ + // Comments + comments []*ast.CommentGroup + leadComment *ast.CommentGroup // last lead comment + lineComment *ast.CommentGroup // last line comment + ++ // Previous token ++ tok0 token.Token ++ + // Next token + pos token.Pos // token position + tok token.Token // one token look-ahead +@@ -71,16 +79,51 @@ + } + + func (p *parser) init(fset *token.FileSet, filename string, src []byte, mode Mode) { ++ // Explicitly initialize all private fields since a parser may be reused. ++ if fset == nil { ++ fset = token.NewFileSet() ++ } ++ p.fileset = fset + p.file = fset.AddFile(filename, -1, len(src)) ++ p.errors = nil ++ + var m scanner.Mode + if mode&ParseComments != 0 { + m = scanner.ScanComments + } ++ if p.specialChar == '\x00' { ++ p.specialChar = '~' ++ } + eh := func(pos token.Position, msg string) { p.errors.Add(pos, msg) } +- p.scanner.Init(p.file, src, eh, m) ++ p.scanner.Init(p.file, src, eh, m, p.specialChar) + + p.mode = mode + p.trace = mode&Trace != 0 // for convenience (p.trace is used frequently) ++ p.indent = 0 ++ ++ p.comments = nil ++ p.leadComment = nil ++ p.lineComment = nil ++ ++ p.pos = token.NoPos ++ p.tok = token.ILLEGAL ++ p.lit = "" ++ ++ p.syncPos = token.NoPos ++ p.syncCnt = 0 ++ ++ p.exprLev = 0 ++ p.inRhs = false ++ ++ p.topScope = nil ++ p.openScope() ++ p.pkgScope = p.topScope ++ ++ p.unresolved = nil ++ p.imports = nil ++ ++ p.labelScope = nil ++ p.targetStack = nil + + p.next() + } +@@ -243,11 +286,13 @@ + // very first token (!p.pos.IsValid()) is not initialized + // (it is token.ILLEGAL), so don't print it . + if p.trace && p.pos.IsValid() { +- s := p.tok.String() ++ s := mt.String(p.tok) // patch: support macro-related keywords + switch { + case p.tok.IsLiteral(): + p.printTrace(s, p.lit) +- case p.tok.IsOperator(), p.tok.IsKeyword(): ++ case p.tok.IsOperator(), p.tok.IsKeyword(), ++ mt.IsMacroKeyword(p.tok): // patch: support macro-related keywords ++ + p.printTrace("\"" + s + "\"") + default: + p.printTrace(s) +@@ -274,7 +319,7 @@ + comment = &ast.Comment{Slash: p.pos, Text: p.lit} + p.next0() + +- return ++ return comment, endline + } + + // Consume a group of adjacent comments, add it to the parser's +@@ -317,6 +362,7 @@ + p.leadComment = nil + p.lineComment = nil + prev := p.pos ++ p.tok0 = p.tok + p.next0() + + if p.tok == token.COMMENT { +@@ -378,7 +424,7 @@ + if p.tok == token.SEMICOLON && p.lit == "\n" { + msg += ", found newline" + } else { +- msg += ", found '" + p.tok.String() + "'" ++ msg += ", found '" + mt.String(p.tok) + "'" + if p.tok.IsLiteral() { + msg += " " + p.lit + } +@@ -390,7 +436,7 @@ + func (p *parser) expect(tok token.Token) token.Pos { + pos := p.pos + if p.tok != tok { +- p.errorExpected(pos, "'"+tok.String()+"'") ++ p.errorExpected(pos, "'"+mt.String(tok)+"'") + } + p.next() // make progress + return pos +@@ -409,7 +455,7 @@ + + func (p *parser) expectSemi() { + // semicolon is optional before a closing ')' or '}' +- if p.tok != token.RPAREN && p.tok != token.RBRACE { ++ if p.tok != token.RPAREN && p.tok != token.RBRACE && p.tok != token.RBRACK { // patch: semicolon is optional also before a closing ']' + switch p.tok { + case token.COMMA: + // permit a ',' instead of a ';' but complain +@@ -454,7 +500,7 @@ + case token.BREAK, token.CONST, token.CONTINUE, token.DEFER, + token.FALLTHROUGH, token.FOR, token.GO, token.GOTO, + token.IF, token.RETURN, token.SELECT, token.SWITCH, +- token.TYPE, token.VAR: ++ token.TYPE, token.VAR, mt.FUNCTION: + // Return only if parser made some progress since last + // sync or if it has not reached 10 sync calls without + // progress. Otherwise consume at least one token to +@@ -489,7 +535,7 @@ + func syncDecl(p *parser) { + for { + switch p.tok { +- case token.CONST, token.TYPE, token.VAR: ++ case token.CONST, token.TYPE, token.VAR, token.FUNC, mt.FUNCTION: + // see comments in syncStmt + if p.pos == p.syncPos && p.syncCnt < 10 { + p.syncCnt++ +@@ -912,12 +958,12 @@ + return + } + +-func (p *parser) parseFuncType() (*ast.FuncType, *ast.Scope) { ++func (p *parser) parseFuncType(tok token.Token) (*ast.FuncType, *ast.Scope) { + if p.trace { + defer un(trace(p, "FuncType")) + } + +- pos := p.expect(token.FUNC) ++ pos := p.expect(tok) + scope := ast.NewScope(p.topScope) // function scope + params, results := p.parseSignature(scope) + +@@ -1026,8 +1072,8 @@ + return p.parseStructType() + case token.MUL: + return p.parsePointerType() +- case token.FUNC: +- typ, _ := p.parseFuncType() ++ case token.FUNC, mt.LAMBDA: ++ typ, _ := p.parseFuncType(p.tok) + return typ + case token.INTERFACE: + return p.parseInterfaceType() +@@ -1041,6 +1087,8 @@ + typ := p.parseType() + rparen := p.expect(token.RPAREN) + return &ast.ParenExpr{Lparen: lparen, X: typ, Rparen: rparen} ++ case mt.QUOTE, mt.QUASIQUOTE, mt.UNQUOTE: // patch: support quote and friends inside types ++ return p.parseQuote() + } + + // no type found +@@ -1063,7 +1111,7 @@ + defer un(trace(p, "StatementList")) + } + +- for p.tok != token.CASE && p.tok != token.DEFAULT && p.tok != token.RBRACE && p.tok != token.EOF { ++ for p.tok != mt.TYPECASE && p.tok != token.CASE && p.tok != token.DEFAULT && p.tok != token.RBRACE && p.tok != token.EOF { + list = append(list, p.parseStmt()) + } + +@@ -1103,12 +1151,12 @@ + // ---------------------------------------------------------------------------- + // Expressions + +-func (p *parser) parseFuncTypeOrLit() ast.Expr { ++func (p *parser) parseFuncTypeOrLit(tok token.Token) ast.Expr { + if p.trace { + defer un(trace(p, "FuncTypeOrLit")) + } + +- typ, scope := p.parseFuncType() ++ typ, scope := p.parseFuncType(tok) + if p.tok != token.LBRACE { + // function type only + return typ +@@ -1152,8 +1200,20 @@ + rparen := p.expect(token.RPAREN) + return &ast.ParenExpr{Lparen: lparen, X: x, Rparen: rparen} + +- case token.FUNC: +- return p.parseFuncTypeOrLit() ++ case token.FUNC, mt.LAMBDA: ++ // patch: lambda. equivalent to func, useful to resolve ambiguities between closures ++ // and function/method declarations ++ return p.parseFuncTypeOrLit(p.tok) ++ ++ // patch: quote and friends ++ // TODO: accept ms.MACRO here and interpret as local macro definition? (i.e. Common Lisp macrolet) ++ case mt.QUOTE, mt.QUASIQUOTE, mt.UNQUOTE, mt.UNQUOTE_SPLICE: ++ return p.parseQuote() ++ ++ // patch: accept block statements inside expressions. allows to nest macro calls, ++ // to write { if a { b } else { c } } inside an expression, and many other things ++ case token.LBRACE: ++ return p.parseExprBlock() + } + + if typ := p.tryIdentOrType(); typ != nil { +@@ -1432,10 +1492,13 @@ + + // If x is of the form (T), unparen returns unparen(T), otherwise it returns x. + func unparen(x ast.Expr) ast.Expr { +- if p, isParen := x.(*ast.ParenExpr); isParen { +- x = unparen(p.X) ++ for { ++ if p, ok := x.(*ast.ParenExpr); ok { ++ x = p.X ++ continue ++ } ++ return x + } +- return x + } + + // checkExprOrType checks that x is an expression or a type +@@ -1701,6 +1764,10 @@ + // Go spec: The scope of a label is the body of the function + // in which it is declared and excludes the body of any nested + // function. ++ if p.labelScope == nil { ++ p.error(label.Pos(), fmt.Sprintf("syntax error: label outside block: %s", label.Name)) ++ return p.parseStmt(), false ++ } + stmt := &ast.LabeledStmt{Label: label, Colon: colon, Stmt: p.parseStmt()} + p.declare(stmt, nil, p.labelScope, ast.Lbl, label) + return stmt, false +@@ -1884,25 +1951,32 @@ + return + } + +-func (p *parser) parseCaseClause(typeSwitch bool) *ast.CaseClause { ++func (p *parser) parseCaseClause(typeSwitch bool) ast.Stmt { + if p.trace { + defer un(trace(p, "CaseClause")) + } + + pos := p.pos + var list []ast.Expr +- if p.tok == token.CASE { ++ if p.tok == mt.TYPECASE { ++ p.next() ++ list = p.parseTypeList() ++ } else if p.tok == token.CASE { + p.next() + if typeSwitch { + list = p.parseTypeList() + } else { + list = p.parseRhsList() + } +- } else { ++ } else if p.tok == token.DEFAULT { + p.expect(token.DEFAULT) ++ } else { ++ // patch: support switch foo { ~,{bar} } ++ // where bar will expand to case x, y, z: w ++ return p.parseStmt() + } +- + colon := p.expect(token.COLON) ++ + p.openScope() + body := p.parseStmtList() + p.closeScope() +@@ -1980,7 +2054,8 @@ + typeSwitch := p.isTypeSwitchGuard(s2) + lbrace := p.expect(token.LBRACE) + var list []ast.Stmt +- for p.tok == token.CASE || p.tok == token.DEFAULT { ++ // patch: allow ~quote and friends in addition to case: and default: ++ for p.tok0 != token.EOF && p.tok != token.LPAREN && p.tok != token.RBRACK && p.tok != token.RBRACE { + list = append(list, p.parseCaseClause(typeSwitch)) + } + rbrace := p.expect(token.RBRACE) +@@ -2159,13 +2234,17 @@ + } + + switch p.tok { +- case token.CONST, token.TYPE, token.VAR: ++ case token.CONST, token.TYPE, token.VAR, ++ mt.FUNCTION: // patch: allow function/method declarations inside statements. extremely useful for ~quote and ~quasiquote + s = &ast.DeclStmt{Decl: p.parseDecl(syncStmt)} + case + // tokens that may start an expression + token.IDENT, token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING, token.FUNC, token.LPAREN, // operands + token.LBRACK, token.STRUCT, token.MAP, token.CHAN, token.INTERFACE, // composite types +- token.ADD, token.SUB, token.MUL, token.AND, token.XOR, token.ARROW, token.NOT: // unary operators ++ token.ADD, token.SUB, token.MUL, token.AND, token.XOR, token.ARROW, token.NOT, // unary operators ++ mt.MACRO, mt.SPLICE, mt.QUOTE, mt.QUASIQUOTE, mt.UNQUOTE, mt.UNQUOTE_SPLICE, // patch: macro, quote and friends ++ mt.LAMBDA: ++ + s, _ = p.parseSimpleStmt(labelOk) + // because of the required look-ahead, labeled statements are + // parsed by parseSimpleStmt - don't expect a semicolon after +@@ -2173,6 +2252,8 @@ + if _, isLabeledStmt := s.(*ast.LabeledStmt); !isLabeledStmt { + p.expectSemi() + } ++ case token.IMPORT: // patch: allow imports inside statements. useful for ~quote and ~quasiquote ++ s = &ast.DeclStmt{Decl: p.parseGenDecl(token.IMPORT, p.parseImportSpec)} + case token.GO: + s = p.parseGoStmt() + case token.DEFER: +@@ -2366,17 +2447,41 @@ + } + } + +-func (p *parser) parseFuncDecl() *ast.FuncDecl { ++func (p *parser) parseFuncDecl(tok token.Token) *ast.FuncDecl { + if p.trace { + defer un(trace(p, "FunctionDecl")) + } ++ decl := p.parseFuncOrMacroDecl(tok) ++ ++ // paranoia: empty receiver list is omitted. this should not happen, ++ // but we use it to distinguish functions from macros, so better safe than sorry. ++ recv := decl.Recv ++ if recv != nil && len(recv.List) == 0 { ++ decl.Recv = nil ++ } ++ return decl ++} ++ ++// patch: parse a macro declaration ++func (p *parser) parseMacroDecl() *ast.FuncDecl { ++ if p.trace { ++ defer un(trace(p, "MacroDecl")) ++ } ++ decl := p.parseFuncOrMacroDecl(mt.MACRO) ++ // add zero-length receiver list, to mark decl as a macro ++ decl.Recv = &ast.FieldList{List: []*ast.Field{}} ++ return decl ++} ++ ++func (p *parser) parseFuncOrMacroDecl(tok token.Token) *ast.FuncDecl { + + doc := p.leadComment +- pos := p.expect(token.FUNC) ++ pos := p.expect(tok) + scope := ast.NewScope(p.topScope) // function scope + + var recv *ast.FieldList +- if p.tok == token.LPAREN { ++ // patch: macros cannot have a receiver ++ if tok != mt.MACRO && p.tok == token.LPAREN { + recv = p.parseParameters(scope, false) + } + +@@ -2429,8 +2534,11 @@ + case token.TYPE: + f = p.parseTypeSpec + +- case token.FUNC: +- return p.parseFuncDecl() ++ case token.FUNC, mt.FUNCTION: ++ return p.parseFuncDecl(p.tok) ++ ++ case mt.MACRO: // patch: parse a macro declaration ++ return p.parseMacroDecl() + + default: + pos := p.pos +@@ -2473,8 +2581,11 @@ + return nil + } + +- p.openScope() +- p.pkgScope = p.topScope ++ topScope := p.topScope ++ labelScope := p.labelScope ++ if topScope == nil { ++ p.openScope() ++ } + var decls []ast.Decl + if p.mode&PackageClauseOnly == 0 { + // import decls +@@ -2489,9 +2600,11 @@ + } + } + } +- p.closeScope() +- assert(p.topScope == nil, "unbalanced scopes") +- assert(p.labelScope == nil, "unbalanced label scopes") ++ if topScope == nil { ++ p.closeScope() ++ } ++ assert(p.topScope == topScope, "unbalanced scopes") ++ assert(p.labelScope == labelScope, "unbalanced label scopes") + + // resolve global identifiers within the same file + i := 0 diff --git a/vendor/github.com/cosmos72/gomacro/parser/parser.go b/vendor/github.com/cosmos72/gomacro/parser/parser.go new file mode 100644 index 0000000..34d67bc --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/parser/parser.go @@ -0,0 +1,2639 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package parser implements a parser for Go source files. Input may be +// provided in a variety of forms (see the various Parse* functions); the +// output is an abstract syntax tree (AST) representing the Go source. The +// parser is invoked through one of the Parse* functions. +// +// The parser accepts a larger language than is syntactically permitted by +// the Go spec, for simplicity, and for improved robustness in the presence +// of syntax errors. For instance, in method declarations, the receiver is +// treated like an ordinary parameter list and thus may contain multiple +// entries where the spec permits exactly one. Consequently, the corresponding +// field in the AST (ast.FuncDecl.Recv) field is not restricted to one entry. +// +package parser + +import ( + "fmt" + "go/ast" + "go/token" + "strconv" + "strings" + "unicode" + + "github.com/cosmos72/gomacro/scanner" + mt "github.com/cosmos72/gomacro/token" +) + +// The parser structure holds the parser's internal state. +type parser struct { + file *mt.File + errors scanner.ErrorList + scanner scanner.Scanner + + // Tracing/debugging + mode Mode // parsing mode + trace bool // == (mode & Trace != 0) + indent int // indentation used for tracing output + + // Comments + comments []*ast.CommentGroup + leadComment *ast.CommentGroup // last lead comment + lineComment *ast.CommentGroup // last line comment + + tok0 token.Token // patch: Previous token + specialChar rune // patch: prefix for quote operators ' ` , ,@ + + // Next token + pos token.Pos // token position + tok token.Token // one token look-ahead + lit string // token literal + + // Error recovery + // (used to limit the number of calls to syncXXX functions + // w/o making scanning progress - avoids potential endless + // loops across multiple parser functions during error recovery) + syncPos token.Pos // last synchronization position + syncCnt int // number of calls to syncXXX without progress + + // Non-syntactic parser control + exprLev int // < 0: in control clause, >= 0: in expression + inRhs bool // if set, the parser is parsing a rhs expression + + // Ordinary identifier scopes + pkgScope *ast.Scope // pkgScope.Outer == nil + topScope *ast.Scope // top-most scope; may be pkgScope + unresolved []*ast.Ident // unresolved identifiers + imports []*ast.ImportSpec // list of imports + + // Label scopes + // (maintained by open/close LabelScope) + labelScope *ast.Scope // label scope for current function + targetStack [][]*ast.Ident // stack of unresolved labels +} + +func (p *parser) init(fset *mt.FileSet, filename string, lineOffset int, src []byte, mode Mode) { + // Explicitly initialize all private fields since a parser may be reused. + if fset == nil { + fset = mt.NewFileSet() + } + p.file = fset.AddFile(filename, -1, len(src), lineOffset) + p.errors = nil + + var m scanner.Mode + if mode&ParseComments != 0 { + m = scanner.ScanComments + } + if p.specialChar == '\x00' { + p.specialChar = '~' + } + eh := func(pos token.Position, msg string) { p.errors.Add(pos, msg) } + p.scanner.Init(p.file, src, eh, m, p.specialChar) + + p.mode = mode + p.trace = mode&Trace != 0 // for convenience (p.trace is used frequently) + p.indent = 0 + + p.comments = nil + p.leadComment = nil + p.lineComment = nil + + p.pos = token.NoPos + p.tok = token.ILLEGAL + p.lit = "" + + p.syncPos = token.NoPos + p.syncCnt = 0 + + p.exprLev = 0 + p.inRhs = false + + p.topScope = nil + p.openScope() + p.pkgScope = p.topScope + + p.unresolved = nil + p.imports = nil + + p.labelScope = nil + p.targetStack = nil + + p.next() +} + +// ---------------------------------------------------------------------------- +// Scoping support + +func (p *parser) openScope() { + p.topScope = ast.NewScope(p.topScope) +} + +func (p *parser) closeScope() { + p.topScope = p.topScope.Outer +} + +func (p *parser) openLabelScope() { + p.labelScope = ast.NewScope(p.labelScope) + p.targetStack = append(p.targetStack, nil) +} + +func (p *parser) closeLabelScope() { + // resolve labels + n := len(p.targetStack) - 1 + scope := p.labelScope + for _, ident := range p.targetStack[n] { + ident.Obj = scope.Lookup(ident.Name) + if ident.Obj == nil && p.mode&DeclarationErrors != 0 { + p.error(ident.Pos(), fmt.Sprintf("label %s undefined", ident.Name)) + } + } + // pop label scope + p.targetStack = p.targetStack[0:n] + p.labelScope = p.labelScope.Outer +} + +func (p *parser) declare(decl, data interface{}, scope *ast.Scope, kind ast.ObjKind, idents ...*ast.Ident) { + for _, ident := range idents { + assert(ident.Obj == nil, "identifier already declared or resolved") + obj := ast.NewObj(kind, ident.Name) + // remember the corresponding declaration for redeclaration + // errors and global variable resolution/typechecking phase + obj.Decl = decl + obj.Data = data + ident.Obj = obj + if ident.Name != "_" { + if alt := scope.Insert(obj); alt != nil && p.mode&DeclarationErrors != 0 { + prevDecl := "" + if pos := alt.Pos(); pos.IsValid() { + prevDecl = fmt.Sprintf("\n\tprevious declaration at %s", p.file.Position(pos)) + } + p.error(ident.Pos(), fmt.Sprintf("%s redeclared in this block%s", ident.Name, prevDecl)) + } + } + } +} + +func (p *parser) shortVarDecl(decl *ast.AssignStmt, list []ast.Expr) { + // Go spec: A short variable declaration may redeclare variables + // provided they were originally declared in the same block with + // the same type, and at least one of the non-blank variables is new. + n := 0 // number of new variables + for _, x := range list { + if ident, isIdent := x.(*ast.Ident); isIdent { + assert(ident.Obj == nil, "identifier already declared or resolved") + obj := ast.NewObj(ast.Var, ident.Name) + // remember corresponding assignment for other tools + obj.Decl = decl + ident.Obj = obj + if ident.Name != "_" { + if alt := p.topScope.Insert(obj); alt != nil { + ident.Obj = alt // redeclaration + } else { + n++ // new declaration + } + } + } else { + p.errorExpected(x.Pos(), "identifier on left side of :=") + } + } + if n == 0 && p.mode&DeclarationErrors != 0 { + p.error(list[0].Pos(), "no new variables on left side of :=") + } +} + +// The unresolved object is a sentinel to mark identifiers that have been added +// to the list of unresolved identifiers. The sentinel is only used for verifying +// internal consistency. +var unresolved = new(ast.Object) + +// If x is an identifier, tryResolve attempts to resolve x by looking up +// the object it denotes. If no object is found and collectUnresolved is +// set, x is marked as unresolved and collected in the list of unresolved +// identifiers. +// +func (p *parser) tryResolve(x ast.Expr, collectUnresolved bool) { + // nothing to do if x is not an identifier or the blank identifier + ident, _ := x.(*ast.Ident) + if ident == nil { + return + } + assert(ident.Obj == nil, "identifier already declared or resolved") + if ident.Name == "_" { + return + } + // try to resolve the identifier + for s := p.topScope; s != nil; s = s.Outer { + if obj := s.Lookup(ident.Name); obj != nil { + ident.Obj = obj + return + } + } + // all local scopes are known, so any unresolved identifier + // must be found either in the file scope, package scope + // (perhaps in another file), or universe scope --- collect + // them so that they can be resolved later + if collectUnresolved { + ident.Obj = unresolved + p.unresolved = append(p.unresolved, ident) + } +} + +func (p *parser) resolve(x ast.Expr) { + p.tryResolve(x, true) +} + +// ---------------------------------------------------------------------------- +// Parsing support + +func (p *parser) printTrace(a ...interface{}) { + const dots = ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . " + const n = len(dots) + pos := p.file.Position(p.pos) + fmt.Printf("%5d:%3d: ", pos.Line, pos.Column) + i := 2 * p.indent + for i > n { + fmt.Print(dots) + i -= n + } + // i <= n + fmt.Print(dots[0:i]) + fmt.Println(a...) +} + +func trace(p *parser, msg string) *parser { + p.printTrace(msg, "(") + p.indent++ + return p +} + +// Usage pattern: defer un(trace(p, "...")) +func un(p *parser) { + p.indent-- + p.printTrace(")") +} + +// Advance to the next token. +func (p *parser) next0() { + // Because of one-token look-ahead, print the previous token + // when tracing as it provides a more readable output. The + // very first token (!p.pos.IsValid()) is not initialized + // (it is token.ILLEGAL), so don't print it . + if p.trace && p.pos.IsValid() { + s := mt.String(p.tok) // patch: support macro-related keywords + switch { + case p.tok.IsLiteral(): + p.printTrace(s, p.lit) + case p.tok.IsOperator(), p.tok.IsKeyword(), + mt.IsMacroKeyword(p.tok): // patch: support macro-related keywords + + p.printTrace("\"" + s + "\"") + default: + p.printTrace(s) + } + } + + p.pos, p.tok, p.lit = p.scanner.Scan() +} + +// Consume a comment and return it and the line on which it ends. +func (p *parser) consumeComment() (comment *ast.Comment, endline int) { + // /*-style comments may end on a different line than where they start. + // Scan the comment for '\n' chars and adjust endline accordingly. + endline = p.file.Line(p.pos) + if p.lit[1] == '*' { + // don't use range here - no need to decode Unicode code points + for i := 0; i < len(p.lit); i++ { + if p.lit[i] == '\n' { + endline++ + } + } + } + + comment = &ast.Comment{Slash: p.pos, Text: p.lit} + p.next0() + + return +} + +// Consume a group of adjacent comments, add it to the parser's +// comments list, and return it together with the line at which +// the last comment in the group ends. A non-comment token or n +// empty lines terminate a comment group. +// +func (p *parser) consumeCommentGroup(n int) (comments *ast.CommentGroup, endline int) { + var list []*ast.Comment + endline = p.file.Line(p.pos) + for p.tok == token.COMMENT && p.file.Line(p.pos) <= endline+n { + var comment *ast.Comment + comment, endline = p.consumeComment() + list = append(list, comment) + } + + // add comment group to the comments list + comments = &ast.CommentGroup{List: list} + p.comments = append(p.comments, comments) + + return +} + +// Advance to the next non-comment token. In the process, collect +// any comment groups encountered, and remember the last lead and +// and line comments. +// +// A lead comment is a comment group that starts and ends in a +// line without any other tokens and that is followed by a non-comment +// token on the line immediately after the comment group. +// +// A line comment is a comment group that follows a non-comment +// token on the same line, and that has no tokens after it on the line +// where it ends. +// +// Lead and line comments may be considered documentation that is +// stored in the AST. +// +func (p *parser) next() { + p.leadComment = nil + p.lineComment = nil + prev := p.pos + p.tok0 = p.tok + p.next0() + + if p.tok == token.COMMENT { + var comment *ast.CommentGroup + var endline int + + if p.file.Line(p.pos) == p.file.Line(prev) { + // The comment is on same line as the previous token; it + // cannot be a lead comment but may be a line comment. + comment, endline = p.consumeCommentGroup(0) + if p.file.Line(p.pos) != endline { + // The next token is on a different line, thus + // the last comment group is a line comment. + p.lineComment = comment + } + } + + // consume successor comments, if any + endline = -1 + for p.tok == token.COMMENT { + comment, endline = p.consumeCommentGroup(1) + } + + if endline+1 == p.file.Line(p.pos) { + // The next token is following on the line immediately after the + // comment group, thus the last comment group is a lead comment. + p.leadComment = comment + } + } +} + +// A bailout panic is raised to indicate early termination. +type bailout struct{} + +func (p *parser) error(pos token.Pos, msg string) { + epos := p.file.Position(pos) + + // If AllErrors is not set, discard errors reported on the same line + // as the last recorded error and stop parsing if there are more than + // 10 errors. + if p.mode&AllErrors == 0 { + n := len(p.errors) + if n > 0 && p.errors[n-1].Pos.Line == epos.Line { + return // discard - likely a spurious error + } + if n > 10 { + panic(bailout{}) + } + } + + p.errors.Add(epos, msg) +} + +func (p *parser) errorExpected(pos token.Pos, msg string) { + msg = "expected " + msg + if pos == p.pos { + // the error happened at the current position; + // make the error message more specific + if p.tok == token.SEMICOLON && p.lit == "\n" { + msg += ", found newline" + } else { + msg += ", found '" + mt.String(p.tok) + "'" + if p.tok.IsLiteral() { + msg += " " + p.lit + } + } + } + p.error(pos, msg) +} + +func (p *parser) expect(tok token.Token) token.Pos { + pos := p.pos + if p.tok != tok { + p.errorExpected(pos, "'"+mt.String(tok)+"'") + } + p.next() // make progress + return pos +} + +// expectClosing is like expect but provides a better error message +// for the common case of a missing comma before a newline. +// +func (p *parser) expectClosing(tok token.Token, context string) token.Pos { + if p.tok != tok && p.tok == token.SEMICOLON && p.lit == "\n" { + p.error(p.pos, "missing ',' before newline in "+context) + p.next() + } + return p.expect(tok) +} + +func (p *parser) expectSemi() { + // semicolon is optional before a closing ')' or '}' + if p.tok != token.RPAREN && p.tok != token.RBRACE && p.tok != token.RBRACK { // patch: semicolon is optional also before a closing ']' + switch p.tok { + case token.COMMA: + // permit a ',' instead of a ';' but complain + p.errorExpected(p.pos, "';'") + fallthrough + case token.SEMICOLON: + p.next() + default: + p.errorExpected(p.pos, "';'") + syncStmt(p) + } + } +} + +func (p *parser) atComma(context string, follow token.Token) bool { + if p.tok == token.COMMA { + return true + } + if p.tok != follow { + msg := "missing ','" + if p.tok == token.SEMICOLON && p.lit == "\n" { + msg += " before newline" + } + p.error(p.pos, msg+" in "+context) + return true // "insert" comma and continue + } + return false +} + +func assert(cond bool, msg string) { + if !cond { + panic("go/parser internal error: " + msg) + } +} + +// syncStmt advances to the next statement. +// Used for synchronization after an error. +// +func syncStmt(p *parser) { + for { + switch p.tok { + case token.BREAK, token.CONST, token.CONTINUE, token.DEFER, + token.FALLTHROUGH, token.FOR, token.GO, token.GOTO, + token.IF, token.RETURN, token.SELECT, token.SWITCH, + token.TYPE, token.VAR, mt.FUNCTION: + // Return only if parser made some progress since last + // sync or if it has not reached 10 sync calls without + // progress. Otherwise consume at least one token to + // avoid an endless parser loop (it is possible that + // both parseOperand and parseStmt call syncStmt and + // correctly do not advance, thus the need for the + // invocation limit p.syncCnt). + if p.pos == p.syncPos && p.syncCnt < 10 { + p.syncCnt++ + return + } + if p.pos > p.syncPos { + p.syncPos = p.pos + p.syncCnt = 0 + return + } + // Reaching here indicates a parser bug, likely an + // incorrect token list in this function, but it only + // leads to skipping of possibly correct code if a + // previous error is present, and thus is preferred + // over a non-terminating parse. + case token.EOF: + return + } + p.next() + } +} + +// syncDecl advances to the next declaration. +// Used for synchronization after an error. +// +func syncDecl(p *parser) { + for { + switch p.tok { + case token.CONST, token.TYPE, token.VAR, token.FUNC, mt.FUNCTION: + // see comments in syncStmt + if p.pos == p.syncPos && p.syncCnt < 10 { + p.syncCnt++ + return + } + if p.pos > p.syncPos { + p.syncPos = p.pos + p.syncCnt = 0 + return + } + case token.EOF: + return + } + p.next() + } +} + +// safePos returns a valid file position for a given position: If pos +// is valid to begin with, safePos returns pos. If pos is out-of-range, +// safePos returns the EOF position. +// +// This is hack to work around "artificial" end positions in the AST which +// are computed by adding 1 to (presumably valid) token positions. If the +// token positions are invalid due to parse errors, the resulting end position +// may be past the file's EOF position, which would lead to panics if used +// later on. +// +func (p *parser) safePos(pos token.Pos) (res token.Pos) { + defer func() { + if recover() != nil { + res = token.Pos(p.file.Base() + p.file.Size()) // EOF position + } + }() + _ = p.file.Offset(pos) // trigger a panic if position is out-of-range + return pos +} + +// ---------------------------------------------------------------------------- +// Identifiers + +func (p *parser) parseIdent() *ast.Ident { + pos := p.pos + name := "_" + if p.tok == token.IDENT { + name = p.lit + p.next() + } else { + p.expect(token.IDENT) // use expect() error handling + } + return &ast.Ident{NamePos: pos, Name: name} +} + +func (p *parser) parseIdentList() (list []*ast.Ident) { + if p.trace { + defer un(trace(p, "IdentList")) + } + + list = append(list, p.parseIdent()) + for p.tok == token.COMMA { + p.next() + list = append(list, p.parseIdent()) + } + + return +} + +// ---------------------------------------------------------------------------- +// Common productions + +// If lhs is set, result list elements which are identifiers are not resolved. +func (p *parser) parseExprList(lhs bool) (list []ast.Expr) { + if p.trace { + defer un(trace(p, "ExpressionList")) + } + + list = append(list, p.checkExpr(p.parseExpr(lhs))) + for p.tok == token.COMMA { + p.next() + list = append(list, p.checkExpr(p.parseExpr(lhs))) + } + + return +} + +func (p *parser) parseLhsList() []ast.Expr { + old := p.inRhs + p.inRhs = false + list := p.parseExprList(true) + switch p.tok { + case token.DEFINE: + // lhs of a short variable declaration + // but doesn't enter scope until later: + // caller must call p.shortVarDecl(p.makeIdentList(list)) + // at appropriate time. + case token.COLON: + // lhs of a label declaration or a communication clause of a select + // statement (parseLhsList is not called when parsing the case clause + // of a switch statement): + // - labels are declared by the caller of parseLhsList + // - for communication clauses, if there is a stand-alone identifier + // followed by a colon, we have a syntax error; there is no need + // to resolve the identifier in that case + default: + // identifiers must be declared elsewhere + for _, x := range list { + p.resolve(x) + } + } + p.inRhs = old + return list +} + +func (p *parser) parseRhsList() []ast.Expr { + old := p.inRhs + p.inRhs = true + list := p.parseExprList(false) + p.inRhs = old + return list +} + +// ---------------------------------------------------------------------------- +// Types + +func (p *parser) parseType() ast.Expr { + if p.trace { + defer un(trace(p, "Type")) + } + + typ := p.tryType() + + if typ == nil { + pos := p.pos + p.errorExpected(pos, "type") + p.next() // make progress + return &ast.BadExpr{From: pos, To: p.pos} + } + + return typ +} + +// If the result is an identifier, it is not resolved. +func (p *parser) parseTypeName() ast.Expr { + if p.trace { + defer un(trace(p, "TypeName")) + } + + ident := p.parseIdent() + // don't resolve ident yet - it may be a parameter or field name + + if p.tok == token.PERIOD { + // ident is a package name + p.next() + p.resolve(ident) + sel := p.parseIdent() + return &ast.SelectorExpr{X: ident, Sel: sel} + } + + return ident +} + +func (p *parser) parseArrayType() ast.Expr { + if p.trace { + defer un(trace(p, "ArrayType")) + } + + lbrack := p.expect(token.LBRACK) + p.exprLev++ + var len ast.Expr + // always permit ellipsis for more fault-tolerant parsing + if p.tok == token.ELLIPSIS { + len = &ast.Ellipsis{Ellipsis: p.pos} + p.next() + } else if p.tok != token.RBRACK { + len = p.parseRhs() + } + p.exprLev-- + p.expect(token.RBRACK) + elt := p.parseType() + + return &ast.ArrayType{Lbrack: lbrack, Len: len, Elt: elt} +} + +func (p *parser) makeIdentList(list []ast.Expr) []*ast.Ident { + idents := make([]*ast.Ident, len(list)) + for i, x := range list { + ident, isIdent := x.(*ast.Ident) + if !isIdent { + if _, isBad := x.(*ast.BadExpr); !isBad { + // only report error if it's a new one + p.errorExpected(x.Pos(), "identifier") + } + ident = &ast.Ident{NamePos: x.Pos(), Name: "_"} + } + idents[i] = ident + } + return idents +} + +func (p *parser) parseFieldDecl(scope *ast.Scope) *ast.Field { + if p.trace { + defer un(trace(p, "FieldDecl")) + } + + doc := p.leadComment + + // 1st FieldDecl + // A type name used as an anonymous field looks like a field identifier. + var list []ast.Expr + for { + list = append(list, p.parseVarType(false)) + if p.tok != token.COMMA { + break + } + p.next() + } + + typ := p.tryVarType(false) + + // analyze case + var idents []*ast.Ident + if typ != nil { + // IdentifierList Type + idents = p.makeIdentList(list) + } else { + // ["*"] TypeName (AnonymousField) + typ = list[0] // we always have at least one element + if n := len(list); n > 1 { + p.errorExpected(p.pos, "type") + typ = &ast.BadExpr{From: p.pos, To: p.pos} + } else if !isTypeName(deref(typ)) { + p.errorExpected(typ.Pos(), "anonymous field") + typ = &ast.BadExpr{From: typ.Pos(), To: p.safePos(typ.End())} + } + } + + // Tag + var tag *ast.BasicLit + if p.tok == token.STRING { + tag = &ast.BasicLit{ValuePos: p.pos, Kind: p.tok, Value: p.lit} + p.next() + } + + p.expectSemi() // call before accessing p.linecomment + + field := &ast.Field{Doc: doc, Names: idents, Type: typ, Tag: tag, Comment: p.lineComment} + p.declare(field, nil, scope, ast.Var, idents...) + p.resolve(typ) + + return field +} + +func (p *parser) parseStructType() *ast.StructType { + if p.trace { + defer un(trace(p, "StructType")) + } + + pos := p.expect(token.STRUCT) + lbrace := p.expect(token.LBRACE) + scope := ast.NewScope(nil) // struct scope + var list []*ast.Field + for p.tok == token.IDENT || p.tok == token.MUL || p.tok == token.LPAREN { + // a field declaration cannot start with a '(' but we accept + // it here for more robust parsing and better error messages + // (parseFieldDecl will check and complain if necessary) + list = append(list, p.parseFieldDecl(scope)) + } + rbrace := p.expect(token.RBRACE) + + return &ast.StructType{ + Struct: pos, + Fields: &ast.FieldList{ + Opening: lbrace, + List: list, + Closing: rbrace, + }, + } +} + +func (p *parser) parsePointerType() *ast.StarExpr { + if p.trace { + defer un(trace(p, "PointerType")) + } + + star := p.expect(token.MUL) + base := p.parseType() + + return &ast.StarExpr{Star: star, X: base} +} + +// If the result is an identifier, it is not resolved. +func (p *parser) tryVarType(isParam bool) ast.Expr { + if isParam && p.tok == token.ELLIPSIS { + pos := p.pos + p.next() + typ := p.tryIdentOrType() // don't use parseType so we can provide better error message + if typ != nil { + p.resolve(typ) + } else { + p.error(pos, "'...' parameter is missing type") + typ = &ast.BadExpr{From: pos, To: p.pos} + } + return &ast.Ellipsis{Ellipsis: pos, Elt: typ} + } + return p.tryIdentOrType() +} + +// If the result is an identifier, it is not resolved. +func (p *parser) parseVarType(isParam bool) ast.Expr { + typ := p.tryVarType(isParam) + if typ == nil { + pos := p.pos + p.errorExpected(pos, "type") + p.next() // make progress + typ = &ast.BadExpr{From: pos, To: p.pos} + } + return typ +} + +func (p *parser) parseParameterList(scope *ast.Scope, ellipsisOk bool) (params []*ast.Field) { + if p.trace { + defer un(trace(p, "ParameterList")) + } + + // 1st ParameterDecl + // A list of identifiers looks like a list of type names. + var list []ast.Expr + for { + list = append(list, p.parseVarType(ellipsisOk)) + if p.tok != token.COMMA { + break + } + p.next() + if p.tok == token.RPAREN { + break + } + } + + // analyze case + if typ := p.tryVarType(ellipsisOk); typ != nil { + // IdentifierList Type + idents := p.makeIdentList(list) + field := &ast.Field{Names: idents, Type: typ} + params = append(params, field) + // Go spec: The scope of an identifier denoting a function + // parameter or result variable is the function body. + p.declare(field, nil, scope, ast.Var, idents...) + p.resolve(typ) + if !p.atComma("parameter list", token.RPAREN) { + return + } + p.next() + for p.tok != token.RPAREN && p.tok != token.EOF { + idents := p.parseIdentList() + typ := p.parseVarType(ellipsisOk) + field := &ast.Field{Names: idents, Type: typ} + params = append(params, field) + // Go spec: The scope of an identifier denoting a function + // parameter or result variable is the function body. + p.declare(field, nil, scope, ast.Var, idents...) + p.resolve(typ) + if !p.atComma("parameter list", token.RPAREN) { + break + } + p.next() + } + return + } + + // Type { "," Type } (anonymous parameters) + params = make([]*ast.Field, len(list)) + for i, typ := range list { + p.resolve(typ) + params[i] = &ast.Field{Type: typ} + } + return +} + +func (p *parser) parseParameters(scope *ast.Scope, ellipsisOk bool) *ast.FieldList { + if p.trace { + defer un(trace(p, "Parameters")) + } + + var params []*ast.Field + lparen := p.expect(token.LPAREN) + if p.tok != token.RPAREN { + params = p.parseParameterList(scope, ellipsisOk) + } + rparen := p.expect(token.RPAREN) + + return &ast.FieldList{Opening: lparen, List: params, Closing: rparen} +} + +func (p *parser) parseResult(scope *ast.Scope) *ast.FieldList { + if p.trace { + defer un(trace(p, "Result")) + } + + if p.tok == token.LPAREN { + return p.parseParameters(scope, false) + } + + typ := p.tryType() + if typ != nil { + list := make([]*ast.Field, 1) + list[0] = &ast.Field{Type: typ} + return &ast.FieldList{List: list} + } + + return nil +} + +func (p *parser) parseSignature(scope *ast.Scope) (params, results *ast.FieldList) { + if p.trace { + defer un(trace(p, "Signature")) + } + + params = p.parseParameters(scope, true) + results = p.parseResult(scope) + + return +} + +func (p *parser) parseFuncType(tok token.Token) (*ast.FuncType, *ast.Scope) { + if p.trace { + defer un(trace(p, "FuncType")) + } + + pos := p.expect(tok) + scope := ast.NewScope(p.topScope) // function scope + params, results := p.parseSignature(scope) + + return &ast.FuncType{Func: pos, Params: params, Results: results}, scope +} + +func (p *parser) parseMethodSpec(scope *ast.Scope) *ast.Field { + if p.trace { + defer un(trace(p, "MethodSpec")) + } + + doc := p.leadComment + var idents []*ast.Ident + var typ ast.Expr + x := p.parseTypeName() + if ident, isIdent := x.(*ast.Ident); isIdent && p.tok == token.LPAREN { + // method + idents = []*ast.Ident{ident} + scope := ast.NewScope(nil) // method scope + params, results := p.parseSignature(scope) + typ = &ast.FuncType{Func: token.NoPos, Params: params, Results: results} + } else { + // embedded interface + typ = x + p.resolve(typ) + } + p.expectSemi() // call before accessing p.linecomment + + spec := &ast.Field{Doc: doc, Names: idents, Type: typ, Comment: p.lineComment} + p.declare(spec, nil, scope, ast.Fun, idents...) + + return spec +} + +func (p *parser) parseInterfaceType() *ast.InterfaceType { + if p.trace { + defer un(trace(p, "InterfaceType")) + } + + pos := p.expect(token.INTERFACE) + lbrace := p.expect(token.LBRACE) + scope := ast.NewScope(nil) // interface scope + var list []*ast.Field + for p.tok == token.IDENT { + list = append(list, p.parseMethodSpec(scope)) + } + rbrace := p.expect(token.RBRACE) + + return &ast.InterfaceType{ + Interface: pos, + Methods: &ast.FieldList{ + Opening: lbrace, + List: list, + Closing: rbrace, + }, + } +} + +func (p *parser) parseMapType() *ast.MapType { + if p.trace { + defer un(trace(p, "MapType")) + } + + pos := p.expect(token.MAP) + p.expect(token.LBRACK) + key := p.parseType() + p.expect(token.RBRACK) + value := p.parseType() + + return &ast.MapType{Map: pos, Key: key, Value: value} +} + +func (p *parser) parseChanType() *ast.ChanType { + if p.trace { + defer un(trace(p, "ChanType")) + } + + pos := p.pos + dir := ast.SEND | ast.RECV + var arrow token.Pos + if p.tok == token.CHAN { + p.next() + if p.tok == token.ARROW { + arrow = p.pos + p.next() + dir = ast.SEND + } + } else { + arrow = p.expect(token.ARROW) + p.expect(token.CHAN) + dir = ast.RECV + } + value := p.parseType() + + return &ast.ChanType{Begin: pos, Arrow: arrow, Dir: dir, Value: value} +} + +// If the result is an identifier, it is not resolved. +func (p *parser) tryIdentOrType() ast.Expr { + switch p.tok { + case token.IDENT: + return p.parseTypeName() + case token.LBRACK: + return p.parseArrayType() + case token.STRUCT: + return p.parseStructType() + case token.MUL: + return p.parsePointerType() + case token.FUNC, mt.LAMBDA: + typ, _ := p.parseFuncType(p.tok) + return typ + case token.INTERFACE: + return p.parseInterfaceType() + case token.MAP: + return p.parseMapType() + case token.CHAN, token.ARROW: + return p.parseChanType() + case token.LPAREN: + lparen := p.pos + p.next() + typ := p.parseType() + rparen := p.expect(token.RPAREN) + return &ast.ParenExpr{Lparen: lparen, X: typ, Rparen: rparen} + case mt.QUOTE, mt.QUASIQUOTE, mt.UNQUOTE: // patch: support quote and friends inside types + return p.parseQuote() + } + + // no type found + return nil +} + +func (p *parser) tryType() ast.Expr { + typ := p.tryIdentOrType() + if typ != nil { + p.resolve(typ) + } + return typ +} + +// ---------------------------------------------------------------------------- +// Blocks + +func (p *parser) parseStmtList() (list []ast.Stmt) { + if p.trace { + defer un(trace(p, "StatementList")) + } + + for p.tok != mt.TYPECASE && p.tok != token.CASE && p.tok != token.DEFAULT && p.tok != token.RBRACE && p.tok != token.EOF { + list = append(list, p.parseStmt()) + } + + return +} + +func (p *parser) parseBody(scope *ast.Scope) *ast.BlockStmt { + if p.trace { + defer un(trace(p, "Body")) + } + + lbrace := p.expect(token.LBRACE) + p.topScope = scope // open function scope + p.openLabelScope() + list := p.parseStmtList() + p.closeLabelScope() + p.closeScope() + rbrace := p.expect(token.RBRACE) + + return &ast.BlockStmt{Lbrace: lbrace, List: list, Rbrace: rbrace} +} + +func (p *parser) parseBlockStmt() *ast.BlockStmt { + if p.trace { + defer un(trace(p, "BlockStmt")) + } + + lbrace := p.expect(token.LBRACE) + p.openScope() + list := p.parseStmtList() + p.closeScope() + rbrace := p.expect(token.RBRACE) + + return &ast.BlockStmt{Lbrace: lbrace, List: list, Rbrace: rbrace} +} + +// ---------------------------------------------------------------------------- +// Expressions + +func (p *parser) parseFuncTypeOrLit(tok token.Token) ast.Expr { + if p.trace { + defer un(trace(p, "FuncTypeOrLit")) + } + + typ, scope := p.parseFuncType(tok) + if p.tok != token.LBRACE { + // function type only + return typ + } + + p.exprLev++ + body := p.parseBody(scope) + p.exprLev-- + + return &ast.FuncLit{Type: typ, Body: body} +} + +// parseOperand may return an expression or a raw type (incl. array +// types of the form [...]T. Callers must verify the result. +// If lhs is set and the result is an identifier, it is not resolved. +// +func (p *parser) parseOperand(lhs bool) ast.Expr { + if p.trace { + defer un(trace(p, "Operand")) + } + + switch p.tok { + case token.IDENT: + x := p.parseIdent() + if !lhs { + p.resolve(x) + } + return x + + case token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING: + x := &ast.BasicLit{ValuePos: p.pos, Kind: p.tok, Value: p.lit} + p.next() + return x + + case token.LPAREN: + lparen := p.pos + p.next() + p.exprLev++ + x := p.parseRhsOrType() // types may be parenthesized: (some type) + p.exprLev-- + rparen := p.expect(token.RPAREN) + return &ast.ParenExpr{Lparen: lparen, X: x, Rparen: rparen} + + case token.FUNC, mt.LAMBDA: + // patch: lambda. equivalent to func, useful to resolve ambiguities between closures + // and function/method declarations + return p.parseFuncTypeOrLit(p.tok) + + // patch: quote and friends + // TODO: accept ms.MACRO here and interpret as local macro definition? (i.e. Common Lisp macrolet) + case mt.QUOTE, mt.QUASIQUOTE, mt.UNQUOTE, mt.UNQUOTE_SPLICE: + return p.parseQuote() + + // patch: accept block statements inside expressions. allows to nest macro calls, + // to write { if a { b } else { c } } inside an expression, and many other things + case token.LBRACE: + return p.parseExprBlock() + } + + if typ := p.tryIdentOrType(); typ != nil { + // could be type for composite literal or conversion + _, isIdent := typ.(*ast.Ident) + assert(!isIdent, "type cannot be identifier") + return typ + } + + // we have an error + pos := p.pos + p.errorExpected(pos, "operand") + syncStmt(p) + return &ast.BadExpr{From: pos, To: p.pos} +} + +func (p *parser) parseSelector(x ast.Expr) ast.Expr { + if p.trace { + defer un(trace(p, "Selector")) + } + + sel := p.parseIdent() + + return &ast.SelectorExpr{X: x, Sel: sel} +} + +func (p *parser) parseTypeAssertion(x ast.Expr) ast.Expr { + if p.trace { + defer un(trace(p, "TypeAssertion")) + } + + lparen := p.expect(token.LPAREN) + var typ ast.Expr + if p.tok == token.TYPE { + // type switch: typ == nil + p.next() + } else { + typ = p.parseType() + } + rparen := p.expect(token.RPAREN) + + return &ast.TypeAssertExpr{X: x, Type: typ, Lparen: lparen, Rparen: rparen} +} + +func (p *parser) parseIndexOrSlice(x ast.Expr) ast.Expr { + if p.trace { + defer un(trace(p, "IndexOrSlice")) + } + + const N = 3 // change the 3 to 2 to disable 3-index slices + lbrack := p.expect(token.LBRACK) + p.exprLev++ + var index [N]ast.Expr + var colons [N - 1]token.Pos + if p.tok != token.COLON { + index[0] = p.parseRhs() + } + ncolons := 0 + for p.tok == token.COLON && ncolons < len(colons) { + colons[ncolons] = p.pos + ncolons++ + p.next() + if p.tok != token.COLON && p.tok != token.RBRACK && p.tok != token.EOF { + index[ncolons] = p.parseRhs() + } + } + p.exprLev-- + rbrack := p.expect(token.RBRACK) + + if ncolons > 0 { + // slice expression + slice3 := false + if ncolons == 2 { + slice3 = true + // Check presence of 2nd and 3rd index here rather than during type-checking + // to prevent erroneous programs from passing through gofmt (was issue 7305). + if index[1] == nil { + p.error(colons[0], "2nd index required in 3-index slice") + index[1] = &ast.BadExpr{From: colons[0] + 1, To: colons[1]} + } + if index[2] == nil { + p.error(colons[1], "3rd index required in 3-index slice") + index[2] = &ast.BadExpr{From: colons[1] + 1, To: rbrack} + } + } + return &ast.SliceExpr{X: x, Lbrack: lbrack, Low: index[0], High: index[1], Max: index[2], Slice3: slice3, Rbrack: rbrack} + } + + return &ast.IndexExpr{X: x, Lbrack: lbrack, Index: index[0], Rbrack: rbrack} +} + +func (p *parser) parseCallOrConversion(fun ast.Expr) *ast.CallExpr { + if p.trace { + defer un(trace(p, "CallOrConversion")) + } + + lparen := p.expect(token.LPAREN) + p.exprLev++ + var list []ast.Expr + var ellipsis token.Pos + for p.tok != token.RPAREN && p.tok != token.EOF && !ellipsis.IsValid() { + list = append(list, p.parseRhsOrType()) // builtins may expect a type: make(some type, ...) + if p.tok == token.ELLIPSIS { + ellipsis = p.pos + p.next() + } + if !p.atComma("argument list", token.RPAREN) { + break + } + p.next() + } + p.exprLev-- + rparen := p.expectClosing(token.RPAREN, "argument list") + + return &ast.CallExpr{Fun: fun, Lparen: lparen, Args: list, Ellipsis: ellipsis, Rparen: rparen} +} + +func (p *parser) parseValue(keyOk bool) ast.Expr { + if p.trace { + defer un(trace(p, "Element")) + } + + if p.tok == token.LBRACE { + return p.parseLiteralValue(nil) + } + + // Because the parser doesn't know the composite literal type, it cannot + // know if a key that's an identifier is a struct field name or a name + // denoting a value. The former is not resolved by the parser or the + // resolver. + // + // Instead, _try_ to resolve such a key if possible. If it resolves, + // it a) has correctly resolved, or b) incorrectly resolved because + // the key is a struct field with a name matching another identifier. + // In the former case we are done, and in the latter case we don't + // care because the type checker will do a separate field lookup. + // + // If the key does not resolve, it a) must be defined at the top + // level in another file of the same package, the universe scope, or be + // undeclared; or b) it is a struct field. In the former case, the type + // checker can do a top-level lookup, and in the latter case it will do + // a separate field lookup. + x := p.checkExpr(p.parseExpr(keyOk)) + if keyOk { + if p.tok == token.COLON { + // Try to resolve the key but don't collect it + // as unresolved identifier if it fails so that + // we don't get (possibly false) errors about + // undeclared names. + p.tryResolve(x, false) + } else { + // not a key + p.resolve(x) + } + } + + return x +} + +func (p *parser) parseElement() ast.Expr { + if p.trace { + defer un(trace(p, "Element")) + } + + x := p.parseValue(true) + if p.tok == token.COLON { + colon := p.pos + p.next() + x = &ast.KeyValueExpr{Key: x, Colon: colon, Value: p.parseValue(false)} + } + + return x +} + +func (p *parser) parseElementList() (list []ast.Expr) { + if p.trace { + defer un(trace(p, "ElementList")) + } + + for p.tok != token.RBRACE && p.tok != token.EOF { + list = append(list, p.parseElement()) + if !p.atComma("composite literal", token.RBRACE) { + break + } + p.next() + } + + return +} + +func (p *parser) parseLiteralValue(typ ast.Expr) ast.Expr { + if p.trace { + defer un(trace(p, "LiteralValue")) + } + + lbrace := p.expect(token.LBRACE) + var elts []ast.Expr + p.exprLev++ + if p.tok != token.RBRACE { + elts = p.parseElementList() + } + p.exprLev-- + rbrace := p.expectClosing(token.RBRACE, "composite literal") + return &ast.CompositeLit{Type: typ, Lbrace: lbrace, Elts: elts, Rbrace: rbrace} +} + +// checkExpr checks that x is an expression (and not a type). +func (p *parser) checkExpr(x ast.Expr) ast.Expr { + switch unparen(x).(type) { + case *ast.BadExpr: + case *ast.Ident: + case *ast.BasicLit: + case *ast.FuncLit: + case *ast.CompositeLit: + case *ast.ParenExpr: + panic("unreachable") + case *ast.SelectorExpr: + case *ast.IndexExpr: + case *ast.SliceExpr: + case *ast.TypeAssertExpr: + // If t.Type == nil we have a type assertion of the form + // y.(type), which is only allowed in type switch expressions. + // It's hard to exclude those but for the case where we are in + // a type switch. Instead be lenient and test this in the type + // checker. + case *ast.CallExpr: + case *ast.StarExpr: + case *ast.UnaryExpr: + case *ast.BinaryExpr: + default: + // all other nodes are not proper expressions + p.errorExpected(x.Pos(), "expression") + x = &ast.BadExpr{From: x.Pos(), To: p.safePos(x.End())} + } + return x +} + +// isTypeName reports whether x is a (qualified) TypeName. +func isTypeName(x ast.Expr) bool { + switch t := x.(type) { + case *ast.BadExpr: + case *ast.Ident: + case *ast.SelectorExpr: + _, isIdent := t.X.(*ast.Ident) + return isIdent + default: + return false // all other nodes are not type names + } + return true +} + +// isLiteralType reports whether x is a legal composite literal type. +func isLiteralType(x ast.Expr) bool { + switch t := x.(type) { + case *ast.BadExpr: + case *ast.Ident: + case *ast.SelectorExpr: + _, isIdent := t.X.(*ast.Ident) + return isIdent + case *ast.ArrayType: + case *ast.StructType: + case *ast.MapType: + default: + return false // all other nodes are not legal composite literal types + } + return true +} + +// If x is of the form *T, deref returns T, otherwise it returns x. +func deref(x ast.Expr) ast.Expr { + if p, isPtr := x.(*ast.StarExpr); isPtr { + x = p.X + } + return x +} + +// If x is of the form (T), unparen returns unparen(T), otherwise it returns x. +func unparen(x ast.Expr) ast.Expr { + for { + if p, ok := x.(*ast.ParenExpr); ok { + x = p.X + continue + } + return x + } +} + +// checkExprOrType checks that x is an expression or a type +// (and not a raw type such as [...]T). +// +func (p *parser) checkExprOrType(x ast.Expr) ast.Expr { + switch t := unparen(x).(type) { + case *ast.ParenExpr: + panic("unreachable") + case *ast.UnaryExpr: + case *ast.ArrayType: + if len, isEllipsis := t.Len.(*ast.Ellipsis); isEllipsis { + p.error(len.Pos(), "expected array length, found '...'") + x = &ast.BadExpr{From: x.Pos(), To: p.safePos(x.End())} + } + } + + // all other nodes are expressions or types + return x +} + +// If lhs is set and the result is an identifier, it is not resolved. +func (p *parser) parsePrimaryExpr(lhs bool) ast.Expr { + if p.trace { + defer un(trace(p, "PrimaryExpr")) + } + + x := p.parseOperand(lhs) +L: + for { + switch p.tok { + case token.PERIOD: + p.next() + if lhs { + p.resolve(x) + } + switch p.tok { + case token.IDENT: + x = p.parseSelector(p.checkExprOrType(x)) + case token.LPAREN: + x = p.parseTypeAssertion(p.checkExpr(x)) + default: + pos := p.pos + p.errorExpected(pos, "selector or type assertion") + p.next() // make progress + sel := &ast.Ident{NamePos: pos, Name: "_"} + x = &ast.SelectorExpr{X: x, Sel: sel} + } + case token.LBRACK: + if lhs { + p.resolve(x) + } + x = p.parseIndexOrSlice(p.checkExpr(x)) + case token.LPAREN: + if lhs { + p.resolve(x) + } + x = p.parseCallOrConversion(p.checkExprOrType(x)) + case token.LBRACE: + if isLiteralType(x) && (p.exprLev >= 0 || !isTypeName(x)) { + if lhs { + p.resolve(x) + } + x = p.parseLiteralValue(x) + } else { + break L + } + default: + break L + } + lhs = false // no need to try to resolve again + } + + return x +} + +// If lhs is set and the result is an identifier, it is not resolved. +func (p *parser) parseUnaryExpr(lhs bool) ast.Expr { + if p.trace { + defer un(trace(p, "UnaryExpr")) + } + + switch p.tok { + case token.ADD, token.SUB, token.NOT, token.XOR, token.AND: + pos, op := p.pos, p.tok + p.next() + x := p.parseUnaryExpr(false) + return &ast.UnaryExpr{OpPos: pos, Op: op, X: p.checkExpr(x)} + + case token.ARROW: + // channel type or receive expression + arrow := p.pos + p.next() + + // If the next token is token.CHAN we still don't know if it + // is a channel type or a receive operation - we only know + // once we have found the end of the unary expression. There + // are two cases: + // + // <- type => (<-type) must be channel type + // <- expr => <-(expr) is a receive from an expression + // + // In the first case, the arrow must be re-associated with + // the channel type parsed already: + // + // <- (chan type) => (<-chan type) + // <- (chan<- type) => (<-chan (<-type)) + + x := p.parseUnaryExpr(false) + + // determine which case we have + if typ, ok := x.(*ast.ChanType); ok { + // (<-type) + + // re-associate position info and <- + dir := ast.SEND + for ok && dir == ast.SEND { + if typ.Dir == ast.RECV { + // error: (<-type) is (<-(<-chan T)) + p.errorExpected(typ.Arrow, "'chan'") + } + arrow, typ.Begin, typ.Arrow = typ.Arrow, arrow, arrow + dir, typ.Dir = typ.Dir, ast.RECV + typ, ok = typ.Value.(*ast.ChanType) + } + if dir == ast.SEND { + p.errorExpected(arrow, "channel type") + } + + return x + } + + // <-(expr) + return &ast.UnaryExpr{OpPos: arrow, Op: token.ARROW, X: p.checkExpr(x)} + + case token.MUL: + // pointer type or unary "*" expression + pos := p.pos + p.next() + x := p.parseUnaryExpr(false) + return &ast.StarExpr{Star: pos, X: p.checkExprOrType(x)} + } + + return p.parsePrimaryExpr(lhs) +} + +func (p *parser) tokPrec() (token.Token, int) { + tok := p.tok + if p.inRhs && tok == token.ASSIGN { + tok = token.EQL + } + return tok, tok.Precedence() +} + +// If lhs is set and the result is an identifier, it is not resolved. +func (p *parser) parseBinaryExpr(lhs bool, prec1 int) ast.Expr { + if p.trace { + defer un(trace(p, "BinaryExpr")) + } + + x := p.parseUnaryExpr(lhs) + for { + op, oprec := p.tokPrec() + if oprec < prec1 { + return x + } + pos := p.expect(op) + if lhs { + p.resolve(x) + lhs = false + } + y := p.parseBinaryExpr(false, oprec+1) + x = &ast.BinaryExpr{X: p.checkExpr(x), OpPos: pos, Op: op, Y: p.checkExpr(y)} + } +} + +// If lhs is set and the result is an identifier, it is not resolved. +// The result may be a type or even a raw type ([...]int). Callers must +// check the result (using checkExpr or checkExprOrType), depending on +// context. +func (p *parser) parseExpr(lhs bool) ast.Expr { + if p.trace { + defer un(trace(p, "Expression")) + } + + return p.parseBinaryExpr(lhs, token.LowestPrec+1) +} + +func (p *parser) parseRhs() ast.Expr { + old := p.inRhs + p.inRhs = true + x := p.checkExpr(p.parseExpr(false)) + p.inRhs = old + return x +} + +func (p *parser) parseRhsOrType() ast.Expr { + old := p.inRhs + p.inRhs = true + x := p.checkExprOrType(p.parseExpr(false)) + p.inRhs = old + return x +} + +// ---------------------------------------------------------------------------- +// Statements + +// Parsing modes for parseSimpleStmt. +const ( + basic = iota + labelOk + rangeOk +) + +// parseSimpleStmt returns true as 2nd result if it parsed the assignment +// of a range clause (with mode == rangeOk). The returned statement is an +// assignment with a right-hand side that is a single unary expression of +// the form "range x". No guarantees are given for the left-hand side. +func (p *parser) parseSimpleStmt(mode int) (ast.Stmt, bool) { + if p.trace { + defer un(trace(p, "SimpleStmt")) + } + + x := p.parseLhsList() + + switch p.tok { + case + token.DEFINE, token.ASSIGN, token.ADD_ASSIGN, + token.SUB_ASSIGN, token.MUL_ASSIGN, token.QUO_ASSIGN, + token.REM_ASSIGN, token.AND_ASSIGN, token.OR_ASSIGN, + token.XOR_ASSIGN, token.SHL_ASSIGN, token.SHR_ASSIGN, token.AND_NOT_ASSIGN: + // assignment statement, possibly part of a range clause + pos, tok := p.pos, p.tok + p.next() + var y []ast.Expr + isRange := false + if mode == rangeOk && p.tok == token.RANGE && (tok == token.DEFINE || tok == token.ASSIGN) { + pos := p.pos + p.next() + y = []ast.Expr{&ast.UnaryExpr{OpPos: pos, Op: token.RANGE, X: p.parseRhs()}} + isRange = true + } else { + y = p.parseRhsList() + } + as := &ast.AssignStmt{Lhs: x, TokPos: pos, Tok: tok, Rhs: y} + if tok == token.DEFINE { + p.shortVarDecl(as, x) + } + return as, isRange + } + + if len(x) > 1 { + p.errorExpected(x[0].Pos(), "1 expression") + // continue with first expression + } + + switch p.tok { + case token.COLON: + // labeled statement + colon := p.pos + p.next() + if label, isIdent := x[0].(*ast.Ident); mode == labelOk && isIdent { + // Go spec: The scope of a label is the body of the function + // in which it is declared and excludes the body of any nested + // function. + if p.labelScope == nil { + p.error(label.Pos(), fmt.Sprintf("syntax error: label outside block: %s", label.Name)) + return p.parseStmt(), false + } + stmt := &ast.LabeledStmt{Label: label, Colon: colon, Stmt: p.parseStmt()} + p.declare(stmt, nil, p.labelScope, ast.Lbl, label) + return stmt, false + } + // The label declaration typically starts at x[0].Pos(), but the label + // declaration may be erroneous due to a token after that position (and + // before the ':'). If SpuriousErrors is not set, the (only) error re- + // ported for the line is the illegal label error instead of the token + // before the ':' that caused the problem. Thus, use the (latest) colon + // position for error reporting. + p.error(colon, "illegal label declaration") + return &ast.BadStmt{From: x[0].Pos(), To: colon + 1}, false + + case token.ARROW: + // send statement + arrow := p.pos + p.next() + y := p.parseRhs() + return &ast.SendStmt{Chan: x[0], Arrow: arrow, Value: y}, false + + case token.INC, token.DEC: + // increment or decrement + s := &ast.IncDecStmt{X: x[0], TokPos: p.pos, Tok: p.tok} + p.next() + return s, false + } + + // expression + return &ast.ExprStmt{X: x[0]}, false +} + +func (p *parser) parseCallExpr(callType string) *ast.CallExpr { + x := p.parseRhsOrType() // could be a conversion: (some type)(x) + if call, isCall := x.(*ast.CallExpr); isCall { + return call + } + if _, isBad := x.(*ast.BadExpr); !isBad { + // only report error if it's a new one + p.error(p.safePos(x.End()), fmt.Sprintf("function must be invoked in %s statement", callType)) + } + return nil +} + +func (p *parser) parseGoStmt() ast.Stmt { + if p.trace { + defer un(trace(p, "GoStmt")) + } + + pos := p.expect(token.GO) + call := p.parseCallExpr("go") + p.expectSemi() + if call == nil { + return &ast.BadStmt{From: pos, To: pos + 2} // len("go") + } + + return &ast.GoStmt{Go: pos, Call: call} +} + +func (p *parser) parseDeferStmt() ast.Stmt { + if p.trace { + defer un(trace(p, "DeferStmt")) + } + + pos := p.expect(token.DEFER) + call := p.parseCallExpr("defer") + p.expectSemi() + if call == nil { + return &ast.BadStmt{From: pos, To: pos + 5} // len("defer") + } + + return &ast.DeferStmt{Defer: pos, Call: call} +} + +func (p *parser) parseReturnStmt() *ast.ReturnStmt { + if p.trace { + defer un(trace(p, "ReturnStmt")) + } + + pos := p.pos + p.expect(token.RETURN) + var x []ast.Expr + if p.tok != token.SEMICOLON && p.tok != token.RBRACE { + x = p.parseRhsList() + } + p.expectSemi() + + return &ast.ReturnStmt{Return: pos, Results: x} +} + +func (p *parser) parseBranchStmt(tok token.Token) *ast.BranchStmt { + if p.trace { + defer un(trace(p, "BranchStmt")) + } + + pos := p.expect(tok) + var label *ast.Ident + if tok != token.FALLTHROUGH && p.tok == token.IDENT { + label = p.parseIdent() + // add to list of unresolved targets + n := len(p.targetStack) - 1 + p.targetStack[n] = append(p.targetStack[n], label) + } + p.expectSemi() + + return &ast.BranchStmt{TokPos: pos, Tok: tok, Label: label} +} + +func (p *parser) makeExpr(s ast.Stmt, kind string) ast.Expr { + if s == nil { + return nil + } + if es, isExpr := s.(*ast.ExprStmt); isExpr { + return p.checkExpr(es.X) + } + p.error(s.Pos(), fmt.Sprintf("expected %s, found simple statement (missing parentheses around composite literal?)", kind)) + return &ast.BadExpr{From: s.Pos(), To: p.safePos(s.End())} +} + +func (p *parser) parseIfStmt() *ast.IfStmt { + if p.trace { + defer un(trace(p, "IfStmt")) + } + + pos := p.expect(token.IF) + p.openScope() + defer p.closeScope() + + var s ast.Stmt + var x ast.Expr + { + prevLev := p.exprLev + p.exprLev = -1 + if p.tok == token.SEMICOLON { + p.next() + x = p.parseRhs() + } else { + s, _ = p.parseSimpleStmt(basic) + if p.tok == token.SEMICOLON { + p.next() + x = p.parseRhs() + } else { + x = p.makeExpr(s, "boolean expression") + s = nil + } + } + p.exprLev = prevLev + } + + body := p.parseBlockStmt() + var else_ ast.Stmt + if p.tok == token.ELSE { + p.next() + switch p.tok { + case token.IF: + else_ = p.parseIfStmt() + case token.LBRACE: + else_ = p.parseBlockStmt() + p.expectSemi() + default: + p.errorExpected(p.pos, "if statement or block") + else_ = &ast.BadStmt{From: p.pos, To: p.pos} + } + } else { + p.expectSemi() + } + + return &ast.IfStmt{If: pos, Init: s, Cond: x, Body: body, Else: else_} +} + +func (p *parser) parseTypeList() (list []ast.Expr) { + if p.trace { + defer un(trace(p, "TypeList")) + } + + list = append(list, p.parseType()) + for p.tok == token.COMMA { + p.next() + list = append(list, p.parseType()) + } + + return +} + +func (p *parser) parseCaseClause(typeSwitch bool) ast.Stmt { + if p.trace { + defer un(trace(p, "CaseClause")) + } + + pos := p.pos + var list []ast.Expr + if p.tok == mt.TYPECASE { + p.next() + list = p.parseTypeList() + } else if p.tok == token.CASE { + p.next() + if typeSwitch { + list = p.parseTypeList() + } else { + list = p.parseRhsList() + } + } else if p.tok == token.DEFAULT { + p.expect(token.DEFAULT) + } else { + switch p.tok { + case token.ILLEGAL, token.EOF, token.COLON, token.SEMICOLON, token.RBRACE, token.RBRACK, token.LPAREN: + p.errorExpected(p.pos, "'case' or 'default'") + default: + // patch: support switch foo { ~,{bar} } + // where bar will expand to case x, y, z: w + return p.parseStmt() + } + } + colon := p.expect(token.COLON) + + p.openScope() + body := p.parseStmtList() + p.closeScope() + + return &ast.CaseClause{Case: pos, List: list, Colon: colon, Body: body} +} + +func isTypeSwitchAssert(x ast.Expr) bool { + a, ok := x.(*ast.TypeAssertExpr) + return ok && a.Type == nil +} + +func (p *parser) isTypeSwitchGuard(s ast.Stmt) bool { + switch t := s.(type) { + case *ast.ExprStmt: + // x.(type) + return isTypeSwitchAssert(t.X) + case *ast.AssignStmt: + // v := x.(type) + if len(t.Lhs) == 1 && len(t.Rhs) == 1 && isTypeSwitchAssert(t.Rhs[0]) { + switch t.Tok { + case token.ASSIGN: + // permit v = x.(type) but complain + p.error(t.TokPos, "expected ':=', found '='") + fallthrough + case token.DEFINE: + return true + } + } + } + return false +} + +func (p *parser) parseSwitchStmt() ast.Stmt { + if p.trace { + defer un(trace(p, "SwitchStmt")) + } + + pos := p.expect(token.SWITCH) + p.openScope() + defer p.closeScope() + + var s1, s2 ast.Stmt + if p.tok != token.LBRACE { + prevLev := p.exprLev + p.exprLev = -1 + if p.tok != token.SEMICOLON { + s2, _ = p.parseSimpleStmt(basic) + } + if p.tok == token.SEMICOLON { + p.next() + s1 = s2 + s2 = nil + if p.tok != token.LBRACE { + // A TypeSwitchGuard may declare a variable in addition + // to the variable declared in the initial SimpleStmt. + // Introduce extra scope to avoid redeclaration errors: + // + // switch t := 0; t := x.(T) { ... } + // + // (this code is not valid Go because the first t + // cannot be accessed and thus is never used, the extra + // scope is needed for the correct error message). + // + // If we don't have a type switch, s2 must be an expression. + // Having the extra nested but empty scope won't affect it. + p.openScope() + defer p.closeScope() + s2, _ = p.parseSimpleStmt(basic) + } + } + p.exprLev = prevLev + } + + typeSwitch := p.isTypeSwitchGuard(s2) + lbrace := p.expect(token.LBRACE) + var list []ast.Stmt + // patch: allow ~quote and friends in addition to case: and default: + for p.tok0 != token.EOF && p.tok != token.LPAREN && p.tok != token.RBRACK && p.tok != token.RBRACE { + list = append(list, p.parseCaseClause(typeSwitch)) + } + rbrace := p.expect(token.RBRACE) + p.expectSemi() + body := &ast.BlockStmt{Lbrace: lbrace, List: list, Rbrace: rbrace} + + if typeSwitch { + return &ast.TypeSwitchStmt{Switch: pos, Init: s1, Assign: s2, Body: body} + } + + return &ast.SwitchStmt{Switch: pos, Init: s1, Tag: p.makeExpr(s2, "switch expression"), Body: body} +} + +func (p *parser) parseCommClause() *ast.CommClause { + if p.trace { + defer un(trace(p, "CommClause")) + } + + p.openScope() + pos := p.pos + var comm ast.Stmt + if p.tok == token.CASE { + p.next() + lhs := p.parseLhsList() + if p.tok == token.ARROW { + // SendStmt + if len(lhs) > 1 { + p.errorExpected(lhs[0].Pos(), "1 expression") + // continue with first expression + } + arrow := p.pos + p.next() + rhs := p.parseRhs() + comm = &ast.SendStmt{Chan: lhs[0], Arrow: arrow, Value: rhs} + } else { + // RecvStmt + if tok := p.tok; tok == token.ASSIGN || tok == token.DEFINE { + // RecvStmt with assignment + if len(lhs) > 2 { + p.errorExpected(lhs[0].Pos(), "1 or 2 expressions") + // continue with first two expressions + lhs = lhs[0:2] + } + pos := p.pos + p.next() + rhs := p.parseRhs() + as := &ast.AssignStmt{Lhs: lhs, TokPos: pos, Tok: tok, Rhs: []ast.Expr{rhs}} + if tok == token.DEFINE { + p.shortVarDecl(as, lhs) + } + comm = as + } else { + // lhs must be single receive operation + if len(lhs) > 1 { + p.errorExpected(lhs[0].Pos(), "1 expression") + // continue with first expression + } + comm = &ast.ExprStmt{X: lhs[0]} + } + } + } else { + p.expect(token.DEFAULT) + } + + colon := p.expect(token.COLON) + body := p.parseStmtList() + p.closeScope() + + return &ast.CommClause{Case: pos, Comm: comm, Colon: colon, Body: body} +} + +func (p *parser) parseSelectStmt() *ast.SelectStmt { + if p.trace { + defer un(trace(p, "SelectStmt")) + } + + pos := p.expect(token.SELECT) + lbrace := p.expect(token.LBRACE) + var list []ast.Stmt + for p.tok == token.CASE || p.tok == token.DEFAULT { + list = append(list, p.parseCommClause()) + } + rbrace := p.expect(token.RBRACE) + p.expectSemi() + body := &ast.BlockStmt{Lbrace: lbrace, List: list, Rbrace: rbrace} + + return &ast.SelectStmt{Select: pos, Body: body} +} + +func (p *parser) parseForStmt() ast.Stmt { + if p.trace { + defer un(trace(p, "ForStmt")) + } + + pos := p.expect(token.FOR) + p.openScope() + defer p.closeScope() + + var s1, s2, s3 ast.Stmt + var isRange bool + if p.tok != token.LBRACE { + prevLev := p.exprLev + p.exprLev = -1 + if p.tok != token.SEMICOLON { + if p.tok == token.RANGE { + // "for range x" (nil lhs in assignment) + pos := p.pos + p.next() + y := []ast.Expr{&ast.UnaryExpr{OpPos: pos, Op: token.RANGE, X: p.parseRhs()}} + s2 = &ast.AssignStmt{Rhs: y} + isRange = true + } else { + s2, isRange = p.parseSimpleStmt(rangeOk) + } + } + if !isRange && p.tok == token.SEMICOLON { + p.next() + s1 = s2 + s2 = nil + if p.tok != token.SEMICOLON { + s2, _ = p.parseSimpleStmt(basic) + } + p.expectSemi() + if p.tok != token.LBRACE { + s3, _ = p.parseSimpleStmt(basic) + } + } + p.exprLev = prevLev + } + + body := p.parseBlockStmt() + p.expectSemi() + + if isRange { + as := s2.(*ast.AssignStmt) + // check lhs + var key, value ast.Expr + switch len(as.Lhs) { + case 0: + // nothing to do + case 1: + key = as.Lhs[0] + case 2: + key, value = as.Lhs[0], as.Lhs[1] + default: + p.errorExpected(as.Lhs[len(as.Lhs)-1].Pos(), "at most 2 expressions") + return &ast.BadStmt{From: pos, To: p.safePos(body.End())} + } + // parseSimpleStmt returned a right-hand side that + // is a single unary expression of the form "range x" + x := as.Rhs[0].(*ast.UnaryExpr).X + return &ast.RangeStmt{ + For: pos, + Key: key, + Value: value, + TokPos: as.TokPos, + Tok: as.Tok, + X: x, + Body: body, + } + } + + // regular for statement + return &ast.ForStmt{ + For: pos, + Init: s1, + Cond: p.makeExpr(s2, "boolean or range expression"), + Post: s3, + Body: body, + } +} + +func (p *parser) parseStmt() (s ast.Stmt) { + if p.trace { + defer un(trace(p, "Statement")) + } + + switch p.tok { + case token.CONST, token.TYPE, token.VAR, + mt.FUNCTION: // patch: allow function/method declarations inside statements. extremely useful for ~quote and ~quasiquote + s = &ast.DeclStmt{Decl: p.parseDecl(syncStmt)} + case + // tokens that may start an expression + token.IDENT, token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING, token.FUNC, token.LPAREN, // operands + token.LBRACK, token.STRUCT, token.MAP, token.CHAN, token.INTERFACE, // composite types + token.ADD, token.SUB, token.MUL, token.AND, token.XOR, token.ARROW, token.NOT, // unary operators + mt.MACRO, mt.SPLICE, mt.QUOTE, mt.QUASIQUOTE, mt.UNQUOTE, mt.UNQUOTE_SPLICE, // patch: macro, quote and friends + mt.LAMBDA: + + s, _ = p.parseSimpleStmt(labelOk) + // because of the required look-ahead, labeled statements are + // parsed by parseSimpleStmt - don't expect a semicolon after + // them + if _, isLabeledStmt := s.(*ast.LabeledStmt); !isLabeledStmt { + p.expectSemi() + } + case token.IMPORT: // patch: allow imports inside statements. useful for ~quote and ~quasiquote + s = &ast.DeclStmt{Decl: p.parseGenDecl(token.IMPORT, p.parseImportSpec)} + case token.GO: + s = p.parseGoStmt() + case token.DEFER: + s = p.parseDeferStmt() + case token.RETURN: + s = p.parseReturnStmt() + case token.BREAK, token.CONTINUE, token.GOTO, token.FALLTHROUGH: + s = p.parseBranchStmt(p.tok) + case token.LBRACE: + s = p.parseBlockStmt() + p.expectSemi() + case token.IF: + s = p.parseIfStmt() + case token.SWITCH: + s = p.parseSwitchStmt() + case token.SELECT: + s = p.parseSelectStmt() + case token.FOR: + s = p.parseForStmt() + case token.SEMICOLON: + // Is it ever possible to have an implicit semicolon + // producing an empty statement in a valid program? + // (handle correctly anyway) + s = &ast.EmptyStmt{Semicolon: p.pos, Implicit: p.lit == "\n"} + p.next() + case token.RBRACE: + // a semicolon may be omitted before a closing "}" + s = &ast.EmptyStmt{Semicolon: p.pos, Implicit: true} + default: + // no statement found + pos := p.pos + p.errorExpected(pos, "statement") + syncStmt(p) + s = &ast.BadStmt{From: pos, To: p.pos} + } + + return +} + +// ---------------------------------------------------------------------------- +// Declarations + +type parseSpecFunction func(doc *ast.CommentGroup, keyword token.Token, iota int) ast.Spec + +func isValidImport(lit string) bool { + const illegalChars = `!"#$%&'()*,:;<=>?[\]^{|}` + "`\uFFFD" + s, _ := strconv.Unquote(lit) // go/scanner returns a legal string literal + for _, r := range s { + if !unicode.IsGraphic(r) || unicode.IsSpace(r) || strings.ContainsRune(illegalChars, r) { + return false + } + } + return s != "" +} + +func (p *parser) parseImportSpec(doc *ast.CommentGroup, _ token.Token, _ int) ast.Spec { + if p.trace { + defer un(trace(p, "ImportSpec")) + } + + var ident *ast.Ident + switch p.tok { + case token.PERIOD: + ident = &ast.Ident{NamePos: p.pos, Name: "."} + p.next() + case token.IDENT: + ident = p.parseIdent() + } + + pos := p.pos + var path string + if p.tok == token.STRING { + path = p.lit + if !isValidImport(path) { + p.error(pos, "invalid import path: "+path) + } + p.next() + } else { + p.expect(token.STRING) // use expect() error handling + } + p.expectSemi() // call before accessing p.linecomment + + // collect imports + spec := &ast.ImportSpec{ + Doc: doc, + Name: ident, + Path: &ast.BasicLit{ValuePos: pos, Kind: token.STRING, Value: path}, + Comment: p.lineComment, + } + p.imports = append(p.imports, spec) + + return spec +} + +func (p *parser) parseValueSpec(doc *ast.CommentGroup, keyword token.Token, iota int) ast.Spec { + if p.trace { + defer un(trace(p, keyword.String()+"Spec")) + } + + pos := p.pos + idents := p.parseIdentList() + typ := p.tryType() + var values []ast.Expr + // always permit optional initialization for more tolerant parsing + if p.tok == token.ASSIGN { + p.next() + values = p.parseRhsList() + } + p.expectSemi() // call before accessing p.linecomment + + switch keyword { + case token.VAR: + if typ == nil && values == nil { + p.error(pos, "missing variable type or initialization") + } + case token.CONST: + if values == nil && (iota == 0 || typ != nil) { + p.error(pos, "missing constant value") + } + } + + // Go spec: The scope of a constant or variable identifier declared inside + // a function begins at the end of the ConstSpec or VarSpec and ends at + // the end of the innermost containing block. + // (Global identifiers are resolved in a separate phase after parsing.) + spec := &ast.ValueSpec{ + Doc: doc, + Names: idents, + Type: typ, + Values: values, + Comment: p.lineComment, + } + kind := ast.Con + if keyword == token.VAR { + kind = ast.Var + } + p.declare(spec, iota, p.topScope, kind, idents...) + + return spec +} + +func (p *parser) parseTypeSpec(doc *ast.CommentGroup, _ token.Token, _ int) ast.Spec { + if p.trace { + defer un(trace(p, "TypeSpec")) + } + + ident := p.parseIdent() + + // Go spec: The scope of a type identifier declared inside a function begins + // at the identifier in the TypeSpec and ends at the end of the innermost + // containing block. + // (Global identifiers are resolved in a separate phase after parsing.) + spec := &ast.TypeSpec{Doc: doc, Name: ident} + p.declare(spec, nil, p.topScope, ast.Typ, ident) + + // PATCH: support type aliases + if p.tok == token.ASSIGN { + pos := p.pos + p.next() + spec.Type = &ast.UnaryExpr{OpPos: pos, Op: token.ASSIGN, X: p.parseType()} + } else { + spec.Type = p.parseType() + } + p.expectSemi() // call before accessing p.linecomment + spec.Comment = p.lineComment + + return spec +} + +func (p *parser) parseGenDecl(keyword token.Token, f parseSpecFunction) *ast.GenDecl { + if p.trace { + defer un(trace(p, "GenDecl("+keyword.String()+")")) + } + + doc := p.leadComment + pos := p.expect(keyword) + var lparen, rparen token.Pos + var list []ast.Spec + if p.tok == token.LPAREN { + lparen = p.pos + p.next() + for iota := 0; p.tok != token.RPAREN && p.tok != token.EOF; iota++ { + list = append(list, f(p.leadComment, keyword, iota)) + } + rparen = p.expect(token.RPAREN) + p.expectSemi() + } else { + list = append(list, f(nil, keyword, 0)) + } + + return &ast.GenDecl{ + Doc: doc, + TokPos: pos, + Tok: keyword, + Lparen: lparen, + Specs: list, + Rparen: rparen, + } +} + +func (p *parser) parseFuncDecl(tok token.Token) *ast.FuncDecl { + if p.trace { + defer un(trace(p, "FunctionDecl")) + } + decl := p.parseFuncOrMacroDecl(tok) + + // paranoia: empty receiver list is omitted. this should not happen, + // but we use it to distinguish functions from macros, so better safe than sorry. + recv := decl.Recv + if recv != nil && len(recv.List) == 0 { + decl.Recv = nil + } + return decl +} + +// patch: parse a macro declaration +func (p *parser) parseMacroDecl() *ast.FuncDecl { + if p.trace { + defer un(trace(p, "MacroDecl")) + } + decl := p.parseFuncOrMacroDecl(mt.MACRO) + // add zero-length receiver list, to mark decl as a macro + decl.Recv = &ast.FieldList{List: []*ast.Field{}} + return decl +} + +func (p *parser) parseFuncOrMacroDecl(tok token.Token) *ast.FuncDecl { + + doc := p.leadComment + pos := p.expect(tok) + scope := ast.NewScope(p.topScope) // function scope + + var recv *ast.FieldList + // patch: macros cannot have a receiver + if tok != mt.MACRO && p.tok == token.LPAREN { + recv = p.parseParameters(scope, false) + } + + ident := p.parseIdent() + + params, results := p.parseSignature(scope) + + var body *ast.BlockStmt + if p.tok == token.LBRACE { + body = p.parseBody(scope) + } + p.expectSemi() + + decl := &ast.FuncDecl{ + Doc: doc, + Recv: recv, + Name: ident, + Type: &ast.FuncType{ + Func: pos, + Params: params, + Results: results, + }, + Body: body, + } + if recv == nil { + // Go spec: The scope of an identifier denoting a constant, type, + // variable, or function (but not method) declared at top level + // (outside any function) is the package block. + // + // init() functions cannot be referred to and there may + // be more than one - don't put them in the pkgScope + if ident.Name != "init" { + p.declare(decl, nil, p.pkgScope, ast.Fun, ident) + } + } + + return decl +} + +func (p *parser) parseDecl(sync func(*parser)) ast.Decl { + if p.trace { + defer un(trace(p, "Declaration")) + } + + var f parseSpecFunction + switch p.tok { + case token.CONST, token.VAR: + f = p.parseValueSpec + + case token.TYPE: + f = p.parseTypeSpec + + case token.FUNC, mt.FUNCTION: + return p.parseFuncDecl(p.tok) + + case mt.MACRO: // patch: parse a macro declaration + return p.parseMacroDecl() + + default: + pos := p.pos + p.errorExpected(pos, "declaration") + sync(p) + return &ast.BadDecl{From: pos, To: p.pos} + } + + return p.parseGenDecl(p.tok, f) +} + +// ---------------------------------------------------------------------------- +// Source files + +func (p *parser) parseFile() *ast.File { + if p.trace { + defer un(trace(p, "File")) + } + + // Don't bother parsing the rest if we had errors scanning the first token. + // Likely not a Go source file at all. + if p.errors.Len() != 0 { + return nil + } + + // package clause + doc := p.leadComment + pos := p.expect(token.PACKAGE) + // Go spec: The package clause is not a declaration; + // the package name does not appear in any scope. + ident := p.parseIdent() + if ident.Name == "_" && p.mode&DeclarationErrors != 0 { + p.error(p.pos, "invalid package name _") + } + p.expectSemi() + + // Don't bother parsing the rest if we had errors parsing the package clause. + // Likely not a Go source file at all. + if p.errors.Len() != 0 { + return nil + } + + topScope := p.topScope + labelScope := p.labelScope + if topScope == nil { + p.openScope() + } + var decls []ast.Decl + if p.mode&PackageClauseOnly == 0 { + // import decls + for p.tok == token.IMPORT { + decls = append(decls, p.parseGenDecl(token.IMPORT, p.parseImportSpec)) + } + + if p.mode&ImportsOnly == 0 { + // rest of package body + for p.tok != token.EOF { + decls = append(decls, p.parseDecl(syncDecl)) + } + } + } + if topScope == nil { + p.closeScope() + } + assert(p.topScope == topScope, "unbalanced scopes") + assert(p.labelScope == labelScope, "unbalanced label scopes") + + // resolve global identifiers within the same file + i := 0 + for _, ident := range p.unresolved { + // i <= index for current ident + assert(ident.Obj == unresolved, "object already resolved") + ident.Obj = p.pkgScope.Lookup(ident.Name) // also removes unresolved sentinel + if ident.Obj == nil { + p.unresolved[i] = ident + i++ + } + } + + return &ast.File{ + Doc: doc, + Package: pos, + Name: ident, + Decls: decls, + Scope: p.pkgScope, + Imports: p.imports, + Unresolved: p.unresolved[0:i], + Comments: p.comments, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/parser/quote.go b/vendor/github.com/cosmos72/gomacro/parser/quote.go new file mode 100644 index 0000000..a5b1450 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/parser/quote.go @@ -0,0 +1,192 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package parser implements a parser for Go source files. Input may be +// provided in a variety of forms (see the various Parse* functions); the +// output is an abstract syntax tree (AST) representing the Go source. The +// parser is invoked through one of the Parse* functions. +// +// The parser accepts a larger language than is syntactically permitted by +// the Go spec, for simplicity, and for improved robustness in the presence +// of syntax errors. For instance, in method declarations, the receiver is +// treated like an ordinary parameter list and thus may contain multiple +// entries where the spec permits exactly one. Consequently, the corresponding +// field in the AST (ast.FuncDecl.Recv) field is not restricted to one entry. +// +package parser + +import ( + "fmt" + "go/ast" + "go/token" + + mt "github.com/cosmos72/gomacro/token" +) + +// patch: quote and friends +func (p *parser) parseQuote() ast.Expr { + if p.trace { + defer un(trace(p, "Quote")) + } + + op := p.tok + opPos := p.pos + opName := mt.String(op) // use the actual name QUOTE/QUASIQUOTE/UNQUOTE/UNQUOTE_SPLICE even if we found ~' ~` ~, ~,@ + p.next() + + var node ast.Node + + // QUOTE, QUASIQUOTE, UNQUOTE and UNQUOTE_SLICE must be followed by one of: + // * a basic literal + // * an identifier + // * a block statement + // * another QUOTE, QUASIQUOTE or UNQUOTE (not UNQUOTE_SPLICE, it must be wrapped in {}) + switch p.tok { + case token.EOF, token.RPAREN, token.RBRACK, token.RBRACE, + token.COMMA, token.PERIOD, token.SEMICOLON, token.COLON: + + // no applicable expression after QUOTE/QUASIQUOTE/...: just return the keyword itself + return &ast.Ident{NamePos: opPos, Name: opName} + + case token.IDENT: + node = &ast.Ident{NamePos: p.pos, Name: p.lit} + p.next() + + case token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING: + node = &ast.BasicLit{ValuePos: p.pos, Kind: p.tok, Value: p.lit} + p.next() + + case mt.QUOTE, mt.QUASIQUOTE, mt.UNQUOTE, mt.UNQUOTE_SPLICE: + node = p.parseQuote() + + case token.LBRACE: + node = p.parseBlockStmtQuoted() + + default: + p.errorExpected(p.pos, "one of: '{', 'IDENT', 'INT', 'STRING', 'QUOTE', 'QUASIQUOTE', 'UNQUOTE' or 'UNQUOTE_SPLICE'") + } + + expr, _ := MakeQuote(p, op, opPos, node) + return expr +} + +func (p *parser) parseBlockStmtQuoted() *ast.BlockStmt { + if p.trace { + defer un(trace(p, "BlockStmtQuoted")) + } + + lbrace := p.expect(token.LBRACE) + p.openScope() + list := p.parseStmtListQuoted() + p.closeScope() + rbrace := p.expect(token.RBRACE) + + return &ast.BlockStmt{Lbrace: lbrace, List: list, Rbrace: rbrace} +} + +func (p *parser) parseStmtListQuoted() (list []ast.Stmt) { + if p.trace { + defer un(trace(p, "StatementListQuoted")) + } + + var stmt ast.Stmt + for p.tok != token.RBRACE && p.tok != token.EOF { + if p.tok == mt.TYPECASE { + stmt = p.parseCaseClause(true) + } else if p.tok == token.CASE || p.tok == token.DEFAULT { + stmt = p.parseCaseClause(false) + } else { + stmt = p.parseStmt() + } + list = append(list, stmt) + } + return +} + +// MakeQuote creates an ast.UnaryExpr representing quote{node}. +// Returns both the unaryexpr and the blockstmt containing its body +func MakeQuote(p_or_nil *parser, op token.Token, pos token.Pos, node ast.Node) (*ast.UnaryExpr, *ast.BlockStmt) { + var body *ast.BlockStmt + var stmt ast.Stmt + switch node := node.(type) { + case nil: + break + case *ast.BlockStmt: + body = node + case ast.Stmt: + stmt = node + case ast.Expr: + stmt = &ast.ExprStmt{X: node} + default: + msg := fmt.Sprintf("%v: expecting statement or expression, found %T %#v", op, node) + if p_or_nil != nil { + p_or_nil.error(node.Pos(), msg) + } else { + panic(msg) + } + } + if body == nil { + var pos, end token.Pos + list := make([]ast.Stmt, 0) + if stmt != nil { + list = append(list, stmt) + pos = stmt.Pos() + end = stmt.End() + } + body = &ast.BlockStmt{Lbrace: pos, List: list, Rbrace: end} + } + + // due to go/ast strictly typed model, there is only one mechanism + // to insert a statement inside an expression: use a closure. + // so we return a unary expression: QUOTE (func() { /*block*/ }) + typ := &ast.FuncType{Func: token.NoPos, Params: &ast.FieldList{}} + fun := &ast.FuncLit{Type: typ, Body: body} + return &ast.UnaryExpr{OpPos: pos, Op: op, X: fun}, body +} + +/* +// macro calls syntax is "foo ; bar ; baz"... recognize it +func (p *parser) expectSemiOrSpace() { + // semicolon is optional before a closing ')' or '}' + // make it optional also between identifiers and literals. + // allows to write {macro arg1 arg2} instead of the heavy {macro; arg1; arg2} + switch p.tok { + case token.RPAREN, token.RBRACK, token.RBRACE: + break + case token.COMMA: + // permit a ',' instead of a ';' but complain + p.errorExpected(p.pos, "';'") + fallthrough + case token.SEMICOLON: + p.next() + case token.IDENT, token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING: + switch p.tok0 { + case token.IDENT, token.INT, token.FLOAT, token.IMAG, token.CHAR, token.STRING: + return + } + fallthrough + default: + p.errorExpected(p.pos, "';'") + syncStmt(p) + } +} +*/ + +// parseExprBlock parses a block statement inside an expression. +func (p *parser) parseExprBlock() ast.Expr { + if p.trace { + defer un(trace(p, "ExprBlock")) + } + + pos := p.pos + block := p.parseBlockStmt() + + // due to go/ast strictly typed model, there is only one mechanism + // to insert a block statement (or any statement) inside an expression: + // use a closure. so we return the unary expression: + // MACRO func() { /*block*/ } + typ := &ast.FuncType{Params: &ast.FieldList{}} + fun := &ast.FuncLit{Type: typ, Body: block} + return &ast.UnaryExpr{OpPos: pos, Op: mt.MACRO, X: fun} +} diff --git a/vendor/github.com/cosmos72/gomacro/parser/x_package.go b/vendor/github.com/cosmos72/gomacro/parser/x_package.go new file mode 100644 index 0000000..230e378 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/parser/x_package.go @@ -0,0 +1,30 @@ +// this file was generated by gomacro command: import _i "github.com/cosmos72/gomacro/parser" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package parser + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/imports" +) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/parser" +func init() { + imports.Packages["github.com/cosmos72/gomacro/parser"] = imports.Package{ + Binds: map[string]r.Value{ + "AllErrors": r.ValueOf(AllErrors), + "DeclarationErrors": r.ValueOf(DeclarationErrors), + "ImportsOnly": r.ValueOf(ImportsOnly), + "MakeQuote": r.ValueOf(MakeQuote), + "PackageClauseOnly": r.ValueOf(PackageClauseOnly), + "ParseComments": r.ValueOf(ParseComments), + "SpuriousErrors": r.ValueOf(SpuriousErrors), + "Trace": r.ValueOf(Trace), + }, + Types: map[string]r.Type{ + "Mode": r.TypeOf((*Mode)(nil)).Elem(), + "Parser": r.TypeOf((*Parser)(nil)).Elem(), + }, + Proxies: map[string]r.Type{}} +} diff --git a/vendor/github.com/cosmos72/gomacro/scanner/LICENSE b/vendor/github.com/cosmos72/gomacro/scanner/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/scanner/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cosmos72/gomacro/scanner/errors.go b/vendor/github.com/cosmos72/gomacro/scanner/errors.go new file mode 100644 index 0000000..bf7bfa3 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/scanner/errors.go @@ -0,0 +1,124 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package scanner + +import ( + "fmt" + "go/token" + "io" + "sort" +) + +// In an ErrorList, an error is represented by an *Error. +// The position Pos, if valid, points to the beginning of +// the offending token, and the error condition is described +// by Msg. +// +type Error struct { + Pos token.Position + Msg string +} + +// Error implements the error interface. +func (e Error) Error() string { + if e.Pos.Filename != "" || e.Pos.IsValid() { + // don't print "" + // TODO(gri) reconsider the semantics of Position.IsValid + return e.Pos.String() + ": " + e.Msg + } + return e.Msg +} + +// ErrorList is a list of *Errors. +// The zero value for an ErrorList is an empty ErrorList ready to use. +// +type ErrorList []*Error + +// Add adds an Error with given position and error message to an ErrorList. +func (p *ErrorList) Add(pos token.Position, msg string) { + *p = append(*p, &Error{pos, msg}) +} + +// Reset resets an ErrorList to no errors. +func (p *ErrorList) Reset() { *p = (*p)[0:0] } + +// ErrorList implements the sort Interface. +func (p ErrorList) Len() int { return len(p) } +func (p ErrorList) Swap(i, j int) { p[i], p[j] = p[j], p[i] } + +func (p ErrorList) Less(i, j int) bool { + e := &p[i].Pos + f := &p[j].Pos + // Note that it is not sufficient to simply compare file offsets because + // the offsets do not reflect modified line information (through //line + // comments). + if e.Filename != f.Filename { + return e.Filename < f.Filename + } + if e.Line != f.Line { + return e.Line < f.Line + } + if e.Column != f.Column { + return e.Column < f.Column + } + return p[i].Msg < p[j].Msg +} + +// Sort sorts an ErrorList. *Error entries are sorted by position, +// other errors are sorted by error message, and before any *Error +// entry. +// +func (p ErrorList) Sort() { + sort.Sort(p) +} + +// RemoveMultiples sorts an ErrorList and removes all but the first error per line. +func (p *ErrorList) RemoveMultiples() { + sort.Sort(p) + var last token.Position // initial last.Line is != any legal error line + i := 0 + for _, e := range *p { + if e.Pos.Filename != last.Filename || e.Pos.Line != last.Line { + last = e.Pos + (*p)[i] = e + i++ + } + } + (*p) = (*p)[0:i] +} + +// An ErrorList implements the error interface. +func (p ErrorList) Error() string { + switch len(p) { + case 0: + return "no errors" + case 1: + return p[0].Error() + } + return fmt.Sprintf("%s (and %d more errors)", p[0], len(p)-1) +} + +// Err returns an error equivalent to this error list. +// If the list is empty, Err returns nil. +func (p ErrorList) Err() error { + if len(p) == 0 { + return nil + } + return p +} + +// PrintError is a utility function that prints a list of errors to w, +// one error per line, if the err parameter is an ErrorList. Otherwise +// it prints the err string. +// +func PrintError(w io.Writer, err error) { + if list, ok := err.(ErrorList); ok { + for _, e := range list { + fmt.Fprintf(w, "%s\n", e) + } + } else if err != nil { + fmt.Fprintf(w, "%s\n", err) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/scanner/scanner.diffs b/vendor/github.com/cosmos72/gomacro/scanner/scanner.diffs new file mode 100644 index 0000000..94e6620 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/scanner/scanner.diffs @@ -0,0 +1,125 @@ +--- /usr/local/go/src/go/scanner/scanner.go 2017-02-16 19:27:47.000000000 +0000 ++++ scanner.go 2017-04-02 13:54:30.000000000 +0000 +@@ -16,6 +16,8 @@ + "strconv" + "unicode" + "unicode/utf8" ++ ++ mt "github.com/cosmos72/gomacro/token" + ) + + // An ErrorHandler may be provided to Scanner.Init. If a syntax error is +@@ -31,11 +33,12 @@ + // + type Scanner struct { + // immutable state +- file *token.File // source file handle +- dir string // directory portion of file.Name() +- src []byte // source +- err ErrorHandler // error reporting; or nil +- mode Mode // scanning mode ++ file *token.File // source file handle ++ dir string // directory portion of file.Name() ++ src []byte // source ++ err ErrorHandler // error reporting; or nil ++ mode Mode // scanning mode ++ specialChar rune // prefix of interpreter quoting symbols ' ` , ,@ + + // scanning state + ch rune // current character +@@ -110,7 +113,7 @@ + // Note that Init may call err if there is an error in the first character + // of the file. + // +-func (s *Scanner) Init(file *token.File, src []byte, err ErrorHandler, mode Mode) { ++func (s *Scanner) Init(file *token.File, src []byte, err ErrorHandler, mode Mode, specialChar rune) { + // Explicitly initialize all fields since a scanner may be reused. + if file.Size() != len(src) { + panic(fmt.Sprintf("file size (%d) does not match src len (%d)", file.Size(), len(src))) +@@ -120,6 +123,7 @@ + s.src = src + s.err = err + s.mode = mode ++ s.specialChar = specialChar + + s.ch = ' ' + s.offset = 0 +@@ -613,7 +617,7 @@ + lit = s.scanIdentifier() + if len(lit) > 1 { + // keywords are longer than one letter - avoid lookup otherwise +- tok = token.Lookup(lit) ++ tok = mt.Lookup(lit) // patch: support macro, quote and friends + switch tok { + case token.IDENT, token.BREAK, token.CONTINUE, token.FALLTHROUGH, token.RETURN: + insertSemi = true +@@ -699,8 +703,14 @@ + } + case '*': + tok = s.switch2(token.MUL, token.MUL_ASSIGN) +- case '/': +- if s.ch == '/' || s.ch == '*' { ++ case '/', '#': ++ if ch == '/' && (s.ch == '/' || s.ch == '*') || ch == '#' && s.ch == '!' { ++ // accept both #! and // as line comments ++ // in this way, *.gomacro files can start with "#!/usr/bin/env gomacro" ++ // Unix-like systems will happily execute them directly ++ if s.ch == '!' { ++ s.ch = '/' ++ } + // comment + if s.insertSemi && s.findLineEnd() { + // reset position to the beginning of the comment +@@ -718,8 +728,13 @@ + } + tok = token.COMMENT + lit = comment +- } else { ++ } else if ch == '/' { + tok = s.switch2(token.QUO, token.QUO_ASSIGN) ++ } else { ++ s.error(s.file.Offset(pos), fmt.Sprintf("illegal character %#U", ch)) ++ insertSemi = s.insertSemi // preserve insertSemi info ++ tok = token.ILLEGAL ++ lit = string(ch) + } + case '%': + tok = s.switch2(token.REM, token.REM_ASSIGN) +@@ -747,6 +762,37 @@ + } + case '|': + tok = s.switch3(token.OR, token.OR_ASSIGN, '|', token.LOR) ++ case '@': ++ // patch: support macro, quote and friends ++ tok = mt.SPLICE ++ case s.specialChar: ++ // patch: support macro, quote and friends. s.specialChar is configurable, default is '~' ++ // quote specialChar ' ++ // quasiquote specialChar ` ++ // unquote specialChar , ++ // unquote_splice specialChar ,@ ++ switch s.ch { ++ case '\'': ++ s.next() ++ tok = mt.QUOTE ++ case '`': ++ s.next() ++ tok = mt.QUASIQUOTE ++ case ',': ++ s.next() ++ if s.ch == '@' { ++ s.next() ++ tok = mt.UNQUOTE_SPLICE ++ } else { ++ tok = mt.UNQUOTE ++ } ++ default: ++ tok = token.ILLEGAL ++ } ++ if tok != token.ILLEGAL { ++ break ++ } ++ fallthrough + default: + // next reports unexpected BOMs - don't repeat + if ch != bom { diff --git a/vendor/github.com/cosmos72/gomacro/scanner/scanner.go b/vendor/github.com/cosmos72/gomacro/scanner/scanner.go new file mode 100644 index 0000000..0799953 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/scanner/scanner.go @@ -0,0 +1,813 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package scanner implements a scanner for Go source text. +// It takes a []byte as source which can then be tokenized +// through repeated calls to the Scan method. +// +package scanner + +import ( + "bytes" + "fmt" + "go/token" + "path/filepath" + "strconv" + "unicode" + "unicode/utf8" + + mt "github.com/cosmos72/gomacro/token" +) + +// An ErrorHandler may be provided to Scanner.Init. If a syntax error is +// encountered and a handler was installed, the handler is called with a +// position and an error message. The position points to the beginning of +// the offending token. +// +type ErrorHandler func(pos token.Position, msg string) + +// A Scanner holds the scanner's internal state while processing +// a given text. It can be allocated as part of another data +// structure but must be initialized via Init before use. +// +type Scanner struct { + // immutable state + file *mt.File // source file handle + dir string // directory portion of file.Name() + src []byte // source + err ErrorHandler // error reporting; or nil + mode Mode // scanning mode + + specialChar rune // prefix of macro-related keywords and symbols ' ` , ,@ + + // scanning state + ch rune // current character + offset int // character offset + rdOffset int // reading offset (position after current character) + lineOffset int // current line offset + insertSemi bool // insert a semicolon before next newline + + // public state - ok to modify + ErrorCount int // number of errors encountered +} + +const bom = 0xFEFF // byte order mark, only permitted as very first character + +// Read the next Unicode char into s.ch. +// s.ch < 0 means end-of-file. +// +func (s *Scanner) next() { + if s.rdOffset < len(s.src) { + s.offset = s.rdOffset + if s.ch == '\n' { + s.lineOffset = s.offset + s.file.AddLine(s.offset) + } + r, w := rune(s.src[s.rdOffset]), 1 + switch { + case r == 0: + s.error(s.offset, "illegal character NUL") + case r >= utf8.RuneSelf: + // not ASCII + r, w = utf8.DecodeRune(s.src[s.rdOffset:]) + if r == utf8.RuneError && w == 1 { + s.error(s.offset, "illegal UTF-8 encoding") + } else if r == bom && s.offset > 0 { + s.error(s.offset, "illegal byte order mark") + } + } + s.rdOffset += w + s.ch = r + } else { + s.offset = len(s.src) + if s.ch == '\n' { + s.lineOffset = s.offset + s.file.AddLine(s.offset) + } + s.ch = -1 // eof + } +} + +// A mode value is a set of flags (or 0). +// They control scanner behavior. +// +type Mode uint + +const ( + ScanComments Mode = 1 << iota // return comments as COMMENT tokens + dontInsertSemis // do not automatically insert semicolons - for testing only +) + +// Init prepares the scanner s to tokenize the text src by setting the +// scanner at the beginning of src. The scanner uses the file set file +// for position information and it adds line information for each line. +// It is ok to re-use the same file when re-scanning the same file as +// line information which is already present is ignored. Init causes a +// panic if the file size does not match the src size. +// +// Calls to Scan will invoke the error handler err if they encounter a +// syntax error and err is not nil. Also, for each error encountered, +// the Scanner field ErrorCount is incremented by one. The mode parameter +// determines how comments are handled. +// +// Note that Init may call err if there is an error in the first character +// of the file. +// +func (s *Scanner) Init(file *mt.File, src []byte, err ErrorHandler, mode Mode, specialChar rune) { + // Explicitly initialize all fields since a scanner may be reused. + if file.Size() != len(src) { + panic(fmt.Sprintf("file size (%d) does not match src len (%d)", file.Size(), len(src))) + } + s.file = file + s.dir, _ = filepath.Split(file.Name()) + s.src = src + s.err = err + s.mode = mode + s.specialChar = specialChar + + s.ch = ' ' + s.offset = 0 + s.rdOffset = 0 + s.lineOffset = 0 + s.insertSemi = false + s.ErrorCount = 0 + + s.next() + if s.ch == bom { + s.next() // ignore BOM at file beginning + } +} + +func (s *Scanner) error(offs int, msg string) { + if s.err != nil { + s.err(s.file.Position(s.file.Pos(offs)), msg) + } + s.ErrorCount++ +} + +var prefix = []byte("//line ") + +func (s *Scanner) interpretLineComment(text []byte) { + if bytes.HasPrefix(text, prefix) { + // get filename and line number, if any + if i := bytes.LastIndex(text, []byte{':'}); i > 0 { + if line, err := strconv.Atoi(string(text[i+1:])); err == nil && line > 0 { + // valid //line filename:line comment + filename := string(bytes.TrimSpace(text[len(prefix):i])) + if filename != "" { + filename = filepath.Clean(filename) + if !filepath.IsAbs(filename) { + // make filename relative to current directory + filename = filepath.Join(s.dir, filename) + } + } + // update scanner position + s.file.AddLineInfo(s.lineOffset+len(text)+1, filename, line) // +len(text)+1 since comment applies to next line + } + } + } +} + +func (s *Scanner) scanComment() string { + // initial '/' already consumed; s.ch == '/' || s.ch == '*' + offs := s.offset - 1 // position of initial '/' + hasCR := false + + if s.ch == '/' { + //-style comment + s.next() + for s.ch != '\n' && s.ch >= 0 { + if s.ch == '\r' { + hasCR = true + } + s.next() + } + if offs == s.lineOffset { + // comment starts at the beginning of the current line + s.interpretLineComment(s.src[offs:s.offset]) + } + goto exit + } + + /*-style comment */ + s.next() + for s.ch >= 0 { + ch := s.ch + if ch == '\r' { + hasCR = true + } + s.next() + if ch == '*' && s.ch == '/' { + s.next() + goto exit + } + } + + s.error(offs, "comment not terminated") + +exit: + lit := s.src[offs:s.offset] + if hasCR { + lit = stripCR(lit) + } + + return string(lit) +} + +func (s *Scanner) findLineEnd() bool { + // initial '/' already consumed + + defer func(offs int) { + // reset scanner state to where it was upon calling findLineEnd + s.ch = '/' + s.offset = offs + s.rdOffset = offs + 1 + s.next() // consume initial '/' again + }(s.offset - 1) + + // read ahead until a newline, EOF, or non-comment token is found + for s.ch == '/' || s.ch == '*' { + if s.ch == '/' { + //-style comment always contains a newline + return true + } + /*-style comment: look for newline */ + s.next() + for s.ch >= 0 { + ch := s.ch + if ch == '\n' { + return true + } + s.next() + if ch == '*' && s.ch == '/' { + s.next() + break + } + } + s.skipWhitespace() // s.insertSemi is set + if s.ch < 0 || s.ch == '\n' { + return true + } + if s.ch != '/' { + // non-comment token + return false + } + s.next() // consume '/' + } + + return false +} + +func isLetter(ch rune) bool { + return 'a' <= ch && ch <= 'z' || 'A' <= ch && ch <= 'Z' || ch == '_' || ch >= utf8.RuneSelf && unicode.IsLetter(ch) +} + +func isDigit(ch rune) bool { + return '0' <= ch && ch <= '9' || ch >= utf8.RuneSelf && unicode.IsDigit(ch) +} + +func (s *Scanner) scanIdentifier() string { + offs := s.offset + for isLetter(s.ch) || isDigit(s.ch) { + s.next() + } + return string(s.src[offs:s.offset]) +} + +func digitVal(ch rune) int { + switch { + case '0' <= ch && ch <= '9': + return int(ch - '0') + case 'a' <= ch && ch <= 'f': + return int(ch - 'a' + 10) + case 'A' <= ch && ch <= 'F': + return int(ch - 'A' + 10) + } + return 16 // larger than any legal digit val +} + +func (s *Scanner) scanMantissa(base int) { + for digitVal(s.ch) < base { + s.next() + } +} + +func (s *Scanner) scanNumber(seenDecimalPoint bool) (token.Token, string) { + // digitVal(s.ch) < 10 + offs := s.offset + tok := token.INT + + if seenDecimalPoint { + offs-- + tok = token.FLOAT + s.scanMantissa(10) + goto exponent + } + + if s.ch == '0' { + // int or float + offs := s.offset + s.next() + if s.ch == 'x' || s.ch == 'X' { + // hexadecimal int + s.next() + s.scanMantissa(16) + if s.offset-offs <= 2 { + // only scanned "0x" or "0X" + s.error(offs, "illegal hexadecimal number") + } + } else { + // octal int or float + seenDecimalDigit := false + s.scanMantissa(8) + if s.ch == '8' || s.ch == '9' { + // illegal octal int or float + seenDecimalDigit = true + s.scanMantissa(10) + } + if s.ch == '.' || s.ch == 'e' || s.ch == 'E' || s.ch == 'i' { + goto fraction + } + // octal int + if seenDecimalDigit { + s.error(offs, "illegal octal number") + } + } + goto exit + } + + // decimal int or float + s.scanMantissa(10) + +fraction: + if s.ch == '.' { + tok = token.FLOAT + s.next() + s.scanMantissa(10) + } + +exponent: + if s.ch == 'e' || s.ch == 'E' { + tok = token.FLOAT + s.next() + if s.ch == '-' || s.ch == '+' { + s.next() + } + if digitVal(s.ch) < 10 { + s.scanMantissa(10) + } else { + s.error(offs, "illegal floating-point exponent") + } + } + + if s.ch == 'i' { + tok = token.IMAG + s.next() + } + +exit: + return tok, string(s.src[offs:s.offset]) +} + +// scanEscape parses an escape sequence where rune is the accepted +// escaped quote. In case of a syntax error, it stops at the offending +// character (without consuming it) and returns false. Otherwise +// it returns true. +func (s *Scanner) scanEscape(quote rune) bool { + offs := s.offset + + var n int + var base, max uint32 + switch s.ch { + case 'a', 'b', 'f', 'n', 'r', 't', 'v', '\\', quote: + s.next() + return true + case '0', '1', '2', '3', '4', '5', '6', '7': + n, base, max = 3, 8, 255 + case 'x': + s.next() + n, base, max = 2, 16, 255 + case 'u': + s.next() + n, base, max = 4, 16, unicode.MaxRune + case 'U': + s.next() + n, base, max = 8, 16, unicode.MaxRune + default: + msg := "unknown escape sequence" + if s.ch < 0 { + msg = "escape sequence not terminated" + } + s.error(offs, msg) + return false + } + + var x uint32 + for n > 0 { + d := uint32(digitVal(s.ch)) + if d >= base { + msg := fmt.Sprintf("illegal character %#U in escape sequence", s.ch) + if s.ch < 0 { + msg = "escape sequence not terminated" + } + s.error(s.offset, msg) + return false + } + x = x*base + d + s.next() + n-- + } + + if x > max || 0xD800 <= x && x < 0xE000 { + s.error(offs, "escape sequence is invalid Unicode code point") + return false + } + + return true +} + +func (s *Scanner) scanRune() string { + // '\'' opening already consumed + offs := s.offset - 1 + + valid := true + n := 0 + for { + ch := s.ch + if ch == '\n' || ch < 0 { + // only report error if we don't have one already + if valid { + s.error(offs, "rune literal not terminated") + valid = false + } + break + } + s.next() + if ch == '\'' { + break + } + n++ + if ch == '\\' { + if !s.scanEscape('\'') { + valid = false + } + // continue to read to closing quote + } + } + + if valid && n != 1 { + s.error(offs, "illegal rune literal") + } + + return string(s.src[offs:s.offset]) +} + +func (s *Scanner) scanString() string { + // '"' opening already consumed + offs := s.offset - 1 + + for { + ch := s.ch + if ch == '\n' || ch < 0 { + s.error(offs, "string literal not terminated") + break + } + s.next() + if ch == '"' { + break + } + if ch == '\\' { + s.scanEscape('"') + } + } + + return string(s.src[offs:s.offset]) +} + +func stripCR(b []byte) []byte { + c := make([]byte, len(b)) + i := 0 + for _, ch := range b { + if ch != '\r' { + c[i] = ch + i++ + } + } + return c[:i] +} + +func (s *Scanner) scanRawString() string { + // '`' opening already consumed + offs := s.offset - 1 + + hasCR := false + for { + ch := s.ch + if ch < 0 { + s.error(offs, "raw string literal not terminated") + break + } + s.next() + if ch == '`' { + break + } + if ch == '\r' { + hasCR = true + } + } + + lit := s.src[offs:s.offset] + if hasCR { + lit = stripCR(lit) + } + + return string(lit) +} + +func (s *Scanner) skipWhitespace() { + for s.ch == ' ' || s.ch == '\t' || s.ch == '\n' && !s.insertSemi || s.ch == '\r' { + s.next() + } +} + +// Helper functions for scanning multi-byte tokens such as >> += >>= . +// Different routines recognize different length tok_i based on matches +// of ch_i. If a token ends in '=', the result is tok1 or tok3 +// respectively. Otherwise, the result is tok0 if there was no other +// matching character, or tok2 if the matching character was ch2. + +func (s *Scanner) switch2(tok0, tok1 token.Token) token.Token { + if s.ch == '=' { + s.next() + return tok1 + } + return tok0 +} + +func (s *Scanner) switch3(tok0, tok1 token.Token, ch2 rune, tok2 token.Token) token.Token { + if s.ch == '=' { + s.next() + return tok1 + } + if s.ch == ch2 { + s.next() + return tok2 + } + return tok0 +} + +func (s *Scanner) switch4(tok0, tok1 token.Token, ch2 rune, tok2, tok3 token.Token) token.Token { + if s.ch == '=' { + s.next() + return tok1 + } + if s.ch == ch2 { + s.next() + if s.ch == '=' { + s.next() + return tok3 + } + return tok2 + } + return tok0 +} + +// Scan scans the next token and returns the token position, the token, +// and its literal string if applicable. The source end is indicated by +// token.EOF. +// +// If the returned token is a literal (token.IDENT, token.INT, token.FLOAT, +// token.IMAG, token.CHAR, token.STRING) or token.COMMENT, the literal string +// has the corresponding value. +// +// If the returned token is a keyword, the literal string is the keyword. +// +// If the returned token is token.SEMICOLON, the corresponding +// literal string is ";" if the semicolon was present in the source, +// and "\n" if the semicolon was inserted because of a newline or +// at EOF. +// +// If the returned token is token.ILLEGAL, the literal string is the +// offending character. +// +// In all other cases, Scan returns an empty literal string. +// +// For more tolerant parsing, Scan will return a valid token if +// possible even if a syntax error was encountered. Thus, even +// if the resulting token sequence contains no illegal tokens, +// a client may not assume that no error occurred. Instead it +// must check the scanner's ErrorCount or the number of calls +// of the error handler, if there was one installed. +// +// Scan adds line information to the file added to the file +// set with Init. Token positions are relative to that file +// and thus relative to the file set. +// +func (s *Scanner) Scan() (pos token.Pos, tok token.Token, lit string) { +scanAgain: + s.skipWhitespace() + + // current token start + pos = s.file.Pos(s.offset) + + // determine token value + insertSemi := false + switch ch := s.ch; { + case isLetter(ch): + lit = s.scanIdentifier() + if len(lit) > 1 { + // keywords are longer than one letter - avoid lookup otherwise + tok = mt.Lookup(lit) + switch tok { + case token.IDENT, token.BREAK, token.CONTINUE, token.FALLTHROUGH, token.RETURN: + insertSemi = true + } + } else { + insertSemi = true + tok = token.IDENT + } + case '0' <= ch && ch <= '9': + insertSemi = true + tok, lit = s.scanNumber(false) + default: + s.next() // always make progress + switch ch { + case -1: + if s.insertSemi { + s.insertSemi = false // EOF consumed + return pos, token.SEMICOLON, "\n" + } + tok = token.EOF + case '\n': + // we only reach here if s.insertSemi was + // set in the first place and exited early + // from s.skipWhitespace() + s.insertSemi = false // newline consumed + return pos, token.SEMICOLON, "\n" + case '"': + insertSemi = true + tok = token.STRING + lit = s.scanString() + case '\'': + insertSemi = true + tok = token.CHAR + lit = s.scanRune() + case '`': + insertSemi = true + tok = token.STRING + lit = s.scanRawString() + case ':': + tok = s.switch2(token.COLON, token.DEFINE) + case '.': + if '0' <= s.ch && s.ch <= '9' { + insertSemi = true + tok, lit = s.scanNumber(true) + } else if s.ch == '.' { + s.next() + if s.ch == '.' { + s.next() + tok = token.ELLIPSIS + } + } else { + tok = token.PERIOD + } + case ',': + tok = token.COMMA + case ';': + tok = token.SEMICOLON + lit = ";" + case '(': + tok = token.LPAREN + case ')': + insertSemi = true + tok = token.RPAREN + case '[': + tok = token.LBRACK + case ']': + insertSemi = true + tok = token.RBRACK + case '{': + tok = token.LBRACE + case '}': + insertSemi = true + tok = token.RBRACE + case '+': + tok = s.switch3(token.ADD, token.ADD_ASSIGN, '+', token.INC) + if tok == token.INC { + insertSemi = true + } + case '-': + tok = s.switch3(token.SUB, token.SUB_ASSIGN, '-', token.DEC) + if tok == token.DEC { + insertSemi = true + } + case '*': + tok = s.switch2(token.MUL, token.MUL_ASSIGN) + case '/', '#': + if ch == '/' && (s.ch == '/' || s.ch == '*') || ch == '#' && s.ch == '!' { + // accept both #! and // as line comments + // in this way, *.gomacro files can start with "#!/usr/bin/env gomacro" + // Unix-like systems will happily execute them directly + if s.ch == '!' { + s.ch = '/' + } + // comment + if s.insertSemi && s.findLineEnd() { + // reset position to the beginning of the comment + s.ch = '/' + s.offset = s.file.Offset(pos) + s.rdOffset = s.offset + 1 + s.insertSemi = false // newline consumed + return pos, token.SEMICOLON, "\n" + } + comment := s.scanComment() + if s.mode&ScanComments == 0 { + // skip comment + s.insertSemi = false // newline consumed + goto scanAgain + } + tok = token.COMMENT + lit = comment + } else if ch == '/' { + tok = s.switch2(token.QUO, token.QUO_ASSIGN) + } else { + s.error(s.file.Offset(pos), fmt.Sprintf("illegal character %#U", ch)) + insertSemi = s.insertSemi // preserve insertSemi info + tok = token.ILLEGAL + lit = string(ch) + } + case '%': + tok = s.switch2(token.REM, token.REM_ASSIGN) + case '^': + tok = s.switch2(token.XOR, token.XOR_ASSIGN) + case '<': + if s.ch == '-' { + s.next() + tok = token.ARROW + } else { + tok = s.switch4(token.LSS, token.LEQ, '<', token.SHL, token.SHL_ASSIGN) + } + case '>': + tok = s.switch4(token.GTR, token.GEQ, '>', token.SHR, token.SHR_ASSIGN) + case '=': + tok = s.switch2(token.ASSIGN, token.EQL) + case '!': + tok = s.switch2(token.NOT, token.NEQ) + case '&': + if s.ch == '^' { + s.next() + tok = s.switch2(token.AND_NOT, token.AND_NOT_ASSIGN) + } else { + tok = s.switch3(token.AND, token.AND_ASSIGN, '&', token.LAND) + } + case '|': + tok = s.switch3(token.OR, token.OR_ASSIGN, '|', token.LOR) + case '@': + // patch: support macro, quote and friends + tok = mt.SPLICE + case s.specialChar: + // patch: support macro, quote and friends. s.specialChar is configurable, default is '~' + // quote specialChar ' + // quasiquote specialChar ` + // unquote specialChar , + // unquote_splice specialChar ,@ + switch s.ch { + case '\'': + s.next() + tok = mt.QUOTE + case '`', '"': // accept both ~` and ~" as ~quasiquote, because ~` confuses syntax hilighting in IDEs + s.next() + tok = mt.QUASIQUOTE + case ',': + s.next() + if s.ch == '@' { + s.next() + tok = mt.UNQUOTE_SPLICE + } else { + tok = mt.UNQUOTE + } + default: + lit = s.scanIdentifier() + tok = mt.LookupSpecial(lit) + if tok == token.ILLEGAL { + s.error(s.file.Offset(pos), fmt.Sprintf("expecting macro-related keyword after '%c', found '%c%s'", s.specialChar, s.specialChar, lit)) + insertSemi = s.insertSemi // preserve insertSemi info + } + } + default: + // next reports unexpected BOMs - don't repeat + if ch != bom { + s.error(s.file.Offset(pos), fmt.Sprintf("illegal character %#U", ch)) + } + insertSemi = s.insertSemi // preserve insertSemi info + tok = token.ILLEGAL + lit = string(ch) + } + } + if s.mode&dontInsertSemis == 0 { + s.insertSemi = insertSemi + } + + return +} diff --git a/vendor/github.com/cosmos72/gomacro/scanner/x_package.go b/vendor/github.com/cosmos72/gomacro/scanner/x_package.go new file mode 100644 index 0000000..9038cae --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/scanner/x_package.go @@ -0,0 +1,27 @@ +// this file was generated by gomacro command: import _i "github.com/cosmos72/gomacro/scanner" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package scanner + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/imports" +) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/scanner" +func init() { + imports.Packages["github.com/cosmos72/gomacro/scanner"] = imports.Package{ + Binds: map[string]r.Value{ + "PrintError": r.ValueOf(PrintError), + "ScanComments": r.ValueOf(ScanComments), + }, + Types: map[string]r.Type{ + "Error": r.TypeOf((*Error)(nil)).Elem(), + "ErrorHandler": r.TypeOf((*ErrorHandler)(nil)).Elem(), + "ErrorList": r.TypeOf((*ErrorList)(nil)).Elem(), + "Mode": r.TypeOf((*Mode)(nil)).Elem(), + "Scanner": r.TypeOf((*Scanner)(nil)).Elem(), + }, + Proxies: map[string]r.Type{}} +} diff --git a/vendor/github.com/cosmos72/gomacro/token/LICENSE b/vendor/github.com/cosmos72/gomacro/token/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/token/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cosmos72/gomacro/token/fileset.go b/vendor/github.com/cosmos72/gomacro/token/fileset.go new file mode 100644 index 0000000..be15815 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/token/fileset.go @@ -0,0 +1,98 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package token + +import ( + "go/token" +) + +// ----------------------------------------------------------------------------- +// File + +// A File is a handle for a file belonging to a FileSet. +// A File has a name, size, and line offset table. +// +type File struct { + *token.File + line int // starting line of this file +} + +// PositionFor returns the Position value for the given file position p. +// If adjusted is set, the position may be adjusted by position-altering +// //line comments; otherwise those comments are ignored. +// p must be a Pos value in f or NoPos. +// +func (f *File) PositionFor(p token.Pos, adjusted bool) (pos token.Position) { + pos = f.File.PositionFor(p, adjusted) + if pos.IsValid() { + pos.Line += f.line + } + return pos +} + +// Position returns the Position value for the given file position p. +// Calling f.Position(p) is equivalent to calling f.PositionFor(p, true). +// +func (f *File) Position(p token.Pos) (pos token.Position) { + return f.PositionFor(p, true) +} + +// ----------------------------------------------------------------------------- +// FileSet + +// A FileSet represents a set of source files. +// This is a wrapper for go/token.FileSet that adds a starting line offset to each file in the set +// +type FileSet struct { + token.FileSet + filemap map[*token.File]*File +} + +// NewFileSet creates a new file set. +func NewFileSet() *FileSet { + return &FileSet{ + FileSet: *token.NewFileSet(), + filemap: make(map[*token.File]*File), + } +} + +// AddFile adds a new file with a given filename, base offset, and file size +func (s *FileSet) AddFile(filename string, base, size, line int) *File { + innerf := s.FileSet.AddFile(filename, base, size) + f := &File{File: innerf, line: line} + s.filemap[innerf] = f + return f +} + +// File returns the file that contains the position p. +// If no such file is found (for instance for p == NoPos), +// the result is nil. +// +func (s *FileSet) File(p token.Pos) (f *File) { + if p != token.NoPos { + innerf := s.FileSet.File(p) + f = s.filemap[innerf] + } + return +} + +// PositionFor converts a Pos p in the fileset into a Position value. +// If adjusted is set, the position may be adjusted by position-altering +// //line comments; otherwise those comments are ignored. +// p must be a Pos value in s or NoPos. +// +func (s *FileSet) PositionFor(p token.Pos, adjusted bool) (pos token.Position) { + if f := s.File(p); f != nil { + pos = f.PositionFor(p, adjusted) + } + return +} + +// Position converts a Pos p in the fileset into a Position value. +// Calling s.Position(p) is equivalent to calling s.PositionFor(p, true). +// +func (s *FileSet) Position(p token.Pos) (pos token.Position) { + return s.PositionFor(p, true) +} diff --git a/vendor/github.com/cosmos72/gomacro/token/token.go b/vendor/github.com/cosmos72/gomacro/token/token.go new file mode 100644 index 0000000..2c37cd1 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/token/token.go @@ -0,0 +1,102 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package token defines constants representing the lexical tokens of the Go +// programming language and basic operations on tokens (printing, predicates). +// +package token + +import ( + "go/token" + base "go/token" +) + +const ( + QUOTE base.Token = (base.VAR+127)&^127 + iota + QUASIQUOTE + UNQUOTE + UNQUOTE_SPLICE + SPLICE + MACRO + FUNCTION + LAMBDA + TYPECASE +) + +var tokens map[base.Token]string + +var keywords map[string]base.Token + +func init() { + tokens = map[base.Token]string{ + SPLICE: "~splice", + QUOTE: "~quote", + QUASIQUOTE: "~quasiquote", + UNQUOTE: "~unquote", + UNQUOTE_SPLICE: "~unquote_splice", + MACRO: "~macro", + FUNCTION: "~func", + LAMBDA: "~lambda", + TYPECASE: "~typecase", + } + + keywords = make(map[string]base.Token) + for k, v := range tokens { + keywords[v[1:]] = k // skip ~ in lookup table + } +} + +// Lookup maps a identifier to its keyword token. +func Lookup(lit string) base.Token { + if lit == "macro" { + // allow the spelling "macro" because "~macro" is really ugly in source code... + // especially when writing :~macro + return MACRO + } + return token.Lookup(lit) +} + +// LookupSpecial maps a identifier starting with '~' to its keyword token. +func LookupSpecial(lit string) base.Token { + tok, _ := keywords[lit] + return tok +} + +func String(tok base.Token) string { + if str, ok := tokens[tok]; ok { + return str + } + return tok.String() +} + +// Predicates + +// IsLiteral returns true for tokens corresponding to identifiers +// and basic type literals; it returns false otherwise. +// +func IsLiteral(tok base.Token) bool { + return tok.IsLiteral() +} + +// IsOperator returns true for tokens corresponding to operators and +// delimiters; it returns false otherwise. +// +func IsOperator(tok base.Token) bool { + return tok.IsOperator() +} + +// IsKeyword returns true for tokens corresponding to keywords; +// it returns false otherwise. +// +func IsKeyword(tok base.Token) bool { + return tok.IsKeyword() +} + +// IsMacroKeyword returns true for tokens corresponding to macro-related keywords; +// it returns false otherwise. +// +func IsMacroKeyword(tok base.Token) bool { + _, ok := tokens[tok] + return ok +} diff --git a/vendor/github.com/cosmos72/gomacro/token/x_package.go b/vendor/github.com/cosmos72/gomacro/token/x_package.go new file mode 100644 index 0000000..0941a8a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/token/x_package.go @@ -0,0 +1,39 @@ +// this file was generated by gomacro command: import _i "github.com/cosmos72/gomacro/token" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package token + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/imports" +) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/token" +func init() { + imports.Packages["github.com/cosmos72/gomacro/token"] = imports.Package{ + Binds: map[string]r.Value{ + "FUNCTION": r.ValueOf(FUNCTION), + "IsKeyword": r.ValueOf(IsKeyword), + "IsLiteral": r.ValueOf(IsLiteral), + "IsMacroKeyword": r.ValueOf(IsMacroKeyword), + "IsOperator": r.ValueOf(IsOperator), + "LAMBDA": r.ValueOf(LAMBDA), + "Lookup": r.ValueOf(Lookup), + "LookupSpecial": r.ValueOf(LookupSpecial), + "MACRO": r.ValueOf(MACRO), + "NewFileSet": r.ValueOf(NewFileSet), + "QUASIQUOTE": r.ValueOf(QUASIQUOTE), + "QUOTE": r.ValueOf(QUOTE), + "SPLICE": r.ValueOf(SPLICE), + "String": r.ValueOf(String), + "TYPECASE": r.ValueOf(TYPECASE), + "UNQUOTE": r.ValueOf(UNQUOTE), + "UNQUOTE_SPLICE": r.ValueOf(UNQUOTE_SPLICE), + }, + Types: map[string]r.Type{ + "File": r.TypeOf((*File)(nil)).Elem(), + "FileSet": r.TypeOf((*FileSet)(nil)).Elem(), + }, + Proxies: map[string]r.Type{}} +} diff --git a/vendor/github.com/cosmos72/gomacro/typeutil/LICENSE b/vendor/github.com/cosmos72/gomacro/typeutil/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/typeutil/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/cosmos72/gomacro/typeutil/README.md b/vendor/github.com/cosmos72/gomacro/typeutil/README.md new file mode 100644 index 0000000..5f8cb4e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/typeutil/README.md @@ -0,0 +1,34 @@ +## typeutil - patched versions of `go/types.Identical` and `golang.org/x/tools/go/type/typeutil.Map` + +typeutil contains patched version of some Go utilities to handle `go/types.Type` + +1. an Identical() function with a stricter definition of type identity: + + * interfaces are considered identical only if they **print** equally, + so embedding an interface is **different** from copying its methods + (standard `go/types.Identical` intentionally does not distinguish + these two cases). Also, the order of methods and embedded interfaces + is relevant. + + * methods are considered identical only if their receiver, parameters + and results types are identical (standard `go/types.Identical` + intentionally ignores the receiver type) + +2. Map: a mapping from `go/types.Type` to `interface{}` values, + using the stricter definition of type identity defined above. + + Since `go/types.Type` are not canonical, i.e. not unique, comparing + them with == does not give the expected results, as explained in + https://github.com/golang/example/tree/master/gotypes#types + + So a specialized map is needed to use them as keys - either + `golang.org/x/tools/go/type/typeutil.Map`, or this patched version + `github.com/cosmos72/gomacro/typeutil/Map`, or something analogous + +They are useful as type canonicalizing tools for the Go interpreter gomacro, +and not necessarily suitable for other purpouses. + +## License + +BSD-3-Clause as the original, unpatched utilities. + diff --git a/vendor/github.com/cosmos72/gomacro/typeutil/map.go b/vendor/github.com/cosmos72/gomacro/typeutil/map.go new file mode 100644 index 0000000..66de1bb --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/typeutil/map.go @@ -0,0 +1,350 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package typeutil defines various utilities for types, such as Map, +// a mapping from types.Type to interface{} values. +package typeutil + +import ( + "bytes" + "fmt" + "go/types" + "reflect" +) + +// Map is a hash-table-based mapping from types (types.Type) to +// arbitrary interface{} values. The concrete types that implement +// the Type interface are pointers. Since they are not canonicalized, +// == cannot be used to check for equivalence, and thus we cannot +// simply use a Go map. +// +// Just as with map[K]V, a nil *Map is a valid empty map. +// +// Not thread-safe. +// +type Map struct { + hasher Hasher // shared by many Maps + table map[uint32][]entry // maps hash to bucket; entry.key==nil means unused + length int // number of map entries +} + +// entry is an entry (key/value association) in a hash bucket. +type entry struct { + key types.Type + value interface{} +} + +// SetHasher sets the hasher used by Map. +// +// All Hashers are functionally equivalent but contain internal state +// used to cache the results of hashing previously seen types. +// +// A single Hasher created by MakeHasher() may be shared among many +// Maps. This is recommended if the instances have many keys in +// common, as it will amortize the cost of hash computation. +// +// A Hasher may grow without bound as new types are seen. Even when a +// type is deleted from the map, the Hasher never shrinks, since other +// types in the map may reference the deleted type indirectly. +// +// Hashers are not thread-safe, and read-only operations such as +// Map.Lookup require updates to the hasher, so a full Mutex lock (not a +// read-lock) is require around all Map operations if a shared +// hasher is accessed from multiple threads. +// +// If SetHasher is not called, the Map will create a private hasher at +// the first call to Insert. +// +func (m *Map) SetHasher(hasher Hasher) { + m.hasher = hasher +} + +// Delete removes the entry with the given key, if any. +// It returns true if the entry was found. +// +func (m *Map) Delete(key types.Type) bool { + if m != nil && m.table != nil { + hash := m.hasher.Hash(key) + bucket := m.table[hash] + for i, e := range bucket { + if e.key != nil && types.Identical(key, e.key) { + // We can't compact the bucket as it + // would disturb iterators. + bucket[i] = entry{} + m.length-- + return true + } + } + } + return false +} + +// At returns the map entry for the given key. +// The result is nil if the entry is not present. +// +func (m *Map) At(key types.Type) interface{} { + if m != nil && m.table != nil { + for _, e := range m.table[m.hasher.Hash(key)] { + if e.key != nil && Identical(key, e.key) { + return e.value + } + } + } + return nil +} + +// Set sets the map entry for key to val, +// and returns the previous entry, if any. +func (m *Map) Set(key types.Type, value interface{}) (prev interface{}) { + if m.table != nil { + hash := m.hasher.Hash(key) + bucket := m.table[hash] + var hole *entry + for i, e := range bucket { + if e.key == nil { + hole = &bucket[i] + } else if Identical(key, e.key) { + prev = e.value + bucket[i].value = value + return + } + } + + if hole != nil { + *hole = entry{key, value} // overwrite deleted entry + } else { + m.table[hash] = append(bucket, entry{key, value}) + } + } else { + if m.hasher.memo == nil { + m.hasher = MakeHasher() + } + hash := m.hasher.Hash(key) + m.table = map[uint32][]entry{hash: {entry{key, value}}} + } + + m.length++ + return +} + +// Len returns the number of map entries. +func (m *Map) Len() int { + if m != nil { + return m.length + } + return 0 +} + +// Iterate calls function f on each entry in the map in unspecified order. +// +// If f should mutate the map, Iterate provides the same guarantees as +// Go maps: if f deletes a map entry that Iterate has not yet reached, +// f will not be invoked for it, but if f inserts a map entry that +// Iterate has not yet reached, whether or not f will be invoked for +// it is unspecified. +// +func (m *Map) Iterate(f func(key types.Type, value interface{})) { + if m != nil { + for _, bucket := range m.table { + for _, e := range bucket { + if e.key != nil { + f(e.key, e.value) + } + } + } + } +} + +// Keys returns a new slice containing the set of map keys. +// The order is unspecified. +func (m *Map) Keys() []types.Type { + keys := make([]types.Type, 0, m.Len()) + m.Iterate(func(key types.Type, _ interface{}) { + keys = append(keys, key) + }) + return keys +} + +func (m *Map) toString(values bool) string { + if m == nil { + return "{}" + } + var buf bytes.Buffer + fmt.Fprint(&buf, "{") + sep := "" + m.Iterate(func(key types.Type, value interface{}) { + fmt.Fprint(&buf, sep) + sep = ", " + fmt.Fprint(&buf, key) + if values { + fmt.Fprintf(&buf, ": %q", value) + } + }) + fmt.Fprint(&buf, "}") + return buf.String() +} + +// String returns a string representation of the map's entries. +// Values are printed using fmt.Sprintf("%v", v). +// Order is unspecified. +// +func (m *Map) String() string { + return m.toString(true) +} + +// KeysString returns a string representation of the map's key set. +// Order is unspecified. +// +func (m *Map) KeysString() string { + return m.toString(false) +} + +//////////////////////////////////////////////////////////////////////// +// Hasher + +// A Hasher maps each type to its hash value. +// For efficiency, a hasher uses memoization; thus its memory +// footprint grows monotonically over time. +// Hashers are not thread-safe. +// Hashers have reference semantics. +// Call MakeHasher to create a Hasher. +type Hasher struct { + memo map[types.Type]uint32 +} + +// MakeHasher returns a new Hasher instance. +func MakeHasher() Hasher { + return Hasher{make(map[types.Type]uint32)} +} + +// Hash computes a hash value for the given type t such that +// Identical(t, t') => Hash(t) == Hash(t'). +func (h Hasher) Hash(t types.Type) uint32 { + hash, ok := h.memo[t] + if !ok { + hash = h.hashFor(t) + h.memo[t] = hash + } + return hash +} + +// hashString computes the Fowler–Noll–Vo hash of s. +func hashString(s string) uint32 { + var h uint32 = 2166136261 + for i := 0; i < len(s); i++ { + h ^= uint32(s[i]) + h *= 16777619 + } + return h +} + +func hashNamed(t *types.Named) uint32 { + // Not safe with a copying GC; objects may move. + n := reflect.ValueOf(t.Obj()).Pointer() + return uint32(n ^ n>>32) +} + +func (h Hasher) hashTuple(tuple *types.Tuple) uint32 { + // See go/types.identicalTypes for rationale. + n := tuple.Len() + var hash uint32 = 9137 + 2*uint32(n) + for i := 0; i < n; i++ { + // order is significant + hash = (hash<<5 | hash>>27) + 3*h.hashFor(tuple.At(i).Type()) + } + return hash +} + +func (h Hasher) hashVar(va *types.Var) uint32 { + var hash uint32 = 0 + if va != nil { + hash = h.Hash(va.Type()) + } + return hash +} + +// hashFor computes the hash of t. +func (h Hasher) hashFor(t types.Type) uint32 { + // See Identical for rationale. + switch t := t.(type) { + case *types.Basic: + return uint32(t.Kind()) + + case *types.Array: + return 9043 + 2*uint32(t.Len()) + 3*h.Hash(t.Elem()) + + case *types.Slice: + return 9049 + 2*h.Hash(t.Elem()) + + case *types.Struct: + var hash uint32 = 9059 + for i, n := 0, t.NumFields(); i < n; i++ { + f := t.Field(i) + if f.Anonymous() { + hash += 8861 + } + // field order is significant + hash = hash<<5 | hash>>27 + hash += hashString(t.Tag(i)) + hash += hashString(f.Name()) // (ignore f.Pkg) + hash += h.Hash(f.Type()) + } + return hash + + case *types.Pointer: + return 9067 + 2*h.Hash(t.Elem()) + + case *types.Signature: + var hash uint32 = 9091 + if t.Variadic() { + hash *= 8863 + } + // PATCH: also consider the receiver type + return hash + 3*h.hashTuple(t.Params()) + 5*h.hashTuple(t.Results()) + 7*h.hashVar(t.Recv()) + + case *types.Interface: + // PATCH: consider the explicit methods and embedded interfaces, in order. + // See Identical for rationale. + var hash uint32 = 9103 + for i, n := 0, t.NumEmbeddeds(); i < n; i++ { + // Embedded interfaces order is significant. + e := t.Embedded(i) + // Not safe with a copying GC; objects may move. + hash = (hash<<5 | hash>>27) + 2*hashNamed(e) + } + for i, n := 0, t.NumExplicitMethods(); i < n; i++ { + // Method order is significant. + // Ignore m.Pkg(). + m := t.ExplicitMethod(i) + // fmt.Printf("Hash for interface <%v> method %q <%v>\n", t, m.Name(), m.Type()) + + hash = (hash<<5 | hash>>27) + 7*hashString(m.Name()) + if mt, ok := m.Type().Underlying().(*types.Signature); ok { + if mt.Variadic() { + hash *= 8863 + } + // do NOT hash the receiver of an interface... it may be the interface itself + hash += 3*h.hashTuple(mt.Params()) + 5*h.hashTuple(mt.Results()) + } + } + return hash + + case *types.Map: + return 9109 + 2*h.Hash(t.Key()) + 3*h.Hash(t.Elem()) + + case *types.Chan: + return 9127 + 2*uint32(t.Dir()) + 3*h.Hash(t.Elem()) + + case *types.Named: + // Not safe with a copying GC; objects may move. + return hashNamed(t) + + case *types.Tuple: + return h.hashTuple(t) + + case nil: + return 9133 + } + panic(t) +} diff --git a/vendor/github.com/cosmos72/gomacro/typeutil/predicates.go b/vendor/github.com/cosmos72/gomacro/typeutil/predicates.go new file mode 100644 index 0000000..46d0f7b --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/typeutil/predicates.go @@ -0,0 +1,237 @@ +// Copyright 2012 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// This file implements commonly used type predicates. + +package typeutil + +import ( + "go/ast" + "go/types" +) + +// Identical reports whether x and y are identical. +func Identical(x, y types.Type) bool { + return identical(x, y, true, nil) +} + +// IdenticalIgnoreTags reports whether x and y are identical if tags are ignored. +func IdenticalIgnoreTags(x, y types.Type) bool { + return identical(x, y, false, nil) +} + +func sameName(xname string, xpkg *types.Package, yname string, ypkg *types.Package) bool { + // spec: + // "Two identifiers are different if they are spelled differently, + // or if they appear in different packages and are not exported. + // Otherwise, they are the same." + if xname != yname { + return false + } + // xname == yname + if ast.IsExported(xname) { + return true + } + // not exported, so packages must be the same (pkg == nil for + // fields in Universe scope; this can only happen for types + // introduced via Eval) + if xpkg == nil || ypkg == nil { + return xpkg == ypkg + } + // xpkg != nil && ypkg != nil + return xpkg.Path() == ypkg.Path() +} + +func sameVarName(x, y *types.Var) bool { + if x == nil || y == nil { + return x == y + } + return x == y || sameName(x.Name(), x.Pkg(), y.Name(), y.Pkg()) +} + +func sameFuncName(x, y *types.Func) bool { + if x == nil || y == nil { + return x == y + } + return x == y || sameName(x.Name(), x.Pkg(), y.Name(), y.Pkg()) +} + +// An ifacePair is a node in a stack of interface type pairs compared for identity. +type ifacePair struct { + x, y *types.Interface + prev *ifacePair +} + +func identicalVar(v, w *types.Var, cmpTags bool, p *ifacePair) bool { + if v == nil || w == nil { + return v == w + } + return v == w || identical(v.Type(), w.Type(), cmpTags, p) +} + +func (p *ifacePair) identical(q *ifacePair) bool { + return p.x == q.x && p.y == q.y || p.x == q.y && p.y == q.x +} + +func identical(x, y types.Type, cmpTags bool, p *ifacePair) bool { + if x == y { + return true + } + + switch x := x.(type) { + case *types.Basic: + // types.Basic types are singletons except for the rune and byte + // aliases, thus we cannot solely rely on the x == y check + // above. + if y, ok := y.(*types.Basic); ok { + return x.Kind() == y.Kind() + } + + case *types.Array: + // Two array types are identical if they have identical element types + // and the same array length. + if y, ok := y.(*types.Array); ok { + return x.Len() == y.Len() && identical(x.Elem(), y.Elem(), cmpTags, p) + } + + case *types.Slice: + // Two slice types are identical if they have identical element types. + if y, ok := y.(*types.Slice); ok { + return identical(x.Elem(), y.Elem(), cmpTags, p) + } + + case *types.Struct: + // Two struct types are identical if they have the same sequence of fields, + // and if corresponding fields have the same names, and identical types, + // and identical tags. Two anonymous fields are considered to have the same + // name. Lower-case field names from different packages are always different. + if y, ok := y.(*types.Struct); ok { + if x.NumFields() == y.NumFields() { + for i, n := 0, x.NumFields(); i < n; i++ { + f := x.Field(i) + g := y.Field(i) + if f.Anonymous() != g.Anonymous() || + cmpTags && x.Tag(i) != y.Tag(i) || + !sameVarName(f, g) || + !identical(f.Type(), g.Type(), cmpTags, p) { + return false + } + } + return true + } + } + + case *types.Pointer: + // Two pointer types are identical if they have identical base types. + if y, ok := y.(*types.Pointer); ok { + return identical(x.Elem(), y.Elem(), cmpTags, p) + } + + case *types.Tuple: + // Two tuples types are identical if they have the same number of elements + // and corresponding elements have identical types. + if y, ok := y.(*types.Tuple); ok { + if x.Len() == y.Len() { + for i, n := 0, x.Len(); i < n; i++ { + v := x.At(i) + w := y.At(i) + if !identical(v.Type(), w.Type(), cmpTags, p) { + return false + } + } + return true + } + } + + case *types.Signature: + // Two function types are identical if they have the same number of parameters + // and result values, corresponding parameter and result types are identical, + // and either both functions are variadic or neither is. Parameter and result + // names are not required to match. + // + // PATCH: also compare the receiver type + if y, ok := y.(*types.Signature); ok { + return x.Variadic() == y.Variadic() && + identicalVar(x.Recv(), y.Recv(), cmpTags, p) && + identical(x.Params(), y.Params(), cmpTags, p) && + identical(x.Results(), y.Results(), cmpTags, p) + } + + case *types.Interface: + // PATCH: two interface types are identical if they have the same explicit methods + // and the same embedded interfaces. The order of methods and embeddeds is *relevant*. + if y, ok := y.(*types.Interface); ok { + na := x.NumMethods() + nb := y.NumMethods() + ne := x.NumEmbeddeds() + nf := x.NumEmbeddeds() + if na == nb && ne == nf { + // this PATCHED definition of type identity sidesteps the type cycles + // created via method parameter types that are anonymous interfaces + // (directly or indirectly) embedding the current interface, as for example + // + // type T interface { + // m() interface{T} + // } + // + // simply by *not* embedding the interfaces, and checking for identical + // embedded interfaces - which are always named and thus compare trivially + // without recursion, preventing any infinite cycle or recursion. + q := &ifacePair{x, y, p} + for p != nil { + if p.identical(q) { + return true // same pair was compared before + } + p = p.prev + } + for i := 0; i < na; i++ { + a := x.Method(i) + b := y.Method(i) + if !sameFuncName(a, b) || !identical(a.Type(), b.Type(), cmpTags, q) { + return false + } + } + for i := 0; i < ne; i++ { + e := x.Embedded(i) + f := y.Embedded(i) + if e.Obj() != f.Obj() { + return false + } + } + return true + } + } + + case *types.Map: + // Two map types are identical if they have identical key and value types. + if y, ok := y.(*types.Map); ok { + return identical(x.Key(), y.Key(), cmpTags, p) && identical(x.Elem(), y.Elem(), cmpTags, p) + } + + case *types.Chan: + // Two channel types are identical if they have identical value types + // and the same direction. + if y, ok := y.(*types.Chan); ok { + return x.Dir() == y.Dir() && identical(x.Elem(), y.Elem(), cmpTags, p) + } + + case *types.Named: + // Two named types are identical if their type names originate + // in the same type declaration. + if y, ok := y.(*types.Named); ok { + return x.Obj() == y.Obj() + } + + case nil: + + default: + unreachable() + } + + return false +} + +func unreachable() { + panic("unreachable") +} diff --git a/vendor/github.com/cosmos72/gomacro/typeutil/x_package.go b/vendor/github.com/cosmos72/gomacro/typeutil/x_package.go new file mode 100644 index 0000000..1b3d431 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/typeutil/x_package.go @@ -0,0 +1,25 @@ +// this file was generated by gomacro command: import _i "github.com/cosmos72/gomacro/typeutil" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package typeutil + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/imports" +) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/typeutil" +func init() { + imports.Packages["github.com/cosmos72/gomacro/typeutil"] = imports.Package{ + Binds: map[string]r.Value{ + "Identical": r.ValueOf(Identical), + "IdenticalIgnoreTags": r.ValueOf(IdenticalIgnoreTags), + "MakeHasher": r.ValueOf(MakeHasher), + }, + Types: map[string]r.Type{ + "Hasher": r.TypeOf((*Hasher)(nil)).Elem(), + "Map": r.TypeOf((*Map)(nil)).Elem(), + }, + Proxies: map[string]r.Type{}} +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/README.md b/vendor/github.com/cosmos72/gomacro/xreflect/README.md new file mode 100644 index 0000000..50f45d9 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/README.md @@ -0,0 +1,12 @@ +### xreflect + +The package `xreflect` is a wrapper aroung Go standard packages `reflect` and `go/types` +that **emulates** the missing features of `reflect` package: + +* NamedOf: declare new named types at runtime +* AddMethod: add method to a named type at runtime +* InterfaceOf: declare new interfaces at runtime + +## License + +GPL v3+ diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/build_easy.go b/vendor/github.com/cosmos72/gomacro/xreflect/build_easy.go new file mode 100644 index 0000000..ba44557 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/build_easy.go @@ -0,0 +1,304 @@ +// +build gomacro_xreflect_easy + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * build_easy.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/types" + "reflect" +) + +type Type interface { + + // Align returns the alignment in bytes of a value of + // this type when allocated in memory. + Align() int + + // FieldAlign returns the alignment in bytes of a value of + // this type when used as a field in a struct. + FieldAlign() int + + // AssignableTo reports whether a value of the type is assignable to type u. + AssignableTo(u Type) bool + + // ConvertibleTo reports whether a value of the type is convertible to type u. + ConvertibleTo(u Type) bool + + // Comparable reports whether values of this type are comparable. + Comparable() bool + + // GoType returns the go/types.Type corresponding to the given type. + GoType() types.Type + + // Implements reports whether the type implements the interface type u. + // It panics if u's Kind is not Interface + Implements(u Type) bool + + // Name returns the type's name within its package. + // It returns an empty string for unnamed types. + Name() string + + // Named returns whether the type is named. + // It returns false for unnamed types. + Named() bool + + // Pkg returns a named type's package, that is, the package where it was defined. + // If the type was predeclared (string, error) or unnamed (*T, struct{}, []int), + // Pkg will return nil. + Pkg() *Package + + // PkgName returns a named type's package name, that is, + // the default name that the package provides when imported. + // If the type was predeclared (string, error) or unnamed (*T, struct{}, []int), + // the package name will be the empty string. + PkgName() string + + // PkgPath returns a named type's package path, that is, the import path + // that uniquely identifies the package, such as "encoding/base64". + // If the type was predeclared (string, error) or unnamed (*T, struct{}, []int), + // the package path will be the empty string. + PkgPath() string + + // ReflectType returns a best-effort reflect.Type that approximates the type. + // It may be inexact for the following reasons: + // 1) missing reflect.NamedOf(): no way to programmatically create named types, or to access the underlying type of a named type + // 2) missing reflect.InterfaceOf(): interface types created at runtime will be approximated by structs + // 3) missing reflect.MethodOf(): method types created at runtime will be approximated by functions + // whose first parameter is the receiver + // 4) reflect.StructOf() does not support embedded or unexported fields + // 5) go/reflect lacks the ability to create self-referencing types: + // references to the type itself will be replaced by interface{}. + // + // Examples: + // after invoking at runtime type2.NewStruct() and type2.NewNamed() + // to create the following type: + // type List struct { Elem int; Rest *List } + // ReflectType will return a reflect.Type equivalent to: + // struct { Elem int; Rest interface{} } + // i.e. the type name will be missing due to limitation 1 above, + // and the field 'Rest' will have type interface{} instead of *List due to limitation 5. + ReflectType() reflect.Type + + UnsafeForceReflectType(rtype reflect.Type) + + // Size returns the number of bytes needed to store + // a value of the given type; it is analogous to unsafe.Sizeof. + Size() uintptr + + // String returns a string representation of a type. + String() string + + // AddMethod adds method with given name and signature to type, unless it is already in the method list. + // It panics if the type is unnamed, or if the signature is not a function-with-receiver type. + // Returns the method index, or < 0 in case of errors + AddMethod(name string, signature Type) int + + // Bits returns the size of the type in bits. + // It panics if the type's Kind is not one of the + // sized or unsized Int, Uint, Float, or Complex kinds. + Bits() int + + // ChanDir returns a channel type's direction. + // It panics if the type's Kind is not Chan. + ChanDir() reflect.ChanDir + + // Complete marks an interface type as complete and computes wrapper methods for embedded fields. + // It must be called by users of InterfaceOf after the interface's embedded types are fully defined + // and before using the interface type in any way other than to form other types. + // Complete returns a canonicalized (unique) version of the receiver. + Complete() Type + // Elem returns a type's element type. + // It panics if the type's Kind is not Array, Chan, Map, Ptr, or Slice. + Elem() Type + + // Field returns a struct type's i-th field. + // It panics if the type's Kind is not Struct. + // It panics if i is not in the range [0, NumField()). + Field(i int) StructField + // FieldByName returns the (possibly embedded) struct field with the given name + // and the number of fields found at the same (shallowest) depth: 0 if not found. + // Private fields are returned only if they were declared in pkgpath. + FieldByName(name, pkgpath string) (field StructField, count int) + + // IsMethod reports whether a function type's contains a receiver, i.e. is a method. + // If IsMethod returns true, the actual receiver type is available as the first parameter, i.e. Type.In(0) + // It panics if the type's Kind is not Func. + IsMethod() bool + + // IsVariadic reports whether a function type's final input parameter is a "..." parameter. + // If so, t.In(t.NumIn() - 1) returns the parameter's implicit actual type []T. + // IsVariadic panics if the type's Kind is not Func. + IsVariadic() bool + + // Key returns a map type's key type. + // It panics if the type's Kind is not Map. + Key() Type + // Kind returns the specific kind of the type. + Kind() reflect.Kind + + // Len returns an array type's length. + // It panics if the type's Kind is not Array. + Len() int + + // In returns the type of a function type's i'th input parameter. + // It panics if the type's Kind is not Func. + // It panics if i is not in the range [0, NumIn()). + In(i int) Type + // Method return the i-th explicitly declared method of named type or interface t. + // Wrapper methods for embedded fields or embedded interfaces are not returned. + // It panics if the type is unnamed, or if the type's Kind is not Interface + Method(i int) Method + // MethodByName returns the method with given name (including wrapper methods for embedded fields) + // and the number of methods found at the same (shallowest) depth: 0 if not found. + // Private methods are returned only if they were declared in pkgpath. + MethodByName(name, pkgpath string) (method Method, count int) + + // NumMethod returns the number of explicitly declared methods of named type or interface t. + // Wrapper methods for embedded fields or embedded interfaces are not counted. + NumMethod() int + // NumField returns a struct type's field count. + // It panics if the type's Kind is not Struct. + NumField() int + + // NumIn returns a function type's input parameter count. + // It panics if the type's Kind is not Func. + NumIn() int + + // NumOut returns a function type's output parameter count. + // It panics if the type's Kind is not Func. + NumOut() int + + // Out returns the type of a function type's i'th output parameter. + // It panics if the type's Kind is not Func. + // It panics if i is not in the range [0, NumOut()). + Out(i int) Type + + // RemoveMethods removes given methods from type. + // It panics if the type is unnamed, or if the signature is not a function type, + RemoveMethods(names []string, pkgpath string) + + // SetUnderlying sets the underlying type of a named type and marks it as complete. + // It panics if the type is unnamed, or if the underlying type is named, + // or if SetUnderlying() was already invoked on the named type. + SetUnderlying(underlying Type) + + // underlying returns the underlying types.Type of a type. + // TODO implement Underlying() Type ? + // Synthetizing the underlying reflect.Type is not possible for interface types, + // or for struct types with embedded or unexported fields. + underlying() types.Type + + elem() Type + + Universe() *Universe + + // GetMethods returns the pointer to the method values. + // It panics if the type is unnamed + GetMethods() *[]reflect.Value +} + +func unwrap(t Type) *xtype { + if t == nil { + return nil + } + return t.(*xtype) +} + +func wrap(t *xtype) Type { + return t +} + +// Complete marks an interface type as complete and computes wrapper methods for embedded fields. +// It must be called by users of InterfaceOf after the interface's embedded types are fully defined +// and before using the interface type in any way other than to form other types. +func (t *xtype) Complete() Type { + if t.kind != reflect.Interface { + xerrorf(t, "Complete of non-interface %v", t) + } + gtype := t.gtype.Underlying().(*types.Interface) + gtype.Complete() + return wrap(t) +} + +var ( + BasicTypes = universe.BasicTypes + + TypeOfBool = BasicTypes[reflect.Bool] + TypeOfInt = BasicTypes[reflect.Int] + TypeOfInt8 = BasicTypes[reflect.Int8] + TypeOfInt16 = BasicTypes[reflect.Int16] + TypeOfInt32 = BasicTypes[reflect.Int32] + TypeOfInt64 = BasicTypes[reflect.Int64] + TypeOfUint = BasicTypes[reflect.Uint] + TypeOfUint8 = BasicTypes[reflect.Uint8] + TypeOfUint16 = BasicTypes[reflect.Uint16] + TypeOfUint32 = BasicTypes[reflect.Uint32] + TypeOfUint64 = BasicTypes[reflect.Uint64] + TypeOfUintptr = BasicTypes[reflect.Uintptr] + TypeOfFloat32 = BasicTypes[reflect.Float32] + TypeOfFloat64 = BasicTypes[reflect.Float64] + TypeOfComplex64 = BasicTypes[reflect.Complex64] + TypeOfComplex128 = BasicTypes[reflect.Complex128] + TypeOfString = BasicTypes[reflect.String] + TypeOfUnsafePointer = BasicTypes[reflect.UnsafePointer] + TypeOfError = universe.TypeOfError + TypeOfInterface = universe.TypeOfInterface +) + +// TypeOf creates a Type corresponding to reflect.TypeOf() of given value. +// Note: conversions from Type to reflect.Type and back are not exact, +// because of the reasons listed in Type.ReflectType() +// Conversions from reflect.Type to Type and back are not exact for the same reasons. +func TypeOf(rvalue interface{}) Type { + return universe.FromReflectType(reflect.TypeOf(rvalue)) +} + +// FromReflectType creates a Type corresponding to given reflect.Type +// Note: conversions from Type to reflect.Type and back are not exact, +// because of the reasons listed in Type.ReflectType() +// Conversions from reflect.Type to Type and back are not exact for the same reasons. +func FromReflectType(rtype reflect.Type) Type { + return universe.FromReflectType(rtype) +} + +// NamedOf returns a new named type for the given type name and package. +// Initially, the underlying type is set to interface{} - use SetUnderlying to change it. +// These two steps are separate to allow creating self-referencing types, +// as for example type List struct { Elem int; Rest *List } +func NamedOf(name, pkgpath string) Type { + return universe.NamedOf(name, pkgpath) +} + +func NewPackage(path, name string) *Package { + return universe.NewPackage(path, name) +} + +func MakeType(gtype types.Type, rtype reflect.Type) Type { + return universe.MakeType(gtype, rtype) +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/build_strict.go b/vendor/github.com/cosmos72/gomacro/xreflect/build_strict.go new file mode 100644 index 0000000..a689538 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/build_strict.go @@ -0,0 +1,345 @@ +// +build !gomacro_xreflect_easy + +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * build_strict.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/types" + "reflect" +) + +type Type []xtype + +// Align returns the alignment in bytes of a value of +// this type when allocated in memory. +func (t Type) Align() int { + return t[0].Align() +} + +// FieldAlign returns the alignment in bytes of a value of +// this type when used as a field in a struct. +func (t Type) FieldAlign() int { + return t[0].FieldAlign() +} + +// AssignableTo reports whether a value of the type is assignable to type u. +func (t Type) AssignableTo(u Type) bool { + return t[0].AssignableTo(u) +} + +// ConvertibleTo reports whether a value of the type is convertible to type u. +func (t Type) ConvertibleTo(u Type) bool { + return t[0].ConvertibleTo(u) +} + +// Comparable reports whether values of this type are comparable. +func (t Type) Comparable() bool { + return t[0].Comparable() +} + +// GoType returns the go/types.Type corresponding to the given type. +func (t Type) GoType() types.Type { + return t[0].GoType() +} + +// Implements reports whether the type implements the interface type u. +// It panics if u's Kind is not Interface +func (t Type) Implements(u Type) bool { + return t[0].Implements(u) +} + +// Name returns the type's name within its package. +// It returns an empty string for unnamed types. +func (t Type) Name() string { + if len(t) == 0 { + return "" + } + return t[0].Name() +} + +// Named returns whether the type is named. +// It returns false for unnamed types. +func (t Type) Named() bool { + if len(t) == 0 { + return false + } + return t[0].Named() +} + +// Pkg returns a named type's package, that is, the package where it was defined. +// If the type was predeclared (string, error) or unnamed (*T, struct{}, []int), +// Pkg will return nil. +func (t Type) Pkg() *Package { + return t[0].Pkg() +} + +// PkgName returns a named type's package name, that is, +// the default name that the package provides when imported. +// If the type was predeclared (string, error) or unnamed (*T, struct{}, []int), +// the package name will be the empty string. +func (t Type) PkgName() string { + return t[0].PkgName() +} + +// PkgPath returns a named type's package path, that is, the import path +// that uniquely identifies the package, such as "encoding/base64". +// If the type was predeclared (string, error) or unnamed (*T, struct{}, []int), +// the package path will be the empty string. +func (t Type) PkgPath() string { + return t[0].PkgPath() +} + +// ReflectType returns a best-effort reflect.Type that approximates the type. +// It may be inexact for the following reasons: +// 1) missing reflect.NamedOf(): no way to programmatically create named types, or to access the underlying type of a named type +// 2) missing reflect.InterfaceOf(): interface types created at runtime will be approximated by structs +// 3) missing reflect.MethodOf(): method types created at runtime will be approximated by functions +// whose first parameter is the receiver +// 4) reflect.StructOf() does not support embedded or unexported fields +// 5) go/reflect lacks the ability to create self-referencing types: +// references to the type itself will be replaced by interface{}. +// +// Examples: +// after invoking at runtime type2.NewStruct() and type2.NewNamed() +// to create the following type: +// type List struct { Elem int; Rest *List } +// ReflectType will return a reflect.Type equivalent to: +// struct { Elem int; Rest interface{} } +// i.e. the type name will be missing due to limitation 1 above, +// and the field 'Rest' will have type interface{} instead of *List due to limitation 5. +func (t Type) ReflectType() reflect.Type { + return t[0].ReflectType() +} + +func (t Type) UnsafeForceReflectType(rtype reflect.Type) { + t[0].UnsafeForceReflectType(rtype) +} + +// Size returns the number of bytes needed to store +// a value of the given type; it is analogous to unsafe.Sizeof. +func (t Type) Size() uintptr { + return t[0].Size() +} + +// String returns a string representation of a type. +func (t Type) String() string { + if t == nil { + return "" + } + return t[0].String() +} + +// AddMethod adds method with given name and signature to type, unless it is already in the method list. +// It panics if the type is unnamed, or if the signature is not a function-with-receiver type. +// Returns the method index, or < 0 in case of errors +func (t Type) AddMethod(name string, signature Type) int { + return t[0].AddMethod(name, signature) +} + +// Bits returns the size of the type in bits. +// It panics if the type's Kind is not one of the +// sized or unsized Int, Uint, Float, or Complex kinds. +func (t Type) Bits() int { + return t[0].Bits() +} + +// ChanDir returns a channel type's direction. +// It panics if the type's Kind is not Chan. +func (t Type) ChanDir() reflect.ChanDir { + return t[0].ChanDir() +} + +// Complete marks an interface type as complete and computes wrapper methods for embedded fields. +// It must be called by users of InterfaceOf after the interface's embedded types are fully defined +// and before using the interface type in any way other than to form other types. +// Complete returns the receiver. +func (t Type) Complete() Type { + t[0].Complete() + return t +} + +// Elem returns a type's element type. +// It panics if the type's Kind is not Array, Chan, Map, Ptr, or Slice. +func (t Type) Elem() Type { + return t[0].Elem() +} + +func (t Type) elem() Type { + return t[0].elem() +} + +// Field returns a struct type's i-th field. +// It panics if the type's Kind is not Struct. +// It panics if i is not in the range [0, NumField()). +func (t Type) Field(i int) StructField { + return t[0].Field(i) +} + +// FieldByName returns the (possibly embedded) struct field with the given name +// and the number of fields found at the same (shallowest) depth: 0 if not found. +// Private fields are returned only if they were declared in pkgpath. +func (t Type) FieldByName(name, pkgpath string) (field StructField, count int) { + return t[0].FieldByName(name, pkgpath) +} + +// IsMethod reports whether a function type's contains a receiver, i.e. is a method. +// If IsMethod returns true, the actual receiver type is available as the first parameter, i.e. Type.In(0) +// It panics if the type's Kind is not Func. +func (t Type) IsMethod() bool { + return t[0].IsMethod() +} + +// IsVariadic reports whether a function type's final input parameter is a "..." parameter. +// If so, t.In(t.NumIn() - 1) returns the parameter's implicit actual type []T. +// IsVariadic panics if the type's Kind is not Func. +func (t Type) IsVariadic() bool { + return t[0].IsVariadic() +} + +// Key returns a map type's key type. +// It panics if the type's Kind is not Map. +func (t Type) Key() Type { + return t[0].Key() +} + +// Kind returns the specific kind of the type. +func (t Type) Kind() reflect.Kind { + if len(t) == 0 { + return reflect.Invalid + } + return t[0].Kind() +} + +// Len returns an array type's length. +// It panics if the type's Kind is not Array. +func (t Type) Len() int { + return t[0].Len() +} + +// In returns the type of a function type's i'th input parameter. +// It panics if the type's Kind is not Func. +// It panics if i is not in the range [0, NumIn()). +func (t Type) In(i int) Type { + return t[0].In(i) +} + +// Method return the i-th explicitly declared method of named type or interface t. +// Wrapper methods for embedded fields or embedded interfaces are not returned. +// It panics if the type is unnamed, or if the type's Kind is not Interface +func (t Type) Method(i int) Method { + return t[0].Method(i) +} + +// MethodByName returns the method with given name (including wrapper methods for embedded fields) +// and the number of methods found at the same (shallowest) depth: 0 if not found. +// Private methods are returned only if they were declared in pkgpath. +func (t Type) MethodByName(name, pkgpath string) (method Method, count int) { + return t[0].MethodByName(name, pkgpath) +} + +// NumMethod returns the number of explicitly declared methods of named type or interface t. +// Wrapper methods for embedded fields or embedded interfaces are not counted. +func (t Type) NumMethod() int { + return t[0].NumMethod() +} + +// NumField returns a struct type's field count. +// It panics if the type's Kind is not Struct. +func (t Type) NumField() int { + return t[0].NumField() +} + +// NumIn returns a function type's input parameter count. +// It panics if the type's Kind is not Func. +func (t Type) NumIn() int { + return t[0].NumIn() +} + +// NumOut returns a function type's output parameter count. +// It panics if the type's Kind is not Func. +func (t Type) NumOut() int { + return t[0].NumOut() +} + +// Out returns the type of a function type's i'th output parameter. +// It panics if the type's Kind is not Func. +// It panics if i is not in the range [0, NumOut()). +func (t Type) Out(i int) Type { + return t[0].Out(i) +} + +// RemoveMethods removes given methods from type. +// It panics if the type is unnamed. +func (t Type) RemoveMethods(names []string, pkgpath string) { + t[0].RemoveMethods(names, pkgpath) +} + +// SetUnderlying sets the underlying type of a named type and marks it as complete. +// It panics if the type is unnamed, or if the underlying type is named, +// or if SetUnderlying() was already invoked on the named type. +func (t Type) SetUnderlying(underlying Type) { + t[0].SetUnderlying(underlying) +} + +// underlying returns the underlying types.Type of a type. +// TODO implement Underlying() Type ? +// Synthetizing the underlying reflect.Type is not possible for interface types, +// or for struct types with embedded or unexported fields. +func (t Type) underlying() types.Type { + return t[0].underlying() +} + +func (t Type) Universe() *Universe { + return t[0].Universe() +} + +// GetMethods returns the pointer to the method values. +// It panics if the type is unnamed +func (t Type) GetMethods() *[]reflect.Value { + return t[0].GetMethods() +} + +// Complete marks an interface type as complete and computes wrapper methods for embedded fields. +// It must be called by users of InterfaceOf after the interface's embedded types are fully defined +// and before using the interface type in any way other than to form other types. +func (t *xtype) Complete() { + if t.kind != reflect.Interface { + xerrorf(t, "Complete of non-interface %v", t) + } + gtype := t.gtype.Underlying().(*types.Interface) + gtype.Complete() +} + +func wrap(t *xtype) Type { + return Type{*t} +} + +func unwrap(t Type) *xtype { + return &t[0] +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/composite.go b/vendor/github.com/cosmos72/gomacro/xreflect/composite.go new file mode 100644 index 0000000..6b54b9f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/composite.go @@ -0,0 +1,140 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * composite.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/types" + "reflect" +) + +// ChanDir returns a channel type's direction. +// It panics if the type's Kind is not Chan. +func (t *xtype) ChanDir() reflect.ChanDir { + if t.Kind() != reflect.Chan { + xerrorf(t, "ChanDir of non-chan type %v", t) + } + return t.rtype.ChanDir() +} + +// Elem returns a type's element type. +// It panics if the type's Kind is not Array, Chan, Map, Ptr, or Slice. +func (t *xtype) Elem() Type { + v := t.universe + if v.ThreadSafe { + defer un(lock(v)) + } + return t.elem() +} + +func (t *xtype) elem() Type { + gtype := t.underlying() + rtype := t.rtype + switch gtype := gtype.(type) { + case *types.Array: + return t.universe.maketype(gtype.Elem(), rtype.Elem()) + case *types.Chan: + return t.universe.maketype(gtype.Elem(), rtype.Elem()) + case *types.Map: + return t.universe.maketype(gtype.Elem(), rtype.Elem()) + case *types.Pointer: + return t.universe.maketype(gtype.Elem(), rtype.Elem()) + case *types.Slice: + return t.universe.maketype(gtype.Elem(), rtype.Elem()) + default: + xerrorf(t, "Elem of invalid type %v", t) + return nil + } +} + +// Key returns a map type's key type. +// It panics if the type's Kind is not Map. +func (t *xtype) Key() Type { + if t.Kind() != reflect.Map { + xerrorf(t, "Key of non-map type %v", t) + } + gtype := t.underlying().(*types.Map) + return t.universe.MakeType(gtype.Key(), t.rtype.Key()) +} + +// Len returns an array type's length. +// It panics if the type's Kind is not Array. +func (t *xtype) Len() int { + if t.Kind() != reflect.Array { + xerrorf(t, "Len of non-array type %v", t) + } + return t.rtype.Len() +} + +func (v *Universe) ArrayOf(count int, elem Type) Type { + return v.MakeType( + types.NewArray(elem.GoType(), int64(count)), + reflect.ArrayOf(count, elem.ReflectType())) +} + +func (v *Universe) ChanOf(dir reflect.ChanDir, elem Type) Type { + gdir := dirToGdir(dir) + return v.MakeType( + types.NewChan(gdir, elem.GoType()), + reflect.ChanOf(dir, elem.ReflectType())) +} + +func (v *Universe) MapOf(key, elem Type) Type { + return v.MakeType( + types.NewMap(key.GoType(), elem.GoType()), + reflect.MapOf(key.ReflectType(), elem.ReflectType())) +} + +func (v *Universe) PtrTo(elem Type) Type { + return v.MakeType( + types.NewPointer(elem.GoType()), + reflect.PtrTo(elem.ReflectType())) +} + +func (v *Universe) SliceOf(elem Type) Type { + return v.MakeType( + types.NewSlice(elem.GoType()), + reflect.SliceOf(elem.ReflectType())) +} + +func ArrayOf(count int, elem Type) Type { + return elem.Universe().ArrayOf(count, elem) +} + +func ChanOf(dir reflect.ChanDir, elem Type) Type { + return elem.Universe().ChanOf(dir, elem) +} + +func MapOf(key, elem Type) Type { + return key.Universe().MapOf(key, elem) +} + +func PtrTo(elem Type) Type { + return elem.Universe().PtrTo(elem) +} + +func SliceOf(elem Type) Type { + return elem.Universe().SliceOf(elem) +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/fromreflect.go b/vendor/github.com/cosmos72/gomacro/xreflect/fromreflect.go new file mode 100644 index 0000000..4893237 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/fromreflect.go @@ -0,0 +1,487 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * fromreflect.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/token" + "go/types" + "reflect" + "strings" +) + +func (v *Universe) TypeOf(rvalue interface{}) Type { + return v.FromReflectType(reflect.TypeOf(rvalue)) +} + +func (v *Universe) FromReflectType(rtype reflect.Type) Type { + if rtype == nil { + return nil + } + if v.ThreadSafe { + defer un(lock(v)) + } + return v.fromReflectType(rtype) +} + +func (v *Universe) fromReflectType(rtype reflect.Type) Type { + if rtype == nil { + return nil + } + if v.BasicTypes == nil { + v.init() + } + t := v.BasicTypes[rtype.Kind()] + if t != nil && t.ReflectType() == rtype { + return t + } + if t = v.ReflectTypes[rtype]; t != nil { + // debugf("found rtype in cache: %v -> %v (%v)", rtype, t, t.ReflectType()) + // time.Sleep(100 * time.Millisecond) + return t + } + name := rtype.Name() + tryresolve := v.TryResolve + if tryresolve != nil && len(name) != 0 { + t = tryresolve(name, rtype.PkgPath()) + if t != nil { + return t + } + } + if v.RebuildDepth >= 0 { + // decrement ONLY here and in fromReflectPtr() when calling fromReflectInterfacePtrStruct() + v.RebuildDepth-- + defer func() { + v.RebuildDepth++ + }() + } + // when converting a named type and v.Importer cannot locate it, + // immediately register it in the cache because it may reference itself, + // as for example type List struct { Elem int; Rest *List } + // otherwise we may get an infinite recursion + if len(name) != 0 { + if !v.rebuild() { + if t = v.namedTypeFromImport(rtype); t != nil { + // debugf("found type in import: %v -> %v", t, t.ReflectType()) + return t + } + } + t = v.namedOf(name, rtype.PkgPath()) + v.cache(rtype, t) // support self-refencing types + // debugf("prepared named type %v", t) + } + + var u Type + switch k := rtype.Kind(); k { + case reflect.Invalid: + return nil + case reflect.Bool, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, + reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr, + reflect.Float32, reflect.Float64, reflect.Complex64, reflect.Complex128, reflect.String, + reflect.UnsafePointer: + u = v.BasicTypes[k] + case reflect.Array: + u = v.fromReflectArray(rtype) + case reflect.Chan: + u = v.fromReflectChan(rtype) + case reflect.Func: + u = v.fromReflectFunc(rtype) + case reflect.Interface: + u = v.fromReflectInterface(rtype) + case reflect.Map: + u = v.fromReflectMap(rtype) + case reflect.Ptr: + u = v.fromReflectPtr(rtype) + case reflect.Slice: + u = v.fromReflectSlice(rtype) + case reflect.Struct: + u = v.fromReflectStruct(rtype) + default: + errorf(t, "unsupported reflect.Type %v", rtype) + } + if t == nil { + t = u + // cache before adding methods - otherwise we get an infinite recursion + // if u is a pointer to named type with methods that reference the named type + v.cache(rtype, t) + } else { + t.SetUnderlying(u) + // t.ReflectType() is now u.ReflectType(). but we can do better... we know the exact rtype to set + if !v.rebuild() { + t.UnsafeForceReflectType(rtype) + } + } + return v.addmethods(t, rtype) +} + +func (v *Universe) addmethods(t Type, rtype reflect.Type) Type { + n := rtype.NumMethod() + if n == 0 { + return t + } + tm := t + if !t.Named() && t.Kind() == reflect.Ptr { + // methods on pointer-to-type. add them to the type itself + tm = t.elem() + } + xt := unwrap(tm) + if !xt.Named() { + errorf(t, "cannot add methods to unnamed type %v", t) + } + if xt.kind == reflect.Interface { + // debugf("NOT adding methods to interface %v", tm) + return t + } + if xt.methodvalues != nil { + // prevent another infinite recursion: Type.AddMethod() may reference the type itself in its methods + // debugf("NOT adding again %d methods to %v", n, tm) + } else { + // debugf("adding %d methods to %v", n, tm) + xt.methodvalues = make([]reflect.Value, 0, n) + nilv := reflect.Value{} + if v.rebuild() { + v.RebuildDepth-- + + } + for i := 0; i < n; i++ { + rmethod := rtype.Method(i) + signature := v.fromReflectMethod(rmethod.Type) + n1 := tm.NumMethod() + tm.AddMethod(rmethod.Name, signature) + n2 := tm.NumMethod() + if n1 == n2 { + // method was already present + continue + } + for len(xt.methodvalues) < n2 { + xt.methodvalues = append(xt.methodvalues, nilv) + } + xt.methodvalues[n1] = rmethod.Func + } + } + return t +} + +func (v *Universe) fromReflectField(rfield *reflect.StructField) StructField { + t := v.fromReflectType(rfield.Type) + name := rfield.Name + anonymous := rfield.Anonymous + + if strings.HasPrefix(name, StrGensymEmbedded) { + // this reflect.StructField emulates embedded field using our own convention. + // eat our own dogfood and convert it back to an embedded field. + rtype := rfield.Type + typename := rtype.Name() + if len(typename) == 0 { + typename = name[len(StrGensymEmbedded):] + } + // rebuild the type's name and package + t = v.named(t, typename, rtype.PkgPath()) + name = typename + anonymous = true + } else if strings.HasPrefix(name, StrGensymPrivate) { + // this reflect.StructField emulates private (unexported) field using our own convention. + // eat our own dogfood and convert it back to a private field. + name = name[len(StrGensymPrivate):] + } + + return StructField{ + Name: name, + Pkg: v.loadPackage(rfield.PkgPath), + Type: t, + Tag: rfield.Tag, + Offset: rfield.Offset, + Index: rfield.Index, + Anonymous: anonymous, + } +} + +func (v *Universe) fromReflectFields(rfields []reflect.StructField) []StructField { + fields := make([]StructField, len(rfields)) + for i := range rfields { + fields[i] = v.fromReflectField(&rfields[i]) + } + return fields +} + +// named creates a new named Type based on t, having the given name and pkgpath +func (v *Universe) named(t Type, name string, pkgpath string) Type { + if t.Name() != name || t.PkgPath() != pkgpath { + t2 := v.namedOf(name, pkgpath) + t2.SetUnderlying(v.maketype(t.underlying(), t.ReflectType())) + t = t2 + } + return t +} + +// fromReflectArray converts a reflect.Type with Kind reflect.Array into a Type +func (v *Universe) fromReflectArray(rtype reflect.Type) Type { + count := rtype.Len() + elem := v.fromReflectType(rtype.Elem()) + if v.rebuild() { + rtype = reflect.ArrayOf(count, elem.ReflectType()) + } + return v.maketype(types.NewArray(elem.GoType(), int64(count)), rtype) +} + +// fromReflectChan converts a reflect.Type with Kind reflect.Chan into a Type +func (v *Universe) fromReflectChan(rtype reflect.Type) Type { + dir := rtype.ChanDir() + elem := v.fromReflectType(rtype.Elem()) + if v.rebuild() { + rtype = reflect.ChanOf(dir, elem.ReflectType()) + } + gdir := dirToGdir(dir) + return v.maketype(types.NewChan(gdir, elem.GoType()), rtype) +} + +// fromReflectFunc converts a reflect.Type with Kind reflect.Func into a function Type +func (v *Universe) fromReflectFunc(rtype reflect.Type) Type { + nin, nout := rtype.NumIn(), rtype.NumOut() + in := make([]Type, nin) + out := make([]Type, nout) + for i := 0; i < nin; i++ { + in[i] = v.fromReflectType(rtype.In(i)) + } + for i := 0; i < nout; i++ { + out[i] = v.fromReflectType(rtype.Out(i)) + } + gin := toGoTuple(in) + gout := toGoTuple(out) + variadic := rtype.IsVariadic() + + if v.rebuild() { + rin := toReflectTypes(in) + rout := toReflectTypes(out) + rtype = reflect.FuncOf(rin, rout, variadic) + } + return v.maketype( + types.NewSignature(nil, gin, gout, variadic), + rtype, + ) +} + +// fromReflectMethod converts a reflect.Type with Kind reflect.Func into a method Type, +// i.e. into a function with receiver +func (v *Universe) fromReflectMethod(rtype reflect.Type) Type { + nin, nout := rtype.NumIn(), rtype.NumOut() + if nin == 0 { + errorf(nil, "fromReflectMethod: function type has zero arguments, cannot use first one as receiver: <%v>", rtype) + } + in := make([]Type, nin) + out := make([]Type, nout) + for i := 0; i < nin; i++ { + in[i] = v.fromReflectType(rtype.In(i)) + } + for i := 0; i < nout; i++ { + out[i] = v.fromReflectType(rtype.Out(i)) + } + grecv := toGoParam(in[0]) + gin := toGoTuple(in[1:]) + gout := toGoTuple(out) + variadic := rtype.IsVariadic() + + if v.RebuildDepth >= 1 { + rin := toReflectTypes(in) + rout := toReflectTypes(out) + rtype = reflect.FuncOf(rin, rout, variadic) + } + return v.maketype( + types.NewSignature(grecv, gin, gout, variadic), + rtype, + ) +} + +// fromReflectMethod converts a reflect.Type with Kind reflect.Func into a method Type, +// manually adding the given type as receiver +func (v *Universe) fromReflectInterfaceMethod(rtype, rmethod reflect.Type) Type { + return v.fromReflectMethod(addreceiver(rtype, rmethod)) +} + +// fromReflectInterface converts a reflect.Type with Kind reflect.Interface into a Type +func (v *Universe) fromReflectInterface(rtype reflect.Type) Type { + if rtype == v.TypeOfInterface.ReflectType() { + return v.TypeOfInterface + } + n := rtype.NumMethod() + gmethods := make([]*types.Func, n) + for i := 0; i < n; i++ { + rmethod := rtype.Method(i) + method := v.fromReflectInterfaceMethod(rtype, rmethod.Type) + pkg := v.loadPackage(rmethod.PkgPath) + gmethods[i] = types.NewFunc(token.NoPos, (*types.Package)(pkg), rmethod.Name, method.GoType().(*types.Signature)) + } + // no way to extract embedded interfaces from reflect.Type + if v.rebuild() { + rfields := make([]reflect.StructField, 1+n) + rfields[0] = approxInterfaceHeader() + for i := 0; i < n; i++ { + rmethod := rtype.Method(i) + rmethodtype := rmethod.Type + if v.RebuildDepth >= 1 { + // needed? method := v.FromReflectType(rmethod.Type) above + // should already rebuild rmethod.Type.ReflectType() + rmethodtype = v.fromReflectInterfaceMethod(rtype, rmethod.Type).ReflectType() + } + rfields[i+1] = approxInterfaceMethod(rmethod.Name, rmethodtype) + } + // interfaces may have lots of methods, thus a lot of fields in the proxy struct. + // Then use a pointer to the proxy struct: InterfaceOf() does that, and we must behave identically + rtype = reflect.PtrTo(reflect.StructOf(rfields)) + } + return v.maketype(types.NewInterface(gmethods, nil).Complete(), rtype) +} + +// isReflectInterfaceStruct returns true if rtype is a reflect.Type with Kind reflect.Struct, +// that contains our own conventions to emulate an interface +func isReflectInterfaceStruct(rtype reflect.Type) bool { + if rtype.Kind() == reflect.Struct { + if n := rtype.NumField(); n != 0 { + rfield := rtype.Field(0) + return rfield.Name == StrGensymInterface && rfield.Type == reflectTypeOfInterfaceHeader + } + } + return false +} + +// fromReflectInterfacePtrStruct converts a reflect.Type with Kind reflect.Ptr, +// that contains our own conventions to emulate an interface, into a Type +func (v *Universe) fromReflectInterfacePtrStruct(rtype reflect.Type) Type { + if rtype.Kind() != reflect.Ptr || rtype.Elem().Kind() != reflect.Struct { + errorf(nil, "internal error: fromReflectInterfacePtrStruct expects pointer-to-struct reflect.Type, found: %v", rtype) + } + rebuild := v.rebuild() + rtype = rtype.Elem() + n := rtype.NumField() + // skip rtype.Field(0), it is just approxInterfaceSelf() + var gmethods []*types.Func + var gembeddeds []*types.Named + var rebuildfields []reflect.StructField + if rebuild { + rebuildfields = make([]reflect.StructField, n) + rebuildfields[0] = approxInterfaceHeader() + } + for i := 1; i < n; i++ { + rfield := rtype.Field(i) + name := rfield.Name + if strings.HasPrefix(name, StrGensymEmbedded) { + typename := name[len(StrGensymEmbedded):] + t := v.fromReflectType(rfield.Type) + if t.Kind() != reflect.Interface { + errorf(t, "FromReflectType: reflect.Type <%v> is an emulated interface containing the embedded interface <%v>.\n\tExtracting the latter returned a non-interface: %v", t) + } + t = v.named(t, typename, rfield.Type.PkgPath()) + gembeddeds = append(gembeddeds, t.GoType().(*types.Named)) + if rebuild { + rebuildfields[i] = approxInterfaceEmbedded(t) + } + } else { + if strings.HasPrefix(name, StrGensymPrivate) { + name = name[len(StrGensymPrivate):] + } + t := v.fromReflectFunc(rfield.Type) + if t.Kind() != reflect.Func { + errorf(t, "FromReflectType: reflect.Type <%v> is an emulated interface containing the method <%v>.\n\tExtracting the latter returned a non-function: %v", t) + } + gtype := t.GoType().Underlying() + pkg := v.loadPackage(rfield.PkgPath) + gmethods = append(gmethods, types.NewFunc(token.NoPos, (*types.Package)(pkg), name, gtype.(*types.Signature))) + if rebuild { + rebuildfields[i] = approxInterfaceMethod(name, t.ReflectType()) + } + } + } + if rebuild { + rtype = reflect.PtrTo(reflect.StructOf(rebuildfields)) + } + return v.maketype(types.NewInterface(gmethods, gembeddeds).Complete(), rtype) +} + +// fromReflectMap converts a reflect.Type with Kind reflect.map into a Type +func (v *Universe) fromReflectMap(rtype reflect.Type) Type { + key := v.fromReflectType(rtype.Key()) + elem := v.fromReflectType(rtype.Elem()) + if v.rebuild() { + rtype = reflect.MapOf(key.ReflectType(), elem.ReflectType()) + } + return v.maketype(types.NewMap(key.GoType(), elem.GoType()), rtype) +} + +// fromReflectPtr converts a reflect.Type with Kind reflect.Ptr into a Type +func (v *Universe) fromReflectPtr(rtype reflect.Type) Type { + relem := rtype.Elem() + var gtype types.Type + rebuild := v.rebuild() + if isReflectInterfaceStruct(relem) { + if rebuild { + v.RebuildDepth-- + defer func() { + v.RebuildDepth++ + }() + } + t := v.fromReflectInterfacePtrStruct(rtype) + if rebuild { + relem = t.ReflectType().Elem() + } + gtype = t.GoType() + } else { + elem := v.fromReflectType(relem) + gtype = types.NewPointer(elem.GoType()) + } + if rebuild { + rtype = reflect.PtrTo(relem) + } + return v.maketype(gtype, rtype) +} + +// fromReflectPtr converts a reflect.Type with Kind reflect.Slice into a Type +func (v *Universe) fromReflectSlice(rtype reflect.Type) Type { + elem := v.fromReflectType(rtype.Elem()) + if v.rebuild() { + rtype = reflect.SliceOf(elem.ReflectType()) + } + return v.maketype(types.NewSlice(elem.GoType()), rtype) +} + +// fromReflectStruct converts a reflect.Type with Kind reflect.Struct into a Type +func (v *Universe) fromReflectStruct(rtype reflect.Type) Type { + n := rtype.NumField() + fields := make([]StructField, n) + for i := 0; i < n; i++ { + rfield := rtype.Field(i) + fields[i] = v.fromReflectField(&rfield) + } + vars := toGoFields(fields) + tags := toTags(fields) + + // use reflect.StructOf to recreate reflect.Type only if requested, because it's not 100% accurate: + // reflect.StructOf does not support unexported or anonymous fields, + // and go/reflect cannot create named types, interfaces and self-referencing types + if v.rebuild() { + rfields := toReflectFields(fields, true) + rtype = reflect.StructOf(rfields) + } + return v.maketype(types.NewStruct(vars, tags), rtype) +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/function.go b/vendor/github.com/cosmos72/gomacro/xreflect/function.go new file mode 100644 index 0000000..512bf6c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/function.go @@ -0,0 +1,149 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * type.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/types" + "reflect" +) + +// IsMethod reports whether a function type's contains a receiver, i.e. is a method. +// If IsMethod returns true, the actual receiver type is available as the first parameter, i.e. Type.In(0) +// It panics if the type's Kind is not Func. +func (t *xtype) IsMethod() bool { + if t.Kind() != reflect.Func { + xerrorf(t, "IsMethod of non-func type %v", t) + } + gtype := t.underlying().(*types.Signature) + return gtype.Recv() != nil +} + +// IsVariadic reports whether a function type's final input parameter is a "..." parameter. +// If so, t.In(t.NumIn() - 1) returns the parameter's implicit actual type []T. +// IsVariadic panics if the type's Kind is not Func. +func (t *xtype) IsVariadic() bool { + if t.Kind() != reflect.Func { + xerrorf(t, "In of non-func type %v", t) + } + return t.rtype.IsVariadic() +} + +// In returns the type of a function type's i'th input parameter. +// It panics if the type's Kind is not Func. +// It panics if i is not in the range [0, NumIn()). +func (t *xtype) In(i int) Type { + if t.Kind() != reflect.Func { + xerrorf(t, "In of non-func type %v", t) + } + gtype := t.underlying().(*types.Signature) + var va *types.Var + if recv := gtype.Recv(); recv != nil { + // include the receiver as first parameter + if i == 0 { + va = recv + } else { + va = gtype.Params().At(i - 1) + } + } else { + va = gtype.Params().At(i) + } + return t.universe.MakeType(va.Type(), t.rtype.In(i)) +} + +// NumIn returns a function type's input parameter count. +// It panics if the type's Kind is not Func. +func (t *xtype) NumIn() int { + if t.Kind() != reflect.Func { + xerrorf(t, "NumIn of non-func type %v", t) + } + var nparams, nrecv int + gtype := t.underlying().(*types.Signature) + if gtype.Recv() != nil { + nrecv = 1 + } + if params := gtype.Params(); params != nil { + nparams = params.Len() + } + return nparams + nrecv +} + +// NumOut returns a function type's output parameter count. +// It panics if the type's Kind is not Func. +func (t *xtype) NumOut() int { + if t.Kind() != reflect.Func { + xerrorf(t, "NumOut of non-func type %v", t) + } + gtype := t.underlying().(*types.Signature) + return gtype.Results().Len() +} + +// Out returns the type of a function type's i'th output parameter. +// It panics if the type's Kind is not Func. +// It panics if i is not in the range [0, NumOut()). +func (t *xtype) Out(i int) Type { + if t.Kind() != reflect.Func { + xerrorf(t, "Out of non-func type %v", t) + } + gtype := t.underlying().(*types.Signature) + va := gtype.Results().At(i) + return t.universe.MakeType(va.Type(), t.rtype.Out(i)) +} + +func FuncOf(in []Type, out []Type, variadic bool) Type { + return MethodOf(nil, in, out, variadic) +} + +func (v *Universe) FuncOf(in []Type, out []Type, variadic bool) Type { + return v.MethodOf(nil, in, out, variadic) +} + +func MethodOf(recv Type, in []Type, out []Type, variadic bool) Type { + v := universe + if recv != nil { + v = recv.Universe() + } else if len(in) != 0 && in[0] != nil { + v = in[0].Universe() + } else if len(out) != 0 && out[0] != nil { + v = out[0].Universe() + } + return v.MethodOf(recv, in, out, variadic) +} + +func (v *Universe) MethodOf(recv Type, in []Type, out []Type, variadic bool) Type { + gin := toGoTuple(in) + gout := toGoTuple(out) + rin := toReflectTypes(in) + rout := toReflectTypes(out) + var grecv *types.Var + if recv != nil { + rin = append([]reflect.Type{recv.ReflectType()}, rin...) + grecv = toGoParam(recv) + } + return v.MakeType( + types.NewSignature(grecv, gin, gout, variadic), + reflect.FuncOf(rin, rout, variadic), + ) +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/gensym.go b/vendor/github.com/cosmos72/gomacro/xreflect/gensym.go new file mode 100644 index 0000000..3472b33 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/gensym.go @@ -0,0 +1,57 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * gensym.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "fmt" +) + +// the following constants must match with github.com/cosmos72/gomacro/base/constants.go +const ( + StrGensymInterface = "\u0080" // name of extra struct field needed by the interpreter when creating interpreted interfaces + StrGensymPrivate = "\u00AD" // prefix to generate names for unexported struct fields. + StrGensymEmbedded = "\u00BB" // prefix to generate names for embedded struct fields. +) + +var gensymn = 0 + +func GensymEmbedded(name string) string { + if len(name) == 0 { + n := gensymn + gensymn++ + name = fmt.Sprintf("%d", n) + } + return StrGensymEmbedded + name +} + +func GensymPrivate(name string) string { + if len(name) == 0 { + n := gensymn + gensymn++ + name = fmt.Sprintf("%d", n) + } + return StrGensymPrivate + name +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/global.go b/vendor/github.com/cosmos72/gomacro/xreflect/global.go new file mode 100644 index 0000000..71e4eb0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/global.go @@ -0,0 +1,121 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * global.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/ast" + "go/types" + "reflect" +) + +type Package types.Package + +// InterfaceHeader is the internal header of interpreted interfaces +type InterfaceHeader struct { + // val and typ must be private! otherwise interpreted code may mess with them and break type safety + val reflect.Value + typ Type +} + +type Method struct { + Name string + Pkg *Package + Type Type // method type + Funs *[]reflect.Value // (*Funs)[Index] is the method, with receiver as first argument + Index int // index for Type.Method + FieldIndex []int // embedded fields index sequence for reflect.Type.FieldByIndex or reflect.Value.FieldByIndex + GoFun *types.Func // for completeness +} + +type StructField struct { + // Name is the field name. + Name string + // Pkg is the package that qualifies a lower case (unexported) + // field name. It may be nil for upper case (exported) field names. + // See https://golang.org/ref/spec#Uniqueness_of_identifiers + Pkg *Package + Type Type // field type + Tag reflect.StructTag // field tag string + Offset uintptr // offset within struct, in bytes + Index []int // index sequence for reflect.Type.FieldByIndex or reflect.Value.FieldByIndex + Anonymous bool // is an embedded field. Note: embedded field's name should be set to the type's name +} + +type xtype struct { + kind reflect.Kind + gtype types.Type + rtype reflect.Type + universe *Universe + methodvalues []reflect.Value + fieldcache map[QName]StructField + methodcache map[QName]Method +} + +// QName is a replacement for go/types.Id and implements accurate comparison +// of type names, field names and method names. +// It recognizes unexported names, and names declared in different packages. +// +// To compare two names, build two QNames with the functions QName* +// then compare the two QName structs with == +type QName struct { + name, pkgpath string +} + +func (q QName) Name() string { + return q.name +} + +func (q QName) PkgPath() string { + return q.pkgpath +} + +type QNameI interface { + Name() string + PkgPath() string +} + +func QName2(name, pkgpath string) QName { + if ast.IsExported(name) { + pkgpath = "" + } + return QName{name, pkgpath} +} + +func QName1(q QNameI) QName { + return QName2(q.Name(), q.PkgPath()) +} + +func QNameGo2(name string, pkg *types.Package) QName { + var pkgpath string + if pkg != nil && !ast.IsExported(name) { + pkgpath = pkg.Path() + } + return QName{name, pkgpath} +} + +func QNameGo(obj types.Object) QName { + return QNameGo2(obj.Name(), obj.Pkg()) +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/importer.go b/vendor/github.com/cosmos72/gomacro/xreflect/importer.go new file mode 100644 index 0000000..2682a4f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/importer.go @@ -0,0 +1,65 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * importer.go + * + * Created on May 14, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "errors" + "fmt" + "go/importer" + "go/types" +) + +type Importer struct { + from types.ImporterFrom + compat types.Importer + srcDir string + mode types.ImportMode +} + +func DefaultImporter() *Importer { + imp := Importer{} + compat := importer.Default() + if from, ok := compat.(types.ImporterFrom); ok { + imp.from = from + } else { + imp.compat = compat + } + return &imp +} + +func (imp *Importer) Import(path string) (*types.Package, error) { + return imp.ImportFrom(path, imp.srcDir, imp.mode) +} + +func (imp *Importer) ImportFrom(path string, srcDir string, mode types.ImportMode) (*types.Package, error) { + if imp.from != nil { + return imp.from.ImportFrom(path, srcDir, mode) + } else if imp.compat != nil { + return imp.compat.Import(path) + } else { + return nil, errors.New(fmt.Sprintf("importer.Default() returned nil, cannot import %q", path)) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/init.go b/vendor/github.com/cosmos72/gomacro/xreflect/init.go new file mode 100644 index 0000000..46a5e4f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/init.go @@ -0,0 +1,145 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * init.go + * + * Created on May 19, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "reflect" + "unsafe" + + "go/types" +) + +var rbasictypes = []reflect.Type{ + reflect.Bool: reflect.TypeOf(bool(false)), + reflect.Int: reflect.TypeOf(int(0)), + reflect.Int8: reflect.TypeOf(int8(0)), + reflect.Int16: reflect.TypeOf(int16(0)), + reflect.Int32: reflect.TypeOf(int32(0)), + reflect.Int64: reflect.TypeOf(int64(0)), + reflect.Uint: reflect.TypeOf(uint(0)), + reflect.Uint8: reflect.TypeOf(uint8(0)), + reflect.Uint16: reflect.TypeOf(uint16(0)), + reflect.Uint32: reflect.TypeOf(uint32(0)), + reflect.Uint64: reflect.TypeOf(uint64(0)), + reflect.Uintptr: reflect.TypeOf(uintptr(0)), + reflect.Float32: reflect.TypeOf(float32(0)), + reflect.Float64: reflect.TypeOf(float64(0)), + reflect.Complex64: reflect.TypeOf(complex64(0)), + reflect.Complex128: reflect.TypeOf(complex128(0)), + reflect.String: reflect.TypeOf(string("")), + reflect.UnsafePointer: reflect.TypeOf(unsafe.Pointer(nil)), +} + +func (v *Universe) makebasictypes() []Type { + m := make([]Type, len(rbasictypes)) + for gkind := types.Bool; gkind <= types.UnsafePointer; gkind++ { + kind := ToReflectKind(gkind) + gtype := types.Typ[gkind] + rtype := rbasictypes[kind] + if gtype == nil || rtype == nil { + continue + } + t := wrap(&xtype{kind: kind, gtype: gtype, rtype: rtype, universe: v}) + v.add(t) + m[kind] = t + } + return m +} + +func (v *Universe) makeerror() Type { + t := wrap(&xtype{ + kind: reflect.Interface, + gtype: types.Universe.Lookup("error").Type(), + rtype: reflect.TypeOf((*error)(nil)).Elem(), + universe: v, + }) + v.add(t) + return t +} + +func (v *Universe) makeinterface() Type { + t := wrap(&xtype{ + kind: reflect.Interface, + gtype: types.NewInterface(nil, nil).Complete(), + rtype: reflect.TypeOf((*interface{})(nil)).Elem(), + universe: v, + }) + v.add(t) + return t +} + +func (v *Universe) Init() *Universe { + if v.ThreadSafe { + defer un(lock(v)) + } + return v.init() +} + +func (v *Universe) init() *Universe { + v.BasicTypes = v.makebasictypes() + v.TypeOfError = v.makeerror() + v.TypeOfInterface = v.makeinterface() + // critical! trying to rebuild "error" type creates a non-indentical copy... lots of conversions would fail + v.cache(v.TypeOfError.ReflectType(), v.TypeOfError) + v.cache(v.TypeOfInterface.ReflectType(), v.TypeOfInterface) + return v +} + +func NewUniverse() *Universe { + v := &Universe{} + return v.init() +} + +const MaxDepth = int(^uint(0) >> 1) + +var ( + universe = (&Universe{ThreadSafe: true}).Init() + + reflectTypeOfInterfaceHeader = reflect.TypeOf(InterfaceHeader{}) +) + +func DefaultUniverse() *Universe { + return universe +} + +// Bits returns the size of the type in bits. +// It panics if the type's Kind is not one of the +// sized or unsized Int, Uint, Float, or Complex kinds. +func (t *xtype) Bits() int { + return t.rtype.Bits() +} + +// Align returns the alignment in bytes of a value of +// this type when allocated in memory. +func (t *xtype) Align() int { + return t.rtype.Align() +} + +// FieldAlign returns the alignment in bytes of a value of +// this type when used as a field in a struct. +func (t *xtype) FieldAlign() int { + return t.rtype.FieldAlign() +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/interface.go b/vendor/github.com/cosmos72/gomacro/xreflect/interface.go new file mode 100644 index 0000000..e4d5eaf --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/interface.go @@ -0,0 +1,129 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * struct.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/token" + "go/types" + "reflect" +) + +func toGoFuncs(names []string, methods []Type) []*types.Func { + gfuns := make([]*types.Func, len(methods)) + for i, t := range methods { + switch gsig := t.underlying().(type) { + case *types.Signature: + gfuns[i] = types.NewFunc(token.NoPos, nil, names[i], gsig) + default: + errorf(t, "InterfaceOf: %d-th 'method' argument is not a function type: %v", i, t) + } + } + return gfuns +} + +func toGoNamedTypes(ts []Type) []*types.Named { + gnameds := make([]*types.Named, len(ts)) + for i, t := range ts { + if gt, ok := t.GoType().(*types.Named); ok { + gnameds[i] = gt + } else { + errorf(t, "InterfaceOf: %d-th 'embedded' argument is not a named type: %v", i, t) + } + } + return gnameds +} + +func (v *Universe) InterfaceOf(methodnames []string, methods []Type, embeddeds []Type) Type { + gmethods := toGoFuncs(methodnames, methods) + gembeddeds := toGoNamedTypes(embeddeds) + + // for reflect.Type, approximate an interface as a struct: + // one field for the wrapped object: type is interface{}, + // one field for each embedded interface: type is the embedded interface type + // one field for each method: type is the method type i.e. a function + nemb := len(embeddeds) + rfields := make([]reflect.StructField, 1+nemb+len(methods)) + rfields[0] = approxInterfaceHeader() + for i, emb := range embeddeds { + rfields[i+1] = approxInterfaceEmbedded(emb) + } + for i, method := range methods { + rfields[i+nemb+1] = approxInterfaceMethod(methodnames[i], method.ReflectType()) + } + return v.maketype3( + reflect.Interface, + types.NewInterface(gmethods, gembeddeds), + // interfaces may have lots of methods, thus a lot of fields in the proxy struct. + // Use a pointer to the proxy struct + reflect.PtrTo(reflect.StructOf(rfields)), + ) +} + +// InterfaceOf returns a new interface for the given methods and embedded types. +// After the methods and embeddeds are fully defined, call Complete() to mark +// the interface as complete and compute wrapper methods for embedded fields. +// +// WARNING: the Type returned by InterfaceOf is not complete, +// i.e. its method set is not computed yet. +// Once you know that methods and embedded interfaces are complete, +// call Complete() to compute the method set and mark this Type as complete. +func InterfaceOf(methodnames []string, methods []Type, embeddeds []Type) Type { + v := universe + if len(embeddeds) != 0 && embeddeds[0] != nil { + v = embeddeds[0].Universe() + } else if len(methods) != 0 && methods[0] != nil { + v = methods[0].Universe() + } + return v.InterfaceOf(methodnames, methods, embeddeds) +} + +// utilities for InterfaceOf() + +func approxInterfaceHeader() reflect.StructField { + return reflect.StructField{ + Name: StrGensymInterface, + Type: reflectTypeOfInterfaceHeader, + } +} + +func approxInterfaceEmbedded(t Type) reflect.StructField { + // embedded interfaces are always anonymous + return reflect.StructField{ + Name: toExportedFieldName("", t, true), + Type: t.ReflectType(), + } +} + +func approxInterfaceMethod(name string, rtype reflect.Type) reflect.StructField { + // interface methods cannot be anonymous + if len(name) == 0 { + name = "_" + } + return reflect.StructField{ + Name: toExportedFieldName(name, nil, false), + Type: rtype, + } +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/lookup.go b/vendor/github.com/cosmos72/gomacro/xreflect/lookup.go new file mode 100644 index 0000000..e6721f0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/lookup.go @@ -0,0 +1,304 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * lookup.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/types" + "reflect" +) + +// FieldByName returns the (possibly embedded) struct field with given name, +// and the number of fields found at the same (shallowest) depth: 0 if not found. +// Private fields are returned only if they were declared in pkgpath. +func (t *xtype) FieldByName(name, pkgpath string) (field StructField, count int) { + if name == "_" || t.kind != reflect.Struct { + return + } + // debugf("field cache for %v <%v> = %v", unsafe.Pointer(t), t, t.fieldcache) + qname := QName2(name, pkgpath) + + v := t.universe + if v.ThreadSafe { + defer un(lock(v)) + } + field, found := t.fieldcache[qname] + if found { + if field.Index == nil { // marker for ambiguous field names + count = int(field.Offset) // reuse Offset as "number of ambiguous fields" + } else { + count = 1 + } + return field, count + } + var tovisit []StructField + + field, count, tovisit = fieldByName(t, qname, 0, nil) + + // breadth-first recursion + for count == 0 && len(tovisit) != 0 { + var next []StructField + for _, f := range tovisit { + efield, ecount, etovisit := fieldByName(unwrap(f.Type), qname, f.Offset, f.Index) + if count == 0 { + if ecount > 0 { + field = efield + } else { + // no recursion if we found something + next = append(next, etovisit...) + } + } + count += ecount + } + tovisit = next + } + if count > 0 { + cacheFieldByName(t, qname, &field, count) + } + return field, count +} + +func fieldByName(t *xtype, qname QName, offset uintptr, index []int) (field StructField, count int, tovisit []StructField) { + // also support embedded fields: they can be named types or pointers to named types + if t.kind == reflect.Ptr { + t = unwrap(t.elem()) + } + gtype, ok := t.gtype.Underlying().(*types.Struct) + if !ok { + debugf("fieldByName: type is %s, not struct. bailing out", t.kind) + return + } + n := t.NumField() + for i := 0; i < n; i++ { + + gfield := gtype.Field(i) + if matchFieldByName(qname, gfield) { + if count == 0 { + field = t.field(i) // lock already held + field.Offset += offset + field.Index = concat(index, field.Index) // make a copy of index + // debugf("fieldByName: %d-th field of <%v> matches: %#v", i, t.rtype, field) + } + count++ + } else if count == 0 && gfield.Anonymous() { + efield := t.field(i) // lock already held + efield.Offset += offset + efield.Index = concat(index, efield.Index) // make a copy of index + // debugf("fieldByName: %d-th field of <%v> is anonymous: %#v", i, t.rtype, efield) + tovisit = append(tovisit, efield) + } + } + return +} + +// return true if gfield name matches given name, or if it's anonymous and its *type* name matches given name +func matchFieldByName(qname QName, gfield *types.Var) bool { + // always check the field's package, not the type's package + if qname == QNameGo(gfield) { + return true + } + if gfield.Anonymous() { + gtype := gfield.Type() + if gptr, ok := gtype.(*types.Pointer); ok { + // unnamed field has unnamed pointer type, as for example *Foo + // check the element type + gtype = gptr.Elem() + } + switch gtype := gtype.(type) { + case *types.Basic: + // is it possible to embed basic types? + // yes, and they work as unexported embedded fields, + // i.e. in the same package as the struct that includes them + return qname == QNameGo2(gtype.Name(), gfield.Pkg()) + case *types.Named: + // gtype.Obj().Pkg() and gfield.Pkg() should be identical for *unexported* fields + // (they are ignored for exported fields) + return qname == QNameGo2(gtype.Obj().Name(), gfield.Pkg()) + } + } + return false +} + +// add field to type's fieldcache. used by Type.FieldByName after a successful lookup +func cacheFieldByName(t *xtype, qname QName, field *StructField, count int) { + if t.fieldcache == nil { + t.fieldcache = make(map[QName]StructField) + } + if count > 1 { + field.Index = nil // marker for ambiguous field names + field.Offset = uintptr(count) // reuse Offset as "number of ambiguous fields" + } + t.fieldcache[qname] = *field + t.universe.fieldcache = true +} + +// anonymousFields returns the anonymous fields of a (named or unnamed) struct type +func anonymousFields(t *xtype, offset uintptr, index []int) []StructField { + var tovisit []StructField + gt := t.gtype.Underlying() + if gptr, ok := gt.(*types.Pointer); ok { + gt = gptr.Elem().Underlying() + } + gtype, ok := gt.(*types.Struct) + if !ok { + return tovisit + } + n := gtype.NumFields() + for i := 0; i < n; i++ { + gfield := gtype.Field(i) + if gfield.Anonymous() { + field := t.Field(i) + field.Offset += offset + field.Index = concat(index, field.Index) // make a copy of index + tovisit = append(tovisit, field) + } + } + return tovisit +} + +// MethodByName returns the method with given name (including wrapper methods for embedded fields) +// and the number of methods found at the same (shallowest) depth: 0 if not found. +// Private methods are returned only if they were declared in pkgpath. +func (t *xtype) MethodByName(name, pkgpath string) (method Method, count int) { + // debugf("method cache for %v <%v> = %v", unsafe.Pointer(t), t, t.methodcache) + + // only named types and interfaces can have methods + if name == "_" || (!t.Named() && t.kind != reflect.Interface) { + return + } + qname := QName2(name, pkgpath) + v := t.universe + if v.ThreadSafe { + defer un(lock(v)) + } + method, found := t.methodcache[qname] + if found { + index := method.Index + if index < 0 { // marker for ambiguous method names + count = -index + } else { + count = 1 + } + return method, count + } + method, count = methodByName(t, qname, nil) + if count == 0 { + tovisit := anonymousFields(t, 0, nil) + // breadth-first recursion + for count == 0 && len(tovisit) != 0 { + var next []StructField + for _, f := range tovisit { + et := unwrap(f.Type) + emethod, ecount := methodByName(et, qname, f.Index) + if count == 0 { + if ecount > 0 { + method = emethod + } else { + // no recursion if we found something + next = append(next, anonymousFields(et, f.Offset, f.Index)...) + } + } + count += ecount + } + tovisit = next + } + } + if count > 0 { + cacheMethodByName(t, qname, &method, count) + } + return method, count +} + +func methodByName(t *xtype, qname QName, index []int) (method Method, count int) { + // also support embedded fields: they can be named types or pointers to named types + if t.kind == reflect.Ptr { + t = unwrap(t.elem()) + } + n := t.NumMethod() + for i := 0; i < n; i++ { + gmethod := t.gmethod(i) + if matchMethodByName(qname, gmethod) { + if count == 0 { + method = t.method(i) // lock already held + method.FieldIndex = concat(index, method.FieldIndex) // make a copy of index + // debugf("methodByName: %d-th method of <%v> matches: %#v", i, t.rtype, method) + } + count++ + } + } + return +} + +// return true if gmethod name matches given name +func matchMethodByName(qname QName, gmethod *types.Func) bool { + // always check the methods's package, not the type's package + return qname == QNameGo(gmethod) +} + +// add method to type's methodcache. used by Type.MethodByName after a successful lookup +func cacheMethodByName(t *xtype, qname QName, method *Method, count int) { + if t.methodcache == nil { + t.methodcache = make(map[QName]Method) + } + if count > 1 { + method.Index = -count // marker for ambiguous method names + } + t.methodcache[qname] = *method + t.universe.methodcache = true +} + +func invalidateCache(gtype types.Type, t interface{}) { + if t, ok := t.(Type); ok { + t := unwrap(t) + t.fieldcache = nil + t.methodcache = nil + } +} + +func invalidateMethodCache(gtype types.Type, t interface{}) { + if t, ok := t.(Type); ok { + t := unwrap(t) + t.methodcache = nil + } +} + +// clears all xtype.fieldcache and xtype.methodcache. +// invoked by NamedOf() when a type is redefined. +func (v *Universe) InvalidateCache() { + if v.fieldcache || v.methodcache { + v.gmap.Iterate(invalidateCache) + v.fieldcache = false + v.methodcache = false + } +} + +// clears all xtype.methodcache. +// invoked by AddMethod() when a method is redefined. +func (v *Universe) InvalidateMethodCache() { + if v.methodcache { + v.gmap.Iterate(invalidateMethodCache) + v.methodcache = false + } +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/named.go b/vendor/github.com/cosmos72/gomacro/xreflect/named.go new file mode 100644 index 0000000..631e602 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/named.go @@ -0,0 +1,365 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * named.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/ast" + "go/token" + "go/types" + "reflect" + "sort" + "unsafe" +) + +// NumMethod returns the number of explicitly declared methods of named type or interface t. +// Wrapper methods for embedded fields or embedded interfaces are not counted. +func (t *xtype) NumMethod() int { + num := 0 + if gtype, ok := t.gtype.Underlying().(*types.Interface); ok { + num = gtype.NumExplicitMethods() + } else if gtype, ok := t.gtype.(*types.Named); ok { + num = gtype.NumMethods() + } + return num +} + +// Method return the i-th explicitly declared method of named type or interface t. +// Wrapper methods for embedded fields are not counted +func (t *xtype) Method(i int) Method { + v := t.universe + if v.ThreadSafe { + defer un(lock(v)) + } + return t.method(i) +} + +func (t *xtype) method(i int) Method { + gfunc := t.gmethod(i) + name := gfunc.Name() + resizemethodvalues(t) + + rtype := t.rtype + var rfunctype reflect.Type + rfuncs := &t.methodvalues + rfunc := t.methodvalues[i] + if rfunc.Kind() == reflect.Func { + // easy, method is cached already + rfunctype = rfunc.Type() + } else if gtype, ok := t.gtype.Underlying().(*types.Interface); ok { + if rtype.Kind() == reflect.Ptr && isReflectInterfaceStruct(rtype.Elem()) { + // rtype is our emulated interface type. + // it's a pointer to a struct containing: InterfaceHeader, embeddeds, methods (without receiver) + skip := gtype.NumEmbeddeds() + 1 + rfield := rtype.Elem().Field(i + skip) + rfunctype = addreceiver(rtype, rfield.Type) + } else if rtype.Kind() != reflect.Interface { + xerrorf(t, "inconsistent interface type <%v>: expecting interface reflect.Type, found <%v>", t, rtype) + } else if ast.IsExported(name) { + // rtype is an interface type, and reflect only returns exported methods + // rtype.MethodByName returns a Method with the following caveats + // 1) Type == method signature, without a receiver + // 2) Func == nil. + rmethod, _ := rtype.MethodByName(name) + if rmethod.Type == nil { + xerrorf(t, "interface type <%v>: reflect method %q not found", t, name) + } else if rmethod.Index != i { + xerrorf(t, "inconsistent interface type <%v>: method %q has go/types.Func index=%d but reflect.Method index=%d", + t, name, i, rmethod.Index) + } + rfunctype = addreceiver(rtype, rmethod.Type) + } + } else { + rmethod, _ := rtype.MethodByName(gfunc.Name()) + rfunc = rmethod.Func + if rfunc.Kind() != reflect.Func { + if rtype.Kind() != reflect.Ptr { + // also search in the method set of pointer-to-t + rmethod, _ = reflect.PtrTo(rtype).MethodByName(gfunc.Name()) + rfunc = rmethod.Func + } + } + if rfunc.Kind() != reflect.Func { + if ast.IsExported(name) { + xerrorf(t, "type <%v>: reflect method %q not found", t, gfunc.Name()) + } + } else { + t.methodvalues[i] = rfunc + rfunctype = rmethod.Type + } + } + return t.makemethod(i, gfunc, rfuncs, rfunctype) // lock already held +} + +func addreceiver(recv reflect.Type, rtype reflect.Type) reflect.Type { + nin := rtype.NumIn() + rin := make([]reflect.Type, nin+1) + rin[0] = recv + for i := 0; i < nin; i++ { + rin[i+1] = rtype.In(i) + } + nout := rtype.NumOut() + rout := make([]reflect.Type, nout) + for i := 0; i < nout; i++ { + rout[i] = rtype.Out(i) + } + return reflect.FuncOf(rin, rout, rtype.IsVariadic()) +} + +func (t *xtype) gmethod(i int) *types.Func { + var gfun *types.Func + if gtype, ok := t.gtype.Underlying().(*types.Interface); ok { + gfun = gtype.ExplicitMethod(i) + } else if gtype, ok := t.gtype.(*types.Named); ok { + gfun = gtype.Method(i) + } else { + xerrorf(t, "Method on invalid type %v", t) + } + return gfun +} + +func (t *xtype) makemethod(index int, gfun *types.Func, rfuns *[]reflect.Value, rfunctype reflect.Type) Method { + // sanity checks + name := gfun.Name() + gsig := gfun.Type().Underlying().(*types.Signature) + if rfunctype != nil { + nparams := 0 + if gsig.Params() != nil { + nparams = gsig.Params().Len() + } + if gsig.Recv() != nil { + if nparams+1 != rfunctype.NumIn() { + xerrorf(t, `type <%v>: inconsistent %d-th method signature: + go/types.Type has receiver <%v> and %d parameters: %v + reflect.Type has %d parameters: %v`, t, index, gsig.Recv(), nparams, gsig, rfunctype.NumIn(), rfunctype) + } + } else if nparams != rfunctype.NumIn() { + xerrorf(t, `type <%v>: inconsistent %d-th method signature: + go/types.Type has no receiver and %d parameters: %v + reflect.Type has %d parameters: %v`, t, index, nparams, gsig, rfunctype.NumIn(), rfunctype) + } + } + var tmethod Type + if rfunctype != nil { + tmethod = t.universe.maketype(gsig, rfunctype) // lock already held + } + return Method{ + Name: name, + Pkg: (*Package)(gfun.Pkg()), + Type: tmethod, + Funs: rfuns, + Index: index, + GoFun: gfun, + } +} + +func resizemethodvalues(t *xtype) { + n := t.NumMethod() + if cap(t.methodvalues) < n { + slice := make([]reflect.Value, n, n+n/2+4) + copy(slice, t.methodvalues) + t.methodvalues = slice + } else if len(t.methodvalues) < n { + t.methodvalues = t.methodvalues[0:n] + } +} + +func (v *Universe) NamedOf(name, pkgpath string) Type { + if v.ThreadSafe { + defer un(lock(v)) + } + return v.namedOf(name, pkgpath) +} + +func (v *Universe) namedOf(name, pkgpath string) Type { + underlying := v.TypeOfInterface + pkg := v.loadPackage(pkgpath) + // typename := types.NewTypeName(token.NoPos, (*types.Package)(pkg), name, underlying.GoType()) + typename := types.NewTypeName(token.NoPos, (*types.Package)(pkg), name, nil) + return v.maketype3( + reflect.Invalid, // incomplete type! will be fixed by SetUnderlying + types.NewNamed(typename, underlying.GoType(), nil), + underlying.ReflectType(), + ) +} + +// SetUnderlying sets the underlying type of a named type and marks t as complete. +// It panics if the type is unnamed, or if the underlying type is named, +// or if SetUnderlying() was already invoked on the named type. +func (t *xtype) SetUnderlying(underlying Type) { + switch gtype := t.gtype.(type) { + case *types.Named: + v := t.universe + if t.kind != reflect.Invalid || gtype.Underlying() != v.TypeOfInterface.GoType() || t.rtype != v.TypeOfInterface.ReflectType() { + // redefined type. try really hard to support it. + v.InvalidateCache() + // xerrorf(t, "SetUnderlying invoked multiple times on named type %v", t) + } + gunderlying := underlying.GoType().Underlying() // in case underlying is named + t.kind = gtypeToKind(t, gunderlying) + gtype.SetUnderlying(gunderlying) + t.rtype = underlying.ReflectType() + default: + xerrorf(t, "SetUnderlying of unnamed type %v", t) + } +} + +// AddMethod adds method 'name' to type. +// It panics if the type is unnamed, or if the signature is not a function type, +// Returns the method index, or < 0 in case of errors +func (t *xtype) AddMethod(name string, signature Type) int { + gtype, ok := t.gtype.(*types.Named) + if !ok { + xerrorf(t, "AddMethod on unnamed type %v", t) + } + kind := gtypeToKind(t, gtype.Underlying()) + if kind == reflect.Ptr || kind == reflect.Interface { + xerrorf(t, "AddMethod: cannot add methods to named %s type: <%v>", kind, t) + } + if signature.Kind() != reflect.Func { + xerrorf(t, "AddMethod on <%v> of non-function: %v", t, signature) + } + gsig := signature.underlying().(*types.Signature) + // accept both signatures "non-nil receiver" and "nil receiver, use the first parameter as receiver" + grecv := gsig.Recv() + if grecv == nil && gsig.Params().Len() != 0 { + grecv = gsig.Params().At(0) + } + if grecv == nil { + xerrorf(t, "AddMethod on <%v> of function with no receiver and no parameters: %v", t, gsig) + } + if !types.IdenticalIgnoreTags(grecv.Type(), gtype) && + // !types.IdenticalIgnoreTags(grecv.Type(), gtype.Underlying()) && + !types.IdenticalIgnoreTags(grecv.Type(), types.NewPointer(gtype)) { + + label := "receiver" + if gsig.Recv() == nil { + label = "first parameter" + } + xerrorf(t, "AddMethod on <%v> of function <%v> with mismatched %s type: %v", t, gsig, label, grecv.Type()) + } + + gpkg := gtype.Obj().Pkg() + gfun := types.NewFunc(token.NoPos, gpkg, name, gsig) + + n1 := gtype.NumMethods() + index := unsafeAddMethod(gtype, gfun) + n2 := gtype.NumMethods() + + // update the caches... be careful if the method was just redefined + nilv := reflect.Value{} + for len(t.methodvalues) < n2 { + t.methodvalues = append(t.methodvalues, nilv) + } + t.methodvalues[index] = nilv + if n1 == n2 { + // an existing method was overwritten. + // it may be cached in some other type's method cache. + t.universe.InvalidateMethodCache() + } + return index +} + +// RemoveMethods removes given methods from type. +// It panics if the type is unnamed, or if the signature is not a function type, +func (t *xtype) RemoveMethods(names []string, pkgpath string) { + gtype, ok := t.gtype.(*types.Named) + if !ok { + xerrorf(t, "RemoveMethods on unnamed type %v", t) + } + if len(names) == 0 { + return + } + n1 := gtype.NumMethods() + unsafeRemoveMethods(gtype, names, pkgpath) + n2 := gtype.NumMethods() + if n1 != n2 { + // some existing methods were removed. + // they may be cached in some other type's method cache. + t.universe.InvalidateMethodCache() + } +} + +// internal representation of go/types.Named +type unsafeNamed struct { + obj *types.TypeName + underlying types.Type + methods []*types.Func +} + +// patched version of go/types.Named.AddMethod() that *overwrites* matching methods +// (the original does not) +func unsafeAddMethod(gtype *types.Named, gfun *types.Func) int { + if gfun.Name() == "_" { + return -1 + } + gt := (*unsafeNamed)(unsafe.Pointer(gtype)) + qname := QNameGo(gfun) + for i, m := range gt.methods { + if qname == QNameGo(m) { + gt.methods[i] = gfun + return i + } + } + gt.methods = append(gt.methods, gfun) + return len(gt.methods) - 1 +} + +func unsafeRemoveMethods(gtype *types.Named, names []string, pkgpath string) { + names = append([]string{}, names...) // make a copy + sort.Strings(names) // and sort it + + gt := (*unsafeNamed)(unsafe.Pointer(gtype)) + + n1 := len(gt.methods) + n2 := n1 + for i, j := 0, 0; i < n1; i++ { + m := gt.methods[i] + name := m.Name() + pos := sort.SearchStrings(names, name) + if pos < len(names) && names[pos] == name && (m.Exported() || m.Pkg().Path() == pkgpath) { + // delete this method + n2-- + continue + } + if i != j { + gt.methods[j] = gt.methods[i] + } + j++ + } + if n1 != n2 { + gt.methods = gt.methods[:n2] + } +} + +// GetMethods returns the pointer to the method values. +// It panics if the type is unnamed +func (t *xtype) GetMethods() *[]reflect.Value { + if !t.Named() { + xerrorf(t, "GetMethods on unnamed type %v", t) + } + resizemethodvalues(t) + return &t.methodvalues +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/package.go b/vendor/github.com/cosmos72/gomacro/xreflect/package.go new file mode 100644 index 0000000..08f10c1 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/package.go @@ -0,0 +1,82 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * package.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/types" + "strings" +) + +func (v *Universe) loadPackage(path string) *Package { + if len(path) == 0 { + // do not create unnamed packages + return nil + } + if pkg := v.Packages[path]; pkg != nil { + return pkg + } + // try to import the package first... + // slower, but creates the correct Typename objects for named types + if pkg := v.importPackage(path); pkg != nil { + return pkg + } + if v.Packages == nil { + v.Packages = make(map[string]*Package) + } + name := path[1+strings.LastIndexByte(path, '/'):] + pkg := (*Package)(types.NewPackage(path, name)) + v.Packages[path] = pkg + return pkg +} + +func (v *Universe) LoadPackage(path string) *Package { + if len(path) == 0 { + // do not create unnamed packages + return nil + } + if v.ThreadSafe { + defer un(lock(v)) + } + return v.loadPackage(path) +} + +func (pkg *Package) GoPackage() *types.Package { + return (*types.Package)(pkg) +} + +func (pkg *Package) Name() string { + if pkg == nil { + return "" + } + return (*types.Package)(pkg).Name() +} + +func (pkg *Package) Path() string { + if pkg == nil { + return "" + } + return (*types.Package)(pkg).Path() +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/struct.go b/vendor/github.com/cosmos72/gomacro/xreflect/struct.go new file mode 100644 index 0000000..7437f7e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/struct.go @@ -0,0 +1,181 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * struct.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "fmt" + "go/ast" + "go/token" + "go/types" + "reflect" +) + +// Field returns a struct type's i'th field. +// It panics if the type's Kind is not Struct. +// It panics if i is not in the range [0, NumField()). +func (t *xtype) Field(i int) StructField { + if t.kind != reflect.Struct { + xerrorf(t, "Field of non-struct type %v", t) + } + v := t.universe + if v.ThreadSafe { + defer un(lock(v)) + } + return t.field(i) +} + +func (t *xtype) field(i int) StructField { + if t.kind != reflect.Struct { + xerrorf(t, "Field of non-struct type %v", t) + } + gtype := t.gtype.Underlying().(*types.Struct) + + va := gtype.Field(i) + rf := t.rtype.Field(i) + + return StructField{ + Name: va.Name(), + Pkg: (*Package)(va.Pkg()), + Type: t.universe.maketype(va.Type(), rf.Type), // lock already held + Tag: rf.Tag, + Offset: rf.Offset, + Index: rf.Index, + Anonymous: va.Anonymous(), + } +} + +// NumField returns a struct type's field count. +// It panics if the type's Kind is not Struct. +func (t *xtype) NumField() int { + if t.kind != reflect.Struct { + xerrorf(t, "NumField of non-struct type %v", t) + } + gtype := t.underlying().(*types.Struct) + return gtype.NumFields() +} + +func (field *StructField) toReflectField(forceExported bool) reflect.StructField { + var pkgpath string + if pkg := field.Pkg; pkg != nil && !forceExported { + pkgpath = pkg.Path() + } + name := field.Name + if forceExported { + name = toExportedFieldName(name, field.Type, field.Anonymous) + } + return reflect.StructField{ + Name: name, + PkgPath: pkgpath, + Type: field.Type.ReflectType(), + Tag: field.Tag, + Offset: field.Offset, + Index: field.Index, + Anonymous: field.Anonymous, + } +} + +func toReflectFields(fields []StructField, forceExported bool) []reflect.StructField { + rfields := make([]reflect.StructField, len(fields)) + for i := range fields { + rfields[i] = fields[i].toReflectField(forceExported) + } + return rfields +} + +func (field *StructField) sanitize(i int) { + if len(field.Name) != 0 { + return + } + t := field.Type + name := t.Name() + if len(name) == 0 && t.Kind() == reflect.Ptr { + name = t.elem().Name() + } + if len(name) == 0 { + name = StrGensymEmbedded + fmt.Sprintf("%d", i) + } + field.Name = name + field.Anonymous = true +} + +func (field *StructField) toGoField(i int) *types.Var { + field.sanitize(i) + return types.NewField(token.NoPos, (*types.Package)(field.Pkg), field.Name, field.Type.GoType(), field.Anonymous) +} + +func toGoFields(fields []StructField) []*types.Var { + vars := make([]*types.Var, len(fields)) + for i := range fields { + vars[i] = fields[i].toGoField(i) + } + return vars +} + +func (field *StructField) toTag() string { + return string(field.Tag) +} + +func toTags(fields []StructField) []string { + tags := make([]string, len(fields)) + for i := range fields { + tags[i] = fields[i].toTag() + } + return tags +} + +func toExportedFieldName(name string, t Type, anonymous bool) string { + if len(name) == 0 && t != nil { + if name = t.Name(); len(name) == 0 && t.Kind() == reflect.Ptr { + name = t.elem().Name() + } + } + if !ast.IsExported(name) { + if anonymous { + return GensymEmbedded(name) + } else { + return GensymPrivate(name) + } + } + return name +} + +func (v *Universe) StructOf(fields []StructField) Type { + vars := toGoFields(fields) + tags := toTags(fields) + rfields := toReflectFields(fields, true) + return v.MakeType( + types.NewStruct(vars, tags), + reflect.StructOf(rfields), + ) +} + +func StructOf(fields []StructField) Type { + v := universe + if len(fields) != 0 && fields[0].Type != nil { + v = fields[0].Type.Universe() + } + return v.StructOf(fields) +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/type.go b/vendor/github.com/cosmos72/gomacro/xreflect/type.go new file mode 100644 index 0000000..499e352 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/type.go @@ -0,0 +1,263 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * type.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/types" + "reflect" +) + +func SameType(t, u Type) bool { + xnil := t == nil + ynil := u == nil + if xnil || ynil { + return xnil == ynil + } + xt := unwrap(t) + yt := unwrap(u) + return xt == yt || xt.same(yt) +} + +func (t *xtype) same(u *xtype) bool { + return types.IdenticalIgnoreTags(t.GoType(), u.GoType()) +} + +func (m *Types) add(t Type) { + if t.Kind() == reflect.Interface { + rtype := t.ReflectType() + rkind := rtype.Kind() + if rkind != reflect.Interface && (rkind != reflect.Ptr || rtype.Elem().Kind() != reflect.Struct) { + errorf(t, "bug! inconsistent type <%v>: has kind = %s but its Type.Reflect() is %s\n\tinstead of interface or pointer-to-struct: <%v>", t, t.Kind(), rtype.Kind(), t.ReflectType()) + } + } + m.gmap.Set(t.GoType(), t) + // debugf("added type to cache: %v <%v> <%v>", t.Kind(), t.GoType(), t.ReflectType()) +} + +func (v *Universe) unique(t Type) Type { + gtype := t.GoType() + ret := v.Types.gmap.At(gtype) + if ret != nil { + // debugf("unique: found type in cache: %v for %v <%v> <%v>", ret, t.Kind(), gtype, t.ReflectType()) + return ret.(Type) + } + v.add(t) + return t +} + +// all unexported methods assume lock is already held +func (v *Universe) maketype3(kind reflect.Kind, gtype types.Type, rtype reflect.Type) Type { + if gtype == nil { + errorf(nil, "MakeType of nil types.Type") + } else if rtype == nil { + errorf(nil, "MakeType of nil reflect.Type") + } + ret := v.Types.gmap.At(gtype) + if ret != nil { + t := ret.(Type) + // debugf("found type in cache:\n\t %v <%v> <%v>\n\tfor %v <%v> <%v>", t.Kind(), t.GoType(), t.ReflectType(), kind, gtype, rtype) + return t + } + if v.BasicTypes == nil { + // lazy creation of basic types + v.init() + } + t := wrap(&xtype{kind: kind, gtype: gtype, rtype: rtype, universe: v}) + v.add(t) + return t +} + +func (v *Universe) maketype(gtype types.Type, rtype reflect.Type) Type { + return v.maketype3(gtypeToKind(nil, gtype), gtype, rtype) +} + +func (v *Universe) MakeType(gtype types.Type, rtype reflect.Type) Type { + kind := gtypeToKind(nil, gtype) + if v.ThreadSafe { + defer un(lock(v)) + } + return v.maketype3(kind, gtype, rtype) +} + +// GoType returns the go/types.Type corresponding to the type. +func (t *xtype) GoType() types.Type { + return t.gtype +} + +// ReflectType returns a best-effort reflect.Type that approximates the type. +// It may be inexact for the following reasons: +// 1) missing reflect.NamedOf(): no way to programmatically create named types, or to access the underlying type of a named type +// 2) missing reflect.InterfaceOf(): interface types created at runtime will be approximated by structs +// 3) missing reflect.MethodOf(): method types created at runtime will be approximated by functions +// whose first parameter is the receiver +// 4) reflect.StructOf() does not support embedded or unexported fields +// 5) go/reflect lacks the ability to create self-referencing types: +// references to the type itself will be replaced by interface{}. +// +// Examples: +// after invoking at runtime type2.NewStruct() and type2.NewNamed() +// to create the following type: +// type List struct { Elem int; Rest *List } +// ReflectType will return a reflect.Type equivalent to: +// struct { Elem int; Rest interface{} } +// i.e. the type name will be missing due to limitation 1 above, +// and the field 'Rest' will have type interface{} instead of *List due to limitation 5. +func (t *xtype) ReflectType() reflect.Type { + return t.rtype +} + +func (t *xtype) UnsafeForceReflectType(rtype reflect.Type) { + t.rtype = rtype +} + +func (t *xtype) Universe() *Universe { + return t.universe +} + +// Named returns whether the type is named. +// It returns false for unnamed types. +func (t *xtype) Named() bool { + switch t.gtype.(type) { + case *types.Basic, *types.Named: + return true + default: + return false + } +} + +// Name returns the type's name within its package. +// It returns an empty string for unnamed types. +func (t *xtype) Name() string { + switch gtype := t.gtype.(type) { + case *types.Basic: + return gtype.Name() + case *types.Named: + return gtype.Obj().Name() + default: + return "" + } +} + +// Pkg returns a named type's package, that is, the package where it was defined. +// If the type was predeclared (string, error) or unnamed (*T, struct{}, []int), +// Pkg will return nil. +func (t *xtype) Pkg() *Package { + switch gtype := t.gtype.(type) { + case *types.Named: + return (*Package)(gtype.Obj().Pkg()) + default: + return nil + } +} + +// PkgName returns a named type's package name, that is, +// the default name that the package provides when imported. +// If the type was predeclared (string, error) or unnamed (*T, struct{}, []int), +// the package name will be the empty string. +func (t *xtype) PkgName() string { + switch gtype := t.gtype.(type) { + case *types.Named: + return gtype.Obj().Pkg().Name() + default: + return "" + } +} + +// PkgPath returns a named type's package path, that is, the import path +// that uniquely identifies the package, such as "encoding/base64". +// If the type was predeclared (string, error) or unnamed (*T, struct{}, []int), +// the package path will be the empty string. +func (t *xtype) PkgPath() string { + switch gtype := t.gtype.(type) { + case *types.Named: + return gtype.Obj().Pkg().Path() + default: + return "" + } +} + +// Size returns the number of bytes needed to store +// a value of the given type; it is analogous to unsafe.Sizeof. +func (t *xtype) Size() uintptr { + return t.rtype.Size() +} + +// String returns a string representation of a type. +func (t *xtype) String() string { + if t == nil { + return "invalid type" + } + return t.gtype.String() +} + +/* +// Underlying returns the underlying type of a type. +func (t *xtype) Underlying() Type { + return Type{t.underlying} +} +*/ + +func (t *xtype) underlying() types.Type { + return t.gtype.Underlying() +} + +// Kind returns the specific kind of the type. +func (t *xtype) Kind() reflect.Kind { + if t == nil { + return reflect.Invalid + } + return t.kind +} + +// Implements reports whether the type implements the interface type u. +// It panics if u's Kind is not Interface +func (t *xtype) Implements(u Type) bool { + if u.Kind() != reflect.Interface { + xerrorf(t, "Type.Implements of non-interface type: %v", u) + } + return types.Implements(t.gtype, u.GoType().Underlying().(*types.Interface)) +} + +// AssignableTo reports whether a value of the type is assignable to type u. +func (t *xtype) AssignableTo(u Type) bool { + // debugf("AssignableTo: <%v> <%v>", t, u) + return types.AssignableTo(t.gtype, u.GoType()) +} + +// ConvertibleTo reports whether a value of the type is convertible to type u. +func (t *xtype) ConvertibleTo(u Type) bool { + return types.ConvertibleTo(t.gtype, u.GoType()) +} + +// Comparable reports whether values of this type are comparable. +func (t *xtype) Comparable() bool { + return types.Comparable(t.gtype) +} + +// Zero returns a Value representing the zero value for the specified type. +func Zero(t Type) reflect.Value { + return reflect.Zero(t.ReflectType()) +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/type_test.go b/vendor/github.com/cosmos72/gomacro/xreflect/type_test.go new file mode 100644 index 0000000..b7ad78e --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/type_test.go @@ -0,0 +1,457 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * type_test.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/types" + "io" + "os" + "reflect" + "testing" + "time" +) + +var v = universe + +func fail(t *testing.T, actual interface{}, expected interface{}) { + t.Errorf("expecting %v <%T>, found %v <%T>\n", expected, expected, actual, actual) +} + +func fail2(t *testing.T, actual interface{}, expected interface{}) { + t.Errorf("expecting %#v <%T>,\n\tfound %#v <%T>\n", expected, expected, actual, actual) +} + +func is(t *testing.T, actual interface{}, expected interface{}) { + if actual != expected { + fail(t, actual, expected) + } +} + +func istrue(t *testing.T, actual bool) { + if !actual { + fail(t, actual, true) + } +} + +func isdeepequal(t *testing.T, actual interface{}, expected interface{}) { + if !reflect.DeepEqual(actual, expected) { + fail2(t, actual, expected) + } +} + +func istype(t *testing.T, actual interface{}, expected interface{}) { + is(t, reflect.TypeOf(actual), reflect.TypeOf(expected)) +} + +func TestBasic(t *testing.T) { + for i, rtype := range rbasictypes { + if rtype == nil { + continue + } + kind := reflect.Kind(i) + typ := v.BasicTypes[kind] + is(t, typ.Kind(), rtype.Kind()) + is(t, typ.Name(), rtype.Name()) + is(t, typ.ReflectType(), rtype) + istype(t, typ.GoType(), (*types.Basic)(nil)) + + basic := typ.GoType().(*types.Basic) + k := ToReflectKind(basic.Kind()) + is(t, k, rtype.Kind()) + } +} + +func TestArray(t *testing.T) { + typ := ArrayOf(7, v.BasicTypes[reflect.Uint8]) + rtype := reflect.TypeOf([7]uint8{}) + is(t, typ.Kind(), reflect.Array) + is(t, typ.Name(), "") + is(t, typ.ReflectType(), rtype) + istype(t, typ.GoType(), (*types.Array)(nil)) + is(t, typ.String(), "[7]uint8") +} + +func TestFunction(t *testing.T) { + typ := FuncOf([]Type{v.BasicTypes[reflect.Bool], v.BasicTypes[reflect.Int16]}, []Type{v.BasicTypes[reflect.String]}, false) + rtype := reflect.TypeOf(func(bool, int16) string { return "" }) + is(t, typ.Kind(), reflect.Func) + is(t, typ.Name(), "") + is(t, typ.ReflectType(), rtype) + istype(t, typ.GoType(), (*types.Signature)(nil)) + is(t, typ.String(), "func(bool, int16) string") +} + +func TestInterface1(t *testing.T) { + methodtyp := FuncOf(nil, []Type{v.BasicTypes[reflect.Int]}, false) + typ := InterfaceOf([]string{"Cap", "Len"}, []Type{methodtyp, methodtyp}, nil).Complete() + + is(t, typ.Kind(), reflect.Interface) + is(t, typ.Name(), "") + is(t, typ.NumMethod(), 2) + actual := typ.Method(0) + is(t, actual.Name, "Cap") + is(t, true, types.Identical(methodtyp.GoType(), actual.Type.GoType())) + actual = typ.Method(1) + is(t, actual.Name, "Len") + is(t, true, types.Identical(methodtyp.GoType(), actual.Type.GoType())) + istype(t, typ.GoType(), (*types.Interface)(nil)) + + rtype := reflect.PtrTo( + reflect.StructOf([]reflect.StructField{ + approxInterfaceHeader(), + reflect.StructField{Name: "Cap", Type: methodtyp.ReflectType()}, + reflect.StructField{Name: "Len", Type: methodtyp.ReflectType()}, + })) + is(t, typ.ReflectType(), rtype) + is(t, typ.String(), "interface{Cap() int; Len() int}") +} + +// test implementing 'error' interface +func TestInterfaceError(t *testing.T) { + methodtyp := FuncOf(nil, []Type{v.BasicTypes[reflect.String]}, false) + typ := InterfaceOf([]string{"Error"}, []Type{methodtyp}, nil).Complete() + + is(t, typ.Kind(), reflect.Interface) + is(t, typ.Name(), "") + is(t, typ.NumMethod(), 1) + + is(t, typ.Implements(v.TypeOfError), true) +} + +func TestMap(t *testing.T) { + typ := MapOf(v.TypeOfInterface, v.BasicTypes[reflect.Bool]) + rtype := reflect.TypeOf(map[interface{}]bool{}) + is(t, typ.Kind(), reflect.Map) + is(t, typ.Name(), "") + is(t, typ.ReflectType(), rtype) + istype(t, typ.GoType(), (*types.Map)(nil)) +} + +func TestMethod(t *testing.T) { + typ := v.NamedOf("MyInt", "main") + typ.SetUnderlying(v.BasicTypes[reflect.Int]) + rtype := reflect.TypeOf(int(0)) + is(t, typ.Kind(), reflect.Int) + is(t, typ.Name(), "MyInt") + is(t, typ.ReflectType(), rtype) + istype(t, typ.GoType(), (*types.Named)(nil)) +} + +func TestNamed(t *testing.T) { + typ := v.NamedOf("MyMap", "main") + underlying := MapOf(v.TypeOfInterface, v.BasicTypes[reflect.Bool]) + typ.SetUnderlying(underlying) + rtype := reflect.TypeOf(map[interface{}]bool{}) + is(t, typ.Kind(), reflect.Map) + is(t, typ.Name(), "MyMap") + is(t, typ.ReflectType(), rtype) + istype(t, typ.GoType(), (*types.Named)(nil)) +} + +func TestSelfReference(t *testing.T) { + typ := v.NamedOf("List", "main") + underlying := StructOf([]StructField{ + StructField{Name: "First", Type: v.BasicTypes[reflect.Int]}, + StructField{Name: "Rest", Type: typ}, + }) + typ.SetUnderlying(underlying) + rtype := reflect.TypeOf(struct { + First int + Rest interface{} + }{}) + is(t, typ.Kind(), reflect.Struct) + is(t, typ.Name(), "List") + is(t, typ.ReflectType(), rtype) + is(t, true, types.Identical(typ.Field(1).Type.GoType(), typ.GoType())) + istype(t, typ.GoType(), (*types.Named)(nil)) + + is(t, typ.String(), "main.List") + is(t, typ.underlying().String(), "struct{First int; Rest main.List}") +} + +func TestStruct(t *testing.T) { + typ := StructOf([]StructField{ + StructField{Name: "First", Type: v.BasicTypes[reflect.Int]}, + StructField{Name: "Rest", Type: v.TypeOfInterface}, + }) + rtype := reflect.TypeOf(struct { + First int + Rest interface{} + }{}) + is(t, typ.Kind(), reflect.Struct) + is(t, typ.Name(), "") + is(t, typ.ReflectType(), rtype) + istype(t, typ.GoType(), (*types.Struct)(nil)) + is(t, typ.NumField(), rtype.NumField()) + for i := 0; i < typ.NumField(); i++ { + field := typ.Field(i) + rfield1 := field.toReflectField(false) + rfield2 := rtype.Field(i) + isdeepequal(t, rfield1, rfield2) + } + is(t, typ.String(), "struct{First int; Rest interface{}}") +} + +func TestEmbedded(t *testing.T) { + etyp := v.NamedOf("Box", "") + etyp.SetUnderlying(StructOf([]StructField{ + StructField{Name: "Value", Type: v.BasicTypes[reflect.Int]}, + })) + ertype := reflect.TypeOf(struct { + Value int + }{}) + is(t, etyp.Kind(), reflect.Struct) + is(t, etyp.Name(), "Box") + is(t, etyp.ReflectType(), ertype) + istype(t, etyp.GoType(), (*types.Named)(nil)) + istype(t, etyp.GoType().Underlying(), (*types.Struct)(nil)) + + typ := StructOf([]StructField{ + StructField{Name: "Label", Type: v.BasicTypes[reflect.String]}, + StructField{Type: v.PtrTo(etyp)}, // empty name => anonymous, and autodetect name from type + }) + is(t, typ.String(), "struct{Label string; *Box}") + field1 := typ.Field(1) + is(t, field1.Name, "Box") // autodetected + is(t, field1.Anonymous, true) + + // access field Struct.Value - shorthand for Struct.Box.Value + field, count := typ.FieldByName("Value", "") + is(t, count, 1) + isdeepequal(t, field.Index, []int{1, 0}) + + efield := etyp.Field(0) + field.Index = efield.Index + field.Offset = efield.Offset + isdeepequal(t, field, efield) + + // access anonymous field Struct.Box + field, count = typ.FieldByName("Box", "") + is(t, count, 1) + isdeepequal(t, field, typ.Field(1)) +} + +func TestFromReflect0(t *testing.T) { + rtype := reflect.TypeOf((*func(bool, int8, <-chan uint16, []float32, [2]float64, []complex64) map[interface{}]*string)(nil)).Elem() + v := &Universe{RebuildDepth: MaxDepth} + typ := v.FromReflectType(rtype) + is(t, typ.ReflectType(), rtype) // recreated 100% accurately? +} + +func TestFromReflect1(t *testing.T) { + rtype := reflect.TypeOf(time.Duration(0)) + typ := v.FromReflectType(rtype) + is(t, typ.ReflectType(), rtype) + is(t, typ.String(), "time.Duration") + is(t, typ.underlying().String(), "int64") +} + +func TestFromReflect2(t *testing.T) { + type Bag struct { + C <-chan bool + I int32 + U uintptr + F [3]float32 + G []float64 + M map[string]*complex64 + } + in := reflect.TypeOf(Bag{}) + expected := reflect.TypeOf(struct { + C <-chan bool + I int32 + U uintptr + F [3]float32 + G []float64 + M map[string]*complex64 + }{}) + v := &Universe{RebuildDepth: MaxDepth} + typ := v.FromReflectType(in) + actual := typ.ReflectType() + is(t, typ.Kind(), reflect.Struct) + is(t, typ.Name(), "Bag") + is(t, actual, expected) + is(t, actual.ConvertibleTo(in), true) + is(t, in.ConvertibleTo(actual), true) + is(t, actual.AssignableTo(in), true) + is(t, in.AssignableTo(actual), true) +} + +func TestFromReflect3(t *testing.T) { + rtype := reflect.TypeOf((*io.Reader)(nil)).Elem() + v := &Universe{RebuildDepth: 1} + typ := v.FromReflectType(rtype) + + actual := typ.ReflectType() + expected := reflect.PtrTo( + reflect.StructOf([]reflect.StructField{ + approxInterfaceHeader(), + reflect.StructField{Name: "Read", Type: reflect.TypeOf((*func([]uint8) (int, error))(nil)).Elem()}, + })) + is(t, typ.Kind(), reflect.Interface) + is(t, actual, expected) + is(t, typ.String(), "io.Reader") + is(t, typ.underlying().String(), "interface{Read([]uint8) (int, error)}") + + for depth := 0; depth <= 3; depth++ { + v := &Universe{RebuildDepth: depth} + typ = v.FromReflectType(rtype) + // debugf("%v\t-> %v", typ, typ.ReflectType()) + } +} + +func TestFromReflect4(t *testing.T) { + type ToString func() string + rtype := reflect.PtrTo( + reflect.StructOf([]reflect.StructField{ + approxInterfaceHeader(), + reflect.StructField{Name: "String", Type: reflect.TypeOf((*ToString)(nil)).Elem()}, + })) + typ := v.NamedOf("Stringer", "io") + v := &Universe{RebuildDepth: MaxDepth} + underlying := v.FromReflectType(rtype) + typ.SetUnderlying(underlying) + + actual := typ.ReflectType() + expected := reflect.PtrTo( + reflect.StructOf([]reflect.StructField{ + approxInterfaceHeader(), + reflect.StructField{Name: "String", Type: reflect.TypeOf((*func() string)(nil)).Elem()}, + })) + is(t, typ.Kind(), reflect.Interface) + is(t, actual, expected) + /* + is(t, typ.String(), "io.Stringer") + is(t, typ.underlying().String(), "interface{String() string}") + + for depth := 0; depth <= 3; depth++ { + v := &Universe{RebuildDepth: depth} + typ = v.FromReflectType(rtype) + // debugf("%v\t-> %v", typ, typ.ReflectType()) + } + */ +} + +func TestFromReflect5(t *testing.T) { + rtype := reflect.TypeOf((*reflect.Type)(nil)).Elem() + typ := v.FromReflectType(rtype) + + is(t, typ.String(), "reflect.Type") + + // importer is more accurate and gives even function param names... + s1 := "interface{Align() int; AssignableTo(reflect.Type) bool; Bits() int; ChanDir() reflect.ChanDir; Comparable() bool; ConvertibleTo(reflect.Type) bool; Elem() reflect.Type; Field(int) reflect.StructField; FieldAlign() int; FieldByIndex([]int) reflect.StructField; FieldByName(string) (reflect.StructField, bool); FieldByNameFunc(func(string) bool) (reflect.StructField, bool); Implements(reflect.Type) bool; In(int) reflect.Type; IsVariadic() bool; Key() reflect.Type; Kind() reflect.Kind; Len() int; Method(int) reflect.Method; MethodByName(string) (reflect.Method, bool); Name() string; NumField() int; NumIn() int; NumMethod() int; NumOut() int; Out(int) reflect.Type; PkgPath() string; Size() uintptr; String() string; common() *reflect.rtype; uncommon() *reflect.uncommonType}" + s2 := "interface{Align() int; AssignableTo(u reflect.Type) bool; Bits() int; ChanDir() reflect.ChanDir; Comparable() bool; ConvertibleTo(u reflect.Type) bool; Elem() reflect.Type; Field(i int) reflect.StructField; FieldAlign() int; FieldByIndex(index []int) reflect.StructField; FieldByName(name string) (reflect.StructField, bool); FieldByNameFunc(match func(string) bool) (reflect.StructField, bool); Implements(u reflect.Type) bool; In(i int) reflect.Type; IsVariadic() bool; Key() reflect.Type; Kind() reflect.Kind; Len() int; Method(int) reflect.Method; MethodByName(string) (reflect.Method, bool); Name() string; NumField() int; NumIn() int; NumMethod() int; NumOut() int; Out(i int) reflect.Type; PkgPath() string; Size() uintptr; String() string; common() *reflect.rtype; uncommon() *reflect.uncommonType}" + su := typ.underlying().String() + + if su != s1 && su != s2 { + is(t, su, s1) + } +} + +// test implementing 'io.Reader' interface +func TestInterfaceIoReader(t *testing.T) { + v.RebuildDepth = 0 + + in := []Type{v.SliceOf(v.BasicTypes[reflect.Uint8])} + out := []Type{v.BasicTypes[reflect.Int], v.TypeOfError} + methodtyp := v.FuncOf(in, out, false) + typ := InterfaceOf([]string{"Read"}, []Type{methodtyp}, nil).Complete() + gtyp := typ.GoType() + + is(t, typ.Kind(), reflect.Interface) + is(t, typ.Name(), "") + is(t, typ.NumMethod(), 1) + + // --------------------------- + treader := v.TypeOf((*io.Reader)(nil)).Elem() + + is(t, treader.Kind(), reflect.Interface) + is(t, treader.Name(), "Reader") + is(t, treader.NumMethod(), 1) + + istrue(t, typ.Implements(treader)) + istrue(t, typ.AssignableTo(treader)) + istrue(t, treader.AssignableTo(typ)) + istrue(t, types.Identical(gtyp, treader.GoType().Underlying())) + + // --------------------------- + io, err := v.Importer.Import("io") + istrue(t, err == nil) + istrue(t, io != nil) + + reader := io.Scope().Lookup("Reader").Type().(*types.Named) + ireader := reader.Underlying().(*types.Interface) + + is(t, reader.Obj().Name(), "Reader") + is(t, reader.NumMethods(), 0) // method Read() is declared in the interface, not in the named type + is(t, ireader.NumMethods(), 1) + + istrue(t, types.Implements(gtyp, ireader)) + istrue(t, types.Identical(gtyp, ireader)) + istrue(t, types.AssignableTo(gtyp, reader)) + istrue(t, types.AssignableTo(reader, gtyp)) + + // --------------------------- + t_file := v.TypeOf((*os.File)(nil)) + tfile := t_file.Elem() + + os, err := v.Importer.Import("os") + istrue(t, err == nil) + istrue(t, os != nil) + + file := os.Scope().Lookup("File").Type().(*types.Named) + + tfileRead := tfile.Method(6).Type.GoType().(*types.Signature) + fileRead := file.Method(6).Type().(*types.Signature) + ireaderRead := ireader.ExplicitMethod(0).Type().(*types.Signature) + + if false { + inspect("error", types.Universe.Lookup("error").Type()) + inspect("Universe.TypeOfError.GoType()", v.TypeOfError.GoType()) + inspect("tfile.Read.Results.1.Type", tfileRead.Results().At(1).Type()) + inspect("file.Read.Results.1.Type", fileRead.Results().At(1).Type()) + inspect("ireader.Read.Results.1.Type", ireaderRead.Results().At(1).Type()) + } + + istrue(t, types.Identical(tfileRead, ireaderRead)) + istrue(t, types.Identical(fileRead, ireaderRead)) + istrue(t, types.Identical(tfileRead, fileRead)) + + istrue(t, types.Implements(t_file.GoType(), ireader)) + istrue(t, types.AssignableTo(t_file.GoType(), reader)) + +} + +func inspect(label string, t types.Type) { + debugf("%s:\t%v", label, t) + switch t := t.(type) { + case *types.Named: + debugf(" typename:\t%p\t%#v", t.Obj(), t.Obj()) + for i, n := 0, t.NumMethods(); i < n; i++ { + debugf(" method %d:\t%s", i, t.Method(i)) + } + debugf(" underlying:\t%v", t.Underlying()) + } +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/universe.go b/vendor/github.com/cosmos72/gomacro/xreflect/universe.go new file mode 100644 index 0000000..6a1f9e0 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/universe.go @@ -0,0 +1,174 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * universe.go + * + * Created on May 14, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "go/types" + "reflect" + // "runtime/debug" + "sync" + + "github.com/cosmos72/gomacro/typeutil" +) + +type Types struct { + gmap typeutil.Map +} + +type Universe struct { + Types + ReflectTypes map[reflect.Type]Type + BasicTypes []Type + TypeOfInterface Type + TypeOfError Type + TryResolve func(name, pkgpath string) Type + Packages map[string]*Package + Importer types.ImporterFrom + RebuildDepth int + mutex sync.Mutex + debugmutex int + ThreadSafe bool + methodcache bool + fieldcache bool +} + +func lock(v *Universe) *Universe { + if v.debugmutex != 0 { + errorf(nil, "deadlocking universe %p", v) + } + v.mutex.Lock() + v.debugmutex++ + return v +} + +func un(v *Universe) { + // debugf("unlocking universe %p", v) + v.mutex.Unlock() + v.debugmutex-- +} + +func (v *Universe) rebuild() bool { + return v.RebuildDepth >= 0 +} + +func (v *Universe) cache(rt reflect.Type, t Type) Type { + if v.ReflectTypes == nil { + v.ReflectTypes = make(map[reflect.Type]Type) + } + v.ReflectTypes[rt] = t + // debugf("added rtype to cache: %v -> %v (%v)", rt, t, t.ReflectType()) + return t +} + +// cachePackage0 recursively adds pkg and its imports to Universe.Packages if not cached already +func (v *Universe) cachePackage0(pkg *types.Package) { + path := pkg.Path() + if _, ok := v.Packages[path]; ok { + return + } + v.Packages[path] = (*Package)(pkg) + for _, imp := range pkg.Imports() { + v.cachePackage0(imp) + } +} + +// cachePackage unconditionally adds pkg to Universe.Packages, +// then also adds its imports if not cached already +func (v *Universe) cachePackage(pkg *types.Package) { + if pkg == nil { + return + } + if v.Packages == nil { + v.Packages = make(map[string]*Package) + } + v.Packages[pkg.Path()] = (*Package)(pkg) + for _, imp := range pkg.Imports() { + v.cachePackage0(imp) + } +} + +// CachePackage unconditionally adds pkg to Universe.Packages, +// then also adds its imports if not cached already +func (v *Universe) CachePackage(pkg *types.Package) { + if pkg == nil { + return + } + if v.ThreadSafe { + defer un(lock(v)) + } + v.cachePackage(pkg) +} + +func (v *Universe) importPackage(path string) *Package { + if v.Importer == nil { + v.Importer = DefaultImporter() + } + pkg, err := v.Importer.Import(path) + if err != nil || pkg == nil { + // debugf("cannot find metadata to import package %q: %v\n\t%s", path, err, debug.Stack()) + debugf("importer: cannot find package %q metadata, approximating it with reflection", path) + return nil + } + // debugf("imported package %q", path) + v.cachePackage(pkg) + return (*Package)(pkg) +} + +func (v *Universe) namedTypeFromImport(rtype reflect.Type) Type { + t := v.namedTypeFromPackageCache(rtype) + if t != nil { + return t + } + pkg := v.importPackage(rtype.PkgPath()) + if pkg == nil { + return nil + } + + return v.namedTypeFromPackage(rtype, (*types.Package)(pkg)) +} + +func (v *Universe) namedTypeFromPackageCache(rtype reflect.Type) Type { + pkgpath := rtype.PkgPath() + pkg := (*types.Package)(v.Packages[pkgpath]) + if pkg != nil { + return v.namedTypeFromPackage(rtype, pkg) + } + return nil +} + +func (v *Universe) namedTypeFromPackage(rtype reflect.Type, pkg *types.Package) Type { + name := rtype.Name() + if scope := pkg.Scope(); scope != nil && len(name) != 0 { + if obj := scope.Lookup(name); obj != nil { + if gtype := obj.Type(); gtype != nil { + // debugf("imported named type %v for %v", gtype, rtype) + // not v.MakeType, because we already hold the lock + return v.maketype3(gtypeToKind(nil, gtype), gtype, rtype) + } + } + } + return nil +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/util.go b/vendor/github.com/cosmos72/gomacro/xreflect/util.go new file mode 100644 index 0000000..864372c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/util.go @@ -0,0 +1,267 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * util.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "fmt" + "go/token" + "go/types" + "reflect" +) + +func concat(a, b []int) []int { + na := len(a) + c := make([]int, na+len(b)) + copy(c, a) + copy(c[na:], b) + return c +} + +func debugf(format string, args ...interface{}) { + str := fmt.Sprintf(format, args...) + fmt.Printf("// debug: %s\n", str) +} + +type Error struct { + Type Type + format string + args []interface{} +} + +func (e *Error) Error() string { + return fmt.Sprintf(e.format, e.args...) +} + +func errorf(t Type, format string, args ...interface{}) { + panic(&Error{t, format, args}) +} + +func xerrorf(t *xtype, format string, args ...interface{}) { + panic(&Error{wrap(t), format, args}) +} + +func dirToGdir(dir reflect.ChanDir) types.ChanDir { + var gdir types.ChanDir + switch dir { + case reflect.RecvDir: + gdir = types.RecvOnly + case reflect.SendDir: + gdir = types.SendOnly + case reflect.BothDir: + gdir = types.SendRecv + } + return gdir +} + +func gtypeToKind(t *xtype, gtype types.Type) reflect.Kind { + gtype = gtype.Underlying() + var kind reflect.Kind + switch gtype := gtype.(type) { + case *types.Array: + kind = reflect.Array + case *types.Basic: + kind = ToReflectKind(gtype.Kind()) + case *types.Chan: + kind = reflect.Chan + case *types.Signature: + kind = reflect.Func + case *types.Interface: + kind = reflect.Interface + case *types.Map: + kind = reflect.Map + case *types.Pointer: + kind = reflect.Ptr + case *types.Slice: + kind = reflect.Slice + case *types.Struct: + kind = reflect.Struct + // case *types.Named: // impossible, handled above + default: + xerrorf(t, "unsupported types.Type: %v", gtype) + } + // debugf("gtypeToKind(%T) -> %v", gtype, kind) + return kind +} + +func IsGoUntypedKind(gkind types.BasicKind) bool { + switch gkind { + case types.UntypedBool, types.UntypedInt, types.UntypedRune, + types.UntypedFloat, types.UntypedComplex, types.UntypedString, types.UntypedNil: + return true + default: + return false + } +} + +func ToReflectKind(gkind types.BasicKind) reflect.Kind { + var kind reflect.Kind + switch gkind { + case types.Bool, types.UntypedBool: + kind = reflect.Bool + case types.Int, types.UntypedInt: + kind = reflect.Int + case types.Int8: + kind = reflect.Int8 + case types.Int16: + kind = reflect.Int16 + case types.Int32, types.UntypedRune: + kind = reflect.Int32 + case types.Int64: + kind = reflect.Int64 + case types.Uint: + kind = reflect.Uint + case types.Uint8: + kind = reflect.Uint8 + case types.Uint16: + kind = reflect.Uint16 + case types.Uint32: + kind = reflect.Uint32 + case types.Uint64: + kind = reflect.Uint64 + case types.Uintptr: + kind = reflect.Uintptr + case types.Float32: + kind = reflect.Float32 + case types.Float64, types.UntypedFloat: + kind = reflect.Float64 + case types.Complex64: + kind = reflect.Complex64 + case types.Complex128, types.UntypedComplex: + kind = reflect.Complex128 + case types.String, types.UntypedString: + kind = reflect.String + case types.UnsafePointer: + kind = reflect.UnsafePointer + case types.UntypedNil: + kind = reflect.Invalid + default: + errorf(nil, "unsupported types.BasicKind: %v", gkind) + } + return kind +} + +func ToBasicKind(kind reflect.Kind, untyped bool) types.BasicKind { + var gkind types.BasicKind + switch kind { + case reflect.Bool: + if untyped { + gkind = types.UntypedBool + } else { + gkind = types.Bool + } + case reflect.Int: + if untyped { + gkind = types.Int + } else { + gkind = types.UntypedInt + } + case reflect.Int8: + gkind = types.Int8 + case reflect.Int16: + gkind = types.Int16 + case reflect.Int32: + if untyped { + gkind = types.UntypedRune + } else { + gkind = types.Int32 + } + case reflect.Int64: + gkind = types.Int64 + case reflect.Uint: + gkind = types.Uint + case reflect.Uint8: + gkind = types.Uint8 + case reflect.Uint16: + gkind = types.Uint16 + case reflect.Uint32: + gkind = types.Uint32 + case reflect.Uint64: + gkind = types.Uint64 + case reflect.Uintptr: + gkind = types.Uintptr + case reflect.Float32: + gkind = types.Float32 + case reflect.Float64: + if untyped { + gkind = types.UntypedFloat + } else { + gkind = types.Float64 + } + case reflect.Complex64: + gkind = types.Complex64 + case reflect.Complex128: + if untyped { + gkind = types.UntypedComplex + } else { + gkind = types.Complex128 + } + case reflect.String: + if untyped { + gkind = types.UntypedString + } else { + gkind = types.String + } + case reflect.UnsafePointer: + gkind = types.UnsafePointer + case reflect.Invalid: + gkind = types.UntypedNil + default: + errorf(nil, "unsupported refletc.Kind: %v", kind) + } + return gkind +} + +func path(gpkg *types.Package) string { + if gpkg == nil { + return "" + } + return gpkg.Path() +} + +func toReflectTypes(ts []Type) []reflect.Type { + rts := make([]reflect.Type, len(ts)) + for i, t := range ts { + rts[i] = t.ReflectType() + } + return rts +} + +func toGoParam(t Type) *types.Var { + return types.NewParam(token.NoPos, nil, "", t.GoType()) +} + +func toGoParams(ts []Type) []*types.Var { + vars := make([]*types.Var, len(ts)) + for i, t := range ts { + vars[i] = toGoParam(t) + } + return vars +} + +func toGoTuple(ts []Type) *types.Tuple { + vars := toGoParams(ts) + return types.NewTuple(vars...) +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/value.go b/vendor/github.com/cosmos72/gomacro/xreflect/value.go new file mode 100644 index 0000000..294ae27 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/value.go @@ -0,0 +1,63 @@ +/* + * gomacro - A Go interpreter with Lisp-like macros + * + * Copyright (C) 2017 Massimiliano Ghilardi + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + * + * + * value.go + * + * Created on May 07, 2017 + * Author Massimiliano Ghilardi + */ + +package xreflect + +import ( + "reflect" +) + +type Value struct { + reflect.Value + XType Type +} + +func (v Value) Kind() reflect.Kind { + if v.XType == nil { + return reflect.Invalid + } + return v.XType.Kind() +} + +func (v Value) Type() Type { + return v.XType +} + +func (v Value) Convert(t Type) Value { + return Value{ + v.Value.Convert(t.ReflectType()), + t, + } +} + +func (v Value) FieldByName(name, pkgpath string) Value { + field, count := v.XType.FieldByName(name, pkgpath) + var w Value + if count == 1 { + w.Value = v.Value.FieldByIndex(field.Index) + w.XType = field.Type + } + return w +} diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/x_package.go b/vendor/github.com/cosmos72/gomacro/xreflect/x_package.go new file mode 100644 index 0000000..00e326f --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/xreflect/x_package.go @@ -0,0 +1,72 @@ +// this file was generated by gomacro command: import _i "github.com/cosmos72/gomacro/xreflect" +// DO NOT EDIT! Any change will be lost when the file is re-generated + +package xreflect + +import ( + r "reflect" + + "github.com/cosmos72/gomacro/imports" +) + +// reflection: allow interpreted code to import "github.com/cosmos72/gomacro/xreflect" +func init() { + imports.Packages["github.com/cosmos72/gomacro/xreflect"] = imports.Package{ + Binds: map[string]r.Value{ + "ArrayOf": r.ValueOf(ArrayOf), + "ChanOf": r.ValueOf(ChanOf), + "DefaultImporter": r.ValueOf(DefaultImporter), + "DefaultUniverse": r.ValueOf(DefaultUniverse), + "FuncOf": r.ValueOf(FuncOf), + "GensymEmbedded": r.ValueOf(GensymEmbedded), + "GensymPrivate": r.ValueOf(GensymPrivate), + "InterfaceOf": r.ValueOf(InterfaceOf), + "MapOf": r.ValueOf(MapOf), + "MaxDepth": r.ValueOf(int64(MaxDepth)), + "MethodOf": r.ValueOf(MethodOf), + "NewUniverse": r.ValueOf(NewUniverse), + "PtrTo": r.ValueOf(PtrTo), + "QName1": r.ValueOf(QName1), + "QName2": r.ValueOf(QName2), + "QNameGo": r.ValueOf(QNameGo), + "QNameGo2": r.ValueOf(QNameGo2), + "SameType": r.ValueOf(SameType), + "SliceOf": r.ValueOf(SliceOf), + "StrGensymEmbedded": r.ValueOf(StrGensymEmbedded), + "StrGensymInterface": r.ValueOf(StrGensymInterface), + "StrGensymPrivate": r.ValueOf(StrGensymPrivate), + "StructOf": r.ValueOf(StructOf), + "Zero": r.ValueOf(Zero), + }, + Types: map[string]r.Type{ + "Error": r.TypeOf((*Error)(nil)).Elem(), + "Importer": r.TypeOf((*Importer)(nil)).Elem(), + "InterfaceHeader": r.TypeOf((*InterfaceHeader)(nil)).Elem(), + "Method": r.TypeOf((*Method)(nil)).Elem(), + "Package": r.TypeOf((*Package)(nil)).Elem(), + "QName": r.TypeOf((*QName)(nil)).Elem(), + "QNameI": r.TypeOf((*QNameI)(nil)).Elem(), + "StructField": r.TypeOf((*StructField)(nil)).Elem(), + "Type": r.TypeOf((*Type)(nil)).Elem(), + "Types": r.TypeOf((*Types)(nil)).Elem(), + "Universe": r.TypeOf((*Universe)(nil)).Elem(), + "Value": r.TypeOf((*Value)(nil)).Elem(), + }, + Proxies: map[string]r.Type{ + "QNameI": r.TypeOf((*QNameI_github_com_cosmos72_gomacro_xreflect)(nil)).Elem(), + }} +} + +// --------------- proxy for github.com/cosmos72/gomacro/xreflect.QNameI --------------- +type QNameI_github_com_cosmos72_gomacro_xreflect struct { + Object interface{} + Name_ func() string + PkgPath_ func() string +} + +func (Proxy *QNameI_github_com_cosmos72_gomacro_xreflect) Name() string { + return Proxy.Name_() +} +func (Proxy *QNameI_github_com_cosmos72_gomacro_xreflect) PkgPath() string { + return Proxy.PkgPath_() +} diff --git a/vendor/github.com/nu7hatch/gouuid/.gitignore b/vendor/github.com/nu7hatch/gouuid/.gitignore new file mode 100644 index 0000000..f9d9cd8 --- /dev/null +++ b/vendor/github.com/nu7hatch/gouuid/.gitignore @@ -0,0 +1,11 @@ +_obj +_test +*.6 +*.out +_testmain.go +\#* +.\#* +*.log +_cgo* +*.o +*.a diff --git a/vendor/github.com/nu7hatch/gouuid/COPYING b/vendor/github.com/nu7hatch/gouuid/COPYING new file mode 100644 index 0000000..d7849fd --- /dev/null +++ b/vendor/github.com/nu7hatch/gouuid/COPYING @@ -0,0 +1,19 @@ +Copyright (C) 2011 by Krzysztof Kowalik + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/nu7hatch/gouuid/README.md b/vendor/github.com/nu7hatch/gouuid/README.md new file mode 100644 index 0000000..e3d025d --- /dev/null +++ b/vendor/github.com/nu7hatch/gouuid/README.md @@ -0,0 +1,21 @@ +# Pure Go UUID implementation + +This package provides immutable UUID structs and the functions +NewV3, NewV4, NewV5 and Parse() for generating versions 3, 4 +and 5 UUIDs as specified in [RFC 4122](http://www.ietf.org/rfc/rfc4122.txt). + +## Installation + +Use the `go` tool: + + $ go get github.com/nu7hatch/gouuid + +## Usage + +See [documentation and examples](http://godoc.org/github.com/nu7hatch/gouuid) +for more information. + +## Copyright + +Copyright (C) 2011 by Krzysztof Kowalik . See [COPYING](https://github.com/nu7hatch/gouuid/tree/master/COPYING) +file for details. diff --git a/vendor/github.com/nu7hatch/gouuid/example_test.go b/vendor/github.com/nu7hatch/gouuid/example_test.go new file mode 100644 index 0000000..9e86fdc --- /dev/null +++ b/vendor/github.com/nu7hatch/gouuid/example_test.go @@ -0,0 +1,33 @@ +package uuid_test + +import ( + "fmt" + "github.com/nu7hatch/gouuid" +) + +func ExampleNewV4() { + u4, err := uuid.NewV4() + if err != nil { + fmt.Println("error:", err) + return + } + fmt.Println(u4) +} + +func ExampleNewV5() { + u5, err := uuid.NewV5(uuid.NamespaceURL, []byte("nu7hat.ch")) + if err != nil { + fmt.Println("error:", err) + return + } + fmt.Println(u5) +} + +func ExampleParseHex() { + u, err := uuid.ParseHex("6ba7b810-9dad-11d1-80b4-00c04fd430c8") + if err != nil { + fmt.Println("error:", err) + return + } + fmt.Println(u) +} diff --git a/vendor/github.com/nu7hatch/gouuid/uuid.go b/vendor/github.com/nu7hatch/gouuid/uuid.go new file mode 100644 index 0000000..ac9623b --- /dev/null +++ b/vendor/github.com/nu7hatch/gouuid/uuid.go @@ -0,0 +1,173 @@ +// This package provides immutable UUID structs and the functions +// NewV3, NewV4, NewV5 and Parse() for generating versions 3, 4 +// and 5 UUIDs as specified in RFC 4122. +// +// Copyright (C) 2011 by Krzysztof Kowalik +package uuid + +import ( + "crypto/md5" + "crypto/rand" + "crypto/sha1" + "encoding/hex" + "errors" + "fmt" + "hash" + "regexp" +) + +// The UUID reserved variants. +const ( + ReservedNCS byte = 0x80 + ReservedRFC4122 byte = 0x40 + ReservedMicrosoft byte = 0x20 + ReservedFuture byte = 0x00 +) + +// The following standard UUIDs are for use with NewV3() or NewV5(). +var ( + NamespaceDNS, _ = ParseHex("6ba7b810-9dad-11d1-80b4-00c04fd430c8") + NamespaceURL, _ = ParseHex("6ba7b811-9dad-11d1-80b4-00c04fd430c8") + NamespaceOID, _ = ParseHex("6ba7b812-9dad-11d1-80b4-00c04fd430c8") + NamespaceX500, _ = ParseHex("6ba7b814-9dad-11d1-80b4-00c04fd430c8") +) + +// Pattern used to parse hex string representation of the UUID. +// FIXME: do something to consider both brackets at one time, +// current one allows to parse string with only one opening +// or closing bracket. +const hexPattern = "^(urn\\:uuid\\:)?\\{?([a-z0-9]{8})-([a-z0-9]{4})-" + + "([1-5][a-z0-9]{3})-([a-z0-9]{4})-([a-z0-9]{12})\\}?$" + +var re = regexp.MustCompile(hexPattern) + +// A UUID representation compliant with specification in +// RFC 4122 document. +type UUID [16]byte + +// ParseHex creates a UUID object from given hex string +// representation. Function accepts UUID string in following +// formats: +// +// uuid.ParseHex("6ba7b814-9dad-11d1-80b4-00c04fd430c8") +// uuid.ParseHex("{6ba7b814-9dad-11d1-80b4-00c04fd430c8}") +// uuid.ParseHex("urn:uuid:6ba7b814-9dad-11d1-80b4-00c04fd430c8") +// +func ParseHex(s string) (u *UUID, err error) { + md := re.FindStringSubmatch(s) + if md == nil { + err = errors.New("Invalid UUID string") + return + } + hash := md[2] + md[3] + md[4] + md[5] + md[6] + b, err := hex.DecodeString(hash) + if err != nil { + return + } + u = new(UUID) + copy(u[:], b) + return +} + +// Parse creates a UUID object from given bytes slice. +func Parse(b []byte) (u *UUID, err error) { + if len(b) != 16 { + err = errors.New("Given slice is not valid UUID sequence") + return + } + u = new(UUID) + copy(u[:], b) + return +} + +// Generate a UUID based on the MD5 hash of a namespace identifier +// and a name. +func NewV3(ns *UUID, name []byte) (u *UUID, err error) { + if ns == nil { + err = errors.New("Invalid namespace UUID") + return + } + u = new(UUID) + // Set all bits to MD5 hash generated from namespace and name. + u.setBytesFromHash(md5.New(), ns[:], name) + u.setVariant(ReservedRFC4122) + u.setVersion(3) + return +} + +// Generate a random UUID. +func NewV4() (u *UUID, err error) { + u = new(UUID) + // Set all bits to randomly (or pseudo-randomly) chosen values. + _, err = rand.Read(u[:]) + if err != nil { + return + } + u.setVariant(ReservedRFC4122) + u.setVersion(4) + return +} + +// Generate a UUID based on the SHA-1 hash of a namespace identifier +// and a name. +func NewV5(ns *UUID, name []byte) (u *UUID, err error) { + u = new(UUID) + // Set all bits to truncated SHA1 hash generated from namespace + // and name. + u.setBytesFromHash(sha1.New(), ns[:], name) + u.setVariant(ReservedRFC4122) + u.setVersion(5) + return +} + +// Generate a MD5 hash of a namespace and a name, and copy it to the +// UUID slice. +func (u *UUID) setBytesFromHash(hash hash.Hash, ns, name []byte) { + hash.Write(ns[:]) + hash.Write(name) + copy(u[:], hash.Sum([]byte{})[:16]) +} + +// Set the two most significant bits (bits 6 and 7) of the +// clock_seq_hi_and_reserved to zero and one, respectively. +func (u *UUID) setVariant(v byte) { + switch v { + case ReservedNCS: + u[8] = (u[8] | ReservedNCS) & 0xBF + case ReservedRFC4122: + u[8] = (u[8] | ReservedRFC4122) & 0x7F + case ReservedMicrosoft: + u[8] = (u[8] | ReservedMicrosoft) & 0x3F + } +} + +// Variant returns the UUID Variant, which determines the internal +// layout of the UUID. This will be one of the constants: RESERVED_NCS, +// RFC_4122, RESERVED_MICROSOFT, RESERVED_FUTURE. +func (u *UUID) Variant() byte { + if u[8]&ReservedNCS == ReservedNCS { + return ReservedNCS + } else if u[8]&ReservedRFC4122 == ReservedRFC4122 { + return ReservedRFC4122 + } else if u[8]&ReservedMicrosoft == ReservedMicrosoft { + return ReservedMicrosoft + } + return ReservedFuture +} + +// Set the four most significant bits (bits 12 through 15) of the +// time_hi_and_version field to the 4-bit version number. +func (u *UUID) setVersion(v byte) { + u[6] = (u[6] & 0xF) | (v << 4) +} + +// Version returns a version number of the algorithm used to +// generate the UUID sequence. +func (u *UUID) Version() uint { + return uint(u[6] >> 4) +} + +// Returns unparsed version of the generated UUID sequence. +func (u *UUID) String() string { + return fmt.Sprintf("%x-%x-%x-%x-%x", u[0:4], u[4:6], u[6:8], u[8:10], u[10:]) +} diff --git a/vendor/github.com/nu7hatch/gouuid/uuid_test.go b/vendor/github.com/nu7hatch/gouuid/uuid_test.go new file mode 100644 index 0000000..70ed346 --- /dev/null +++ b/vendor/github.com/nu7hatch/gouuid/uuid_test.go @@ -0,0 +1,135 @@ +// This package provides immutable UUID structs and the functions +// NewV3, NewV4, NewV5 and Parse() for generating versions 3, 4 +// and 5 UUIDs as specified in RFC 4122. +// +// Copyright (C) 2011 by Krzysztof Kowalik +package uuid + +import ( + "regexp" + "testing" +) + +const format = "^[a-z0-9]{8}-[a-z0-9]{4}-[1-5][a-z0-9]{3}-[a-z0-9]{4}-[a-z0-9]{12}$" + +func TestParse(t *testing.T) { + _, err := Parse([]byte{1, 2, 3, 4, 5}) + if err == nil { + t.Errorf("Expected error due to invalid UUID sequence") + } + base, _ := NewV4() + u, err := Parse(base[:]) + if err != nil { + t.Errorf("Expected to parse UUID sequence without problems") + return + } + if u.String() != base.String() { + t.Errorf("Expected parsed UUID to be the same as base, %s != %s", u.String(), base.String()) + } +} + +func TestParseString(t *testing.T) { + _, err := ParseHex("foo") + if err == nil { + t.Errorf("Expected error due to invalid UUID string") + } + base, _ := NewV4() + u, err := ParseHex(base.String()) + if err != nil { + t.Errorf("Expected to parse UUID sequence without problems") + return + } + if u.String() != base.String() { + t.Errorf("Expected parsed UUID to be the same as base, %s != %s", u.String(), base.String()) + } +} + +func TestNewV3(t *testing.T) { + u, err := NewV3(NamespaceURL, []byte("golang.org")) + if err != nil { + t.Errorf("Expected to generate UUID without problems, error thrown: %d", err.Error()) + return + } + if u.Version() != 3 { + t.Errorf("Expected to generate UUIDv3, given %d", u.Version()) + } + if u.Variant() != ReservedRFC4122 { + t.Errorf("Expected to generate UUIDv3 RFC4122 variant, given %x", u.Variant()) + } + re := regexp.MustCompile(format) + if !re.MatchString(u.String()) { + t.Errorf("Expected string representation to be valid, given %s", u.String()) + } + u2, _ := NewV3(NamespaceURL, []byte("golang.org")) + if u2.String() != u.String() { + t.Errorf("Expected UUIDs generated of the same namespace and name to be the same") + } + u3, _ := NewV3(NamespaceDNS, []byte("golang.org")) + if u3.String() == u.String() { + t.Errorf("Expected UUIDs generated of different namespace and the same name to be different") + } + u4, _ := NewV3(NamespaceURL, []byte("code.google.com")) + if u4.String() == u.String() { + t.Errorf("Expected UUIDs generated of the same namespace and different names to be different") + } +} + +func TestNewV4(t *testing.T) { + u, err := NewV4() + if err != nil { + t.Errorf("Expected to generate UUID without problems, error thrown: %s", err.Error()) + return + } + if u.Version() != 4 { + t.Errorf("Expected to generate UUIDv4, given %d", u.Version()) + } + if u.Variant() != ReservedRFC4122 { + t.Errorf("Expected to generate UUIDv4 RFC4122 variant, given %x", u.Variant()) + } + re := regexp.MustCompile(format) + if !re.MatchString(u.String()) { + t.Errorf("Expected string representation to be valid, given %s", u.String()) + } +} + +func TestNewV5(t *testing.T) { + u, err := NewV5(NamespaceURL, []byte("golang.org")) + if err != nil { + t.Errorf("Expected to generate UUID without problems, error thrown: %d", err.Error()) + return + } + if u.Version() != 5 { + t.Errorf("Expected to generate UUIDv5, given %d", u.Version()) + } + if u.Variant() != ReservedRFC4122 { + t.Errorf("Expected to generate UUIDv5 RFC4122 variant, given %x", u.Variant()) + } + re := regexp.MustCompile(format) + if !re.MatchString(u.String()) { + t.Errorf("Expected string representation to be valid, given %s", u.String()) + } + u2, _ := NewV5(NamespaceURL, []byte("golang.org")) + if u2.String() != u.String() { + t.Errorf("Expected UUIDs generated of the same namespace and name to be the same") + } + u3, _ := NewV5(NamespaceDNS, []byte("golang.org")) + if u3.String() == u.String() { + t.Errorf("Expected UUIDs generated of different namespace and the same name to be different") + } + u4, _ := NewV5(NamespaceURL, []byte("code.google.com")) + if u4.String() == u.String() { + t.Errorf("Expected UUIDs generated of the same namespace and different names to be different") + } +} + +func BenchmarkParseHex(b *testing.B) { + s := "f3593cff-ee92-40df-4086-87825b523f13" + for i := 0; i < b.N; i++ { + _, err := ParseHex(s) + if err != nil { + b.Fatal(err) + } + } + b.StopTimer() + b.ReportAllocs() +} diff --git a/vendor/github.com/pebbe/zmq4/LICENSE.txt b/vendor/github.com/pebbe/zmq4/LICENSE.txt new file mode 100644 index 0000000..5b2a4b2 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/LICENSE.txt @@ -0,0 +1,25 @@ +Copyright (c) 2013-2014, Peter Kleiweg +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/github.com/pebbe/zmq4/README.md b/vendor/github.com/pebbe/zmq4/README.md new file mode 100644 index 0000000..74ab34a --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/README.md @@ -0,0 +1,69 @@ +A Go interface to [ZeroMQ](http://www.zeromq.org/) version 4. + +[![Go Report Card](https://goreportcard.com/badge/github.com/pebbe/zmq4)](https://goreportcard.com/report/github.com/pebbe/zmq4) +[![GoDoc](https://godoc.org/github.com/pebbe/zmq4?status.svg)](https://godoc.org/github.com/pebbe/zmq4) + +This requires ZeroMQ version 4.0.1 or above. To use CURVE security in +versions prior to 4.2, ZeroMQ must be installed with +[libsodium](https://github.com/jedisct1/libsodium) enabled. + +For ZeroMQ version 3, see: http://github.com/pebbe/zmq3 + +For ZeroMQ version 2, see: http://github.com/pebbe/zmq2 + +Including all examples of [ØMQ - The Guide](http://zguide.zeromq.org/page:all). + +Keywords: zmq, zeromq, 0mq, networks, distributed computing, message passing, fanout, pubsub, pipeline, request-reply + +### See also + + * [Mangos](https://github.com/go-mangos/mangos) — An implementation in pure Go of the SP ("Scalable Protocols") protocols + * [go-nanomsg](https://github.com/op/go-nanomsg) — Language bindings for nanomsg in Go + * [goczmq](https://github.com/zeromq/goczmq) — A Go interface to CZMQ + +## Install + + go get github.com/pebbe/zmq4 + +If you need support for ZeroMQ 4.2 DRAFT, checkout the branch `draft4.2`. + +## Docs + + * [package help](http://godoc.org/github.com/pebbe/zmq4) + * [wiki](https://github.com/pebbe/zmq4/wiki) + +## API change + +There has been an API change in commit +0bc5ab465849847b0556295d9a2023295c4d169e of 2014-06-27, 10:17:55 UTC +in the functions `AuthAllow` and `AuthDeny`. + +Old: + + func AuthAllow(addresses ...string) + func AuthDeny(addresses ...string) + +New: + + func AuthAllow(domain string, addresses ...string) + func AuthDeny(domain string, addresses ...string) + +If `domain` can be parsed as an IP address, it will be interpreted as +such, and it and all remaining addresses are added to all domains. + +So this should still work as before: + + zmq.AuthAllow("127.0.0.1", "123.123.123.123") + +But this won't compile: + + a := []string{"127.0.0.1", "123.123.123.123"} + zmq.AuthAllow(a...) + +And needs to be rewritten as: + + a := []string{"127.0.0.1", "123.123.123.123"} + zmq.AuthAllow("*", a...) + +Furthermore, an address can now be a single IP address, as well as an IP +address and mask in CIDR notation, e.g. "123.123.123.0/24". diff --git a/vendor/github.com/pebbe/zmq4/auth.go b/vendor/github.com/pebbe/zmq4/auth.go new file mode 100644 index 0000000..70fb1d4 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/auth.go @@ -0,0 +1,645 @@ +/* + +This file implements functionality very similar to that of the xauth module in czmq. + +Notable differences in here: + + - domains are supported + - domains are used in AuthAllow and AuthDeny too + - usernames/passwords are read from memory, not from file + - public keys are read from memory, not from file + - an address can be a single IP address, or an IP address and mask in CIDR notation + - additional functions for configuring server or client socket with a single command + +*/ + +package zmq4 + +/* +#include +#include + +#if ZMQ_VERSION_MINOR < 2 +// Version < 4.2.x + +int zmq_curve_public (char *z85_public_key, const char *z85_secret_key) { return 0; } + +#endif // Version < 4.2.x +*/ +import "C" + +import ( + "errors" + "log" + "net" + "strings" + "unsafe" +) + +const CURVE_ALLOW_ANY = "*" + +var ( + auth_handler *Socket + auth_quit *Socket + + auth_init = false + auth_verbose = false + + auth_allow = make(map[string]map[string]bool) + auth_deny = make(map[string]map[string]bool) + auth_allow_net = make(map[string][]*net.IPNet) + auth_deny_net = make(map[string][]*net.IPNet) + + auth_users = make(map[string]map[string]string) + + auth_pubkeys = make(map[string]map[string]bool) + + auth_meta_handler = auth_meta_handler_default +) + +func auth_meta_handler_default(version, request_id, domain, address, identity, mechanism string, credentials ...string) (metadata map[string]string) { + return map[string]string{} +} + +func auth_isIP(addr string) bool { + if net.ParseIP(addr) != nil { + return true + } + if _, _, err := net.ParseCIDR(addr); err == nil { + return true + } + return false +} + +func auth_is_allowed(domain, address string) bool { + for _, d := range []string{domain, "*"} { + if a, ok := auth_allow[d]; ok { + if a[address] { + return true + } + } + } + addr := net.ParseIP(address) + if addr != nil { + for _, d := range []string{domain, "*"} { + if a, ok := auth_allow_net[d]; ok { + for _, m := range a { + if m.Contains(addr) { + return true + } + } + } + } + } + return false +} + +func auth_is_denied(domain, address string) bool { + for _, d := range []string{domain, "*"} { + if a, ok := auth_deny[d]; ok { + if a[address] { + return true + } + } + } + addr := net.ParseIP(address) + if addr != nil { + for _, d := range []string{domain, "*"} { + if a, ok := auth_deny_net[d]; ok { + for _, m := range a { + if m.Contains(addr) { + return true + } + } + } + } + } + return false +} + +func auth_has_allow(domain string) bool { + for _, d := range []string{domain, "*"} { + if a, ok := auth_allow[d]; ok { + if len(a) > 0 || len(auth_allow_net[d]) > 0 { + return true + } + } + } + return false +} + +func auth_has_deny(domain string) bool { + for _, d := range []string{domain, "*"} { + if a, ok := auth_deny[d]; ok { + if len(a) > 0 || len(auth_deny_net[d]) > 0 { + return true + } + } + } + return false +} + +func auth_do_handler() { + for { + + msg, err := auth_handler.RecvMessage(0) + if err != nil { + if auth_verbose { + log.Println("AUTH: Quitting:", err) + } + break + } + + if msg[0] == "QUIT" { + if auth_verbose { + log.Println("AUTH: Quitting: received QUIT message") + } + _, err := auth_handler.SendMessage("QUIT") + if err != nil && auth_verbose { + log.Println("AUTH: Quitting: bouncing QUIT message:", err) + } + break + } + + version := msg[0] + if version != "1.0" { + panic("AUTH: version != 1.0") + } + + request_id := msg[1] + domain := msg[2] + address := msg[3] + identity := msg[4] + mechanism := msg[5] + credentials := msg[6:] + + username := "" + password := "" + client_key := "" + if mechanism == "PLAIN" { + username = msg[6] + password = msg[7] + } else if mechanism == "CURVE" { + s := msg[6] + if len(s) != 32 { + panic("AUTH: len(client_key) != 32") + } + client_key = Z85encode(s) + } + + allowed := false + denied := false + + if auth_has_allow(domain) { + if auth_is_allowed(domain, address) { + allowed = true + if auth_verbose { + log.Printf("AUTH: PASSED (whitelist) domain=%q address=%q\n", domain, address) + } + } else { + denied = true + if auth_verbose { + log.Printf("AUTH: DENIED (not in whitelist) domain=%q address=%q\n", domain, address) + } + } + } else if auth_has_deny(domain) { + if auth_is_denied(domain, address) { + denied = true + if auth_verbose { + log.Printf("AUTH: DENIED (blacklist) domain=%q address=%q\n", domain, address) + } + } else { + allowed = true + if auth_verbose { + log.Printf("AUTH: PASSED (not in blacklist) domain=%q address=%q\n", domain, address) + } + } + } + + // Mechanism-specific checks + if !denied { + if mechanism == "NULL" && !allowed { + // For NULL, we allow if the address wasn't blacklisted + if auth_verbose { + log.Printf("AUTH: ALLOWED (NULL)\n") + } + allowed = true + } else if mechanism == "PLAIN" { + // For PLAIN, even a whitelisted address must authenticate + allowed = authenticate_plain(domain, username, password) + } else if mechanism == "CURVE" { + // For CURVE, even a whitelisted address must authenticate + allowed = authenticate_curve(domain, client_key) + } + } + if allowed { + m := auth_meta_handler(version, request_id, domain, address, identity, mechanism, credentials...) + user_id := "" + if uid, ok := m["User-Id"]; ok { + user_id = uid + delete(m, "User-Id") + } + metadata := make([]byte, 0) + for key, value := range m { + if len(key) < 256 { + metadata = append(metadata, auth_meta_blob(key, value)...) + } + } + auth_handler.SendMessage(version, request_id, "200", "OK", user_id, metadata) + } else { + auth_handler.SendMessage(version, request_id, "400", "NO ACCESS", "", "") + } + } + + err := auth_handler.Close() + if err != nil && auth_verbose { + log.Println("AUTH: Quitting: Close:", err) + } + if auth_verbose { + log.Println("AUTH: Quit") + } +} + +func authenticate_plain(domain, username, password string) bool { + for _, dom := range []string{domain, "*"} { + if m, ok := auth_users[dom]; ok { + if m[username] == password { + if auth_verbose { + log.Printf("AUTH: ALLOWED (PLAIN) domain=%q username=%q password=%q\n", dom, username, password) + } + return true + } + } + } + if auth_verbose { + log.Printf("AUTH: DENIED (PLAIN) domain=%q username=%q password=%q\n", domain, username, password) + } + return false +} + +func authenticate_curve(domain, client_key string) bool { + for _, dom := range []string{domain, "*"} { + if m, ok := auth_pubkeys[dom]; ok { + if m[CURVE_ALLOW_ANY] { + if auth_verbose { + log.Printf("AUTH: ALLOWED (CURVE any client) domain=%q\n", dom) + } + return true + } + if m[client_key] { + if auth_verbose { + log.Printf("AUTH: ALLOWED (CURVE) domain=%q client_key=%q\n", dom, client_key) + } + return true + } + } + } + if auth_verbose { + log.Printf("AUTH: DENIED (CURVE) domain=%q client_key=%q\n", domain, client_key) + } + return false +} + +// Start authentication. +// +// Note that until you add policies, all incoming NULL connections are allowed +// (classic ZeroMQ behaviour), and all PLAIN and CURVE connections are denied. +func AuthStart() (err error) { + if auth_init { + if auth_verbose { + log.Println("AUTH: Already running") + } + return errors.New("Auth is already running") + } + + auth_handler, err = NewSocket(REP) + if err != nil { + return + } + auth_handler.SetLinger(0) + err = auth_handler.Bind("inproc://zeromq.zap.01") + if err != nil { + auth_handler.Close() + return + } + + auth_quit, err = NewSocket(REQ) + if err != nil { + auth_handler.Close() + return + } + auth_quit.SetLinger(0) + err = auth_quit.Connect("inproc://zeromq.zap.01") + if err != nil { + auth_handler.Close() + auth_quit.Close() + return + } + + go auth_do_handler() + + if auth_verbose { + log.Println("AUTH: Starting") + } + + auth_init = true + + return +} + +// Stop authentication. +func AuthStop() { + if !auth_init { + if auth_verbose { + log.Println("AUTH: Not running, can't stop") + } + return + } + if auth_verbose { + log.Println("AUTH: Stopping") + } + _, err := auth_quit.SendMessageDontwait("QUIT") + if err != nil && auth_verbose { + log.Println("AUTH: Stopping: SendMessageDontwait(\"QUIT\"):", err) + } + _, err = auth_quit.RecvMessage(0) + if err != nil && auth_verbose { + log.Println("AUTH: Stopping: RecvMessage:", err) + } + err = auth_quit.Close() + if err != nil && auth_verbose { + log.Println("AUTH: Stopping: Close:", err) + } + if auth_verbose { + log.Println("AUTH: Stopped") + } + + auth_init = false + +} + +// Allow (whitelist) some addresses for a domain. +// +// An address can be a single IP address, or an IP address and mask in CIDR notation. +// +// For NULL, all clients from these addresses will be accepted. +// +// For PLAIN and CURVE, they will be allowed to continue with authentication. +// +// You can call this method multiple times to whitelist multiple IP addresses. +// +// If you whitelist a single address for a domain, any non-whitelisted addresses +// for that domain are treated as blacklisted. +// +// Use domain "*" for all domains. +// +// For backward compatibility: if domain can be parsed as an IP address, it will be +// interpreted as another address, and it and all remaining addresses will be added +// to all domains. +func AuthAllow(domain string, addresses ...string) { + if auth_isIP(domain) { + auth_allow_for_domain("*", domain) + auth_allow_for_domain("*", addresses...) + } else { + auth_allow_for_domain(domain, addresses...) + } +} + +func auth_allow_for_domain(domain string, addresses ...string) { + if _, ok := auth_allow[domain]; !ok { + auth_allow[domain] = make(map[string]bool) + auth_allow_net[domain] = make([]*net.IPNet, 0) + } + for _, address := range addresses { + if _, ipnet, err := net.ParseCIDR(address); err == nil { + auth_allow_net[domain] = append(auth_allow_net[domain], ipnet) + } else if net.ParseIP(address) != nil { + auth_allow[domain][address] = true + } else { + if auth_verbose { + log.Printf("AUTH: Allow for domain %q: %q is not a valid address or network\n", domain, address) + } + } + } +} + +// Deny (blacklist) some addresses for a domain. +// +// An address can be a single IP address, or an IP address and mask in CIDR notation. +// +// For all security mechanisms, this rejects the connection without any further authentication. +// +// Use either a whitelist for a domain, or a blacklist for a domain, not both. +// If you define both a whitelist and a blacklist for a domain, only the whitelist takes effect. +// +// Use domain "*" for all domains. +// +// For backward compatibility: if domain can be parsed as an IP address, it will be +// interpreted as another address, and it and all remaining addresses will be added +// to all domains. +func AuthDeny(domain string, addresses ...string) { + if auth_isIP(domain) { + auth_deny_for_domain("*", domain) + auth_deny_for_domain("*", addresses...) + } else { + auth_deny_for_domain(domain, addresses...) + } +} + +func auth_deny_for_domain(domain string, addresses ...string) { + if _, ok := auth_deny[domain]; !ok { + auth_deny[domain] = make(map[string]bool) + auth_deny_net[domain] = make([]*net.IPNet, 0) + } + for _, address := range addresses { + if _, ipnet, err := net.ParseCIDR(address); err == nil { + auth_deny_net[domain] = append(auth_deny_net[domain], ipnet) + } else if net.ParseIP(address) != nil { + auth_deny[domain][address] = true + } else { + if auth_verbose { + log.Printf("AUTH: Deny for domain %q: %q is not a valid address or network\n", domain, address) + } + } + } +} + +// Add a user for PLAIN authentication for a given domain. +// +// Set `domain` to "*" to apply to all domains. +func AuthPlainAdd(domain, username, password string) { + if _, ok := auth_users[domain]; !ok { + auth_users[domain] = make(map[string]string) + } + auth_users[domain][username] = password +} + +// Remove users from PLAIN authentication for a given domain. +func AuthPlainRemove(domain string, usernames ...string) { + if u, ok := auth_users[domain]; ok { + for _, username := range usernames { + delete(u, username) + } + } +} + +// Remove all users from PLAIN authentication for a given domain. +func AuthPlainRemoveAll(domain string) { + delete(auth_users, domain) +} + +// Add public user keys for CURVE authentication for a given domain. +// +// To cover all domains, use "*". +// +// Public keys are in Z85 printable text format. +// +// To allow all client keys without checking, specify CURVE_ALLOW_ANY for the key. +func AuthCurveAdd(domain string, pubkeys ...string) { + if _, ok := auth_pubkeys[domain]; !ok { + auth_pubkeys[domain] = make(map[string]bool) + } + for _, key := range pubkeys { + auth_pubkeys[domain][key] = true + } +} + +// Remove user keys from CURVE authentication for a given domain. +func AuthCurveRemove(domain string, pubkeys ...string) { + if p, ok := auth_pubkeys[domain]; ok { + for _, pubkey := range pubkeys { + delete(p, pubkey) + } + } +} + +// Remove all user keys from CURVE authentication for a given domain. +func AuthCurveRemoveAll(domain string) { + delete(auth_pubkeys, domain) +} + +// Enable verbose tracing of commands and activity. +func AuthSetVerbose(verbose bool) { + auth_verbose = verbose +} + +/* +This function sets the metadata handler that is called by the ZAP +handler to retrieve key/value properties that should be set on reply +messages in case of a status code "200" (succes). + +Default properties are `Socket-Type`, which is already set, and +`Identity` and `User-Id` that are empty by default. The last two can be +set, and more properties can be added. + +The `User-Id` property is used for the `user id` frame of the reply +message. All other properties are stored in the `metadata` frame of the +reply message. + +The default handler returns an empty map. + +For the meaning of the handler arguments, and other details, see: +http://rfc.zeromq.org/spec:27#toc10 +*/ +func AuthSetMetadataHandler( + handler func( + version, request_id, domain, address, identity, mechanism string, credentials ...string) (metadata map[string]string)) { + auth_meta_handler = handler +} + +/* +This encodes a key/value pair into the format used by a ZAP handler. + +Returns an error if key is more then 255 characters long. +*/ +func AuthMetaBlob(key, value string) (blob []byte, err error) { + if len(key) > 255 { + return []byte{}, errors.New("Key too long") + } + return auth_meta_blob(key, value), nil +} + +func auth_meta_blob(name, value string) []byte { + l1 := len(name) + l2 := len(value) + b := make([]byte, l1+l2+5) + b[0] = byte(l1) + b[l1+1] = byte(l2 >> 24 & 255) + b[l1+2] = byte(l2 >> 16 & 255) + b[l1+3] = byte(l2 >> 8 & 255) + b[l1+4] = byte(l2 & 255) + copy(b[1:], []byte(name)) + copy(b[5+l1:], []byte(value)) + return b +} + +//. Additional functions for configuring server or client socket with a single command + +// Set NULL server role. +func (server *Socket) ServerAuthNull(domain string) error { + err := server.SetPlainServer(0) + if err == nil { + err = server.SetZapDomain(domain) + } + return err +} + +// Set PLAIN server role. +func (server *Socket) ServerAuthPlain(domain string) error { + err := server.SetPlainServer(1) + if err == nil { + err = server.SetZapDomain(domain) + } + return err +} + +// Set CURVE server role. +func (server *Socket) ServerAuthCurve(domain, secret_key string) error { + err := server.SetCurveServer(1) + if err == nil { + err = server.SetCurveSecretkey(secret_key) + } + if err == nil { + err = server.SetZapDomain(domain) + } + return err +} + +// Set PLAIN client role. +func (client *Socket) ClientAuthPlain(username, password string) error { + err := client.SetPlainUsername(username) + if err == nil { + err = client.SetPlainPassword(password) + } + return err +} + +// Set CURVE client role. +func (client *Socket) ClientAuthCurve(server_public_key, client_public_key, client_secret_key string) error { + err := client.SetCurveServerkey(server_public_key) + if err == nil { + err = client.SetCurvePublickey(client_public_key) + } + if err == nil { + client.SetCurveSecretkey(client_secret_key) + } + return err +} + +// Helper function to derive z85 public key from secret key +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +func AuthCurvePublic(z85SecretKey string) (z85PublicKey string, err error) { + if minor < 2 { + return "", ErrorNotImplemented42 + } + secret := C.CString(z85SecretKey) + defer C.free(unsafe.Pointer(secret)) + public := C.CString(strings.Repeat(" ", 41)) + defer C.free(unsafe.Pointer(public)) + if i, err := C.zmq_curve_public(public, secret); int(i) != 0 { + return "", errget(err) + } + z85PublicKey = C.GoString(public) + return z85PublicKey, nil +} diff --git a/vendor/github.com/pebbe/zmq4/auth_test.go b/vendor/github.com/pebbe/zmq4/auth_test.go new file mode 100644 index 0000000..2ef5290 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/auth_test.go @@ -0,0 +1,144 @@ +package zmq4_test + +import ( + zmq "github.com/pebbe/zmq4" + + "testing" +) + +func TestAuthCurvePublic(t *testing.T) { + if _, minor, _ := zmq.Version(); minor < 2 { + t.Skip("CurvePublic not available in ZeroMQ versions prior to 4.2.0") + } + expected := "Yne@$w-vo= 1 && !zmq.HasCurve() { + t.Skip("Curve not available") + } + + type Meta struct { + key string + value string + ok bool + } + + zmq.AuthSetVerbose(false) + + // Start authentication engine + err := zmq.AuthStart() + if err != nil { + t.Fatal("AuthStart:", err) + } + defer zmq.AuthStop() + + zmq.AuthSetMetadataHandler( + func(version, request_id, domain, address, identity, mechanism string, credentials ...string) (metadata map[string]string) { + return map[string]string{ + "Identity": identity, + "User-Id": "anonymous", + "Hello": "World!", + "Foo": "Bar", + } + }) + + zmq.AuthAllow("domain1", "127.0.0.1") + + // We need two certificates, one for the client and one for + // the server. The client must know the server's public key + // to make a CURVE connection. + client_public, client_secret, err := zmq.NewCurveKeypair() + if err != nil { + t.Fatal("NewCurveKeypair:", err) + } + server_public, server_secret, err := zmq.NewCurveKeypair() + if err != nil { + t.Fatal("NewCurveKeypair:", err) + } + + // Tell authenticator to use this public client key + zmq.AuthCurveAdd("domain1", client_public) + + // Create and bind server socket + server, err := zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer func() { + server.SetLinger(0) + server.Close() + }() + server.SetIdentity("Server1") + server.ServerAuthCurve("domain1", server_secret) + err = server.Bind("tcp://*:9000") + if err != nil { + t.Fatal("server.Bind:", err) + } + + // Create and connect client socket + client, err := zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer func() { + client.SetLinger(0) + client.Close() + }() + server.SetIdentity("Client1") + client.ClientAuthCurve(server_public, client_public, client_secret) + err = client.Connect("tcp://127.0.0.1:9000") + if err != nil { + t.Fatal("client.Connect:", err) + } + + // Send a message from client to server + msg := []string{"Greetings", "Earthlings!"} + _, err = client.SendMessage(msg[0], msg[1]) + if err != nil { + t.Fatal("client.SendMessage:", err) + } + + // Receive message and metadata on the server + tests := []Meta{ + {"Identity", "Server1", true}, + {"User-Id", "anonymous", true}, + {"Socket-Type", "DEALER", true}, + {"Hello", "World!", true}, + {"Foo", "Bar", true}, + {"Fuz", "", false}, + } + keys := make([]string, len(tests)) + for i, test := range tests { + keys[i] = test.key + } + message, metadata, err := server.RecvMessageWithMetadata(0, keys...) + if err != nil { + t.Fatal("server.RecvMessageWithMetadata:", err) + } + if !arrayEqual(message, msg) { + t.Errorf("Received message was %q, expected %q", message, msg) + } + if _, minor, _ := zmq.Version(); minor < 1 { + t.Log("Metadata not avalable in ZeroMQ versions prior to 4.1.0") + } else { + for _, test := range tests { + value, ok := metadata[test.key] + if value != test.value || ok != test.ok { + t.Errorf("Metadata %s, expected %q %v, got %q %v", test.key, test.value, test.ok, value, ok) + } + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/ctxoptions_unix.go b/vendor/github.com/pebbe/zmq4/ctxoptions_unix.go new file mode 100644 index 0000000..c980cd1 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/ctxoptions_unix.go @@ -0,0 +1,56 @@ +// +build !windows + +package zmq4 + +/* +#include +#include "zmq4.h" +*/ +import "C" + +/* +Sets the scheduling policy for internal context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func (ctx *Context) SetThreadSchedPolicy(n int) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return setOption(ctx, C.ZMQ_THREAD_SCHED_POLICY, n) +} + +/* +Sets scheduling priority for internal context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option depend on chosen scheduling policy. +Details can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func (ctx *Context) SetThreadPriority(n int) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return setOption(ctx, C.ZMQ_THREAD_PRIORITY, n) +} diff --git a/vendor/github.com/pebbe/zmq4/ctxoptions_windows.go b/vendor/github.com/pebbe/zmq4/ctxoptions_windows.go new file mode 100644 index 0000000..b976013 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/ctxoptions_windows.go @@ -0,0 +1,44 @@ +// +build windows + +package zmq4 + +/* +Sets the scheduling policy for internal context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func (ctx *Context) SetThreadSchedPolicy(n int) error { + return ErrorNotImplementedWindows +} + +/* +Sets scheduling priority for internal context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option depend on chosen scheduling policy. +Details can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func (ctx *Context) SetThreadPriority(n int) error { + return ErrorNotImplementedWindows +} diff --git a/vendor/github.com/pebbe/zmq4/doc.go b/vendor/github.com/pebbe/zmq4/doc.go new file mode 100644 index 0000000..eee1186 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/doc.go @@ -0,0 +1,20 @@ +/* +A Go interface to ZeroMQ (zmq, 0mq) version 4. + +For ZeroMQ version 3, see: http://github.com/pebbe/zmq3 + +For ZeroMQ version 2, see: http://github.com/pebbe/zmq2 + +http://www.zeromq.org/ + +See also the wiki: https://github.com/pebbe/zmq4/wiki + +A note on the use of a context: + +This package provides a default context. This is what will be used by +the functions without a context receiver, that create a socket or +manipulate the context. Package developers that import this package +should probably not use the default context with its associated +functions, but create their own context(s). See: type Context. +*/ +package zmq4 diff --git a/vendor/github.com/pebbe/zmq4/dummy.c b/vendor/github.com/pebbe/zmq4/dummy.c new file mode 100644 index 0000000..0fca94d --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/dummy.c @@ -0,0 +1,5 @@ +/* + +You need CGO_ENABLED=1 to build this package + +*/ diff --git a/vendor/github.com/pebbe/zmq4/errors.go b/vendor/github.com/pebbe/zmq4/errors.go new file mode 100644 index 0000000..48dcdc3 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/errors.go @@ -0,0 +1,92 @@ +package zmq4 + +/* +#include +*/ +import "C" + +import ( + "syscall" +) + +// An Errno is an unsigned number describing an error condition as returned by a call to ZeroMQ. +// It implements the error interface. +// The number is either a standard system error, or an error defined by the C library of ZeroMQ. +type Errno uintptr + +const ( + // Error conditions defined by the C library of ZeroMQ. + + // On Windows platform some of the standard POSIX errnos are not defined. + EADDRINUSE = Errno(C.EADDRINUSE) + EADDRNOTAVAIL = Errno(C.EADDRNOTAVAIL) + EAFNOSUPPORT = Errno(C.EAFNOSUPPORT) + ECONNABORTED = Errno(C.ECONNABORTED) + ECONNREFUSED = Errno(C.ECONNREFUSED) + ECONNRESET = Errno(C.ECONNRESET) + EHOSTUNREACH = Errno(C.EHOSTUNREACH) + EINPROGRESS = Errno(C.EINPROGRESS) + EMSGSIZE = Errno(C.EMSGSIZE) + ENETDOWN = Errno(C.ENETDOWN) + ENETRESET = Errno(C.ENETRESET) + ENETUNREACH = Errno(C.ENETUNREACH) + ENOBUFS = Errno(C.ENOBUFS) + ENOTCONN = Errno(C.ENOTCONN) + ENOTSOCK = Errno(C.ENOTSOCK) + ENOTSUP = Errno(C.ENOTSUP) + EPROTONOSUPPORT = Errno(C.EPROTONOSUPPORT) + ETIMEDOUT = Errno(C.ETIMEDOUT) + + // Native 0MQ error codes. + EFSM = Errno(C.EFSM) + EMTHREAD = Errno(C.EMTHREAD) + ENOCOMPATPROTO = Errno(C.ENOCOMPATPROTO) + ETERM = Errno(C.ETERM) +) + +func errget(err error) error { + eno, ok := err.(syscall.Errno) + if ok { + return Errno(eno) + } + return err +} + +// Return Errno as string. +func (errno Errno) Error() string { + if errno >= C.ZMQ_HAUSNUMERO { + return C.GoString(C.zmq_strerror(C.int(errno))) + } + return syscall.Errno(errno).Error() +} + +/* +Convert error to Errno. + +Example usage: + + switch AsErrno(err) { + + case zmq.Errno(syscall.EINTR): + // standard system error + + // call was interrupted + + case zmq.ETERM: + // error defined by ZeroMQ + + // context was terminated + + } + +See also: examples/interrupt.go +*/ +func AsErrno(err error) Errno { + if eno, ok := err.(Errno); ok { + return eno + } + if eno, ok := err.(syscall.Errno); ok { + return Errno(eno) + } + return Errno(0) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/Build.sh b/vendor/github.com/pebbe/zmq4/examples/Build.sh new file mode 100755 index 0000000..58b7dc0 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/Build.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +go get github.com/pborman/uuid + +for i in bstar mdapi flcliapi kvsimple kvmsg clone intface +do + go install github.com/pebbe/zmq4/examples/$i +done + +cd `dirname $0` + +goos=`go env GOOS` +gobin=`go env GOBIN` +if [ "$gobin" = "" ] +then + gobin=`go env GOPATH` + if [ "$gobin" = "" ] + then + gobin=`go env GOROOT` + fi + gobin=`echo $gobin | sed -e 's/:.*//'` + gobin=$gobin/bin +fi + +dir=$gobin/zmq4-examples + +echo Installing examples in $dir + +mkdir -p $dir + +for i in *.sh +do + if [ $i != Build.sh ] + then + cp -u $i $dir + fi +done + +src='' +for i in *.go +do + if [ $i = interrupt.go ] + then + if [ $goos = windows -o $goos = plan9 ] + then + continue + fi + fi + bin=$dir/`basename $i .go` + if [ ! -f $bin -o $i -nt $bin ] + then + src="$src $i" + fi +done + +libs=`pkg-config --libs-only-L libzmq` +if [ "$libs" = "" ] +then + for i in $src + do + go build -o $dir/`basename $i .go` $i + done +else + libs="-r `echo $libs | sed -e 's/-L//; s/ *-L/:/g'`" + for i in $src + do + go build -ldflags="$libs" -o $dir/`basename $i .go` $i + done +fi diff --git a/vendor/github.com/pebbe/zmq4/examples/README.md b/vendor/github.com/pebbe/zmq4/examples/README.md new file mode 100644 index 0000000..764a7ea --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/README.md @@ -0,0 +1,2 @@ +These are examples from [ØMQ - The Guide](http://zguide.zeromq.org/page:all), +re-implemented for the current Go package. diff --git a/vendor/github.com/pebbe/zmq4/examples/asyncsrv.go b/vendor/github.com/pebbe/zmq4/examples/asyncsrv.go new file mode 100644 index 0000000..3c08e9d --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/asyncsrv.go @@ -0,0 +1,138 @@ +// +// Asynchronous client-to-server (DEALER to ROUTER). +// +// While this example runs in a single process, that is just to make +// it easier to start and stop the example. Each task has its own +// context and conceptually acts as a separate process. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "math/rand" + "sync" + "time" +) + +// --------------------------------------------------------------------- +// This is our client task +// It connects to the server, and then sends a request once per second +// It collects responses as they arrive, and it prints them out. We will +// run several client tasks in parallel, each with a different random ID. + +func client_task() { + var mu sync.Mutex + + client, _ := zmq.NewSocket(zmq.DEALER) + defer client.Close() + + // Set random identity to make tracing easier + set_id(client) + client.Connect("tcp://localhost:5570") + + go func() { + for request_nbr := 1; true; request_nbr++ { + time.Sleep(time.Second) + mu.Lock() + client.SendMessage(fmt.Sprintf("request #%d", request_nbr)) + mu.Unlock() + } + }() + + for { + time.Sleep(10 * time.Millisecond) + mu.Lock() + msg, err := client.RecvMessage(zmq.DONTWAIT) + if err == nil { + id, _ := client.GetIdentity() + fmt.Println(msg[0], id) + } + mu.Unlock() + } +} + +// This is our server task. +// It uses the multithreaded server model to deal requests out to a pool +// of workers and route replies back to clients. One worker can handle +// one request at a time but one client can talk to multiple workers at +// once. + +func server_task() { + + // Frontend socket talks to clients over TCP + frontend, _ := zmq.NewSocket(zmq.ROUTER) + defer frontend.Close() + frontend.Bind("tcp://*:5570") + + // Backend socket talks to workers over inproc + backend, _ := zmq.NewSocket(zmq.DEALER) + defer backend.Close() + backend.Bind("inproc://backend") + + // Launch pool of worker threads, precise number is not critical + for i := 0; i < 5; i++ { + go server_worker() + } + + // Connect backend to frontend via a proxy + err := zmq.Proxy(frontend, backend, nil) + log.Fatalln("Proxy interrupted:", err) +} + +// Each worker task works on one request at a time and sends a random number +// of replies back, with random delays between replies: + +func server_worker() { + + worker, _ := zmq.NewSocket(zmq.DEALER) + defer worker.Close() + worker.Connect("inproc://backend") + + for { + // The DEALER socket gives us the reply envelope and message + msg, _ := worker.RecvMessage(0) + identity, content := pop(msg) + + // Send 0..4 replies back + replies := rand.Intn(5) + for reply := 0; reply < replies; reply++ { + // Sleep for some fraction of a second + time.Sleep(time.Duration(rand.Intn(1000)+1) * time.Millisecond) + worker.SendMessage(identity, content) + } + } +} + +// The main thread simply starts several clients, and a server, and then +// waits for the server to finish. + +func main() { + rand.Seed(time.Now().UnixNano()) + + go client_task() + go client_task() + go client_task() + go server_task() + + // Run for 5 seconds then quit + time.Sleep(5 * time.Second) +} + +func set_id(soc *zmq.Socket) { + identity := fmt.Sprintf("%04X-%04X", rand.Intn(0x10000), rand.Intn(0x10000)) + soc.SetIdentity(identity) +} + +func pop(msg []string) (head, tail []string) { + if msg[1] == "" { + head = msg[:2] + tail = msg[2:] + } else { + head = msg[:1] + tail = msg[1:] + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/bstar/bstar.go b/vendor/github.com/pebbe/zmq4/examples/bstar/bstar.go new file mode 100644 index 0000000..0061aff --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/bstar/bstar.go @@ -0,0 +1,275 @@ +// bstar - Binary Star reactor. +package bstar + +import ( + zmq "github.com/pebbe/zmq4" + + "errors" + "log" + "strconv" + "time" +) + +const ( + PRIMARY = true + BACKUP = false +) + +// States we can be in at any point in time +type state_t int + +const ( + _ = state_t(iota) + state_PRIMARY // Primary, waiting for peer to connect + state_BACKUP // Backup, waiting for peer to connect + state_ACTIVE // Active - accepting connections + state_PASSIVE // Passive - not accepting connections +) + +// Events, which start with the states our peer can be in +type event_t int + +const ( + _ = event_t(iota) + peer_PRIMARY // HA peer is pending primary + peer_BACKUP // HA peer is pending backup + peer_ACTIVE // HA peer is active + peer_PASSIVE // HA peer is passive + client_REQUEST // Client makes request +) + +// Structure of our class + +type Bstar struct { + Reactor *zmq.Reactor // Reactor loop + statepub *zmq.Socket // State publisher + statesub *zmq.Socket // State subscriber + state state_t // Current state + event event_t // Current event + peer_expiry time.Time // When peer is considered 'dead' + voter_fn func(*zmq.Socket) error // Voting socket handler + active_fn func() error // Call when become active + passive_fn func() error // Call when become passive +} + +// The finite-state machine is the same as in the proof-of-concept server. +// To understand this reactor in detail, first read the CZMQ zloop class. + +// We send state information every this often +// If peer doesn't respond in two heartbeats, it is 'dead' +const ( + bstar_HEARTBEAT = 1000 * time.Millisecond // In msecs +) + +// --------------------------------------------------------------------- +// Binary Star finite state machine (applies event to state) +// Returns error if there was an exception, nil if event was valid. + +func (bstar *Bstar) execute_fsm() (exception error) { + // Primary server is waiting for peer to connect + // Accepts client_REQUEST events in this state + if bstar.state == state_PRIMARY { + if bstar.event == peer_BACKUP { + log.Println("I: connected to backup (passive), ready as active") + bstar.state = state_ACTIVE + if bstar.active_fn != nil { + bstar.active_fn() + } + } else if bstar.event == peer_ACTIVE { + log.Println("I: connected to backup (active), ready as passive") + bstar.state = state_PASSIVE + if bstar.passive_fn != nil { + bstar.passive_fn() + } + } else if bstar.event == client_REQUEST { + // Allow client requests to turn us into the active if we've + // waited sufficiently long to believe the backup is not + // currently acting as active (i.e., after a failover) + if time.Now().After(bstar.peer_expiry) { + log.Println("I: request from client, ready as active") + bstar.state = state_ACTIVE + if bstar.active_fn != nil { + bstar.active_fn() + } + } else { + // Don't respond to clients yet - it's possible we're + // performing a failback and the backup is currently active + exception = errors.New("Exception") + } + } + } else if bstar.state == state_BACKUP { + // Backup server is waiting for peer to connect + // Rejects client_REQUEST events in this state + if bstar.event == peer_ACTIVE { + log.Println("I: connected to primary (active), ready as passive") + bstar.state = state_PASSIVE + if bstar.passive_fn != nil { + bstar.passive_fn() + } + } else if bstar.event == client_REQUEST { + exception = errors.New("Exception") + } + } else if bstar.state == state_ACTIVE { + // Server is active + // Accepts client_REQUEST events in this state + // The only way out of ACTIVE is death + if bstar.event == peer_ACTIVE { + // Two actives would mean split-brain + log.Println("E: fatal error - dual actives, aborting") + exception = errors.New("Exception") + } + } else if bstar.state == state_PASSIVE { + // Server is passive + // client_REQUEST events can trigger failover if peer looks dead + if bstar.event == peer_PRIMARY { + // Peer is restarting - become active, peer will go passive + log.Println("I: primary (passive) is restarting, ready as active") + bstar.state = state_ACTIVE + } else if bstar.event == peer_BACKUP { + // Peer is restarting - become active, peer will go passive + log.Println("I: backup (passive) is restarting, ready as active") + bstar.state = state_ACTIVE + } else if bstar.event == peer_PASSIVE { + // Two passives would mean cluster would be non-responsive + log.Println("E: fatal error - dual passives, aborting") + exception = errors.New("Exception") + } else if bstar.event == client_REQUEST { + // Peer becomes active if timeout has passed + // It's the client request that triggers the failover + if time.Now().After(bstar.peer_expiry) { + // If peer is dead, switch to the active state + log.Println("I: failover successful, ready as active") + bstar.state = state_ACTIVE + } else { + // If peer is alive, reject connections + exception = errors.New("Exception") + } + } + // Call state change handler if necessary + if bstar.state == state_ACTIVE && bstar.active_fn != nil { + bstar.active_fn() + } + } + return +} + +func (bstar *Bstar) update_peer_expiry() { + bstar.peer_expiry = time.Now().Add(2 * bstar_HEARTBEAT) +} + +// --------------------------------------------------------------------- +// Reactor event handlers... + +// Publish our state to peer +func (bstar *Bstar) send_state() (err error) { + _, err = bstar.statepub.SendMessage(int(bstar.state)) + return +} + +// Receive state from peer, execute finite state machine +func (bstar *Bstar) recv_state() (err error) { + msg, err := bstar.statesub.RecvMessage(0) + if err == nil { + e, _ := strconv.Atoi(msg[0]) + bstar.event = event_t(e) + } + return bstar.execute_fsm() +} + +// Application wants to speak to us, see if it's possible +func (bstar *Bstar) voter_ready(socket *zmq.Socket) error { + // If server can accept input now, call appl handler + bstar.event = client_REQUEST + err := bstar.execute_fsm() + if err == nil { + bstar.voter_fn(socket) + } else { + // Destroy waiting message, no-one to read it + socket.RecvMessage(0) + } + return nil +} + +// This is the constructor for our bstar class. We have to tell it whether +// we're primary or backup server, and our local and remote endpoints to +// bind and connect to: + +func New(primary bool, local, remote string) (bstar *Bstar, err error) { + + bstar = &Bstar{} + + // Initialize the Binary Star + bstar.Reactor = zmq.NewReactor() + if primary { + bstar.state = state_PRIMARY + } else { + bstar.state = state_BACKUP + } + + // Create publisher for state going to peer + bstar.statepub, err = zmq.NewSocket(zmq.PUB) + bstar.statepub.Bind(local) + + // Create subscriber for state coming from peer + bstar.statesub, err = zmq.NewSocket(zmq.SUB) + bstar.statesub.SetSubscribe("") + bstar.statesub.Connect(remote) + + // Set-up basic reactor events + bstar.Reactor.AddChannelTime(time.Tick(bstar_HEARTBEAT), 1, + func(i interface{}) error { return bstar.send_state() }) + bstar.Reactor.AddSocket(bstar.statesub, zmq.POLLIN, + func(e zmq.State) error { return bstar.recv_state() }) + + return +} + +// The voter method registers a client voter socket. Messages received +// on this socket provide the client_REQUEST events for the Binary Star +// FSM and are passed to the provided application handler. We require +// exactly one voter per bstar instance: + +func (bstar *Bstar) Voter(endpoint string, socket_type zmq.Type, handler func(*zmq.Socket) error) { + // Hold actual handler so we can call this later + socket, _ := zmq.NewSocket(socket_type) + socket.Bind(endpoint) + if bstar.voter_fn != nil { + panic("Double voter function") + } + bstar.voter_fn = handler + bstar.Reactor.AddSocket(socket, zmq.POLLIN, + func(e zmq.State) error { return bstar.voter_ready(socket) }) +} + +// Register handlers to be called each time there's a state change: + +func (bstar *Bstar) NewActive(handler func() error) { + if bstar.active_fn != nil { + panic("Double Active") + } + bstar.active_fn = handler +} + +func (bstar *Bstar) NewPassive(handler func() error) { + if bstar.passive_fn != nil { + panic("Double Passive") + } + bstar.passive_fn = handler +} + +// Enable/disable verbose tracing, for debugging: + +func (bstar *Bstar) SetVerbose(verbose bool) { + bstar.Reactor.SetVerbose(verbose) +} + +//? Finally, start the configured reactor. It will end if any handler +//? returns error to the reactor, or if the process receives SIGINT or SIGTERM: + +func (bstar *Bstar) Start() error { + if bstar.voter_fn == nil { + panic("Missing voter function") + } + bstar.update_peer_expiry() + return bstar.Reactor.Run(bstar_HEARTBEAT / 5) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/bstarcli.go b/vendor/github.com/pebbe/zmq4/examples/bstarcli.go new file mode 100644 index 0000000..0d7fdc7 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/bstarcli.go @@ -0,0 +1,83 @@ +// +// Binary Star client proof-of-concept implementation. This client does no +// real work; it just demonstrates the Binary Star failover model. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "strconv" + "time" +) + +const ( + REQUEST_TIMEOUT = 1000 * time.Millisecond // msecs + SETTLE_DELAY = 2000 * time.Millisecond // Before failing over +) + +func main() { + + server := []string{"tcp://localhost:5001", "tcp://localhost:5002"} + server_nbr := 0 + + fmt.Printf("I: connecting to server at %s...\n", server[server_nbr]) + client, _ := zmq.NewSocket(zmq.REQ) + client.Connect(server[server_nbr]) + + poller := zmq.NewPoller() + poller.Add(client, zmq.POLLIN) + + sequence := 0 +LOOP: + for { + // We send a request, then we work to get a reply + sequence++ + client.SendMessage(sequence) + + for expect_reply := true; expect_reply; { + // Poll socket for a reply, with timeout + polled, err := poller.Poll(REQUEST_TIMEOUT) + if err != nil { + break LOOP // Interrupted + } + + // We use a Lazy Pirate strategy in the client. If there's no + // reply within our timeout, we close the socket and try again. + // In Binary Star, it's the client vote which decides which + // server is primary; the client must therefore try to connect + // to each server in turn: + + if len(polled) == 1 { + // We got a reply from the server, must match sequence + reply, _ := client.RecvMessage(0) + seq, _ := strconv.Atoi(reply[0]) + if seq == sequence { + fmt.Printf("I: server replied OK (%s)\n", reply[0]) + expect_reply = false + time.Sleep(time.Second) // One request per second + } else { + fmt.Printf("E: bad reply from server: %q\n", reply) + } + + } else { + fmt.Println("W: no response from server, failing over") + + // Old socket is confused; close it and open a new one + client.Close() + server_nbr = 1 - server_nbr + time.Sleep(SETTLE_DELAY) + fmt.Printf("I: connecting to server at %s...\n", server[server_nbr]) + client, _ = zmq.NewSocket(zmq.REQ) + client.Connect(server[server_nbr]) + + poller = zmq.NewPoller() + poller.Add(client, zmq.POLLIN) + + // Send request again, on new socket + client.SendMessage(sequence) + } + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/bstarsrv.go b/vendor/github.com/pebbe/zmq4/examples/bstarsrv.go new file mode 100644 index 0000000..20ae9a2 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/bstarsrv.go @@ -0,0 +1,194 @@ +// +// Binary Star server proof-of-concept implementation. This server does no +// real work; it just demonstrates the Binary Star failover model. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "os" + "strconv" + "time" +) + +// States we can be in at any point in time +type state_t int + +const ( + _ = state_t(iota) + STATE_PRIMARY // Primary, waiting for peer to connect + STATE_BACKUP // Backup, waiting for peer to connect + STATE_ACTIVE // Active - accepting connections + STATE_PASSIVE // Passive - not accepting connections +) + +// Events, which start with the states our peer can be in +type event_t int + +const ( + _ = event_t(iota) + PEER_PRIMARY // HA peer is pending primary + PEER_BACKUP // HA peer is pending backup + PEER_ACTIVE // HA peer is active + PEER_PASSIVE // HA peer is passive + CLIENT_REQUEST // Client makes request +) + +// Our finite state machine +type bstar_t struct { + state state_t // Current state + event event_t // Current event + peer_expiry time.Time // When peer is considered 'dead' +} + +// We send state information every this often +// If peer doesn't respond in two heartbeats, it is 'dead' +const ( + HEARTBEAT = 1000 * time.Millisecond // In msecs +) + +// The heart of the Binary Star design is its finite-state machine (FSM). +// The FSM runs one event at a time. We apply an event to the current state, +// which checks if the event is accepted, and if so sets a new state: + +func StateMachine(fsm *bstar_t) (exception bool) { + // These are the PRIMARY and BACKUP states; we're waiting to become + // ACTIVE or PASSIVE depending on events we get from our peer: + if fsm.state == STATE_PRIMARY { + if fsm.event == PEER_BACKUP { + fmt.Println("I: connected to backup (passive), ready as active") + fsm.state = STATE_ACTIVE + } else if fsm.event == PEER_ACTIVE { + fmt.Println("I: connected to backup (active), ready as passive") + fsm.state = STATE_PASSIVE + } + // Accept client connections + } else if fsm.state == STATE_BACKUP { + if fsm.event == PEER_ACTIVE { + fmt.Println("I: connected to primary (active), ready as passive") + fsm.state = STATE_PASSIVE + } else if fsm.event == CLIENT_REQUEST { + // Reject client connections when acting as backup + exception = true + } + } else if fsm.state == STATE_ACTIVE { + // These are the ACTIVE and PASSIVE states: + if fsm.event == PEER_ACTIVE { + // Two actives would mean split-brain + fmt.Println("E: fatal error - dual actives, aborting") + exception = true + } + } else if fsm.state == STATE_PASSIVE { + // Server is passive + // CLIENT_REQUEST events can trigger failover if peer looks dead + if fsm.event == PEER_PRIMARY { + // Peer is restarting - become active, peer will go passive + fmt.Println("I: primary (passive) is restarting, ready as active") + fsm.state = STATE_ACTIVE + } else if fsm.event == PEER_BACKUP { + // Peer is restarting - become active, peer will go passive + fmt.Println("I: backup (passive) is restarting, ready as active") + fsm.state = STATE_ACTIVE + } else if fsm.event == PEER_PASSIVE { + // Two passives would mean cluster would be non-responsive + fmt.Println("E: fatal error - dual passives, aborting") + exception = true + } else if fsm.event == CLIENT_REQUEST { + // Peer becomes active if timeout has passed + // It's the client request that triggers the failover + if time.Now().After(fsm.peer_expiry) { + // If peer is dead, switch to the active state + fmt.Println("I: failover successful, ready as active") + fsm.state = STATE_ACTIVE + } else { + // If peer is alive, reject connections + exception = true + } + } + } + return +} + +// This is our main task. First we bind/connect our sockets with our +// peer and make sure we will get state messages correctly. We use +// three sockets; one to publish state, one to subscribe to state, and +// one for client requests/replies: + +func main() { + // Arguments can be either of: + // -p primary server, at tcp://localhost:5001 + // -b backup server, at tcp://localhost:5002 + statepub, _ := zmq.NewSocket(zmq.PUB) + statesub, _ := zmq.NewSocket(zmq.SUB) + statesub.SetSubscribe("") + frontend, _ := zmq.NewSocket(zmq.ROUTER) + fsm := &bstar_t{peer_expiry: time.Now().Add(2 * HEARTBEAT)} + + if len(os.Args) == 2 && os.Args[1] == "-p" { + fmt.Println("I: Primary active, waiting for backup (passive)") + frontend.Bind("tcp://*:5001") + statepub.Bind("tcp://*:5003") + statesub.Connect("tcp://localhost:5004") + fsm.state = STATE_PRIMARY + } else if len(os.Args) == 2 && os.Args[1] == "-b" { + fmt.Println("I: Backup passive, waiting for primary (active)") + frontend.Bind("tcp://*:5002") + statepub.Bind("tcp://*:5004") + statesub.Connect("tcp://localhost:5003") + fsm.state = STATE_BACKUP + } else { + fmt.Println("Usage: bstarsrv { -p | -b }") + return + } + // We now process events on our two input sockets, and process these + // events one at a time via our finite-state machine. Our "work" for + // a client request is simply to echo it back: + + // Set timer for next outgoing state message + send_state_at := time.Now().Add(HEARTBEAT) + + poller := zmq.NewPoller() + poller.Add(frontend, zmq.POLLIN) + poller.Add(statesub, zmq.POLLIN) + +LOOP: + for { + time_left := send_state_at.Sub(time.Now()) + if time_left < 0 { + time_left = 0 + } + polled, err := poller.Poll(time_left) + if err != nil { + break // Context has been shut down + } + for _, socket := range polled { + switch socket.Socket { + case frontend: + // Have a client request + msg, _ := frontend.RecvMessage(0) + fsm.event = CLIENT_REQUEST + if !StateMachine(fsm) { + // Answer client by echoing request back + frontend.SendMessage(msg) + } + case statesub: + // Have state from our peer, execute as event + message, _ := statesub.RecvMessage(0) + i, _ := strconv.Atoi(message[0]) + fsm.event = event_t(i) + if StateMachine(fsm) { + break LOOP // Error, so exit + } + fsm.peer_expiry = time.Now().Add(2 * HEARTBEAT) + } + } + // If we timed-out, send state to peer + if time.Now().After(send_state_at) { + statepub.SendMessage(int(fsm.state)) + send_state_at = time.Now().Add(HEARTBEAT) + } + } + fmt.Println("W: interrupted") +} diff --git a/vendor/github.com/pebbe/zmq4/examples/bstarsrv2.go b/vendor/github.com/pebbe/zmq4/examples/bstarsrv2.go new file mode 100644 index 0000000..6d5ed3c --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/bstarsrv2.go @@ -0,0 +1,43 @@ +// +// Binary Star server, using bstar reactor. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/bstar" + + "fmt" + "os" +) + +// Echo service +func echo(socket *zmq.Socket) (err error) { + msg, err := socket.RecvMessage(0) + if err != nil { + return + } + _, err = socket.SendMessage(msg) + return +} + +func main() { + // Arguments can be either of: + // -p primary server, at tcp://localhost:5001 + // -b backup server, at tcp://localhost:5002 + var bst *bstar.Bstar + if len(os.Args) == 2 && os.Args[1] == "-p" { + fmt.Println("I: Primary active, waiting for backup (passive)") + bst, _ = bstar.New(bstar.PRIMARY, "tcp://*:5003", "tcp://localhost:5004") + bst.Voter("tcp://*:5001", zmq.ROUTER, echo) + } else if len(os.Args) == 2 && os.Args[1] == "-b" { + fmt.Println("I: Backup passive, waiting for primary (active)") + bst, _ = bstar.New(bstar.BACKUP, "tcp://*:5004", "tcp://localhost:5003") + bst.Voter("tcp://*:5002", zmq.ROUTER, echo) + } else { + fmt.Println("Usage: bstarsrvs { -p | -b }") + return + } + bst.Start() +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clone/clone.go b/vendor/github.com/pebbe/zmq4/examples/clone/clone.go new file mode 100644 index 0000000..49e1935 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clone/clone.go @@ -0,0 +1,304 @@ +// Clone client API stack (multithreaded). +package clone + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvmsg" + + "fmt" + "strconv" + "time" +) + +// ===================================================================== +// Synchronous part, works in our application thread + +// --------------------------------------------------------------------- +// Structure of our class + +var ( + pipe_nmb uint64 +) + +type Clone struct { + pipe *zmq.Socket // Pipe through to clone agent +} + +// This is the thread that handles our real clone class + +// Constructor for the clone class. Note that we create +// the pipe that connects our frontend to the +// backend agent: + +func New() (clone *Clone) { + clone = &Clone{} + clone.pipe, _ = zmq.NewSocket(zmq.PAIR) + pipename := fmt.Sprint("inproc://pipe", pipe_nmb) + pipe_nmb++ + clone.pipe.Bind(pipename) + go clone_agent(pipename) + return +} + +// Specify subtree for snapshot and updates, which we must do before +// connecting to a server since the subtree specification is sent as +// first command to the server. Sends a [SUBTREE][subtree] command to +// the agent: + +func (clone *Clone) Subtree(subtree string) { + clone.pipe.SendMessage("SUBTREE", subtree) +} + +// Connect to a new server endpoint. We can connect to at most two +// servers. Sends [CONNECT][endpoint][service] to the agent: + +func (clone *Clone) Connect(address, service string) { + clone.pipe.SendMessage("CONNECT", address, service) +} + +// Set a new value in the shared hashmap. Sends a [SET][key][value][ttl] +// command through to the agent which does the actual work: + +func (clone *Clone) Set(key, value string, ttl int) { + clone.pipe.SendMessage("SET", key, value, ttl) +} + +// Look-up value in distributed hash table. Sends [GET][key] to the agent and +// waits for a value response. If there is no value available, will eventually +// return error: + +func (clone *Clone) Get(key string) (value string, err error) { + + clone.pipe.SendMessage("GET", key) + + reply, e := clone.pipe.RecvMessage(0) + if e != nil { + err = e + return + } + value = reply[0] + return +} + +// The back-end agent manages a set of servers, which we implement using +// our simple class model: + +type server_t struct { + address string // Server address + port int // Server port + snapshot *zmq.Socket // Snapshot socket + subscriber *zmq.Socket // Incoming updates + expiry time.Time // When server expires + requests int64 // How many snapshot requests made? +} + +func server_new(address string, port int, subtree string) (server *server_t) { + server = &server_t{} + + fmt.Printf("I: adding server %s:%d...\n", address, port) + server.address = address + server.port = port + + server.snapshot, _ = zmq.NewSocket(zmq.DEALER) + server.snapshot.Connect(fmt.Sprintf("%s:%d", address, port)) + server.subscriber, _ = zmq.NewSocket(zmq.SUB) + server.subscriber.Connect(fmt.Sprintf("%s:%d", address, port+1)) + server.subscriber.SetSubscribe(subtree) + return +} + +// Here is the implementation of the back-end agent itself: + +const ( + // Number of servers we will talk to + server_MAX = 2 + + // Server considered dead if silent for this long + server_TTL = 5000 * time.Millisecond +) + +const ( + // States we can be in + state_INITIAL = iota // Before asking server for state + state_SYNCING // Getting state from server + state_ACTIVE // Getting new updates from server +) + +type agent_t struct { + pipe *zmq.Socket // Pipe back to application + kvmap map[string]*kvmsg.Kvmsg // Actual key/value table + subtree string // Subtree specification, if any + server [server_MAX]*server_t + nbr_servers int // 0 to SERVER_MAX + state int // Current state + cur_server int // If active, server 0 or 1 + sequence int64 // Last kvmsg processed + publisher *zmq.Socket // Outgoing updates +} + +func agent_new(pipe *zmq.Socket) (agent *agent_t) { + agent = &agent_t{} + agent.pipe = pipe + agent.kvmap = make(map[string]*kvmsg.Kvmsg) + agent.subtree = "" + agent.state = state_INITIAL + agent.publisher, _ = zmq.NewSocket(zmq.PUB) + return +} + +// Here we handle the different control messages from the front-end; +// SUBTREE, CONNECT, SET, and GET: + +func (agent *agent_t) control_message() (err error) { + msg, e := agent.pipe.RecvMessage(0) + if e != nil { + return e + } + command := msg[0] + msg = msg[1:] + + switch command { + case "SUBTREE": + agent.subtree = msg[0] + case "CONNECT": + address := msg[0] + service := msg[1] + if agent.nbr_servers < server_MAX { + serv, _ := strconv.Atoi(service) + agent.server[agent.nbr_servers] = server_new(address, serv, agent.subtree) + agent.nbr_servers++ + // We broadcast updates to all known servers + agent.publisher.Connect(fmt.Sprintf("%s:%d", address, serv+2)) + } else { + fmt.Printf("E: too many servers (max. %d)\n", server_MAX) + } + case "SET": + // When we set a property, we push the new key-value pair onto + // all our connected servers: + key := msg[0] + value := msg[1] + ttl := msg[2] + + // Send key-value pair on to server + kvmsg := kvmsg.NewKvmsg(0) + kvmsg.SetKey(key) + kvmsg.SetUuid() + kvmsg.SetBody(value) + kvmsg.SetProp("ttl", ttl) + kvmsg.Store(agent.kvmap) + kvmsg.Send(agent.publisher) + case "GET": + key := msg[0] + value := "" + if kvmsg, ok := agent.kvmap[key]; ok { + value, _ = kvmsg.GetBody() + } + agent.pipe.SendMessage(value) + } + return +} + +// The asynchronous agent manages a server pool and handles the +// request/reply dialog when the application asks for it: + +func clone_agent(pipename string) { + + pipe, _ := zmq.NewSocket(zmq.PAIR) + pipe.Connect(pipename) + + agent := agent_new(pipe) + +LOOP: + for { + poller := zmq.NewPoller() + poller.Add(pipe, zmq.POLLIN) + server := agent.server[agent.cur_server] + switch agent.state { + case state_INITIAL: + // In this state we ask the server for a snapshot, + // if we have a server to talk to... + if agent.nbr_servers > 0 { + fmt.Printf("I: waiting for server at %s:%d...\n", server.address, server.port) + if server.requests < 2 { + server.snapshot.SendMessage("ICANHAZ?", agent.subtree) + server.requests++ + } + server.expiry = time.Now().Add(server_TTL) + agent.state = state_SYNCING + poller.Add(server.snapshot, zmq.POLLIN) + } + + case state_SYNCING: + // In this state we read from snapshot and we expect + // the server to respond, else we fail over. + poller.Add(server.snapshot, zmq.POLLIN) + + case state_ACTIVE: + // In this state we read from subscriber and we expect + // the server to give hugz, else we fail over. + poller.Add(server.subscriber, zmq.POLLIN) + break + } + poll_timer := time.Duration(-1) + if server != nil { + poll_timer = server.expiry.Sub(time.Now()) + if poll_timer < 0 { + poll_timer = 0 + } + } + // We're ready to process incoming messages; if nothing at all + // comes from our server within the timeout, that means the + // server is dead: + + polled, err := poller.Poll(poll_timer) + if err != nil { + break + } + + if len(polled) > 0 { + for _, item := range polled { + switch socket := item.Socket; socket { + case pipe: + + err = agent.control_message() + if err != nil { + break LOOP + } + + default: + kvmsg, e := kvmsg.RecvKvmsg(socket) + if e != nil { + err = e + break LOOP + } + + // Anything from server resets its expiry time + server.expiry = time.Now().Add(server_TTL) + if agent.state == state_SYNCING { + // Store in snapshot until we're finished + server.requests = 0 + if key, _ := kvmsg.GetKey(); key == "KTHXBAI" { + agent.sequence, _ = kvmsg.GetSequence() + agent.state = state_ACTIVE + fmt.Printf("I: received from %s:%d snapshot=%d\n", server.address, server.port, agent.sequence) + } else { + kvmsg.Store(agent.kvmap) + } + } else if agent.state == state_ACTIVE { + // Discard out-of-sequence updates, incl. hugz + if seq, _ := kvmsg.GetSequence(); seq > agent.sequence { + agent.sequence = seq + kvmsg.Store(agent.kvmap) + fmt.Printf("I: received from %s:%d update=%d\n", server.address, server.port, agent.sequence) + } + } + } + } + } else { + // Server has died, failover to next + fmt.Printf("I: server at %s:%d didn't give hugz\n", server.address, server.port) + agent.cur_server = (agent.cur_server + 1) % agent.nbr_servers + agent.state = state_INITIAL + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonecli1.go b/vendor/github.com/pebbe/zmq4/examples/clonecli1.go new file mode 100644 index 0000000..4b19fe6 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonecli1.go @@ -0,0 +1,31 @@ +// +// Clone client Model One +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvsimple" + + "fmt" +) + +func main() { + // Prepare our context and updates socket + updates, _ := zmq.NewSocket(zmq.SUB) + updates.SetSubscribe("") + updates.Connect("tcp://localhost:5556") + + kvmap := make(map[string]*kvsimple.Kvmsg) + + sequence := int64(0) + for ; true; sequence++ { + kvmsg, err := kvsimple.RecvKvmsg(updates) + if err != nil { + break // Interrupted + } + kvmsg.Store(kvmap) + } + fmt.Printf("Interrupted\n%d messages in\n", sequence) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonecli2.go b/vendor/github.com/pebbe/zmq4/examples/clonecli2.go new file mode 100644 index 0000000..de2866f --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonecli2.go @@ -0,0 +1,70 @@ +// +// Clone client Model Two +// +// In the original C example, the client misses updates between snapshot +// and further updates. Sometimes, it even misses the END message of +// the snapshot, so it waits for it forever. +// This Go implementation has some modifications to improve this, but it +// is still not fully reliable. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvsimple" + + "fmt" + "time" +) + +func main() { + snapshot, _ := zmq.NewSocket(zmq.DEALER) + snapshot.Connect("tcp://localhost:5556") + + subscriber, _ := zmq.NewSocket(zmq.SUB) + subscriber.SetRcvhwm(100000) // or messages between snapshot and next are lost + subscriber.SetSubscribe("") + subscriber.Connect("tcp://localhost:5557") + + time.Sleep(time.Second) // or messages between snapshot and next are lost + + kvmap := make(map[string]*kvsimple.Kvmsg) + + // Get state snapshot + sequence := int64(0) + snapshot.SendMessage("ICANHAZ?") + for { + kvmsg, err := kvsimple.RecvKvmsg(snapshot) + if err != nil { + fmt.Println(err) + break // Interrupted + } + if key, _ := kvmsg.GetKey(); key == "KTHXBAI" { + sequence, _ = kvmsg.GetSequence() + fmt.Printf("Received snapshot=%d\n", sequence) + break // Done + } + kvmsg.Store(kvmap) + } + snapshot.Close() + + first := true + // Now apply pending updates, discard out-of-sequence messages + for { + kvmsg, err := kvsimple.RecvKvmsg(subscriber) + if err != nil { + fmt.Println(err) + break // Interrupted + } + if seq, _ := kvmsg.GetSequence(); seq > sequence { + sequence, _ = kvmsg.GetSequence() + kvmsg.Store(kvmap) + if first { + // Show what the first regular update is after the snapshot, + // to see if we missed updates. + first = false + fmt.Println("Next:", sequence) + } + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonecli3.go b/vendor/github.com/pebbe/zmq4/examples/clonecli3.go new file mode 100644 index 0000000..d99c59d --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonecli3.go @@ -0,0 +1,83 @@ +// +// Clone client Model Three +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvsimple" + + "fmt" + "math/rand" + "time" +) + +func main() { + snapshot, _ := zmq.NewSocket(zmq.DEALER) + snapshot.Connect("tcp://localhost:5556") + subscriber, _ := zmq.NewSocket(zmq.SUB) + subscriber.SetSubscribe("") + subscriber.Connect("tcp://localhost:5557") + publisher, _ := zmq.NewSocket(zmq.PUSH) + publisher.Connect("tcp://localhost:5558") + + kvmap := make(map[string]*kvsimple.Kvmsg) + rand.Seed(time.Now().UnixNano()) + + // We first request a state snapshot: + sequence := int64(0) + snapshot.SendMessage("ICANHAZ?") + for { + kvmsg, err := kvsimple.RecvKvmsg(snapshot) + if err != nil { + break // Interrupted + } + if key, _ := kvmsg.GetKey(); key == "KTHXBAI" { + sequence, _ := kvmsg.GetSequence() + fmt.Println("I: received snapshot =", sequence) + break // Done + } + kvmsg.Store(kvmap) + } + snapshot.Close() + + // Now we wait for updates from the server, and every so often, we + // send a random key-value update to the server: + + poller := zmq.NewPoller() + poller.Add(subscriber, zmq.POLLIN) + alarm := time.Now().Add(1000 * time.Millisecond) + for { + tickless := alarm.Sub(time.Now()) + if tickless < 0 { + tickless = 0 + } + polled, err := poller.Poll(tickless) + if err != nil { + break // Context has been shut down + } + if len(polled) == 1 { + kvmsg, err := kvsimple.RecvKvmsg(subscriber) + if err != nil { + break // Interrupted + } + + // Discard out-of-sequence kvmsgs, incl. heartbeats + if seq, _ := kvmsg.GetSequence(); seq > sequence { + sequence = seq + kvmsg.Store(kvmap) + fmt.Println("I: received update =", sequence) + } + } + // If we timed-out, generate a random kvmsg + if time.Now().After(alarm) { + kvmsg := kvsimple.NewKvmsg(0) + kvmsg.SetKey(fmt.Sprint(rand.Intn(10000))) + kvmsg.SetBody(fmt.Sprint(rand.Intn(1000000))) + kvmsg.Send(publisher) + alarm = time.Now().Add(1000 * time.Millisecond) + } + } + fmt.Printf("Interrupted\n%d messages in\n", sequence) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonecli4.go b/vendor/github.com/pebbe/zmq4/examples/clonecli4.go new file mode 100644 index 0000000..e3d75a6 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonecli4.go @@ -0,0 +1,84 @@ +// +// Clone client Model Four +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvsimple" + + "fmt" + "math/rand" + "time" +) + +const ( + SUBTREE = "/client/" +) + +func main() { + snapshot, _ := zmq.NewSocket(zmq.DEALER) + snapshot.Connect("tcp://localhost:5556") + subscriber, _ := zmq.NewSocket(zmq.SUB) + subscriber.SetSubscribe(SUBTREE) + subscriber.Connect("tcp://localhost:5557") + publisher, _ := zmq.NewSocket(zmq.PUSH) + publisher.Connect("tcp://localhost:5558") + + kvmap := make(map[string]*kvsimple.Kvmsg) + rand.Seed(time.Now().UnixNano()) + + // We first request a state snapshot: + sequence := int64(0) + snapshot.SendMessage("ICANHAZ?", SUBTREE) + for { + kvmsg, err := kvsimple.RecvKvmsg(snapshot) + if err != nil { + break // Interrupted + } + if key, _ := kvmsg.GetKey(); key == "KTHXBAI" { + sequence, _ := kvmsg.GetSequence() + fmt.Println("I: received snapshot =", sequence) + break // Done + } + kvmsg.Store(kvmap) + } + snapshot.Close() + + poller := zmq.NewPoller() + poller.Add(subscriber, zmq.POLLIN) + alarm := time.Now().Add(1000 * time.Millisecond) + for { + tickless := alarm.Sub(time.Now()) + if tickless < 0 { + tickless = 0 + } + polled, err := poller.Poll(tickless) + if err != nil { + break // Context has been shut down + } + if len(polled) == 1 { + kvmsg, err := kvsimple.RecvKvmsg(subscriber) + if err != nil { + break // Interrupted + } + + // Discard out-of-sequence kvmsgs, incl. heartbeats + if seq, _ := kvmsg.GetSequence(); seq > sequence { + sequence = seq + kvmsg.Store(kvmap) + fmt.Println("I: received update =", sequence) + } + } + // If we timed-out, generate a random kvmsg + if time.Now().After(alarm) { + kvmsg := kvsimple.NewKvmsg(0) + kvmsg.SetKey(fmt.Sprintf("%s%d", SUBTREE, rand.Intn(10000))) + kvmsg.SetBody(fmt.Sprint(rand.Intn(1000000))) + kvmsg.Send(publisher) + alarm = time.Now().Add(1000 * time.Millisecond) + } + } + fmt.Printf("Interrupted\n%d messages in\n", sequence) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonecli5.go b/vendor/github.com/pebbe/zmq4/examples/clonecli5.go new file mode 100644 index 0000000..428c995 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonecli5.go @@ -0,0 +1,85 @@ +// +// Clone client Model Five +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvmsg" + + "fmt" + "math/rand" + "time" +) + +const ( + SUBTREE = "/client/" +) + +func main() { + snapshot, _ := zmq.NewSocket(zmq.DEALER) + snapshot.Connect("tcp://localhost:5556") + subscriber, _ := zmq.NewSocket(zmq.SUB) + subscriber.SetSubscribe(SUBTREE) + subscriber.Connect("tcp://localhost:5557") + publisher, _ := zmq.NewSocket(zmq.PUSH) + publisher.Connect("tcp://localhost:5558") + + kvmap := make(map[string]*kvmsg.Kvmsg) + rand.Seed(time.Now().UnixNano()) + + // We first request a state snapshot: + sequence := int64(0) + snapshot.SendMessage("ICANHAZ?", SUBTREE) + for { + kvmsg, err := kvmsg.RecvKvmsg(snapshot) + if err != nil { + break // Interrupted + } + if key, _ := kvmsg.GetKey(); key == "KTHXBAI" { + sequence, _ := kvmsg.GetSequence() + fmt.Println("I: received snapshot =", sequence) + break // Done + } + kvmsg.Store(kvmap) + } + snapshot.Close() + + poller := zmq.NewPoller() + poller.Add(subscriber, zmq.POLLIN) + alarm := time.Now().Add(1000 * time.Millisecond) + for { + tickless := alarm.Sub(time.Now()) + if tickless < 0 { + tickless = 0 + } + polled, err := poller.Poll(tickless) + if err != nil { + break // Context has been shut down + } + if len(polled) == 1 { + kvmsg, err := kvmsg.RecvKvmsg(subscriber) + if err != nil { + break // Interrupted + } + + // Discard out-of-sequence kvmsgs, incl. heartbeats + if seq, _ := kvmsg.GetSequence(); seq > sequence { + sequence = seq + kvmsg.Store(kvmap) + fmt.Println("I: received update =", sequence) + } + } + // If we timed-out, generate a random kvmsg + if time.Now().After(alarm) { + kvmsg := kvmsg.NewKvmsg(0) + kvmsg.SetKey(fmt.Sprintf("%s%d", SUBTREE, rand.Intn(10000))) + kvmsg.SetBody(fmt.Sprint(rand.Intn(1000000))) + kvmsg.SetProp("ttl", fmt.Sprintf("%d", rand.Intn((30)))) // seconds + kvmsg.Send(publisher) + alarm = time.Now().Add(1000 * time.Millisecond) + } + } + fmt.Printf("Interrupted\n%d messages in\n", sequence) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonecli6.go b/vendor/github.com/pebbe/zmq4/examples/clonecli6.go new file mode 100644 index 0000000..0d32e45 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonecli6.go @@ -0,0 +1,41 @@ +// +// Clone client Model Six +// + +package main + +import ( + "github.com/pebbe/zmq4/examples/clone" + + "fmt" + "log" + "math/rand" + "time" +) + +const ( + SUBTREE = "/client/" +) + +func main() { + // Create distributed hash instance + clone := clone.New() + + // Specify configuration + clone.Subtree(SUBTREE) + clone.Connect("tcp://localhost", "5556") + clone.Connect("tcp://localhost", "5566") + + // Set random tuples into the distributed hash + for { + // Set random value, check it was stored + key := fmt.Sprintf("%s%d", SUBTREE, rand.Intn(10000)) + value := fmt.Sprint(rand.Intn(1000000)) + clone.Set(key, value, rand.Intn(30)) + v, _ := clone.Get(key) + if v != value { + log.Fatalf("Set: %v - Get: %v - Equal: %v\n", value, v, value == v) + } + time.Sleep(time.Second) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonesrv1.go b/vendor/github.com/pebbe/zmq4/examples/clonesrv1.go new file mode 100644 index 0000000..1f264b3 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonesrv1.go @@ -0,0 +1,38 @@ +// +// Clone server Model One +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvsimple" + + "fmt" + "math/rand" + "time" +) + +func main() { + // Prepare our context and publisher socket + publisher, _ := zmq.NewSocket(zmq.PUB) + publisher.Bind("tcp://*:5556") + time.Sleep(200 * time.Millisecond) + + kvmap := make(map[string]*kvsimple.Kvmsg) + rand.Seed(time.Now().UnixNano()) + + sequence := int64(1) + for ; true; sequence++ { + // Distribute as key-value message + kvmsg := kvsimple.NewKvmsg(sequence) + kvmsg.SetKey(fmt.Sprint(rand.Intn(10000))) + kvmsg.SetBody(fmt.Sprint(rand.Intn(1000000))) + err := kvmsg.Send(publisher) + kvmsg.Store(kvmap) + if err != nil { + break + } + } + fmt.Printf("Interrupted\n%d messages out\n", sequence) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonesrv2.go b/vendor/github.com/pebbe/zmq4/examples/clonesrv2.go new file mode 100644 index 0000000..7958c04 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonesrv2.go @@ -0,0 +1,119 @@ +// +// Clone server Model Two +// +// In the original C example, the client misses updates between snapshot +// and further updates. Sometimes, it even misses the END message of +// the snapshot, so it waits for it forever. +// This Go implementation has some modifications to improve this, but it +// is still not fully reliable. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvsimple" + + "fmt" + "math/rand" + "time" +) + +func main() { + // Prepare our context and sockets + publisher, _ := zmq.NewSocket(zmq.PUB) + publisher.Bind("tcp://*:5557") + + sequence := int64(0) + rand.Seed(time.Now().UnixNano()) + + // Start state manager and wait for synchronization signal + updates, _ := zmq.NewSocket(zmq.PAIR) + updates.Bind("inproc://pipe") + go state_manager() + updates.RecvMessage(0) // "READY" + + for { + // Distribute as key-value message + sequence++ + kvmsg := kvsimple.NewKvmsg(sequence) + kvmsg.SetKey(fmt.Sprint(rand.Intn(10000))) + kvmsg.SetBody(fmt.Sprint(rand.Intn(1000000))) + if kvmsg.Send(publisher) != nil { + break + } + if kvmsg.Send(updates) != nil { + break + } + } + fmt.Printf("Interrupted\n%d messages out\n", sequence) +} + +// The state manager task maintains the state and handles requests from +// clients for snapshots: + +func state_manager() { + kvmap := make(map[string]*kvsimple.Kvmsg) + + pipe, _ := zmq.NewSocket(zmq.PAIR) + pipe.Connect("inproc://pipe") + pipe.SendMessage("READY") + snapshot, _ := zmq.NewSocket(zmq.ROUTER) + snapshot.Bind("tcp://*:5556") + + poller := zmq.NewPoller() + poller.Add(pipe, zmq.POLLIN) + poller.Add(snapshot, zmq.POLLIN) + sequence := int64(0) // Current snapshot version number +LOOP: + for { + polled, err := poller.Poll(-1) + if err != nil { + break // Context has been shut down + } + for _, item := range polled { + switch socket := item.Socket; socket { + case pipe: + // Apply state update from main thread + kvmsg, err := kvsimple.RecvKvmsg(pipe) + if err != nil { + break LOOP // Interrupted + } + sequence, _ = kvmsg.GetSequence() + kvmsg.Store(kvmap) + case snapshot: + // Execute state snapshot request + msg, err := snapshot.RecvMessage(0) + if err != nil { + break LOOP // Interrupted + } + identity := msg[0] + // Request is in second frame of message + request := msg[1] + if request != "ICANHAZ?" { + fmt.Println("E: bad request, aborting") + break LOOP + } + // Send state snapshot to client + + // For each entry in kvmap, send kvmsg to client + for _, kvmsg := range kvmap { + snapshot.Send(identity, zmq.SNDMORE) + kvmsg.Send(snapshot) + } + + // Give client some time to deal with it. + // This reduces the risk that the client won't see + // the END message, but it doesn't eliminate the risk. + time.Sleep(100 * time.Millisecond) + + // Now send END message with sequence number + fmt.Printf("Sending state shapshot=%d\n", sequence) + snapshot.Send(identity, zmq.SNDMORE) + kvmsg := kvsimple.NewKvmsg(sequence) + kvmsg.SetKey("KTHXBAI") + kvmsg.SetBody("") + kvmsg.Send(snapshot) + } + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonesrv3.go b/vendor/github.com/pebbe/zmq4/examples/clonesrv3.go new file mode 100644 index 0000000..5a3e6f8 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonesrv3.go @@ -0,0 +1,84 @@ +// +// Clone server Model Three +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvsimple" + + "fmt" + "time" +) + +func main() { + snapshot, _ := zmq.NewSocket(zmq.ROUTER) + snapshot.Bind("tcp://*:5556") + publisher, _ := zmq.NewSocket(zmq.PUB) + publisher.Bind("tcp://*:5557") + collector, _ := zmq.NewSocket(zmq.PULL) + collector.Bind("tcp://*:5558") + + // The body of the main task collects updates from clients and + // publishes them back out to clients: + + sequence := int64(0) + kvmap := make(map[string]*kvsimple.Kvmsg) + + poller := zmq.NewPoller() + poller.Add(collector, zmq.POLLIN) + poller.Add(snapshot, zmq.POLLIN) +LOOP: + for { + polled, err := poller.Poll(1000 * time.Millisecond) + if err != nil { + break + } + for _, item := range polled { + switch socket := item.Socket; socket { + case collector: + // Apply state update sent from client + kvmsg, err := kvsimple.RecvKvmsg(collector) + if err != nil { + break LOOP // Interrupted + } + sequence++ + kvmsg.SetSequence(sequence) + kvmsg.Send(publisher) + kvmsg.Store(kvmap) + fmt.Println("I: publishing update", sequence) + case snapshot: + // Execute state snapshot request + msg, err := snapshot.RecvMessage(0) + if err != nil { + break LOOP + } + identity := msg[0] + + // Request is in second frame of message + request := msg[1] + if request != "ICANHAZ?" { + fmt.Println("E: bad request, aborting") + break LOOP + } + // Send state snapshot to client + + // For each entry in kvmap, send kvmsg to client + for _, kvmsg := range kvmap { + snapshot.Send(identity, zmq.SNDMORE) + kvmsg.Send(snapshot) + } + + // Now send END message with sequence number + fmt.Println("I: sending shapshot =", sequence) + snapshot.Send(identity, zmq.SNDMORE) + kvmsg := kvsimple.NewKvmsg(sequence) + kvmsg.SetKey("KTHXBAI") + kvmsg.SetBody("") + kvmsg.Send(snapshot) + } + } + } + fmt.Printf("Interrupted\n%d messages handled\n", sequence) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonesrv4.go b/vendor/github.com/pebbe/zmq4/examples/clonesrv4.go new file mode 100644 index 0000000..75aac84 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonesrv4.go @@ -0,0 +1,91 @@ +// +// Clone server Model Four +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvsimple" + + "fmt" + "strings" + "time" +) + +// The main task is identical to clonesrv3 except for where it +// handles subtrees. + +func main() { + snapshot, _ := zmq.NewSocket(zmq.ROUTER) + snapshot.Bind("tcp://*:5556") + publisher, _ := zmq.NewSocket(zmq.PUB) + publisher.Bind("tcp://*:5557") + collector, _ := zmq.NewSocket(zmq.PULL) + collector.Bind("tcp://*:5558") + + // The body of the main task collects updates from clients and + // publishes them back out to clients: + + sequence := int64(0) + kvmap := make(map[string]*kvsimple.Kvmsg) + + poller := zmq.NewPoller() + poller.Add(collector, zmq.POLLIN) + poller.Add(snapshot, zmq.POLLIN) +LOOP: + for { + polled, err := poller.Poll(1000 * time.Millisecond) + if err != nil { + break + } + for _, item := range polled { + switch socket := item.Socket; socket { + case collector: + // Apply state update sent from client + kvmsg, err := kvsimple.RecvKvmsg(collector) + if err != nil { + break LOOP // Interrupted + } + sequence++ + kvmsg.SetSequence(sequence) + kvmsg.Send(publisher) + kvmsg.Store(kvmap) + fmt.Println("I: publishing update", sequence) + case snapshot: + // Execute state snapshot request + msg, err := snapshot.RecvMessage(0) + if err != nil { + break LOOP + } + identity := msg[0] + + // Request is in second frame of message + request := msg[1] + if request != "ICANHAZ?" { + fmt.Println("E: bad request, aborting") + break LOOP + } + subtree := msg[2] + // Send state snapshot to client + + // For each entry in kvmap, send kvmsg to client + for _, kvmsg := range kvmap { + if key, _ := kvmsg.GetKey(); strings.HasPrefix(key, subtree) { + snapshot.Send(identity, zmq.SNDMORE) + kvmsg.Send(snapshot) + } + } + + // Now send END message with sequence number + fmt.Println("I: sending shapshot =", sequence) + snapshot.Send(identity, zmq.SNDMORE) + kvmsg := kvsimple.NewKvmsg(sequence) + kvmsg.SetKey("KTHXBAI") + kvmsg.SetBody(subtree) + kvmsg.Send(snapshot) + } + } + } + fmt.Printf("Interrupted\n%d messages handled\n", sequence) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonesrv5.go b/vendor/github.com/pebbe/zmq4/examples/clonesrv5.go new file mode 100644 index 0000000..5c17ae7 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonesrv5.go @@ -0,0 +1,152 @@ +// +// Clone server Model Five +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/kvmsg" + + "errors" + "fmt" + "log" + "strconv" + "strings" + "time" +) + +// Our server is defined by these properties +type clonesrv_t struct { + kvmap map[string]*kvmsg.Kvmsg // Key-value store + port int // Main port we're working on + sequence int64 // How many updates we're at + snapshot *zmq.Socket // Handle snapshot requests + publisher *zmq.Socket // Publish updates to clients + collector *zmq.Socket // Collect updates from clients +} + +func main() { + + srv := &clonesrv_t{ + port: 5556, + kvmap: make(map[string]*kvmsg.Kvmsg), + } + + // Set up our clone server sockets + srv.snapshot, _ = zmq.NewSocket(zmq.ROUTER) + srv.snapshot.Bind(fmt.Sprint("tcp://*:", srv.port)) + srv.publisher, _ = zmq.NewSocket(zmq.PUB) + srv.publisher.Bind(fmt.Sprint("tcp://*:", srv.port+1)) + srv.collector, _ = zmq.NewSocket(zmq.PULL) + srv.collector.Bind(fmt.Sprint("tcp://*:", srv.port+2)) + + // Register our handlers with reactor + reactor := zmq.NewReactor() + reactor.AddSocket(srv.snapshot, zmq.POLLIN, + func(e zmq.State) error { return snapshots(srv) }) + reactor.AddSocket(srv.collector, zmq.POLLIN, + func(e zmq.State) error { return collector(srv) }) + reactor.AddChannelTime(time.Tick(1000*time.Millisecond), 1, + func(v interface{}) error { return flush_ttl(srv) }) + + log.Println(reactor.Run(100 * time.Millisecond)) // precision: .1 seconds +} + +// This is the reactor handler for the snapshot socket; it accepts +// just the ICANHAZ? request and replies with a state snapshot ending +// with a KTHXBAI message: + +func snapshots(srv *clonesrv_t) (err error) { + + msg, err := srv.snapshot.RecvMessage(0) + if err != nil { + return + } + identity := msg[0] + + // Request is in second frame of message + request := msg[1] + if request != "ICANHAZ?" { + err = errors.New("E: bad request, aborting") + return + } + subtree := msg[2] + + // Send state socket to client + for _, kvmsg := range srv.kvmap { + if key, _ := kvmsg.GetKey(); strings.HasPrefix(key, subtree) { + srv.snapshot.Send(identity, zmq.SNDMORE) + kvmsg.Send(srv.snapshot) + } + } + + // Now send END message with sequence number + log.Println("I: sending shapshot =", srv.sequence) + srv.snapshot.Send(identity, zmq.SNDMORE) + kvmsg := kvmsg.NewKvmsg(srv.sequence) + kvmsg.SetKey("KTHXBAI") + kvmsg.SetBody(subtree) + kvmsg.Send(srv.snapshot) + + return +} + +// We store each update with a new sequence number, and if necessary, a +// time-to-live. We publish updates immediately on our publisher socket: + +func collector(srv *clonesrv_t) (err error) { + kvmsg, err := kvmsg.RecvKvmsg(srv.collector) + if err != nil { + return + } + + srv.sequence++ + kvmsg.SetSequence(srv.sequence) + kvmsg.Send(srv.publisher) + if ttls, e := kvmsg.GetProp("ttl"); e == nil { + // change duration into specific time, using the same property: ugly! + ttl, e := strconv.ParseInt(ttls, 10, 64) + if e != nil { + err = e + return + } + kvmsg.SetProp("ttl", fmt.Sprint(time.Now().Add(time.Duration(ttl)*time.Second).Unix())) + } + kvmsg.Store(srv.kvmap) + log.Println("I: publishing update =", srv.sequence) + + return +} + +// At regular intervals we flush ephemeral values that have expired. This +// could be slow on very large data sets: + +func flush_ttl(srv *clonesrv_t) (err error) { + + for _, kvmsg := range srv.kvmap { + + // If key-value pair has expired, delete it and publish the + // fact to listening clients. + + if ttls, e := kvmsg.GetProp("ttl"); e == nil { + ttl, e := strconv.ParseInt(ttls, 10, 64) + if e != nil { + err = e + continue + } + if time.Now().After(time.Unix(ttl, 0)) { + srv.sequence++ + kvmsg.SetSequence(srv.sequence) + kvmsg.SetBody("") + e = kvmsg.Send(srv.publisher) + if e != nil { + err = e + } + kvmsg.Store(srv.kvmap) + log.Println("I: publishing delete =", srv.sequence) + } + } + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/clonesrv6.go b/vendor/github.com/pebbe/zmq4/examples/clonesrv6.go new file mode 100644 index 0000000..9ee6729 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/clonesrv6.go @@ -0,0 +1,336 @@ +// +// Clone server Model Six +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/bstar" + "github.com/pebbe/zmq4/examples/kvmsg" + + "errors" + "fmt" + "log" + "os" + "strconv" + "strings" + "time" +) + +// Our server is defined by these properties +type clonesrv_t struct { + kvmap map[string]*kvmsg.Kvmsg // Key-value store + kvmap_init bool + bstar *bstar.Bstar // Bstar reactor core + sequence int64 // How many updates we're at + port int // Main port we're working on + peer int // Main port of our peer + publisher *zmq.Socket // Publish updates and hugz + collector *zmq.Socket // Collect updates from clients + subscriber *zmq.Socket // Get updates from peer + pending []*kvmsg.Kvmsg // Pending updates from clients + primary bool // TRUE if we're primary + active bool // TRUE if we're active + passive bool // TRUE if we're passive +} + +// The main task parses the command line to decide whether to start +// as primary or backup server. We're using the Binary Star pattern +// for reliability. This interconnects the two servers so they can +// agree on which is primary, and which is backup. To allow the two +// servers to run on the same box, we use different ports for primary +// and backup. Ports 5003/5004 are used to interconnect the servers. +// Ports 5556/5566 are used to receive voting events (snapshot requests +// in the clone pattern). Ports 5557/5567 are used by the publisher, +// and ports 5558/5568 by the collector: + +func main() { + var err error + + srv := &clonesrv_t{} + + if len(os.Args) == 2 && os.Args[1] == "-p" { + log.Println("I: primary active, waiting for backup (passive)") + srv.bstar, err = bstar.New(bstar.PRIMARY, "tcp://*:5003", "tcp://localhost:5004") + if err != nil { + log.Println(err) + return + } + srv.bstar.Voter("tcp://*:5556", zmq.ROUTER, func(soc *zmq.Socket) error { return snapshots(soc, srv) }) + srv.port = 5556 + srv.peer = 5566 + srv.primary = true + } else if len(os.Args) == 2 && os.Args[1] == "-b" { + log.Println("I: backup passive, waiting for primary (active)") + srv.bstar, err = bstar.New(bstar.BACKUP, "tcp://*:5004", "tcp://localhost:5003") + srv.bstar.Voter("tcp://*:5566", zmq.ROUTER, func(soc *zmq.Socket) error { return snapshots(soc, srv) }) + srv.port = 5566 + srv.peer = 5556 + srv.primary = false + } else { + fmt.Println("Usage: clonesrv4 { -p | -b }") + return + } + // Primary server will become first active + if srv.primary { + srv.kvmap = make(map[string]*kvmsg.Kvmsg, 0) + srv.kvmap_init = true + } + + srv.pending = make([]*kvmsg.Kvmsg, 0) + srv.bstar.SetVerbose(true) + + // Set up our clone server sockets + srv.publisher, _ = zmq.NewSocket(zmq.PUB) + srv.collector, _ = zmq.NewSocket(zmq.SUB) + srv.collector.SetSubscribe("") + srv.publisher.Bind(fmt.Sprint("tcp://*:", srv.port+1)) + srv.collector.Bind(fmt.Sprint("tcp://*:", srv.port+2)) + + // Set up our own clone client interface to peer + srv.subscriber, _ = zmq.NewSocket(zmq.SUB) + srv.subscriber.SetSubscribe("") + srv.subscriber.Connect(fmt.Sprint("tcp://localhost:", srv.peer+1)) + + // After we've set-up our sockets we register our binary star + // event handlers, and then start the bstar reactor. This finishes + // when the user presses Ctrl-C, or the process receives a SIGINT + // interrupt: + + // Register state change handlers + srv.bstar.NewActive(func() error { return new_active(srv) }) + srv.bstar.NewPassive(func() error { return new_passive(srv) }) + + // Register our other handlers with the bstar reactor + srv.bstar.Reactor.AddSocket(srv.collector, zmq.POLLIN, + func(e zmq.State) error { return collector(srv) }) + srv.bstar.Reactor.AddChannelTime(time.Tick(1000*time.Millisecond), 1, + func(i interface{}) error { + if e := flush_ttl(srv); e != nil { + return e + } + return send_hugz(srv) + }) + + err = srv.bstar.Start() + log.Println(err) +} + +func snapshots(socket *zmq.Socket, srv *clonesrv_t) (err error) { + + msg, err := socket.RecvMessage(0) + if err != nil { + return + } + identity := msg[0] + + // Request is in second frame of message + request := msg[1] + if request != "ICANHAZ?" { + err = errors.New("E: bad request, aborting") + return + } + subtree := msg[2] + + // Send state socket to client + for _, kvmsg := range srv.kvmap { + if key, _ := kvmsg.GetKey(); strings.HasPrefix(key, subtree) { + socket.Send(identity, zmq.SNDMORE) + kvmsg.Send(socket) + } + } + + // Now send END message with sequence number + log.Println("I: sending shapshot =", srv.sequence) + socket.Send(identity, zmq.SNDMORE) + kvmsg := kvmsg.NewKvmsg(srv.sequence) + kvmsg.SetKey("KTHXBAI") + kvmsg.SetBody(subtree) + kvmsg.Send(socket) + + return +} + +// The collector is more complex than in the clonesrv5 example since how +// process updates depends on whether we're active or passive. The active +// applies them immediately to its kvmap, whereas the passive queues them +// as pending: + +// If message was already on pending list, remove it and return TRUE, +// else return FALSE. + +func (srv *clonesrv_t) was_pending(kvmsg *kvmsg.Kvmsg) bool { + uuid1, _ := kvmsg.GetUuid() + for i, msg := range srv.pending { + if uuid2, _ := msg.GetUuid(); uuid1 == uuid2 { + srv.pending = append(srv.pending[:i], srv.pending[i+1:]...) + return true + } + } + return false +} + +func collector(srv *clonesrv_t) (err error) { + + kvmsg, err := kvmsg.RecvKvmsg(srv.collector) + if err != nil { + return + } + + if srv.active { + srv.sequence++ + kvmsg.SetSequence(srv.sequence) + kvmsg.Send(srv.publisher) + if ttls, e := kvmsg.GetProp("ttl"); e == nil { + ttl, e := strconv.ParseInt(ttls, 10, 64) + if e != nil { + err = e + return + } + kvmsg.SetProp("ttl", fmt.Sprint(time.Now().Add(time.Duration(ttl)*time.Second).Unix())) + } + kvmsg.Store(srv.kvmap) + log.Println("I: publishing update =", srv.sequence) + } else { + // If we already got message from active, drop it, else + // hold on pending list + if !srv.was_pending(kvmsg) { + srv.pending = append(srv.pending, kvmsg) + } + } + return +} + +// We purge ephemeral values using exactly the same code as in +// the previous clonesrv5 example. +// If key-value pair has expired, delete it and publish the +// fact to listening clients. + +func flush_ttl(srv *clonesrv_t) (err error) { + for _, kvmsg := range srv.kvmap { + + // If key-value pair has expired, delete it and publish the + // fact to listening clients. + + if ttls, e := kvmsg.GetProp("ttl"); e == nil { + ttl, e := strconv.ParseInt(ttls, 10, 64) + if e != nil { + err = e + continue + } + if time.Now().After(time.Unix(ttl, 0)) { + srv.sequence++ + kvmsg.SetSequence(srv.sequence) + kvmsg.SetBody("") + e = kvmsg.Send(srv.publisher) + if e != nil { + err = e + } + kvmsg.Store(srv.kvmap) + log.Println("I: publishing delete =", srv.sequence) + } + } + } + return +} + +// // We send a HUGZ message once a second to all subscribers so that they +// // can detect if our server dies. They'll then switch over to the backup +// // server, which will become active: + +func send_hugz(srv *clonesrv_t) (err error) { + + kvmsg := kvmsg.NewKvmsg(srv.sequence) + kvmsg.SetKey("HUGZ") + kvmsg.SetBody("") + err = kvmsg.Send(srv.publisher) + return +} + +// When we switch from passive to active, we apply our pending list so that +// our kvmap is up-to-date. When we switch to passive, we wipe our kvmap +// and grab a new snapshot from the active: + +func new_active(srv *clonesrv_t) (err error) { + + srv.active = true + srv.passive = false + + // Stop subscribing to updates + srv.bstar.Reactor.RemoveSocket(srv.subscriber) + + // Apply pending list to own hash table + for _, msg := range srv.pending { + srv.sequence++ + msg.SetSequence(srv.sequence) + msg.Send(srv.publisher) + msg.Store(srv.kvmap) + fmt.Println("I: publishing pending =", srv.sequence) + } + srv.pending = srv.pending[0:0] + return +} + +func new_passive(srv *clonesrv_t) (err error) { + + srv.kvmap = make(map[string]*kvmsg.Kvmsg) + srv.kvmap_init = false + srv.active = false + srv.passive = true + + // Start subscribing to updates + srv.bstar.Reactor.AddSocket(srv.subscriber, zmq.POLLIN, + func(e zmq.State) error { return subscriber(srv) }) + + return +} + +// When we get an update, we create a new kvmap if necessary, and then +// add our update to our kvmap. We're always passive in this case: + +func subscriber(srv *clonesrv_t) (err error) { + // Get state snapshot if necessary + if !srv.kvmap_init { + srv.kvmap_init = true + snapshot, _ := zmq.NewSocket(zmq.DEALER) + snapshot.Connect(fmt.Sprint("tcp://localhost:", srv.peer)) + fmt.Printf("I: asking for snapshot from: tcp://localhost:%v\n", srv.peer) + snapshot.SendMessage("ICANHAZ?", "") // blank subtree to get all + for { + kvmsg, e := kvmsg.RecvKvmsg(snapshot) + if e != nil { + err = e + break + } + if key, _ := kvmsg.GetKey(); key == "KTHXBAI" { + srv.sequence, _ = kvmsg.GetSequence() + break // Done + } + kvmsg.Store(srv.kvmap) + } + fmt.Println("I: received snapshot =", srv.sequence) + } + // Find and remove update off pending list + kvmsg, e := kvmsg.RecvKvmsg(srv.subscriber) + if e != nil { + err = e + return + } + + if key, _ := kvmsg.GetKey(); key != "HUGZ" { + if !srv.was_pending(kvmsg) { + // If active update came before client update, flip it + // around, store active update (with sequence) on pending + // list and use to clear client update when it comes later + srv.pending = append(srv.pending, kvmsg) + } + // If update is more recent than our kvmap, apply it + if seq, _ := kvmsg.GetSequence(); seq > srv.sequence { + srv.sequence = seq + kvmsg.Store(srv.kvmap) + fmt.Println("I: received update =", srv.sequence) + } + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/eagain.go b/vendor/github.com/pebbe/zmq4/examples/eagain.go new file mode 100644 index 0000000..9245dba --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/eagain.go @@ -0,0 +1,28 @@ +// +// Shows how to provoke EAGAIN when reaching HWM +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" +) + +func main() { + + mailbox, _ := zmq.NewSocket(zmq.DEALER) + mailbox.SetSndhwm(4) + mailbox.SetSndtimeo(0) + mailbox.Connect("tcp://localhost:9876") + + for count := 0; count < 10; count++ { + fmt.Println("Sending message", count) + _, err := mailbox.SendMessage(fmt.Sprint("message ", count)) + if err != nil { + fmt.Println(err) + break + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/espresso.go b/vendor/github.com/pebbe/zmq4/examples/espresso.go new file mode 100644 index 0000000..9951bd9 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/espresso.go @@ -0,0 +1,89 @@ +// +// Espresso Pattern +// This shows how to capture data using a pub-sub proxy +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "time" +) + +// The subscriber thread requests messages starting with +// A and B, then reads and counts incoming messages. + +func subscriber_thread() { + // Subscribe to "A" and "B" + subscriber, _ := zmq.NewSocket(zmq.SUB) + subscriber.Connect("tcp://localhost:6001") + subscriber.SetSubscribe("A") + subscriber.SetSubscribe("B") + defer subscriber.Close() // cancel subscribe + + for count := 0; count < 5; count++ { + _, err := subscriber.RecvMessage(0) + if err != nil { + break // Interrupted + } + } +} + +// The publisher sends random messages starting with A-J: + +func publisher_thread() { + publisher, _ := zmq.NewSocket(zmq.PUB) + publisher.Bind("tcp://*:6000") + + for { + s := fmt.Sprintf("%c-%05d", rand.Intn(10)+'A', rand.Intn(100000)) + _, err := publisher.SendMessage(s) + if err != nil { + break // Interrupted + } + time.Sleep(100 * time.Millisecond) // Wait for 1/10th second + } +} + +// The listener receives all messages flowing through the proxy, on its +// pipe. In CZMQ, the pipe is a pair of ZMQ_PAIR sockets that connects +// attached child threads. In other languages your mileage may vary: + +func listener_thread() { + pipe, _ := zmq.NewSocket(zmq.PAIR) + pipe.Bind("inproc://pipe") + + // Print everything that arrives on pipe + for { + msg, err := pipe.RecvMessage(0) + if err != nil { + break // Interrupted + } + fmt.Printf("%q\n", msg) + } +} + +// The main task starts the subscriber and publisher, and then sets +// itself up as a listening proxy. The listener runs as a child thread: + +func main() { + // Start child threads + go publisher_thread() + go subscriber_thread() + go listener_thread() + + time.Sleep(100 * time.Millisecond) + + subscriber, _ := zmq.NewSocket(zmq.XSUB) + subscriber.Connect("tcp://localhost:6000") + publisher, _ := zmq.NewSocket(zmq.XPUB) + publisher.Bind("tcp://*:6001") + listener, _ := zmq.NewSocket(zmq.PAIR) + listener.Connect("inproc://pipe") + zmq.Proxy(subscriber, publisher, listener) + + fmt.Println("interrupted") +} diff --git a/vendor/github.com/pebbe/zmq4/examples/fileio1.go b/vendor/github.com/pebbe/zmq4/examples/fileio1.go new file mode 100644 index 0000000..d6d4dc0 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/fileio1.go @@ -0,0 +1,98 @@ +// File Transfer model #1 +// +// In which the server sends the entire file to the client in +// large chunks with no attempt at flow control. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "io" + "os" +) + +const ( + CHUNK_SIZE = 250000 +) + +func client_thread(pipe chan<- string) { + dealer, _ := zmq.NewSocket(zmq.DEALER) + dealer.Connect("tcp://127.0.0.1:6000") + + dealer.Send("fetch", 0) + total := 0 // Total bytes received + chunks := 0 // Total chunks received + + for { + frame, err := dealer.RecvBytes(0) + if err != nil { + break // Shutting down, quit + } + chunks++ + size := len(frame) + total += size + if size == 0 { + break // Whole file received + } + } + fmt.Printf("%v chunks received, %v bytes\n", chunks, total) + pipe <- "OK" +} + +// The server thread reads the file from disk in chunks, and sends +// each chunk to the client as a separate message. We only have one +// test file, so open that once and then serve it out as needed: + +func server_thread() { + file, err := os.Open("testdata") + if err != nil { + panic(err) + } + + router, _ := zmq.NewSocket(zmq.ROUTER) + // Default HWM is 1000, which will drop messages here + // since we send more than 1,000 chunks of test data, + // so set an infinite HWM as a simple, stupid solution: + router.SetRcvhwm(0) + router.SetSndhwm(0) + router.Bind("tcp://*:6000") + for { + // First frame in each message is the sender identity + identity, err := router.Recv(0) + if err != nil { + break // Shutting down, quit + } + + // Second frame is "fetch" command + command, _ := router.Recv(0) + if command != "fetch" { + panic("command != \"fetch\"") + } + + chunk := make([]byte, CHUNK_SIZE) + for { + n, _ := io.ReadFull(file, chunk) + router.SendMessage(identity, chunk[:n]) + if n == 0 { + break // Always end with a zero-size frame + } + } + } + file.Close() +} + +// The main task starts the client and server threads; it's easier +// to test this as a single process with threads, than as multiple +// processes: + +func main() { + pipe := make(chan string) + + // Start child threads + go server_thread() + go client_thread(pipe) + // Loop until client tells us it's done + <-pipe +} diff --git a/vendor/github.com/pebbe/zmq4/examples/fileio2.go b/vendor/github.com/pebbe/zmq4/examples/fileio2.go new file mode 100644 index 0000000..7ca557d --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/fileio2.go @@ -0,0 +1,98 @@ +// File Transfer model #2 +// +// In which the client requests each chunk individually, thus +// eliminating server queue overflows, but at a cost in speed. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "os" + "strconv" +) + +const ( + CHUNK_SIZE = 250000 +) + +func client_thread(pipe chan<- string) { + dealer, _ := zmq.NewSocket(zmq.DEALER) + dealer.Connect("tcp://127.0.0.1:6000") + + total := 0 // Total bytes received + chunks := 0 // Total chunks received + + for { + // Ask for next chunk + dealer.SendMessage("fetch", total, CHUNK_SIZE) + + chunk, err := dealer.RecvBytes(0) + if err != nil { + break // Shutting down, quit + } + chunks++ + size := len(chunk) + total += size + if size < CHUNK_SIZE { + break // Last chunk received; exit + } + } + fmt.Printf("%v chunks received, %v bytes\n", chunks, total) + pipe <- "OK" +} + +// The server thread waits for a chunk request from a client, +// reads that chunk and sends it back to the client: + +func server_thread() { + file, err := os.Open("testdata") + if err != nil { + panic(err) + } + + router, _ := zmq.NewSocket(zmq.ROUTER) + router.SetRcvhwm(1) + router.SetSndhwm(1) + router.Bind("tcp://*:6000") + for { + msg, err := router.RecvMessage(0) + if err != nil { + break // Shutting down, quit + } + // First frame in each message is the sender identity + identity := msg[0] + + // Second frame is "fetch" command + if msg[1] != "fetch" { + panic("command != \"fetch\"") + } + + // Third frame is chunk offset in file + offset, _ := strconv.ParseInt(msg[2], 10, 64) + + // Fourth frame is maximum chunk size + chunksz, _ := strconv.Atoi(msg[3]) + + // Read chunk of data from file + chunk := make([]byte, chunksz) + n, _ := file.ReadAt(chunk, offset) + + // Send resulting chunk to client + router.SendMessage(identity, chunk[:n]) + } + file.Close() +} + +// The main task is just the same as in the first model. + +func main() { + pipe := make(chan string) + + // Start child threads + go server_thread() + go client_thread(pipe) + // Loop until client tells us it's done + <-pipe +} diff --git a/vendor/github.com/pebbe/zmq4/examples/fileio3.go b/vendor/github.com/pebbe/zmq4/examples/fileio3.go new file mode 100644 index 0000000..6bc0353 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/fileio3.go @@ -0,0 +1,111 @@ +// File Transfer model #3 +// +// In which the client requests each chunk individually, using +// command pipelining to give us a credit-based flow control. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "os" + "strconv" +) + +const ( + CHUNK_SIZE = 250000 + PIPELINE = 10 +) + +func client_thread(pipe chan<- string) { + dealer, _ := zmq.NewSocket(zmq.DEALER) + dealer.Connect("tcp://127.0.0.1:6000") + + // Up to this many chunks in transit + credit := PIPELINE + + total := 0 // Total bytes received + chunks := 0 // Total chunks received + offset := 0 // Offset of next chunk request + + for { + for credit > 0 { + // Ask for next chunk + dealer.SendMessage("fetch", offset, CHUNK_SIZE) + offset += CHUNK_SIZE + credit-- + } + chunk, err := dealer.RecvBytes(0) + if err != nil { + break // Shutting down, quit + } + chunks++ + credit++ + size := len(chunk) + total += size + if size < CHUNK_SIZE { + break // Last chunk received; exit + } + } + fmt.Printf("%v chunks received, %v bytes\n", chunks, total) + pipe <- "OK" +} + +// The rest of the code is exactly the same as in model 2, except +// that we set the HWM on the server's ROUTER socket to PIPELINE +// to act as a sanity check. + +// The server thread waits for a chunk request from a client, +// reads that chunk and sends it back to the client: + +func server_thread() { + file, err := os.Open("testdata") + if err != nil { + panic(err) + } + + router, _ := zmq.NewSocket(zmq.ROUTER) + router.SetRcvhwm(PIPELINE * 2) + router.SetSndhwm(PIPELINE * 2) + router.Bind("tcp://*:6000") + for { + msg, err := router.RecvMessage(0) + if err != nil { + break // Shutting down, quit + } + // First frame in each message is the sender identity + identity := msg[0] + + // Second frame is "fetch" command + if msg[1] != "fetch" { + panic("command != \"fetch\"") + } + + // Third frame is chunk offset in file + offset, _ := strconv.ParseInt(msg[2], 10, 64) + + // Fourth frame is maximum chunk size + chunksz, _ := strconv.Atoi(msg[3]) + + // Read chunk of data from file + chunk := make([]byte, chunksz) + n, _ := file.ReadAt(chunk, offset) + + // Send resulting chunk to client + router.SendMessage(identity, chunk[:n]) + } + file.Close() +} + +// The main task is just the same as in the first model. + +func main() { + pipe := make(chan string) + + // Start child threads + go server_thread() + go client_thread(pipe) + // Loop until client tells us it's done + <-pipe +} diff --git a/vendor/github.com/pebbe/zmq4/examples/flcliapi/flcliapi.go b/vendor/github.com/pebbe/zmq4/examples/flcliapi/flcliapi.go new file mode 100644 index 0000000..a6787fb --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/flcliapi/flcliapi.go @@ -0,0 +1,268 @@ +// flcliapi - Freelance Pattern agent class. +// Implements the Freelance Protocol at http://rfc.zeromq.org/spec:10. +package flcliapi + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "strconv" + "time" +) + +const ( + // If no server replies within this time, abandon request + GLOBAL_TIMEOUT = 3000 * time.Millisecond + // PING interval for servers we think are alive + PING_INTERVAL = 2000 * time.Millisecond + // Server considered dead if silent for this long + SERVER_TTL = 6000 * time.Millisecond +) + +// This API works in two halves, a common pattern for APIs that need to +// run in the background. One half is an front-end object our application +// creates and works with; the other half is a back-end "agent" that runs +// in a background thread. The front-end talks to the back-end over an +// inproc pipe socket: + +// --------------------------------------------------------------------- +// Structure of our front-end class + +type Flcliapi struct { + pipe *zmq.Socket // Pipe through to flcliapi agent +} + +// This is the thread that handles our real flcliapi class + +// --------------------------------------------------------------------- +// Constructor + +func New() (flcliapi *Flcliapi) { + flcliapi = &Flcliapi{} + flcliapi.pipe, _ = zmq.NewSocket(zmq.PAIR) + flcliapi.pipe.Bind("inproc://pipe") + go flcliapi_agent() + return +} + +// To implement the connect method, the front-end object sends a multi-part +// message to the back-end agent. The first part is a string "CONNECT", and +// the second part is the endpoint. It waits 100msec for the connection to +// come up, which isn't pretty, but saves us from sending all requests to a +// single server, at start-up time: + +func (flcliapi *Flcliapi) Connect(endpoint string) { + flcliapi.pipe.SendMessage("CONNECT", endpoint) + time.Sleep(100 * time.Millisecond) // Allow connection to come up +} + +// To implement the request method, the front-end object sends a message +// to the back-end, specifying a command "REQUEST" and the request message: + +func (flcliapi *Flcliapi) Request(request []string) (reply []string, err error) { + flcliapi.pipe.SendMessage("REQUEST", request) + reply, err = flcliapi.pipe.RecvMessage(0) + if err == nil { + status := reply[0] + reply = reply[1:] + if status == "FAILED" { + reply = reply[0:0] + } + } + return +} + +// Here we see the back-end agent. It runs as an attached thread, talking +// to its parent over a pipe socket. It is a fairly complex piece of work +// so we'll break it down into pieces. First, the agent manages a set of +// servers, using our familiar class approach: + +// --------------------------------------------------------------------- +// Simple class for one server we talk to + +type server_t struct { + endpoint string // Server identity/endpoint + alive bool // true if known to be alive + ping_at time.Time // Next ping at this time + expires time.Time // Expires at this time +} + +func server_new(endpoint string) (server *server_t) { + server = &server_t{ + endpoint: endpoint, + alive: false, + ping_at: time.Now().Add(PING_INTERVAL), + expires: time.Now().Add(SERVER_TTL), + } + return +} + +func (server *server_t) ping(socket *zmq.Socket) { + if time.Now().After(server.ping_at) { + socket.SendMessage(server.endpoint, "PING") + server.ping_at = time.Now().Add(PING_INTERVAL) + } +} + +func (server *server_t) tickless(t time.Time) time.Time { + if t.After(server.ping_at) { + return server.ping_at + } + return t +} + +// We build the agent as a class that's capable of processing messages +// coming in from its various sockets: + +// --------------------------------------------------------------------- +// Simple class for one background agent + +type agent_t struct { + pipe *zmq.Socket // Socket to talk back to application + router *zmq.Socket // Socket to talk to servers + servers map[string]*server_t // Servers we've connected to + actives []*server_t // Servers we know are alive + sequence int // Number of requests ever sent + request []string // Current request if any + reply []string // Current reply if any + expires time.Time // Timeout for request/reply +} + +func agent_new() (agent *agent_t) { + agent = &agent_t{ + servers: make(map[string]*server_t), + actives: make([]*server_t, 0), + request: make([]string, 0), + reply: make([]string, 0), + } + agent.pipe, _ = zmq.NewSocket(zmq.PAIR) + agent.pipe.Connect("inproc://pipe") + agent.router, _ = zmq.NewSocket(zmq.ROUTER) + return +} + +// The control_message method processes one message from our front-end +// class (it's going to be CONNECT or REQUEST): + +func (agent *agent_t) control_message() { + msg, _ := agent.pipe.RecvMessage(0) + command := msg[0] + msg = msg[1:] + + switch command { + case "CONNECT": + endpoint := msg[0] + fmt.Printf("I: connecting to %s...\n", endpoint) + err := agent.router.Connect(endpoint) + if err != nil { + panic("agent.router.Connect(endpoint) failed") + } + server := server_new(endpoint) + agent.servers[endpoint] = server + agent.actives = append(agent.actives, server) + server.ping_at = time.Now().Add(PING_INTERVAL) + server.expires = time.Now().Add(SERVER_TTL) + case "REQUEST": + if len(agent.request) > 0 { + panic("len(agent.request) > 0") // Strict request-reply cycle + } + // Prefix request with sequence number --(and empty envelope)-- + agent.request = make([]string, 1, 1+len(msg)) + agent.sequence++ + agent.request[0] = fmt.Sprint(agent.sequence) + agent.request = append(agent.request, msg...) + // Request expires after global timeout + agent.expires = time.Now().Add(GLOBAL_TIMEOUT) + } +} + +// The router_message method processes one message from a connected +// server: + +func (agent *agent_t) router_message() { + reply, _ := agent.router.RecvMessage(0) + + // Frame 0 is server that replied + endpoint := reply[0] + reply = reply[1:] + server, ok := agent.servers[endpoint] + if !ok { + panic("No server for endpoint") + } + if !server.alive { + agent.actives = append(agent.actives, server) + server.alive = true + } + server.ping_at = time.Now().Add(PING_INTERVAL) + server.expires = time.Now().Add(SERVER_TTL) + + // Frame 1 may be sequence number for reply + sequence, _ := strconv.Atoi(reply[0]) + reply = reply[1:] + if sequence == agent.sequence { + agent.pipe.SendMessage("OK", reply) + agent.request = agent.request[0:0] + } +} + +// Finally here's the agent task itself, which polls its two sockets +// and processes incoming messages: + +func flcliapi_agent() { + + agent := agent_new() + + poller := zmq.NewPoller() + poller.Add(agent.pipe, zmq.POLLIN) + poller.Add(agent.router, zmq.POLLIN) + for { + // Calculate tickless timer, up to 1 hour + tickless := time.Now().Add(time.Hour) + if len(agent.request) > 0 && tickless.After(agent.expires) { + tickless = agent.expires + } + for key := range agent.servers { + tickless = agent.servers[key].tickless(tickless) + } + + polled, err := poller.Poll(tickless.Sub(time.Now())) + if err != nil { + break // Context has been shut down + } + + for _, item := range polled { + switch item.Socket { + case agent.pipe: + agent.control_message() + case agent.router: + agent.router_message() + } + } + + // If we're processing a request, dispatch to next server + if len(agent.request) > 0 { + if time.Now().After(agent.expires) { + // Request expired, kill it + agent.pipe.SendMessage("FAILED") + agent.request = agent.request[0:0] + } else { + // Find server to talk to, remove any expired ones + for len(agent.actives) > 0 { + server := agent.actives[0] + if time.Now().After(server.expires) { + agent.actives = agent.actives[1:] + server.alive = false + } else { + agent.router.SendMessage(server.endpoint, agent.request) + break + } + } + } + } + // --(Disconnect and delete any expired servers)-- + // Send heartbeats to idle servers if needed + for key := range agent.servers { + agent.servers[key].ping(agent.router) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/flclient1.go b/vendor/github.com/pebbe/zmq4/examples/flclient1.go new file mode 100644 index 0000000..b24c756 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/flclient1.go @@ -0,0 +1,77 @@ +// +// Freelance client - Model 1. +// Uses REQ socket to query one or more services +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "errors" + "fmt" + "os" + "time" +) + +const ( + REQUEST_TIMEOUT = 1000 * time.Millisecond + MAX_RETRIES = 3 // Before we abandon +) + +func try_request(endpoint string, request []string) (reply []string, err error) { + fmt.Printf("I: trying echo service at %s...\n", endpoint) + client, _ := zmq.NewSocket(zmq.REQ) + client.Connect(endpoint) + + // Send request, wait safely for reply + client.SendMessage(request) + poller := zmq.NewPoller() + poller.Add(client, zmq.POLLIN) + polled, err := poller.Poll(REQUEST_TIMEOUT) + reply = []string{} + if len(polled) == 1 { + reply, err = client.RecvMessage(0) + } else { + err = errors.New("Time out") + } + return +} + +// The client uses a Lazy Pirate strategy if it only has one server to talk +// to. If it has 2 or more servers to talk to, it will try each server just +// once: + +func main() { + request := []string{"Hello world"} + reply := []string{} + var err error + + endpoints := len(os.Args) - 1 + if endpoints == 0 { + fmt.Printf("I: syntax: %s ...\n", os.Args[0]) + } else if endpoints == 1 { + // For one endpoint, we retry N times + for retries := 0; retries < MAX_RETRIES; retries++ { + endpoint := os.Args[1] + reply, err = try_request(endpoint, request) + if err == nil { + break // Successful + } + fmt.Printf("W: no response from %s, retrying...\n", endpoint) + } + } else { + // For multiple endpoints, try each at most once + for endpoint_nbr := 0; endpoint_nbr < endpoints; endpoint_nbr++ { + endpoint := os.Args[endpoint_nbr+1] + reply, err = try_request(endpoint, request) + if err == nil { + break // Successful + } + fmt.Println("W: no response from", endpoint) + } + } + if len(reply) > 0 { + fmt.Printf("Service is running OK: %q\n", reply) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/flclient2.go b/vendor/github.com/pebbe/zmq4/examples/flclient2.go new file mode 100644 index 0000000..13b3e85 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/flclient2.go @@ -0,0 +1,118 @@ +// +// Freelance client - Model 2. +// Uses DEALER socket to blast one or more services +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "errors" + "fmt" + "os" + "strconv" + "time" +) + +const ( + + // If not a single service replies within this time, give up + GLOBAL_TIMEOUT = 2500 * time.Millisecond +) + +func main() { + if len(os.Args) == 1 { + fmt.Printf("I: syntax: %s ...\n", os.Args[0]) + return + } + // Create new freelance client object + client := new_flclient() + + // Connect to each endpoint + for argn := 1; argn < len(os.Args); argn++ { + client.connect(os.Args[argn]) + } + + // Send a bunch of name resolution 'requests', measure time + start := time.Now() + for requests := 10000; requests > 0; requests-- { + _, err := client.request("random name") + if err != nil { + fmt.Println("E: name service not available, aborting") + break + } + } + fmt.Println("Average round trip cost:", time.Now().Sub(start)) +} + +// Here is the flclient class implementation. Each instance has +// a DEALER socket it uses to talk to the servers, a counter of how many +// servers it's connected to, and a request sequence number: + +type flclient_t struct { + socket *zmq.Socket // DEALER socket talking to servers + servers int // How many servers we have connected to + sequence int // Number of requests ever sent +} + +// -------------------------------------------------------------------- +// Constructor + +func new_flclient() (client *flclient_t) { + client = &flclient_t{} + + client.socket, _ = zmq.NewSocket(zmq.DEALER) + return +} + +// -------------------------------------------------------------------- +// Connect to new server endpoint + +func (client *flclient_t) connect(endpoint string) { + client.socket.Connect(endpoint) + client.servers++ +} + +// The request method does the hard work. It sends a request to all +// connected servers in parallel (for this to work, all connections +// have to be successful and completed by this time). It then waits +// for a single successful reply, and returns that to the caller. +// Any other replies are just dropped: + +func (client *flclient_t) request(request ...string) (reply []string, err error) { + reply = []string{} + + // Prefix request with sequence number and empty envelope + client.sequence++ + + // Blast the request to all connected servers + for server := 0; server < client.servers; server++ { + client.socket.SendMessage("", client.sequence, request) + } + // Wait for a matching reply to arrive from anywhere + // Since we can poll several times, calculate each one + endtime := time.Now().Add(GLOBAL_TIMEOUT) + poller := zmq.NewPoller() + poller.Add(client.socket, zmq.POLLIN) + for time.Now().Before(endtime) { + polled, err := poller.Poll(endtime.Sub(time.Now())) + if err == nil && len(polled) > 0 { + // Reply is [empty][sequence][OK] + reply, _ = client.socket.RecvMessage(0) + if len(reply) != 3 { + panic("len(reply) != 3") + } + sequence := reply[1] + reply = reply[2:] + sequence_nbr, _ := strconv.Atoi(sequence) + if sequence_nbr == client.sequence { + break + } + } + } + if len(reply) == 0 { + err = errors.New("No reply") + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/flclient3.go b/vendor/github.com/pebbe/zmq4/examples/flclient3.go new file mode 100644 index 0000000..2956670 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/flclient3.go @@ -0,0 +1,35 @@ +// +// Freelance client - Model 3. +// Uses flcliapi class to encapsulate Freelance pattern +// + +package main + +import ( + "github.com/pebbe/zmq4/examples/flcliapi" + + "fmt" + "time" +) + +func main() { + // Create new freelance client object + client := flcliapi.New() + + // Connect to several endpoints + client.Connect("tcp://localhost:5555") + client.Connect("tcp://localhost:5556") + client.Connect("tcp://localhost:5557") + + // Send a bunch of name resolution 'requests', measure time + start := time.Now() + req := []string{"random name"} + for requests := 1000; requests > 0; requests-- { + _, err := client.Request(req) + if err != nil { + fmt.Println("E: name service not available, aborting") + break + } + } + fmt.Println("Average round trip cost:", time.Now().Sub(start)/1000) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/flserver1.go b/vendor/github.com/pebbe/zmq4/examples/flserver1.go new file mode 100644 index 0000000..eb6cf57 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/flserver1.go @@ -0,0 +1,32 @@ +// +// Freelance server - Model 1. +// Trivial echo service +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "os" +) + +func main() { + if len(os.Args) < 2 { + fmt.Printf("I: syntax: %s \n", os.Args[0]) + return + } + server, _ := zmq.NewSocket(zmq.REP) + server.Bind(os.Args[1]) + + fmt.Println("I: echo service is ready at", os.Args[1]) + for { + msg, err := server.RecvMessage(0) + if err != nil { + break // Interrupted + } + server.SendMessage(msg) + } + fmt.Println("W: interrupted") +} diff --git a/vendor/github.com/pebbe/zmq4/examples/flserver2.go b/vendor/github.com/pebbe/zmq4/examples/flserver2.go new file mode 100644 index 0000000..968d38a --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/flserver2.go @@ -0,0 +1,39 @@ +// +// Freelance server - Model 2. +// Does some work, replies OK, with message sequencing +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "os" +) + +func main() { + if len(os.Args) < 2 { + fmt.Printf("I: syntax: %s \n", os.Args[0]) + return + } + server, _ := zmq.NewSocket(zmq.REP) + server.Bind(os.Args[1]) + + fmt.Println("I: service is ready at", os.Args[1]) + for { + request, err := server.RecvMessage(0) + if err != nil { + break // Interrupted + } + // Fail nastily if run against wrong client + if len(request) != 2 { + panic("len(request) != 2") + } + + identity := request[0] + + server.SendMessage(identity, "OK") + } + fmt.Println("W: interrupted") +} diff --git a/vendor/github.com/pebbe/zmq4/examples/flserver3.go b/vendor/github.com/pebbe/zmq4/examples/flserver3.go new file mode 100644 index 0000000..f26d299 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/flserver3.go @@ -0,0 +1,57 @@ +// +// Freelance server - Model 3. +// Uses an ROUTER/ROUTER socket but just one thread +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "os" +) + +func main() { + var verbose bool + if len(os.Args) > 1 && os.Args[1] == "-v" { + verbose = true + } + + // Prepare server socket with predictable identity + bind_endpoint := "tcp://*:5555" + connect_endpoint := "tcp://localhost:5555" + server, _ := zmq.NewSocket(zmq.ROUTER) + server.SetIdentity(connect_endpoint) + server.Bind(bind_endpoint) + fmt.Println("I: service is ready at", bind_endpoint) + + for { + request, err := server.RecvMessage(0) + if err != nil { + break + } + if verbose { + fmt.Printf("%q\n", request) + } + + // Frame 0: identity of client + // Frame 1: PING, or client control frame + // Frame 2: request body + identity := request[0] + control := request[1] + reply := make([]string, 1, 3) + if control == "PING" { + reply = append(reply, "PONG") + } else { + reply = append(reply, control) + reply = append(reply, "OK") + } + reply[0] = identity + if verbose { + fmt.Printf("%q\n", reply) + } + server.SendMessage(reply) + } + fmt.Println("W: interrupted") +} diff --git a/vendor/github.com/pebbe/zmq4/examples/hwclient.go b/vendor/github.com/pebbe/zmq4/examples/hwclient.go new file mode 100644 index 0000000..50148cd --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/hwclient.go @@ -0,0 +1,32 @@ +// +// Hello World client. +// Connects REQ socket to tcp://localhost:5555 +// Sends "Hello" to server, expects "World" back +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" +) + +func main() { + // Socket to talk to server + fmt.Println("Connecting to hello world server...") + requester, _ := zmq.NewSocket(zmq.REQ) + defer requester.Close() + requester.Connect("tcp://localhost:5555") + + for request_nbr := 0; request_nbr != 10; request_nbr++ { + // send hello + msg := fmt.Sprintf("Hello %d", request_nbr) + fmt.Println("Sending ", msg) + requester.Send(msg, 0) + + // Wait for reply: + reply, _ := requester.Recv(0) + fmt.Println("Received ", reply) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/hwserver.go b/vendor/github.com/pebbe/zmq4/examples/hwserver.go new file mode 100644 index 0000000..e0e9aa5 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/hwserver.go @@ -0,0 +1,35 @@ +// +// Hello World server. +// Binds REP socket to tcp://*:5555 +// Expects "Hello" from client, replies with "World" +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "time" +) + +func main() { + // Socket to talk to clients + responder, _ := zmq.NewSocket(zmq.REP) + defer responder.Close() + responder.Bind("tcp://*:5555") + + for { + // Wait for next request from client + msg, _ := responder.Recv(0) + fmt.Println("Received ", msg) + + // Do some 'work' + time.Sleep(time.Second) + + // Send reply back to client + reply := "World" + responder.Send(reply, 0) + fmt.Println("Sent ", reply) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/identity.go b/vendor/github.com/pebbe/zmq4/examples/identity.go new file mode 100644 index 0000000..2db47e3 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/identity.go @@ -0,0 +1,62 @@ +// +// Demonstrate identities as used by the request-reply pattern. +// Run this program by itself. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "regexp" +) + +var ( + all_char = regexp.MustCompile("^[^[:cntrl:]]*$") +) + +func main() { + sink, _ := zmq.NewSocket(zmq.ROUTER) + defer sink.Close() + sink.Bind("inproc://example") + + // First allow 0MQ to set the identity + anonymous, _ := zmq.NewSocket(zmq.REQ) + defer anonymous.Close() + anonymous.Connect("inproc://example") + anonymous.Send("ROUTER uses a generated UUID", 0) + dump(sink) + + // Then set the identity ourselves + identified, _ := zmq.NewSocket(zmq.REQ) + defer identified.Close() + identified.SetIdentity("PEER2") + identified.Connect("inproc://example") + identified.Send("ROUTER socket uses REQ's socket identity", 0) + dump(sink) +} + +func dump(soc *zmq.Socket) { + fmt.Println("----------------------------------------") + for { + // Process all parts of the message + message, _ := soc.Recv(0) + + // Dump the message as text or binary + fmt.Printf("[%03d] ", len(message)) + if all_char.MatchString(message) { + fmt.Print(message) + } else { + for i := 0; i < len(message); i++ { + fmt.Printf("%02X ", message[i]) + } + } + fmt.Println() + + more, _ := soc.GetRcvmore() + if !more { + break + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/interrupt.go b/vendor/github.com/pebbe/zmq4/examples/interrupt.go new file mode 100644 index 0000000..5323847 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/interrupt.go @@ -0,0 +1,58 @@ +// WARNING: This won't build on Windows and Plan9. + +// +// Handling Ctrl-C cleanly in C. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "os" + "os/signal" + "syscall" + "time" +) + +func main() { + // Socket to talk to server + fmt.Println("Connecting to hello world server...") + client, _ := zmq.NewSocket(zmq.REQ) + defer client.Close() + client.Connect("tcp://localhost:5555") + + // Without signal handling, Go will exit on signal, even if the signal was caught by ZeroMQ + chSignal := make(chan os.Signal, 1) + signal.Notify(chSignal, syscall.SIGHUP, syscall.SIGINT, syscall.SIGQUIT, syscall.SIGTERM) + +LOOP: + for { + client.Send("HELLO", 0) + fmt.Println("Sent: HELLO") + reply, err := client.Recv(0) + if err != nil { + if zmq.AsErrno(err) == zmq.Errno(syscall.EINTR) { + // signal was caught by 0MQ + log.Println("Client Recv:", err) + break + } else { + // some error occurred + log.Panicln(err) + } + } + + fmt.Println("Received:", reply) + time.Sleep(time.Second) + + select { + case sig := <-chSignal: + // signal was caught by Go + log.Println("Signal:", sig) + break LOOP + default: + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/intface/intface.go b/vendor/github.com/pebbe/zmq4/examples/intface/intface.go new file mode 100644 index 0000000..7bab494 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/intface/intface.go @@ -0,0 +1,254 @@ +// Interface class for Chapter 8. +// This implements an "interface" to our network of nodes. +package intface + +import ( + zmq "github.com/pebbe/zmq4" + + "github.com/pborman/uuid" + + "bytes" + "errors" + "net" + "time" +) + +// ===================================================================== +// Synchronous part, works in our application thread + +// --------------------------------------------------------------------- +// Structure of our class + +type Intface struct { + pipe *zmq.Socket // Pipe through to agent +} + +// This is the thread that handles our real interface class + +// Here is the constructor for the interface class. +// Note that the class has barely any properties, it is just an excuse +// to start the background thread, and a wrapper around zmsg_recv(): + +func New() (iface *Intface) { + iface = &Intface{} + var err error + iface.pipe, err = zmq.NewSocket(zmq.PAIR) + if err != nil { + panic(err) + } + err = iface.pipe.Bind("inproc://iface") + if err != nil { + panic(err) + } + go iface.agent() + time.Sleep(100 * time.Millisecond) + return +} + +// Here we wait for a message from the interface. This returns +// us a []string, or error if interrupted: + +func (iface *Intface) Recv() (msg []string, err error) { + msg, err = iface.pipe.RecvMessage(0) + return +} + +// ===================================================================== +// // Asynchronous part, works in the background + +// This structure defines each peer that we discover and track: + +type peer_t struct { + uuid_bytes []byte + uuid_string string + expires_at time.Time +} + +const ( + PING_PORT_NUMBER = 9999 + PING_INTERVAL = 1000 * time.Millisecond // Once per second + PEER_EXPIRY = 5000 * time.Millisecond // Five seconds and it's gone +) + +// We have a constructor for the peer class: + +func new_peer(uuid uuid.UUID) (peer *peer_t) { + peer = &peer_t{ + uuid_bytes: []byte(uuid), + uuid_string: uuid.String(), + } + return +} + +// Just resets the peers expiry time; we call this method +// whenever we get any activity from a peer. + +func (peer *peer_t) is_alive() { + peer.expires_at = time.Now().Add(PEER_EXPIRY) +} + +// This structure holds the context for our agent, so we can +// pass that around cleanly to methods which need it: + +type agent_t struct { + pipe *zmq.Socket // Pipe back to application + udp *zmq.Socket + conn *net.UDPConn + uuid_bytes []byte // Our UUID + uuid_string string + peers map[string]*peer_t // Hash of known peers, fast lookup +} + +// Now the constructor for our agent. Each interface +// has one agent object, which implements its background thread: + +func new_agent() (agent *agent_t) { + + // push output from udp into zmq socket + bcast := &net.UDPAddr{Port: PING_PORT_NUMBER, IP: net.IPv4bcast} + conn, e := net.ListenUDP("udp", bcast) + if e != nil { + panic(e) + } + go func() { + buffer := make([]byte, 1024) + udp, _ := zmq.NewSocket(zmq.PAIR) + udp.Bind("inproc://udp") + for { + if n, _, err := conn.ReadFrom(buffer); err == nil { + udp.SendBytes(buffer[:n], 0) + } + } + }() + time.Sleep(100 * time.Millisecond) + + pipe, _ := zmq.NewSocket(zmq.PAIR) + pipe.Connect("inproc://iface") + udp, _ := zmq.NewSocket(zmq.PAIR) + udp.Connect("inproc://udp") + + uuid := uuid.NewRandom() + agent = &agent_t{ + pipe: pipe, + udp: udp, + conn: conn, + uuid_bytes: []byte(uuid), + uuid_string: uuid.String(), + peers: make(map[string]*peer_t), + } + + return +} + +// Here we handle the different control messages from the front-end. + +func (agent *agent_t) control_message() (err error) { + // Get the whole message off the pipe in one go + msg, e := agent.pipe.RecvMessage(0) + if e != nil { + return e + } + command := msg[0] + + // We don't actually implement any control commands yet + // but if we did, this would be where we did it.. + switch command { + case "EXAMPLE": + default: + } + + return +} + +// This is how we handle a beacon coming into our UDP socket; +// this may be from other peers or an echo of our own broadcast +// beacon: + +func (agent *agent_t) handle_beacon() (err error) { + + msg, err := agent.udp.RecvMessage(0) + if len(msg[0]) != 16 { + return errors.New("Not a uuid") + } + + // If we got a UUID and it's not our own beacon, we have a peer + uuid := uuid.UUID(msg[0]) + if bytes.Compare(uuid, agent.uuid_bytes) != 0 { + // Find or create peer via its UUID string + uuid_string := uuid.String() + peer, ok := agent.peers[uuid_string] + if !ok { + peer = new_peer(uuid) + agent.peers[uuid_string] = peer + + // Report peer joined the network + agent.pipe.SendMessage("JOINED", uuid_string) + } + // Any activity from the peer means it's alive + peer.is_alive() + } + return +} + +// This method checks one peer item for expiry; if the peer hasn't +// sent us anything by now, it's 'dead' and we can delete it: + +func (agent *agent_t) reap_peer(peer *peer_t) { + if time.Now().After(peer.expires_at) { + // Report peer left the network + agent.pipe.SendMessage("LEFT", peer.uuid_string) + delete(agent.peers, peer.uuid_string) + } +} + +// This is the main loop for the background agent. It uses zmq_poll +// to monitor the front-end pipe (commands from the API) and the +// back-end UDP handle (beacons): + +func (iface *Intface) agent() { + // Create agent instance to pass around + agent := new_agent() + + // Send first beacon immediately + ping_at := time.Now() + + poller := zmq.NewPoller() + poller.Add(agent.pipe, zmq.POLLIN) + poller.Add(agent.udp, zmq.POLLIN) + + bcast := &net.UDPAddr{Port: PING_PORT_NUMBER, IP: net.IPv4bcast} + for { + timeout := ping_at.Add(time.Millisecond).Sub(time.Now()) + if timeout < 0 { + timeout = 0 + } + polled, err := poller.Poll(timeout) + if err != nil { + break + } + + for _, item := range polled { + switch socket := item.Socket; socket { + case agent.pipe: + // If we had activity on the pipe, go handle the control + // message. Current code never sends control messages. + agent.control_message() + + case agent.udp: + // If we had input on the UDP socket, go process that + agent.handle_beacon() + } + } + + // If we passed the 1-second mark, broadcast our beacon + now := time.Now() + if now.After(ping_at) { + agent.conn.WriteTo(agent.uuid_bytes, bcast) + ping_at = now.Add(PING_INTERVAL) + } + // Delete and report any expired peers + for _, peer := range agent.peers { + agent.reap_peer(peer) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/kvmsg/kvmsg.go b/vendor/github.com/pebbe/zmq4/examples/kvmsg/kvmsg.go new file mode 100644 index 0000000..d19e38d --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/kvmsg/kvmsg.go @@ -0,0 +1,262 @@ +// kvmsg class - key-value message class for example applications +package kvmsg + +import ( + zmq "github.com/pebbe/zmq4" + + "github.com/pborman/uuid" + + "errors" + "fmt" + "os" + "strings" +) + +// Message is formatted on wire as 4 frames: +// frame 0: key (0MQ string) +// frame 1: sequence (8 bytes, network order) +// frame 2: uuid (blob, 16 bytes) +// frame 3: properties (0MQ string) +// frame 4: body (blob) +const ( + frame_KEY = 0 + frame_SEQ = 1 + frame_UUID = 2 + frame_PROPS = 3 + frame_BODY = 4 + kvmsg_FRAMES = 5 +) + +// Structure of our class +type Kvmsg struct { + // Presence indicators for each frame + present []bool + // Corresponding 0MQ message frames, if any + frame []string + // List of properties, as name=value strings + props []string +} + +// These two helpers serialize a list of properties to and from a +// message frame: + +func (kvmsg *Kvmsg) encode_props() { + kvmsg.frame[frame_PROPS] = strings.Join(kvmsg.props, "\n") + "\n" + kvmsg.present[frame_PROPS] = true +} + +func (kvmsg *Kvmsg) decode_props() { + kvmsg.props = strings.Split(kvmsg.frame[frame_PROPS], "\n") + if ln := len(kvmsg.props); ln > 0 && kvmsg.props[ln-1] == "" { + kvmsg.props = kvmsg.props[:ln-1] + } +} + +// Constructor, takes a sequence number for the new Kvmsg instance. +func NewKvmsg(sequence int64) (kvmsg *Kvmsg) { + kvmsg = &Kvmsg{ + present: make([]bool, kvmsg_FRAMES), + frame: make([]string, kvmsg_FRAMES), + props: make([]string, 0), + } + kvmsg.SetSequence(sequence) + return +} + +// The RecvKvmsg function reads a key-value message from socket, and returns a new +// Kvmsg instance. +func RecvKvmsg(socket *zmq.Socket) (kvmsg *Kvmsg, err error) { + kvmsg = &Kvmsg{ + present: make([]bool, kvmsg_FRAMES), + frame: make([]string, kvmsg_FRAMES), + } + msg, err := socket.RecvMessage(0) + if err != nil { + return + } + //fmt.Printf("Recv from %s: %q\n", socket, msg) + for i := 0; i < kvmsg_FRAMES && i < len(msg); i++ { + kvmsg.frame[i] = msg[i] + kvmsg.present[i] = true + } + kvmsg.decode_props() + return +} + +// Send key-value message to socket; any empty frames are sent as such. +func (kvmsg *Kvmsg) Send(socket *zmq.Socket) (err error) { + //fmt.Printf("Send to %s: %q\n", socket, kvmsg.frame) + kvmsg.encode_props() + _, err = socket.SendMessage(kvmsg.frame) + return +} + +// The Dup method duplicates a kvmsg instance, returns the new instance. +func (kvmsg *Kvmsg) Dup() (dup *Kvmsg) { + dup = &Kvmsg{ + present: make([]bool, kvmsg_FRAMES), + frame: make([]string, kvmsg_FRAMES), + props: make([]string, len(kvmsg.props)), + } + copy(dup.present, kvmsg.present) + copy(dup.frame, kvmsg.frame) + copy(dup.props, kvmsg.props) + return +} + +// Return key from last read message, if any, else NULL +func (kvmsg *Kvmsg) GetKey() (key string, err error) { + if !kvmsg.present[frame_KEY] { + err = errors.New("Key not set") + return + } + key = kvmsg.frame[frame_KEY] + return +} + +func (kvmsg *Kvmsg) SetKey(key string) { + kvmsg.frame[frame_KEY] = key + kvmsg.present[frame_KEY] = true +} + +func (kvmsg *Kvmsg) GetSequence() (sequence int64, err error) { + if !kvmsg.present[frame_SEQ] { + err = errors.New("Sequence not set") + return + } + source := kvmsg.frame[frame_SEQ] + sequence = int64(source[0])<<56 + + int64(source[1])<<48 + + int64(source[2])<<40 + + int64(source[3])<<32 + + int64(source[4])<<24 + + int64(source[5])<<16 + + int64(source[6])<<8 + + int64(source[7]) + return +} + +func (kvmsg *Kvmsg) SetSequence(sequence int64) { + + source := make([]byte, 8) + source[0] = byte((sequence >> 56) & 255) + source[1] = byte((sequence >> 48) & 255) + source[2] = byte((sequence >> 40) & 255) + source[3] = byte((sequence >> 32) & 255) + source[4] = byte((sequence >> 24) & 255) + source[5] = byte((sequence >> 16) & 255) + source[6] = byte((sequence >> 8) & 255) + source[7] = byte((sequence) & 255) + + kvmsg.frame[frame_SEQ] = string(source) + kvmsg.present[frame_SEQ] = true +} + +func (kvmsg *Kvmsg) GetBody() (body string, err error) { + if !kvmsg.present[frame_BODY] { + err = errors.New("Body not set") + return + } + body = kvmsg.frame[frame_BODY] + return +} + +func (kvmsg *Kvmsg) SetBody(body string) { + kvmsg.frame[frame_BODY] = body + kvmsg.present[frame_BODY] = true +} + +// The size method returns the body size of the last-read message, if any. +func (kvmsg *Kvmsg) Size() int { + if kvmsg.present[frame_BODY] { + return len(kvmsg.frame[frame_BODY]) + } + return 0 +} + +func (kvmsg *Kvmsg) GetUuid() (uuid string, err error) { + if !kvmsg.present[frame_UUID] { + err = errors.New("Uuid not set") + return + } + uuid = kvmsg.frame[frame_UUID] + return +} + +// Sets the UUID to a random generated value +func (kvmsg *Kvmsg) SetUuid() { + kvmsg.frame[frame_UUID] = string(uuid.NewRandom()) // raw 16 bytes + kvmsg.present[frame_UUID] = true + +} + +// Get message property, return error if no such property is defined. +func (kvmsg *Kvmsg) GetProp(name string) (value string, err error) { + if !kvmsg.present[frame_PROPS] { + err = errors.New("No properties set") + return + } + f := name + "=" + for _, prop := range kvmsg.props { + if strings.HasPrefix(prop, f) { + value = prop[len(f):] + return + } + } + err = errors.New("Property not set") + return +} + +// Set message property. Property name cannot contain '='. +func (kvmsg *Kvmsg) SetProp(name, value string) (err error) { + if strings.Index(name, "=") >= 0 { + err = errors.New("No '=' allowed in property name") + return + } + p := name + "=" + for i, prop := range kvmsg.props { + if strings.HasPrefix(prop, p) { + kvmsg.props = append(kvmsg.props[:i], kvmsg.props[i+1:]...) + break + } + } + kvmsg.props = append(kvmsg.props, name+"="+value) + kvmsg.present[frame_PROPS] = true + return +} + +// The store method stores the key-value message into a hash map, unless +// the key is nil. +func (kvmsg *Kvmsg) Store(kvmap map[string]*Kvmsg) { + if kvmsg.present[frame_KEY] { + if kvmsg.present[frame_BODY] && kvmsg.frame[frame_BODY] != "" { + kvmap[kvmsg.frame[frame_KEY]] = kvmsg + } else { + delete(kvmap, kvmsg.frame[frame_KEY]) + } + } +} + +// The dump method extends the kvsimple implementation with support for +// message properties. +func (kvmsg *Kvmsg) Dump() { + size := kvmsg.Size() + body, _ := kvmsg.GetBody() + seq, _ := kvmsg.GetSequence() + key, _ := kvmsg.GetKey() + fmt.Fprintf(os.Stderr, "[seq:%v][key:%v][size:%v] ", seq, key, size) + p := "[" + for _, prop := range kvmsg.props { + fmt.Fprint(os.Stderr, p, prop) + p = ";" + } + if p == ";" { + fmt.Fprint(os.Stderr, "]") + } + for char_nbr := 0; char_nbr < size; char_nbr++ { + fmt.Fprintf(os.Stderr, "%02X", body[char_nbr]) + } + fmt.Fprintln(os.Stderr) +} + +// The test function is in kvmsg_test.go diff --git a/vendor/github.com/pebbe/zmq4/examples/kvmsg/kvmsg_test.go b/vendor/github.com/pebbe/zmq4/examples/kvmsg/kvmsg_test.go new file mode 100644 index 0000000..e2dbb0b --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/kvmsg/kvmsg_test.go @@ -0,0 +1,108 @@ +package kvmsg + +import ( + zmq "github.com/pebbe/zmq4" + + "os" + "testing" +) + +// The test is the same as in kvsimple with added support +// for the uuid and property features of kvmsg + +func TestKvmsg(t *testing.T) { + + // Prepare our context and sockets + output, err := zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Error(err) + } + + err = output.Bind("ipc://kvmsg_selftest.ipc") + if err != nil { + t.Error(err) + } + + input, err := zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Error(err) + } + + err = input.Connect("ipc://kvmsg_selftest.ipc") + if err != nil { + t.Error(err) + } + + kvmap := make(map[string]*Kvmsg) + + // Test send and receive of simple message + kvmsg := NewKvmsg(1) + kvmsg.SetKey("key") + kvmsg.SetUuid() + kvmsg.SetBody("body") + kvmsg.Dump() + err = kvmsg.Send(output) + + kvmsg.Store(kvmap) + if err != nil { + t.Error(err) + } + + kvmsg, err = RecvKvmsg(input) + if err != nil { + t.Error(err) + } + kvmsg.Dump() + key, err := kvmsg.GetKey() + if err != nil { + t.Error(err) + } + if key != "key" { + t.Error("Expected \"key\", got \"" + key + "\"") + } + kvmsg.Store(kvmap) + + // Test send and receive of message with properties + kvmsg = NewKvmsg(2) + err = kvmsg.SetProp("prop1", "value1") + if err != nil { + t.Error(err) + } + kvmsg.SetProp("prop2", "value1") + kvmsg.SetProp("prop2", "value2") + kvmsg.SetKey("key") + kvmsg.SetUuid() + kvmsg.SetBody("body") + if val, err := kvmsg.GetProp("prop2"); err != nil || val != "value2" { + if err != nil { + t.Error(err) + } + t.Error("Expected \"prop2\" = \"value2\", got \"" + val + "\"") + } + kvmsg.Dump() + err = kvmsg.Send(output) + + kvmsg, err = RecvKvmsg(input) + if err != nil { + t.Error(err) + } + kvmsg.Dump() + key, err = kvmsg.GetKey() + if err != nil { + t.Error(err) + } + if key != "key" { + t.Error("Expected \"key\", got \"" + key + "\"") + } + prop, err := kvmsg.GetProp("prop2") + if err != nil { + t.Error(err) + } + if prop != "value2" { + t.Error("Expected property \"value2\", got \"" + key + "\"") + } + + input.Close() + output.Close() + os.Remove("kvmsg_selftest.ipc") +} diff --git a/vendor/github.com/pebbe/zmq4/examples/kvsimple/kvsimple.go b/vendor/github.com/pebbe/zmq4/examples/kvsimple/kvsimple.go new file mode 100644 index 0000000..9efde5e --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/kvsimple/kvsimple.go @@ -0,0 +1,157 @@ +// kvsimple - simple key-value message class for example applications. +// +// This is a very much unlike typical Go. +package kvsimple + +import ( + zmq "github.com/pebbe/zmq4" + + "errors" + "fmt" + "os" +) + +const ( + frame_KEY = 0 + frame_SEQ = 1 + frame_BODY = 2 + kvmsg_FRAMES = 3 +) + +// The Kvmsg type holds a single key-value message consisting of a +// list of 0 or more frames. +type Kvmsg struct { + // Presence indicators for each frame + present []bool + // Corresponding 0MQ message frames, if any + frame []string +} + +// Constructor, takes a sequence number for the new Kvmsg instance. +func NewKvmsg(sequence int64) (kvmsg *Kvmsg) { + kvmsg = &Kvmsg{ + present: make([]bool, kvmsg_FRAMES), + frame: make([]string, kvmsg_FRAMES), + } + kvmsg.SetSequence(sequence) + return +} + +// The RecvKvmsg function reads a key-value message from socket, and returns a new +// Kvmsg instance. +func RecvKvmsg(socket *zmq.Socket) (kvmsg *Kvmsg, err error) { + kvmsg = &Kvmsg{ + present: make([]bool, kvmsg_FRAMES), + frame: make([]string, kvmsg_FRAMES), + } + msg, err := socket.RecvMessage(0) + if err != nil { + return + } + //fmt.Printf("Recv from %s: %q\n", socket, msg) + for i := 0; i < kvmsg_FRAMES && i < len(msg); i++ { + kvmsg.frame[i] = msg[i] + kvmsg.present[i] = true + } + return +} + +// The send method sends a multi-frame key-value message to a socket. +func (kvmsg *Kvmsg) Send(socket *zmq.Socket) (err error) { + //fmt.Printf("Send to %s: %q\n", socket, kvmsg.frame) + _, err = socket.SendMessage(kvmsg.frame) + return +} + +func (kvmsg *Kvmsg) GetKey() (key string, err error) { + if !kvmsg.present[frame_KEY] { + err = errors.New("Key not set") + return + } + key = kvmsg.frame[frame_KEY] + return +} + +func (kvmsg *Kvmsg) SetKey(key string) { + kvmsg.frame[frame_KEY] = key + kvmsg.present[frame_KEY] = true +} + +func (kvmsg *Kvmsg) GetSequence() (sequence int64, err error) { + if !kvmsg.present[frame_SEQ] { + err = errors.New("Sequence not set") + return + } + source := kvmsg.frame[frame_SEQ] + sequence = int64(source[0])<<56 + + int64(source[1])<<48 + + int64(source[2])<<40 + + int64(source[3])<<32 + + int64(source[4])<<24 + + int64(source[5])<<16 + + int64(source[6])<<8 + + int64(source[7]) + return +} + +func (kvmsg *Kvmsg) SetSequence(sequence int64) { + + source := make([]byte, 8) + source[0] = byte((sequence >> 56) & 255) + source[1] = byte((sequence >> 48) & 255) + source[2] = byte((sequence >> 40) & 255) + source[3] = byte((sequence >> 32) & 255) + source[4] = byte((sequence >> 24) & 255) + source[5] = byte((sequence >> 16) & 255) + source[6] = byte((sequence >> 8) & 255) + source[7] = byte((sequence) & 255) + + kvmsg.frame[frame_SEQ] = string(source) + kvmsg.present[frame_SEQ] = true +} + +func (kvmsg *Kvmsg) GetBody() (body string, err error) { + if !kvmsg.present[frame_BODY] { + err = errors.New("Body not set") + return + } + body = kvmsg.frame[frame_BODY] + return +} + +func (kvmsg *Kvmsg) SetBody(body string) { + kvmsg.frame[frame_BODY] = body + kvmsg.present[frame_BODY] = true +} + +// The size method returns the body size of the last-read message, if any. +func (kvmsg *Kvmsg) Size() int { + if kvmsg.present[frame_BODY] { + return len(kvmsg.frame[frame_BODY]) + } + return 0 +} + +// The store method stores the key-value message into a hash map, unless +// the key is nil. +func (kvmsg *Kvmsg) Store(kvmap map[string]*Kvmsg) { + if kvmsg.present[frame_KEY] { + kvmap[kvmsg.frame[frame_KEY]] = kvmsg + } +} + +// The dump method prints the key-value message to stderr, +// for debugging and tracing. +func (kvmsg *Kvmsg) Dump() { + size := kvmsg.Size() + body, _ := kvmsg.GetBody() + seq, _ := kvmsg.GetSequence() + key, _ := kvmsg.GetKey() + fmt.Fprintf(os.Stderr, "[seq:%v][key:%v][size:%v]", seq, key, size) + for char_nbr := 0; char_nbr < size; char_nbr++ { + fmt.Fprintf(os.Stderr, "%02X", body[char_nbr]) + } + fmt.Fprintln(os.Stderr) +} + +// The test function is in kvsimple_test.go diff --git a/vendor/github.com/pebbe/zmq4/examples/kvsimple/kvsimple_test.go b/vendor/github.com/pebbe/zmq4/examples/kvsimple/kvsimple_test.go new file mode 100644 index 0000000..6687ee0 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/kvsimple/kvsimple_test.go @@ -0,0 +1,64 @@ +package kvsimple + +import ( + zmq "github.com/pebbe/zmq4" + + "os" + "testing" +) + +func TestKvmsg(t *testing.T) { + + // Prepare our context and sockets + output, err := zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Error(err) + } + + err = output.Bind("ipc://kvmsg_selftest.ipc") + if err != nil { + t.Error(err) + } + + input, err := zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Error(err) + } + + err = input.Connect("ipc://kvmsg_selftest.ipc") + if err != nil { + t.Error(err) + } + + kvmap := make(map[string]*Kvmsg) + + // Test send and receive of simple message + kvmsg := NewKvmsg(1) + kvmsg.SetKey("key") + kvmsg.SetBody("body") + kvmsg.Dump() + err = kvmsg.Send(output) + + kvmsg.Store(kvmap) + if err != nil { + t.Error(err) + } + + kvmsg, err = RecvKvmsg(input) + if err != nil { + t.Error(err) + } + kvmsg.Dump() + key, err := kvmsg.GetKey() + if err != nil { + t.Error(err) + } + if key != "key" { + t.Error("Expected \"key\", got \"" + key + "\"") + } + kvmsg.Store(kvmap) + + input.Close() + output.Close() + os.Remove("kvmsg_selftest.ipc") +} diff --git a/vendor/github.com/pebbe/zmq4/examples/lbbroker.go b/vendor/github.com/pebbe/zmq4/examples/lbbroker.go new file mode 100644 index 0000000..e2c3ecd --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/lbbroker.go @@ -0,0 +1,188 @@ +// +// Load-balancing broker. +// Clients and workers are shown here in-process +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + //"math/rand" + "time" +) + +const ( + NBR_CLIENTS = 10 + NBR_WORKERS = 3 +) + +// Basic request-reply client using REQ socket +// Since Go Send and Recv can handle 0MQ binary identities we +// don't need printable text identity to allow routing. + +func client_task() { + client, _ := zmq.NewSocket(zmq.REQ) + defer client.Close() + // set_id(client) // Set a printable identity + client.Connect("ipc://frontend.ipc") + + // Send request, get reply + client.Send("HELLO", 0) + reply, _ := client.Recv(0) + fmt.Println("Client:", reply) +} + +// While this example runs in a single process, that is just to make +// it easier to start and stop the example. +// This is the worker task, using a REQ socket to do load-balancing. +// Since Go Send and Recv can handle 0MQ binary identities we +// don't need printable text identity to allow routing. + +func worker_task() { + worker, _ := zmq.NewSocket(zmq.REQ) + defer worker.Close() + // set_id(worker) + worker.Connect("ipc://backend.ipc") + + // Tell broker we're ready for work + worker.Send("READY", 0) + + for { + // Read and save all frames until we get an empty frame + // In this example there is only 1 but it could be more + identity, _ := worker.Recv(0) + empty, _ := worker.Recv(0) + if empty != "" { + panic(fmt.Sprintf("empty is not \"\": %q", empty)) + } + + // Get request, send reply + request, _ := worker.Recv(0) + fmt.Println("Worker:", request) + + worker.Send(identity, zmq.SNDMORE) + worker.Send("", zmq.SNDMORE) + worker.Send("OK", 0) + } +} + +// This is the main task. It starts the clients and workers, and then +// routes requests between the two layers. Workers signal READY when +// they start; after that we treat them as ready when they reply with +// a response back to a client. The load-balancing data structure is +// just a queue of next available workers. + +func main() { + // Prepare our sockets + frontend, _ := zmq.NewSocket(zmq.ROUTER) + backend, _ := zmq.NewSocket(zmq.ROUTER) + defer frontend.Close() + defer backend.Close() + frontend.Bind("ipc://frontend.ipc") + backend.Bind("ipc://backend.ipc") + + client_nbr := 0 + for ; client_nbr < NBR_CLIENTS; client_nbr++ { + go client_task() + } + for worker_nbr := 0; worker_nbr < NBR_WORKERS; worker_nbr++ { + go worker_task() + } + + // Here is the main loop for the least-recently-used queue. It has two + // sockets; a frontend for clients and a backend for workers. It polls + // the backend in all cases, and polls the frontend only when there are + // one or more workers ready. This is a neat way to use 0MQ's own queues + // to hold messages we're not ready to process yet. When we get a client + // reply, we pop the next available worker, and send the request to it, + // including the originating client identity. When a worker replies, we + // re-queue that worker, and we forward the reply to the original client, + // using the reply envelope. + + // Queue of available workers + worker_queue := make([]string, 0, 10) + + poller1 := zmq.NewPoller() + poller1.Add(backend, zmq.POLLIN) + poller2 := zmq.NewPoller() + poller2.Add(backend, zmq.POLLIN) + poller2.Add(frontend, zmq.POLLIN) + + for client_nbr > 0 { + // Poll frontend only if we have available workers + var sockets []zmq.Polled + if len(worker_queue) > 0 { + sockets, _ = poller2.Poll(-1) + } else { + sockets, _ = poller1.Poll(-1) + } + for _, socket := range sockets { + switch socket.Socket { + case backend: + + // Handle worker activity on backend + // Queue worker identity for load-balancing + worker_id, _ := backend.Recv(0) + if !(len(worker_queue) < NBR_WORKERS) { + panic("!(len(worker_queue) < NBR_WORKERS)") + } + worker_queue = append(worker_queue, worker_id) + + // Second frame is empty + empty, _ := backend.Recv(0) + if empty != "" { + panic(fmt.Sprintf("empty is not \"\": %q", empty)) + } + + // Third frame is READY or else a client reply identity + client_id, _ := backend.Recv(0) + + // If client reply, send rest back to frontend + if client_id != "READY" { + empty, _ := backend.Recv(0) + if empty != "" { + panic(fmt.Sprintf("empty is not \"\": %q", empty)) + } + reply, _ := backend.Recv(0) + frontend.Send(client_id, zmq.SNDMORE) + frontend.Send("", zmq.SNDMORE) + frontend.Send(reply, 0) + client_nbr-- + } + + case frontend: + // Here is how we handle a client request: + + // Now get next client request, route to last-used worker + // Client request is [identity][empty][request] + client_id, _ := frontend.Recv(0) + empty, _ := frontend.Recv(0) + if empty != "" { + panic(fmt.Sprintf("empty is not \"\": %q", empty)) + } + request, _ := frontend.Recv(0) + + backend.Send(worker_queue[0], zmq.SNDMORE) + backend.Send("", zmq.SNDMORE) + backend.Send(client_id, zmq.SNDMORE) + backend.Send("", zmq.SNDMORE) + backend.Send(request, 0) + + // Dequeue and drop the next worker identity + worker_queue = worker_queue[1:] + + } + } + } + + time.Sleep(100 * time.Millisecond) +} + +/* +func set_id(soc *zmq.Socket) { + identity := fmt.Sprintf("%04X-%04X", rand.Intn(0x10000), rand.Intn(0x10000)) + soc.SetIdentity(identity) +} +*/ diff --git a/vendor/github.com/pebbe/zmq4/examples/lbbroker2.go b/vendor/github.com/pebbe/zmq4/examples/lbbroker2.go new file mode 100644 index 0000000..f9e5ee2 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/lbbroker2.go @@ -0,0 +1,147 @@ +// +// Load-balancing broker. +// Demonstrates use of higher level functions. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "strings" + "time" +) + +const ( + NBR_CLIENTS = 10 + NBR_WORKERS = 3 + WORKER_READY = "\001" // Signals worker is ready +) + +// Basic request-reply client using REQ socket +// +func client_task() { + client, _ := zmq.NewSocket(zmq.REQ) + defer client.Close() + client.Connect("ipc://frontend.ipc") + + // Send request, get reply + for { + client.SendMessage("HELLO") + reply, _ := client.RecvMessage(0) + if len(reply) == 0 { + break + } + fmt.Println("Client:", strings.Join(reply, "\n\t")) + time.Sleep(time.Second) + } +} + +// Worker using REQ socket to do load-balancing +// +func worker_task() { + worker, _ := zmq.NewSocket(zmq.REQ) + defer worker.Close() + worker.Connect("ipc://backend.ipc") + + // Tell broker we're ready for work + worker.SendMessage(WORKER_READY) + + // Process messages as they arrive + for { + msg, e := worker.RecvMessage(0) + if e != nil { + break // Interrupted ?? + } + msg[len(msg)-1] = "OK" + worker.SendMessage(msg) + } +} + +// Now we come to the main task. This has the identical functionality to +// the previous lbbroker example but uses higher level functions to read +// and send messages: + +func main() { + // Prepare our sockets + frontend, _ := zmq.NewSocket(zmq.ROUTER) + backend, _ := zmq.NewSocket(zmq.ROUTER) + defer frontend.Close() + defer backend.Close() + frontend.Bind("ipc://frontend.ipc") + backend.Bind("ipc://backend.ipc") + + for client_nbr := 0; client_nbr < NBR_CLIENTS; client_nbr++ { + go client_task() + } + for worker_nbr := 0; worker_nbr < NBR_WORKERS; worker_nbr++ { + go worker_task() + } + + // Queue of available workers + workers := make([]string, 0, 10) + + poller1 := zmq.NewPoller() + poller1.Add(backend, zmq.POLLIN) + poller2 := zmq.NewPoller() + poller2.Add(backend, zmq.POLLIN) + poller2.Add(frontend, zmq.POLLIN) + +LOOP: + for { + // Poll frontend only if we have available workers + var sockets []zmq.Polled + var err error + if len(workers) > 0 { + sockets, err = poller2.Poll(-1) + } else { + sockets, err = poller1.Poll(-1) + } + if err != nil { + break // Interrupted + } + for _, socket := range sockets { + switch socket.Socket { + case backend: + // Handle worker activity on backend + + // Use worker identity for load-balancing + msg, err := backend.RecvMessage(0) + if err != nil { + break LOOP // Interrupted + } + identity, msg := unwrap(msg) + workers = append(workers, identity) + + // Forward message to client if it's not a READY + if msg[0] != WORKER_READY { + frontend.SendMessage(msg) + } + + case frontend: + // Get client request, route to first available worker + msg, err := frontend.RecvMessage(0) + if err == nil { + backend.SendMessage(workers[0], "", msg) + workers = workers[1:] + } + } + } + } + + time.Sleep(100 * time.Millisecond) +} + +// Pops frame off front of message and returns it as 'head' +// If next frame is empty, pops that empty frame. +// Return remaining frames of message as 'tail' +func unwrap(msg []string) (head string, tail []string) { + head = msg[0] + if len(msg) > 1 && msg[1] == "" { + tail = msg[2:] + } else { + tail = msg[1:] + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/lbbroker3.go b/vendor/github.com/pebbe/zmq4/examples/lbbroker3.go new file mode 100644 index 0000000..a9fea4c --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/lbbroker3.go @@ -0,0 +1,157 @@ +// +// Load-balancing broker. +// Demonstrates use of Reactor, and other higher level functions. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "strings" + "time" +) + +const ( + NBR_CLIENTS = 10 + NBR_WORKERS = 3 + WORKER_READY = "\001" // Signals worker is ready +) + +// Basic request-reply client using REQ socket +// +func client_task() { + client, _ := zmq.NewSocket(zmq.REQ) + defer client.Close() + client.Connect("ipc://frontend.ipc") + + // Send request, get reply + for { + client.SendMessage("HELLO") + reply, _ := client.RecvMessage(0) + if len(reply) == 0 { + break + } + fmt.Println("Client:", strings.Join(reply, "\n\t")) + time.Sleep(time.Second) + } +} + +// Worker using REQ socket to do load-balancing +// +func worker_task() { + worker, _ := zmq.NewSocket(zmq.REQ) + defer worker.Close() + worker.Connect("ipc://backend.ipc") + + // Tell broker we're ready for work + worker.SendMessage(WORKER_READY) + + // Process messages as they arrive + for { + msg, e := worker.RecvMessage(0) + if e != nil { + break // Interrupted + } + msg[len(msg)-1] = "OK" + worker.SendMessage(msg) + } +} + +// Our load-balancer structure, passed to reactor handlers +type lbbroker_t struct { + frontend *zmq.Socket // Listen to clients + backend *zmq.Socket // Listen to workers + workers []string // List of ready workers + reactor *zmq.Reactor +} + +// In the reactor design, each time a message arrives on a socket, the +// reactor passes it to a handler function. We have two handlers; one +// for the frontend, one for the backend: + +// Handle input from client, on frontend +func handle_frontend(lbbroker *lbbroker_t) error { + + // Get client request, route to first available worker + msg, err := lbbroker.frontend.RecvMessage(0) + if err != nil { + return err + } + lbbroker.backend.SendMessage(lbbroker.workers[0], "", msg) + lbbroker.workers = lbbroker.workers[1:] + + // Cancel reader on frontend if we went from 1 to 0 workers + if len(lbbroker.workers) == 0 { + lbbroker.reactor.RemoveSocket(lbbroker.frontend) + } + return nil +} + +// Handle input from worker, on backend +func handle_backend(lbbroker *lbbroker_t) error { + // Use worker identity for load-balancing + msg, err := lbbroker.backend.RecvMessage(0) + if err != nil { + return err + } + identity, msg := unwrap(msg) + lbbroker.workers = append(lbbroker.workers, identity) + + // Enable reader on frontend if we went from 0 to 1 workers + if len(lbbroker.workers) == 1 { + lbbroker.reactor.AddSocket(lbbroker.frontend, zmq.POLLIN, + func(e zmq.State) error { return handle_frontend(lbbroker) }) + } + + // Forward message to client if it's not a READY + if msg[0] != WORKER_READY { + lbbroker.frontend.SendMessage(msg) + } + + return nil +} + +// Now we come to the main task. This has the identical functionality to +// the previous lbbroker example but uses higher level functions to read +// and send messages: + +func main() { + lbbroker := &lbbroker_t{} + lbbroker.frontend, _ = zmq.NewSocket(zmq.ROUTER) + lbbroker.backend, _ = zmq.NewSocket(zmq.ROUTER) + defer lbbroker.frontend.Close() + defer lbbroker.backend.Close() + lbbroker.frontend.Bind("ipc://frontend.ipc") + lbbroker.backend.Bind("ipc://backend.ipc") + + for client_nbr := 0; client_nbr < NBR_CLIENTS; client_nbr++ { + go client_task() + } + for worker_nbr := 0; worker_nbr < NBR_WORKERS; worker_nbr++ { + go worker_task() + } + + // Queue of available workers + lbbroker.workers = make([]string, 0, 10) + + // Prepare reactor and fire it up + lbbroker.reactor = zmq.NewReactor() + lbbroker.reactor.AddSocket(lbbroker.backend, zmq.POLLIN, + func(e zmq.State) error { return handle_backend(lbbroker) }) + lbbroker.reactor.Run(-1) +} + +// Pops frame off front of message and returns it as 'head' +// If next frame is empty, pops that empty frame. +// Return remaining frames of message as 'tail' +func unwrap(msg []string) (head string, tail []string) { + head = msg[0] + if len(msg) > 1 && msg[1] == "" { + tail = msg[2:] + } else { + tail = msg[1:] + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/lpclient.go b/vendor/github.com/pebbe/zmq4/examples/lpclient.go new file mode 100644 index 0000000..3cfb4ca --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/lpclient.go @@ -0,0 +1,88 @@ +// +// Lazy Pirate client. +// Use zmq_poll to do a safe request-reply +// To run, start lpserver and then randomly kill/restart it +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "strconv" + "time" +) + +const ( + REQUEST_TIMEOUT = 2500 * time.Millisecond // msecs, (> 1000!) + REQUEST_RETRIES = 3 // Before we abandon + SERVER_ENDPOINT = "tcp://localhost:5555" +) + +func main() { + fmt.Println("I: connecting to server...") + client, err := zmq.NewSocket(zmq.REQ) + if err != nil { + panic(err) + } + client.Connect(SERVER_ENDPOINT) + + poller := zmq.NewPoller() + poller.Add(client, zmq.POLLIN) + + sequence := 0 + retries_left := REQUEST_RETRIES + for retries_left > 0 { + // We send a request, then we work to get a reply + sequence++ + client.SendMessage(sequence) + + for expect_reply := true; expect_reply; { + // Poll socket for a reply, with timeout + sockets, err := poller.Poll(REQUEST_TIMEOUT) + if err != nil { + break // Interrupted + } + + // Here we process a server reply and exit our loop if the + // reply is valid. If we didn't a reply we close the client + // socket and resend the request. We try a number of times + // before finally abandoning: + + if len(sockets) > 0 { + // We got a reply from the server, must match sequence + reply, err := client.RecvMessage(0) + if err != nil { + break // Interrupted + } + seq, _ := strconv.Atoi(reply[0]) + if seq == sequence { + fmt.Printf("I: server replied OK (%s)\n", reply[0]) + retries_left = REQUEST_RETRIES + expect_reply = false + } else { + fmt.Printf("E: malformed reply from server: %s\n", reply) + } + } else { + retries_left-- + if retries_left == 0 { + fmt.Println("E: server seems to be offline, abandoning") + break + } else { + fmt.Println("W: no response from server, retrying...") + // Old socket is confused; close it and open a new one + client.Close() + client, _ = zmq.NewSocket(zmq.REQ) + client.Connect(SERVER_ENDPOINT) + // Recreate poller for new client + poller = zmq.NewPoller() + poller.Add(client, zmq.POLLIN) + // Send request again, on new socket + client.SendMessage(sequence) + } + } + } + } + client.Close() +} diff --git a/vendor/github.com/pebbe/zmq4/examples/lpserver.go b/vendor/github.com/pebbe/zmq4/examples/lpserver.go new file mode 100644 index 0000000..8510782 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/lpserver.go @@ -0,0 +1,42 @@ +// +// Lazy Pirate server. +// Binds REQ socket to tcp://*:5555 +// Like hwserver except: +// - echoes request as-is +// - randomly runs slowly, or exits to simulate a crash. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "time" +) + +func main() { + rand.Seed(time.Now().UnixNano()) + + server, _ := zmq.NewSocket(zmq.REP) + defer server.Close() + server.Bind("tcp://*:5555") + + for cycles := 0; true; { + request, _ := server.RecvMessage(0) + cycles++ + + // Simulate various problems, after a few cycles + if cycles > 3 && rand.Intn(3) == 0 { + fmt.Println("I: simulating a crash") + break + } else if cycles > 3 && rand.Intn(3) == 0 { + fmt.Println("I: simulating CPU overload") + time.Sleep(2 * time.Second) + } + fmt.Printf("I: normal request (%s)\n", request) + time.Sleep(time.Second) // Do some heavy work + server.SendMessage(request) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/lvcache.go b/vendor/github.com/pebbe/zmq4/examples/lvcache.go new file mode 100644 index 0000000..f139307 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/lvcache.go @@ -0,0 +1,69 @@ +// +// Last value cache +// Uses XPUB subscription messages to re-send data +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "time" +) + +func main() { + frontend, _ := zmq.NewSocket(zmq.SUB) + frontend.Bind("tcp://*:5557") + backend, _ := zmq.NewSocket(zmq.XPUB) + backend.Bind("tcp://*:5558") + + // Subscribe to every single topic from publisher + frontend.SetSubscribe("") + + // Store last instance of each topic in a cache + cache := make(map[string]string) + + // We route topic updates from frontend to backend, and + // we handle subscriptions by sending whatever we cached, + // if anything: + poller := zmq.NewPoller() + poller.Add(frontend, zmq.POLLIN) + poller.Add(backend, zmq.POLLIN) +LOOP: + for { + polled, err := poller.Poll(1000 * time.Millisecond) + if err != nil { + break // Interrupted + } + + for _, item := range polled { + switch socket := item.Socket; socket { + case frontend: + // Any new topic data we cache and then forward + msg, err := frontend.RecvMessage(0) + if err != nil { + break LOOP + } + cache[msg[0]] = msg[1] + backend.SendMessage(msg) + case backend: + // When we get a new subscription we pull data from the cache: + msg, err := backend.RecvMessage(0) + if err != nil { + break LOOP + } + frame := msg[0] + // Event is one byte 0=unsub or 1=sub, followed by topic + if frame[0] == 1 { + topic := frame[1:] + fmt.Println("Sending cached topic", topic) + previous, ok := cache[topic] + if ok { + backend.SendMessage(topic, previous) + } + } + } + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mdapi/const.go b/vendor/github.com/pebbe/zmq4/examples/mdapi/const.go new file mode 100644 index 0000000..05fd08a --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mdapi/const.go @@ -0,0 +1,30 @@ +// Majordomo Protocol Client and Worker API. +// Implements the MDP/Worker spec at http://rfc.zeromq.org/spec:7. +package mdapi + +const ( + // This is the version of MDP/Client we implement + MDPC_CLIENT = "MDPC01" + + // This is the version of MDP/Worker we implement + MDPW_WORKER = "MDPW01" +) + +const ( + // MDP/Server commands, as strings + MDPW_READY = string(iota + 1) + MDPW_REQUEST + MDPW_REPLY + MDPW_HEARTBEAT + MDPW_DISCONNECT +) + +var ( + MDPS_COMMANDS = map[string]string{ + MDPW_READY: "READY", + MDPW_REQUEST: "REQUEST", + MDPW_REPLY: "REPLY", + MDPW_HEARTBEAT: "HEARTBEAT", + MDPW_DISCONNECT: "DISCONNECT", + } +) diff --git a/vendor/github.com/pebbe/zmq4/examples/mdapi/mdcliapi.go b/vendor/github.com/pebbe/zmq4/examples/mdapi/mdcliapi.go new file mode 100644 index 0000000..bdb4501 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mdapi/mdcliapi.go @@ -0,0 +1,173 @@ +// Majordomo Protocol Client API. +// Implements the MDP/Worker spec at http://rfc.zeromq.org/spec:7. + +package mdapi + +import ( + zmq "github.com/pebbe/zmq4" + + "errors" + "log" + "runtime" + "time" +) + +// Structure of our class +// We access these properties only via class methods + +// Majordomo Protocol Client API. +type Mdcli struct { + broker string + client *zmq.Socket // Socket to broker + verbose bool // Print activity to stdout + timeout time.Duration // Request timeout + retries int // Request retries + poller *zmq.Poller +} + +// --------------------------------------------------------------------- + +// Connect or reconnect to broker. +func (mdcli *Mdcli) ConnectToBroker() (err error) { + if mdcli.client != nil { + mdcli.client.Close() + mdcli.client = nil + } + mdcli.client, err = zmq.NewSocket(zmq.REQ) + if err != nil { + if mdcli.verbose { + log.Println("E: ConnectToBroker() creating socket failed") + } + return + } + mdcli.poller = zmq.NewPoller() + mdcli.poller.Add(mdcli.client, zmq.POLLIN) + + if mdcli.verbose { + log.Printf("I: connecting to broker at %s...", mdcli.broker) + } + err = mdcli.client.Connect(mdcli.broker) + if err != nil && mdcli.verbose { + log.Println("E: ConnectToBroker() failed to connect to broker", mdcli.broker) + } + + return +} + +// Here we have the constructor and destructor for our mdcli class: + +// --------------------------------------------------------------------- +// Constructor + +func NewMdcli(broker string, verbose bool) (mdcli *Mdcli, err error) { + + mdcli = &Mdcli{ + broker: broker, + verbose: verbose, + timeout: time.Duration(2500 * time.Millisecond), + retries: 3, // Before we abandon + } + err = mdcli.ConnectToBroker() + runtime.SetFinalizer(mdcli, (*Mdcli).Close) + return +} + +// --------------------------------------------------------------------- +// Destructor + +func (mdcli *Mdcli) Close() (err error) { + if mdcli.client != nil { + err = mdcli.client.Close() + mdcli.client = nil + } + return +} + +// These are the class methods. We can set the request timeout and number +// of retry attempts, before sending requests: + +// --------------------------------------------------------------------- + +// Set request timeout. +func (mdcli *Mdcli) SetTimeout(timeout time.Duration) { + mdcli.timeout = timeout +} + +// --------------------------------------------------------------------- + +// Set request retries. +func (mdcli *Mdcli) SetRetries(retries int) { + mdcli.retries = retries +} + +// Here is the send method. It sends a request to the broker and gets a +// reply even if it has to retry several times. It returns the reply +// message, or error if there was no reply after multiple attempts: +func (mdcli *Mdcli) Send(service string, request ...string) (reply []string, err error) { + // Prefix request with protocol frames + // Frame 1: "MDPCxy" (six bytes, MDP/Client x.y) + // Frame 2: Service name (printable string) + + req := make([]string, 2, len(request)+2) + req = append(req, request...) + req[1] = service + req[0] = MDPC_CLIENT + if mdcli.verbose { + log.Printf("I: send request to '%s' service: %q\n", service, req) + } + for retries_left := mdcli.retries; retries_left > 0; retries_left-- { + _, err = mdcli.client.SendMessage(req) + if err != nil { + break + } + + // On any blocking call, libzmq will return -1 if there was + // an error; we could in theory check for different error codes + // but in practice it's OK to assume it was EINTR (Ctrl-C): + + var polled []zmq.Polled + polled, err = mdcli.poller.Poll(mdcli.timeout) + if err != nil { + break // Interrupted + } + + // If we got a reply, process it + if len(polled) > 0 { + var msg []string + msg, err = mdcli.client.RecvMessage(0) + if err != nil { + break + } + if mdcli.verbose { + log.Printf("I: received reply: %q\n", msg) + } + // We would handle malformed replies better in real code + if len(msg) < 3 { + panic("len(msg) < 3") + } + + if msg[0] != MDPC_CLIENT { + panic("msg[0] != MDPC_CLIENT") + } + + if msg[1] != service { + panic("msg[1] != service") + } + + reply = msg[2:] + return // Success + } else { + if mdcli.verbose { + log.Println("W: no reply, reconnecting...") + } + mdcli.ConnectToBroker() + } + } + if err == nil { + err = errors.New("permanent error") + } + if mdcli.verbose { + log.Println("W: permanent error, abandoning") + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mdapi/mdcliapi2.go b/vendor/github.com/pebbe/zmq4/examples/mdapi/mdcliapi2.go new file mode 100644 index 0000000..62b1b5b --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mdapi/mdcliapi2.go @@ -0,0 +1,171 @@ +// Majordomo Protocol Client API. +// Implements the MDP/Worker spec at http://rfc.zeromq.org/spec:7. + +package mdapi + +import ( + zmq "github.com/pebbe/zmq4" + + "errors" + "log" + "runtime" + "time" +) + +var ( + errPermanent = errors.New("permanent error, abandoning request") +) + +// Structure of our class +// We access these properties only via class methods + +// Majordomo Protocol Client API. +type Mdcli2 struct { + broker string + client *zmq.Socket // Socket to broker + verbose bool // Print activity to stdout + timeout time.Duration // Request timeout + poller *zmq.Poller +} + +// --------------------------------------------------------------------- + +// Connect or reconnect to broker. In this asynchronous class we use a +// DEALER socket instead of a REQ socket; this lets us send any number +// of requests without waiting for a reply. +func (mdcli2 *Mdcli2) ConnectToBroker() (err error) { + if mdcli2.client != nil { + mdcli2.client.Close() + mdcli2.client = nil + } + mdcli2.client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + if mdcli2.verbose { + log.Println("E: ConnectToBroker() creating socket failed") + } + return + } + mdcli2.poller = zmq.NewPoller() + mdcli2.poller.Add(mdcli2.client, zmq.POLLIN) + + if mdcli2.verbose { + log.Printf("I: connecting to broker at %s...", mdcli2.broker) + } + err = mdcli2.client.Connect(mdcli2.broker) + if err != nil && mdcli2.verbose { + log.Println("E: ConnectToBroker() failed to connect to broker", mdcli2.broker) + } + + return +} + +// Here we have the constructor and destructor for our mdcli2 class: + +// The constructor and destructor are the same as in mdcliapi, except +// we don't do retries, so there's no retries property. +// --------------------------------------------------------------------- +// Constructor + +func NewMdcli2(broker string, verbose bool) (mdcli2 *Mdcli2, err error) { + + mdcli2 = &Mdcli2{ + broker: broker, + verbose: verbose, + timeout: time.Duration(2500 * time.Millisecond), + } + err = mdcli2.ConnectToBroker() + runtime.SetFinalizer(mdcli2, (*Mdcli2).Close) + return +} + +// --------------------------------------------------------------------- +// Destructor + +func (mdcli2 *Mdcli2) Close() (err error) { + if mdcli2.client != nil { + err = mdcli2.client.Close() + mdcli2.client = nil + } + return +} + +// --------------------------------------------------------------------- + +// Set request timeout. +func (mdcli2 *Mdcli2) SetTimeout(timeout time.Duration) { + mdcli2.timeout = timeout +} + +// The send method now just sends one message, without waiting for a +// reply. Since we're using a DEALER socket we have to send an empty +// frame at the start, to create the same envelope that the REQ socket +// would normally make for us: +func (mdcli2 *Mdcli2) Send(service string, request ...string) (err error) { + // Prefix request with protocol frames + // Frame 0: empty (REQ emulation) + // Frame 1: "MDPCxy" (six bytes, MDP/Client x.y) + // Frame 2: Service name (printable string) + + req := make([]string, 3, len(request)+3) + req = append(req, request...) + req[2] = service + req[1] = MDPC_CLIENT + req[0] = "" + if mdcli2.verbose { + log.Printf("I: send request to '%s' service: %q\n", service, req) + } + _, err = mdcli2.client.SendMessage(req) + return +} + +// The recv method waits for a reply message and returns that to the +// caller. +// --------------------------------------------------------------------- +// Returns the reply message or NULL if there was no reply. Does not +// attempt to recover from a broker failure, this is not possible +// without storing all unanswered requests and resending them all... + +func (mdcli2 *Mdcli2) Recv() (msg []string, err error) { + + msg = []string{} + + // Poll socket for a reply, with timeout + polled, err := mdcli2.poller.Poll(mdcli2.timeout) + if err != nil { + return // Interrupted + } + + // If we got a reply, process it + if len(polled) > 0 { + msg, err = mdcli2.client.RecvMessage(0) + if err != nil { + log.Println("W: interrupt received, killing client...") + return + } + + if mdcli2.verbose { + log.Printf("I: received reply: %q\n", msg) + } + // Don't try to handle errors, just assert noisily + if len(msg) < 4 { + panic("len(msg) < 4") + } + + if msg[0] != "" { + panic("msg[0] != \"\"") + } + + if msg[1] != MDPC_CLIENT { + panic("msg[1] != MDPC_CLIENT") + } + + msg = msg[3:] + return // Success + } + + err = errPermanent + if mdcli2.verbose { + log.Println(err) + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mdapi/mdwrkapi.go b/vendor/github.com/pebbe/zmq4/examples/mdapi/mdwrkapi.go new file mode 100644 index 0000000..5f581b6 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mdapi/mdwrkapi.go @@ -0,0 +1,248 @@ +// Majordomo Protocol Worker API. +// Implements the MDP/Worker spec at http://rfc.zeromq.org/spec:7. + +package mdapi + +import ( + zmq "github.com/pebbe/zmq4" + + "log" + "runtime" + "time" +) + +const ( + heartbeat_liveness = 3 // 3-5 is reasonable +) + +// This is the structure of a worker API instance. We use a pseudo-OO +// approach in a lot of the C examples, as well as the CZMQ binding: + +// Structure of our class +// We access these properties only via class methods + +// Majordomo Protocol Worker API. +type Mdwrk struct { + broker string + service string + worker *zmq.Socket // Socket to broker + poller *zmq.Poller + verbose bool // Print activity to stdout + + // Heartbeat management + heartbeat_at time.Time // When to send HEARTBEAT + liveness int // How many attempts left + heartbeat time.Duration // Heartbeat delay, msecs + reconnect time.Duration // Reconnect delay, msecs + + expect_reply bool // False only at start + reply_to string // Return identity, if any +} + +// We have two utility functions; to send a message to the broker and +// to (re-)connect to the broker: + +// --------------------------------------------------------------------- + +// Send message to broker. +func (mdwrk *Mdwrk) SendToBroker(command string, option string, msg []string) (err error) { + + n := 3 + if option != "" { + n++ + } + m := make([]string, n, n+len(msg)) + m = append(m, msg...) + + // Stack protocol envelope to start of message + if option != "" { + m[3] = option + } + m[2] = command + m[1] = MDPW_WORKER + m[0] = "" + + if mdwrk.verbose { + log.Printf("I: sending %s to broker %q\n", MDPS_COMMANDS[command], m) + } + _, err = mdwrk.worker.SendMessage(m) + return +} + +// --------------------------------------------------------------------- + +// Connect or reconnect to broker. +func (mdwrk *Mdwrk) ConnectToBroker() (err error) { + if mdwrk.worker != nil { + mdwrk.worker.Close() + mdwrk.worker = nil + } + mdwrk.worker, err = zmq.NewSocket(zmq.DEALER) + err = mdwrk.worker.Connect(mdwrk.broker) + if mdwrk.verbose { + log.Printf("I: connecting to broker at %s...\n", mdwrk.broker) + } + mdwrk.poller = zmq.NewPoller() + mdwrk.poller.Add(mdwrk.worker, zmq.POLLIN) + + // Register service with broker + err = mdwrk.SendToBroker(MDPW_READY, mdwrk.service, []string{}) + + // If liveness hits zero, queue is considered disconnected + mdwrk.liveness = heartbeat_liveness + mdwrk.heartbeat_at = time.Now().Add(mdwrk.heartbeat) + + return +} + +// Here we have the constructor and destructor for our mdwrk class: + +// --------------------------------------------------------------------- +// Constructor + +func NewMdwrk(broker, service string, verbose bool) (mdwrk *Mdwrk, err error) { + + mdwrk = &Mdwrk{ + broker: broker, + service: service, + verbose: verbose, + heartbeat: 2500 * time.Millisecond, + reconnect: 2500 * time.Millisecond, + } + + err = mdwrk.ConnectToBroker() + + runtime.SetFinalizer(mdwrk, (*Mdwrk).Close) + + return +} + +// --------------------------------------------------------------------- +// Destructor + +func (mdwrk *Mdwrk) Close() { + if mdwrk.worker != nil { + mdwrk.worker.Close() + mdwrk.worker = nil + } +} + +// We provide two methods to configure the worker API. You can set the +// heartbeat interval and retries to match the expected network performance. + +// --------------------------------------------------------------------- + +// Set heartbeat delay. +func (mdwrk *Mdwrk) SetHeartbeat(heartbeat time.Duration) { + mdwrk.heartbeat = heartbeat +} + +// --------------------------------------------------------------------- + +// Set reconnect delay. +func (mdwrk *Mdwrk) SetReconnect(reconnect time.Duration) { + mdwrk.reconnect = reconnect +} + +// This is the recv method; it's a little misnamed since it first sends +// any reply and then waits for a new request. If you have a better name +// for this, let me know: + +// --------------------------------------------------------------------- + +// Send reply, if any, to broker and wait for next request. +func (mdwrk *Mdwrk) Recv(reply []string) (msg []string, err error) { + // Format and send the reply if we were provided one + if len(reply) == 0 && mdwrk.expect_reply { + panic("No reply, expected") + } + if len(reply) > 0 { + if mdwrk.reply_to == "" { + panic("mdwrk.reply_to == \"\"") + } + m := make([]string, 2, 2+len(reply)) + m = append(m, reply...) + m[0] = mdwrk.reply_to + m[1] = "" + err = mdwrk.SendToBroker(MDPW_REPLY, "", m) + } + mdwrk.expect_reply = true + + for { + var polled []zmq.Polled + polled, err = mdwrk.poller.Poll(mdwrk.heartbeat) + if err != nil { + break // Interrupted + } + + if len(polled) > 0 { + msg, err = mdwrk.worker.RecvMessage(0) + if err != nil { + break // Interrupted + } + if mdwrk.verbose { + log.Printf("I: received message from broker: %q\n", msg) + } + mdwrk.liveness = heartbeat_liveness + + // Don't try to handle errors, just assert noisily + if len(msg) < 3 { + panic("len(msg) < 3") + } + + if msg[0] != "" { + panic("msg[0] != \"\"") + } + + if msg[1] != MDPW_WORKER { + panic("msg[1] != MDPW_WORKER") + } + + command := msg[2] + msg = msg[3:] + switch command { + case MDPW_REQUEST: + // We should pop and save as many addresses as there are + // up to a null part, but for now, just save one... + mdwrk.reply_to, msg = unwrap(msg) + // Here is where we actually have a message to process; we + // return it to the caller application: + return // We have a request to process + case MDPW_HEARTBEAT: + // Do nothing for heartbeats + case MDPW_DISCONNECT: + mdwrk.ConnectToBroker() + default: + log.Printf("E: invalid input message %q\n", msg) + } + } else { + mdwrk.liveness-- + if mdwrk.liveness == 0 { + if mdwrk.verbose { + log.Println("W: disconnected from broker - retrying...") + } + time.Sleep(mdwrk.reconnect) + mdwrk.ConnectToBroker() + } + } + // Send HEARTBEAT if it's time + if time.Now().After(mdwrk.heartbeat_at) { + mdwrk.SendToBroker(MDPW_HEARTBEAT, "", []string{}) + mdwrk.heartbeat_at = time.Now().Add(mdwrk.heartbeat) + } + } + return +} + +// Pops frame off front of message and returns it as 'head' +// If next frame is empty, pops that empty frame. +// Return remaining frames of message as 'tail' +func unwrap(msg []string) (head string, tail []string) { + head = msg[0] + if len(msg) > 1 && msg[1] == "" { + tail = msg[2:] + } else { + tail = msg[1:] + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mdbroker.go b/vendor/github.com/pebbe/zmq4/examples/mdbroker.go new file mode 100644 index 0000000..ee6ae82 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mdbroker.go @@ -0,0 +1,426 @@ +// +// Majordomo Protocol broker. +// A minimal Go implementation of the Majordomo Protocol as defined in +// http://rfc.zeromq.org/spec:7 and http://rfc.zeromq.org/spec:8. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + "github.com/pebbe/zmq4/examples/mdapi" + + "fmt" + "log" + "os" + "runtime" + "time" +) + +const ( + // We'd normally pull these from config data + + HEARTBEAT_LIVENESS = 3 // 3-5 is reasonable + HEARTBEAT_INTERVAL = 2500 * time.Millisecond // msecs + HEARTBEAT_EXPIRY = HEARTBEAT_INTERVAL * HEARTBEAT_LIVENESS +) + +// The broker class defines a single broker instance: + +type Broker struct { + socket *zmq.Socket // Socket for clients & workers + verbose bool // Print activity to stdout + endpoint string // Broker binds to this endpoint + services map[string]*Service // Hash of known services + workers map[string]*Worker // Hash of known workers + waiting []*Worker // List of waiting workers + heartbeat_at time.Time // When to send HEARTBEAT +} + +// The service class defines a single service instance: + +type Service struct { + broker *Broker // Broker instance + name string // Service name + requests [][]string // List of client requests + waiting []*Worker // List of waiting workers +} + +// The worker class defines a single worker, idle or active: + +type Worker struct { + broker *Broker // Broker instance + id_string string // Identity of worker as string + identity string // Identity frame for routing + service *Service // Owning service, if known + expiry time.Time // Expires at unless heartbeat +} + +// Here are the constructor and destructor for the broker: + +func NewBroker(verbose bool) (broker *Broker, err error) { + + // Initialize broker state + broker = &Broker{ + verbose: verbose, + services: make(map[string]*Service), + workers: make(map[string]*Worker), + waiting: make([]*Worker, 0), + heartbeat_at: time.Now().Add(HEARTBEAT_INTERVAL), + } + broker.socket, err = zmq.NewSocket(zmq.ROUTER) + + broker.socket.SetRcvhwm(500000) // or example mdclient2 won't work + + runtime.SetFinalizer(broker, (*Broker).Close) + return +} + +func (broker *Broker) Close() (err error) { + if broker.socket != nil { + err = broker.socket.Close() + broker.socket = nil + } + return +} + +// The bind method binds the broker instance to an endpoint. We can call +// this multiple times. Note that MDP uses a single socket for both clients +// and workers: + +func (broker *Broker) Bind(endpoint string) (err error) { + err = broker.socket.Bind(endpoint) + if err != nil { + log.Println("E: MDP broker/0.2.0 failed to bind at", endpoint) + return + } + log.Println("I: MDP broker/0.2.0 is active at", endpoint) + return +} + +// The WorkerMsg method processes one READY, REPLY, HEARTBEAT or +// DISCONNECT message sent to the broker by a worker: + +func (broker *Broker) WorkerMsg(sender string, msg []string) { + // At least, command + if len(msg) == 0 { + panic("len(msg) == 0") + } + + command, msg := popStr(msg) + id_string := fmt.Sprintf("%q", sender) + _, worker_ready := broker.workers[id_string] + worker := broker.WorkerRequire(sender) + + switch command { + case mdapi.MDPW_READY: + if worker_ready { // Not first command in session + worker.Delete(true) + } else if len(sender) >= 4 /* Reserved service name */ && sender[:4] == "mmi." { + worker.Delete(true) + } else { + // Attach worker to service and mark as idle + worker.service = broker.ServiceRequire(msg[0]) + worker.Waiting() + } + case mdapi.MDPW_REPLY: + if worker_ready { + // Remove & save client return envelope and insert the + // protocol header and service name, then rewrap envelope. + client, msg := unwrap(msg) + broker.socket.SendMessage(client, "", mdapi.MDPC_CLIENT, worker.service.name, msg) + worker.Waiting() + } else { + worker.Delete(true) + } + case mdapi.MDPW_HEARTBEAT: + if worker_ready { + worker.expiry = time.Now().Add(HEARTBEAT_EXPIRY) + } else { + worker.Delete(true) + } + case mdapi.MDPW_DISCONNECT: + worker.Delete(false) + default: + log.Printf("E: invalid input message %q\n", msg) + } +} + +// Process a request coming from a client. We implement MMI requests +// directly here (at present, we implement only the mmi.service request): + +func (broker *Broker) ClientMsg(sender string, msg []string) { + // Service name + body + if len(msg) < 2 { + panic("len(msg) < 2") + } + + service_frame, msg := popStr(msg) + service := broker.ServiceRequire(service_frame) + + // Set reply return identity to client sender + m := []string{sender, ""} + msg = append(m, msg...) + + // If we got a MMI service request, process that internally + if len(service_frame) >= 4 && service_frame[:4] == "mmi." { + var return_code string + if service_frame == "mmi.service" { + name := msg[len(msg)-1] + service, ok := broker.services[name] + if ok && len(service.waiting) > 0 { + return_code = "200" + } else { + return_code = "404" + } + } else { + return_code = "501" + } + + msg[len(msg)-1] = return_code + + // Remove & save client return envelope and insert the + // protocol header and service name, then rewrap envelope. + client, msg := unwrap(msg) + broker.socket.SendMessage(client, "", mdapi.MDPC_CLIENT, service_frame, msg) + } else { + // Else dispatch the message to the requested service + service.Dispatch(msg) + } +} + +// The purge method deletes any idle workers that haven't pinged us in a +// while. We hold workers from oldest to most recent, so we can stop +// scanning whenever we find a live worker. This means we'll mainly stop +// at the first worker, which is essential when we have large numbers of +// workers (since we call this method in our critical path): + +func (broker *Broker) Purge() { + now := time.Now() + for len(broker.waiting) > 0 { + if broker.waiting[0].expiry.After(now) { + break // Worker is alive, we're done here + } + if broker.verbose { + log.Println("I: deleting expired worker:", broker.waiting[0].id_string) + } + broker.waiting[0].Delete(false) + } +} + +// Here is the implementation of the methods that work on a service: + +// Lazy constructor that locates a service by name, or creates a new +// service if there is no service already with that name. + +func (broker *Broker) ServiceRequire(service_frame string) (service *Service) { + name := service_frame + service, ok := broker.services[name] + if !ok { + service = &Service{ + broker: broker, + name: name, + requests: make([][]string, 0), + waiting: make([]*Worker, 0), + } + broker.services[name] = service + if broker.verbose { + log.Println("I: added service:", name) + } + } + return +} + +// The dispatch method sends requests to waiting workers: + +func (service *Service) Dispatch(msg []string) { + + if len(msg) > 0 { + // Queue message if any + service.requests = append(service.requests, msg) + } + + service.broker.Purge() + for len(service.waiting) > 0 && len(service.requests) > 0 { + var worker *Worker + worker, service.waiting = popWorker(service.waiting) + service.broker.waiting = delWorker(service.broker.waiting, worker) + msg, service.requests = popMsg(service.requests) + worker.Send(mdapi.MDPW_REQUEST, "", msg) + } +} + +// Here is the implementation of the methods that work on a worker: + +// Lazy constructor that locates a worker by identity, or creates a new +// worker if there is no worker already with that identity. + +func (broker *Broker) WorkerRequire(identity string) (worker *Worker) { + + // broker.workers is keyed off worker identity + id_string := fmt.Sprintf("%q", identity) + worker, ok := broker.workers[id_string] + if !ok { + worker = &Worker{ + broker: broker, + id_string: id_string, + identity: identity, + } + broker.workers[id_string] = worker + if broker.verbose { + log.Printf("I: registering new worker: %s\n", id_string) + } + } + return +} + +// The delete method deletes the current worker. + +func (worker *Worker) Delete(disconnect bool) { + if disconnect { + worker.Send(mdapi.MDPW_DISCONNECT, "", []string{}) + } + + if worker.service != nil { + worker.service.waiting = delWorker(worker.service.waiting, worker) + } + worker.broker.waiting = delWorker(worker.broker.waiting, worker) + delete(worker.broker.workers, worker.id_string) +} + +// The send method formats and sends a command to a worker. The caller may +// also provide a command option, and a message payload: + +func (worker *Worker) Send(command, option string, msg []string) (err error) { + n := 4 + if option != "" { + n++ + } + m := make([]string, n, n+len(msg)) + m = append(m, msg...) + + // Stack protocol envelope to start of message + if option != "" { + m[4] = option + } + m[3] = command + m[2] = mdapi.MDPW_WORKER + + // Stack routing envelope to start of message + m[1] = "" + m[0] = worker.identity + + if worker.broker.verbose { + log.Printf("I: sending %s to worker %q\n", mdapi.MDPS_COMMANDS[command], m) + } + _, err = worker.broker.socket.SendMessage(m) + return +} + +// This worker is now waiting for work + +func (worker *Worker) Waiting() { + // Queue to broker and service waiting lists + worker.broker.waiting = append(worker.broker.waiting, worker) + worker.service.waiting = append(worker.service.waiting, worker) + worker.expiry = time.Now().Add(HEARTBEAT_EXPIRY) + worker.service.Dispatch([]string{}) +} + +// Finally here is the main task. We create a new broker instance and +// then processes messages on the broker socket: + +func main() { + verbose := false + if len(os.Args) > 1 && os.Args[1] == "-v" { + verbose = true + } + + broker, _ := NewBroker(verbose) + broker.Bind("tcp://*:5555") + + poller := zmq.NewPoller() + poller.Add(broker.socket, zmq.POLLIN) + + // Get and process messages forever or until interrupted + for { + polled, err := poller.Poll(HEARTBEAT_INTERVAL) + if err != nil { + break // Interrupted + } + + // Process next input message, if any + if len(polled) > 0 { + msg, err := broker.socket.RecvMessage(0) + if err != nil { + break // Interrupted + } + if broker.verbose { + log.Printf("I: received message: %q\n", msg) + } + sender, msg := popStr(msg) + _, msg = popStr(msg) + header, msg := popStr(msg) + + switch header { + case mdapi.MDPC_CLIENT: + broker.ClientMsg(sender, msg) + case mdapi.MDPW_WORKER: + broker.WorkerMsg(sender, msg) + default: + log.Printf("E: invalid message: %q\n", msg) + } + } + // Disconnect and delete any expired workers + // Send heartbeats to idle workers if needed + if time.Now().After(broker.heartbeat_at) { + broker.Purge() + for _, worker := range broker.waiting { + worker.Send(mdapi.MDPW_HEARTBEAT, "", []string{}) + } + broker.heartbeat_at = time.Now().Add(HEARTBEAT_INTERVAL) + } + } + log.Println("W: interrupt received, shutting down...") +} + +// Pops frame off front of message and returns it as 'head' +// If next frame is empty, pops that empty frame. +// Return remaining frames of message as 'tail' +func unwrap(msg []string) (head string, tail []string) { + head = msg[0] + if len(msg) > 1 && msg[1] == "" { + tail = msg[2:] + } else { + tail = msg[1:] + } + return +} + +func popStr(ss []string) (s string, ss2 []string) { + s = ss[0] + ss2 = ss[1:] + return +} + +func popMsg(msgs [][]string) (msg []string, msgs2 [][]string) { + msg = msgs[0] + msgs2 = msgs[1:] + return +} + +func popWorker(workers []*Worker) (worker *Worker, workers2 []*Worker) { + worker = workers[0] + workers2 = workers[1:] + return +} + +func delWorker(workers []*Worker, worker *Worker) []*Worker { + for i := 0; i < len(workers); i++ { + if workers[i] == worker { + workers = append(workers[:i], workers[i+1:]...) + i-- + } + } + return workers +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mdclient.go b/vendor/github.com/pebbe/zmq4/examples/mdclient.go new file mode 100644 index 0000000..ddfb8ca --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mdclient.go @@ -0,0 +1,32 @@ +// +// Majordomo Protocol client example. +// Uses the mdcli API to hide all MDP aspects +// + +package main + +import ( + "github.com/pebbe/zmq4/examples/mdapi" + + "fmt" + "log" + "os" +) + +func main() { + var verbose bool + if len(os.Args) > 1 && os.Args[1] == "-v" { + verbose = true + } + session, _ := mdapi.NewMdcli("tcp://localhost:5555", verbose) + + count := 0 + for ; count < 100000; count++ { + _, err := session.Send("echo", "Hello world") + if err != nil { + log.Println(err) + break // Interrupt or failure + } + } + fmt.Printf("%d requests/replies processed\n", count) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mdclient2.go b/vendor/github.com/pebbe/zmq4/examples/mdclient2.go new file mode 100644 index 0000000..de11061 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mdclient2.go @@ -0,0 +1,39 @@ +// +// Majordomo Protocol client example - asynchronous. +// Uses the mdcli API to hide all MDP aspects +// + +package main + +import ( + "github.com/pebbe/zmq4/examples/mdapi" + + "fmt" + "log" + "os" +) + +func main() { + var verbose bool + if len(os.Args) > 1 && os.Args[1] == "-v" { + verbose = true + } + session, _ := mdapi.NewMdcli2("tcp://localhost:5555", verbose) + + var count int + for count = 0; count < 100000; count++ { + err := session.Send("echo", "Hello world") + if err != nil { + log.Println("Send:", err) + break + } + } + for count = 0; count < 100000; count++ { + _, err := session.Recv() + if err != nil { + log.Println("Recv:", err) + break + } + } + fmt.Printf("%d replies received\n", count) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mdworker.go b/vendor/github.com/pebbe/zmq4/examples/mdworker.go new file mode 100644 index 0000000..35c25be --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mdworker.go @@ -0,0 +1,32 @@ +// +// Majordomo Protocol worker example. +// Uses the mdwrk API to hide all MDP aspects +// + +package main + +import ( + "github.com/pebbe/zmq4/examples/mdapi" + + "log" + "os" +) + +func main() { + var verbose bool + if len(os.Args) > 1 && os.Args[1] == "-v" { + verbose = true + } + session, _ := mdapi.NewMdwrk("tcp://localhost:5555", "echo", verbose) + + var err error + var request, reply []string + for { + request, err = session.Recv(reply) + if err != nil { + break // Worker was interrupted + } + reply = request // Echo is complex... :-) + } + log.Println(err) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mmiecho.go b/vendor/github.com/pebbe/zmq4/examples/mmiecho.go new file mode 100644 index 0000000..d6d5264 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mmiecho.go @@ -0,0 +1,32 @@ +// +// MMI echo query example. +// + +package main + +import ( + "github.com/pebbe/zmq4/examples/mdapi" + + "fmt" + "os" +) + +func main() { + var verbose bool + if len(os.Args) > 1 && os.Args[1] == "-v" { + verbose = true + } + session, _ := mdapi.NewMdcli("tcp://localhost:5555", verbose) + + // This is the service we want to look up + request := "echo" + + // This is the service we send our request to + reply, err := session.Send("mmi.service", request) + + if err == nil { + fmt.Println("Lookup echo service:", reply[0]) + } else { + fmt.Println("E: no response from broker, make sure it's running") + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/msgqueue.go b/vendor/github.com/pebbe/zmq4/examples/msgqueue.go new file mode 100644 index 0000000..37a1e2d --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/msgqueue.go @@ -0,0 +1,36 @@ +// +// Simple message queuing broker. +// Same as request-reply broker but using QUEUE device +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "log" +) + +func main() { + var err error + + // Socket facing clients + frontend, _ := zmq.NewSocket(zmq.ROUTER) + defer frontend.Close() + err = frontend.Bind("tcp://*:5559") + if err != nil { + log.Fatalln("Binding frontend:", err) + } + + // Socket facing services + backend, _ := zmq.NewSocket(zmq.DEALER) + defer backend.Close() + err = backend.Bind("tcp://*:5560") + if err != nil { + log.Fatalln("Binding backend:", err) + } + + // Start the proxy + err = zmq.Proxy(frontend, backend, nil) + log.Fatalln("Proxy interrupted:", err) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mspoller.go b/vendor/github.com/pebbe/zmq4/examples/mspoller.go new file mode 100644 index 0000000..90ad8dd --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mspoller.go @@ -0,0 +1,47 @@ +// +// Reading from multiple sockets. +// This version uses zmq.Poll() +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" +) + +func main() { + + // Connect to task ventilator + receiver, _ := zmq.NewSocket(zmq.PULL) + defer receiver.Close() + receiver.Connect("tcp://localhost:5557") + + // Connect to weather server + subscriber, _ := zmq.NewSocket(zmq.SUB) + defer subscriber.Close() + subscriber.Connect("tcp://localhost:5556") + subscriber.SetSubscribe("10001 ") + + // Initialize poll set + poller := zmq.NewPoller() + poller.Add(receiver, zmq.POLLIN) + poller.Add(subscriber, zmq.POLLIN) + // Process messages from both sockets + for { + sockets, _ := poller.Poll(-1) + for _, socket := range sockets { + switch s := socket.Socket; s { + case receiver: + task, _ := s.Recv(0) + // Process task + fmt.Println("Got task:", task) + case subscriber: + update, _ := s.Recv(0) + // Process weather update + fmt.Println("Got weather update:", update) + } + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/msreader.go b/vendor/github.com/pebbe/zmq4/examples/msreader.go new file mode 100644 index 0000000..5373b18 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/msreader.go @@ -0,0 +1,55 @@ +// +// Reading from multiple sockets. +// This version uses a simple recv loop +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "time" +) + +func main() { + + // Connect to task ventilator + receiver, _ := zmq.NewSocket(zmq.PULL) + defer receiver.Close() + receiver.Connect("tcp://localhost:5557") + + // Connect to weather server + subscriber, _ := zmq.NewSocket(zmq.SUB) + defer subscriber.Close() + subscriber.Connect("tcp://localhost:5556") + subscriber.SetSubscribe("10001 ") + + // Process messages from both sockets + // We prioritize traffic from the task ventilator + for { + + // Process any waiting tasks + for { + task, err := receiver.Recv(zmq.DONTWAIT) + if err != nil { + break + } + // process task + fmt.Println("Got task:", task) + } + + // Process any waiting weather updates + for { + udate, err := subscriber.Recv(zmq.DONTWAIT) + if err != nil { + break + } + // process weather update + fmt.Println("Got weather update:", udate) + } + + // No activity, so sleep for 1 msec + time.Sleep(time.Millisecond) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mtrelay.go b/vendor/github.com/pebbe/zmq4/examples/mtrelay.go new file mode 100644 index 0000000..7093a6c --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mtrelay.go @@ -0,0 +1,52 @@ +// +// Multithreaded relay. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" +) + +func step1() { + // Connect to step2 and tell it we're ready + xmitter, _ := zmq.NewSocket(zmq.PAIR) + defer xmitter.Close() + xmitter.Connect("inproc://step2") + fmt.Println("Step 1 ready, signaling step 2") + xmitter.Send("READY", 0) +} + +func step2() { + // Bind inproc socket before starting step1 + receiver, _ := zmq.NewSocket(zmq.PAIR) + defer receiver.Close() + receiver.Bind("inproc://step2") + go step1() + + // Wait for signal and pass it on + receiver.Recv(0) + + // Connect to step3 and tell it we're ready + xmitter, _ := zmq.NewSocket(zmq.PAIR) + defer xmitter.Close() + xmitter.Connect("inproc://step3") + fmt.Println("Step 2 ready, signaling step 3") + xmitter.Send("READY", 0) +} + +func main() { + + // Bind inproc socket before starting step2 + receiver, _ := zmq.NewSocket(zmq.PAIR) + defer receiver.Close() + receiver.Bind("inproc://step3") + go step2() + + // Wait for signal + receiver.Recv(0) + + fmt.Println("Test successful!") +} diff --git a/vendor/github.com/pebbe/zmq4/examples/mtserver.go b/vendor/github.com/pebbe/zmq4/examples/mtserver.go new file mode 100644 index 0000000..547b43b --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/mtserver.go @@ -0,0 +1,54 @@ +// +// Multithreaded Hello World server. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "time" +) + +func worker_routine() { + // Socket to talk to dispatcher + receiver, _ := zmq.NewSocket(zmq.REP) + defer receiver.Close() + receiver.Connect("inproc://workers") + + for { + msg, e := receiver.Recv(0) + if e != nil { + break + } + fmt.Println("Received request: [" + msg + "]") + + // Do some 'work' + time.Sleep(time.Second) + + // Send reply back to client + receiver.Send("World", 0) + } +} + +func main() { + // Socket to talk to clients + clients, _ := zmq.NewSocket(zmq.ROUTER) + defer clients.Close() + clients.Bind("tcp://*:5555") + + // Socket to talk to workers + workers, _ := zmq.NewSocket(zmq.DEALER) + defer workers.Close() + workers.Bind("inproc://workers") + + // Launch pool of worker goroutines + for thread_nbr := 0; thread_nbr < 5; thread_nbr++ { + go worker_routine() + } + // Connect work threads to client threads via a queue proxy + err := zmq.Proxy(clients, workers, nil) + log.Fatalln("Proxy interrupted:", err) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/pathopub.go b/vendor/github.com/pebbe/zmq4/examples/pathopub.go new file mode 100644 index 0000000..70a0e2b --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/pathopub.go @@ -0,0 +1,44 @@ +// +// Pathological publisher +// Sends out 1,000 topics and then one random update per second +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "os" + "time" +) + +func main() { + publisher, _ := zmq.NewSocket(zmq.PUB) + if len(os.Args) == 2 { + publisher.Connect(os.Args[1]) + } else { + publisher.Bind("tcp://*:5556") + } + + // Ensure subscriber connection has time to complete + time.Sleep(time.Second) + + // Send out all 1,000 topic messages + for topic_nbr := 0; topic_nbr < 1000; topic_nbr++ { + _, err := publisher.SendMessage(fmt.Sprintf("%03d", topic_nbr), "Save Roger") + if err != nil { + fmt.Println(err) + } + } + // Send one random update per second + rand.Seed(time.Now().UnixNano()) + for { + time.Sleep(time.Second) + _, err := publisher.SendMessage(fmt.Sprintf("%03d", rand.Intn(1000)), "Off with his head!") + if err != nil { + fmt.Println(err) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/pathosub.go b/vendor/github.com/pebbe/zmq4/examples/pathosub.go new file mode 100644 index 0000000..0f3dcac --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/pathosub.go @@ -0,0 +1,41 @@ +// +// Pathological subscriber +// Subscribes to one random topic and prints received messages +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "os" + "time" +) + +func main() { + subscriber, _ := zmq.NewSocket(zmq.SUB) + if len(os.Args) == 2 { + subscriber.Connect(os.Args[1]) + } else { + subscriber.Connect("tcp://localhost:5556") + } + + rand.Seed(time.Now().UnixNano()) + subscription := fmt.Sprintf("%03d", rand.Intn(1000)) + subscriber.SetSubscribe(subscription) + + for { + msg, err := subscriber.RecvMessage(0) + if err != nil { + break + } + topic := msg[0] + data := msg[1] + if topic != subscription { + panic("topic != subscription") + } + fmt.Println(data) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/peering1.go b/vendor/github.com/pebbe/zmq4/examples/peering1.go new file mode 100644 index 0000000..b55c3ec --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/peering1.go @@ -0,0 +1,66 @@ +// +// Broker peering simulation (part 1). +// Prototypes the state flow +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "os" + "time" +) + +func main() { + // First argument is this broker's name + // Other arguments are our peers' names + // + if len(os.Args) < 2 { + fmt.Println("syntax: peering1 me {you}...") + os.Exit(1) + } + self := os.Args[1] + fmt.Printf("I: preparing broker at %s...\n", self) + rand.Seed(time.Now().UnixNano()) + + // Bind state backend to endpoint + statebe, _ := zmq.NewSocket(zmq.PUB) + defer statebe.Close() + statebe.Bind("ipc://" + self + "-state.ipc") + + // Connect statefe to all peers + statefe, _ := zmq.NewSocket(zmq.SUB) + defer statefe.Close() + statefe.SetSubscribe("") + for _, peer := range os.Args[2:] { + fmt.Printf("I: connecting to state backend at '%s'\n", peer) + statefe.Connect("ipc://" + peer + "-state.ipc") + } + + // The main loop sends out status messages to peers, and collects + // status messages back from peers. The zmq_poll timeout defines + // our own heartbeat: + + poller := zmq.NewPoller() + poller.Add(statefe, zmq.POLLIN) + for { + // Poll for activity, or 1 second timeout + sockets, err := poller.Poll(time.Second) + if err != nil { + break + } + + // Handle incoming status messages + if len(sockets) == 1 { + msg, _ := statefe.RecvMessage(0) + peer_name := msg[0] + available := msg[1] + fmt.Printf("%s - %s workers free\n", peer_name, available) + } else { + statebe.SendMessage(self, rand.Intn(10)) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/peering2.go b/vendor/github.com/pebbe/zmq4/examples/peering2.go new file mode 100644 index 0000000..edb1deb --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/peering2.go @@ -0,0 +1,264 @@ +// +// Broker peering simulation (part 2). +// Prototypes the request-reply flow +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "math/rand" + "os" + "time" +) + +const ( + NBR_CLIENTS = 10 + NBR_WORKERS = 3 + WORKER_READY = "**READY**" // Signals worker is ready +) + +var ( + peers = make(map[string]bool) +) + +// The client task does a request-reply dialog using a standard +// synchronous REQ socket: + +func client_task(name string, i int) { + clientname := fmt.Sprintf("Client-%s-%d", name, i) + + client, _ := zmq.NewSocket(zmq.REQ) + defer client.Close() + client.SetIdentity(clientname) + client.Connect("ipc://" + name + "-localfe.ipc") + + for { + // Send request, get reply + client.Send("HELLO from "+clientname, 0) + reply, err := client.Recv(0) + if err != nil { + fmt.Println("client_task interrupted", name) + break // Interrupted + } + fmt.Printf("%s: %s\n", clientname, reply) + time.Sleep(time.Duration(500+rand.Intn(1000)) * time.Millisecond) + } +} + +// The worker task plugs into the load-balancer using a REQ +// socket: + +func worker_task(name string, i int) { + workername := fmt.Sprintf("Worker-%s-%d", name, i) + + worker, _ := zmq.NewSocket(zmq.REQ) + defer worker.Close() + worker.SetIdentity(workername) + worker.Connect("ipc://" + name + "-localbe.ipc") + + // Tell broker we're ready for work + worker.SendMessage(WORKER_READY) + + // Process messages as they arrive + for { + msg, err := worker.RecvMessage(0) + if err != nil { + fmt.Println("worker_task interrupted", name) + break // Interrupted + } + + i := len(msg) - 1 + fmt.Printf("%s: %s\n", workername, msg[i]) + worker.SendMessage(msg[:i], "OK from "+workername) + } +} + +// The main task begins by setting-up its frontend and backend sockets +// and then starting its client and worker tasks: + +func main() { + // First argument is this broker's name + // Other arguments are our peers' names + // + if len(os.Args) < 2 { + fmt.Println("syntax: peering2 me {you}...") + os.Exit(1) + } + for _, peer := range os.Args[2:] { + peers[peer] = true + } + + self := os.Args[1] + fmt.Println("I: preparing broker at", self) + rand.Seed(time.Now().UnixNano()) + + // Bind cloud frontend to endpoint + cloudfe, _ := zmq.NewSocket(zmq.ROUTER) + defer cloudfe.Close() + cloudfe.SetIdentity(self) + cloudfe.Bind("ipc://" + self + "-cloud.ipc") + + // Connect cloud backend to all peers + cloudbe, _ := zmq.NewSocket(zmq.ROUTER) + defer cloudbe.Close() + cloudbe.SetIdentity(self) + for _, peer := range os.Args[2:] { + fmt.Println("I: connecting to cloud frontend at", peer) + cloudbe.Connect("ipc://" + peer + "-cloud.ipc") + } + // Prepare local frontend and backend + localfe, _ := zmq.NewSocket(zmq.ROUTER) + defer localfe.Close() + localfe.Bind("ipc://" + self + "-localfe.ipc") + localbe, _ := zmq.NewSocket(zmq.ROUTER) + defer localbe.Close() + localbe.Bind("ipc://" + self + "-localbe.ipc") + + // Get user to tell us when we can start... + fmt.Print("Press Enter when all brokers are started: ") + var line string + fmt.Scanln(&line) + + // Start local workers + for worker_nbr := 0; worker_nbr < NBR_WORKERS; worker_nbr++ { + go worker_task(self, worker_nbr) + } + + // Start local clients + for client_nbr := 0; client_nbr < NBR_CLIENTS; client_nbr++ { + go client_task(self, client_nbr) + } + + // Here we handle the request-reply flow. We're using load-balancing + // to poll workers at all times, and clients only when there are one or + // more workers available. + + // Least recently used queue of available workers + workers := make([]string, 0) + + backends := zmq.NewPoller() + backends.Add(localbe, zmq.POLLIN) + backends.Add(cloudbe, zmq.POLLIN) + frontends := zmq.NewPoller() + frontends.Add(localfe, zmq.POLLIN) + frontends.Add(cloudfe, zmq.POLLIN) + + msg := []string{} + number_of_peers := len(os.Args) - 2 + + for { + // First, route any waiting replies from workers + // If we have no workers anyhow, wait indefinitely + timeout := time.Second + if len(workers) == 0 { + timeout = -1 + } + sockets, err := backends.Poll(timeout) + if err != nil { + log.Println(err) + break // Interrupted + } + + msg = msg[:] + if socketInPolled(localbe, sockets) { + // Handle reply from local worker + msg, err = localbe.RecvMessage(0) + if err != nil { + log.Println(err) + break // Interrupted + } + var identity string + identity, msg = unwrap(msg) + workers = append(workers, identity) + + // If it's READY, don't route the message any further + if msg[0] == WORKER_READY { + msg = msg[0:0] + } + } else if socketInPolled(cloudbe, sockets) { + // Or handle reply from peer broker + msg, err = cloudbe.RecvMessage(0) + if err != nil { + log.Println(err) + break // Interrupted + } + + // We don't use peer broker identity for anything + _, msg = unwrap(msg) + } + + if len(msg) > 0 { + // Route reply to cloud if it's addressed to a broker + if peers[msg[0]] { + cloudfe.SendMessage(msg) + } else { + localfe.SendMessage(msg) + } + } + + // Now we route as many client requests as we have worker capacity + // for. We may reroute requests from our local frontend, but not from + // the cloud frontend. We reroute randomly now, just to test things + // out. In the next version we'll do this properly by calculating + // cloud capacity: + + for len(workers) > 0 { + sockets, err := frontends.Poll(0) + if err != nil { + log.Println(err) + break // Interrupted + } + var reroutable bool + // We'll do peer brokers first, to prevent starvation + if socketInPolled(cloudfe, sockets) { + msg, _ = cloudfe.RecvMessage(0) + reroutable = false + } else if socketInPolled(localfe, sockets) { + msg, _ = localfe.RecvMessage(0) + reroutable = true + } else { + break // No work, go back to backends + } + + // If reroutable, send to cloud 20% of the time + // Here we'd normally use cloud status information + // + if reroutable && number_of_peers > 0 && rand.Intn(5) == 0 { + // Route to random broker peer + random_peer := os.Args[2+rand.Intn(number_of_peers)] + cloudbe.SendMessage(random_peer, "", msg) + } else { + localbe.SendMessage(workers[0], "", msg) + workers = workers[1:] + } + } + } + fmt.Println("Exit") +} + +// Pops frame off front of message and returns it as 'head' +// If next frame is empty, pops that empty frame. +// Return remaining frames of message as 'tail' +func unwrap(msg []string) (head string, tail []string) { + head = msg[0] + if len(msg) > 1 && msg[1] == "" { + tail = msg[2:] + } else { + tail = msg[1:] + } + return +} + +// Returns true if *Socket is in []Polled +func socketInPolled(s *zmq.Socket, p []zmq.Polled) bool { + for _, pp := range p { + if pp.Socket == s { + return true + } + } + return false +} diff --git a/vendor/github.com/pebbe/zmq4/examples/peering3.go b/vendor/github.com/pebbe/zmq4/examples/peering3.go new file mode 100644 index 0000000..334c376 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/peering3.go @@ -0,0 +1,335 @@ +// +// Broker peering simulation (part 3). +// Prototypes the full flow of status and tasks +// + +/* + +One of the differences between peering2 and peering3 is that +peering2 always uses Poll() and then uses a helper function socketInPolled() +to check if a specific socket returned a result, while peering3 uses PollAll() +and checks the event state of the socket in a specific index in the list. + +*/ + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "os" + "strconv" + "strings" + "time" +) + +const ( + NBR_CLIENTS = 10 + NBR_WORKERS = 5 + WORKER_READY = "**READY**" // Signals worker is ready +) + +var ( + // Our own name; in practice this would be configured per node + self string +) + +// This is the client task. It issues a burst of requests and then +// sleeps for a few seconds. This simulates sporadic activity; when +// a number of clients are active at once, the local workers should +// be overloaded. The client uses a REQ socket for requests and also +// pushes statistics to the monitor socket: + +func client_task(i int) { + client, _ := zmq.NewSocket(zmq.REQ) + defer client.Close() + client.Connect("ipc://" + self + "-localfe.ipc") + monitor, _ := zmq.NewSocket(zmq.PUSH) + defer monitor.Close() + monitor.Connect("ipc://" + self + "-monitor.ipc") + + poller := zmq.NewPoller() + poller.Add(client, zmq.POLLIN) + for { + time.Sleep(time.Duration(rand.Intn(5000)) * time.Millisecond) + for burst := rand.Intn(15); burst > 0; burst-- { + task_id := fmt.Sprintf("%04X-%s-%d", rand.Intn(0x10000), self, i) + + // Send request with random hex ID + client.Send(task_id, 0) + + // Wait max ten seconds for a reply, then complain + sockets, err := poller.Poll(10 * time.Second) + if err != nil { + break // Interrupted + } + + if len(sockets) == 1 { + reply, err := client.Recv(0) + if err != nil { + break // Interrupted + } + // Worker is supposed to answer us with our task id + id := strings.Fields(reply)[0] + if id != task_id { + panic("id != task_id") + } + monitor.Send(reply, 0) + } else { + monitor.Send("E: CLIENT EXIT - lost task "+task_id, 0) + return + } + } + } +} + +// This is the worker task, which uses a REQ socket to plug into the +// load-balancer. It's the same stub worker task you've seen in other +// examples: + +func worker_task(i int) { + worker, _ := zmq.NewSocket(zmq.REQ) + defer worker.Close() + worker.Connect("ipc://" + self + "-localbe.ipc") + + // Tell broker we're ready for work + worker.SendMessage(WORKER_READY) + + // Process messages as they arrive + for { + msg, err := worker.RecvMessage(0) + if err != nil { + break // Interrupted + } + + // Workers are busy for 0/1 seconds + time.Sleep(time.Duration(rand.Intn(2)) * time.Second) + n := len(msg) - 1 + worker.SendMessage(msg[:n], fmt.Sprintf("%s %s-%d", msg[n], self, i)) + } +} + +// The main task begins by setting-up all its sockets. The local frontend +// talks to clients, and our local backend talks to workers. The cloud +// frontend talks to peer brokers as if they were clients, and the cloud +// backend talks to peer brokers as if they were workers. The state +// backend publishes regular state messages, and the state frontend +// subscribes to all state backends to collect these messages. Finally, +// we use a PULL monitor socket to collect printable messages from tasks: + +func main() { + // First argument is this broker's name + // Other arguments are our peers' names + // + if len(os.Args) < 2 { + fmt.Println("syntax: peering1 me {you}...") + os.Exit(1) + } + self = os.Args[1] + fmt.Printf("I: preparing broker at %s...\n", self) + rand.Seed(time.Now().UnixNano()) + + // Prepare local frontend and backend + localfe, _ := zmq.NewSocket(zmq.ROUTER) + defer localfe.Close() + localfe.Bind("ipc://" + self + "-localfe.ipc") + + localbe, _ := zmq.NewSocket(zmq.ROUTER) + defer localbe.Close() + localbe.Bind("ipc://" + self + "-localbe.ipc") + + // Bind cloud frontend to endpoint + cloudfe, _ := zmq.NewSocket(zmq.ROUTER) + defer cloudfe.Close() + cloudfe.SetIdentity(self) + cloudfe.Bind("ipc://" + self + "-cloud.ipc") + + // Connect cloud backend to all peers + cloudbe, _ := zmq.NewSocket(zmq.ROUTER) + defer cloudbe.Close() + cloudbe.SetIdentity(self) + for _, peer := range os.Args[2:] { + fmt.Printf("I: connecting to cloud frontend at '%s'\n", peer) + cloudbe.Connect("ipc://" + peer + "-cloud.ipc") + } + // Bind state backend to endpoint + statebe, _ := zmq.NewSocket(zmq.PUB) + defer statebe.Close() + statebe.Bind("ipc://" + self + "-state.ipc") + + // Connect state frontend to all peers + statefe, _ := zmq.NewSocket(zmq.SUB) + defer statefe.Close() + statefe.SetSubscribe("") + for _, peer := range os.Args[2:] { + fmt.Printf("I: connecting to state backend at '%s'\n", peer) + statefe.Connect("ipc://" + peer + "-state.ipc") + } + // Prepare monitor socket + monitor, _ := zmq.NewSocket(zmq.PULL) + defer monitor.Close() + monitor.Bind("ipc://" + self + "-monitor.ipc") + + // After binding and connecting all our sockets, we start our child + // tasks - workers and clients: + + for worker_nbr := 0; worker_nbr < NBR_WORKERS; worker_nbr++ { + go worker_task(worker_nbr) + } + + // Start local clients + for client_nbr := 0; client_nbr < NBR_CLIENTS; client_nbr++ { + go client_task(client_nbr) + } + + // Queue of available workers + local_capacity := 0 + cloud_capacity := 0 + workers := make([]string, 0) + + primary := zmq.NewPoller() + primary.Add(localbe, zmq.POLLIN) + primary.Add(cloudbe, zmq.POLLIN) + primary.Add(statefe, zmq.POLLIN) + primary.Add(monitor, zmq.POLLIN) + + secondary1 := zmq.NewPoller() + secondary1.Add(localfe, zmq.POLLIN) + secondary2 := zmq.NewPoller() + secondary2.Add(localfe, zmq.POLLIN) + secondary2.Add(cloudfe, zmq.POLLIN) + + msg := make([]string, 0) + for { + + // If we have no workers ready, wait indefinitely + timeout := time.Duration(time.Second) + if local_capacity == 0 { + timeout = -1 + } + sockets, err := primary.PollAll(timeout) + if err != nil { + break // Interrupted + } + + // Track if capacity changes during this iteration + previous := local_capacity + + // Handle reply from local worker + msg = msg[0:0] + + if sockets[0].Events&zmq.POLLIN != 0 { // 0 == localbe + msg, err = localbe.RecvMessage(0) + if err != nil { + break // Interrupted + } + var identity string + identity, msg = unwrap(msg) + workers = append(workers, identity) + local_capacity++ + + // If it's READY, don't route the message any further + if msg[0] == WORKER_READY { + msg = msg[0:0] + } + } else if sockets[1].Events&zmq.POLLIN != 0 { // 1 == cloudbe + // Or handle reply from peer broker + msg, err = cloudbe.RecvMessage(0) + if err != nil { + break // Interrupted + } + // We don't use peer broker identity for anything + _, msg = unwrap(msg) + } + + if len(msg) > 0 { + + // Route reply to cloud if it's addressed to a broker + to_broker := false + for _, peer := range os.Args[2:] { + if peer == msg[0] { + to_broker = true + break + } + } + if to_broker { + cloudfe.SendMessage(msg) + } else { + localfe.SendMessage(msg) + } + } + + // If we have input messages on our statefe or monitor sockets we + // can process these immediately: + + if sockets[2].Events&zmq.POLLIN != 0 { // 2 == statefe + var status string + m, _ := statefe.RecvMessage(0) + _, m = unwrap(m) // peer + status, _ = unwrap(m) + cloud_capacity, _ = strconv.Atoi(status) + } + if sockets[3].Events&zmq.POLLIN != 0 { // 3 == monitor + status, _ := monitor.Recv(0) + fmt.Println(status) + } + // Now route as many clients requests as we can handle. If we have + // local capacity we poll both localfe and cloudfe. If we have cloud + // capacity only, we poll just localfe. We route any request locally + // if we can, else we route to the cloud. + + for local_capacity+cloud_capacity > 0 { + var sockets []zmq.Polled + var err error + if local_capacity > 0 { + sockets, err = secondary2.PollAll(0) + } else { + sockets, err = secondary1.PollAll(0) + } + if err != nil { + panic(err) + } + + if sockets[0].Events&zmq.POLLIN != 0 { // 0 == localfe + msg, _ = localfe.RecvMessage(0) + } else if len(sockets) > 1 && sockets[1].Events&zmq.POLLIN != 0 { // 1 == cloudfe + msg, _ = cloudfe.RecvMessage(0) + } else { + break // No work, go back to primary + } + + if local_capacity > 0 { + localbe.SendMessage(workers[0], "", msg) + workers = workers[1:] + local_capacity-- + } else { + // Route to random broker peer + random_peer := rand.Intn(len(os.Args)-2) + 2 + cloudbe.SendMessage(os.Args[random_peer], "", msg) + } + } + // We broadcast capacity messages to other peers; to reduce chatter + // we do this only if our capacity changed. + + if local_capacity != previous { + // We stick our own identity onto the envelope + // Broadcast new capacity + statebe.SendMessage(self, "", local_capacity) + } + } +} + +// Pops frame off front of message and returns it as 'head' +// If next frame is empty, pops that empty frame. +// Return remaining frames of message as 'tail' +func unwrap(msg []string) (head string, tail []string) { + head = msg[0] + if len(msg) > 1 && msg[1] == "" { + tail = msg[2:] + } else { + tail = msg[1:] + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/ppqueue.go b/vendor/github.com/pebbe/zmq4/examples/ppqueue.go new file mode 100644 index 0000000..9296fe2 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/ppqueue.go @@ -0,0 +1,166 @@ +// +// Paranoid Pirate queue. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "time" +) + +const ( + HEARTBEAT_LIVENESS = 3 // 3-5 is reasonable + HEARTBEAT_INTERVAL = 1000 * time.Millisecond // msecs + + PPP_READY = "\001" // Signals worker is ready + PPP_HEARTBEAT = "\002" // Signals worker heartbeat +) + +// Here we define the worker class; a structure and a set of functions that +// as constructor, destructor, and methods on worker objects: + +type worker_t struct { + identity string // Identity of worker + id_string string // Printable identity + expire time.Time // Expires at this time +} + +// Construct new worker +func s_worker_new(identity string) worker_t { + return worker_t{ + identity: identity, + id_string: identity, + expire: time.Now().Add(HEARTBEAT_INTERVAL * HEARTBEAT_LIVENESS), + } +} + +// The ready method puts a worker to the end of the ready list: + +func s_worker_ready(self worker_t, workers []worker_t) []worker_t { + for i, worker := range workers { + if self.id_string == worker.id_string { + if i == 0 { + workers = workers[1:] + } else if i == len(workers)-1 { + workers = workers[:i] + } else { + workers = append(workers[:i], workers[i+1:]...) + } + break + } + } + return append(workers, self) +} + +// The purge method looks for and kills expired workers. We hold workers +// from oldest to most recent, so we stop at the first alive worker: + +func s_workers_purge(workers []worker_t) []worker_t { + now := time.Now() + for i, worker := range workers { + if now.Before(worker.expire) { + return workers[i:] // Worker is alive, we're done here + } + } + return workers[0:0] +} + +// The main task is a load-balancer with heartbeating on workers so we +// can detect crashed or blocked worker tasks: + +func main() { + frontend, _ := zmq.NewSocket(zmq.ROUTER) + backend, _ := zmq.NewSocket(zmq.ROUTER) + defer frontend.Close() + defer backend.Close() + frontend.Bind("tcp://*:5555") // For clients + backend.Bind("tcp://*:5556") // For workers + + // List of available workers + workers := make([]worker_t, 0) + + // Send out heartbeats at regular intervals + heartbeat_at := time.Tick(HEARTBEAT_INTERVAL) + + poller1 := zmq.NewPoller() + poller1.Add(backend, zmq.POLLIN) + poller2 := zmq.NewPoller() + poller2.Add(backend, zmq.POLLIN) + poller2.Add(frontend, zmq.POLLIN) + + for { + // Poll frontend only if we have available workers + var sockets []zmq.Polled + var err error + if len(workers) > 0 { + sockets, err = poller2.Poll(HEARTBEAT_INTERVAL) + } else { + sockets, err = poller1.Poll(HEARTBEAT_INTERVAL) + } + if err != nil { + break // Interrupted + } + + for _, socket := range sockets { + switch socket.Socket { + case backend: + // Handle worker activity on backend + // Use worker identity for load-balancing + msg, err := backend.RecvMessage(0) + if err != nil { + break // Interrupted + } + + // Any sign of life from worker means it's ready + identity, msg := unwrap(msg) + workers = s_worker_ready(s_worker_new(identity), workers) + + // Validate control message, or return reply to client + if len(msg) == 1 { + if msg[0] != PPP_READY && msg[0] != PPP_HEARTBEAT { + fmt.Println("E: invalid message from worker", msg) + } + } else { + frontend.SendMessage(msg) + } + case frontend: + // Now get next client request, route to next worker + msg, err := frontend.RecvMessage(0) + if err != nil { + break // Interrupted + } + backend.SendMessage(workers[0].identity, msg) + workers = workers[1:] + } + } + + // We handle heartbeating after any socket activity. First we send + // heartbeats to any idle workers if it's time. Then we purge any + // dead workers: + + select { + case <-heartbeat_at: + for _, worker := range workers { + backend.SendMessage(worker.identity, PPP_HEARTBEAT) + } + default: + } + workers = s_workers_purge(workers) + } +} + +// Pops frame off front of message and returns it as 'head' +// If next frame is empty, pops that empty frame. +// Return remaining frames of message as 'tail' +func unwrap(msg []string) (head string, tail []string) { + head = msg[0] + if len(msg) > 1 && msg[1] == "" { + tail = msg[2:] + } else { + tail = msg[1:] + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/ppworker.go b/vendor/github.com/pebbe/zmq4/examples/ppworker.go new file mode 100644 index 0000000..69c79b6 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/ppworker.go @@ -0,0 +1,130 @@ +// +// Paranoid Pirate worker. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "time" +) + +const ( + HEARTBEAT_LIVENESS = 3 // 3-5 is reasonable + HEARTBEAT_INTERVAL = 1000 * time.Millisecond // msecs + INTERVAL_INIT = 1000 * time.Millisecond // Initial reconnect + INTERVAL_MAX = 32000 * time.Millisecond // After exponential backoff + + // Paranoid Pirate Protocol constants + PPP_READY = "\001" // Signals worker is ready + PPP_HEARTBEAT = "\002" // Signals worker heartbeat +) + +// Helper function that returns a new configured socket +// connected to the Paranoid Pirate queue + +func s_worker_socket() (*zmq.Socket, *zmq.Poller) { + worker, _ := zmq.NewSocket(zmq.DEALER) + worker.Connect("tcp://localhost:5556") + + // Tell queue we're ready for work + fmt.Println("I: worker ready") + worker.Send(PPP_READY, 0) + + poller := zmq.NewPoller() + poller.Add(worker, zmq.POLLIN) + + return worker, poller +} + +// We have a single task, which implements the worker side of the +// Paranoid Pirate Protocol (PPP). The interesting parts here are +// the heartbeating, which lets the worker detect if the queue has +// died, and vice-versa: + +func main() { + worker, poller := s_worker_socket() + + // If liveness hits zero, queue is considered disconnected + liveness := HEARTBEAT_LIVENESS + interval := INTERVAL_INIT + + // Send out heartbeats at regular intervals + heartbeat_at := time.Tick(HEARTBEAT_INTERVAL) + + rand.Seed(time.Now().UnixNano()) + for cycles := 0; true; { + sockets, err := poller.Poll(HEARTBEAT_INTERVAL) + if err != nil { + break // Interrupted + } + + if len(sockets) == 1 { + // Get message + // - 3-part envelope + content -> request + // - 1-part HEARTBEAT -> heartbeat + msg, err := worker.RecvMessage(0) + if err != nil { + break // Interrupted + } + + // To test the robustness of the queue implementation we // + // simulate various typical problems, such as the worker + // crashing, or running very slowly. We do this after a few + // cycles so that the architecture can get up and running + // first: + if len(msg) == 3 { + cycles++ + if cycles > 3 && rand.Intn(5) == 0 { + fmt.Println("I: simulating a crash") + break + } else if cycles > 3 && rand.Intn(5) == 0 { + fmt.Println("I: simulating CPU overload") + time.Sleep(3 * time.Second) + } + fmt.Println("I: normal reply") + worker.SendMessage(msg) + liveness = HEARTBEAT_LIVENESS + time.Sleep(time.Second) // Do some heavy work + } else if len(msg) == 1 { + // When we get a heartbeat message from the queue, it means the + // queue was (recently) alive, so reset our liveness indicator: + if msg[0] == PPP_HEARTBEAT { + liveness = HEARTBEAT_LIVENESS + } else { + fmt.Printf("E: invalid message: %q\n", msg) + } + } else { + fmt.Printf("E: invalid message: %q\n", msg) + } + interval = INTERVAL_INIT + } else { + // If the queue hasn't sent us heartbeats in a while, destroy the + // socket and reconnect. This is the simplest most brutal way of + // discarding any messages we might have sent in the meantime:// + liveness-- + if liveness == 0 { + fmt.Println("W: heartbeat failure, can't reach queue") + fmt.Println("W: reconnecting in", interval) + time.Sleep(interval) + + if interval < INTERVAL_MAX { + interval = 2 * interval + } + worker, poller = s_worker_socket() + liveness = HEARTBEAT_LIVENESS + } + } + + // Send heartbeat to queue if it's time + select { + case <-heartbeat_at: + fmt.Println("I: worker heartbeat") + worker.Send(PPP_HEARTBEAT, 0) + default: + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/psenvpub.go b/vendor/github.com/pebbe/zmq4/examples/psenvpub.go new file mode 100644 index 0000000..f717ec2 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/psenvpub.go @@ -0,0 +1,27 @@ +// +// Pubsub envelope publisher. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "time" +) + +func main() { + // Prepare our publisher + publisher, _ := zmq.NewSocket(zmq.PUB) + defer publisher.Close() + publisher.Bind("tcp://*:5563") + + for { + // Write two messages, each with an envelope and content + publisher.Send("A", zmq.SNDMORE) + publisher.Send("We don't want to see this", 0) + publisher.Send("B", zmq.SNDMORE) + publisher.Send("We would like to see this", 0) + time.Sleep(time.Second) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/psenvsub.go b/vendor/github.com/pebbe/zmq4/examples/psenvsub.go new file mode 100644 index 0000000..3cd61f2 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/psenvsub.go @@ -0,0 +1,27 @@ +// +// Pubsub envelope subscriber. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" +) + +func main() { + // Prepare our subscriber + subscriber, _ := zmq.NewSocket(zmq.SUB) + defer subscriber.Close() + subscriber.Connect("tcp://localhost:5563") + subscriber.SetSubscribe("B") + + for { + // Read envelope with address + address, _ := subscriber.Recv(0) + // Read message contents + contents, _ := subscriber.Recv(0) + fmt.Printf("[%s] %s\n", address, contents) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/rrbroker.go b/vendor/github.com/pebbe/zmq4/examples/rrbroker.go new file mode 100644 index 0000000..e29dd11 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/rrbroker.go @@ -0,0 +1,53 @@ +// +// Simple request-reply broker. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" +) + +func main() { + // Prepare our sockets + frontend, _ := zmq.NewSocket(zmq.ROUTER) + defer frontend.Close() + backend, _ := zmq.NewSocket(zmq.DEALER) + defer backend.Close() + frontend.Bind("tcp://*:5559") + backend.Bind("tcp://*:5560") + + // Initialize poll set + poller := zmq.NewPoller() + poller.Add(frontend, zmq.POLLIN) + poller.Add(backend, zmq.POLLIN) + + // Switch messages between sockets + for { + sockets, _ := poller.Poll(-1) + for _, socket := range sockets { + switch s := socket.Socket; s { + case frontend: + for { + msg, _ := s.Recv(0) + if more, _ := s.GetRcvmore(); more { + backend.Send(msg, zmq.SNDMORE) + } else { + backend.Send(msg, 0) + break + } + } + case backend: + for { + msg, _ := s.Recv(0) + if more, _ := s.GetRcvmore(); more { + frontend.Send(msg, zmq.SNDMORE) + } else { + frontend.Send(msg, 0) + break + } + } + } + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/rrclient.go b/vendor/github.com/pebbe/zmq4/examples/rrclient.go new file mode 100644 index 0000000..40cca47 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/rrclient.go @@ -0,0 +1,25 @@ +// +// Request-reply client. +// Connects REQ socket to tcp://localhost:5559 +// Sends "Hello" to server, expects "World" back +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" +) + +func main() { + requester, _ := zmq.NewSocket(zmq.REQ) + defer requester.Close() + requester.Connect("tcp://localhost:5559") + + for request := 0; request < 10; request++ { + requester.Send("Hello", 0) + reply, _ := requester.Recv(0) + fmt.Printf("Received reply %d [%s]\n", request, reply) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/rrworker.go b/vendor/github.com/pebbe/zmq4/examples/rrworker.go new file mode 100644 index 0000000..399f598 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/rrworker.go @@ -0,0 +1,33 @@ +// +// Hello World worker. +// Connects REP socket to tcp://*:5560 +// Expects "Hello" from client, replies with "World" +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "time" +) + +func main() { + // Socket to talk to clients + responder, _ := zmq.NewSocket(zmq.REP) + defer responder.Close() + responder.Connect("tcp://localhost:5560") + + for { + // Wait for next request from client + request, _ := responder.Recv(0) + fmt.Printf("Received request: [%s]\n", request) + + // Do some 'work' + time.Sleep(time.Second) + + // Send reply back to client + responder.Send("World", 0) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/rtdealer.go b/vendor/github.com/pebbe/zmq4/examples/rtdealer.go new file mode 100644 index 0000000..6e8a269 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/rtdealer.go @@ -0,0 +1,84 @@ +// +// ROUTER-to-DEALER example. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "time" +) + +const ( + NBR_WORKERS = 10 +) + +func worker_task() { + worker, _ := zmq.NewSocket(zmq.DEALER) + defer worker.Close() + set_id(worker) // Set a printable identity + worker.Connect("tcp://localhost:5671") + + total := 0 + for { + // Tell the broker we're ready for work + worker.Send("", zmq.SNDMORE) + worker.Send("Hi Boss", 0) + + // Get workload from broker, until finished + worker.Recv(0) // Envelope delimiter + workload, _ := worker.Recv(0) + if workload == "Fired!" { + fmt.Printf("Completed: %d tasks\n", total) + break + } + total++ + + // Do some random work + time.Sleep(time.Duration(rand.Intn(500)+1) * time.Millisecond) + } +} + +func main() { + broker, _ := zmq.NewSocket(zmq.ROUTER) + defer broker.Close() + + broker.Bind("tcp://*:5671") + rand.Seed(time.Now().UnixNano()) + + for worker_nbr := 0; worker_nbr < NBR_WORKERS; worker_nbr++ { + go worker_task() + } + // Run for five seconds and then tell workers to end + start_time := time.Now() + workers_fired := 0 + for { + // Next message gives us least recently used worker + identity, _ := broker.Recv(0) + broker.Send(identity, zmq.SNDMORE) + broker.Recv(0) // Envelope delimiter + broker.Recv(0) // Response from worker + broker.Send("", zmq.SNDMORE) + + // Encourage workers until it's time to fire them + if time.Since(start_time) < 5*time.Second { + broker.Send("Work harder", 0) + } else { + broker.Send("Fired!", 0) + workers_fired++ + if workers_fired == NBR_WORKERS { + break + } + } + } + + time.Sleep(time.Second) +} + +func set_id(soc *zmq.Socket) { + identity := fmt.Sprintf("%04X-%04X", rand.Intn(0x10000), rand.Intn(0x10000)) + soc.SetIdentity(identity) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/rtreq.go b/vendor/github.com/pebbe/zmq4/examples/rtreq.go new file mode 100644 index 0000000..25accd3 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/rtreq.go @@ -0,0 +1,82 @@ +// +// ROUTER-to-REQ example. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "time" +) + +const ( + NBR_WORKERS = 10 +) + +func worker_task() { + worker, _ := zmq.NewSocket(zmq.REQ) + defer worker.Close() + set_id(worker) + worker.Connect("tcp://localhost:5671") + + total := 0 + for { + // Tell the broker we're ready for work + worker.Send("Hi Boss", 0) + + // Get workload from broker, until finished + workload, _ := worker.Recv(0) + if workload == "Fired!" { + fmt.Printf("Completed: %d tasks\n", total) + break + } + total++ + + // Do some random work + time.Sleep(time.Duration(rand.Intn(500)+1) * time.Millisecond) + } +} + +func main() { + broker, _ := zmq.NewSocket(zmq.ROUTER) + defer broker.Close() + + broker.Bind("tcp://*:5671") + rand.Seed(time.Now().UnixNano()) + + for worker_nbr := 0; worker_nbr < NBR_WORKERS; worker_nbr++ { + go worker_task() + } + // Run for five seconds and then tell workers to end + start_time := time.Now() + workers_fired := 0 + for { + // Next message gives us least recently used worker + identity, _ := broker.Recv(0) + broker.Send(identity, zmq.SNDMORE) + broker.Recv(0) // Envelope delimiter + broker.Recv(0) // Response from worker + broker.Send("", zmq.SNDMORE) + + // Encourage workers until it's time to fire them + if time.Since(start_time) < 5*time.Second { + broker.Send("Work harder", 0) + } else { + broker.Send("Fired!", 0) + workers_fired++ + if workers_fired == NBR_WORKERS { + break + } + } + } + + time.Sleep(time.Second) +} + +func set_id(soc *zmq.Socket) { + identity := fmt.Sprintf("%04X-%04X", rand.Intn(0x10000), rand.Intn(0x10000)) + soc.SetIdentity(identity) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/spqueue.go b/vendor/github.com/pebbe/zmq4/examples/spqueue.go new file mode 100644 index 0000000..dfec0dd --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/spqueue.go @@ -0,0 +1,88 @@ +// +// Simple Pirate broker. +// This is identical to load-balancing pattern, with no reliability +// mechanisms. It depends on the client for recovery. Runs forever. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" +) + +const ( + WORKER_READY = "\001" // Signals worker is ready +) + +func main() { + frontend, _ := zmq.NewSocket(zmq.ROUTER) + backend, _ := zmq.NewSocket(zmq.ROUTER) + defer frontend.Close() + defer backend.Close() + frontend.Bind("tcp://*:5555") // For clients + backend.Bind("tcp://*:5556") // For workers + + // Queue of available workers + workers := make([]string, 0) + + poller1 := zmq.NewPoller() + poller1.Add(backend, zmq.POLLIN) + poller2 := zmq.NewPoller() + poller2.Add(backend, zmq.POLLIN) + poller2.Add(frontend, zmq.POLLIN) + + // The body of this example is exactly the same as lbbroker2. +LOOP: + for { + // Poll frontend only if we have available workers + var sockets []zmq.Polled + var err error + if len(workers) > 0 { + sockets, err = poller2.Poll(-1) + } else { + sockets, err = poller1.Poll(-1) + } + if err != nil { + break // Interrupted + } + for _, socket := range sockets { + switch s := socket.Socket; s { + case backend: // Handle worker activity on backend + // Use worker identity for load-balancing + msg, err := s.RecvMessage(0) + if err != nil { + break LOOP // Interrupted + } + var identity string + identity, msg = unwrap(msg) + workers = append(workers, identity) + + // Forward message to client if it's not a READY + if msg[0] != WORKER_READY { + frontend.SendMessage(msg) + } + + case frontend: + // Get client request, route to first available worker + msg, err := s.RecvMessage(0) + if err == nil { + backend.SendMessage(workers[0], "", msg) + workers = workers[1:] + } + } + } + } +} + +// Pops frame off front of message and returns it as 'head' +// If next frame is empty, pops that empty frame. +// Return remaining frames of message as 'tail' +func unwrap(msg []string) (head string, tail []string) { + head = msg[0] + if len(msg) > 1 && msg[1] == "" { + tail = msg[2:] + } else { + tail = msg[1:] + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/examples/spworker.go b/vendor/github.com/pebbe/zmq4/examples/spworker.go new file mode 100644 index 0000000..ba14f38 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/spworker.go @@ -0,0 +1,55 @@ +// +// Simple Pirate worker. +// Connects REQ socket to tcp://*:5556 +// Implements worker part of load-balancing +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "time" +) + +const ( + WORKER_READY = "\001" // Signals worker is ready +) + +func main() { + worker, _ := zmq.NewSocket(zmq.REQ) + defer worker.Close() + + // Set random identity to make tracing easier + rand.Seed(time.Now().UnixNano()) + identity := fmt.Sprintf("%04X-%04X", rand.Intn(0x10000), rand.Intn(0x10000)) + worker.SetIdentity(identity) + worker.Connect("tcp://localhost:5556") + + // Tell broker we're ready for work + fmt.Printf("I: (%s) worker ready\n", identity) + worker.Send(WORKER_READY, 0) + + for cycles := 0; true; { + msg, err := worker.RecvMessage(0) + if err != nil { + break // Interrupted + } + + // Simulate various problems, after a few cycles + cycles++ + if cycles > 3 && rand.Intn(5) == 0 { + fmt.Printf("I: (%s) simulating a crash\n", identity) + break + } else if cycles > 3 && rand.Intn(5) == 0 { + fmt.Printf("I: (%s) simulating CPU overload\n", identity) + time.Sleep(3 * time.Second) + } + + fmt.Printf("I: (%s) normal reply\n", identity) + time.Sleep(time.Second) // Do some heavy work + worker.SendMessage(msg) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/suisnail.go b/vendor/github.com/pebbe/zmq4/examples/suisnail.go new file mode 100644 index 0000000..ef9d12f --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/suisnail.go @@ -0,0 +1,83 @@ +// +// Suicidal Snail +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "math/rand" + "strconv" + "time" +) + +// This is our subscriber. It connects to the publisher and subscribes to +// everything. It sleeps for a short time between messages to simulate doing +// too much work. If a message is more than 1 second late, it croaks: + +const ( + MAX_ALLOWED_DELAY = 1000 * time.Millisecond +) + +func subscriber(pipe chan<- string) { + // Subscribe to everything + subscriber, _ := zmq.NewSocket(zmq.SUB) + subscriber.SetSubscribe("") + subscriber.Connect("tcp://localhost:5556") + defer subscriber.Close() + + // Get and process messages + for { + msg, _ := subscriber.RecvMessage(0) + i, _ := strconv.Atoi(msg[0]) + clock := time.Unix(int64(i), 0) + fmt.Println(clock) + + // Suicide snail logic + if time.Now().After(clock.Add(MAX_ALLOWED_DELAY)) { + log.Println("E: subscriber cannot keep up, aborting") + break + } + // Work for 1 msec plus some random additional time + time.Sleep(time.Duration(1 + rand.Intn(2))) + } + pipe <- "gone and died" +} + +// This is our publisher task. It publishes a time-stamped message to its +// PUB socket every 1 msec: + +func publisher(pipe <-chan string) { + // Prepare publisher + publisher, _ := zmq.NewSocket(zmq.PUB) + publisher.Bind("tcp://*:5556") + defer publisher.Close() + +LOOP: + for { + // Send current clock (msecs) to subscribers + publisher.SendMessage(time.Now().Unix()) + select { + case <-pipe: + break LOOP + default: + } + time.Sleep(time.Millisecond) + } +} + +// The main task simply starts a client, and a server, and then +// waits for the client to signal that it has died: + +func main() { + pubpipe := make(chan string) + subpipe := make(chan string) + go publisher(pubpipe) + go subscriber(subpipe) + <-subpipe + pubpipe <- "break" + time.Sleep(100 * time.Millisecond) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/sync.sh b/vendor/github.com/pebbe/zmq4/examples/sync.sh new file mode 100755 index 0000000..2ac6135 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/sync.sh @@ -0,0 +1,12 @@ +#!/bin/sh +echo "Starting subscribers..." +for i in 1 2 3 4 5 6 7 8 9 10 +do + ./syncsub & +done +echo "Starting publisher..." +./syncpub +# have all subscribers finished? +sleep 1 +echo Still running instances of syncsub: +ps | grep syncsub diff --git a/vendor/github.com/pebbe/zmq4/examples/syncpub.go b/vendor/github.com/pebbe/zmq4/examples/syncpub.go new file mode 100644 index 0000000..77a508f --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/syncpub.go @@ -0,0 +1,57 @@ +// +// Synchronized publisher. +// +// This diverts from the C example by introducing time delays. +// Without these delays, the subscribers won't catch the END message. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "time" +) + +const ( + // We wait for 10 subscribers + SUBSCRIBERS_EXPECTED = 10 +) + +func main() { + + // Socket to talk to clients + publisher, _ := zmq.NewSocket(zmq.PUB) + defer publisher.Close() + publisher.Bind("tcp://*:5561") + + // Socket to receive signals + syncservice, _ := zmq.NewSocket(zmq.REP) + defer syncservice.Close() + syncservice.Bind("tcp://*:5562") + + // Get synchronization from subscribers + fmt.Println("Waiting for subscribers") + for subscribers := 0; subscribers < SUBSCRIBERS_EXPECTED; subscribers++ { + // - wait for synchronization request + syncservice.Recv(0) + // - send synchronization reply + syncservice.Send("", 0) + } + // Now broadcast exactly 1M updates followed by END + fmt.Println("Broadcasting messages") + for update_nbr := 0; update_nbr < 1000000; update_nbr++ { + publisher.Send("Rhubarb", 0) + // subscribers don't get all messages if publisher is too fast + // a one microsecond pause may still be too short + time.Sleep(time.Microsecond) + } + + // a longer pause ensures subscribers are ready to receive this + time.Sleep(time.Second) + publisher.Send("END", 0) + + // what's another second? + time.Sleep(time.Second) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/syncsub.go b/vendor/github.com/pebbe/zmq4/examples/syncsub.go new file mode 100644 index 0000000..c83f8bb --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/syncsub.go @@ -0,0 +1,51 @@ +// +// Synchronized subscriber +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "time" +) + +func main() { + + // First, connect our subscriber socket + subscriber, _ := zmq.NewSocket(zmq.SUB) + defer subscriber.Close() + subscriber.Connect("tcp://localhost:5561") + subscriber.SetSubscribe("") + + // 0MQ is so fast, we need to wait a while... + time.Sleep(time.Second) + + // Second, synchronize with publisher + syncclient, _ := zmq.NewSocket(zmq.REQ) + defer syncclient.Close() + syncclient.Connect("tcp://localhost:5562") + + // - send a synchronization request + syncclient.Send("", 0) + + // - wait for synchronization reply + syncclient.Recv(0) + + // Third, get our updates and report how many we got + update_nbr := 0 + for { + msg, e := subscriber.Recv(0) + if e != nil { + log.Println(e) + break + } + if msg == "END" { + break + } + update_nbr++ + } + fmt.Printf("Received %d updates\n", update_nbr) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/tasksink.go b/vendor/github.com/pebbe/zmq4/examples/tasksink.go new file mode 100644 index 0000000..adc6427 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/tasksink.go @@ -0,0 +1,40 @@ +// +// Task sink. +// Binds PULL socket to tcp://localhost:5558 +// Collects results from workers via that socket +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "time" +) + +func main() { + // Prepare our socket + receiver, _ := zmq.NewSocket(zmq.PULL) + defer receiver.Close() + receiver.Bind("tcp://*:5558") + + // Wait for start of batch + receiver.Recv(0) + + // Start our clock now + start_time := time.Now() + + // Process 100 confirmations + for task_nbr := 0; task_nbr < 100; task_nbr++ { + receiver.Recv(0) + if task_nbr%10 == 0 { + fmt.Print(":") + } else { + fmt.Print(".") + } + } + + // Calculate and report duration of batch + fmt.Println("\nTotal elapsed time:", time.Since(start_time)) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/tasksink2.go b/vendor/github.com/pebbe/zmq4/examples/tasksink2.go new file mode 100644 index 0000000..4519579 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/tasksink2.go @@ -0,0 +1,48 @@ +// +// Task sink - design 2. +// Adds pub-sub flow to send kill signal to workers +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "time" +) + +func main() { + // Socket to receive messages on + receiver, _ := zmq.NewSocket(zmq.PULL) + defer receiver.Close() + receiver.Bind("tcp://*:5558") + + // Socket for worker control + controller, _ := zmq.NewSocket(zmq.PUB) + defer controller.Close() + controller.Bind("tcp://*:5559") + + // Wait for start of batch + receiver.Recv(0) + + // Start our clock now + start_time := time.Now() + + // Process 100 confirmations + for task_nbr := 0; task_nbr < 100; task_nbr++ { + receiver.Recv(0) + if task_nbr%10 == 0 { + fmt.Print(":") + } else { + fmt.Print(".") + } + } + fmt.Println("\nTotal elapsed time:", time.Since(start_time)) + + // Send kill signal to workers + controller.Send("KILL", 0) + + // Finished + time.Sleep(time.Second) // Give 0MQ time to deliver +} diff --git a/vendor/github.com/pebbe/zmq4/examples/taskvent.go b/vendor/github.com/pebbe/zmq4/examples/taskvent.go new file mode 100644 index 0000000..c754132 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/taskvent.go @@ -0,0 +1,51 @@ +// +// Task ventilator. +// Binds PUSH socket to tcp://localhost:5557 +// Sends batch of tasks to workers via that socket +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "time" +) + +func main() { + // Socket to send messages on + sender, _ := zmq.NewSocket(zmq.PUSH) + defer sender.Close() + sender.Bind("tcp://*:5557") + + // Socket to send start of batch message on + sink, _ := zmq.NewSocket(zmq.PUSH) + defer sink.Close() + sink.Connect("tcp://localhost:5558") + + fmt.Print("Press Enter when the workers are ready: ") + var line string + fmt.Scanln(&line) + fmt.Println("Sending tasks to workers...") + + // The first message is "0" and signals start of batch + sink.Send("0", 0) + + // Initialize random number generator + rand.Seed(time.Now().UnixNano()) + + // Send 100 tasks + total_msec := 0 + for task_nbr := 0; task_nbr < 100; task_nbr++ { + // Random workload from 1 to 100msecs + workload := rand.Intn(100) + 1 + total_msec += workload + s := fmt.Sprintf("%d", workload) + sender.Send(s, 0) + } + fmt.Println("Total expected cost:", time.Duration(total_msec)*time.Millisecond) + time.Sleep(time.Second) // Give 0MQ time to deliver + +} diff --git a/vendor/github.com/pebbe/zmq4/examples/taskwork.go b/vendor/github.com/pebbe/zmq4/examples/taskwork.go new file mode 100644 index 0000000..3ea04dc --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/taskwork.go @@ -0,0 +1,44 @@ +// +// Task worker. +// Connects PULL socket to tcp://localhost:5557 +// Collects workloads from ventilator via that socket +// Connects PUSH socket to tcp://localhost:5558 +// Sends results to sink via that socket +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "strconv" + "time" +) + +func main() { + // Socket to receive messages on + receiver, _ := zmq.NewSocket(zmq.PULL) + defer receiver.Close() + receiver.Connect("tcp://localhost:5557") + + // Socket to send messages to + sender, _ := zmq.NewSocket(zmq.PUSH) + defer sender.Close() + sender.Connect("tcp://localhost:5558") + + // Process tasks forever + for { + s, _ := receiver.Recv(0) + + // Simple progress indicator for the viewer + fmt.Print(s + ".") + + // Do the work + msec, _ := strconv.Atoi(s) + time.Sleep(time.Duration(msec) * time.Millisecond) + + // Send results to sink + sender.Send("", 0) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/taskwork2.go b/vendor/github.com/pebbe/zmq4/examples/taskwork2.go new file mode 100644 index 0000000..2995991 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/taskwork2.go @@ -0,0 +1,62 @@ +// +// Task worker - design 2. +// Adds pub-sub flow to receive and respond to kill signal +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "strconv" + "time" +) + +func main() { + // Socket to receive messages on + receiver, _ := zmq.NewSocket(zmq.PULL) + defer receiver.Close() + receiver.Connect("tcp://localhost:5557") + + // Socket to send messages to + sender, _ := zmq.NewSocket(zmq.PUSH) + defer sender.Close() + sender.Connect("tcp://localhost:5558") + + // Socket for control input + controller, _ := zmq.NewSocket(zmq.SUB) + defer controller.Close() + controller.Connect("tcp://localhost:5559") + controller.SetSubscribe("") + + // Process messages from receiver and controller + poller := zmq.NewPoller() + poller.Add(receiver, zmq.POLLIN) + poller.Add(controller, zmq.POLLIN) + // Process messages from both sockets +LOOP: + for { + sockets, _ := poller.Poll(-1) + for _, socket := range sockets { + switch s := socket.Socket; s { + case receiver: + msg, _ := s.Recv(0) + + // Do the work + t, _ := strconv.Atoi(msg) + time.Sleep(time.Duration(t) * time.Millisecond) + + // Send results to sink + sender.Send(msg, 0) + + // Simple progress indicator for the viewer + fmt.Printf(".") + case controller: + // Any controller command acts as 'KILL' + break LOOP // Exit loop + } + } + } + fmt.Println() +} diff --git a/vendor/github.com/pebbe/zmq4/examples/ticlient.go b/vendor/github.com/pebbe/zmq4/examples/ticlient.go new file mode 100644 index 0000000..9b50a5c --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/ticlient.go @@ -0,0 +1,81 @@ +// +// Titanic client example. +// Implements client side of http://rfc.zeromq.org/spec:9 + +package main + +import ( + "github.com/pebbe/zmq4/examples/mdapi" + + "errors" + "fmt" + "os" + "time" +) + +// Calls a TSP service +// Returns response if successful (status code 200 OK), else NULL +// +func ServiceCall(session *mdapi.Mdcli, service string, request ...string) (reply []string, err error) { + reply = []string{} + msg, err := session.Send(service, request...) + if err == nil { + switch status := msg[0]; status { + case "200": + reply = msg[1:] + return + case "400": + fmt.Println("E: client fatal error, aborting") + os.Exit(1) + case "500": + fmt.Println("E: server fatal error, aborting") + os.Exit(1) + } + } else { + fmt.Println("E: " + err.Error()) + os.Exit(0) + } + + err = errors.New("Didn't succeed") + return // Didn't succeed, don't care why not +} + +// The main task tests our service call by sending an echo request: + +func main() { + var verbose bool + if len(os.Args) > 1 && os.Args[1] == "-v" { + verbose = true + } + session, _ := mdapi.NewMdcli("tcp://localhost:5555", verbose) + + // 1. Send 'echo' request to Titanic + reply, err := ServiceCall(session, "titanic.request", "echo", "Hello world") + if err != nil { + fmt.Println(err) + return + } + + var uuid string + if err == nil { + uuid = reply[0] + fmt.Println("I: request UUID", uuid) + } + + time.Sleep(100 * time.Millisecond) + + // 2. Wait until we get a reply + for { + reply, err := ServiceCall(session, "titanic.reply", uuid) + if err == nil { + fmt.Println("Reply:", reply[0]) + + // 3. Close request + ServiceCall(session, "titanic.close", uuid) + break + } else { + fmt.Println("I: no reply yet, trying again...") + time.Sleep(5 * time.Second) // Try again in 5 seconds + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/titanic.go b/vendor/github.com/pebbe/zmq4/examples/titanic.go new file mode 100644 index 0000000..cb32ca6 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/titanic.go @@ -0,0 +1,235 @@ +// +// Titanic service. +// +// Implements server side of http://rfc.zeromq.org/spec:9 + +package main + +import ( + "github.com/pebbe/zmq4/examples/mdapi" + + "github.com/pborman/uuid" + + "fmt" + "io/ioutil" + "os" + "strings" + "time" +) + +// Returns freshly allocated request filename for given UUID + +const ( + TITANIC_DIR = ".titanic" +) + +func RequestFilename(uuid string) string { + return TITANIC_DIR + "/" + uuid + "req" +} + +// Returns freshly allocated reply filename for given UUID + +func ReplyFilename(uuid string) string { + return TITANIC_DIR + "/" + uuid + "rep" +} + +// The "titanic.request" task waits for requests to this service. It writes +// each request to disk and returns a UUID to the client. The client picks +// up the reply asynchronously using the "titanic.reply" service: + +func TitanicRequest(chRequest chan<- string) { + worker, _ := mdapi.NewMdwrk("tcp://localhost:5555", "titanic.request", false) + + reply := []string{} + for { + // Send reply if it's not null + // And then get next request from broker + request, err := worker.Recv(reply) + if err != nil { + break // Interrupted, exit + } + + // Ensure message directory exists + os.MkdirAll(TITANIC_DIR, 0700) + + // Generate UUID and save message to disk + uuid := uuid.New() + file, err := os.Create(RequestFilename(uuid)) + fmt.Fprint(file, strings.Join(request, "\n")) + file.Close() + + // Send UUID through to message queue + chRequest <- uuid + + // Now send UUID back to client + // Done by the mdwrk_recv() at the top of the loop + reply = []string{"200", uuid} + } +} + +// The "titanic.reply" task checks if there's a reply for the specified +// request (by UUID), and returns a 200 OK, 300 Pending, or 400 Unknown +// accordingly: + +func TitanicReply() { + worker, _ := mdapi.NewMdwrk("tcp://localhost:5555", "titanic.reply", false) + + pending := []string{"300"} + unknown := []string{"400"} + reply := []string{} + for { + request, err := worker.Recv(reply) + if err != nil { + break // Interrupted, exit + } + + uuid := request[0] + req_filename := RequestFilename(uuid) + rep_filename := ReplyFilename(uuid) + data, err := ioutil.ReadFile(rep_filename) + if err == nil { + reply = strings.Split("200\n"+string(data), "\n") + } else { + _, err := os.Stat(req_filename) + if err == nil { + reply = pending + } else { + reply = unknown + } + } + } +} + +// The "titanic.close" task removes any waiting replies for the request +// (specified by UUID). It's idempotent, so safe to call more than once +// in a row: + +func TitanicClose() { + worker, _ := mdapi.NewMdwrk("tcp://localhost:5555", "titanic.close", false) + + ok := []string{"200"} + reply := []string{} + for { + request, err := worker.Recv(reply) + if err != nil { + break // Interrupted, exit + } + + uuid := request[0] + os.Remove(RequestFilename(uuid)) + os.Remove(ReplyFilename(uuid)) + + reply = ok + } + +} + +// This is the main thread for the Titanic worker. It starts three child +// threads; for the request, reply, and close services. It then dispatches +// requests to workers using a simple brute-force disk queue. It receives +// request UUIDs from the titanic.request service, saves these to a disk +// file, and then throws each request at MDP workers until it gets a +// response: + +func main() { + var verbose bool + if len(os.Args) > 1 && os.Args[1] == "-v" { + verbose = true + } + + chRequest := make(chan string) + go TitanicRequest(chRequest) + go TitanicReply() + go TitanicClose() + + // Ensure message directory exists + os.MkdirAll(TITANIC_DIR, 0700) + + // Fill the queue + queue := make([]string, 0) + files, err := ioutil.ReadDir(TITANIC_DIR) + if err == nil { + for _, file := range files { + name := file.Name() + if strings.HasSuffix(name, "req") { + uuid := name[:len(name)-3] + _, err := os.Stat(ReplyFilename(uuid)) + if err != nil { + queue = append(queue, uuid) + } + } + } + } + + // Main dispatcher loop + for { + // We'll dispatch once per second, if there's no activity + select { + case <-time.After(time.Second): + case uuid := <-chRequest: + // Append UUID to queue + queue = append(queue, uuid) + } + + // Brute-force dispatcher + queue2 := make([]string, 0, len(queue)) + for _, entry := range queue { + if verbose { + fmt.Println("I: processing request", entry) + } + if !ServiceSuccess(entry) { + queue2 = append(queue2, entry) + } + } + queue = queue2 + } +} + +// Here we first check if the requested MDP service is defined or not, +// using a MMI lookup to the Majordomo broker. If the service exists +// we send a request and wait for a reply using the conventional MDP +// client API. This is not meant to be fast, just very simple: + +func ServiceSuccess(uuid string) bool { + // If reply already exists, treat as successful + _, err := os.Stat(ReplyFilename(uuid)) + if err == nil { + return true + } + + // Load request message, service will be first frame + data, err := ioutil.ReadFile(RequestFilename(uuid)) + + // If the client already closed request, treat as successful + if err != nil { + return true + } + + request := strings.Split(string(data), "\n") + + service_name := request[0] + request = request[1:] + + // Create MDP client session with short timeout + client, err := mdapi.NewMdcli("tcp://localhost:5555", false) + client.SetTimeout(time.Second) // 1 sec + client.SetRetries(1) // only 1 retry + + // Use MMI protocol to check if service is available + mmi_reply, err := client.Send("mmi.service", service_name) + if err != nil || mmi_reply[0] != "200" { + return false + } + + reply, err := client.Send(service_name, request...) + if err != nil { + return false + } + + file, err := os.Create(ReplyFilename(uuid)) + fmt.Fprint(file, strings.Join(reply, "\n")) + file.Close() + + return true + +} diff --git a/vendor/github.com/pebbe/zmq4/examples/tripping.go b/vendor/github.com/pebbe/zmq4/examples/tripping.go new file mode 100644 index 0000000..fa89520 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/tripping.go @@ -0,0 +1,82 @@ +// +// Round-trip demonstrator. +// +// While this example runs in a single process, that is just to make +// it easier to start and stop the example. The client task signals to +// main when it's ready. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "time" +) + +func ClientTask(pipe chan<- bool) { + client, _ := zmq.NewSocket(zmq.DEALER) + client.Connect("tcp://localhost:5555") + fmt.Println("Setting up test...") + time.Sleep(100 * time.Millisecond) + + fmt.Println("Synchronous round-trip test...") + start := time.Now() + var requests int + for requests = 0; requests < 10000; requests++ { + client.Send("hello", 0) + client.Recv(0) + } + fmt.Println(requests, "calls in", time.Since(start)) + + fmt.Println("Asynchronous round-trip test...") + start = time.Now() + for requests = 0; requests < 100000; requests++ { + client.Send("hello", 0) + } + for requests = 0; requests < 100000; requests++ { + client.Recv(0) + } + fmt.Println(requests, "calls in", time.Since(start)) + pipe <- true +} + +// Here is the worker task. All it does is receive a message, and +// bounce it back the way it came: + +func WorkerTask() { + worker, _ := zmq.NewSocket(zmq.DEALER) + worker.Connect("tcp://localhost:5556") + + for { + msg, _ := worker.RecvMessage(0) + worker.SendMessage(msg) + } +} + +// Here is the broker task. It uses the zmq_proxy function to switch +// messages between frontend and backend: + +func BrokerTask() { + // Prepare our sockets + frontend, _ := zmq.NewSocket(zmq.DEALER) + frontend.Bind("tcp://*:5555") + backend, _ := zmq.NewSocket(zmq.DEALER) + backend.Bind("tcp://*:5556") + zmq.Proxy(frontend, backend, nil) +} + +// Finally, here's the main task, which starts the client, worker, and +// broker, and then runs until the client signals it to stop: + +func main() { + // Create threads + pipe := make(chan bool) + go ClientTask(pipe) + go WorkerTask() + go BrokerTask() + + // Wait for signal on client pipe + <-pipe +} diff --git a/vendor/github.com/pebbe/zmq4/examples/udpping1.go b/vendor/github.com/pebbe/zmq4/examples/udpping1.go new file mode 100644 index 0000000..7264fc7 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/udpping1.go @@ -0,0 +1,103 @@ +// +// UDP ping command +// Model 1, does UDP work inline +// + +// this doesn't use ZeroMQ at all + +package main + +import ( + "fmt" + "log" + "syscall" + "time" +) + +const ( + PING_PORT_NUMBER = 9999 + PING_MSG_SIZE = 1 + PING_INTERVAL = 1000 * time.Millisecond // Once per second +) + +func main() { + + log.SetFlags(log.Lshortfile) + + // Create UDP socket + fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_DGRAM, syscall.IPPROTO_UDP) + if err != nil { + log.Fatalln(err) + } + + // Ask operating system to let us do broadcasts from socket + if err := syscall.SetsockoptInt(fd, syscall.SOL_SOCKET, syscall.SO_BROADCAST, 1); err != nil { + log.Fatalln(err) + } + + // Bind UDP socket to local port so we can receive pings + if err := syscall.Bind(fd, &syscall.SockaddrInet4{Port: PING_PORT_NUMBER, Addr: [4]byte{0, 0, 0, 0}}); err != nil { + log.Fatalln(err) + } + + buffer := make([]byte, PING_MSG_SIZE) + + // We use syscall.Select to wait for activity on the UDP socket. + // We send a beacon once a second, and we collect and report + // beacons that come in from other nodes: + + rfds := &syscall.FdSet{} + timeout := &syscall.Timeval{} + + // Send first ping right away + ping_at := time.Now() + + bcast := &syscall.SockaddrInet4{Port: PING_PORT_NUMBER, Addr: [4]byte{255, 255, 255, 255}} + for { + dur := int64(ping_at.Sub(time.Now()) / time.Microsecond) + if dur < 0 { + dur = 0 + } + timeout.Sec, timeout.Usec = dur/1000000, dur%1000000 + FD_ZERO(rfds) + FD_SET(rfds, fd) + _, err := syscall.Select(fd+1, rfds, nil, nil, timeout) + if err != nil { + log.Fatalln(err) + } + + // Someone answered our ping + if FD_ISSET(rfds, fd) { + _, addr, err := syscall.Recvfrom(fd, buffer, 0) + if err != nil { + log.Fatalln(err) + } + a := addr.(*syscall.SockaddrInet4) + fmt.Printf("Found peer %v.%v.%v.%v:%v\n", a.Addr[0], a.Addr[1], a.Addr[2], a.Addr[3], a.Port) + } + if time.Now().After(ping_at) { + // Broadcast our beacon + fmt.Println("Pinging peers...") + buffer[0] = '!' + if err := syscall.Sendto(fd, buffer, 0, bcast); err != nil { + log.Fatalln(err) + } + ping_at = time.Now().Add(PING_INTERVAL) + } + } + +} + +func FD_SET(p *syscall.FdSet, i int) { + p.Bits[i/64] |= 1 << uint(i) % 64 +} + +func FD_ISSET(p *syscall.FdSet, i int) bool { + return (p.Bits[i/64] & (1 << uint(i) % 64)) != 0 +} + +func FD_ZERO(p *syscall.FdSet) { + for i := range p.Bits { + p.Bits[i] = 0 + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/udpping2.go b/vendor/github.com/pebbe/zmq4/examples/udpping2.go new file mode 100644 index 0000000..d51fb8e --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/udpping2.go @@ -0,0 +1,62 @@ +// +// UDP ping command +// Model 2, uses the GO net library +// + +// this doesn't use ZeroMQ at all + +package main + +import ( + "fmt" + "log" + "net" + "time" +) + +const ( + PING_PORT_NUMBER = 9999 + PING_MSG_SIZE = 1 + PING_INTERVAL = 1000 * time.Millisecond // Once per second +) + +func main() { + + log.SetFlags(log.Lshortfile) + + // Create UDP socket + bcast := &net.UDPAddr{Port: PING_PORT_NUMBER, IP: net.IPv4bcast} + conn, err := net.ListenUDP("udp", bcast) + if err != nil { + log.Fatalln(err) + } + + buffer := make([]byte, PING_MSG_SIZE) + + // We send a beacon once a second, and we collect and report + // beacons that come in from other nodes: + + // Send first ping right away + ping_at := time.Now() + + for { + if err := conn.SetReadDeadline(ping_at); err != nil { + log.Fatalln(err) + } + + if _, addr, err := conn.ReadFrom(buffer); err == nil { + // Someone answered our ping + fmt.Println("Found peer", addr) + } + + if time.Now().After(ping_at) { + // Broadcast our beacon + fmt.Println("Pinging peers...") + buffer[0] = '!' + if _, err := conn.WriteTo(buffer, bcast); err != nil { + log.Fatalln(err) + } + ping_at = time.Now().Add(PING_INTERVAL) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/udpping3.go b/vendor/github.com/pebbe/zmq4/examples/udpping3.go new file mode 100644 index 0000000..103b719 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/udpping3.go @@ -0,0 +1,25 @@ +// +// UDP ping command +// Model 3, uses abstract network interface +// + +package main + +import ( + "github.com/pebbe/zmq4/examples/intface" + + "fmt" + "log" +) + +func main() { + log.SetFlags(log.Lshortfile) + iface := intface.New() + for { + msg, err := iface.Recv() + if err != nil { + log.Fatalln(err) + } + fmt.Printf("%q\n", msg) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples/version.go b/vendor/github.com/pebbe/zmq4/examples/version.go new file mode 100644 index 0000000..a3019a7 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/version.go @@ -0,0 +1,16 @@ +// +// Report 0MQ version. +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" +) + +func main() { + major, minor, patch := zmq.Version() + fmt.Printf("Current 0MQ version is %d.%d.%d\n", major, minor, patch) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/wuclient.go b/vendor/github.com/pebbe/zmq4/examples/wuclient.go new file mode 100644 index 0000000..5d34713 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/wuclient.go @@ -0,0 +1,46 @@ +// +// Weather update client. +// Connects SUB socket to tcp://localhost:5556 +// Collects weather updates and finds avg temp in zipcode +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "os" + "strconv" + "strings" +) + +func main() { + // Socket to talk to server + fmt.Println("Collecting updates from weather server...") + subscriber, _ := zmq.NewSocket(zmq.SUB) + defer subscriber.Close() + subscriber.Connect("tcp://localhost:5556") + + // Subscribe to zipcode, default is NYC, 10001 + filter := "10001 " + if len(os.Args) > 1 { + filter = os.Args[1] + " " + } + subscriber.SetSubscribe(filter) + + // Process 100 updates + total_temp := 0 + update_nbr := 0 + for update_nbr < 100 { + msg, _ := subscriber.Recv(0) + + if msgs := strings.Fields(msg); len(msgs) > 1 { + if temperature, err := strconv.Atoi(msgs[1]); err == nil { + total_temp += temperature + update_nbr++ + } + } + } + fmt.Printf("Average temperature for zipcode '%s' was %dF \n\n", strings.TrimSpace(filter), total_temp/update_nbr) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/wuproxy.go b/vendor/github.com/pebbe/zmq4/examples/wuproxy.go new file mode 100644 index 0000000..0f11b25 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/wuproxy.go @@ -0,0 +1,29 @@ +// +// Weather proxy device. +// +// NOT TESTED +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "log" +) + +func main() { + // This is where the weather server sits + frontend, _ := zmq.NewSocket(zmq.XSUB) + defer frontend.Close() + frontend.Connect("tcp://192.168.55.210:5556") + + // This is our public endpoint for subscribers + backend, _ := zmq.NewSocket(zmq.XPUB) + defer backend.Close() + backend.Bind("tcp://10.1.1.0:8100") + + // Run the proxy until the user interrupts us + err := zmq.Proxy(frontend, backend, nil) + log.Fatalln("Proxy interrupted:", err) +} diff --git a/vendor/github.com/pebbe/zmq4/examples/wuserver.go b/vendor/github.com/pebbe/zmq4/examples/wuserver.go new file mode 100644 index 0000000..a4e4ed2 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples/wuserver.go @@ -0,0 +1,40 @@ +// +// Weather update server. +// Binds PUB socket to tcp://*:5556 +// Publishes random weather updates +// + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "math/rand" + "time" +) + +func main() { + + // Prepare our publisher + publisher, _ := zmq.NewSocket(zmq.PUB) + defer publisher.Close() + publisher.Bind("tcp://*:5556") + publisher.Bind("ipc://weather.ipc") + + // Initialize random number generator + rand.Seed(time.Now().UnixNano()) + + // loop for a while apparently + for { + + // Get values that will fool the boss + zipcode := rand.Intn(100000) + temperature := rand.Intn(215) - 80 + relhumidity := rand.Intn(50) + 10 + + // Send message to all subscribers + msg := fmt.Sprintf("%05d %d %d", zipcode, temperature, relhumidity) + publisher.Send(msg, 0) + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples_security/Makefile b/vendor/github.com/pebbe/zmq4/examples_security/Makefile new file mode 100644 index 0000000..2ec2eee --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples_security/Makefile @@ -0,0 +1,5 @@ + +% : %.go + go build $< + +all: grasslands strawhouse woodhouse stonehouse ironhouse diff --git a/vendor/github.com/pebbe/zmq4/examples_security/README.md b/vendor/github.com/pebbe/zmq4/examples_security/README.md new file mode 100644 index 0000000..701377c --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples_security/README.md @@ -0,0 +1,10 @@ +These are Go versions of the C examples described in +[Using ZeroMQ Security (part 2)](http://hintjens.com/blog:49) by Pieter Hintjens. +Those C examples use the [zauth module](http://czmq.zeromq.org/manual:zauth) +in the [czmq library](http://czmq.zeromq.org). + +There are some differences: + + * The zauth module doesn't handle domains. The Go version does. + * The zauth module handles files with usernames/passwords and directories with certificates. + The Go version just uses maps of usernames/passwords and lists of public user keys. diff --git a/vendor/github.com/pebbe/zmq4/examples_security/grasslands.go b/vendor/github.com/pebbe/zmq4/examples_security/grasslands.go new file mode 100644 index 0000000..7e6a296 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples_security/grasslands.go @@ -0,0 +1,49 @@ +// The Grasslands Pattern +// +// The Classic ZeroMQ model, plain text with no protection at all. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "runtime" +) + +func main() { + + // Create and bind server socket + server, err := zmq.NewSocket(zmq.PUSH) + checkErr(err) + checkErr(server.Bind("tcp://*:9000")) + + // Create and connect client socket + client, err := zmq.NewSocket(zmq.PULL) + checkErr(err) + checkErr(client.Connect("tcp://127.0.0.1:9000")) + + // Send a single message from server to client + _, err = server.Send("Hello", 0) + checkErr(err) + message, err := client.Recv(0) + checkErr(err) + if message != "Hello" { + log.Fatalln(message, "!= Hello") + } + + fmt.Println("Grasslands test OK") +} + +func checkErr(err error) { + if err != nil { + log.SetFlags(0) + _, filename, lineno, ok := runtime.Caller(1) + if ok { + log.Fatalf("%v:%v: %v", filename, lineno, err) + } else { + log.Fatalln(err) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples_security/ironhouse.go b/vendor/github.com/pebbe/zmq4/examples_security/ironhouse.go new file mode 100644 index 0000000..c8ab2c5 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples_security/ironhouse.go @@ -0,0 +1,69 @@ +// The Ironhouse Pattern +// +// Security doesn't get any stronger than this. An attacker is going to +// have to break into your systems to see data before/after encryption. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "runtime" +) + +func main() { + + // Start authentication engine + zmq.AuthSetVerbose(true) + zmq.AuthStart() + zmq.AuthAllow("domain1", "127.0.0.1/8") + + // We need two certificates, one for the client and one for + // the server. The client must know the server's public key + // to make a CURVE connection. + client_public, client_secret, err := zmq.NewCurveKeypair() + checkErr(err) + server_public, server_secret, err := zmq.NewCurveKeypair() + checkErr(err) + + // Tell authenticator to use this public client key + zmq.AuthCurveAdd("domain1", client_public) + + // Create and bind server socket + server, _ := zmq.NewSocket(zmq.PUSH) + server.ServerAuthCurve("domain1", server_secret) + server.Bind("tcp://*:9000") + + // Create and connect client socket + client, _ := zmq.NewSocket(zmq.PULL) + client.ClientAuthCurve(server_public, client_public, client_secret) + client.Connect("tcp://127.0.0.1:9000") + + // Send a single message from server to client + _, err = server.Send("Hello", 0) + checkErr(err) + message, err := client.Recv(0) + checkErr(err) + if message != "Hello" { + log.Fatalln(message, "!= Hello") + } + + zmq.AuthStop() + + fmt.Println("Ironhouse test OK") + +} + +func checkErr(err error) { + if err != nil { + log.SetFlags(0) + _, filename, lineno, ok := runtime.Caller(1) + if ok { + log.Fatalf("%v:%v: %v", filename, lineno, err) + } else { + log.Fatalln(err) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples_security/stonehouse.go b/vendor/github.com/pebbe/zmq4/examples_security/stonehouse.go new file mode 100644 index 0000000..b8253dd --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples_security/stonehouse.go @@ -0,0 +1,70 @@ +// The Stonehouse Pattern +// +// Where we allow any clients to connect, but we promise clients +// that we are who we claim to be, and our conversations won't be +// tampered with or modified, or spied on. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "runtime" +) + +func main() { + + // Start authentication engine + zmq.AuthSetVerbose(true) + zmq.AuthStart() + zmq.AuthAllow("domain1", "127.0.0.1") + + // Tell the authenticator to allow any CURVE requests for this domain + zmq.AuthCurveAdd("domain1", zmq.CURVE_ALLOW_ANY) + + // We need two certificates, one for the client and one for + // the server. The client must know the server's public key + // to make a CURVE connection. + client_public, client_secret, err := zmq.NewCurveKeypair() + checkErr(err) + server_public, server_secret, err := zmq.NewCurveKeypair() + checkErr(err) + + // Create and bind server socket + server, _ := zmq.NewSocket(zmq.PUSH) + server.ServerAuthCurve("domain1", server_secret) + server.Bind("tcp://*:9000") + + // Create and connect client socket + client, _ := zmq.NewSocket(zmq.PULL) + client.ClientAuthCurve(server_public, client_public, client_secret) + client.Connect("tcp://127.0.0.1:9000") + + // Send a single message from server to client + _, err = server.Send("Hello", 0) + checkErr(err) + message, err := client.Recv(0) + checkErr(err) + if message != "Hello" { + log.Fatalln(message, "!= Hello") + } + + zmq.AuthStop() + + fmt.Println("Stonehouse test OK") + +} + +func checkErr(err error) { + if err != nil { + log.SetFlags(0) + _, filename, lineno, ok := runtime.Caller(1) + if ok { + log.Fatalf("%v:%v: %v", filename, lineno, err) + } else { + log.Fatalln(err) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples_security/strawhouse.go b/vendor/github.com/pebbe/zmq4/examples_security/strawhouse.go new file mode 100644 index 0000000..d08961b --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples_security/strawhouse.go @@ -0,0 +1,65 @@ +// The Strawhouse Pattern +// +// We allow or deny clients according to their IP address. It may keep +// spammers and idiots away, but won't stop a real attacker for more +// than a heartbeat. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "runtime" +) + +func main() { + + // Get some indication of what the authenticator is deciding + zmq.AuthSetVerbose(true) + + // Start the authentication engine. This engine + // allows or denies incoming connections (talking to the libzmq + // core over a protocol called ZAP). + zmq.AuthStart() + + // Whitelist our address; any other address will be rejected + zmq.AuthAllow("domain1", "127.0.0.1") + + // Create and bind server socket + server, err := zmq.NewSocket(zmq.PUSH) + checkErr(err) + server.ServerAuthNull("domain1") + server.Bind("tcp://*:9000") + + // Create and connect client socket + client, err := zmq.NewSocket(zmq.PULL) + checkErr(err) + checkErr(client.Connect("tcp://127.0.0.1:9000")) + + // Send a single message from server to client + _, err = server.Send("Hello", 0) + checkErr(err) + message, err := client.Recv(0) + checkErr(err) + if message != "Hello" { + log.Fatalln(message, "!= Hello") + } + + zmq.AuthStop() + + fmt.Println("Strawhouse test OK") +} + +func checkErr(err error) { + if err != nil { + log.SetFlags(0) + _, filename, lineno, ok := runtime.Caller(1) + if ok { + log.Fatalf("%v:%v: %v", filename, lineno, err) + } else { + log.Fatalln(err) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/examples_security/woodhouse.go b/vendor/github.com/pebbe/zmq4/examples_security/woodhouse.go new file mode 100644 index 0000000..6788743 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/examples_security/woodhouse.go @@ -0,0 +1,62 @@ +// The Woodhouse Pattern +// +// It may keep some malicious people out but all it takes is a bit +// of network sniffing, and they'll be able to fake their way in. + +package main + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "log" + "runtime" +) + +func main() { + + // Start authentication engine + zmq.AuthSetVerbose(true) + zmq.AuthStart() + zmq.AuthAllow("domain1", "127.0.0.1") + + // Tell the authenticator how to handle PLAIN requests + zmq.AuthPlainAdd("domain1", "admin", "secret") + + // Create and bind server socket + server, _ := zmq.NewSocket(zmq.PUSH) + server.ServerAuthPlain("domain1") + server.Bind("tcp://*:9000") + + // Create and connect client socket + client, _ := zmq.NewSocket(zmq.PULL) + client.SetPlainUsername("admin") + client.SetPlainPassword("secret") + client.Connect("tcp://127.0.0.1:9000") + + // Send a single message from server to client + _, err := server.Send("Hello", 0) + checkErr(err) + message, err := client.Recv(0) + checkErr(err) + if message != "Hello" { + log.Fatalln(message, "!= Hello") + } + + zmq.AuthStop() + + fmt.Println("Woodhouse test OK") + +} + +func checkErr(err error) { + if err != nil { + log.SetFlags(0) + _, filename, lineno, ok := runtime.Caller(1) + if ok { + log.Fatalf("%v:%v: %v", filename, lineno, err) + } else { + log.Fatalln(err) + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/polling.go b/vendor/github.com/pebbe/zmq4/polling.go new file mode 100644 index 0000000..6e20a55 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/polling.go @@ -0,0 +1,187 @@ +package zmq4 + +/* +#include +*/ +import "C" + +import ( + "fmt" + "time" +) + +// Return type for (*Poller)Poll +type Polled struct { + Socket *Socket // socket with matched event(s) + Events State // actual matched event(s) +} + +type Poller struct { + items []C.zmq_pollitem_t + socks []*Socket +} + +// Create a new Poller +func NewPoller() *Poller { + return &Poller{ + items: make([]C.zmq_pollitem_t, 0), + socks: make([]*Socket, 0), + } +} + +// Add items to the poller +// +// Events is a bitwise OR of zmq.POLLIN and zmq.POLLOUT +// +// Returns the id of the item, which can be used as a handle to +// (*Poller)Update and as an index into the result of (*Poller)PollAll +func (p *Poller) Add(soc *Socket, events State) int { + var item C.zmq_pollitem_t + item.socket = soc.soc + item.fd = 0 + item.events = C.short(events) + p.items = append(p.items, item) + p.socks = append(p.socks, soc) + return len(p.items) - 1 +} + +// Update the events mask of a socket in the poller +// +// Replaces the Poller's bitmask for the specified id with the events parameter passed +// +// Returns the previous value, or ErrorNoSocket if the id was out of range +func (p *Poller) Update(id int, events State) (previous State, err error) { + if id >= 0 && id < len(p.items) { + previous = State(p.items[id].events) + p.items[id].events = C.short(events) + return previous, nil + } + return 0, ErrorNoSocket +} + +// Update the events mask of a socket in the poller +// +// Replaces the Poller's bitmask for the specified socket with the events parameter passed +// +// Returns the previous value, or ErrorNoSocket if the socket didn't match +func (p *Poller) UpdateBySocket(soc *Socket, events State) (previous State, err error) { + for id, s := range p.socks { + if s == soc { + previous = State(p.items[id].events) + p.items[id].events = C.short(events) + return previous, nil + } + } + return 0, ErrorNoSocket +} + +// Remove a socket from the poller +// +// Returns ErrorNoSocket if the id was out of range +func (p *Poller) Remove(id int) error { + if id >= 0 && id < len(p.items) { + if id == len(p.items)-1 { + p.items = p.items[:id] + p.socks = p.socks[:id] + } else { + p.items = append(p.items[:id], p.items[id+1:]...) + p.socks = append(p.socks[:id], p.socks[id+1:]...) + } + return nil + } + return ErrorNoSocket +} + +// Remove a socket from the poller +// +// Returns ErrorNoSocket if the socket didn't match +func (p *Poller) RemoveBySocket(soc *Socket) error { + for id, s := range p.socks { + if s == soc { + return p.Remove(id) + } + } + return ErrorNoSocket +} + +/* +Input/output multiplexing + +If timeout < 0, wait forever until a matching event is detected + +Only sockets with matching socket events are returned in the list. + +Example: + + poller := zmq.NewPoller() + poller.Add(socket0, zmq.POLLIN) + poller.Add(socket1, zmq.POLLIN) + // Process messages from both sockets + for { + sockets, _ := poller.Poll(-1) + for _, socket := range sockets { + switch s := socket.Socket; s { + case socket0: + msg, _ := s.Recv(0) + // Process msg + case socket1: + msg, _ := s.Recv(0) + // Process msg + } + } + } +*/ +func (p *Poller) Poll(timeout time.Duration) ([]Polled, error) { + return p.poll(timeout, false) +} + +/* +This is like (*Poller)Poll, but it returns a list of all sockets, +in the same order as they were added to the poller, +not just those sockets that had an event. + +For each socket in the list, you have to check the Events field +to see if there was actually an event. + +When error is not nil, the return list contains no sockets. +*/ +func (p *Poller) PollAll(timeout time.Duration) ([]Polled, error) { + return p.poll(timeout, true) +} + +func (p *Poller) poll(timeout time.Duration, all bool) ([]Polled, error) { + lst := make([]Polled, 0, len(p.items)) + + for _, soc := range p.socks { + if !soc.opened { + return lst, ErrorSocketClosed + } + } + + t := timeout + if t > 0 { + t = t / time.Millisecond + } + if t < 0 { + t = -1 + } + rv, err := C.zmq_poll(&p.items[0], C.int(len(p.items)), C.long(t)) + if rv < 0 { + return lst, errget(err) + } + for i, it := range p.items { + if all || it.events&it.revents != 0 { + lst = append(lst, Polled{p.socks[i], State(it.revents)}) + } + } + return lst, nil +} + +// Poller as string. +func (p *Poller) String() string { + str := make([]string, 0) + for i, poll := range p.items { + str = append(str, fmt.Sprintf("%v%v", p.socks[i], State(poll.events))) + } + return fmt.Sprint("Poller", str) +} diff --git a/vendor/github.com/pebbe/zmq4/reactor.go b/vendor/github.com/pebbe/zmq4/reactor.go new file mode 100644 index 0000000..701dc91 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/reactor.go @@ -0,0 +1,194 @@ +package zmq4 + +import ( + "errors" + "fmt" + "time" +) + +type reactor_socket struct { + e State + f func(State) error +} + +type reactor_channel struct { + ch <-chan interface{} + f func(interface{}) error + limit int +} + +type Reactor struct { + sockets map[*Socket]*reactor_socket + channels map[uint64]*reactor_channel + p *Poller + idx uint64 + remove []uint64 + verbose bool +} + +/* +Create a reactor to mix the handling of sockets and channels (timers or other channels). + +Example: + + reactor := zmq.NewReactor() + reactor.AddSocket(socket1, zmq.POLLIN, socket1_handler) + reactor.AddSocket(socket2, zmq.POLLIN, socket2_handler) + reactor.AddChannelTime(time.Tick(time.Second), 1, ticker_handler) + reactor.Run(time.Second) +*/ +func NewReactor() *Reactor { + r := &Reactor{ + sockets: make(map[*Socket]*reactor_socket), + channels: make(map[uint64]*reactor_channel), + p: NewPoller(), + remove: make([]uint64, 0), + } + return r +} + +// Add socket handler to the reactor. +// +// You can have only one handler per socket. Adding a second one will remove the first. +// +// The handler receives the socket state as an argument: POLLIN, POLLOUT, or both. +func (r *Reactor) AddSocket(soc *Socket, events State, handler func(State) error) { + r.RemoveSocket(soc) + r.sockets[soc] = &reactor_socket{e: events, f: handler} + r.p.Add(soc, events) +} + +// Remove a socket handler from the reactor. +func (r *Reactor) RemoveSocket(soc *Socket) { + if _, ok := r.sockets[soc]; ok { + delete(r.sockets, soc) + // rebuild poller + r.p = NewPoller() + for s, props := range r.sockets { + r.p.Add(s, props.e) + } + } +} + +// Add channel handler to the reactor. +// +// Returns id of added handler, that can be used later to remove it. +// +// If limit is positive, at most this many items will be handled in each run through the main loop, +// otherwise it will process as many items as possible. +// +// The handler function receives the value received from the channel. +func (r *Reactor) AddChannel(ch <-chan interface{}, limit int, handler func(interface{}) error) (id uint64) { + r.idx++ + id = r.idx + r.channels[id] = &reactor_channel{ch: ch, f: handler, limit: limit} + return +} + +// This function wraps AddChannel, using a channel of type time.Time instead of type interface{}. +func (r *Reactor) AddChannelTime(ch <-chan time.Time, limit int, handler func(interface{}) error) (id uint64) { + ch2 := make(chan interface{}) + go func() { + for { + a, ok := <-ch + if !ok { + close(ch2) + break + } + ch2 <- a + } + }() + return r.AddChannel(ch2, limit, handler) +} + +// Remove a channel from the reactor. +// +// Closed channels are removed automatically. +func (r *Reactor) RemoveChannel(id uint64) { + r.remove = append(r.remove, id) +} + +func (r *Reactor) SetVerbose(verbose bool) { + r.verbose = verbose +} + +// Run the reactor. +// +// The interval determines the time-out on the polling of sockets. +// Interval must be positive if there are channels. +// If there are no channels, you can set interval to -1. +// +// The run alternates between polling/handling sockets (using the interval as timeout), +// and reading/handling channels. The reading of channels is without time-out: if there +// is no activity on any channel, the run continues to poll sockets immediately. +// +// The run exits when any handler returns an error, returning that same error. +func (r *Reactor) Run(interval time.Duration) (err error) { + for { + + // process requests to remove channels + for _, id := range r.remove { + delete(r.channels, id) + } + r.remove = r.remove[0:0] + + CHANNELS: + for id, ch := range r.channels { + limit := ch.limit + for { + select { + case val, ok := <-ch.ch: + if !ok { + if r.verbose { + fmt.Printf("Reactor(%p) removing closed channel %d\n", r, id) + } + r.RemoveChannel(id) + continue CHANNELS + } + if r.verbose { + fmt.Printf("Reactor(%p) channel %d: %q\n", r, id, val) + } + err = ch.f(val) + if err != nil { + return + } + if ch.limit > 0 { + limit-- + if limit == 0 { + continue CHANNELS + } + } + default: + continue CHANNELS + } + } + } + + if len(r.channels) > 0 && interval < 0 { + return errors.New("There are channels, but polling time-out is infinite") + } + + if len(r.sockets) == 0 { + if len(r.channels) == 0 { + return errors.New("No sockets to poll, no channels to read") + } + time.Sleep(interval) + continue + } + + polled, e := r.p.Poll(interval) + if e != nil { + return e + } + for _, item := range polled { + if r.verbose { + fmt.Printf("Reactor(%p) %v\n", r, item) + } + err = r.sockets[item.Socket].f(item.Events) + if err != nil { + return + } + } + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/socketevent_test.go b/vendor/github.com/pebbe/zmq4/socketevent_test.go new file mode 100644 index 0000000..b6f6a5a --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/socketevent_test.go @@ -0,0 +1,98 @@ +package zmq4_test + +import ( + zmq "github.com/pebbe/zmq4" + + "fmt" + "testing" + "time" +) + +func rep_socket_monitor(addr string, chMsg chan<- string) { + + defer close(chMsg) + + s, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + chMsg <- fmt.Sprint("NewSocket:", err) + return + } + defer func() { + s.SetLinger(0) + s.Close() + }() + + err = s.Connect(addr) + if err != nil { + chMsg <- fmt.Sprint("s.Connect:", err) + return + } + + for { + a, b, _, err := s.RecvEvent(0) + if err != nil { + chMsg <- fmt.Sprint("s.RecvEvent:", err) + return + } + chMsg <- fmt.Sprint(a, " ", b) + if a == zmq.EVENT_CLOSED { + break + } + } + chMsg <- "Done" +} + +func TestSocketEvent(t *testing.T) { + + var rep *zmq.Socket + defer func() { + if rep != nil { + rep.SetLinger(0) + rep.Close() + } + }() + + // REP socket + rep, err := zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + + // REP socket monitor, all events + err = rep.Monitor("inproc://monitor.rep", zmq.EVENT_ALL) + if err != nil { + t.Fatal("rep.Monitor:", err) + } + chMsg := make(chan string, 10) + go rep_socket_monitor("inproc://monitor.rep", chMsg) + time.Sleep(time.Second) + + // Generate an event + err = rep.Bind("tcp://*:9689") + if err != nil { + t.Fatal("rep.Bind:", err) + } + + rep.Close() + rep = nil + + expect := []string{ + "EVENT_LISTENING tcp://0.0.0.0:9689", + "EVENT_CLOSED tcp://0.0.0.0:9689", + "Done", + } + i := 0 + for msg := range chMsg { + if i < len(expect) { + if msg != expect[i] { + t.Errorf("Expected message %q, got %q", expect[i], msg) + } + i++ + } else { + t.Error("Unexpected message: %q", msg) + } + } + for ; i < len(expect); i++ { + t.Errorf("Expected message %q, got nothing", expect[i]) + } +} diff --git a/vendor/github.com/pebbe/zmq4/socketget.go b/vendor/github.com/pebbe/zmq4/socketget.go new file mode 100644 index 0000000..cf28751 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/socketget.go @@ -0,0 +1,648 @@ +package zmq4 + +/* +#include +#include +#include "zmq4.h" +*/ +import "C" + +import ( + "strings" + "time" + "unsafe" +) + +func (soc *Socket) getString(opt C.int, bufsize int) (string, error) { + if !soc.opened { + return "", ErrorSocketClosed + } + value := make([]byte, bufsize) + size := C.size_t(bufsize) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value[0]), &size); i != 0 { + return "", errget(err) + } + return strings.TrimRight(string(value[:int(size)]), "\x00"), nil +} + +func (soc *Socket) getStringRaw(opt C.int, bufsize int) (string, error) { + if !soc.opened { + return "", ErrorSocketClosed + } + value := make([]byte, bufsize) + size := C.size_t(bufsize) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value[0]), &size); i != 0 { + return "", errget(err) + } + return string(value[:int(size)]), nil +} + +func (soc *Socket) getInt(opt C.int) (int, error) { + if !soc.opened { + return 0, ErrorSocketClosed + } + value := C.int(0) + size := C.size_t(unsafe.Sizeof(value)) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value), &size); i != 0 { + return 0, errget(err) + } + return int(value), nil +} + +func (soc *Socket) getInt64(opt C.int) (int64, error) { + if !soc.opened { + return 0, ErrorSocketClosed + } + value := C.int64_t(0) + size := C.size_t(unsafe.Sizeof(value)) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value), &size); i != 0 { + return 0, errget(err) + } + return int64(value), nil +} + +func (soc *Socket) getUInt64(opt C.int) (uint64, error) { + if !soc.opened { + return 0, ErrorSocketClosed + } + value := C.uint64_t(0) + size := C.size_t(unsafe.Sizeof(value)) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value), &size); i != 0 { + return 0, errget(err) + } + return uint64(value), nil +} + +// ZMQ_TYPE: Retrieve socket type +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc43 +func (soc *Socket) GetType() (Type, error) { + v, err := soc.getInt(C.ZMQ_TYPE) + return Type(v), err +} + +// ZMQ_RCVMORE: More message data parts to follow +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc30 +func (soc *Socket) GetRcvmore() (bool, error) { + v, err := soc.getInt(C.ZMQ_RCVMORE) + return v != 0, err +} + +// ZMQ_SNDHWM: Retrieves high water mark for outbound messages +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc36 +func (soc *Socket) GetSndhwm() (int, error) { + return soc.getInt(C.ZMQ_SNDHWM) +} + +// ZMQ_RCVHWM: Retrieve high water mark for inbound messages +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc29 +func (soc *Socket) GetRcvhwm() (int, error) { + return soc.getInt(C.ZMQ_RCVHWM) +} + +// ZMQ_AFFINITY: Retrieve I/O thread affinity +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc3 +func (soc *Socket) GetAffinity() (uint64, error) { + return soc.getUInt64(C.ZMQ_AFFINITY) +} + +// ZMQ_IDENTITY: Retrieve socket identity +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc15 +func (soc *Socket) GetIdentity() (string, error) { + return soc.getString(C.ZMQ_IDENTITY, 256) +} + +// ZMQ_RATE: Retrieve multicast data rate +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc27 +func (soc *Socket) GetRate() (int, error) { + return soc.getInt(C.ZMQ_RATE) +} + +// ZMQ_RECOVERY_IVL: Get multicast recovery interval +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc34 +func (soc *Socket) GetRecoveryIvl() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_RECOVERY_IVL) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_SNDBUF: Retrieve kernel transmit buffer size +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc35 +func (soc *Socket) GetSndbuf() (int, error) { + return soc.getInt(C.ZMQ_SNDBUF) +} + +// ZMQ_RCVBUF: Retrieve kernel receive buffer size +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc28 +func (soc *Socket) GetRcvbuf() (int, error) { + return soc.getInt(C.ZMQ_RCVBUF) +} + +// ZMQ_LINGER: Retrieve linger period for socket shutdown +// +// Returns time.Duration(-1) for infinite +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc20 +func (soc *Socket) GetLinger() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_LINGER) + if v < 0 { + return time.Duration(-1), err + } + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_RECONNECT_IVL: Retrieve reconnection interval +// +// Returns time.Duration(-1) for no reconnection +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc32 +func (soc *Socket) GetReconnectIvl() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_RECONNECT_IVL) + if v < 0 { + return time.Duration(-1), err + } + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc33 +func (soc *Socket) GetReconnectIvlMax() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_RECONNECT_IVL_MAX) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc4 +func (soc *Socket) GetBacklog() (int, error) { + return soc.getInt(C.ZMQ_BACKLOG) +} + +// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc21 +func (soc *Socket) GetMaxmsgsize() (int64, error) { + return soc.getInt64(C.ZMQ_MAXMSGSIZE) +} + +// ZMQ_MULTICAST_HOPS: Maximum network hops for multicast packets +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc23 +func (soc *Socket) GetMulticastHops() (int, error) { + return soc.getInt(C.ZMQ_MULTICAST_HOPS) +} + +// ZMQ_RCVTIMEO: Maximum time before a socket operation returns with EAGAIN +// +// Returns time.Duration(-1) for infinite +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc31 +func (soc *Socket) GetRcvtimeo() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_RCVTIMEO) + if v < 0 { + return time.Duration(-1), err + } + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_SNDTIMEO: Maximum time before a socket operation returns with EAGAIN +// +// Returns time.Duration(-1) for infinite +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc37 +func (soc *Socket) GetSndtimeo() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_SNDTIMEO) + if v < 0 { + return time.Duration(-1), err + } + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_IPV6: Retrieve IPv6 socket status +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc18 +func (soc *Socket) GetIpv6() (bool, error) { + v, err := soc.getInt(C.ZMQ_IPV6) + return v != 0, err +} + +// ZMQ_IMMEDIATE: Retrieve attach-on-connect value +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc16 +func (soc *Socket) GetImmediate() (bool, error) { + v, err := soc.getInt(C.ZMQ_IMMEDIATE) + return v != 0, err +} + +// ZMQ_FD: Retrieve file descriptor associated with the socket +// see socketget_unix.go and socketget_windows.go + +// ZMQ_EVENTS: Retrieve socket event state +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc8 +func (soc *Socket) GetEvents() (State, error) { + v, err := soc.getInt(C.ZMQ_EVENTS) + return State(v), err +} + +// ZMQ_LAST_ENDPOINT: Retrieve the last endpoint set +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc19 +func (soc *Socket) GetLastEndpoint() (string, error) { + return soc.getString(C.ZMQ_LAST_ENDPOINT, 1024) +} + +// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc38 +func (soc *Socket) GetTcpKeepalive() (int, error) { + return soc.getInt(C.ZMQ_TCP_KEEPALIVE) +} + +// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS) +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc40 +func (soc *Socket) GetTcpKeepaliveIdle() (int, error) { + return soc.getInt(C.ZMQ_TCP_KEEPALIVE_IDLE) +} + +// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc39 +func (soc *Socket) GetTcpKeepaliveCnt() (int, error) { + return soc.getInt(C.ZMQ_TCP_KEEPALIVE_CNT) +} + +// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc41 +func (soc *Socket) GetTcpKeepaliveIntvl() (int, error) { + return soc.getInt(C.ZMQ_TCP_KEEPALIVE_INTVL) +} + +// ZMQ_MECHANISM: Retrieve current security mechanism +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc22 +func (soc *Socket) GetMechanism() (Mechanism, error) { + v, err := soc.getInt(C.ZMQ_MECHANISM) + return Mechanism(v), err +} + +// ZMQ_PLAIN_SERVER: Retrieve current PLAIN server role +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc25 +func (soc *Socket) GetPlainServer() (int, error) { + return soc.getInt(C.ZMQ_PLAIN_SERVER) +} + +// ZMQ_PLAIN_USERNAME: Retrieve current PLAIN username +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc26 +func (soc *Socket) GetPlainUsername() (string, error) { + s, err := soc.getString(C.ZMQ_PLAIN_USERNAME, 1024) + if n := len(s); n > 0 && s[n-1] == 0 { + s = s[:n-1] + } + return s, err +} + +// ZMQ_PLAIN_PASSWORD: Retrieve current password +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc24 +func (soc *Socket) GetPlainPassword() (string, error) { + s, err := soc.getString(C.ZMQ_PLAIN_PASSWORD, 1024) + if n := len(s); n > 0 && s[n-1] == 0 { + s = s[:n-1] + } + return s, err +} + +// ZMQ_CURVE_PUBLICKEY: Retrieve current CURVE public key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc5 +func (soc *Socket) GetCurvePublickeyRaw() (string, error) { + return soc.getStringRaw(C.ZMQ_CURVE_PUBLICKEY, 32) +} + +// ZMQ_CURVE_PUBLICKEY: Retrieve current CURVE public key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc5 +func (soc *Socket) GetCurvePublickeykeyZ85() (string, error) { + return soc.getString(C.ZMQ_CURVE_PUBLICKEY, 41) +} + +// ZMQ_CURVE_SECRETKEY: Retrieve current CURVE secret key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc6 +func (soc *Socket) GetCurveSecretkeyRaw() (string, error) { + return soc.getStringRaw(C.ZMQ_CURVE_SECRETKEY, 32) +} + +// ZMQ_CURVE_SECRETKEY: Retrieve current CURVE secret key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc6 +func (soc *Socket) GetCurveSecretkeyZ85() (string, error) { + return soc.getString(C.ZMQ_CURVE_SECRETKEY, 41) +} + +// ZMQ_CURVE_SERVERKEY: Retrieve current CURVE server key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc7 +func (soc *Socket) GetCurveServerkeyRaw() (string, error) { + return soc.getStringRaw(C.ZMQ_CURVE_SERVERKEY, 32) +} + +// ZMQ_CURVE_SERVERKEY: Retrieve current CURVE server key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc7 +func (soc *Socket) GetCurveServerkeyZ85() (string, error) { + return soc.getString(C.ZMQ_CURVE_SERVERKEY, 41) +} + +// ZMQ_ZAP_DOMAIN: Retrieve RFC 27 authentication domain +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc44 +func (soc *Socket) GetZapDomain() (string, error) { + return soc.getString(C.ZMQ_ZAP_DOMAIN, 1024) +} + +//////////////////////////////////////////////////////////////// +// +// New in ZeroMQ 4.1.0 +// +//////////////////////////////////////////////////////////////// +// +// + : yes +// D : deprecated +// o : setsockopt only +// implemented documented test +// ZMQ_ROUTER_HANDOVER o +// ZMQ_TOS + + +// ZMQ_IPC_FILTER_PID D +// ZMQ_IPC_FILTER_UID D +// ZMQ_IPC_FILTER_GID D +// ZMQ_CONNECT_RID o +// ZMQ_GSSAPI_SERVER + + +// ZMQ_GSSAPI_PRINCIPAL + + +// ZMQ_GSSAPI_SERVICE_PRINCIPAL + + +// ZMQ_GSSAPI_PLAINTEXT + + +// ZMQ_HANDSHAKE_IVL + + +// ZMQ_SOCKS_PROXY + +// ZMQ_XPUB_NODROP o? +// +//////////////////////////////////////////////////////////////// + +// ZMQ_TOS: Retrieve the Type-of-Service socket override status +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc42 +func (soc *Socket) GetTos() (int, error) { + if minor < 1 { + return 0, ErrorNotImplemented41 + } + return soc.getInt(C.ZMQ_TOS) +} + +// ZMQ_CONNECT_RID: SET ONLY + +// ZMQ_GSSAPI_SERVER: Retrieve current GSSAPI server role +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc12 +func (soc *Socket) GetGssapiServer() (bool, error) { + if minor < 1 { + return false, ErrorNotImplemented41 + } + v, err := soc.getInt(C.ZMQ_GSSAPI_SERVER) + return v != 0, err +} + +// ZMQ_GSSAPI_PRINCIPAL: Retrieve the name of the GSSAPI principal +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc11 +func (soc *Socket) GetGssapiPrincipal() (string, error) { + if minor < 1 { + return "", ErrorNotImplemented41 + } + return soc.getString(C.ZMQ_GSSAPI_PRINCIPAL, 1024) +} + +// ZMQ_GSSAPI_SERVICE_PRINCIPAL: Retrieve the name of the GSSAPI service principal +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc13 +func (soc *Socket) GetGssapiServicePrincipal() (string, error) { + if minor < 1 { + return "", ErrorNotImplemented41 + } + return soc.getString(C.ZMQ_GSSAPI_SERVICE_PRINCIPAL, 1024) +} + +// ZMQ_GSSAPI_PLAINTEXT: Retrieve GSSAPI plaintext or encrypted status +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc10 +func (soc *Socket) GetGssapiPlaintext() (bool, error) { + if minor < 1 { + return false, ErrorNotImplemented41 + } + v, err := soc.getInt(C.ZMQ_GSSAPI_PLAINTEXT) + return v != 0, err +} + +// ZMQ_HANDSHAKE_IVL: Retrieve maximum handshake interval +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc14 +func (soc *Socket) GetHandshakeIvl() (time.Duration, error) { + if minor < 1 { + return time.Duration(0), ErrorNotImplemented41 + } + v, err := soc.getInt(C.ZMQ_HANDSHAKE_IVL) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_SOCKS_PROXY: NOT DOCUMENTED +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +func (soc *Socket) GetSocksProxy() (string, error) { + if minor < 1 { + return "", ErrorNotImplemented41 + } + return soc.getString(C.ZMQ_SOCKS_PROXY, 1024) +} + +// ZMQ_XPUB_NODROP: SET ONLY? (not documented) + +//////////////////////////////////////////////////////////////// +// +// New in ZeroMQ 4.2.0 +// +//////////////////////////////////////////////////////////////// +// +// + : yes +// o : setsockopt only +// implemented documented test +// ZMQ_BLOCKY +// ZMQ_XPUB_MANUAL o +// ZMQ_XPUB_WELCOME_MSG o +// ZMQ_STREAM_NOTIFY o +// ZMQ_INVERT_MATCHING + + +// ZMQ_HEARTBEAT_IVL o +// ZMQ_HEARTBEAT_TTL o +// ZMQ_HEARTBEAT_TIMEOUT o +// ZMQ_XPUB_VERBOSER o +// ZMQ_CONNECT_TIMEOUT + + +// ZMQ_TCP_MAXRT + + +// ZMQ_THREAD_SAFE + + +// ZMQ_MULTICAST_MAXTPDU + + +// ZMQ_VMCI_BUFFER_SIZE + + +// ZMQ_VMCI_BUFFER_MIN_SIZE + + +// ZMQ_VMCI_BUFFER_MAX_SIZE + + +// ZMQ_VMCI_CONNECT_TIMEOUT + + +// ZMQ_USE_FD + + +// +//////////////////////////////////////////////////////////////// + +// ZMQ_BLOCKY doesn't look like a socket option + +// ZMQ_INVERT_MATCHING: Retrieve inverted filtering status +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc18 +func (soc *Socket) GetInvertMatching() (int, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getInt(C.ZMQ_INVERT_MATCHING) +} + +// ZMQ_CONNECT_TIMEOUT: Retrieve connect() timeout +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc5 +func (soc *Socket) GetConnectTimeout() (time.Duration, error) { + if minor < 2 { + return time.Duration(0), ErrorNotImplemented42 + } + v, err := soc.getInt(C.ZMQ_CONNECT_TIMEOUT) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_TCP_MAXRT: Retrieve Max TCP Retransmit Timeout +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc44 +func (soc *Socket) GetTcpMaxrt() (time.Duration, error) { + if minor < 2 { + return time.Duration(0), ErrorNotImplemented42 + } + v, err := soc.getInt(C.ZMQ_TCP_MAXRT) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_THREAD_SAFE: Retrieve socket thread safety +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc45 +func (soc *Socket) GetThreadSafe() (bool, error) { + if minor < 2 { + return false, ErrorNotImplemented42 + } + v, err := soc.getInt(C.ZMQ_THREAD_SAFE) + return v != 0, err +} + +// ZMQ_MULTICAST_MAXTPDU: Maximum transport data unit size for multicast packets +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc26 +func (soc *Socket) GetMulticastMaxtpdu() (int, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getInt(C.ZMQ_MULTICAST_MAXTPDU) +} + +// ZMQ_VMCI_BUFFER_SIZE: Retrieve buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc49 +func (soc *Socket) GetVmciBufferSize() (uint64, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getUInt64(C.ZMQ_VMCI_BUFFER_SIZE) +} + +// ZMQ_VMCI_BUFFER_MIN_SIZE: Retrieve min buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc50 +func (soc *Socket) GetVmciBufferMinSize() (uint64, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getUInt64(C.ZMQ_VMCI_BUFFER_MIN_SIZE) +} + +// ZMQ_VMCI_BUFFER_MAX_SIZE: Retrieve max buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc51 +func (soc *Socket) GetVmciBufferMaxSize() (uint64, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getUInt64(C.ZMQ_VMCI_BUFFER_MAX_SIZE) +} + +// ZMQ_VMCI_CONNECT_TIMEOUT: Retrieve connection timeout of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc52 +func (soc *Socket) GetVmciConnectTimeout() (time.Duration, error) { + if minor < 2 { + return time.Duration(0), ErrorNotImplemented42 + } + v, err := soc.getInt(C.ZMQ_VMCI_CONNECT_TIMEOUT) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_USE_FD: Retrieve the pre-allocated socket file descriptor +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc29 +func (soc *Socket) Getusefd() (int, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getInt(C.ZMQ_USE_FD) +} diff --git a/vendor/github.com/pebbe/zmq4/socketget_unix.go b/vendor/github.com/pebbe/zmq4/socketget_unix.go new file mode 100644 index 0000000..2671b33 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/socketget_unix.go @@ -0,0 +1,15 @@ +// +build !windows + +package zmq4 + +/* +#include +*/ +import "C" + +// ZMQ_FD: Retrieve file descriptor associated with the socket +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc9 +func (soc *Socket) GetFd() (int, error) { + return soc.getInt(C.ZMQ_FD) +} diff --git a/vendor/github.com/pebbe/zmq4/socketget_windows.go b/vendor/github.com/pebbe/zmq4/socketget_windows.go new file mode 100644 index 0000000..6d2a89c --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/socketget_windows.go @@ -0,0 +1,26 @@ +// +build windows + +package zmq4 + +/* +#include +*/ +import "C" + +import ( + "unsafe" +) + +/* +ZMQ_FD: Retrieve file descriptor associated with the socket + +See: http://api.zeromq.org/4-1:zmq-getsockopt#toc9 +*/ +func (soc *Socket) GetFd() (uintptr, error) { + value := C.SOCKET(0) + size := C.size_t(unsafe.Sizeof(value)) + if i, err := C.zmq_getsockopt(soc.soc, C.ZMQ_FD, unsafe.Pointer(&value), &size); i != 0 { + return uintptr(0), errget(err) + } + return uintptr(value), nil +} diff --git a/vendor/github.com/pebbe/zmq4/socketset.go b/vendor/github.com/pebbe/zmq4/socketset.go new file mode 100644 index 0000000..d5dd6f0 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/socketset.go @@ -0,0 +1,800 @@ +package zmq4 + +/* +#include +#include +#include +#include "zmq4.h" +*/ +import "C" + +import ( + "time" + "unsafe" +) + +func (soc *Socket) setString(opt C.int, s string) error { + if !soc.opened { + return ErrorSocketClosed + } + cs := C.CString(s) + defer C.free(unsafe.Pointer(cs)) + if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(cs), C.size_t(len(s))); i != 0 { + return errget(err) + } + return nil +} + +func (soc *Socket) setNullString(opt C.int) error { + if !soc.opened { + return ErrorSocketClosed + } + if i, err := C.zmq_setsockopt(soc.soc, opt, nil, 0); i != 0 { + return errget(err) + } + return nil +} + +func (soc *Socket) setInt(opt C.int, value int) error { + if !soc.opened { + return ErrorSocketClosed + } + val := C.int(value) + if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); i != 0 { + return errget(err) + } + return nil +} + +func (soc *Socket) setInt64(opt C.int, value int64) error { + if !soc.opened { + return ErrorSocketClosed + } + val := C.int64_t(value) + if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); i != 0 { + return errget(err) + } + return nil +} + +func (soc *Socket) setUInt64(opt C.int, value uint64) error { + if !soc.opened { + return ErrorSocketClosed + } + val := C.uint64_t(value) + if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); i != 0 { + return errget(err) + } + return nil +} + +// ZMQ_SNDHWM: Set high water mark for outbound messages +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc39 +func (soc *Socket) SetSndhwm(value int) error { + return soc.setInt(C.ZMQ_SNDHWM, value) +} + +// ZMQ_RCVHWM: Set high water mark for inbound messages +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc28 +func (soc *Socket) SetRcvhwm(value int) error { + return soc.setInt(C.ZMQ_RCVHWM, value) +} + +// ZMQ_AFFINITY: Set I/O thread affinity +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc3 +func (soc *Socket) SetAffinity(value uint64) error { + return soc.setUInt64(C.ZMQ_AFFINITY, value) +} + +// ZMQ_SUBSCRIBE: Establish message filter +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc41 +func (soc *Socket) SetSubscribe(filter string) error { + return soc.setString(C.ZMQ_SUBSCRIBE, filter) +} + +// ZMQ_UNSUBSCRIBE: Remove message filter +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc47 +func (soc *Socket) SetUnsubscribe(filter string) error { + return soc.setString(C.ZMQ_UNSUBSCRIBE, filter) +} + +// ZMQ_IDENTITY: Set socket identity +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc16 +func (soc *Socket) SetIdentity(value string) error { + return soc.setString(C.ZMQ_IDENTITY, value) +} + +// ZMQ_RATE: Set multicast data rate +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc26 +func (soc *Socket) SetRate(value int) error { + return soc.setInt(C.ZMQ_RATE, value) +} + +// ZMQ_RECOVERY_IVL: Set multicast recovery interval +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc32 +func (soc *Socket) SetRecoveryIvl(value time.Duration) error { + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_RECOVERY_IVL, val) +} + +// ZMQ_SNDBUF: Set kernel transmit buffer size +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc38 +func (soc *Socket) SetSndbuf(value int) error { + return soc.setInt(C.ZMQ_SNDBUF, value) +} + +// ZMQ_RCVBUF: Set kernel receive buffer size +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc27 +func (soc *Socket) SetRcvbuf(value int) error { + return soc.setInt(C.ZMQ_RCVBUF, value) +} + +// ZMQ_LINGER: Set linger period for socket shutdown +// +// For infinite, use -1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc19 +func (soc *Socket) SetLinger(value time.Duration) error { + val := int(value / time.Millisecond) + if value == -1 { + val = -1 + } + return soc.setInt(C.ZMQ_LINGER, val) +} + +// ZMQ_RECONNECT_IVL: Set reconnection interval +// +// For no reconnection, use -1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc30 +func (soc *Socket) SetReconnectIvl(value time.Duration) error { + val := int(value / time.Millisecond) + if value == -1 { + val = -1 + } + return soc.setInt(C.ZMQ_RECONNECT_IVL, val) +} + +// ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc31 +func (soc *Socket) SetReconnectIvlMax(value time.Duration) error { + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_RECONNECT_IVL_MAX, val) +} + +// ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc4 +func (soc *Socket) SetBacklog(value int) error { + return soc.setInt(C.ZMQ_BACKLOG, value) +} + +// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc20 +func (soc *Socket) SetMaxmsgsize(value int64) error { + return soc.setInt64(C.ZMQ_MAXMSGSIZE, value) +} + +// ZMQ_MULTICAST_HOPS: Maximum network hops for multicast packets +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc21 +func (soc *Socket) SetMulticastHops(value int) error { + return soc.setInt(C.ZMQ_MULTICAST_HOPS, value) +} + +// ZMQ_RCVTIMEO: Maximum time before a recv operation returns with EAGAIN +// +// For infinite, use -1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc29 +func (soc *Socket) SetRcvtimeo(value time.Duration) error { + val := int(value / time.Millisecond) + if value == -1 { + val = -1 + } + return soc.setInt(C.ZMQ_RCVTIMEO, val) +} + +// ZMQ_SNDTIMEO: Maximum time before a send operation returns with EAGAIN +// +// For infinite, use -1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc40 +func (soc *Socket) SetSndtimeo(value time.Duration) error { + val := int(value / time.Millisecond) + if value == -1 { + val = -1 + } + return soc.setInt(C.ZMQ_SNDTIMEO, val) +} + +// ZMQ_IPV6: Enable IPv6 on socket +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc18 +func (soc *Socket) SetIpv6(value bool) error { + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_IPV6, val) +} + +// ZMQ_IMMEDIATE: Queue messages only to completed connections +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc17 +func (soc *Socket) SetImmediate(value bool) error { + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_IMMEDIATE, val) +} + +// ZMQ_ROUTER_MANDATORY: accept only routable messages on ROUTER sockets +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc36 +func (soc *Socket) SetRouterMandatory(value int) error { + return soc.setInt(C.ZMQ_ROUTER_MANDATORY, value) +} + +// ZMQ_ROUTER_RAW: switch ROUTER socket to raw mode +// +// This option is deprecated since ZeroMQ version 4.1, please use ZMQ_STREAM sockets instead. +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc37 +func (soc *Socket) SetRouterRaw(value int) error { + return soc.setInt(C.ZMQ_ROUTER_RAW, value) +} + +// ZMQ_PROBE_ROUTER: bootstrap connections to ROUTER sockets +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc25 +func (soc *Socket) SetProbeRouter(value int) error { + return soc.setInt(C.ZMQ_PROBE_ROUTER, value) +} + +// ZMQ_XPUB_VERBOSE: provide all subscription messages on XPUB sockets +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc48 +func (soc *Socket) SetXpubVerbose(value int) error { + return soc.setInt(C.ZMQ_XPUB_VERBOSE, value) +} + +// ZMQ_REQ_CORRELATE: match replies with requests +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc33 +func (soc *Socket) SetReqCorrelate(value int) error { + return soc.setInt(C.ZMQ_REQ_CORRELATE, value) +} + +// ZMQ_REQ_RELAXED: relax strict alternation between request and reply +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc34 +func (soc *Socket) SetReqRelaxed(value int) error { + return soc.setInt(C.ZMQ_REQ_RELAXED, value) +} + +// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc42 +func (soc *Socket) SetTcpKeepalive(value int) error { + return soc.setInt(C.ZMQ_TCP_KEEPALIVE, value) +} + +// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS) +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc44 +func (soc *Socket) SetTcpKeepaliveIdle(value int) error { + return soc.setInt(C.ZMQ_TCP_KEEPALIVE_IDLE, value) +} + +// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc43 +func (soc *Socket) SetTcpKeepaliveCnt(value int) error { + return soc.setInt(C.ZMQ_TCP_KEEPALIVE_CNT, value) +} + +// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc45 +func (soc *Socket) SetTcpKeepaliveIntvl(value int) error { + return soc.setInt(C.ZMQ_TCP_KEEPALIVE_INTVL, value) +} + +// ZMQ_TCP_ACCEPT_FILTER: Assign filters to allow new TCP connections +// +// This option is deprecated since ZeroMQ version 4.1, please use authentication via +// the ZAP API and IP address whitelisting / blacklisting. +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc50 +func (soc *Socket) SetTcpAcceptFilter(filter string) error { + if len(filter) == 0 { + return soc.setNullString(C.ZMQ_TCP_ACCEPT_FILTER) + } + return soc.setString(C.ZMQ_TCP_ACCEPT_FILTER, filter) +} + +// ZMQ_PLAIN_SERVER: Set PLAIN server role +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc23 +func (soc *Socket) SetPlainServer(value int) error { + return soc.setInt(C.ZMQ_PLAIN_SERVER, value) +} + +// ZMQ_PLAIN_USERNAME: Set PLAIN security username +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc24 +func (soc *Socket) SetPlainUsername(username string) error { + if len(username) == 0 { + return soc.setNullString(C.ZMQ_PLAIN_USERNAME) + } + return soc.setString(C.ZMQ_PLAIN_USERNAME, username) +} + +// ZMQ_PLAIN_PASSWORD: Set PLAIN security password +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc22 +func (soc *Socket) SetPlainPassword(password string) error { + if len(password) == 0 { + return soc.setNullString(C.ZMQ_PLAIN_PASSWORD) + } + return soc.setString(C.ZMQ_PLAIN_PASSWORD, password) +} + +// ZMQ_CURVE_SERVER: Set CURVE server role +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc9 +func (soc *Socket) SetCurveServer(value int) error { + return soc.setInt(C.ZMQ_CURVE_SERVER, value) +} + +// ZMQ_CURVE_PUBLICKEY: Set CURVE public key +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc7 +func (soc *Socket) SetCurvePublickey(key string) error { + return soc.setString(C.ZMQ_CURVE_PUBLICKEY, key) +} + +// ZMQ_CURVE_SECRETKEY: Set CURVE secret key +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc8 +func (soc *Socket) SetCurveSecretkey(key string) error { + return soc.setString(C.ZMQ_CURVE_SECRETKEY, key) +} + +// ZMQ_CURVE_SERVERKEY: Set CURVE server key +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc10 +func (soc *Socket) SetCurveServerkey(key string) error { + return soc.setString(C.ZMQ_CURVE_SERVERKEY, key) +} + +// ZMQ_ZAP_DOMAIN: Set RFC 27 authentication domain +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc49 +func (soc *Socket) SetZapDomain(domain string) error { + return soc.setString(C.ZMQ_ZAP_DOMAIN, domain) +} + +// ZMQ_CONFLATE: Keep only last message +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc6 +func (soc *Socket) SetConflate(value bool) error { + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_CONFLATE, val) +} + +//////////////////////////////////////////////////////////////// +// +// New in ZeroMQ 4.1.0 +// +//////////////////////////////////////////////////////////////// +// +// + : yes +// D : deprecated +// implemented documented test +// ZMQ_ROUTER_HANDOVER + + +// ZMQ_TOS + + +// ZMQ_IPC_FILTER_PID D +// ZMQ_IPC_FILTER_UID D +// ZMQ_IPC_FILTER_GID D +// ZMQ_CONNECT_RID + + +// ZMQ_GSSAPI_SERVER + + +// ZMQ_GSSAPI_PRINCIPAL + + +// ZMQ_GSSAPI_SERVICE_PRINCIPAL + + +// ZMQ_GSSAPI_PLAINTEXT + + +// ZMQ_HANDSHAKE_IVL + + +// ZMQ_SOCKS_PROXY + +// ZMQ_XPUB_NODROP + +// +//////////////////////////////////////////////////////////////// + +// ZMQ_ROUTER_HANDOVER: handle duplicate client identities on ROUTER sockets +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc35 +func (soc *Socket) SetRouterHandover(value bool) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_ROUTER_HANDOVER, val) +} + +// ZMQ_TOS: Set the Type-of-Service on socket +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc46 +func (soc *Socket) SetTos(value int) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return soc.setInt(C.ZMQ_TOS, value) +} + +// ZMQ_CONNECT_RID: Assign the next outbound connection id +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc5 +func (soc *Socket) SetConnectRid(value string) error { + if minor < 1 { + return ErrorNotImplemented41 + } + if value == "" { + return soc.setNullString(C.ZMQ_CONNECT_RID) + } + return soc.setString(C.ZMQ_CONNECT_RID, value) +} + +// ZMQ_GSSAPI_SERVER: Set GSSAPI server role +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc13 +func (soc *Socket) SetGssapiServer(value bool) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_GSSAPI_SERVER, val) +} + +// ZMQ_GSSAPI_PRINCIPAL: Set name of GSSAPI principal +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc12 +func (soc *Socket) SetGssapiPrincipal(value string) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return soc.setString(C.ZMQ_GSSAPI_PRINCIPAL, value) +} + +// ZMQ_GSSAPI_SERVICE_PRINCIPAL: Set name of GSSAPI service principal +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc14 +func (soc *Socket) SetGssapiServicePrincipal(value string) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return soc.setString(C.ZMQ_GSSAPI_SERVICE_PRINCIPAL, value) +} + +// ZMQ_GSSAPI_PLAINTEXT: Disable GSSAPI encryption +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc11 +func (soc *Socket) SetGssapiPlaintext(value bool) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_GSSAPI_PLAINTEXT, val) +} + +// ZMQ_HANDSHAKE_IVL: Set maximum handshake interval +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc15 +func (soc *Socket) SetHandshakeIvl(value time.Duration) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_HANDSHAKE_IVL, val) +} + +// ZMQ_SOCKS_PROXY: NOT DOCUMENTED +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +func (soc *Socket) SetSocksProxy(value string) error { + if minor < 1 { + return ErrorNotImplemented41 + } + if value == "" { + return soc.setNullString(C.ZMQ_SOCKS_PROXY) + } + return soc.setString(C.ZMQ_SOCKS_PROXY, value) +} + +// Available since ZeroMQ 4.1, documented since ZeroMQ 4.2 + +// ZMQ_XPUB_NODROP: do not silently drop messages if SENDHWM is reached +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc60 +func (soc *Socket) SetXpubNodrop(value bool) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_XPUB_NODROP, val) +} + +//////////////////////////////////////////////////////////// +// +// New in ZeroMQ 4.2.0 +// +//////////////////////////////////////////////////////////////// +// +// + : yes +// o : getsockopt only +// implemented documented test +// ZMQ_BLOCKY +// ZMQ_XPUB_MANUAL + + +// ZMQ_XPUB_WELCOME_MSG + + +// ZMQ_STREAM_NOTIFY + + +// ZMQ_INVERT_MATCHING + + +// ZMQ_HEARTBEAT_IVL + + +// ZMQ_HEARTBEAT_TTL + + +// ZMQ_HEARTBEAT_TIMEOUT + + +// ZMQ_XPUB_VERBOSER + + +// ZMQ_CONNECT_TIMEOUT + + +// ZMQ_TCP_MAXRT + + +// ZMQ_THREAD_SAFE o +// ZMQ_MULTICAST_MAXTPDU + + +// ZMQ_VMCI_BUFFER_SIZE + + +// ZMQ_VMCI_BUFFER_MIN_SIZE + + +// ZMQ_VMCI_BUFFER_MAX_SIZE + + +// ZMQ_VMCI_CONNECT_TIMEOUT + + +// ZMQ_USE_FD + + +// +//////////////////////////////////////////////////////////////// + +// ZMQ_XPUB_MANUAL: change the subscription handling to manual +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc59 +func (soc *Socket) SetXpubManual(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_XPUB_MANUAL, value) +} + +// ZMQ_XPUB_WELCOME_MSG: set welcome message that will be received by subscriber when connecting +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc61 +func (soc *Socket) SetXpubWelcomeMsg(value string) error { + if minor < 2 { + return ErrorNotImplemented42 + } + if value == "" { + return soc.setNullString(C.ZMQ_XPUB_WELCOME_MSG) + } + return soc.setString(C.ZMQ_XPUB_WELCOME_MSG, value) +} + +// ZMQ_STREAM_NOTIFY: send connect and disconnect notifications +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc48 +func (soc *Socket) SetStreamNotify(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_STREAM_NOTIFY, value) +} + +// ZMQ_INVERT_MATCHING: Invert message filtering +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc22 +func (soc *Socket) SetInvertMatching(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_INVERT_MATCHING, value) +} + +// ZMQ_HEARTBEAT_IVL: Set interval between sending ZMTP heartbeats +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc17 +func (soc *Socket) SetHeartbeatIvl(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_HEARTBEAT_IVL, val) +} + +// ZMQ_HEARTBEAT_TTL: Set the TTL value for ZMTP heartbeats +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc19 +func (soc *Socket) SetHeartbeatTtl(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_HEARTBEAT_TTL, val) +} + +// ZMQ_HEARTBEAT_TIMEOUT: Set timeout for ZMTP heartbeats +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc18 +func (soc *Socket) SetHeartbeatTimeout(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_HEARTBEAT_TIMEOUT, val) +} + +// ZMQ_XPUB_VERBOSER: pass subscribe and unsubscribe messages on XPUB socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc58 +func (soc *Socket) SetXpubVerboser(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_XPUB_VERBOSER, value) +} + +// ZMQ_CONNECT_TIMEOUT: Set connect() timeout +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc7 +func (soc *Socket) SetConnectTimeout(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_CONNECT_TIMEOUT, val) +} + +// ZMQ_TCP_MAXRT: Set TCP Maximum Retransmit Timeout +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc54 +func (soc *Socket) SetTcpMaxrt(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_TCP_MAXRT, val) +} + +// ZMQ_MULTICAST_MAXTPDU: Maximum transport data unit size for multicast packets +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc27 +func (soc *Socket) SetMulticastMaxtpdu(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_MULTICAST_MAXTPDU, value) +} + +// ZMQ_VMCI_BUFFER_SIZE: Set buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc68 +func (soc *Socket) SetVmciBufferSize(value uint64) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setUInt64(C.ZMQ_VMCI_BUFFER_SIZE, value) +} + +// ZMQ_VMCI_BUFFER_MIN_SIZE: Set min buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc69 +func (soc *Socket) SetVmciBufferMinSize(value uint64) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setUInt64(C.ZMQ_VMCI_BUFFER_MIN_SIZE, value) +} + +// ZMQ_VMCI_BUFFER_MAX_SIZE: Set max buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc70 +func (soc *Socket) SetVmciBufferMaxSize(value uint64) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setUInt64(C.ZMQ_VMCI_BUFFER_MAX_SIZE, value) +} + +// ZMQ_VMCI_CONNECT_TIMEOUT: Set connection timeout of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc71 +func (soc *Socket) SetVmciConnectTimeout(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_VMCI_CONNECT_TIMEOUT, val) +} + +// ZMQ_USE_FD: Set the pre-allocated socket file descriptor +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc31 +func (soc *Socket) SetUseFd(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_USE_FD, value) +} diff --git a/vendor/github.com/pebbe/zmq4/utils.go b/vendor/github.com/pebbe/zmq4/utils.go new file mode 100644 index 0000000..3a0fa45 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/utils.go @@ -0,0 +1,206 @@ +package zmq4 + +import ( + "fmt" +) + +/* +Send multi-part message on socket. + +Any `[]string' or `[][]byte' is split into separate `string's or `[]byte's + +Any other part that isn't a `string' or `[]byte' is converted +to `string' with `fmt.Sprintf("%v", part)'. + +Returns total bytes sent. +*/ +func (soc *Socket) SendMessage(parts ...interface{}) (total int, err error) { + return soc.sendMessage(0, parts...) +} + +/* +Like SendMessage(), but adding the DONTWAIT flag. +*/ +func (soc *Socket) SendMessageDontwait(parts ...interface{}) (total int, err error) { + return soc.sendMessage(DONTWAIT, parts...) +} + +func (soc *Socket) sendMessage(dontwait Flag, parts ...interface{}) (total int, err error) { + + var last int +PARTS: + for last = len(parts) - 1; last >= 0; last-- { + switch t := parts[last].(type) { + case []string: + if len(t) > 0 { + break PARTS + } + case [][]byte: + if len(t) > 0 { + break PARTS + } + default: + break PARTS + } + } + + opt := SNDMORE | dontwait + for i := 0; i <= last; i++ { + if i == last { + opt = dontwait + } + switch t := parts[i].(type) { + case []string: + opt = SNDMORE | dontwait + n := len(t) - 1 + for j, s := range t { + if j == n && i == last { + opt = dontwait + } + c, e := soc.Send(s, opt) + if e == nil { + total += c + } else { + return -1, e + } + } + case [][]byte: + opt = SNDMORE | dontwait + n := len(t) - 1 + for j, b := range t { + if j == n && i == last { + opt = dontwait + } + c, e := soc.SendBytes(b, opt) + if e == nil { + total += c + } else { + return -1, e + } + } + case string: + c, e := soc.Send(t, opt) + if e == nil { + total += c + } else { + return -1, e + } + case []byte: + c, e := soc.SendBytes(t, opt) + if e == nil { + total += c + } else { + return -1, e + } + default: + c, e := soc.Send(fmt.Sprintf("%v", t), opt) + if e == nil { + total += c + } else { + return -1, e + } + } + } + return +} + +/* +Receive parts as message from socket. + +Returns last non-nil error code. +*/ +func (soc *Socket) RecvMessage(flags Flag) (msg []string, err error) { + msg = make([]string, 0) + for { + s, e := soc.Recv(flags) + if e == nil { + msg = append(msg, s) + } else { + return msg[0:0], e + } + more, e := soc.GetRcvmore() + if e == nil { + if !more { + break + } + } else { + return msg[0:0], e + } + } + return +} + +/* +Receive parts as message from socket. + +Returns last non-nil error code. +*/ +func (soc *Socket) RecvMessageBytes(flags Flag) (msg [][]byte, err error) { + msg = make([][]byte, 0) + for { + b, e := soc.RecvBytes(flags) + if e == nil { + msg = append(msg, b) + } else { + return msg[0:0], e + } + more, e := soc.GetRcvmore() + if e == nil { + if !more { + break + } + } else { + return msg[0:0], e + } + } + return +} + +/* +Receive parts as message from socket, including metadata. + +Metadata is picked from the first message part. + +For details about metadata, see RecvWithMetadata(). + +Returns last non-nil error code. +*/ +func (soc *Socket) RecvMessageWithMetadata(flags Flag, properties ...string) (msg []string, metadata map[string]string, err error) { + b, p, err := soc.RecvMessageBytesWithMetadata(flags, properties...) + m := make([]string, len(b)) + for i, bt := range b { + m[i] = string(bt) + } + return m, p, err +} + +/* +Receive parts as message from socket, including metadata. + +Metadata is picked from the first message part. + +For details about metadata, see RecvBytesWithMetadata(). + +Returns last non-nil error code. +*/ +func (soc *Socket) RecvMessageBytesWithMetadata(flags Flag, properties ...string) (msg [][]byte, metadata map[string]string, err error) { + bb := make([][]byte, 0) + b, p, err := soc.RecvBytesWithMetadata(flags, properties...) + if err != nil { + return bb, p, err + } + for { + bb = append(bb, b) + + var more bool + more, err = soc.GetRcvmore() + if err != nil || !more { + break + } + b, err = soc.RecvBytes(flags) + if err != nil { + break + } + } + return bb, p, err +} diff --git a/vendor/github.com/pebbe/zmq4/zmq4.go b/vendor/github.com/pebbe/zmq4/zmq4.go new file mode 100644 index 0000000..86287a1 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/zmq4.go @@ -0,0 +1,1335 @@ +package zmq4 + +/* +#cgo !windows pkg-config: libzmq +#cgo windows CFLAGS: -I/usr/local/include +#cgo windows LDFLAGS: -L/usr/local/lib -lzmq +#include +#if ZMQ_VERSION_MINOR < 2 +#include +#endif +#include +#include +#include "zmq4.h" + +int + zmq4_major = ZMQ_VERSION_MAJOR, + zmq4_minor = ZMQ_VERSION_MINOR, + zmq4_patch = ZMQ_VERSION_PATCH; + +#if ZMQ_VERSION_MINOR > 0 +// Version >= 4.1.x + +typedef struct { + uint16_t event; // id of the event as bitfield + int32_t value; // value is either error code, fd or reconnect interval +} zmq_event_t; + +#else +// Version == 4.0.x + +const char *zmq_msg_gets (zmq_msg_t *msg, const char *property) { + return NULL; +} + +int zmq_has (const char *capability) { + return 0; +} + +#if ZMQ_VERSION_PATCH < 5 +// Version < 4.0.5 + +int zmq_proxy_steerable (const void *frontend, const void *backend, const void *capture, const void *control) { + return -1; +} + +#endif // Version < 4.0.5 + +#endif // Version == 4.0.x + +void zmq4_get_event40(zmq_msg_t *msg, int *ev, int *val) { + zmq_event_t event; + const char* data = (char*)zmq_msg_data(msg); + memcpy(&(event.event), data, sizeof(event.event)); + memcpy(&(event.value), data+sizeof(event.event), sizeof(event.value)); + *ev = (int)(event.event); + *val = (int)(event.value); +} +void zmq4_get_event41(zmq_msg_t *msg, int *ev, int *val) { + uint8_t *data = (uint8_t *) zmq_msg_data (msg); + uint16_t event = *(uint16_t *) (data); + *ev = (int)event; + *val = (int)(*(uint32_t *) (data + 2)); +} +void *zmq4_memcpy(void *dest, const void *src, size_t n) { + return memcpy(dest, src, n); +} +*/ +import "C" + +import ( + "errors" + "fmt" + "runtime" + "strings" + "unsafe" +) + +var ( + defaultCtx *Context + + major, minor, patch int + + ErrorContextClosed = errors.New("Context is closed") + ErrorSocketClosed = errors.New("Socket is closed") + ErrorMoreExpected = errors.New("More expected") + ErrorNotImplemented405 = errors.New("Not implemented, requires 0MQ version 4.0.5") + ErrorNotImplemented41 = errors.New("Not implemented, requires 0MQ version 4.1") + ErrorNotImplemented42 = errors.New("Not implemented, requires 0MQ version 4.2") + ErrorNotImplementedWindows = errors.New("Not implemented on Windows") + ErrorNoSocket = errors.New("No such socket") + + initVersionError error + initContextError error +) + +func init() { + major, minor, patch = Version() + if major != 4 { + initVersionError = fmt.Errorf("Using zmq4 with ZeroMQ major version %d", major) + return + } + if major != int(C.zmq4_major) || minor != int(C.zmq4_minor) || patch != int(C.zmq4_patch) { + initVersionError = + fmt.Errorf( + "zmq4 was installed with ZeroMQ version %d.%d.%d, but the application links with version %d.%d.%d", + int(C.zmq4_major), int(C.zmq4_minor), int(C.zmq4_patch), + major, minor, patch) + return + } + + var err error + defaultCtx = &Context{} + defaultCtx.ctx, err = C.zmq_ctx_new() + if defaultCtx.ctx == nil || err != nil { + initContextError = fmt.Errorf("Init of ZeroMQ context failed: %v", errget(err)) + return + } + defaultCtx.opened = true +} + +//. Util + +// Report 0MQ library version. +func Version() (major, minor, patch int) { + if initVersionError != nil { + return 0, 0, 0 + } + var maj, min, pat C.int + C.zmq_version(&maj, &min, &pat) + return int(maj), int(min), int(pat) +} + +// Get 0MQ error message string. +func Error(e int) string { + return C.GoString(C.zmq_strerror(C.int(e))) +} + +//. Context + +const ( + MaxSocketsDflt = int(C.ZMQ_MAX_SOCKETS_DFLT) + IoThreadsDflt = int(C.ZMQ_IO_THREADS_DFLT) +) + +/* +A context that is not the default context. +*/ +type Context struct { + ctx unsafe.Pointer + opened bool + err error +} + +// Create a new context. +func NewContext() (ctx *Context, err error) { + if initVersionError != nil { + return nil, initVersionError + } + ctx = &Context{} + c, e := C.zmq_ctx_new() + if c == nil { + err = errget(e) + ctx.err = err + } else { + ctx.ctx = c + ctx.opened = true + runtime.SetFinalizer(ctx, (*Context).Term) + } + return +} + +/* +Terminates the default context. + +For linger behavior, see: http://api.zeromq.org/4-1:zmq-ctx-term +*/ +func Term() error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.Term() +} + +/* +Terminates the context. + +For linger behavior, see: http://api.zeromq.org/4-1:zmq-ctx-term +*/ +func (ctx *Context) Term() error { + if ctx.opened { + ctx.opened = false + n, err := C.zmq_ctx_term(ctx.ctx) + if n != 0 { + ctx.err = errget(err) + } + } + return ctx.err +} + +func getOption(ctx *Context, o C.int) (int, error) { + if !ctx.opened { + return 0, ErrorContextClosed + } + nc, err := C.zmq_ctx_get(ctx.ctx, o) + n := int(nc) + if n < 0 { + return n, errget(err) + } + return n, nil +} + +// Returns the size of the 0MQ thread pool in the default context. +func GetIoThreads() (int, error) { + if initVersionError != nil { + return 0, initVersionError + } + if initContextError != nil { + return 0, initContextError + } + return defaultCtx.GetIoThreads() +} + +// Returns the size of the 0MQ thread pool. +func (ctx *Context) GetIoThreads() (int, error) { + return getOption(ctx, C.ZMQ_IO_THREADS) +} + +// Returns the maximum number of sockets allowed in the default context. +func GetMaxSockets() (int, error) { + if initVersionError != nil { + return 0, initVersionError + } + if initContextError != nil { + return 0, initContextError + } + return defaultCtx.GetMaxSockets() +} + +// Returns the maximum number of sockets allowed. +func (ctx *Context) GetMaxSockets() (int, error) { + return getOption(ctx, C.ZMQ_MAX_SOCKETS) +} + +/* +Returns the maximum message size in the default context. + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func GetMaxMsgsz() (int, error) { + if initVersionError != nil { + return 0, initVersionError + } + if initContextError != nil { + return 0, initContextError + } + return defaultCtx.GetMaxMsgsz() +} + +/* +Returns the maximum message size. + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func (ctx *Context) GetMaxMsgsz() (int, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return getOption(ctx, C.ZMQ_MAX_MSGSZ) +} + +// Returns the IPv6 option in the default context. +func GetIpv6() (bool, error) { + if initVersionError != nil { + return false, initVersionError + } + if initContextError != nil { + return false, initContextError + } + return defaultCtx.GetIpv6() +} + +// Returns the IPv6 option. +func (ctx *Context) GetIpv6() (bool, error) { + i, e := getOption(ctx, C.ZMQ_IPV6) + if i == 0 { + return false, e + } + return true, e +} + +/* +Returns the blocky setting in the default context. + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func GetBlocky() (bool, error) { + if initVersionError != nil { + return false, initVersionError + } + if initContextError != nil { + return false, initContextError + } + return defaultCtx.GetBlocky() +} + +/* +Returns the blocky setting. + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func (ctx *Context) GetBlocky() (bool, error) { + if minor < 2 { + return false, ErrorNotImplemented42 + } + i, e := getOption(ctx, C.ZMQ_BLOCKY) + if i == 0 { + return false, e + } + return true, e +} + +func setOption(ctx *Context, o C.int, n int) error { + if !ctx.opened { + return ErrorContextClosed + } + i, err := C.zmq_ctx_set(ctx.ctx, o, C.int(n)) + if int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Specifies the size of the 0MQ thread pool to handle I/O operations in +the default context. If your application is using only the inproc +transport for messaging you may set this to zero, otherwise set it to at +least one. This option only applies before creating any sockets. + +Default value: 1 +*/ +func SetIoThreads(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetIoThreads(n) +} + +/* +Specifies the size of the 0MQ thread pool to handle I/O operations. If +your application is using only the inproc transport for messaging you +may set this to zero, otherwise set it to at least one. This option only +applies before creating any sockets. + +Default value: 1 +*/ +func (ctx *Context) SetIoThreads(n int) error { + return setOption(ctx, C.ZMQ_IO_THREADS, n) +} + +/* +Sets the scheduling policy for default context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func SetThreadSchedPolicy(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetThreadSchedPolicy(n) +} + +/* +Sets scheduling priority for default context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option depend on chosen scheduling policy. +Details can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func SetThreadPriority(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetThreadPriority(n) +} + +/* +Set maximum message size in the default context. + +Default value: INT_MAX + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func SetMaxMsgsz(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetMaxMsgsz(n) +} + +/* +Set maximum message size. + +Default value: INT_MAX + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func (ctx *Context) SetMaxMsgsz(n int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return setOption(ctx, C.ZMQ_MAX_MSGSZ, n) +} + +/* +Sets the maximum number of sockets allowed in the default context. + +Default value: 1024 +*/ +func SetMaxSockets(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetMaxSockets(n) +} + +/* +Sets the maximum number of sockets allowed. + +Default value: 1024 +*/ +func (ctx *Context) SetMaxSockets(n int) error { + return setOption(ctx, C.ZMQ_MAX_SOCKETS, n) +} + +/* +Sets the IPv6 value for all sockets created in the default context from this point onwards. +A value of true means IPv6 is enabled, while false means the socket will use only IPv4. +When IPv6 is enabled, a socket will connect to, or accept connections from, both IPv4 and IPv6 hosts. + +Default value: false +*/ +func SetIpv6(i bool) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetIpv6(i) +} + +/* +Sets the IPv6 value for all sockets created in the context from this point onwards. +A value of true means IPv6 is enabled, while false means the socket will use only IPv4. +When IPv6 is enabled, a socket will connect to, or accept connections from, both IPv4 and IPv6 hosts. + +Default value: false +*/ +func (ctx *Context) SetIpv6(i bool) error { + n := 0 + if i { + n = 1 + } + return setOption(ctx, C.ZMQ_IPV6, n) +} + +/* +Sets the blocky behavior in the default context. + +See: http://api.zeromq.org/4-2:zmq-ctx-set#toc3 + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func SetBlocky(i bool) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetBlocky(i) +} + +/* +Sets the blocky behavior. + +See: http://api.zeromq.org/4-2:zmq-ctx-set#toc3 + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func (ctx *Context) SetBlocky(i bool) error { + if minor < 2 { + return ErrorNotImplemented42 + } + n := 0 + if i { + n = 1 + } + return setOption(ctx, C.ZMQ_BLOCKY, n) +} + +//. Sockets + +// Specifies the type of a socket, used by NewSocket() +type Type int + +const ( + // Constants for NewSocket() + // See: http://api.zeromq.org/4-1:zmq-socket#toc3 + REQ = Type(C.ZMQ_REQ) + REP = Type(C.ZMQ_REP) + DEALER = Type(C.ZMQ_DEALER) + ROUTER = Type(C.ZMQ_ROUTER) + PUB = Type(C.ZMQ_PUB) + SUB = Type(C.ZMQ_SUB) + XPUB = Type(C.ZMQ_XPUB) + XSUB = Type(C.ZMQ_XSUB) + PUSH = Type(C.ZMQ_PUSH) + PULL = Type(C.ZMQ_PULL) + PAIR = Type(C.ZMQ_PAIR) + STREAM = Type(C.ZMQ_STREAM) +) + +/* +Socket type as string. +*/ +func (t Type) String() string { + switch t { + case REQ: + return "REQ" + case REP: + return "REP" + case DEALER: + return "DEALER" + case ROUTER: + return "ROUTER" + case PUB: + return "PUB" + case SUB: + return "SUB" + case XPUB: + return "XPUB" + case XSUB: + return "XSUB" + case PUSH: + return "PUSH" + case PULL: + return "PULL" + case PAIR: + return "PAIR" + case STREAM: + return "STREAM" + } + return "" +} + +// Used by (*Socket)Send() and (*Socket)Recv() +type Flag int + +const ( + // Flags for (*Socket)Send(), (*Socket)Recv() + // For Send, see: http://api.zeromq.org/4-1:zmq-send#toc2 + // For Recv, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + DONTWAIT = Flag(C.ZMQ_DONTWAIT) + SNDMORE = Flag(C.ZMQ_SNDMORE) +) + +/* +Socket flag as string. +*/ +func (f Flag) String() string { + ff := make([]string, 0) + if f&DONTWAIT != 0 { + ff = append(ff, "DONTWAIT") + } + if f&SNDMORE != 0 { + ff = append(ff, "SNDMORE") + } + if len(ff) == 0 { + return "" + } + return strings.Join(ff, "|") +} + +// Used by (*Socket)Monitor() and (*Socket)RecvEvent() +type Event int + +const ( + // Flags for (*Socket)Monitor() and (*Socket)RecvEvent() + // See: http://api.zeromq.org/4-1:zmq-socket-monitor#toc3 + EVENT_ALL = Event(C.ZMQ_EVENT_ALL) + EVENT_CONNECTED = Event(C.ZMQ_EVENT_CONNECTED) + EVENT_CONNECT_DELAYED = Event(C.ZMQ_EVENT_CONNECT_DELAYED) + EVENT_CONNECT_RETRIED = Event(C.ZMQ_EVENT_CONNECT_RETRIED) + EVENT_LISTENING = Event(C.ZMQ_EVENT_LISTENING) + EVENT_BIND_FAILED = Event(C.ZMQ_EVENT_BIND_FAILED) + EVENT_ACCEPTED = Event(C.ZMQ_EVENT_ACCEPTED) + EVENT_ACCEPT_FAILED = Event(C.ZMQ_EVENT_ACCEPT_FAILED) + EVENT_CLOSED = Event(C.ZMQ_EVENT_CLOSED) + EVENT_CLOSE_FAILED = Event(C.ZMQ_EVENT_CLOSE_FAILED) + EVENT_DISCONNECTED = Event(C.ZMQ_EVENT_DISCONNECTED) + EVENT_MONITOR_STOPPED = Event(C.ZMQ_EVENT_MONITOR_STOPPED) +) + +/* +Socket event as string. +*/ +func (e Event) String() string { + if e == EVENT_ALL { + return "EVENT_ALL" + } + ee := make([]string, 0) + if e&EVENT_CONNECTED != 0 { + ee = append(ee, "EVENT_CONNECTED") + } + if e&EVENT_CONNECT_DELAYED != 0 { + ee = append(ee, "EVENT_CONNECT_DELAYED") + } + if e&EVENT_CONNECT_RETRIED != 0 { + ee = append(ee, "EVENT_CONNECT_RETRIED") + } + if e&EVENT_LISTENING != 0 { + ee = append(ee, "EVENT_LISTENING") + } + if e&EVENT_BIND_FAILED != 0 { + ee = append(ee, "EVENT_BIND_FAILED") + } + if e&EVENT_ACCEPTED != 0 { + ee = append(ee, "EVENT_ACCEPTED") + } + if e&EVENT_ACCEPT_FAILED != 0 { + ee = append(ee, "EVENT_ACCEPT_FAILED") + } + if e&EVENT_CLOSED != 0 { + ee = append(ee, "EVENT_CLOSED") + } + if e&EVENT_CLOSE_FAILED != 0 { + ee = append(ee, "EVENT_CLOSE_FAILED") + } + if e&EVENT_DISCONNECTED != 0 { + ee = append(ee, "EVENT_DISCONNECTED") + } + if len(ee) == 0 { + return "" + } + return strings.Join(ee, "|") +} + +// Used by (soc *Socket)GetEvents() +type State int + +const ( + // Flags for (*Socket)GetEvents() + // See: http://api.zeromq.org/4-1:zmq-getsockopt#toc8 + POLLIN = State(C.ZMQ_POLLIN) + POLLOUT = State(C.ZMQ_POLLOUT) +) + +/* +Socket state as string. +*/ +func (s State) String() string { + ss := make([]string, 0) + if s&POLLIN != 0 { + ss = append(ss, "POLLIN") + } + if s&POLLOUT != 0 { + ss = append(ss, "POLLOUT") + } + if len(ss) == 0 { + return "" + } + return strings.Join(ss, "|") +} + +// Specifies the security mechanism, used by (*Socket)GetMechanism() +type Mechanism int + +const ( + // Constants for (*Socket)GetMechanism() + // See: http://api.zeromq.org/4-1:zmq-getsockopt#toc22 + NULL = Mechanism(C.ZMQ_NULL) + PLAIN = Mechanism(C.ZMQ_PLAIN) + CURVE = Mechanism(C.ZMQ_CURVE) + GSSAPI = Mechanism(C.ZMQ_GSSAPI) +) + +/* +Security mechanism as string. +*/ +func (m Mechanism) String() string { + switch m { + case NULL: + return "NULL" + case PLAIN: + return "PLAIN" + case CURVE: + return "CURVE" + case GSSAPI: + return "GSSAPI" + } + return "" +} + +/* +Socket functions starting with `Set` or `Get` are used for setting and +getting socket options. +*/ +type Socket struct { + soc unsafe.Pointer + ctx *Context + opened bool + err error +} + +/* +Socket as string. +*/ +func (soc Socket) String() string { + if !soc.opened { + return "Socket(CLOSED)" + } + t, err := soc.GetType() + if err != nil { + return fmt.Sprintf("Socket(%v)", err) + } + i, err := soc.GetIdentity() + if err == nil && i != "" { + return fmt.Sprintf("Socket(%v,%q)", t, i) + } + return fmt.Sprintf("Socket(%v,%p)", t, soc.soc) +} + +/* +Create 0MQ socket in the default context. + +WARNING: +The Socket is not thread safe. This means that you cannot access the same Socket +from different goroutines without using something like a mutex. + +For a description of socket types, see: http://api.zeromq.org/4-1:zmq-socket#toc3 +*/ +func NewSocket(t Type) (soc *Socket, err error) { + if initVersionError != nil { + return nil, initVersionError + } + if initContextError != nil { + return nil, initContextError + } + return defaultCtx.NewSocket(t) +} + +/* +Create 0MQ socket in the given context. + +WARNING: +The Socket is not thread safe. This means that you cannot access the same Socket +from different goroutines without using something like a mutex. + +For a description of socket types, see: http://api.zeromq.org/4-1:zmq-socket#toc3 +*/ +func (ctx *Context) NewSocket(t Type) (soc *Socket, err error) { + soc = &Socket{} + if !ctx.opened { + return soc, ErrorContextClosed + } + s, e := C.zmq_socket(ctx.ctx, C.int(t)) + if s == nil { + err = errget(e) + soc.err = err + } else { + soc.soc = s + soc.ctx = ctx + soc.opened = true + runtime.SetFinalizer(soc, (*Socket).Close) + } + return +} + +// If not called explicitly, the socket will be closed on garbage collection +func (soc *Socket) Close() error { + if soc.opened { + soc.opened = false + if i, err := C.zmq_close(soc.soc); int(i) != 0 { + soc.err = errget(err) + } + soc.soc = unsafe.Pointer(nil) + soc.ctx = nil + } + return soc.err +} + +// Return the context associated with a socket +func (soc *Socket) Context() (*Context, error) { + if !soc.opened { + return nil, ErrorSocketClosed + } + return soc.ctx, nil +} + +/* +Accept incoming connections on a socket. + +For a description of endpoint, see: http://api.zeromq.org/4-1:zmq-bind#toc2 +*/ +func (soc *Socket) Bind(endpoint string) error { + if !soc.opened { + return ErrorSocketClosed + } + s := C.CString(endpoint) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_bind(soc.soc, s); int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Stop accepting connections on a socket. + +For a description of endpoint, see: http://api.zeromq.org/4-1:zmq-bind#toc2 +*/ +func (soc *Socket) Unbind(endpoint string) error { + if !soc.opened { + return ErrorSocketClosed + } + s := C.CString(endpoint) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_unbind(soc.soc, s); int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Create outgoing connection from socket. + +For a description of endpoint, see: http://api.zeromq.org/4-1:zmq-connect#toc2 +*/ +func (soc *Socket) Connect(endpoint string) error { + if !soc.opened { + return ErrorSocketClosed + } + s := C.CString(endpoint) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_connect(soc.soc, s); int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Disconnect a socket. + +For a description of endpoint, see: http://api.zeromq.org/4-1:zmq-disconnect#toc2 +*/ +func (soc *Socket) Disconnect(endpoint string) error { + if !soc.opened { + return ErrorSocketClosed + } + s := C.CString(endpoint) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_disconnect(soc.soc, s); int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Receive a message part from a socket. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 +*/ +func (soc *Socket) Recv(flags Flag) (string, error) { + b, err := soc.RecvBytes(flags) + return string(b), err +} + +/* +Receive a message part from a socket. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 +*/ +func (soc *Socket) RecvBytes(flags Flag) ([]byte, error) { + if !soc.opened { + return []byte{}, ErrorSocketClosed + } + var msg C.zmq_msg_t + if i, err := C.zmq_msg_init(&msg); i != 0 { + return []byte{}, errget(err) + } + defer C.zmq_msg_close(&msg) + + size, err := C.zmq_msg_recv(&msg, soc.soc, C.int(flags)) + if size < 0 { + return []byte{}, errget(err) + } + if size == 0 { + return []byte{}, nil + } + data := make([]byte, int(size)) + C.zmq4_memcpy(unsafe.Pointer(&data[0]), C.zmq_msg_data(&msg), C.size_t(size)) + return data, nil +} + +/* +Send a message part on a socket. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-send#toc2 +*/ +func (soc *Socket) Send(data string, flags Flag) (int, error) { + return soc.SendBytes([]byte(data), flags) +} + +/* +Send a message part on a socket. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-send#toc2 +*/ +func (soc *Socket) SendBytes(data []byte, flags Flag) (int, error) { + if !soc.opened { + return 0, ErrorSocketClosed + } + d := data + if len(data) == 0 { + d = []byte{0} + } + size, err := C.zmq_send(soc.soc, unsafe.Pointer(&d[0]), C.size_t(len(data)), C.int(flags)) + if size < 0 { + return int(size), errget(err) + } + return int(size), nil +} + +/* +Register a monitoring callback. + +See: http://api.zeromq.org/4-1:zmq-socket-monitor#toc2 + +WARNING: Closing a context with a monitoring callback will lead to random crashes. +This is a bug in the ZeroMQ library. +The monitoring callback has the same context as the socket it was created for. + +Example: + + package main + + import ( + zmq "github.com/pebbe/zmq4" + "log" + "time" + ) + + func rep_socket_monitor(addr string) { + s, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + log.Fatalln(err) + } + err = s.Connect(addr) + if err != nil { + log.Fatalln(err) + } + for { + a, b, c, err := s.RecvEvent(0) + if err != nil { + log.Println(err) + break + } + log.Println(a, b, c) + } + s.Close() + } + + func main() { + + // REP socket + rep, err := zmq.NewSocket(zmq.REP) + if err != nil { + log.Fatalln(err) + } + + // REP socket monitor, all events + err = rep.Monitor("inproc://monitor.rep", zmq.EVENT_ALL) + if err != nil { + log.Fatalln(err) + } + go rep_socket_monitor("inproc://monitor.rep") + + // Generate an event + rep.Bind("tcp://*:5555") + if err != nil { + log.Fatalln(err) + } + + // Allow some time for event detection + time.Sleep(time.Second) + + rep.Close() + zmq.Term() + } +*/ +func (soc *Socket) Monitor(addr string, events Event) error { + if !soc.opened { + return ErrorSocketClosed + } + if addr == "" { + if i, err := C.zmq_socket_monitor(soc.soc, nil, C.int(events)); i != 0 { + return errget(err) + } + return nil + } + + s := C.CString(addr) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_socket_monitor(soc.soc, s, C.int(events)); i != 0 { + return errget(err) + } + return nil +} + +/* +Receive a message part from a socket interpreted as an event. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + +For a description of event_type, see: http://api.zeromq.org/4-1:zmq-socket-monitor#toc3 + +For an example, see: func (*Socket) Monitor +*/ +func (soc *Socket) RecvEvent(flags Flag) (event_type Event, addr string, value int, err error) { + if !soc.opened { + return EVENT_ALL, "", 0, ErrorSocketClosed + } + var msg C.zmq_msg_t + if i, e := C.zmq_msg_init(&msg); i != 0 { + err = errget(e) + return + } + defer C.zmq_msg_close(&msg) + size, e := C.zmq_msg_recv(&msg, soc.soc, C.int(flags)) + if size < 0 { + err = errget(e) + return + } + et := C.int(0) + val := C.int(0) + + if minor == 0 { + C.zmq4_get_event40(&msg, &et, &val) + } else { + C.zmq4_get_event41(&msg, &et, &val) + } + more, e := soc.GetRcvmore() + if e != nil { + err = errget(e) + return + } + if !more { + err = ErrorMoreExpected + return + } + addr, e = soc.Recv(flags) + if e != nil { + err = errget(e) + return + } + + event_type = Event(et) + value = int(val) + + return +} + +/* +Start built-in ØMQ proxy + +See: http://api.zeromq.org/4-1:zmq-proxy#toc2 +*/ +func Proxy(frontend, backend, capture *Socket) error { + if !(frontend.opened && backend.opened && (capture == nil || capture.opened)) { + return ErrorSocketClosed + } + var capt unsafe.Pointer + if capture != nil { + capt = capture.soc + } + _, err := C.zmq_proxy(frontend.soc, backend.soc, capt) + return errget(err) +} + +/* +Start built-in ØMQ proxy with PAUSE/RESUME/TERMINATE control flow + +Returns ErrorNotImplemented405 with ZeroMQ version < 4.0.5 + +See: http://api.zeromq.org/4-1:zmq-proxy-steerable#toc2 +*/ +func ProxySteerable(frontend, backend, capture, control *Socket) error { + if minor == 0 && patch < 5 { + return ErrorNotImplemented405 + } + if !(frontend.opened && backend.opened && (capture == nil || capture.opened) && (control == nil || control.opened)) { + return ErrorSocketClosed + } + var capt, ctrl unsafe.Pointer + if capture != nil { + capt = capture.soc + } + if control != nil { + ctrl = control.soc + } + i, err := C.zmq_proxy_steerable(frontend.soc, backend.soc, capt, ctrl) + if i < 0 { + return errget(err) + } + return nil +} + +//. CURVE + +/* +Encode a binary key as Z85 printable text + +See: http://api.zeromq.org/4-1:zmq-z85-encode +*/ +func Z85encode(data string) string { + if initVersionError != nil { + return initVersionError.Error() + } + l1 := len(data) + if l1%4 != 0 { + panic("Z85encode: Length of data not a multiple of 4") + } + d := []byte(data) + + l2 := 5 * l1 / 4 + dest := make([]byte, l2+1) + + C.zmq_z85_encode((*C.char)(unsafe.Pointer(&dest[0])), (*C.uint8_t)(&d[0]), C.size_t(l1)) + + return string(dest[:l2]) +} + +/* +Decode a binary key from Z85 printable text + +See: http://api.zeromq.org/4-1:zmq-z85-decode +*/ +func Z85decode(s string) string { + if initVersionError != nil { + return initVersionError.Error() + } + l1 := len(s) + if l1%5 != 0 { + panic("Z85decode: Length of Z85 string not a multiple of 5") + } + l2 := 4 * l1 / 5 + dest := make([]byte, l2) + cs := C.CString(s) + defer C.free(unsafe.Pointer(cs)) + C.zmq_z85_decode((*C.uint8_t)(&dest[0]), cs) + return string(dest) +} + +/* +Generate a new CURVE keypair + +See: http://api.zeromq.org/4-1:zmq-curve-keypair#toc2 +*/ +func NewCurveKeypair() (z85_public_key, z85_secret_key string, err error) { + if initVersionError != nil { + return "", "", initVersionError + } + var pubkey, seckey [41]byte + if i, err := C.zmq_curve_keypair((*C.char)(unsafe.Pointer(&pubkey[0])), (*C.char)(unsafe.Pointer(&seckey[0]))); i != 0 { + return "", "", errget(err) + } + return string(pubkey[:40]), string(seckey[:40]), nil +} + +/* +Receive a message part with metadata. + +This requires ZeroMQ version 4.1.0. Lower versions will return the message part without metadata. + +The returned metadata map contains only those properties that exist on the message. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + +For a description of metadata, see: http://api.zeromq.org/4-1:zmq-msg-gets#toc3 +*/ +func (soc *Socket) RecvWithMetadata(flags Flag, properties ...string) (msg string, metadata map[string]string, err error) { + b, p, err := soc.RecvBytesWithMetadata(flags, properties...) + return string(b), p, err +} + +/* +Receive a message part with metadata. + +This requires ZeroMQ version 4.1.0. Lower versions will return the message part without metadata. + +The returned metadata map contains only those properties that exist on the message. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + +For a description of metadata, see: http://api.zeromq.org/4-1:zmq-msg-gets#toc3 +*/ +func (soc *Socket) RecvBytesWithMetadata(flags Flag, properties ...string) (msg []byte, metadata map[string]string, err error) { + if !soc.opened { + return []byte{}, map[string]string{}, ErrorSocketClosed + } + + metadata = make(map[string]string) + + var m C.zmq_msg_t + if i, err := C.zmq_msg_init(&m); i != 0 { + return []byte{}, metadata, errget(err) + } + defer C.zmq_msg_close(&m) + + size, err := C.zmq_msg_recv(&m, soc.soc, C.int(flags)) + if size < 0 { + return []byte{}, metadata, errget(err) + } + + data := make([]byte, int(size)) + if size > 0 { + C.zmq4_memcpy(unsafe.Pointer(&data[0]), C.zmq_msg_data(&m), C.size_t(size)) + } + + if minor > 0 { + for _, p := range properties { + ps := C.CString(p) + s, err := C.zmq_msg_gets(&m, ps) + if err == nil { + metadata[p] = C.GoString(s) + } + C.free(unsafe.Pointer(ps)) + } + } + return data, metadata, nil +} + +func hasCap(s string) (value bool) { + if initVersionError != nil { + return false + } + if minor < 1 { + return false + } + cs := C.CString(s) + defer C.free(unsafe.Pointer(cs)) + return C.zmq_has(cs) != 0 +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the ipc:// protocol +func HasIpc() bool { + return hasCap("ipc") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the pgm:// protocol +func HasPgm() bool { + return hasCap("pgm") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the tipc:// protocol +func HasTipc() bool { + return hasCap("tipc") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the norm:// protocol +func HasNorm() bool { + return hasCap("norm") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the CURVE security mechanism +func HasCurve() bool { + return hasCap("curve") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the GSSAPI security mechanism +func HasGssapi() bool { + return hasCap("gssapi") +} diff --git a/vendor/github.com/pebbe/zmq4/zmq4.h b/vendor/github.com/pebbe/zmq4/zmq4.h new file mode 100644 index 0000000..ef4b523 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/zmq4.h @@ -0,0 +1,55 @@ +#if ZMQ_VERSION_MAJOR != 4 + +#error "You need ZeroMQ version 4 to build this" + +#endif + +#if ZMQ_VERSION_MINOR < 1 + +#define ZMQ_CONNECT_RID -1 +#define ZMQ_GSSAPI -1 +#define ZMQ_GSSAPI_PLAINTEXT -1 +#define ZMQ_GSSAPI_PRINCIPAL -1 +#define ZMQ_GSSAPI_SERVER -1 +#define ZMQ_GSSAPI_SERVICE_PRINCIPAL -1 +#define ZMQ_HANDSHAKE_IVL -1 +#define ZMQ_IPC_FILTER_GID -1 +#define ZMQ_IPC_FILTER_PID -1 +#define ZMQ_IPC_FILTER_UID -1 +#define ZMQ_ROUTER_HANDOVER -1 +#define ZMQ_SOCKS_PROXY -1 +#define ZMQ_THREAD_PRIORITY -1 +#define ZMQ_THREAD_SCHED_POLICY -1 +#define ZMQ_TOS -1 +#define ZMQ_XPUB_NODROP -1 + +#endif + +#if ZMQ_VERSION_MINOR < 2 + +#define ZMQ_MAX_MSGSZ -1 + +#define ZMQ_BLOCKY -1 +#define ZMQ_XPUB_MANUAL -1 +#define ZMQ_XPUB_WELCOME_MSG -1 +#define ZMQ_STREAM_NOTIFY -1 +#define ZMQ_INVERT_MATCHING -1 +#define ZMQ_HEARTBEAT_IVL -1 +#define ZMQ_HEARTBEAT_TTL -1 +#define ZMQ_HEARTBEAT_TIMEOUT -1 +#define ZMQ_XPUB_VERBOSER -1 +#define ZMQ_CONNECT_TIMEOUT -1 +#define ZMQ_TCP_MAXRT -1 +#define ZMQ_THREAD_SAFE -1 +#define ZMQ_MULTICAST_MAXTPDU -1 +#define ZMQ_VMCI_BUFFER_SIZE -1 +#define ZMQ_VMCI_BUFFER_MIN_SIZE -1 +#define ZMQ_VMCI_BUFFER_MAX_SIZE -1 +#define ZMQ_VMCI_CONNECT_TIMEOUT -1 +#define ZMQ_USE_FD -1 + +#define ZMQ_GROUP_MAX_LENGTH -1 + +#define ZMQ_POLLPRI -1 + +#endif diff --git a/vendor/github.com/pebbe/zmq4/zmq41_test.go b/vendor/github.com/pebbe/zmq4/zmq41_test.go new file mode 100644 index 0000000..1494172 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/zmq41_test.go @@ -0,0 +1,74 @@ +package zmq4_test + +import ( + zmq "github.com/pebbe/zmq4" + + "testing" +) + +func TestRemoteEndpoint(t *testing.T) { + + if _, minor, _ := zmq.Version(); minor < 1 { + t.Skip("RemoteEndpoint not avalable in ZeroMQ versions prior to 4.1.0") + } + + addr := "tcp://127.0.0.1:9560" + peer := "127.0.0.1" + + var rep, req *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{rep, req} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + rep, err := zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + req, err = zmq.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("NewSocket:", err) + } + + if err = rep.Bind(addr); err != nil { + t.Fatal("rep.Bind:", err) + } + if err = req.Connect(addr); err != nil { + t.Fatal("req.Connect:", err) + } + + tmp := "test" + if _, err = req.Send(tmp, 0); err != nil { + t.Fatal("req.Send:", err) + } + + // get message with peer address (remote endpoint) + msg, props, err := rep.RecvWithMetadata(0, "Peer-Address") + if err != nil { + t.Fatal("rep.RecvWithMetadata:", err) + return + } + if msg != tmp { + t.Errorf("rep.RecvWithMetadata: expected %q, got %q", tmp, msg) + } + + if p := props["Peer-Address"]; p != peer { + t.Errorf("rep.RecvWithMetadata: expected Peer-Address == %q, got %q", peer, p) + } + + err = rep.Close() + rep = nil + if err != nil { + t.Fatal("rep.Close:", err) + } + + err = req.Close() + req = nil + if err != nil { + t.Fatal("req.Close:", err) + } +} diff --git a/vendor/github.com/pebbe/zmq4/zmq4_test.go b/vendor/github.com/pebbe/zmq4/zmq4_test.go new file mode 100644 index 0000000..2058d4a --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/zmq4_test.go @@ -0,0 +1,2044 @@ +package zmq4_test + +import ( + zmq "github.com/pebbe/zmq4" + + "errors" + "fmt" + "runtime" + "strconv" + "testing" + "time" +) + +var ( + err32 = errors.New("rc != 32") +) + +func TestVersion(t *testing.T) { + major, _, _ := zmq.Version() + if major != 4 { + t.Errorf("Expected major version 4, got %d", major) + } +} + +func TestMultipleContexts(t *testing.T) { + + chQuit := make(chan interface{}) + chErr := make(chan error, 2) + needQuit := false + var sock1, sock2, serv1, serv2 *zmq.Socket + var serv_ctx1, serv_ctx2, ctx1, ctx2 *zmq.Context + var err error + + defer func() { + if needQuit { + chQuit <- true + chQuit <- true + <-chErr + <-chErr + } + for _, s := range []*zmq.Socket{sock1, sock2, serv1, serv2} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + for _, c := range []*zmq.Context{serv_ctx1, serv_ctx2, ctx1, ctx2} { + if c != nil { + c.Term() + } + } + }() + + addr1 := "tcp://127.0.0.1:9997" + addr2 := "tcp://127.0.0.1:9998" + + serv_ctx1, err = zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + serv1, err = serv_ctx1.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = serv1.Bind(addr1) + if err != nil { + t.Fatal("Bind:", err) + } + + serv_ctx2, err = zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + serv2, err = serv_ctx2.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = serv2.Bind(addr2) + if err != nil { + t.Fatal("Bind:", err) + } + + new_service := func(sock *zmq.Socket, addr string) { + socket_handler := func(state zmq.State) error { + msg, err := sock.RecvMessage(0) + if err != nil { + return err + } + _, err = sock.SendMessage(addr, msg) + return err + } + quit_handler := func(interface{}) error { + return errors.New("quit") + } + + reactor := zmq.NewReactor() + reactor.AddSocket(sock, zmq.POLLIN, socket_handler) + reactor.AddChannel(chQuit, 1, quit_handler) + err = reactor.Run(100 * time.Millisecond) + chErr <- err + } + + go new_service(serv1, addr1) + go new_service(serv2, addr2) + needQuit = true + + time.Sleep(time.Second) + + // default context + + sock1, err = zmq.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("NewSocket:", err) + } + sock2, err = zmq.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = sock1.Connect(addr1) + if err != nil { + t.Fatal("sock1.Connect:", err) + } + err = sock2.Connect(addr2) + if err != nil { + t.Fatal("sock2.Connect:", err) + } + _, err = sock1.SendMessage(addr1) + if err != nil { + t.Fatal("sock1.SendMessage:", err) + } + _, err = sock2.SendMessage(addr2) + if err != nil { + t.Fatal("sock2.SendMessage:", err) + } + msg, err := sock1.RecvMessage(0) + expected := []string{addr1, addr1} + if err != nil || !arrayEqual(msg, expected) { + t.Errorf("sock1.RecvMessage: expected %v %v, got %v %v", nil, expected, err, msg) + } + msg, err = sock2.RecvMessage(0) + expected = []string{addr2, addr2} + if err != nil || !arrayEqual(msg, expected) { + t.Errorf("sock2.RecvMessage: expected %v %v, got %v %v", nil, expected, err, msg) + } + err = sock1.Close() + sock1 = nil + if err != nil { + t.Fatal("sock1.Close:", err) + } + err = sock2.Close() + sock2 = nil + if err != nil { + t.Fatal("sock2.Close:", err) + } + + // non-default contexts + + ctx1, err = zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + ctx2, err = zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + sock1, err = ctx1.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("ctx1.NewSocket:", err) + } + sock2, err = ctx2.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("ctx2.NewSocket:", err) + } + err = sock1.Connect(addr1) + if err != nil { + t.Fatal("sock1.Connect:", err) + } + err = sock2.Connect(addr2) + if err != nil { + t.Fatal("sock2.Connect:", err) + } + _, err = sock1.SendMessage(addr1) + if err != nil { + t.Fatal("sock1.SendMessage:", err) + } + _, err = sock2.SendMessage(addr2) + if err != nil { + t.Fatal("sock2.SendMessage:", err) + } + msg, err = sock1.RecvMessage(0) + expected = []string{addr1, addr1} + if err != nil || !arrayEqual(msg, expected) { + t.Errorf("sock1.RecvMessage: expected %v %v, got %v %v", nil, expected, err, msg) + } + msg, err = sock2.RecvMessage(0) + expected = []string{addr2, addr2} + if err != nil || !arrayEqual(msg, expected) { + t.Errorf("sock2.RecvMessage: expected %v %v, got %v %v", nil, expected, err, msg) + } + err = sock1.Close() + sock1 = nil + if err != nil { + t.Fatal("sock1.Close:", err) + } + err = sock2.Close() + sock2 = nil + if err != nil { + t.Fatal("sock2.Close:", err) + } + + err = ctx1.Term() + ctx1 = nil + if err != nil { + t.Fatal("ctx1.Term", nil) + } + err = ctx2.Term() + ctx1 = nil + if err != nil { + t.Fatal("ctx2.Term", nil) + } + + needQuit = false + for i := 0; i < 2; i++ { + // close(chQuit) doesn't work because the reactor removes closed channels, instead of acting on them + chQuit <- true + err = <-chErr + if err.Error() != "quit" { + t.Errorf("Expected error value quit, got %v", err) + } + } +} + +func TestAbstractIpc(t *testing.T) { + + var sb, sc *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{sb, sc} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + addr := "ipc://@/tmp/tester" + + // This is Linux only + if runtime.GOOS != "linux" { + t.Skip("Only on Linux") + } + + sb, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sb.Bind(addr) + if err != nil { + t.Fatal("sb.Bind:", err) + } + + endpoint, err := sb.GetLastEndpoint() + expected := "ipc://@/tmp/tester" + if endpoint != expected || err != nil { + t.Fatalf("sb.GetLastEndpoint: expected 'nil' %q, got '%v' %q", expected, err, endpoint) + return + } + + sc, err = zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = sc.Connect(addr) + if err != nil { + t.Fatal("sc.Bind:", err) + } + + resp, err := bounce(sb, sc) + if err != nil { + t.Error(resp, err) + } + + err = sc.Close() + sc = nil + if err != nil { + t.Fatal("sc.Close:", err) + } + + err = sb.Close() + sb = nil + if err != nil { + t.Fatal("sb.Close:", err) + } +} + +func TestConflate(t *testing.T) { + + var s_in, s_out *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{s_in, s_out} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + bind_to := "tcp://127.0.0.1:5555" + + err := zmq.SetIoThreads(1) + if err != nil { + t.Fatal("SetIoThreads(1):", err) + } + + s_in, err = zmq.NewSocket(zmq.PULL) + if err != nil { + t.Fatal("NewSocket 1:", err) + } + + err = s_in.SetConflate(true) + if err != nil { + t.Fatal("SetConflate(true):", err) + } + + err = s_in.Bind(bind_to) + if err != nil { + t.Fatal("s_in.Bind:", err) + } + + s_out, err = zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Fatal("NewSocket 2:", err) + } + + err = s_out.Connect(bind_to) + if err != nil { + t.Fatal("s_out.Connect:", err) + } + + message_count := 20 + + for j := 0; j < message_count; j++ { + _, err = s_out.Send(fmt.Sprint(j), 0) + if err != nil { + t.Fatalf("s_out.Send %d: %v", j, err) + } + } + + time.Sleep(time.Second) + + payload_recved, err := s_in.Recv(0) + if err != nil { + t.Error("s_in.Recv:", err) + } else { + i, err := strconv.Atoi(payload_recved) + if err != nil { + t.Error("strconv.Atoi:", err) + } + if i != message_count-1 { + t.Error("payload_recved != message_count - 1") + } + } + + err = s_in.Close() + s_in = nil + if err != nil { + t.Error("s_in.Close:", err) + } + + err = s_out.Close() + s_out = nil + if err != nil { + t.Error("s_out.Close:", err) + } +} + +func TestConnectResolve(t *testing.T) { + + sock, err := zmq.NewSocket(zmq.PUB) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer func() { + if sock != nil { + sock.SetLinger(0) + sock.Close() + } + }() + + err = sock.Connect("tcp://localhost:1234") + if err != nil { + t.Error("sock.Connect:", err) + } + + fails := []string{ + "tcp://localhost:invalid", + "tcp://in val id:1234", + "invalid://localhost:1234", + } + for _, fail := range fails { + if err = sock.Connect(fail); err == nil { + t.Errorf("Connect %s, expected fail, got success", fail) + } + } + + err = sock.Close() + sock = nil + if err != nil { + t.Error("sock.Close:", err) + } +} + +func TestCtxOptions(t *testing.T) { + + type Result struct { + value interface{} + err error + } + + i, err := zmq.GetMaxSockets() + if err != nil { + t.Error("GetMaxSockets:", err) + } + if i != zmq.MaxSocketsDflt { + t.Errorf("MaxSockets != MaxSocketsDflt: %d != %d", i, zmq.MaxSocketsDflt) + } + + i, err = zmq.GetIoThreads() + if err != nil { + t.Error("GetIoThreads:", err) + } + if i != zmq.IoThreadsDflt { + t.Errorf("IoThreads != IoThreadsDflt: %d != %d", i, zmq.IoThreadsDflt) + } + + b, err := zmq.GetIpv6() + if b != false || err != nil { + t.Errorf("GetIpv6 1: expected false , got %v %v", b, err) + } + + zmq.SetIpv6(true) + defer zmq.SetIpv6(false) + b, err = zmq.GetIpv6() + if b != true || err != nil { + t.Errorf("GetIpv6 2: expected true , got %v %v", b, err) + } + + router, _ := zmq.NewSocket(zmq.ROUTER) + b, err = router.GetIpv6() + if b != true || err != nil { + t.Errorf("GetIpv6 3: expected true , got %v %v", b, err) + } + router.Close() +} + +func TestDisconnectInproc(t *testing.T) { + + var pubSocket, subSocket *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{pubSocket, subSocket} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + publicationsReceived := 0 + isSubscribed := false + + pubSocket, err := zmq.NewSocket(zmq.XPUB) + if err != nil { + t.Fatal("NewSocket XPUB:", err) + } + subSocket, err = zmq.NewSocket(zmq.SUB) + if err != nil { + t.Fatal("NewSocket SUB:", err) + } + err = subSocket.SetSubscribe("foo") + if err != nil { + t.Fatal("subSocket.SetSubscribe:", err) + } + + err = pubSocket.Bind("inproc://someInProcDescriptor") + if err != nil { + t.Fatal("pubSocket.Bind:", err) + } + + iteration := 0 + + poller := zmq.NewPoller() + poller.Add(subSocket, zmq.POLLIN) // read publications + poller.Add(pubSocket, zmq.POLLIN) // read subscriptions + for { + sockets, err := poller.Poll(100 * time.Millisecond) + if err != nil { + t.Error("Poll:", err) + break // Interrupted + } + + for _, socket := range sockets { + if socket.Socket == pubSocket { + for { + buffer, err := pubSocket.Recv(0) + if err != nil { + t.Fatal("pubSocket.Recv", err) + } + exp := "\x01foo" + if isSubscribed { + exp = "\x00foo" + } + if buffer != exp { + t.Errorf("pubSocket.Recv: expected %q, got %q", exp, buffer) + } + + if buffer[0] == 0 { + if isSubscribed != true { + t.Errorf("Poller: expected subscribed") + } + isSubscribed = false + } else { + if isSubscribed != false { + t.Errorf("Poller: expected not subscribed") + } + isSubscribed = true + } + + more, err := pubSocket.GetRcvmore() + if err != nil { + t.Fatal("pubSocket.GetRcvmore:", err) + } + if !more { + break // Last message part + } + } + break + } + } + + for _, socket := range sockets { + if socket.Socket == subSocket { + for _, exp := range []string{"foo", "this is foo!", "", ""} { + msg, err := subSocket.Recv(0) + if err != nil { + t.Fatal("subSocket.Recv:", err) + } + if msg != exp { + t.Errorf("subSocket.Recv: expected %q, got %q", exp, msg) + } + more, err := subSocket.GetRcvmore() + if err != nil { + t.Fatal("subSocket.GetRcvmore:", err) + } + if !more { + publicationsReceived++ + break // Last message part + } + + } + break + } + } + + if iteration == 1 { + err := subSocket.Connect("inproc://someInProcDescriptor") + if err != nil { + t.Fatal("subSocket.Connect", err) + } + } + if iteration == 4 { + err := subSocket.Disconnect("inproc://someInProcDescriptor") + if err != nil { + t.Fatal("subSocket.Disconnect", err) + } + } + if iteration > 4 && len(sockets) == 0 { + break + } + + _, err = pubSocket.Send("foo", zmq.SNDMORE) + if err != nil { + t.Fatal("pubSocket.Send 1", err) + } + _, err = pubSocket.Send("this is foo!", 0) + if err != nil { + t.Fatal("pubSocket.Send 2", err) + } + + iteration++ + + } + + if publicationsReceived != 3 { + t.Error("publicationsReceived != 3 ") + } + if isSubscribed { + t.Error("isSubscribed") + } + + err = pubSocket.Close() + pubSocket = nil + if err != nil { + t.Error("pubSocket.Close:", err) + } + err = subSocket.Close() + subSocket = nil + if err != nil { + t.Error("subSocket.Close:", err) + } +} + +func TestFork(t *testing.T) { + + address := "tcp://127.0.0.1:6571" + NUM_MESSAGES := 5 + + // Create and bind pull socket to receive messages + pull, err := zmq.NewSocket(zmq.PULL) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer func() { + if pull != nil { + pull.SetLinger(0) + pull.Close() + } + }() + err = pull.Bind(address) + if err != nil { + t.Fatal("pull.Bind:", err) + } + + ready := make(chan bool) + + go func() { + defer func() { + close(ready) + }() + + // Create new socket, connect and send some messages + + push, err := zmq.NewSocket(zmq.PUSH) + //err = fmt.Errorf("DUMMY ERROR") + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := push.Close() + if err != nil { + t.Error("push.Close:", err) + } + }() + + err = push.Connect(address) + if err != nil { + t.Error("push.Connect:", err) + return + } + + for count := 0; count < NUM_MESSAGES; count++ { + ready <- true + _, err = push.Send("Hello", 0) + if err != nil { + t.Error("push.Send:", err) + return + } + } + + }() + + for { + if r := <-ready; !r { + break + } + msg, err := pull.Recv(0) + if err != nil { + t.Error("pull.Recv:", err) + } + if msg != "Hello" { + t.Errorf("pull.Recv: expected \"Hello\", got %q", msg) + } + } + + err = pull.Close() + pull = nil + if err != nil { + t.Error("pull.Close", err) + } + + <-ready // false +} + +func TestHwm(t *testing.T) { + + MAX_SENDS := 10000 + BIND_FIRST := 1 + CONNECT_FIRST := 2 + + test_defaults := func() (result int) { + + result = -1 + + // Set up bind socket + bind_socket, err := zmq.NewSocket(zmq.PULL) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := bind_socket.Close() + if err != nil { + t.Error("bind_socket.Close:", err) + } + }() + + err = bind_socket.Bind("inproc://a") + if err != nil { + t.Error("bind_socket.Bind:", err) + return + } + + // Set up connect socket + connect_socket, err := zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := connect_socket.Close() + if err != nil { + t.Error("connect_socket.Close:", err) + } + }() + + err = connect_socket.Connect("inproc://a") + if err != nil { + t.Error("connect_socket.Connect:", err) + return + } + + // Send until we block + send_count := 0 + for send_count < MAX_SENDS { + _, err := connect_socket.Send("", zmq.DONTWAIT) + if err != nil { + break + } + send_count++ + } + + // Now receive all sent messages + recv_count := 0 + for { + _, err := bind_socket.Recv(zmq.DONTWAIT) + if err != nil { + break + } + recv_count++ + } + if send_count != recv_count { + t.Error("test_defaults: send_count == recv_count") + } + + return send_count + } + + count_msg := func(send_hwm, recv_hwm, testType int) (result int) { + + result = -1 + + var bind_socket, connect_socket *zmq.Socket + var err error + + if testType == BIND_FIRST { + // Set up bind socket + bind_socket, err = zmq.NewSocket(zmq.PULL) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := bind_socket.Close() + if err != nil { + t.Error("bind_socket.Close:", err) + } + }() + + err = bind_socket.SetRcvhwm(recv_hwm) + if err != nil { + t.Error("bind_socket.SetRcvhwm:", err) + return + } + + err = bind_socket.Bind("inproc://a") + if err != nil { + t.Error("bind_socket.Bind:", err) + return + } + + // Set up connect socket + connect_socket, err = zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := connect_socket.Close() + if err != nil { + t.Error(err) + } + }() + + err = connect_socket.SetSndhwm(send_hwm) + if err != nil { + t.Error("connect_socket.SetSndhwm:", err) + return + } + + err = connect_socket.Connect("inproc://a") + if err != nil { + t.Error("connect_socket.Connect:", err) + return + } + } else { + // Set up connect socket + connect_socket, err = zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := connect_socket.Close() + if err != nil { + t.Error("connect_socket.Close:", err) + } + }() + + err = connect_socket.SetSndhwm(send_hwm) + if err != nil { + t.Error("connect_socket.SetSndhwm:", err) + return + } + + err = connect_socket.Connect("inproc://a") + if err != nil { + t.Error("connect_socket.Connect:", err) + return + } + + // Set up bind socket + bind_socket, err = zmq.NewSocket(zmq.PULL) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := bind_socket.Close() + if err != nil { + t.Error("bind_socket.Close:", err) + } + }() + + err = bind_socket.SetRcvhwm(recv_hwm) + if err != nil { + t.Error("bind_socket.SetRcvhwm:", err) + return + } + + err = bind_socket.Bind("inproc://a") + if err != nil { + t.Error("bind_socket.Bind:", err) + return + } + } + + // Send until we block + send_count := 0 + for send_count < MAX_SENDS { + _, err := connect_socket.Send("", zmq.DONTWAIT) + if err != nil { + break + } + send_count++ + } + + // Now receive all sent messages + recv_count := 0 + for { + _, err := bind_socket.Recv(zmq.DONTWAIT) + if err != nil { + break + } + recv_count++ + } + if send_count != recv_count { + t.Error("count_msg: send_count != recv_count") + } + + // Now it should be possible to send one more. + _, err = connect_socket.Send("", 0) + if err != nil { + t.Error("connect_socket.Send:", err) + return + } + + // Consume the remaining message. + _, err = bind_socket.Recv(0) + if err != nil { + t.Error("bind_socket.Recv:", err) + } + + return send_count + } + + test_inproc_bind_first := func(send_hwm, recv_hwm int) int { + return count_msg(send_hwm, recv_hwm, BIND_FIRST) + } + + test_inproc_connect_first := func(send_hwm, recv_hwm int) int { + return count_msg(send_hwm, recv_hwm, CONNECT_FIRST) + } + + test_inproc_connect_and_close_first := func(send_hwm, recv_hwm int) (result int) { + + result = -1 + + // Set up connect socket + connect_socket, err := zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + if connect_socket != nil { + connect_socket.Close() + } + }() + + err = connect_socket.SetSndhwm(send_hwm) + if err != nil { + t.Error("connect_socket.SetSndhwm:", err) + return + } + + err = connect_socket.Connect("inproc://a") + if err != nil { + t.Error("connect_socket.Connect:", err) + return + } + + // Send until we block + send_count := 0 + for send_count < MAX_SENDS { + _, err := connect_socket.Send("", zmq.DONTWAIT) + if err != nil { + break + } + send_count++ + } + + // Close connect + err = connect_socket.Close() + connect_socket = nil + if err != nil { + t.Error("connect_socket.Close:", err) + return + } + + // Set up bind socket + bind_socket, err := zmq.NewSocket(zmq.PULL) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := bind_socket.Close() + if err != nil { + t.Error("bind_socket.Close:", err) + } + }() + + err = bind_socket.SetRcvhwm(recv_hwm) + if err != nil { + t.Error("bind_socket.SetRcvhwm:", err) + return + } + + err = bind_socket.Bind("inproc://a") + if err != nil { + t.Error("bind_socket.Bind:", err) + return + } + + // Now receive all sent messages + recv_count := 0 + for { + _, err := bind_socket.Recv(zmq.DONTWAIT) + if err != nil { + break + } + recv_count++ + } + if send_count != recv_count { + t.Error("test_inproc_connect_and_close_first: send_count != recv_count") + } + return send_count + } + + // Default values are 1000 on send and 1000 one receive, so 2000 total + if count := test_defaults(); count != 2000 { + t.Errorf("test_defaults: expected 2000, got %d", count) + } + time.Sleep(100 * time.Millisecond) + + // Infinite send and receive buffer + if count := test_inproc_bind_first(0, 0); count != MAX_SENDS { + t.Errorf("test_inproc_bind_first(0, 0): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + if count := test_inproc_connect_first(0, 0); count != MAX_SENDS { + t.Errorf("test_inproc_connect_first(0, 0): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + + // Infinite send buffer + if count := test_inproc_bind_first(1, 0); count != MAX_SENDS { + t.Errorf("test_inproc_bind_first(1, 0): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + if count := test_inproc_connect_first(1, 0); count != MAX_SENDS { + t.Errorf("test_inproc_connect_first(1, 0): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + + // Infinite receive buffer + if count := test_inproc_bind_first(0, 1); count != MAX_SENDS { + t.Errorf("test_inproc_bind_first(0, 1): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + if count := test_inproc_connect_first(0, 1); count != MAX_SENDS { + t.Errorf("test_inproc_connect_first(0, 1): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + + // Send and recv buffers hwm 1, so total that can be queued is 2 + if count := test_inproc_bind_first(1, 1); count != 2 { + t.Errorf("test_inproc_bind_first(1, 1): expected 2, got %d", count) + } + time.Sleep(100 * time.Millisecond) + if count := test_inproc_connect_first(1, 1); count != 2 { + t.Errorf("test_inproc_connect_first(1, 1): expected 2, got %d", count) + } + time.Sleep(100 * time.Millisecond) + + // Send hwm of 1, send before bind so total that can be queued is 1 + if count := test_inproc_connect_and_close_first(1, 0); count != 1 { + t.Errorf("test_inproc_connect_and_close_first(1, 0): expected 1, got %d", count) + } + time.Sleep(100 * time.Millisecond) +} + +func TestPairIpc(t *testing.T) { + + var sb, sc *zmq.Socket + + defer func() { + for _, s := range []*zmq.Socket{sb, sc} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + sb, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sb.Bind("ipc:///tmp/tester") + if err != nil { + t.Fatal("sb.Bind:", err) + } + + sc, err = zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sc.Connect("ipc:///tmp/tester") + if err != nil { + t.Fatal("sc.Connect:", err) + } + + msg, err := bounce(sb, sc) + if err != nil { + t.Error(msg, err) + } + + err = sc.Close() + sc = nil + if err != nil { + t.Error("sc.Close:", err) + } + + err = sb.Close() + sb = nil + if err != nil { + t.Error("sb.Close:", err) + } +} + +func TestPairTcp(t *testing.T) { + + var sb, sc *zmq.Socket + + defer func() { + for _, s := range []*zmq.Socket{sb, sc} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + sb, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sb.Bind("tcp://127.0.0.1:9736") + if err != nil { + t.Fatal("sb.Bind:", err) + } + + sc, err = zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sc.Connect("tcp://127.0.0.1:9736") + if err != nil { + t.Fatal("sc.Connect:", err) + } + + msg, err := bounce(sb, sc) + + if err != nil { + t.Error(msg, err) + } + + err = sc.Close() + sc = nil + if err != nil { + t.Error("sc.Close:", err) + } + + err = sb.Close() + sb = nil + if err != nil { + t.Error("sb.Close:", err) + } +} + +func TestPoller(t *testing.T) { + + var sb, sc *zmq.Socket + + defer func() { + for _, s := range []*zmq.Socket{sb, sc} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + sb, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sb.Bind("tcp://127.0.0.1:9737") + if err != nil { + t.Fatal("sb.Bind:", err) + } + + sc, err = zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sc.Connect("tcp://127.0.0.1:9737") + if err != nil { + t.Fatal("sc.Connect:", err) + } + + poller := zmq.NewPoller() + idxb := poller.Add(sb, 0) + idxc := poller.Add(sc, 0) + if idxb != 0 || idxc != 1 { + t.Errorf("idxb=%d idxc=%d", idxb, idxc) + } + + if pa, err := poller.PollAll(100 * time.Millisecond); err != nil { + t.Error("PollAll 1:", err) + } else if len(pa) != 2 { + t.Errorf("PollAll 1 len = %d", len(pa)) + } else if pa[0].Events != 0 || pa[1].Events != 0 { + t.Errorf("PollAll 1 events = %v, %v", pa[0], pa[1]) + } + + poller.Update(idxb, zmq.POLLOUT) + poller.UpdateBySocket(sc, zmq.POLLIN) + + if pa, err := poller.PollAll(100 * time.Millisecond); err != nil { + t.Error("PollAll 2:", err) + } else if len(pa) != 2 { + t.Errorf("PollAll 2 len = %d", len(pa)) + } else if pa[0].Events != zmq.POLLOUT || pa[1].Events != 0 { + t.Errorf("PollAll 2 events = %v, %v", pa[0], pa[1]) + } + + poller.UpdateBySocket(sb, 0) + + content := "12345678ABCDEFGH12345678ABCDEFGH" + + // Send message from client to server + if rc, err := sb.Send(content, zmq.DONTWAIT); err != nil { + t.Error("sb.Send DONTWAIT:", err) + } else if rc != 32 { + t.Error("sb.Send DONTWAIT:", err32) + } + + if pa, err := poller.PollAll(100 * time.Millisecond); err != nil { + t.Error("PollAll 3:", err) + } else if len(pa) != 2 { + t.Errorf("PollAll 3 len = %d", len(pa)) + } else if pa[0].Events != 0 || pa[1].Events != zmq.POLLIN { + t.Errorf("PollAll 3 events = %v, %v", pa[0], pa[1]) + } + + // Receive message + if msg, err := sc.Recv(zmq.DONTWAIT); err != nil { + t.Error("sb.Recv DONTWAIT:", err) + } else if msg != content { + t.Error("sb.Recv msg != content") + } + + poller.UpdateBySocket(sb, zmq.POLLOUT) + poller.Update(idxc, zmq.POLLIN) + + if pa, err := poller.PollAll(100 * time.Millisecond); err != nil { + t.Error("PollAll 4:", err) + } else if len(pa) != 2 { + t.Errorf("PollAll 4 len = %d", len(pa)) + } else if pa[0].Events != zmq.POLLOUT || pa[1].Events != 0 { + t.Errorf("PollAll 4 events = %v, %v", pa[0], pa[1]) + } + + err = sc.Close() + sc = nil + if err != nil { + t.Error("sc.Close:", err) + } + + err = sb.Close() + sb = nil + if err != nil { + t.Error("sb.Close:", err) + } +} + +func TestSecurityCurve(t *testing.T) { + + time.Sleep(100 * time.Millisecond) + + var handler, server, client *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{handler} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + if _, minor, _ := zmq.Version(); minor >= 1 && !zmq.HasCurve() { + t.Skip("Curve not available") + } + + // Generate new keypairs for this test + client_public, client_secret, err := zmq.NewCurveKeypair() + if err != nil { + t.Fatal("NewCurveKeypair:", err) + } + server_public, server_secret, err := zmq.NewCurveKeypair() + if err != nil { + t.Fatal("NewCurveKeypair:", err) + } + + handler, err = zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = handler.Bind("inproc://zeromq.zap.01") + if err != nil { + t.Fatal("handler.Bind:", err) + } + + doHandler := func(state zmq.State) error { + msg, err := handler.RecvMessage(0) + if err != nil { + return err // Terminating + } + version := msg[0] + sequence := msg[1] + // domain := msg[2] + // address := msg[3] + identity := msg[4] + mechanism := msg[5] + client_key := msg[6] + client_key_text := zmq.Z85encode(client_key) + + if version != "1.0" { + return errors.New("version != 1.0") + } + if mechanism != "CURVE" { + return errors.New("mechanism != CURVE") + } + if identity != "IDENT" { + return errors.New("identity != IDENT") + } + + if client_key_text == client_public { + handler.SendMessage(version, sequence, "200", "OK", "anonymous", "") + } else { + handler.SendMessage(version, sequence, "400", "Invalid client public key", "", "") + } + return nil + } + + doQuit := func(i interface{}) error { + err := handler.Close() + handler = nil + if err != nil { + t.Error("handler.Close:", err) + } + return errors.New("Quit") + } + quit := make(chan interface{}) + + reactor := zmq.NewReactor() + reactor.AddSocket(handler, zmq.POLLIN, doHandler) + reactor.AddChannel(quit, 0, doQuit) + go func() { + reactor.Run(100 * time.Millisecond) + quit <- true + }() + defer func() { + quit <- true + <-quit + close(quit) + }() + + // Server socket will accept connections + server, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = server.SetCurveServer(1) + if err != nil { + t.Fatal("server.SetCurveServer(1):", err) + } + err = server.SetCurveSecretkey(server_secret) + if err != nil { + t.Fatal("server.SetCurveSecretkey:", err) + } + err = server.SetIdentity("IDENT") + if err != nil { + t.Fatal("server.SetIdentity:", err) + } + server.Bind("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("server.Bind:", err) + } + + err = server.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("server.SetRcvtimeo:", err) + } + + // Check CURVE security with valid credentials + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(server_public) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(client_public) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(client_secret) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + msg, err := bounce(server, client) + if err != nil { + t.Error(msg, err) + } + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + time.Sleep(100 * time.Millisecond) + + // Check CURVE security with a garbage server key + // This will be caught by the curve_server class, not passed to ZAP + garbage_key := "0000111122223333444455556666777788889999" + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(garbage_key) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(client_public) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(client_secret) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + time.Sleep(100 * time.Millisecond) + + // Check CURVE security with a garbage client secret key + // This will be caught by the curve_server class, not passed to ZAP + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(server_public) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(garbage_key) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(client_secret) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + time.Sleep(100 * time.Millisecond) + + // Check CURVE security with a garbage client secret key + // This will be caught by the curve_server class, not passed to ZAP + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(server_public) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(client_public) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(garbage_key) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + time.Sleep(100 * time.Millisecond) + + // Check CURVE security with bogus client credentials + // This must be caught by the ZAP handler + + bogus_public, bogus_secret, _ := zmq.NewCurveKeypair() + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(server_public) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(bogus_public) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(bogus_secret) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + // Shutdown + err = server.Close() + server = nil + if err != nil { + t.Error("server.Close:", err) + } +} + +func TestSecurityNull(t *testing.T) { + + time.Sleep(100 * time.Millisecond) + + var handler, server, client *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{handler} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + handler, err := zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = handler.Bind("inproc://zeromq.zap.01") + if err != nil { + t.Fatal("handler.Bind:", err) + } + + doHandler := func(state zmq.State) error { + msg, err := handler.RecvMessage(0) + if err != nil { + return err // Terminating + } + version := msg[0] + sequence := msg[1] + domain := msg[2] + // address := msg[3] + // identity := msg[4] + mechanism := msg[5] + + if version != "1.0" { + return errors.New("version != 1.0") + } + if mechanism != "NULL" { + return errors.New("mechanism != NULL") + } + + if domain == "TEST" { + handler.SendMessage(version, sequence, "200", "OK", "anonymous", "") + } else { + handler.SendMessage(version, sequence, "400", "BAD DOMAIN", "", "") + } + return nil + } + + doQuit := func(i interface{}) error { + err := handler.Close() + handler = nil + if err != nil { + t.Error("handler.Close:", err) + } + return errors.New("Quit") + } + quit := make(chan interface{}) + + reactor := zmq.NewReactor() + reactor.AddSocket(handler, zmq.POLLIN, doHandler) + reactor.AddChannel(quit, 0, doQuit) + go func() { + reactor.Run(100 * time.Millisecond) + quit <- true + }() + defer func() { + quit <- true + <-quit + close(quit) + }() + + // We bounce between a binding server and a connecting client + server, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + + // We first test client/server with no ZAP domain + // Libzmq does not call our ZAP handler, the connect must succeed + err = server.Bind("tcp://127.0.0.1:9683") + if err != nil { + t.Fatal("server.Bind:", err) + } + err = client.Connect("tcp://127.0.0.1:9683") + if err != nil { + t.Fatal("client.Connect:", err) + } + msg, err := bounce(server, client) + if err != nil { + t.Error(msg, err) + } + server.Unbind("tcp://127.0.0.1:9683") + client.Disconnect("tcp://127.0.0.1:9683") + + // Now define a ZAP domain for the server; this enables + // authentication. We're using the wrong domain so this test + // must fail. + err = server.SetZapDomain("WRONG") + if err != nil { + t.Fatal("server.SetZapDomain:", err) + } + err = server.Bind("tcp://127.0.0.1:9687") + if err != nil { + t.Fatal("server.Bind:", err) + } + err = client.Connect("tcp://127.0.0.1:9687") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + err = server.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("server.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + server.Unbind("tcp://127.0.0.1:9687") + client.Disconnect("tcp://127.0.0.1:9687") + + // Now use the right domain, the test must pass + err = server.SetZapDomain("TEST") + if err != nil { + t.Fatal("server.SetZapDomain:", err) + } + err = server.Bind("tcp://127.0.0.1:9688") + if err != nil { + t.Fatal("server.Bind:", err) + } + err = client.Connect("tcp://127.0.0.1:9688") + if err != nil { + t.Fatal("client.Connect:", err) + } + msg, err = bounce(server, client) + if err != nil { + t.Error(msg, err) + } + server.Unbind("tcp://127.0.0.1:9688") + client.Disconnect("tcp://127.0.0.1:9688") + + err = client.Close() + client = nil + if err != nil { + t.Error("client.Close:", err) + } + err = server.Close() + server = nil + if err != nil { + t.Error("server.Close:", err) + } +} + +func TestSecurityPlain(t *testing.T) { + + time.Sleep(100 * time.Millisecond) + + var handler, server, client *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{handler} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + handler, err := zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = handler.Bind("inproc://zeromq.zap.01") + if err != nil { + t.Fatal("handler.Bind:", err) + } + + doHandler := func(state zmq.State) error { + msg, err := handler.RecvMessage(0) + if err != nil { + return err // Terminating + } + version := msg[0] + sequence := msg[1] + // domain := msg[2] + // address := msg[3] + identity := msg[4] + mechanism := msg[5] + username := msg[6] + password := msg[7] + + if version != "1.0" { + return errors.New("version != 1.0") + } + if mechanism != "PLAIN" { + return errors.New("mechanism != PLAIN") + } + if identity != "IDENT" { + return errors.New("identity != IDENT") + } + + if username == "admin" && password == "password" { + handler.SendMessage(version, sequence, "200", "OK", "anonymous", "") + } else { + handler.SendMessage(version, sequence, "400", "Invalid username or password", "", "") + } + return nil + } + + doQuit := func(i interface{}) error { + err := handler.Close() + if err != nil { + t.Error("handler.Close:", err) + } + return errors.New("Quit") + } + quit := make(chan interface{}) + + reactor := zmq.NewReactor() + reactor.AddSocket(handler, zmq.POLLIN, doHandler) + reactor.AddChannel(quit, 0, doQuit) + go func() { + reactor.Run(100 * time.Millisecond) + quit <- true + }() + defer func() { + quit <- true + <-quit + close(quit) + }() + + // Server socket will accept connections + server, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket", err) + } + err = server.SetIdentity("IDENT") + if err != nil { + t.Fatal("server.SetIdentity:", err) + } + err = server.SetPlainServer(1) + if err != nil { + t.Fatal("server.SetPlainServer(1):", err) + } + err = server.Bind("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("server.Bind") + } + + // Check PLAIN security with correct username/password + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetPlainUsername("admin") + if err != nil { + t.Fatal("client.SetPlainUsername:", err) + } + err = client.SetPlainPassword("password") + if err != nil { + t.Fatal("client.SetPlainPassword:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + msg, err := bounce(server, client) + if err != nil { + t.Error(msg, err) + } + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + // Check PLAIN security with badly configured client (as_server) + // This will be caught by the plain_server class, not passed to ZAP + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + client.SetPlainServer(1) + if err != nil { + t.Fatal("client.SetPlainServer(1):", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + err = server.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("server.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + err = server.Close() + server = nil + if err != nil { + t.Fatal("server.Close:", err) + } +} + +func bounce(server, client *zmq.Socket) (msg string, err error) { + + content := "12345678ABCDEFGH12345678abcdefgh" + + // Send message from client to server + rc, err := client.Send(content, zmq.SNDMORE|zmq.DONTWAIT) + if err != nil { + return "client.Send SNDMORE|DONTWAIT:", err + } + if rc != 32 { + return "client.Send SNDMORE|DONTWAIT:", err32 + } + + rc, err = client.Send(content, zmq.DONTWAIT) + if err != nil { + return "client.Send DONTWAIT:", err + } + if rc != 32 { + return "client.Send DONTWAIT:", err32 + } + + // Receive message at server side + msg, err = server.Recv(0) + if err != nil { + return "server.Recv 1:", err + } + + // Check that message is still the same + if msg != content { + return "server.Recv 1:", errors.New(fmt.Sprintf("%q != %q", msg, content)) + } + + rcvmore, err := server.GetRcvmore() + if err != nil { + return "server.GetRcvmore 1:", err + } + if !rcvmore { + return "server.GetRcvmore 1:", errors.New(fmt.Sprint("rcvmore ==", rcvmore)) + } + + // Receive message at server side + msg, err = server.Recv(0) + if err != nil { + return "server.Recv 2:", err + } + + // Check that message is still the same + if msg != content { + return "server.Recv 2:", errors.New(fmt.Sprintf("%q != %q", msg, content)) + } + + rcvmore, err = server.GetRcvmore() + if err != nil { + return "server.GetRcvmore 2:", err + } + if rcvmore { + return "server.GetRcvmore 2:", errors.New(fmt.Sprint("rcvmore == ", rcvmore)) + } + + // The same, from server back to client + + // Send message from server to client + rc, err = server.Send(content, zmq.SNDMORE) + if err != nil { + return "server.Send SNDMORE:", err + } + if rc != 32 { + return "server.Send SNDMORE:", err32 + } + + rc, err = server.Send(content, 0) + if err != nil { + return "server.Send 0:", err + } + if rc != 32 { + return "server.Send 0:", err32 + } + + // Receive message at client side + msg, err = client.Recv(0) + if err != nil { + return "client.Recv 1:", err + } + + // Check that message is still the same + if msg != content { + return "client.Recv 1:", errors.New(fmt.Sprintf("%q != %q", msg, content)) + } + + rcvmore, err = client.GetRcvmore() + if err != nil { + return "client.GetRcvmore 1:", err + } + if !rcvmore { + return "client.GetRcvmore 1:", errors.New(fmt.Sprint("rcvmore ==", rcvmore)) + } + + // Receive message at client side + msg, err = client.Recv(0) + if err != nil { + return "client.Recv 2:", err + } + + // Check that message is still the same + if msg != content { + return "client.Recv 2:", errors.New(fmt.Sprintf("%q != %q", msg, content)) + } + + rcvmore, err = client.GetRcvmore() + if err != nil { + return "client.GetRcvmore 2:", err + } + if rcvmore { + return "client.GetRcvmore 2:", errors.New(fmt.Sprint("rcvmore == ", rcvmore)) + } + return "OK", nil +} + +func arrayEqual(a, b []string) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/sync/AUTHORS b/vendor/golang.org/x/sync/AUTHORS new file mode 100644 index 0000000..15167cd --- /dev/null +++ b/vendor/golang.org/x/sync/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/vendor/golang.org/x/sync/CONTRIBUTING.md b/vendor/golang.org/x/sync/CONTRIBUTING.md new file mode 100644 index 0000000..88dff59 --- /dev/null +++ b/vendor/golang.org/x/sync/CONTRIBUTING.md @@ -0,0 +1,31 @@ +# Contributing to Go + +Go is an open source project. + +It is the work of hundreds of contributors. We appreciate your help! + + +## Filing issues + +When [filing an issue](https://golang.org/issue/new), make sure to answer these five questions: + +1. What version of Go are you using (`go version`)? +2. What operating system and processor architecture are you using? +3. What did you do? +4. What did you expect to see? +5. What did you see instead? + +General questions should go to the [golang-nuts mailing list](https://groups.google.com/group/golang-nuts) instead of the issue tracker. +The gophers there will answer or ask you to file an issue if you've tripped over a bug. + +## Contributing code + +Please read the [Contribution Guidelines](https://golang.org/doc/contribute.html) +before sending patches. + +**We do not accept GitHub pull requests** +(we use [Gerrit](https://code.google.com/p/gerrit/) instead for code review). + +Unless otherwise noted, the Go source files are distributed under +the BSD-style license found in the LICENSE file. + diff --git a/vendor/golang.org/x/sync/CONTRIBUTORS b/vendor/golang.org/x/sync/CONTRIBUTORS new file mode 100644 index 0000000..1c4577e --- /dev/null +++ b/vendor/golang.org/x/sync/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/vendor/golang.org/x/sync/LICENSE b/vendor/golang.org/x/sync/LICENSE new file mode 100644 index 0000000..6a66aea --- /dev/null +++ b/vendor/golang.org/x/sync/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The Go Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/vendor/golang.org/x/sync/PATENTS b/vendor/golang.org/x/sync/PATENTS new file mode 100644 index 0000000..7330990 --- /dev/null +++ b/vendor/golang.org/x/sync/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the Go project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/vendor/golang.org/x/sync/README b/vendor/golang.org/x/sync/README new file mode 100644 index 0000000..59c9dcb --- /dev/null +++ b/vendor/golang.org/x/sync/README @@ -0,0 +1,2 @@ +This repository provides Go concurrency primitives in addition to the +ones provided by the language and "sync" and "sync/atomic" packages. diff --git a/vendor/golang.org/x/sync/codereview.cfg b/vendor/golang.org/x/sync/codereview.cfg new file mode 100644 index 0000000..3f8b14b --- /dev/null +++ b/vendor/golang.org/x/sync/codereview.cfg @@ -0,0 +1 @@ +issuerepo: golang/go diff --git a/vendor/golang.org/x/sync/errgroup/errgroup.go b/vendor/golang.org/x/sync/errgroup/errgroup.go new file mode 100644 index 0000000..533438d --- /dev/null +++ b/vendor/golang.org/x/sync/errgroup/errgroup.go @@ -0,0 +1,67 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package errgroup provides synchronization, error propagation, and Context +// cancelation for groups of goroutines working on subtasks of a common task. +package errgroup + +import ( + "sync" + + "golang.org/x/net/context" +) + +// A Group is a collection of goroutines working on subtasks that are part of +// the same overall task. +// +// A zero Group is valid and does not cancel on error. +type Group struct { + cancel func() + + wg sync.WaitGroup + + errOnce sync.Once + err error +} + +// WithContext returns a new Group and an associated Context derived from ctx. +// +// The derived Context is canceled the first time a function passed to Go +// returns a non-nil error or the first time Wait returns, whichever occurs +// first. +func WithContext(ctx context.Context) (*Group, context.Context) { + ctx, cancel := context.WithCancel(ctx) + return &Group{cancel: cancel}, ctx +} + +// Wait blocks until all function calls from the Go method have returned, then +// returns the first non-nil error (if any) from them. +func (g *Group) Wait() error { + g.wg.Wait() + if g.cancel != nil { + g.cancel() + } + return g.err +} + +// Go calls the given function in a new goroutine. +// +// The first call to return a non-nil error cancels the group; its error will be +// returned by Wait. +func (g *Group) Go(f func() error) { + g.wg.Add(1) + + go func() { + defer g.wg.Done() + + if err := f(); err != nil { + g.errOnce.Do(func() { + g.err = err + if g.cancel != nil { + g.cancel() + } + }) + } + }() +} diff --git a/vendor/golang.org/x/sync/errgroup/errgroup_example_md5all_test.go b/vendor/golang.org/x/sync/errgroup/errgroup_example_md5all_test.go new file mode 100644 index 0000000..714b5ae --- /dev/null +++ b/vendor/golang.org/x/sync/errgroup/errgroup_example_md5all_test.go @@ -0,0 +1,101 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package errgroup_test + +import ( + "crypto/md5" + "fmt" + "io/ioutil" + "log" + "os" + "path/filepath" + + "golang.org/x/net/context" + "golang.org/x/sync/errgroup" +) + +// Pipeline demonstrates the use of a Group to implement a multi-stage +// pipeline: a version of the MD5All function with bounded parallelism from +// https://blog.golang.org/pipelines. +func ExampleGroup_pipeline() { + m, err := MD5All(context.Background(), ".") + if err != nil { + log.Fatal(err) + } + + for k, sum := range m { + fmt.Printf("%s:\t%x\n", k, sum) + } +} + +type result struct { + path string + sum [md5.Size]byte +} + +// MD5All reads all the files in the file tree rooted at root and returns a map +// from file path to the MD5 sum of the file's contents. If the directory walk +// fails or any read operation fails, MD5All returns an error. +func MD5All(ctx context.Context, root string) (map[string][md5.Size]byte, error) { + // ctx is canceled when g.Wait() returns. When this version of MD5All returns + // - even in case of error! - we know that all of the goroutines have finished + // and the memory they were using can be garbage-collected. + g, ctx := errgroup.WithContext(ctx) + paths := make(chan string) + + g.Go(func() error { + defer close(paths) + return filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if !info.Mode().IsRegular() { + return nil + } + select { + case paths <- path: + case <-ctx.Done(): + return ctx.Err() + } + return nil + }) + }) + + // Start a fixed number of goroutines to read and digest files. + c := make(chan result) + const numDigesters = 20 + for i := 0; i < numDigesters; i++ { + g.Go(func() error { + for path := range paths { + data, err := ioutil.ReadFile(path) + if err != nil { + return err + } + select { + case c <- result{path, md5.Sum(data)}: + case <-ctx.Done(): + return ctx.Err() + } + } + return nil + }) + } + go func() { + g.Wait() + close(c) + }() + + m := make(map[string][md5.Size]byte) + for r := range c { + m[r.path] = r.sum + } + // Check whether any of the goroutines failed. Since g is accumulating the + // errors, we don't need to send them (or check for them) in the individual + // results sent on the channel. + if err := g.Wait(); err != nil { + return nil, err + } + return m, nil +} diff --git a/vendor/golang.org/x/sync/errgroup/errgroup_test.go b/vendor/golang.org/x/sync/errgroup/errgroup_test.go new file mode 100644 index 0000000..6a9696e --- /dev/null +++ b/vendor/golang.org/x/sync/errgroup/errgroup_test.go @@ -0,0 +1,176 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package errgroup_test + +import ( + "errors" + "fmt" + "net/http" + "os" + "testing" + + "golang.org/x/net/context" + "golang.org/x/sync/errgroup" +) + +var ( + Web = fakeSearch("web") + Image = fakeSearch("image") + Video = fakeSearch("video") +) + +type Result string +type Search func(ctx context.Context, query string) (Result, error) + +func fakeSearch(kind string) Search { + return func(_ context.Context, query string) (Result, error) { + return Result(fmt.Sprintf("%s result for %q", kind, query)), nil + } +} + +// JustErrors illustrates the use of a Group in place of a sync.WaitGroup to +// simplify goroutine counting and error handling. This example is derived from +// the sync.WaitGroup example at https://golang.org/pkg/sync/#example_WaitGroup. +func ExampleGroup_justErrors() { + var g errgroup.Group + var urls = []string{ + "http://www.golang.org/", + "http://www.google.com/", + "http://www.somestupidname.com/", + } + for _, url := range urls { + // Launch a goroutine to fetch the URL. + url := url // https://golang.org/doc/faq#closures_and_goroutines + g.Go(func() error { + // Fetch the URL. + resp, err := http.Get(url) + if err == nil { + resp.Body.Close() + } + return err + }) + } + // Wait for all HTTP fetches to complete. + if err := g.Wait(); err == nil { + fmt.Println("Successfully fetched all URLs.") + } +} + +// Parallel illustrates the use of a Group for synchronizing a simple parallel +// task: the "Google Search 2.0" function from +// https://talks.golang.org/2012/concurrency.slide#46, augmented with a Context +// and error-handling. +func ExampleGroup_parallel() { + Google := func(ctx context.Context, query string) ([]Result, error) { + g, ctx := errgroup.WithContext(ctx) + + searches := []Search{Web, Image, Video} + results := make([]Result, len(searches)) + for i, search := range searches { + i, search := i, search // https://golang.org/doc/faq#closures_and_goroutines + g.Go(func() error { + result, err := search(ctx, query) + if err == nil { + results[i] = result + } + return err + }) + } + if err := g.Wait(); err != nil { + return nil, err + } + return results, nil + } + + results, err := Google(context.Background(), "golang") + if err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + for _, result := range results { + fmt.Println(result) + } + + // Output: + // web result for "golang" + // image result for "golang" + // video result for "golang" +} + +func TestZeroGroup(t *testing.T) { + err1 := errors.New("errgroup_test: 1") + err2 := errors.New("errgroup_test: 2") + + cases := []struct { + errs []error + }{ + {errs: []error{}}, + {errs: []error{nil}}, + {errs: []error{err1}}, + {errs: []error{err1, nil}}, + {errs: []error{err1, nil, err2}}, + } + + for _, tc := range cases { + var g errgroup.Group + + var firstErr error + for i, err := range tc.errs { + err := err + g.Go(func() error { return err }) + + if firstErr == nil && err != nil { + firstErr = err + } + + if gErr := g.Wait(); gErr != firstErr { + t.Errorf("after %T.Go(func() error { return err }) for err in %v\n"+ + "g.Wait() = %v; want %v", + g, tc.errs[:i+1], err, firstErr) + } + } + } +} + +func TestWithContext(t *testing.T) { + errDoom := errors.New("group_test: doomed") + + cases := []struct { + errs []error + want error + }{ + {want: nil}, + {errs: []error{nil}, want: nil}, + {errs: []error{errDoom}, want: errDoom}, + {errs: []error{errDoom, nil}, want: errDoom}, + } + + for _, tc := range cases { + g, ctx := errgroup.WithContext(context.Background()) + + for _, err := range tc.errs { + err := err + g.Go(func() error { return err }) + } + + if err := g.Wait(); err != tc.want { + t.Errorf("after %T.Go(func() error { return err }) for err in %v\n"+ + "g.Wait() = %v; want %v", + g, tc.errs, err, tc.want) + } + + canceled := false + select { + case <-ctx.Done(): + canceled = true + default: + } + if !canceled { + t.Errorf("after %T.Go(func() error { return err }) for err in %v\n"+ + "ctx.Done() was not closed", + g, tc.errs) + } + } +} diff --git a/vendor/golang.org/x/sync/semaphore/semaphore.go b/vendor/golang.org/x/sync/semaphore/semaphore.go new file mode 100644 index 0000000..e9d2d79 --- /dev/null +++ b/vendor/golang.org/x/sync/semaphore/semaphore.go @@ -0,0 +1,131 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package semaphore provides a weighted semaphore implementation. +package semaphore // import "golang.org/x/sync/semaphore" + +import ( + "container/list" + "sync" + + // Use the old context because packages that depend on this one + // (e.g. cloud.google.com/go/...) must run on Go 1.6. + // TODO(jba): update to "context" when possible. + "golang.org/x/net/context" +) + +type waiter struct { + n int64 + ready chan<- struct{} // Closed when semaphore acquired. +} + +// NewWeighted creates a new weighted semaphore with the given +// maximum combined weight for concurrent access. +func NewWeighted(n int64) *Weighted { + w := &Weighted{size: n} + return w +} + +// Weighted provides a way to bound concurrent access to a resource. +// The callers can request access with a given weight. +type Weighted struct { + size int64 + cur int64 + mu sync.Mutex + waiters list.List +} + +// Acquire acquires the semaphore with a weight of n, blocking only until ctx +// is done. On success, returns nil. On failure, returns ctx.Err() and leaves +// the semaphore unchanged. +// +// If ctx is already done, Acquire may still succeed without blocking. +func (s *Weighted) Acquire(ctx context.Context, n int64) error { + s.mu.Lock() + if s.size-s.cur >= n && s.waiters.Len() == 0 { + s.cur += n + s.mu.Unlock() + return nil + } + + if n > s.size { + // Don't make other Acquire calls block on one that's doomed to fail. + s.mu.Unlock() + <-ctx.Done() + return ctx.Err() + } + + ready := make(chan struct{}) + w := waiter{n: n, ready: ready} + elem := s.waiters.PushBack(w) + s.mu.Unlock() + + select { + case <-ctx.Done(): + err := ctx.Err() + s.mu.Lock() + select { + case <-ready: + // Acquired the semaphore after we were canceled. Rather than trying to + // fix up the queue, just pretend we didn't notice the cancelation. + err = nil + default: + s.waiters.Remove(elem) + } + s.mu.Unlock() + return err + + case <-ready: + return nil + } +} + +// TryAcquire acquires the semaphore with a weight of n without blocking. +// On success, returns true. On failure, returns false and leaves the semaphore unchanged. +func (s *Weighted) TryAcquire(n int64) bool { + s.mu.Lock() + success := s.size-s.cur >= n && s.waiters.Len() == 0 + if success { + s.cur += n + } + s.mu.Unlock() + return success +} + +// Release releases the semaphore with a weight of n. +func (s *Weighted) Release(n int64) { + s.mu.Lock() + s.cur -= n + if s.cur < 0 { + s.mu.Unlock() + panic("semaphore: bad release") + } + for { + next := s.waiters.Front() + if next == nil { + break // No more waiters blocked. + } + + w := next.Value.(waiter) + if s.size-s.cur < w.n { + // Not enough tokens for the next waiter. We could keep going (to try to + // find a waiter with a smaller request), but under load that could cause + // starvation for large requests; instead, we leave all remaining waiters + // blocked. + // + // Consider a semaphore used as a read-write lock, with N tokens, N + // readers, and one writer. Each reader can Acquire(1) to obtain a read + // lock. The writer can Acquire(N) to obtain a write lock, excluding all + // of the readers. If we allow the readers to jump ahead in the queue, + // the writer will starve — there is always one token available for every + // reader. + break + } + + s.cur += w.n + s.waiters.Remove(next) + close(w.ready) + } + s.mu.Unlock() +} diff --git a/vendor/golang.org/x/sync/semaphore/semaphore_bench_test.go b/vendor/golang.org/x/sync/semaphore/semaphore_bench_test.go new file mode 100644 index 0000000..5bb2fb3 --- /dev/null +++ b/vendor/golang.org/x/sync/semaphore/semaphore_bench_test.go @@ -0,0 +1,130 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build go1.7 + +package semaphore + +import ( + "fmt" + "testing" + + "golang.org/x/net/context" +) + +// weighted is an interface matching a subset of *Weighted. It allows +// alternate implementations for testing and benchmarking. +type weighted interface { + Acquire(context.Context, int64) error + TryAcquire(int64) bool + Release(int64) +} + +// semChan implements Weighted using a channel for +// comparing against the condition variable-based implementation. +type semChan chan struct{} + +func newSemChan(n int64) semChan { + return semChan(make(chan struct{}, n)) +} + +func (s semChan) Acquire(_ context.Context, n int64) error { + for i := int64(0); i < n; i++ { + s <- struct{}{} + } + return nil +} + +func (s semChan) TryAcquire(n int64) bool { + if int64(len(s))+n > int64(cap(s)) { + return false + } + + for i := int64(0); i < n; i++ { + s <- struct{}{} + } + return true +} + +func (s semChan) Release(n int64) { + for i := int64(0); i < n; i++ { + <-s + } +} + +// acquireN calls Acquire(size) on sem N times and then calls Release(size) N times. +func acquireN(b *testing.B, sem weighted, size int64, N int) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + for j := 0; j < N; j++ { + sem.Acquire(context.Background(), size) + } + for j := 0; j < N; j++ { + sem.Release(size) + } + } +} + +// tryAcquireN calls TryAcquire(size) on sem N times and then calls Release(size) N times. +func tryAcquireN(b *testing.B, sem weighted, size int64, N int) { + b.ResetTimer() + for i := 0; i < b.N; i++ { + for j := 0; j < N; j++ { + if !sem.TryAcquire(size) { + b.Fatalf("TryAcquire(%v) = false, want true", size) + } + } + for j := 0; j < N; j++ { + sem.Release(size) + } + } +} + +func BenchmarkNewSeq(b *testing.B) { + for _, cap := range []int64{1, 128} { + b.Run(fmt.Sprintf("Weighted-%d", cap), func(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = NewWeighted(cap) + } + }) + b.Run(fmt.Sprintf("semChan-%d", cap), func(b *testing.B) { + for i := 0; i < b.N; i++ { + _ = newSemChan(cap) + } + }) + } +} + +func BenchmarkAcquireSeq(b *testing.B) { + for _, c := range []struct { + cap, size int64 + N int + }{ + {1, 1, 1}, + {2, 1, 1}, + {16, 1, 1}, + {128, 1, 1}, + {2, 2, 1}, + {16, 2, 8}, + {128, 2, 64}, + {2, 1, 2}, + {16, 8, 2}, + {128, 64, 2}, + } { + for _, w := range []struct { + name string + w weighted + }{ + {"Weighted", NewWeighted(c.cap)}, + {"semChan", newSemChan(c.cap)}, + } { + b.Run(fmt.Sprintf("%s-acquire-%d-%d-%d", w.name, c.cap, c.size, c.N), func(b *testing.B) { + acquireN(b, w.w, c.size, c.N) + }) + b.Run(fmt.Sprintf("%s-tryAcquire-%d-%d-%d", w.name, c.cap, c.size, c.N), func(b *testing.B) { + tryAcquireN(b, w.w, c.size, c.N) + }) + } + } +} diff --git a/vendor/golang.org/x/sync/semaphore/semaphore_test.go b/vendor/golang.org/x/sync/semaphore/semaphore_test.go new file mode 100644 index 0000000..3f3bc9f --- /dev/null +++ b/vendor/golang.org/x/sync/semaphore/semaphore_test.go @@ -0,0 +1,170 @@ +// Copyright 2017 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package semaphore + +import ( + "math/rand" + "runtime" + "sync" + "testing" + "time" + + "golang.org/x/net/context" + "golang.org/x/sync/errgroup" +) + +const maxSleep = 1 * time.Millisecond + +func HammerWeighted(sem *Weighted, n int64, loops int) { + for i := 0; i < loops; i++ { + sem.Acquire(context.Background(), n) + time.Sleep(time.Duration(rand.Int63n(int64(maxSleep/time.Nanosecond))) * time.Nanosecond) + sem.Release(n) + } +} + +func TestWeighted(t *testing.T) { + t.Parallel() + + n := runtime.GOMAXPROCS(0) + loops := 10000 / n + sem := NewWeighted(int64(n)) + var wg sync.WaitGroup + wg.Add(n) + for i := 0; i < n; i++ { + i := i + go func() { + defer wg.Done() + HammerWeighted(sem, int64(i), loops) + }() + } + wg.Wait() +} + +func TestWeightedPanic(t *testing.T) { + t.Parallel() + + defer func() { + if recover() == nil { + t.Fatal("release of an unacquired weighted semaphore did not panic") + } + }() + w := NewWeighted(1) + w.Release(1) +} + +func TestWeightedTryAcquire(t *testing.T) { + t.Parallel() + + ctx := context.Background() + sem := NewWeighted(2) + tries := []bool{} + sem.Acquire(ctx, 1) + tries = append(tries, sem.TryAcquire(1)) + tries = append(tries, sem.TryAcquire(1)) + + sem.Release(2) + + tries = append(tries, sem.TryAcquire(1)) + sem.Acquire(ctx, 1) + tries = append(tries, sem.TryAcquire(1)) + + want := []bool{true, false, true, false} + for i := range tries { + if tries[i] != want[i] { + t.Errorf("tries[%d]: got %t, want %t", i, tries[i], want[i]) + } + } +} + +func TestWeightedAcquire(t *testing.T) { + t.Parallel() + + ctx := context.Background() + sem := NewWeighted(2) + tryAcquire := func(n int64) bool { + ctx, cancel := context.WithTimeout(ctx, 10*time.Millisecond) + defer cancel() + return sem.Acquire(ctx, n) == nil + } + + tries := []bool{} + sem.Acquire(ctx, 1) + tries = append(tries, tryAcquire(1)) + tries = append(tries, tryAcquire(1)) + + sem.Release(2) + + tries = append(tries, tryAcquire(1)) + sem.Acquire(ctx, 1) + tries = append(tries, tryAcquire(1)) + + want := []bool{true, false, true, false} + for i := range tries { + if tries[i] != want[i] { + t.Errorf("tries[%d]: got %t, want %t", i, tries[i], want[i]) + } + } +} + +func TestWeightedDoesntBlockIfTooBig(t *testing.T) { + t.Parallel() + + const n = 2 + sem := NewWeighted(n) + { + ctx, cancel := context.WithCancel(context.Background()) + defer cancel() + go sem.Acquire(ctx, n+1) + } + + g, ctx := errgroup.WithContext(context.Background()) + for i := n * 3; i > 0; i-- { + g.Go(func() error { + err := sem.Acquire(ctx, 1) + if err == nil { + time.Sleep(1 * time.Millisecond) + sem.Release(1) + } + return err + }) + } + if err := g.Wait(); err != nil { + t.Errorf("NewWeighted(%v) failed to AcquireCtx(_, 1) with AcquireCtx(_, %v) pending", n, n+1) + } +} + +// TestLargeAcquireDoesntStarve times out if a large call to Acquire starves. +// Merely returning from the test function indicates success. +func TestLargeAcquireDoesntStarve(t *testing.T) { + t.Parallel() + + ctx := context.Background() + n := int64(runtime.GOMAXPROCS(0)) + sem := NewWeighted(n) + running := true + + var wg sync.WaitGroup + wg.Add(int(n)) + for i := n; i > 0; i-- { + sem.Acquire(ctx, 1) + go func() { + defer func() { + sem.Release(1) + wg.Done() + }() + for running { + time.Sleep(1 * time.Millisecond) + sem.Release(1) + sem.Acquire(ctx, 1) + } + }() + } + + sem.Acquire(ctx, n) + running = false + sem.Release(n) + wg.Wait() +} diff --git a/vendor/golang.org/x/sync/singleflight/singleflight.go b/vendor/golang.org/x/sync/singleflight/singleflight.go new file mode 100644 index 0000000..9a4f8d5 --- /dev/null +++ b/vendor/golang.org/x/sync/singleflight/singleflight.go @@ -0,0 +1,111 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package singleflight provides a duplicate function call suppression +// mechanism. +package singleflight // import "golang.org/x/sync/singleflight" + +import "sync" + +// call is an in-flight or completed singleflight.Do call +type call struct { + wg sync.WaitGroup + + // These fields are written once before the WaitGroup is done + // and are only read after the WaitGroup is done. + val interface{} + err error + + // These fields are read and written with the singleflight + // mutex held before the WaitGroup is done, and are read but + // not written after the WaitGroup is done. + dups int + chans []chan<- Result +} + +// Group represents a class of work and forms a namespace in +// which units of work can be executed with duplicate suppression. +type Group struct { + mu sync.Mutex // protects m + m map[string]*call // lazily initialized +} + +// Result holds the results of Do, so they can be passed +// on a channel. +type Result struct { + Val interface{} + Err error + Shared bool +} + +// Do executes and returns the results of the given function, making +// sure that only one execution is in-flight for a given key at a +// time. If a duplicate comes in, the duplicate caller waits for the +// original to complete and receives the same results. +// The return value shared indicates whether v was given to multiple callers. +func (g *Group) Do(key string, fn func() (interface{}, error)) (v interface{}, err error, shared bool) { + g.mu.Lock() + if g.m == nil { + g.m = make(map[string]*call) + } + if c, ok := g.m[key]; ok { + c.dups++ + g.mu.Unlock() + c.wg.Wait() + return c.val, c.err, true + } + c := new(call) + c.wg.Add(1) + g.m[key] = c + g.mu.Unlock() + + g.doCall(c, key, fn) + return c.val, c.err, c.dups > 0 +} + +// DoChan is like Do but returns a channel that will receive the +// results when they are ready. +func (g *Group) DoChan(key string, fn func() (interface{}, error)) <-chan Result { + ch := make(chan Result, 1) + g.mu.Lock() + if g.m == nil { + g.m = make(map[string]*call) + } + if c, ok := g.m[key]; ok { + c.dups++ + c.chans = append(c.chans, ch) + g.mu.Unlock() + return ch + } + c := &call{chans: []chan<- Result{ch}} + c.wg.Add(1) + g.m[key] = c + g.mu.Unlock() + + go g.doCall(c, key, fn) + + return ch +} + +// doCall handles the single call for a key. +func (g *Group) doCall(c *call, key string, fn func() (interface{}, error)) { + c.val, c.err = fn() + c.wg.Done() + + g.mu.Lock() + delete(g.m, key) + for _, ch := range c.chans { + ch <- Result{c.val, c.err, c.dups > 0} + } + g.mu.Unlock() +} + +// Forget tells the singleflight to forget about a key. Future calls +// to Do for this key will call the function rather than waiting for +// an earlier call to complete. +func (g *Group) Forget(key string) { + g.mu.Lock() + delete(g.m, key) + g.mu.Unlock() +} diff --git a/vendor/golang.org/x/sync/singleflight/singleflight_test.go b/vendor/golang.org/x/sync/singleflight/singleflight_test.go new file mode 100644 index 0000000..5e6f1b3 --- /dev/null +++ b/vendor/golang.org/x/sync/singleflight/singleflight_test.go @@ -0,0 +1,87 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package singleflight + +import ( + "errors" + "fmt" + "sync" + "sync/atomic" + "testing" + "time" +) + +func TestDo(t *testing.T) { + var g Group + v, err, _ := g.Do("key", func() (interface{}, error) { + return "bar", nil + }) + if got, want := fmt.Sprintf("%v (%T)", v, v), "bar (string)"; got != want { + t.Errorf("Do = %v; want %v", got, want) + } + if err != nil { + t.Errorf("Do error = %v", err) + } +} + +func TestDoErr(t *testing.T) { + var g Group + someErr := errors.New("Some error") + v, err, _ := g.Do("key", func() (interface{}, error) { + return nil, someErr + }) + if err != someErr { + t.Errorf("Do error = %v; want someErr %v", err, someErr) + } + if v != nil { + t.Errorf("unexpected non-nil value %#v", v) + } +} + +func TestDoDupSuppress(t *testing.T) { + var g Group + var wg1, wg2 sync.WaitGroup + c := make(chan string, 1) + var calls int32 + fn := func() (interface{}, error) { + if atomic.AddInt32(&calls, 1) == 1 { + // First invocation. + wg1.Done() + } + v := <-c + c <- v // pump; make available for any future calls + + time.Sleep(10 * time.Millisecond) // let more goroutines enter Do + + return v, nil + } + + const n = 10 + wg1.Add(1) + for i := 0; i < n; i++ { + wg1.Add(1) + wg2.Add(1) + go func() { + defer wg2.Done() + wg1.Done() + v, err, _ := g.Do("key", fn) + if err != nil { + t.Errorf("Do error: %v", err) + return + } + if s, _ := v.(string); s != "bar" { + t.Errorf("Do = %T %v; want %q", v, v, "bar") + } + }() + } + wg1.Wait() + // At least one goroutine is in fn now and all of them have at + // least reached the line before the Do. + c <- "bar" + wg2.Wait() + if got := atomic.LoadInt32(&calls); got <= 0 || got >= n { + t.Errorf("number of calls = %d; want over 0 and less than %d", got, n) + } +} diff --git a/vendor/golang.org/x/sync/syncmap/map.go b/vendor/golang.org/x/sync/syncmap/map.go new file mode 100644 index 0000000..80e1584 --- /dev/null +++ b/vendor/golang.org/x/sync/syncmap/map.go @@ -0,0 +1,372 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package syncmap provides a concurrent map implementation. +// It is a prototype for a proposed addition to the sync package +// in the standard library. +// (https://golang.org/issue/18177) +package syncmap + +import ( + "sync" + "sync/atomic" + "unsafe" +) + +// Map is a concurrent map with amortized-constant-time loads, stores, and deletes. +// It is safe for multiple goroutines to call a Map's methods concurrently. +// +// The zero Map is valid and empty. +// +// A Map must not be copied after first use. +type Map struct { + mu sync.Mutex + + // read contains the portion of the map's contents that are safe for + // concurrent access (with or without mu held). + // + // The read field itself is always safe to load, but must only be stored with + // mu held. + // + // Entries stored in read may be updated concurrently without mu, but updating + // a previously-expunged entry requires that the entry be copied to the dirty + // map and unexpunged with mu held. + read atomic.Value // readOnly + + // dirty contains the portion of the map's contents that require mu to be + // held. To ensure that the dirty map can be promoted to the read map quickly, + // it also includes all of the non-expunged entries in the read map. + // + // Expunged entries are not stored in the dirty map. An expunged entry in the + // clean map must be unexpunged and added to the dirty map before a new value + // can be stored to it. + // + // If the dirty map is nil, the next write to the map will initialize it by + // making a shallow copy of the clean map, omitting stale entries. + dirty map[interface{}]*entry + + // misses counts the number of loads since the read map was last updated that + // needed to lock mu to determine whether the key was present. + // + // Once enough misses have occurred to cover the cost of copying the dirty + // map, the dirty map will be promoted to the read map (in the unamended + // state) and the next store to the map will make a new dirty copy. + misses int +} + +// readOnly is an immutable struct stored atomically in the Map.read field. +type readOnly struct { + m map[interface{}]*entry + amended bool // true if the dirty map contains some key not in m. +} + +// expunged is an arbitrary pointer that marks entries which have been deleted +// from the dirty map. +var expunged = unsafe.Pointer(new(interface{})) + +// An entry is a slot in the map corresponding to a particular key. +type entry struct { + // p points to the interface{} value stored for the entry. + // + // If p == nil, the entry has been deleted and m.dirty == nil. + // + // If p == expunged, the entry has been deleted, m.dirty != nil, and the entry + // is missing from m.dirty. + // + // Otherwise, the entry is valid and recorded in m.read.m[key] and, if m.dirty + // != nil, in m.dirty[key]. + // + // An entry can be deleted by atomic replacement with nil: when m.dirty is + // next created, it will atomically replace nil with expunged and leave + // m.dirty[key] unset. + // + // An entry's associated value can be updated by atomic replacement, provided + // p != expunged. If p == expunged, an entry's associated value can be updated + // only after first setting m.dirty[key] = e so that lookups using the dirty + // map find the entry. + p unsafe.Pointer // *interface{} +} + +func newEntry(i interface{}) *entry { + return &entry{p: unsafe.Pointer(&i)} +} + +// Load returns the value stored in the map for a key, or nil if no +// value is present. +// The ok result indicates whether value was found in the map. +func (m *Map) Load(key interface{}) (value interface{}, ok bool) { + read, _ := m.read.Load().(readOnly) + e, ok := read.m[key] + if !ok && read.amended { + m.mu.Lock() + // Avoid reporting a spurious miss if m.dirty got promoted while we were + // blocked on m.mu. (If further loads of the same key will not miss, it's + // not worth copying the dirty map for this key.) + read, _ = m.read.Load().(readOnly) + e, ok = read.m[key] + if !ok && read.amended { + e, ok = m.dirty[key] + // Regardless of whether the entry was present, record a miss: this key + // will take the slow path until the dirty map is promoted to the read + // map. + m.missLocked() + } + m.mu.Unlock() + } + if !ok { + return nil, false + } + return e.load() +} + +func (e *entry) load() (value interface{}, ok bool) { + p := atomic.LoadPointer(&e.p) + if p == nil || p == expunged { + return nil, false + } + return *(*interface{})(p), true +} + +// Store sets the value for a key. +func (m *Map) Store(key, value interface{}) { + read, _ := m.read.Load().(readOnly) + if e, ok := read.m[key]; ok && e.tryStore(&value) { + return + } + + m.mu.Lock() + read, _ = m.read.Load().(readOnly) + if e, ok := read.m[key]; ok { + if e.unexpungeLocked() { + // The entry was previously expunged, which implies that there is a + // non-nil dirty map and this entry is not in it. + m.dirty[key] = e + } + e.storeLocked(&value) + } else if e, ok := m.dirty[key]; ok { + e.storeLocked(&value) + } else { + if !read.amended { + // We're adding the first new key to the dirty map. + // Make sure it is allocated and mark the read-only map as incomplete. + m.dirtyLocked() + m.read.Store(readOnly{m: read.m, amended: true}) + } + m.dirty[key] = newEntry(value) + } + m.mu.Unlock() +} + +// tryStore stores a value if the entry has not been expunged. +// +// If the entry is expunged, tryStore returns false and leaves the entry +// unchanged. +func (e *entry) tryStore(i *interface{}) bool { + p := atomic.LoadPointer(&e.p) + if p == expunged { + return false + } + for { + if atomic.CompareAndSwapPointer(&e.p, p, unsafe.Pointer(i)) { + return true + } + p = atomic.LoadPointer(&e.p) + if p == expunged { + return false + } + } +} + +// unexpungeLocked ensures that the entry is not marked as expunged. +// +// If the entry was previously expunged, it must be added to the dirty map +// before m.mu is unlocked. +func (e *entry) unexpungeLocked() (wasExpunged bool) { + return atomic.CompareAndSwapPointer(&e.p, expunged, nil) +} + +// storeLocked unconditionally stores a value to the entry. +// +// The entry must be known not to be expunged. +func (e *entry) storeLocked(i *interface{}) { + atomic.StorePointer(&e.p, unsafe.Pointer(i)) +} + +// LoadOrStore returns the existing value for the key if present. +// Otherwise, it stores and returns the given value. +// The loaded result is true if the value was loaded, false if stored. +func (m *Map) LoadOrStore(key, value interface{}) (actual interface{}, loaded bool) { + // Avoid locking if it's a clean hit. + read, _ := m.read.Load().(readOnly) + if e, ok := read.m[key]; ok { + actual, loaded, ok := e.tryLoadOrStore(value) + if ok { + return actual, loaded + } + } + + m.mu.Lock() + read, _ = m.read.Load().(readOnly) + if e, ok := read.m[key]; ok { + if e.unexpungeLocked() { + m.dirty[key] = e + } + actual, loaded, _ = e.tryLoadOrStore(value) + } else if e, ok := m.dirty[key]; ok { + actual, loaded, _ = e.tryLoadOrStore(value) + m.missLocked() + } else { + if !read.amended { + // We're adding the first new key to the dirty map. + // Make sure it is allocated and mark the read-only map as incomplete. + m.dirtyLocked() + m.read.Store(readOnly{m: read.m, amended: true}) + } + m.dirty[key] = newEntry(value) + actual, loaded = value, false + } + m.mu.Unlock() + + return actual, loaded +} + +// tryLoadOrStore atomically loads or stores a value if the entry is not +// expunged. +// +// If the entry is expunged, tryLoadOrStore leaves the entry unchanged and +// returns with ok==false. +func (e *entry) tryLoadOrStore(i interface{}) (actual interface{}, loaded, ok bool) { + p := atomic.LoadPointer(&e.p) + if p == expunged { + return nil, false, false + } + if p != nil { + return *(*interface{})(p), true, true + } + + // Copy the interface after the first load to make this method more amenable + // to escape analysis: if we hit the "load" path or the entry is expunged, we + // shouldn't bother heap-allocating. + ic := i + for { + if atomic.CompareAndSwapPointer(&e.p, nil, unsafe.Pointer(&ic)) { + return i, false, true + } + p = atomic.LoadPointer(&e.p) + if p == expunged { + return nil, false, false + } + if p != nil { + return *(*interface{})(p), true, true + } + } +} + +// Delete deletes the value for a key. +func (m *Map) Delete(key interface{}) { + read, _ := m.read.Load().(readOnly) + e, ok := read.m[key] + if !ok && read.amended { + m.mu.Lock() + read, _ = m.read.Load().(readOnly) + e, ok = read.m[key] + if !ok && read.amended { + delete(m.dirty, key) + } + m.mu.Unlock() + } + if ok { + e.delete() + } +} + +func (e *entry) delete() (hadValue bool) { + for { + p := atomic.LoadPointer(&e.p) + if p == nil || p == expunged { + return false + } + if atomic.CompareAndSwapPointer(&e.p, p, nil) { + return true + } + } +} + +// Range calls f sequentially for each key and value present in the map. +// If f returns false, range stops the iteration. +// +// Range does not necessarily correspond to any consistent snapshot of the Map's +// contents: no key will be visited more than once, but if the value for any key +// is stored or deleted concurrently, Range may reflect any mapping for that key +// from any point during the Range call. +// +// Range may be O(N) with the number of elements in the map even if f returns +// false after a constant number of calls. +func (m *Map) Range(f func(key, value interface{}) bool) { + // We need to be able to iterate over all of the keys that were already + // present at the start of the call to Range. + // If read.amended is false, then read.m satisfies that property without + // requiring us to hold m.mu for a long time. + read, _ := m.read.Load().(readOnly) + if read.amended { + // m.dirty contains keys not in read.m. Fortunately, Range is already O(N) + // (assuming the caller does not break out early), so a call to Range + // amortizes an entire copy of the map: we can promote the dirty copy + // immediately! + m.mu.Lock() + read, _ = m.read.Load().(readOnly) + if read.amended { + read = readOnly{m: m.dirty} + m.read.Store(read) + m.dirty = nil + m.misses = 0 + } + m.mu.Unlock() + } + + for k, e := range read.m { + v, ok := e.load() + if !ok { + continue + } + if !f(k, v) { + break + } + } +} + +func (m *Map) missLocked() { + m.misses++ + if m.misses < len(m.dirty) { + return + } + m.read.Store(readOnly{m: m.dirty}) + m.dirty = nil + m.misses = 0 +} + +func (m *Map) dirtyLocked() { + if m.dirty != nil { + return + } + + read, _ := m.read.Load().(readOnly) + m.dirty = make(map[interface{}]*entry, len(read.m)) + for k, e := range read.m { + if !e.tryExpungeLocked() { + m.dirty[k] = e + } + } +} + +func (e *entry) tryExpungeLocked() (isExpunged bool) { + p := atomic.LoadPointer(&e.p) + for p == nil { + if atomic.CompareAndSwapPointer(&e.p, nil, expunged) { + return true + } + p = atomic.LoadPointer(&e.p) + } + return p == expunged +} diff --git a/vendor/golang.org/x/sync/syncmap/map_bench_test.go b/vendor/golang.org/x/sync/syncmap/map_bench_test.go new file mode 100644 index 0000000..b279b4f --- /dev/null +++ b/vendor/golang.org/x/sync/syncmap/map_bench_test.go @@ -0,0 +1,216 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package syncmap_test + +import ( + "fmt" + "reflect" + "sync/atomic" + "testing" + + "golang.org/x/sync/syncmap" +) + +type bench struct { + setup func(*testing.B, mapInterface) + perG func(b *testing.B, pb *testing.PB, i int, m mapInterface) +} + +func benchMap(b *testing.B, bench bench) { + for _, m := range [...]mapInterface{&DeepCopyMap{}, &RWMutexMap{}, &syncmap.Map{}} { + b.Run(fmt.Sprintf("%T", m), func(b *testing.B) { + m = reflect.New(reflect.TypeOf(m).Elem()).Interface().(mapInterface) + if bench.setup != nil { + bench.setup(b, m) + } + + b.ResetTimer() + + var i int64 + b.RunParallel(func(pb *testing.PB) { + id := int(atomic.AddInt64(&i, 1) - 1) + bench.perG(b, pb, id*b.N, m) + }) + }) + } +} + +func BenchmarkLoadMostlyHits(b *testing.B) { + const hits, misses = 1023, 1 + + benchMap(b, bench{ + setup: func(_ *testing.B, m mapInterface) { + for i := 0; i < hits; i++ { + m.LoadOrStore(i, i) + } + // Prime the map to get it into a steady state. + for i := 0; i < hits*2; i++ { + m.Load(i % hits) + } + }, + + perG: func(b *testing.B, pb *testing.PB, i int, m mapInterface) { + for ; pb.Next(); i++ { + m.Load(i % (hits + misses)) + } + }, + }) +} + +func BenchmarkLoadMostlyMisses(b *testing.B) { + const hits, misses = 1, 1023 + + benchMap(b, bench{ + setup: func(_ *testing.B, m mapInterface) { + for i := 0; i < hits; i++ { + m.LoadOrStore(i, i) + } + // Prime the map to get it into a steady state. + for i := 0; i < hits*2; i++ { + m.Load(i % hits) + } + }, + + perG: func(b *testing.B, pb *testing.PB, i int, m mapInterface) { + for ; pb.Next(); i++ { + m.Load(i % (hits + misses)) + } + }, + }) +} + +func BenchmarkLoadOrStoreBalanced(b *testing.B) { + const hits, misses = 128, 128 + + benchMap(b, bench{ + setup: func(b *testing.B, m mapInterface) { + if _, ok := m.(*DeepCopyMap); ok { + b.Skip("DeepCopyMap has quadratic running time.") + } + for i := 0; i < hits; i++ { + m.LoadOrStore(i, i) + } + // Prime the map to get it into a steady state. + for i := 0; i < hits*2; i++ { + m.Load(i % hits) + } + }, + + perG: func(b *testing.B, pb *testing.PB, i int, m mapInterface) { + for ; pb.Next(); i++ { + j := i % (hits + misses) + if j < hits { + if _, ok := m.LoadOrStore(j, i); !ok { + b.Fatalf("unexpected miss for %v", j) + } + } else { + if v, loaded := m.LoadOrStore(i, i); loaded { + b.Fatalf("failed to store %v: existing value %v", i, v) + } + } + } + }, + }) +} + +func BenchmarkLoadOrStoreUnique(b *testing.B) { + benchMap(b, bench{ + setup: func(b *testing.B, m mapInterface) { + if _, ok := m.(*DeepCopyMap); ok { + b.Skip("DeepCopyMap has quadratic running time.") + } + }, + + perG: func(b *testing.B, pb *testing.PB, i int, m mapInterface) { + for ; pb.Next(); i++ { + m.LoadOrStore(i, i) + } + }, + }) +} + +func BenchmarkLoadOrStoreCollision(b *testing.B) { + benchMap(b, bench{ + setup: func(_ *testing.B, m mapInterface) { + m.LoadOrStore(0, 0) + }, + + perG: func(b *testing.B, pb *testing.PB, i int, m mapInterface) { + for ; pb.Next(); i++ { + m.LoadOrStore(0, 0) + } + }, + }) +} + +func BenchmarkRange(b *testing.B) { + const mapSize = 1 << 10 + + benchMap(b, bench{ + setup: func(_ *testing.B, m mapInterface) { + for i := 0; i < mapSize; i++ { + m.Store(i, i) + } + }, + + perG: func(b *testing.B, pb *testing.PB, i int, m mapInterface) { + for ; pb.Next(); i++ { + m.Range(func(_, _ interface{}) bool { return true }) + } + }, + }) +} + +// BenchmarkAdversarialAlloc tests performance when we store a new value +// immediately whenever the map is promoted to clean and otherwise load a +// unique, missing key. +// +// This forces the Load calls to always acquire the map's mutex. +func BenchmarkAdversarialAlloc(b *testing.B) { + benchMap(b, bench{ + perG: func(b *testing.B, pb *testing.PB, i int, m mapInterface) { + var stores, loadsSinceStore int64 + for ; pb.Next(); i++ { + m.Load(i) + if loadsSinceStore++; loadsSinceStore > stores { + m.LoadOrStore(i, stores) + loadsSinceStore = 0 + stores++ + } + } + }, + }) +} + +// BenchmarkAdversarialDelete tests performance when we periodically delete +// one key and add a different one in a large map. +// +// This forces the Load calls to always acquire the map's mutex and periodically +// makes a full copy of the map despite changing only one entry. +func BenchmarkAdversarialDelete(b *testing.B) { + const mapSize = 1 << 10 + + benchMap(b, bench{ + setup: func(_ *testing.B, m mapInterface) { + for i := 0; i < mapSize; i++ { + m.Store(i, i) + } + }, + + perG: func(b *testing.B, pb *testing.PB, i int, m mapInterface) { + for ; pb.Next(); i++ { + m.Load(i) + + if i%mapSize == 0 { + m.Range(func(k, _ interface{}) bool { + m.Delete(k) + return false + }) + m.Store(i, i) + } + } + }, + }) +} diff --git a/vendor/golang.org/x/sync/syncmap/map_reference_test.go b/vendor/golang.org/x/sync/syncmap/map_reference_test.go new file mode 100644 index 0000000..923c51b --- /dev/null +++ b/vendor/golang.org/x/sync/syncmap/map_reference_test.go @@ -0,0 +1,151 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package syncmap_test + +import ( + "sync" + "sync/atomic" +) + +// This file contains reference map implementations for unit-tests. + +// mapInterface is the interface Map implements. +type mapInterface interface { + Load(interface{}) (interface{}, bool) + Store(key, value interface{}) + LoadOrStore(key, value interface{}) (actual interface{}, loaded bool) + Delete(interface{}) + Range(func(key, value interface{}) (shouldContinue bool)) +} + +// RWMutexMap is an implementation of mapInterface using a sync.RWMutex. +type RWMutexMap struct { + mu sync.RWMutex + dirty map[interface{}]interface{} +} + +func (m *RWMutexMap) Load(key interface{}) (value interface{}, ok bool) { + m.mu.RLock() + value, ok = m.dirty[key] + m.mu.RUnlock() + return +} + +func (m *RWMutexMap) Store(key, value interface{}) { + m.mu.Lock() + if m.dirty == nil { + m.dirty = make(map[interface{}]interface{}) + } + m.dirty[key] = value + m.mu.Unlock() +} + +func (m *RWMutexMap) LoadOrStore(key, value interface{}) (actual interface{}, loaded bool) { + m.mu.Lock() + actual, loaded = m.dirty[key] + if !loaded { + actual = value + if m.dirty == nil { + m.dirty = make(map[interface{}]interface{}) + } + m.dirty[key] = value + } + m.mu.Unlock() + return actual, loaded +} + +func (m *RWMutexMap) Delete(key interface{}) { + m.mu.Lock() + delete(m.dirty, key) + m.mu.Unlock() +} + +func (m *RWMutexMap) Range(f func(key, value interface{}) (shouldContinue bool)) { + m.mu.RLock() + keys := make([]interface{}, 0, len(m.dirty)) + for k := range m.dirty { + keys = append(keys, k) + } + m.mu.RUnlock() + + for _, k := range keys { + v, ok := m.Load(k) + if !ok { + continue + } + if !f(k, v) { + break + } + } +} + +// DeepCopyMap is an implementation of mapInterface using a Mutex and +// atomic.Value. It makes deep copies of the map on every write to avoid +// acquiring the Mutex in Load. +type DeepCopyMap struct { + mu sync.Mutex + clean atomic.Value +} + +func (m *DeepCopyMap) Load(key interface{}) (value interface{}, ok bool) { + clean, _ := m.clean.Load().(map[interface{}]interface{}) + value, ok = clean[key] + return value, ok +} + +func (m *DeepCopyMap) Store(key, value interface{}) { + m.mu.Lock() + dirty := m.dirty() + dirty[key] = value + m.clean.Store(dirty) + m.mu.Unlock() +} + +func (m *DeepCopyMap) LoadOrStore(key, value interface{}) (actual interface{}, loaded bool) { + clean, _ := m.clean.Load().(map[interface{}]interface{}) + actual, loaded = clean[key] + if loaded { + return actual, loaded + } + + m.mu.Lock() + // Reload clean in case it changed while we were waiting on m.mu. + clean, _ = m.clean.Load().(map[interface{}]interface{}) + actual, loaded = clean[key] + if !loaded { + dirty := m.dirty() + dirty[key] = value + actual = value + m.clean.Store(dirty) + } + m.mu.Unlock() + return actual, loaded +} + +func (m *DeepCopyMap) Delete(key interface{}) { + m.mu.Lock() + dirty := m.dirty() + delete(dirty, key) + m.clean.Store(dirty) + m.mu.Unlock() +} + +func (m *DeepCopyMap) Range(f func(key, value interface{}) (shouldContinue bool)) { + clean, _ := m.clean.Load().(map[interface{}]interface{}) + for k, v := range clean { + if !f(k, v) { + break + } + } +} + +func (m *DeepCopyMap) dirty() map[interface{}]interface{} { + clean, _ := m.clean.Load().(map[interface{}]interface{}) + dirty := make(map[interface{}]interface{}, len(clean)+1) + for k, v := range clean { + dirty[k] = v + } + return dirty +} diff --git a/vendor/golang.org/x/sync/syncmap/map_test.go b/vendor/golang.org/x/sync/syncmap/map_test.go new file mode 100644 index 0000000..c883f17 --- /dev/null +++ b/vendor/golang.org/x/sync/syncmap/map_test.go @@ -0,0 +1,172 @@ +// Copyright 2016 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package syncmap_test + +import ( + "math/rand" + "reflect" + "runtime" + "sync" + "testing" + "testing/quick" + + "golang.org/x/sync/syncmap" +) + +type mapOp string + +const ( + opLoad = mapOp("Load") + opStore = mapOp("Store") + opLoadOrStore = mapOp("LoadOrStore") + opDelete = mapOp("Delete") +) + +var mapOps = [...]mapOp{opLoad, opStore, opLoadOrStore, opDelete} + +// mapCall is a quick.Generator for calls on mapInterface. +type mapCall struct { + op mapOp + k, v interface{} +} + +func (c mapCall) apply(m mapInterface) (interface{}, bool) { + switch c.op { + case opLoad: + return m.Load(c.k) + case opStore: + m.Store(c.k, c.v) + return nil, false + case opLoadOrStore: + return m.LoadOrStore(c.k, c.v) + case opDelete: + m.Delete(c.k) + return nil, false + default: + panic("invalid mapOp") + } +} + +type mapResult struct { + value interface{} + ok bool +} + +func randValue(r *rand.Rand) interface{} { + b := make([]byte, r.Intn(4)) + for i := range b { + b[i] = 'a' + byte(rand.Intn(26)) + } + return string(b) +} + +func (mapCall) Generate(r *rand.Rand, size int) reflect.Value { + c := mapCall{op: mapOps[rand.Intn(len(mapOps))], k: randValue(r)} + switch c.op { + case opStore, opLoadOrStore: + c.v = randValue(r) + } + return reflect.ValueOf(c) +} + +func applyCalls(m mapInterface, calls []mapCall) (results []mapResult, final map[interface{}]interface{}) { + for _, c := range calls { + v, ok := c.apply(m) + results = append(results, mapResult{v, ok}) + } + + final = make(map[interface{}]interface{}) + m.Range(func(k, v interface{}) bool { + final[k] = v + return true + }) + + return results, final +} + +func applyMap(calls []mapCall) ([]mapResult, map[interface{}]interface{}) { + return applyCalls(new(syncmap.Map), calls) +} + +func applyRWMutexMap(calls []mapCall) ([]mapResult, map[interface{}]interface{}) { + return applyCalls(new(RWMutexMap), calls) +} + +func applyDeepCopyMap(calls []mapCall) ([]mapResult, map[interface{}]interface{}) { + return applyCalls(new(DeepCopyMap), calls) +} + +func TestMapMatchesRWMutex(t *testing.T) { + if err := quick.CheckEqual(applyMap, applyRWMutexMap, nil); err != nil { + t.Error(err) + } +} + +func TestMapMatchesDeepCopy(t *testing.T) { + if err := quick.CheckEqual(applyMap, applyDeepCopyMap, nil); err != nil { + t.Error(err) + } +} + +func TestConcurrentRange(t *testing.T) { + const mapSize = 1 << 10 + + m := new(syncmap.Map) + for n := int64(1); n <= mapSize; n++ { + m.Store(n, int64(n)) + } + + done := make(chan struct{}) + var wg sync.WaitGroup + defer func() { + close(done) + wg.Wait() + }() + for g := int64(runtime.GOMAXPROCS(0)); g > 0; g-- { + r := rand.New(rand.NewSource(g)) + wg.Add(1) + go func(g int64) { + defer wg.Done() + for i := int64(0); ; i++ { + select { + case <-done: + return + default: + } + for n := int64(1); n < mapSize; n++ { + if r.Int63n(mapSize) == 0 { + m.Store(n, n*i*g) + } else { + m.Load(n) + } + } + } + }(g) + } + + iters := 1 << 10 + if testing.Short() { + iters = 16 + } + for n := iters; n > 0; n-- { + seen := make(map[int64]bool, mapSize) + + m.Range(func(ki, vi interface{}) bool { + k, v := ki.(int64), vi.(int64) + if v%k != 0 { + t.Fatalf("while Storing multiples of %v, Range saw value %v", k, v) + } + if seen[k] { + t.Fatalf("Range visited key %v twice", k) + } + seen[k] = true + return true + }) + + if len(seen) != mapSize { + t.Fatalf("Range visited %v elements of %v-element Map", len(seen), mapSize) + } + } +} From c54fc33f8ddc54e75d94c6f877bfd1fa0ea8c811 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Fri, 4 Aug 2017 10:39:35 -0400 Subject: [PATCH 06/32] Update and rename LICENSE.md to LICENSE --- LICENSE | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++ LICENSE.md | 21 ------- 2 files changed, 165 insertions(+), 21 deletions(-) create mode 100644 LICENSE delete mode 100644 LICENSE.md diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..65c5ca8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index 853b46d..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. From efb80d8aee72fbedca93117c7ccbb7ff90f476b5 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 30 Aug 2017 14:14:12 -0400 Subject: [PATCH 07/32] Add tests for the actual Kernel --- fixtures/connection_file.json | 11 ++ kernel.go | 2 +- kernel_test.go | 187 ++++++++++++++++++++++++++++++++++ 3 files changed, 199 insertions(+), 1 deletion(-) create mode 100644 fixtures/connection_file.json create mode 100644 kernel_test.go diff --git a/fixtures/connection_file.json b/fixtures/connection_file.json new file mode 100644 index 0000000..37bf45e --- /dev/null +++ b/fixtures/connection_file.json @@ -0,0 +1,11 @@ +{ + "control_port": 50160, + "shell_port": 57503, + "transport": "tcp", + "signature_scheme": "hmac-sha256", + "stdin_port": 52597, + "hb_port": 42540, + "ip": "127.0.0.1", + "iopub_port": 40885, + "key": "a0436f6c-1916-498b-8eb9-e81ab9368e84" +} diff --git a/kernel.go b/kernel.go index fcbb805..0751c68 100644 --- a/kernel.go +++ b/kernel.go @@ -314,7 +314,7 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { if !silent { var outContent OutputMsg - out, err := NewMsg("pyout", receipt.Msg) + out, err := NewMsg("execute_result", receipt.Msg) if err != nil { return err } diff --git a/kernel_test.go b/kernel_test.go new file mode 100644 index 0000000..4755d3d --- /dev/null +++ b/kernel_test.go @@ -0,0 +1,187 @@ +package main + +import ( + "errors" + "os" + "sync" + "testing" + "time" + + zmq "github.com/pebbe/zmq4" +) + +func TestMain(m *testing.M) { + os.Exit(runTest(m)) +} + +// runTest initializes the environment for the tests and allows for +// the proper exit if the test fails or succeeds. +func runTest(m *testing.M) int { + + // Start the kernel. + go runKernel("fixtures/connection_file.json") + + return m.Run() +} + +//============================================================================== + +// TestEvaluate tests the evaluation of consecutive cells.. +func TestEvaluate(t *testing.T) { + cases := []struct { + Input string + Output string + }{ + {"import \"fmt\"\na := 1\nfmt.Println(a)", "1\n"}, + {"a = 2\nfmt.Println(a)", "2\n"}, + {"func myFunc(x int) int {\nreturn x+1\n}\nfmt.Println(\"func defined\")", "func defined\n"}, + {"b := myFunc(1)\nfmt.Println(b)", "2\n"}, + } + + for k, tc := range cases { + + // Get the result. + result := testEvaluate(t, tc.Input, k) + + // Compare the result. + if result != tc.Output { + t.Fatalf("[test case %d]: result -> %s\n expected -> %s", k+1, result, tc.Output) + } + } +} + +// testEvaluate evaluates a cell. +func testEvaluate(t *testing.T, codeIn string, testCaseIndex int) string { + + // Define the shell socket. + addrShell := "tcp://127.0.0.1:57503" + addrIO := "tcp://127.0.0.1:40885" + + // Create a message. + msg, err := NewMsg("execute_request", ComposedMsg{}) + if err != nil { + t.Fatal("Create New Message:", err) + } + + // Fill in remaining header information. + msg.Header.Session = "ba65a05c-106a-4799-9a94-7f5631bbe216" + msg.Header.Username = "blah" + + // Fill in Metadata. + msg.Metadata = make(map[string]interface{}) + + // Fill in content. + content := make(map[string]interface{}) + content["code"] = codeIn + content["silent"] = false + msg.Content = content + + // Prepare the shell socket. + sock, err := zmq.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer sock.Close() + + if err = sock.Connect(addrShell); err != nil { + t.Fatal("sock.Connect:", err) + } + + // Prepare the IOPub subscriber. + sockIO, err := zmq.NewSocket(zmq.SUB) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer sockIO.Close() + + if err = sockIO.Connect(addrIO); err != nil { + t.Fatal("sockIO.Connect:", err) + } + + sockIO.SetSubscribe("") + + // Start the subscriber. + quit := make(chan struct{}) + var result string + var wg sync.WaitGroup + wg.Add(1) + go func() { + defer wg.Done() + for { + select { + + case <-quit: + return + + default: + msgParts, err := sockIO.RecvMessageBytes(0) + if err != nil { + t.Fatal("sockIO.RecvMessageBytes:", err) + } + + msgParsed, _, err := WireMsgToComposedMsg(msgParts, []byte("a0436f6c-1916-498b-8eb9-e81ab9368e84")) + if err != nil { + t.Fatal("WireMsgToComposedMsg:", err) + } + + if msgParsed.Header.MsgType == "execute_result" { + content, ok := msgParsed.Content.(map[string]interface{}) + if !ok { + t.Fatal("msgParsed.Content.(map[string]interface{})", errors.New("Could not cast type")) + } + data, ok := content["data"] + if !ok { + t.Fatal("content[\"data\"]", errors.New("Data field not present")) + } + dataMap, ok := data.(map[string]interface{}) + if !ok { + t.Fatal("data.(map[string]string)", errors.New("Could not cast type")) + } + rawResult, ok := dataMap["text/plain"] + if !ok { + t.Fatal("dataMap[\"text/plain\"]", errors.New("text/plain field not present")) + } + result, ok = rawResult.(string) + if !ok { + t.Fatal("rawResult.(string)", errors.New("Could not cast result as string")) + } + return + } + } + } + }() + + time.Sleep(1 * time.Second) + + // Send the execute request. + if _, err := sock.Send("", zmq.SNDMORE); err != nil { + t.Fatal("sock.Send:", err) + } + + msgParts, err := msg.ToWireMsg([]byte("a0436f6c-1916-498b-8eb9-e81ab9368e84")) + if err != nil { + t.Fatal("msg.ToWireMsg:", err) + } + + if _, err = sock.SendMessage(msgParts); err != nil { + t.Fatal("sock.SendMessage:", err) + } + + // Wait for the result. If we timeout, kill the subscriber. + done := make(chan struct{}) + go func() { + wg.Wait() + close(done) + }() + + // Compare the result to the expect and clean up. + select { + case <-done: + return result + case <-time.After(10 * time.Second): + close(quit) + t.Fatalf("[test case %d] Evaution timed out!", testCaseIndex+1) + } + + return "" +} From 0e04beadf0728c4549b120f8a5d65a242f546675 Mon Sep 17 00:00:00 2001 From: SpencerPark Date: Fri, 25 Aug 2017 21:56:25 -0400 Subject: [PATCH 08/32] Wrap common message construction patterns to clean up the jupyter communication. --- messages.go | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/messages.go b/messages.go index 783519e..3cbe054 100644 --- a/messages.go +++ b/messages.go @@ -6,7 +6,7 @@ import ( "encoding/hex" "encoding/json" - uuid "github.com/nu7hatch/gouuid" + "github.com/nu7hatch/gouuid" zmq "github.com/pebbe/zmq4" ) @@ -182,3 +182,29 @@ func NewMsg(msgType string, parent ComposedMsg) (ComposedMsg, error) { return msg, nil } + +// Publish creates a new ComposedMsg and sends it back to the return identities over the +// IOPub channel +func (receipt *msgReceipt) Publish(msgType string, content interface{}) error { + msg, err := NewMsg(msgType, receipt.Msg) + + if err != nil { + return err + } + + msg.Content = content + return receipt.SendResponse(receipt.Sockets.IOPubSocket, msg) +} + +// Reply creates a new ComposedMsg and sends it back to the return identities over the +// Shell channel +func (receipt *msgReceipt) Reply(msgType string, content interface{}) error { + msg, err := NewMsg(msgType, receipt.Msg) + + if err != nil { + return err + } + + msg.Content = content + return receipt.SendResponse(receipt.Sockets.ShellSocket, msg) +} From 825aefddc26a58f8fac07edaa11736345bdd7203 Mon Sep 17 00:00:00 2001 From: SpencerPark Date: Fri, 25 Aug 2017 23:45:04 -0400 Subject: [PATCH 09/32] Update messages to the 5.0 spec and encapsulate. --- kernel.go | 149 +++++++++++++++++++++++++--------------------------- main.go | 2 + messages.go | 130 ++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 204 insertions(+), 77 deletions(-) diff --git a/kernel.go b/kernel.go index 0751c68..d558d5e 100644 --- a/kernel.go +++ b/kernel.go @@ -9,6 +9,7 @@ import ( "io/ioutil" "log" "os" + "runtime" "strings" "github.com/cosmos72/gomacro/base" @@ -43,18 +44,38 @@ type SocketGroup struct { Key []byte } -// kernelInfo holds information about the igo kernel, for -// kernel_info_reply messages. -type kernelInfo struct { - ProtocolVersion []int `json:"protocol_version"` - Language string `json:"language"` -} - // kernelStatus holds a kernel state, for status broadcast messages. type kernelStatus struct { ExecutionState string `json:"execution_state"` } +// KernelLanguageInfo holds information about the language that this kernel executes code in +type kernelLanguageInfo struct { + Name string `json:"name"` + Version string `json:"version"` + MIMEType string `json:"mimetype"` + FileExtension string `json:"file_extension"` + PygmentsLexer string `json:"pygments_lexer"` + CodeMirrorMode string `json:"codemirror_mode"` + NBConvertExporter string `json:"nbconvert_exporter"` +} + +// HelpLink stores data to be displayed in the help menu of the notebook +type helpLink struct { + Text string `json:"text"` + URL string `json:"url"` +} + +// KernelInfo holds information about the igo kernel, for kernel_info_reply messages. +type kernelInfo struct { + ProtocolVersion string `json:"protocol_version"` + Implementation string `json:"implementation"` + ImplementationVersion string `json:"implementation_version"` + LanguageInfo kernelLanguageInfo `json:"language_info"` + Banner string `json:"banner"` + HelpLinks []helpLink `json:"help_links"` +} + // shutdownReply encodes a boolean indication of stutdown/restart type shutdownReply struct { Restart bool `json:"restart"` @@ -120,11 +141,11 @@ func runKernel(connectionFile string) { handleShellMsg(ir, msgReceipt{msg, ids, sockets}) - // TODO Handle stdin socket. + // TODO Handle stdin socket. case sockets.StdinSocket: sockets.StdinSocket.RecvMessageBytes(0) - // Handle control messages. + // Handle control messages. case sockets.ControlSocket: msgParts, err = sockets.ControlSocket.RecvMessageBytes(0) if err != nil { @@ -210,31 +231,29 @@ func handleShellMsg(ir *classic.Interp, receipt msgReceipt) { // sendKernelInfo sends a kernel_info_reply message. func sendKernelInfo(receipt msgReceipt) error { - reply, err := NewMsg("kernel_info_reply", receipt.Msg) - if err != nil { - return err - } - - reply.Content = kernelInfo{[]int{4, 0}, "go"} - if err := receipt.SendResponse(receipt.Sockets.ShellSocket, reply); err != nil { - return err - } - - return nil + return receipt.Reply("kernel_info_reply", + kernelInfo{ + ProtocolVersion: "5.0", + Implementation: "gophernotes", + ImplementationVersion: Version, + Banner: fmt.Sprintf("Go kernel: gophernotes - v%s", Version), + LanguageInfo: kernelLanguageInfo{ + Name: "go", + Version: runtime.Version(), + FileExtension: ".go", + }, + HelpLinks: []helpLink{ + {Text: "Go", URL: "https://golang.org/"}, + {Text: "gophernotes", URL: "https://github.com/gopherdata/gophernotes"}, + }, + }, + ) } // handleExecuteRequest runs code from an execute_request method, // and sends the various reply messages. func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { - - // Prepare the reply message. - reply, err := NewMsg("execute_reply", receipt.Msg) - if err != nil { - return err - } - - content := make(map[string]interface{}) - + // Extract the data from the request reqcontent := receipt.Msg.Content.(map[string]interface{}) code := reqcontent["code"].(string) in := bufio.NewReader(strings.NewReader(code)) @@ -244,8 +263,18 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { ExecCounter++ } + // Prepare the map that will hold the reply content + content := make(map[string]interface{}) content["execution_count"] = ExecCounter + // Tell the front-end that the kernel is working and when finished notify the + // front-end that the kernel is idle again + receipt.PublishKernelBusy() + defer receipt.PublishKernelIdle() + + // Tell the front-end what the kernel is about to execute + receipt.PublishExecutionInput(ExecCounter, code) + // Redirect the standard out from the REPL. oldStdout := os.Stdout rOut, wOut, err := os.Pipe() @@ -306,25 +335,15 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { wErr.Close() stdErr := <-outStderr + // TODO write stdout and stderr to streams rather than publishing as results + if len(val) > 0 { content["status"] = "ok" - content["payload"] = make([]map[string]interface{}, 0) - content["user_variables"] = make(map[string]string) content["user_expressions"] = make(map[string]string) - if !silent { - var outContent OutputMsg - - out, err := NewMsg("execute_result", receipt.Msg) - if err != nil { - return err - } - outContent.Execcount = ExecCounter - outContent.Data = make(map[string]string) - outContent.Data["text/plain"] = val - outContent.Metadata = make(map[string]interface{}) - out.Content = outContent - receipt.SendResponse(receipt.Sockets.IOPubSocket, out) + if !silent { + // Publish the result of the execution + receipt.PublishExecutionResult(ExecCounter, val) } } @@ -334,51 +353,29 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { content["evalue"] = stdErr content["traceback"] = nil - errormsg, err := NewMsg("pyerr", receipt.Msg) - if err != nil { - return err - } - - errormsg.Content = ErrMsg{"Error", stdErr, []string{stdErr}} - receipt.SendResponse(receipt.Sockets.IOPubSocket, errormsg) + receipt.PublishExecutionError(stdErr, stdErr) } // Send the output back to the notebook. - reply.Content = content - - if err := receipt.SendResponse(receipt.Sockets.ShellSocket, reply); err != nil { - return err - } - - idle, err := NewMsg("status", receipt.Msg) - if err != nil { - return err - } - - idle.Content = kernelStatus{"idle"} - - if err := receipt.SendResponse(receipt.Sockets.IOPubSocket, idle); err != nil { - return err - } - - return nil + return receipt.Reply("execute_reply", content) } // handleShutdownRequest sends a "shutdown" message func handleShutdownRequest(receipt msgReceipt) { - reply, err := NewMsg("shutdown_reply", receipt.Msg) - if err != nil { - log.Fatal(err) - } - content := receipt.Msg.Content.(map[string]interface{}) restart := content["restart"].(bool) - reply.Content = shutdownReply{restart} - if err := receipt.SendResponse(receipt.Sockets.ShellSocket, reply); err != nil { + err := receipt.Reply("shutdown_reply", + shutdownReply{ + Restart: restart, + }, + ) + + if err != nil { log.Fatal(err) } + log.Println("Shutting down in response to shutdown_request") os.Exit(0) } diff --git a/main.go b/main.go index 8606328..3f34d1d 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,8 @@ import ( "log" ) +const Version string = "1.0.0" + func main() { // Parse the connection file. diff --git a/messages.go b/messages.go index 3cbe054..e31ca37 100644 --- a/messages.go +++ b/messages.go @@ -71,7 +71,7 @@ func WireMsgToComposedMsg(msgparts [][]byte, signkey []byte) (ComposedMsg, [][]b var msg ComposedMsg if len(signkey) != 0 { mac := hmac.New(sha256.New, signkey) - for _, msgpart := range msgparts[i+2 : i+6] { + for _, msgpart := range msgparts[i+2: i+6] { mac.Write(msgpart) } signature := make([]byte, hex.DecodedLen(len(msgparts[i+1]))) @@ -208,3 +208,131 @@ func (receipt *msgReceipt) Reply(msgType string, content interface{}) error { msg.Content = content return receipt.SendResponse(receipt.Sockets.ShellSocket, msg) } + +// MIMEDataBundle holds data that can be presented in multiple formats. The keys are MIME types +// and the values are the data formatted with respect to it's MIME type. All bundle should contain +// at least a "text/plain" representation with a string value. +type MIMEDataBundle map[string]interface{} + +// NewTextMIMEDataBundle creates a MIMEDataBundle that only contains a text representation described +// the the parameter 'value' +func NewTextMIMEDataBundle(value string) MIMEDataBundle { + return MIMEDataBundle{ + "text/plain": value, + } +} + +// KernelStatus holds a kernel execution state, for status broadcast messages. +type KernelStatus struct { + ExecutionState string `json:"execution_state"` +} + +// PublishKernelStarting publishes a status message notifying front-ends that the kernel is +// starting up. +func (receipt *msgReceipt) PublishKernelStarting() { + receipt.Publish("status", + KernelStatus{ + ExecutionState: "starting", + }, + ) +} + +// PublishKernelBusy publishes a status message notifying front-ends that the kernel is +// doing work. +func (receipt *msgReceipt) PublishKernelBusy() { + receipt.Publish("status", + KernelStatus{ + ExecutionState: "busy", + }, + ) +} + +// PublishKernelIdle publishes a status message notifying front-ends that the kernel is +// free. +func (receipt *msgReceipt) PublishKernelIdle() { + receipt.Publish("status", + KernelStatus{ + ExecutionState: "idle", + }, + ) +} + +// ExecuteInput holds the source code being executed and the execution counter value +// associated with source being run. +type ExecuteInput struct { + ExecCount int `json:"execution_count"` + Code string `json:"code"` +} + +// PublishExecutionInput publishes a status message notifying front-ends of what code is +// currently being executed. +func (receipt *msgReceipt) PublishExecutionInput(execCount int, code string) { + receipt.Publish("execute_input", + ExecuteInput{ + ExecCount: execCount, + Code: code, + }, + ) +} + +// ExecuteResult holds the output to the 'ExecCount'th code execution. +type ExecuteResult struct { + ExecCount int `json:"execution_count"` + Data MIMEDataBundle `json:"data"` + Metadata MIMEDataBundle `json:"metadata"` +} + +// PublishExecuteResult publishes the result of the 'execCount'th execution as a string. +func (receipt *msgReceipt) PublishExecutionResult(execCount int, output string) { + receipt.Publish("execute_result", + ExecuteResult{ + ExecCount: execCount, + Data: NewTextMIMEDataBundle(output), + Metadata: make(MIMEDataBundle), + }, + ) +} + +// ExecuteError holds data describing an error encountered during execution. +type ExecuteError struct { + Name string `json:"ename"` + Value string `json:"evalue"` + Trace []string `json:"traceback"` +} + +// PublishExecuteResult publishes a serialized error that was encountered during execution. +func (receipt *msgReceipt) PublishExecutionError(err string, trace string) { + receipt.Publish("error", + ExecuteError{ + Name: "ERROR", + Value: err, + Trace: []string{trace}, + }, + ) +} + +// WriteStreamData holds data to be written to a stream (stdout, stderr) +type WriteStreamData struct { + Stream string `json:"name"` + Data string `json:"text"` +} + +// PublishWriteStdOut publishes the data string to the front-end's stdout +func (receipt *msgReceipt) PublishWriteStdOut(data string) { + receipt.Publish("stream", + WriteStreamData{ + Stream: "stdout", + Data: data, + }, + ) +} + +// PublishWriteStdErr publishes the data string to the front-end's stderr +func (receipt *msgReceipt) PublishWriteStdErr(data string) { + receipt.Publish("stream", + WriteStreamData{ + Stream: "stderr", + Data: data, + }, + ) +} From e287c995dd1407b1aee794ffa313c8a651f35217 Mon Sep 17 00:00:00 2001 From: SpencerPark Date: Thu, 7 Sep 2017 20:51:43 -0400 Subject: [PATCH 10/32] Handle errors from publish messages, clean up protocol wrappers, and fix godoc comment formatting. --- kernel.go | 51 +++++++++++-------- messages.go | 137 ++++++++++++++++++++-------------------------------- 2 files changed, 83 insertions(+), 105 deletions(-) diff --git a/kernel.go b/kernel.go index d558d5e..0c86e33 100644 --- a/kernel.go +++ b/kernel.go @@ -49,7 +49,7 @@ type kernelStatus struct { ExecutionState string `json:"execution_state"` } -// KernelLanguageInfo holds information about the language that this kernel executes code in +// KernelLanguageInfo holds information about the language that this kernel executes code in. type kernelLanguageInfo struct { Name string `json:"name"` Version string `json:"version"` @@ -60,7 +60,7 @@ type kernelLanguageInfo struct { NBConvertExporter string `json:"nbconvert_exporter"` } -// HelpLink stores data to be displayed in the help menu of the notebook +// HelpLink stores data to be displayed in the help menu of the notebook. type helpLink struct { Text string `json:"text"` URL string `json:"url"` @@ -76,7 +76,7 @@ type kernelInfo struct { HelpLinks []helpLink `json:"help_links"` } -// shutdownReply encodes a boolean indication of stutdown/restart +// shutdownReply encodes a boolean indication of stutdown/restart. type shutdownReply struct { Restart bool `json:"restart"` } @@ -263,17 +263,25 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { ExecCounter++ } - // Prepare the map that will hold the reply content + // Prepare the map that will hold the reply content. content := make(map[string]interface{}) content["execution_count"] = ExecCounter // Tell the front-end that the kernel is working and when finished notify the - // front-end that the kernel is idle again - receipt.PublishKernelBusy() - defer receipt.PublishKernelIdle() + // front-end that the kernel is idle again. + if err := receipt.PublishKernelStatus(KernelBusy); err != nil { + log.Printf("Error publishing kernel status 'busy': %v\n", err) + } + defer func() { + if err := receipt.PublishKernelStatus(KernelIdle); err != nil { + log.Printf("Error publishing kernel status 'idle': %v\n", err) + } + }() - // Tell the front-end what the kernel is about to execute - receipt.PublishExecutionInput(ExecCounter, code) + // Tell the front-end what the kernel is about to execute. + if err := receipt.PublishExecutionInput(ExecCounter, code); err != nil { + log.Printf("Error publishing execution input: %v\n", err) + } // Redirect the standard out from the REPL. oldStdout := os.Stdout @@ -295,7 +303,7 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { env.Options &^= base.OptShowPrompt env.Line = 0 - // Perform the first iteration manually, to collect comments + // Perform the first iteration manually, to collect comments. var comments string str, firstToken := env.ReadMultiline(in, base.ReadOptCollectAllComments) if firstToken >= 0 { @@ -342,8 +350,10 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { content["user_expressions"] = make(map[string]string) if !silent { - // Publish the result of the execution - receipt.PublishExecutionResult(ExecCounter, val) + // Publish the result of the execution. + if err := receipt.PublishExecutionResult(ExecCounter, val); err != nil { + log.Printf("Error publishing execution result: %v\n", err) + } } } @@ -353,29 +363,28 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { content["evalue"] = stdErr content["traceback"] = nil - receipt.PublishExecutionError(stdErr, stdErr) + if err := receipt.PublishExecutionError(stdErr, []string{stdErr}); err != nil { + log.Printf("Error publishing execution error: %v\n", err) + } } // Send the output back to the notebook. return receipt.Reply("execute_reply", content) } -// handleShutdownRequest sends a "shutdown" message +// handleShutdownRequest sends a "shutdown" message. func handleShutdownRequest(receipt msgReceipt) { content := receipt.Msg.Content.(map[string]interface{}) restart := content["restart"].(bool) - err := receipt.Reply("shutdown_reply", - shutdownReply{ - Restart: restart, - }, - ) + reply := shutdownReply{ + Restart: restart, + } - if err != nil { + if err := receipt.Reply("shutdown_reply", reply); err != nil { log.Fatal(err) } - log.Println("Shutting down in response to shutdown_request") os.Exit(0) } diff --git a/messages.go b/messages.go index e31ca37..3185ef5 100644 --- a/messages.go +++ b/messages.go @@ -71,7 +71,7 @@ func WireMsgToComposedMsg(msgparts [][]byte, signkey []byte) (ComposedMsg, [][]b var msg ComposedMsg if len(signkey) != 0 { mac := hmac.New(sha256.New, signkey) - for _, msgpart := range msgparts[i+2: i+6] { + for _, msgpart := range msgparts[i+2 : i+6] { mac.Write(msgpart) } signature := make([]byte, hex.DecodedLen(len(msgparts[i+1]))) @@ -184,7 +184,7 @@ func NewMsg(msgType string, parent ComposedMsg) (ComposedMsg, error) { } // Publish creates a new ComposedMsg and sends it back to the return identities over the -// IOPub channel +// IOPub channel. func (receipt *msgReceipt) Publish(msgType string, content interface{}) error { msg, err := NewMsg(msgType, receipt.Msg) @@ -197,7 +197,7 @@ func (receipt *msgReceipt) Publish(msgType string, content interface{}) error { } // Reply creates a new ComposedMsg and sends it back to the return identities over the -// Shell channel +// Shell channel. func (receipt *msgReceipt) Reply(msgType string, content interface{}) error { msg, err := NewMsg(msgType, receipt.Msg) @@ -215,77 +215,54 @@ func (receipt *msgReceipt) Reply(msgType string, content interface{}) error { type MIMEDataBundle map[string]interface{} // NewTextMIMEDataBundle creates a MIMEDataBundle that only contains a text representation described -// the the parameter 'value' +// the the parameter 'value'. func NewTextMIMEDataBundle(value string) MIMEDataBundle { return MIMEDataBundle{ "text/plain": value, } } -// KernelStatus holds a kernel execution state, for status broadcast messages. -type KernelStatus struct { - ExecutionState string `json:"execution_state"` -} - -// PublishKernelStarting publishes a status message notifying front-ends that the kernel is -// starting up. -func (receipt *msgReceipt) PublishKernelStarting() { - receipt.Publish("status", - KernelStatus{ - ExecutionState: "starting", - }, - ) -} +type KernelStatus string -// PublishKernelBusy publishes a status message notifying front-ends that the kernel is -// doing work. -func (receipt *msgReceipt) PublishKernelBusy() { - receipt.Publish("status", - KernelStatus{ - ExecutionState: "busy", - }, - ) -} +const ( + KernelStarting KernelStatus = "starting" + KernelBusy = "busy" + KernelIdle = "idle" +) -// PublishKernelIdle publishes a status message notifying front-ends that the kernel is -// free. -func (receipt *msgReceipt) PublishKernelIdle() { - receipt.Publish("status", - KernelStatus{ - ExecutionState: "idle", +// PublishKernelStatus publishes a status message notifying front-ends of the state the kernel is in. +func (receipt *msgReceipt) PublishKernelStatus(status KernelStatus) error { + return receipt.Publish("status", + struct { + ExecutionState KernelStatus `json:"execution_state"` + }{ + ExecutionState: status, }, ) } -// ExecuteInput holds the source code being executed and the execution counter value -// associated with source being run. -type ExecuteInput struct { - ExecCount int `json:"execution_count"` - Code string `json:"code"` -} - // PublishExecutionInput publishes a status message notifying front-ends of what code is // currently being executed. -func (receipt *msgReceipt) PublishExecutionInput(execCount int, code string) { - receipt.Publish("execute_input", - ExecuteInput{ +func (receipt *msgReceipt) PublishExecutionInput(execCount int, code string) error { + return receipt.Publish("execute_input", + struct { + ExecCount int `json:"execution_count"` + Code string `json:"code"` + }{ ExecCount: execCount, Code: code, }, ) } -// ExecuteResult holds the output to the 'ExecCount'th code execution. -type ExecuteResult struct { - ExecCount int `json:"execution_count"` - Data MIMEDataBundle `json:"data"` - Metadata MIMEDataBundle `json:"metadata"` -} - -// PublishExecuteResult publishes the result of the 'execCount'th execution as a string. -func (receipt *msgReceipt) PublishExecutionResult(execCount int, output string) { - receipt.Publish("execute_result", - ExecuteResult{ +// PublishExecuteResult publishes the result of the `execCount` execution as a string. +func (receipt *msgReceipt) PublishExecutionResult(execCount int, output string) error { + return receipt.Publish("execute_result", + struct { + ExecCount int `json:"execution_count"` + Data MIMEDataBundle `json:"data"` + Metadata MIMEDataBundle `json:"metadata"` + }{ ExecCount: execCount, Data: NewTextMIMEDataBundle(output), Metadata: make(MIMEDataBundle), @@ -293,45 +270,37 @@ func (receipt *msgReceipt) PublishExecutionResult(execCount int, output string) ) } -// ExecuteError holds data describing an error encountered during execution. -type ExecuteError struct { - Name string `json:"ename"` - Value string `json:"evalue"` - Trace []string `json:"traceback"` -} - // PublishExecuteResult publishes a serialized error that was encountered during execution. -func (receipt *msgReceipt) PublishExecutionError(err string, trace string) { - receipt.Publish("error", - ExecuteError{ +func (receipt *msgReceipt) PublishExecutionError(err string, trace []string) error { + return receipt.Publish("error", + struct { + Name string `json:"ename"` + Value string `json:"evalue"` + Trace []string `json:"traceback"` + }{ Name: "ERROR", Value: err, - Trace: []string{trace}, + Trace: trace, }, ) } -// WriteStreamData holds data to be written to a stream (stdout, stderr) -type WriteStreamData struct { - Stream string `json:"name"` - Data string `json:"text"` -} +type Stream string -// PublishWriteStdOut publishes the data string to the front-end's stdout -func (receipt *msgReceipt) PublishWriteStdOut(data string) { - receipt.Publish("stream", - WriteStreamData{ - Stream: "stdout", - Data: data, - }, - ) -} +const ( + StreamStdout Stream = "stdout" + StreamStderr = "stderr" +) -// PublishWriteStdErr publishes the data string to the front-end's stderr -func (receipt *msgReceipt) PublishWriteStdErr(data string) { - receipt.Publish("stream", - WriteStreamData{ - Stream: "stderr", +// PublishWriteStream prints the data string to a stream on the front-end. This is +// either `StreamStdout` or `StreamStderr`. +func (receipt *msgReceipt) PublishWriteStream(stream Stream, data string) error { + return receipt.Publish("stream", + struct { + Stream Stream `json:"name"` + Data string `json:"text"` + }{ + Stream: stream, Data: data, }, ) From 1d4547ee7182762aa97bb308f16976084808a64c Mon Sep 17 00:00:00 2001 From: SpencerPark Date: Tue, 12 Sep 2017 10:18:28 -0400 Subject: [PATCH 11/32] Add 'date' and required 'version' field to the message header --- kernel.go | 2 +- main.go | 1 + messages.go | 13 +++++++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/kernel.go b/kernel.go index 0c86e33..5fa8800 100644 --- a/kernel.go +++ b/kernel.go @@ -233,7 +233,7 @@ func handleShellMsg(ir *classic.Interp, receipt msgReceipt) { func sendKernelInfo(receipt msgReceipt) error { return receipt.Reply("kernel_info_reply", kernelInfo{ - ProtocolVersion: "5.0", + ProtocolVersion: ProtocolVersion, Implementation: "gophernotes", ImplementationVersion: Version, Banner: fmt.Sprintf("Go kernel: gophernotes - v%s", Version), diff --git a/main.go b/main.go index 3f34d1d..9ae36e2 100644 --- a/main.go +++ b/main.go @@ -6,6 +6,7 @@ import ( ) const Version string = "1.0.0" +const ProtocolVersion string = "5.0" func main() { diff --git a/messages.go b/messages.go index 3185ef5..5e7fe9d 100644 --- a/messages.go +++ b/messages.go @@ -5,6 +5,7 @@ import ( "crypto/sha256" "encoding/hex" "encoding/json" + "time" "github.com/nu7hatch/gouuid" zmq "github.com/pebbe/zmq4" @@ -12,10 +13,12 @@ import ( // MsgHeader encodes header info for ZMQ messages. type MsgHeader struct { - MsgID string `json:"msg_id"` - Username string `json:"username"` - Session string `json:"session"` - MsgType string `json:"msg_type"` + MsgID string `json:"msg_id"` + Username string `json:"username"` + Session string `json:"session"` + MsgType string `json:"msg_type"` + ProtocolVersion string `json:"version"` + Timestamp string `json:"date"` } // ComposedMsg represents an entire message in a high-level structure. @@ -173,6 +176,8 @@ func NewMsg(msgType string, parent ComposedMsg) (ComposedMsg, error) { msg.Header.Session = parent.Header.Session msg.Header.Username = parent.Header.Username msg.Header.MsgType = msgType + msg.Header.ProtocolVersion = ProtocolVersion + msg.Header.Timestamp = time.Now().UTC().Format(time.RFC3339) u, err := uuid.NewV4() if err != nil { From f75e44fd9fbfd33e5e1a0c5d019ab71c75838d12 Mon Sep 17 00:00:00 2001 From: SpencerPark Date: Tue, 12 Sep 2017 11:12:59 -0400 Subject: [PATCH 12/32] Remove unused types/methods and clean up the messages interface. --- kernel.go | 15 ++++++----- messages.go | 76 ++++++++++++----------------------------------------- 2 files changed, 25 insertions(+), 66 deletions(-) diff --git a/kernel.go b/kernel.go index 5fa8800..5fe6de1 100644 --- a/kernel.go +++ b/kernel.go @@ -44,11 +44,6 @@ type SocketGroup struct { Key []byte } -// kernelStatus holds a kernel state, for status broadcast messages. -type kernelStatus struct { - ExecutionState string `json:"execution_state"` -} - // KernelLanguageInfo holds information about the language that this kernel executes code in. type kernelLanguageInfo struct { Name string `json:"name"` @@ -81,6 +76,12 @@ type shutdownReply struct { Restart bool `json:"restart"` } +const ( + kernelStarting = "starting" + kernelBusy = "busy" + kernelIdle = "idle" +) + // runKernel is the main entry point to start the kernel. func runKernel(connectionFile string) { @@ -269,11 +270,11 @@ func handleExecuteRequest(ir *classic.Interp, receipt msgReceipt) error { // Tell the front-end that the kernel is working and when finished notify the // front-end that the kernel is idle again. - if err := receipt.PublishKernelStatus(KernelBusy); err != nil { + if err := receipt.PublishKernelStatus(kernelBusy); err != nil { log.Printf("Error publishing kernel status 'busy': %v\n", err) } defer func() { - if err := receipt.PublishKernelStatus(KernelIdle); err != nil { + if err := receipt.PublishKernelStatus(kernelIdle); err != nil { log.Printf("Error publishing kernel status 'idle': %v\n", err) } }() diff --git a/messages.go b/messages.go index 5e7fe9d..49cbd68 100644 --- a/messages.go +++ b/messages.go @@ -37,19 +37,10 @@ type msgReceipt struct { Sockets SocketGroup } -// OutputMsg holds the data for a pyout message. -type OutputMsg struct { - Execcount int `json:"execution_count"` - Data map[string]string `json:"data"` - Metadata map[string]interface{} `json:"metadata"` -} - -// ErrMsg encodes the traceback of errors output to the notebook. -type ErrMsg struct { - EName string `json:"ename"` - EValue string `json:"evalue"` - Traceback []string `json:"traceback"` -} +// bundledMIMEData holds data that can be presented in multiple formats. The keys are MIME types +// and the values are the data formatted with respect to it's MIME type. All bundles should contain +// at least a "text/plain" representation with a string value. +type bundledMIMEData map[string]interface{} // InvalidSignatureError is returned when the signature on a received message does not // validate. @@ -214,32 +205,20 @@ func (receipt *msgReceipt) Reply(msgType string, content interface{}) error { return receipt.SendResponse(receipt.Sockets.ShellSocket, msg) } -// MIMEDataBundle holds data that can be presented in multiple formats. The keys are MIME types -// and the values are the data formatted with respect to it's MIME type. All bundle should contain -// at least a "text/plain" representation with a string value. -type MIMEDataBundle map[string]interface{} - -// NewTextMIMEDataBundle creates a MIMEDataBundle that only contains a text representation described -// the the parameter 'value'. -func NewTextMIMEDataBundle(value string) MIMEDataBundle { - return MIMEDataBundle{ +// newTextMIMEDataBundle creates a bundledMIMEData that only contains a text representation described +// by the value parameter. +func newTextBundledMIMEData(value string) bundledMIMEData { + return bundledMIMEData{ "text/plain": value, } } -type KernelStatus string - -const ( - KernelStarting KernelStatus = "starting" - KernelBusy = "busy" - KernelIdle = "idle" -) - -// PublishKernelStatus publishes a status message notifying front-ends of the state the kernel is in. -func (receipt *msgReceipt) PublishKernelStatus(status KernelStatus) error { +// PublishKernelStatus publishes a status message notifying front-ends of the state the kernel is in. Supports +// states "starting", "busy", and "idle". +func (receipt *msgReceipt) PublishKernelStatus(status string) error { return receipt.Publish("status", struct { - ExecutionState KernelStatus `json:"execution_state"` + ExecutionState string `json:"execution_state"` }{ ExecutionState: status, }, @@ -264,13 +243,13 @@ func (receipt *msgReceipt) PublishExecutionInput(execCount int, code string) err func (receipt *msgReceipt) PublishExecutionResult(execCount int, output string) error { return receipt.Publish("execute_result", struct { - ExecCount int `json:"execution_count"` - Data MIMEDataBundle `json:"data"` - Metadata MIMEDataBundle `json:"metadata"` + ExecCount int `json:"execution_count"` + Data bundledMIMEData `json:"data"` + Metadata bundledMIMEData `json:"metadata"` }{ ExecCount: execCount, - Data: NewTextMIMEDataBundle(output), - Metadata: make(MIMEDataBundle), + Data: newTextBundledMIMEData(output), + Metadata: make(bundledMIMEData), }, ) } @@ -289,24 +268,3 @@ func (receipt *msgReceipt) PublishExecutionError(err string, trace []string) err }, ) } - -type Stream string - -const ( - StreamStdout Stream = "stdout" - StreamStderr = "stderr" -) - -// PublishWriteStream prints the data string to a stream on the front-end. This is -// either `StreamStdout` or `StreamStderr`. -func (receipt *msgReceipt) PublishWriteStream(stream Stream, data string) error { - return receipt.Publish("stream", - struct { - Stream Stream `json:"name"` - Data string `json:"text"` - }{ - Stream: stream, - Data: data, - }, - ) -} From 1210b4c16d1bf3dba01172c140a58d4fea51151c Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Tue, 12 Sep 2017 17:47:02 -0400 Subject: [PATCH 13/32] improve logging in the the kernel tests --- kernel_test.go | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/kernel_test.go b/kernel_test.go index 4755d3d..357ed19 100644 --- a/kernel_test.go +++ b/kernel_test.go @@ -10,6 +10,11 @@ import ( zmq "github.com/pebbe/zmq4" ) +const ( + failure = "\u2717" + success = "\u2713" +) + func TestMain(m *testing.M) { os.Exit(runTest(m)) } @@ -34,19 +39,26 @@ func TestEvaluate(t *testing.T) { }{ {"import \"fmt\"\na := 1\nfmt.Println(a)", "1\n"}, {"a = 2\nfmt.Println(a)", "2\n"}, - {"func myFunc(x int) int {\nreturn x+1\n}\nfmt.Println(\"func defined\")", "func defined\n"}, + {"func myFunc(x int) int {\nreturn x+1\n}\nfmt.Println(\"func defined\")", "func dfined\n"}, {"b := myFunc(1)\nfmt.Println(b)", "2\n"}, } + t.Logf("Should be able to evaluate valid code in notebook cells.") + for k, tc := range cases { + // Give a progress report. + t.Logf(" Evaluating code snippet %d/%d.", k+1, len(cases)) + // Get the result. result := testEvaluate(t, tc.Input, k) // Compare the result. if result != tc.Output { - t.Fatalf("[test case %d]: result -> %s\n expected -> %s", k+1, result, tc.Output) + t.Errorf("\t%s Test case produced unexpected results.", failure) + continue } + t.Logf("\t%s Should return the correct cell output.", success) } } From 6050317062c35b04f6f4809651bcd263e0d3742d Mon Sep 17 00:00:00 2001 From: SpencerPark Date: Wed, 13 Sep 2017 17:20:56 -0400 Subject: [PATCH 14/32] Create a test jupyter client for capturing interaction with the kernel during testing --- kernel_test.go | 367 ++++++++++++++++++++++++++++++++++--------------- 1 file changed, 259 insertions(+), 108 deletions(-) diff --git a/kernel_test.go b/kernel_test.go index 357ed19..f02c157 100644 --- a/kernel_test.go +++ b/kernel_test.go @@ -2,8 +2,9 @@ package main import ( "errors" + "fmt" "os" - "sync" + "strings" "testing" "time" @@ -15,6 +16,194 @@ const ( success = "\u2713" ) +const ( + connectionKey = "a0436f6c-1916-498b-8eb9-e81ab9368e84" + sessionID = "ba65a05c-106a-4799-9a94-7f5631bbe216" + transport = "tcp" + ip = "127.0.0.1" + shellPort = 57503 + iopubPort = 40885 +) + +type testJupyterClient struct { + shellSocket *zmq.Socket + ioSocket *zmq.Socket +} + +// newTestJupyterClient creates and connects a fresh client to the kernel. Upon error, newTestJupyterClient +// will Fail the test. +func newTestJupyterClient(t *testing.T) (testJupyterClient, func()) { + addrShell := fmt.Sprintf("%s://%s:%d", transport, ip, shellPort) + addrIO := fmt.Sprintf("%s://%s:%d", transport, ip, iopubPort) + + // Prepare the shell socket. + shell, err := zmq.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("NewSocket:", err) + } + + if err = shell.Connect(addrShell); err != nil { + t.Fatal("shell.Connect:", err) + } + + // Prepare the IOPub socket. + iopub, err := zmq.NewSocket(zmq.SUB) + if err != nil { + t.Fatal("NewSocket:", err) + } + + if err = iopub.Connect(addrIO); err != nil { + t.Fatal("iopub.Connect:", err) + } + + if err = iopub.SetSubscribe(""); err != nil { + t.Fatal("iopub.SetSubscribe", err) + } + + // wait for a second to give the tcp connection time to complete to avoid missing the early pub messages + time.Sleep(1 * time.Second) + + return testJupyterClient{shell, iopub}, func() { + if err := shell.Close(); err != nil { + t.Fatal("shell.Close", err) + } + if err = iopub.Close(); err != nil { + t.Fatal("iopub.Close", err) + } + } +} + +// sendShellRequest sends a message to the kernel over the shell channel. Upon error, sendShellRequest +// will Fail the test. +func (client *testJupyterClient) sendShellRequest(t *testing.T, request ComposedMsg) { + if _, err := client.shellSocket.Send("", zmq.SNDMORE); err != nil { + t.Fatal("shellSocket.Send:", err) + } + + reqMsgParts, err := request.ToWireMsg([]byte(connectionKey)) + if err != nil { + t.Fatal("request.ToWireMsg:", err) + } + + if _, err = client.shellSocket.SendMessage(reqMsgParts); err != nil { + t.Fatal("shellSocket.SendMessage:", err) + } +} + +// recvShellReply tries to read a reply message from the shell channel. It will timeout after the given +// timeout delay. Upon error or timeout, recvShellReply will Fail the test. +func (client *testJupyterClient) recvShellReply(t *testing.T, timeout time.Duration) (reply ComposedMsg) { + ch := make(chan ComposedMsg) + + go func() { + repMsgParts, err := client.shellSocket.RecvMessageBytes(0) + if err != nil { + t.Fatal("Shell socket RecvMessageBytes:", err) + } + + msgParsed, _, err := WireMsgToComposedMsg(repMsgParts, []byte(connectionKey)) + if err != nil { + t.Fatal("Could not parse wire message:", err) + } + + ch <- msgParsed + }() + + select { + case reply = <-ch: + case <-time.After(timeout): + t.Fatal("recvShellReply timed out") + } + + return +} + +// recvIOSub tries to read a published message from the IOPub channel. It will timeout after the given +// timeout delay. Upon error or timeout, recvIOSub will Fail the test. +func (client *testJupyterClient) recvIOSub(t *testing.T, timeout time.Duration) (sub ComposedMsg) { + ch := make(chan ComposedMsg) + + go func() { + repMsgParts, err := client.ioSocket.RecvMessageBytes(0) + if err != nil { + t.Fatal("IOPub socket RecvMessageBytes:", err) + } + + msgParsed, _, err := WireMsgToComposedMsg(repMsgParts, []byte(connectionKey)) + if err != nil { + t.Fatal("Could not parse wire message:", err) + } + + ch <- msgParsed + }() + + select { + case sub = <-ch: + case <-time.After(timeout): + t.Fatal("recvIOSub timed out") + } + + return +} + +// request preforms a request and awaits a reply on the shell channel. Additionally all messages on the IOPub channel +// between the opening 'busy' messages and closing 'idle' message are captured and returned. The request will timeout +// after the given timeout delay. Upon error or timeout, request will Fail the test. +func (client *testJupyterClient) request(t *testing.T, request ComposedMsg, timeout time.Duration) (reply ComposedMsg, pub []ComposedMsg) { + client.sendShellRequest(t, request) + reply = client.recvShellReply(t, timeout) + + // Read the expected 'busy' message and ensure it is in fact, a 'busy' message + subMsg := client.recvIOSub(t, 1*time.Second) + if subMsg.Header.MsgType != "status" { + t.Fatalf("Expected a 'status' message but received a '%s' message on IOPub", subMsg.Header.MsgType) + } + + subData, ok := subMsg.Content.(map[string]interface{}) + if !ok { + t.Fatal("'status' message content is not a json object") + } + + execState, ok := subData["execution_state"] + if !ok { + t.Fatal("'status' message content is missing the 'execution_state' field") + } + + if execState != kernelBusy { + t.Fatalf("Expected a 'busy' status message but got '%v'", execState) + } + + // Read messages from the IOPub channel until an 'idle' message is received + for { + subMsg = client.recvIOSub(t, 100*time.Millisecond) + + // If the message is a 'status' message, ensure it is an 'idle' status + if subMsg.Header.MsgType == "status" { + subData, ok = subMsg.Content.(map[string]interface{}) + if !ok { + t.Fatal("'status' message content is not a json object") + } + + execState, ok = subData["execution_state"] + if !ok { + t.Fatal("'status' message content is missing the 'execution_state' field") + } + + if execState != kernelIdle { + t.Fatalf("Expected a 'idle' status message but got '%v'", execState) + } + + // Break from the loop as we don't expect any other IOPub messages after the 'idle' + break + } + + // Add the message to the pub collection + pub = append(pub, subMsg) + } + + return +} + func TestMain(m *testing.M) { os.Exit(runTest(m)) } @@ -34,13 +223,28 @@ func runTest(m *testing.M) int { // TestEvaluate tests the evaluation of consecutive cells.. func TestEvaluate(t *testing.T) { cases := []struct { - Input string + Input []string Output string }{ - {"import \"fmt\"\na := 1\nfmt.Println(a)", "1\n"}, - {"a = 2\nfmt.Println(a)", "2\n"}, - {"func myFunc(x int) int {\nreturn x+1\n}\nfmt.Println(\"func defined\")", "func dfined\n"}, - {"b := myFunc(1)\nfmt.Println(b)", "2\n"}, + {[]string{ + "import \"fmt\"", + "a := 1", + "fmt.Println(a)", + }, "1\n"}, + {[]string{ + "a = 2", + "fmt.Println(a)", + }, "2\n"}, + {[]string{ + "func myFunc(x int) int {", + " return x+1", + "}", + "fmt.Println(\"func defined\")", + }, "func defined\n"}, + {[]string{ + "b := myFunc(1)", + "fmt.Println(b)", + }, "2\n"}, } t.Logf("Should be able to evaluate valid code in notebook cells.") @@ -51,7 +255,7 @@ func TestEvaluate(t *testing.T) { t.Logf(" Evaluating code snippet %d/%d.", k+1, len(cases)) // Get the result. - result := testEvaluate(t, tc.Input, k) + result := testEvaluate(t, strings.Join(tc.Input, "\n")) // Compare the result. if result != tc.Output { @@ -63,136 +267,83 @@ func TestEvaluate(t *testing.T) { } // testEvaluate evaluates a cell. -func testEvaluate(t *testing.T, codeIn string, testCaseIndex int) string { - - // Define the shell socket. - addrShell := "tcp://127.0.0.1:57503" - addrIO := "tcp://127.0.0.1:40885" +func testEvaluate(t *testing.T, codeIn string) string { + client, closeClient := newTestJupyterClient(t) + defer closeClient() // Create a message. - msg, err := NewMsg("execute_request", ComposedMsg{}) + request, err := NewMsg("execute_request", ComposedMsg{}) if err != nil { - t.Fatal("Create New Message:", err) + t.Fatal("NewMessage:", err) } // Fill in remaining header information. - msg.Header.Session = "ba65a05c-106a-4799-9a94-7f5631bbe216" - msg.Header.Username = "blah" + request.Header.Session = sessionID + request.Header.Username = "KernelTester" // Fill in Metadata. - msg.Metadata = make(map[string]interface{}) + request.Metadata = make(map[string]interface{}) // Fill in content. content := make(map[string]interface{}) content["code"] = codeIn content["silent"] = false - msg.Content = content + request.Content = content - // Prepare the shell socket. - sock, err := zmq.NewSocket(zmq.REQ) - if err != nil { - t.Fatal("NewSocket:", err) + reply, pub := client.request(t, request, 10*time.Second) + + if reply.Header.MsgType != "execute_reply" { + t.Fatal("reply.Header.MsgType", errors.New("reply is not an 'execute_reply'")) } - defer sock.Close() - if err = sock.Connect(addrShell); err != nil { - t.Fatal("sock.Connect:", err) + content, ok := reply.Content.(map[string]interface{}) + if !ok { + t.Fatal("reply.Content.(map[string]interface{})", errors.New("reply content is not a json object")) } - // Prepare the IOPub subscriber. - sockIO, err := zmq.NewSocket(zmq.SUB) - if err != nil { - t.Fatal("NewSocket:", err) + statusRaw, ok := content["status"] + if !ok { + t.Fatal("content[\"status\"]", errors.New("status field not present in 'execute_reply'")) } - defer sockIO.Close() - if err = sockIO.Connect(addrIO); err != nil { - t.Fatal("sockIO.Connect:", err) + status, ok := statusRaw.(string) + if !ok { + t.Fatal("content[\"status\"]", errors.New("status field value is not a string")) } - sockIO.SetSubscribe("") + if status != "ok" { + t.Fatalf("Execution encountered error [%s]: %s", content["ename"], content["evalue"]) + } - // Start the subscriber. - quit := make(chan struct{}) - var result string - var wg sync.WaitGroup - wg.Add(1) - go func() { - defer wg.Done() - for { - select { - - case <-quit: - return - - default: - msgParts, err := sockIO.RecvMessageBytes(0) - if err != nil { - t.Fatal("sockIO.RecvMessageBytes:", err) - } - - msgParsed, _, err := WireMsgToComposedMsg(msgParts, []byte("a0436f6c-1916-498b-8eb9-e81ab9368e84")) - if err != nil { - t.Fatal("WireMsgToComposedMsg:", err) - } - - if msgParsed.Header.MsgType == "execute_result" { - content, ok := msgParsed.Content.(map[string]interface{}) - if !ok { - t.Fatal("msgParsed.Content.(map[string]interface{})", errors.New("Could not cast type")) - } - data, ok := content["data"] - if !ok { - t.Fatal("content[\"data\"]", errors.New("Data field not present")) - } - dataMap, ok := data.(map[string]interface{}) - if !ok { - t.Fatal("data.(map[string]string)", errors.New("Could not cast type")) - } - rawResult, ok := dataMap["text/plain"] - if !ok { - t.Fatal("dataMap[\"text/plain\"]", errors.New("text/plain field not present")) - } - result, ok = rawResult.(string) - if !ok { - t.Fatal("rawResult.(string)", errors.New("Could not cast result as string")) - } - return - } + for _, pubMsg := range pub { + if pubMsg.Header.MsgType == "execute_result" { + content, ok := pubMsg.Content.(map[string]interface{}) + if !ok { + t.Fatal("pubMsg.Content.(map[string]interface{})", errors.New("pubMsg 'execute_result' content is not a json object")) } - } - }() - time.Sleep(1 * time.Second) - - // Send the execute request. - if _, err := sock.Send("", zmq.SNDMORE); err != nil { - t.Fatal("sock.Send:", err) - } + bundledMIMEDataRaw, ok := content["data"] + if !ok { + t.Fatal("content[\"data\"]", errors.New("data field not present in 'execute_result'")) + } - msgParts, err := msg.ToWireMsg([]byte("a0436f6c-1916-498b-8eb9-e81ab9368e84")) - if err != nil { - t.Fatal("msg.ToWireMsg:", err) - } + bundledMIMEData, ok := bundledMIMEDataRaw.(map[string]interface{}) + if !ok { + t.Fatal("content[\"data\"]", errors.New("data field is not a MIME data bundle in 'execute_result'")) + } - if _, err = sock.SendMessage(msgParts); err != nil { - t.Fatal("sock.SendMessage:", err) - } + textRepRaw, ok := bundledMIMEData["text/plain"] + if !ok { + t.Fatal("content[\"data\"]", errors.New("data field doesn't contain a text representation in 'execute_result'")) + } - // Wait for the result. If we timeout, kill the subscriber. - done := make(chan struct{}) - go func() { - wg.Wait() - close(done) - }() + textRep, ok := textRepRaw.(string) + if !ok { + t.Fatal("content[\"data\"][\"text/plain\"]", errors.New("text representation is not a string in 'execute_result'")) + } - // Compare the result to the expect and clean up. - select { - case <-done: - return result - case <-time.After(10 * time.Second): - close(quit) - t.Fatalf("[test case %d] Evaution timed out!", testCaseIndex+1) + return textRep + } } return "" From 01f2b46e66e15a067b3dc8b40356dab746cdf8fa Mon Sep 17 00:00:00 2001 From: SpencerPark Date: Thu, 14 Sep 2017 13:26:46 -0400 Subject: [PATCH 15/32] Test that an uncaught panic produces the proper error messages --- kernel_test.go | 191 +++++++++++++++++++++++++++++++++---------------- 1 file changed, 130 insertions(+), 61 deletions(-) diff --git a/kernel_test.go b/kernel_test.go index f02c157..20afa05 100644 --- a/kernel_test.go +++ b/kernel_test.go @@ -33,6 +33,8 @@ type testJupyterClient struct { // newTestJupyterClient creates and connects a fresh client to the kernel. Upon error, newTestJupyterClient // will Fail the test. func newTestJupyterClient(t *testing.T) (testJupyterClient, func()) { + t.Helper() + addrShell := fmt.Sprintf("%s://%s:%d", transport, ip, shellPort) addrIO := fmt.Sprintf("%s://%s:%d", transport, ip, iopubPort) @@ -76,6 +78,8 @@ func newTestJupyterClient(t *testing.T) (testJupyterClient, func()) { // sendShellRequest sends a message to the kernel over the shell channel. Upon error, sendShellRequest // will Fail the test. func (client *testJupyterClient) sendShellRequest(t *testing.T, request ComposedMsg) { + t.Helper() + if _, err := client.shellSocket.Send("", zmq.SNDMORE); err != nil { t.Fatal("shellSocket.Send:", err) } @@ -93,6 +97,8 @@ func (client *testJupyterClient) sendShellRequest(t *testing.T, request Composed // recvShellReply tries to read a reply message from the shell channel. It will timeout after the given // timeout delay. Upon error or timeout, recvShellReply will Fail the test. func (client *testJupyterClient) recvShellReply(t *testing.T, timeout time.Duration) (reply ComposedMsg) { + t.Helper() + ch := make(chan ComposedMsg) go func() { @@ -121,6 +127,8 @@ func (client *testJupyterClient) recvShellReply(t *testing.T, timeout time.Durat // recvIOSub tries to read a published message from the IOPub channel. It will timeout after the given // timeout delay. Upon error or timeout, recvIOSub will Fail the test. func (client *testJupyterClient) recvIOSub(t *testing.T, timeout time.Duration) (sub ComposedMsg) { + t.Helper() + ch := make(chan ComposedMsg) go func() { @@ -150,24 +158,17 @@ func (client *testJupyterClient) recvIOSub(t *testing.T, timeout time.Duration) // between the opening 'busy' messages and closing 'idle' message are captured and returned. The request will timeout // after the given timeout delay. Upon error or timeout, request will Fail the test. func (client *testJupyterClient) request(t *testing.T, request ComposedMsg, timeout time.Duration) (reply ComposedMsg, pub []ComposedMsg) { + t.Helper() + client.sendShellRequest(t, request) reply = client.recvShellReply(t, timeout) // Read the expected 'busy' message and ensure it is in fact, a 'busy' message subMsg := client.recvIOSub(t, 1*time.Second) - if subMsg.Header.MsgType != "status" { - t.Fatalf("Expected a 'status' message but received a '%s' message on IOPub", subMsg.Header.MsgType) - } + assertMsgTypeEquals(t, subMsg, "status") - subData, ok := subMsg.Content.(map[string]interface{}) - if !ok { - t.Fatal("'status' message content is not a json object") - } - - execState, ok := subData["execution_state"] - if !ok { - t.Fatal("'status' message content is missing the 'execution_state' field") - } + subData := getMsgContentAsJsonObject(t, subMsg) + execState := getString(t, "content", subData, "execution_state") if execState != kernelBusy { t.Fatalf("Expected a 'busy' status message but got '%v'", execState) @@ -179,15 +180,8 @@ func (client *testJupyterClient) request(t *testing.T, request ComposedMsg, time // If the message is a 'status' message, ensure it is an 'idle' status if subMsg.Header.MsgType == "status" { - subData, ok = subMsg.Content.(map[string]interface{}) - if !ok { - t.Fatal("'status' message content is not a json object") - } - - execState, ok = subData["execution_state"] - if !ok { - t.Fatal("'status' message content is missing the 'execution_state' field") - } + subData = getMsgContentAsJsonObject(t, subMsg) + execState = getString(t, "content", subData, "execution_state") if execState != kernelIdle { t.Fatalf("Expected a 'idle' status message but got '%v'", execState) @@ -204,6 +198,67 @@ func (client *testJupyterClient) request(t *testing.T, request ComposedMsg, time return } +// assertMsgTypeEquals is a test helper that fails the test if the message header's MsgType is not the +// expectedType. +func assertMsgTypeEquals(t *testing.T, msg ComposedMsg, expectedType string) { + t.Helper() + + if msg.Header.MsgType != expectedType { + t.Fatalf("Expected message of type '%s' but was '%s'\n", expectedType, msg.Header.MsgType) + } +} + +// getMsgContentAsJsonObject is a test helper that fails the rest if the message content is not a +// map[string]interface{} and returns the content as a map[string]interface{} if it is of the correct type. +func getMsgContentAsJsonObject(t *testing.T, msg ComposedMsg) map[string]interface{} { + t.Helper() + + content, ok := msg.Content.(map[string]interface{}) + if !ok { + t.Fatal("Message content is not a JSON object") + } + + return content +} + +// getString is a test helper that retrieves a value as a string from the content at the given key. If the key +// does not exist in the content map or the value is not a string this will fail the test. The jsonObjectName +// parameter is a string used to name the content for more helpful fail messages. +func getString(t *testing.T, jsonObjectName string, content map[string]interface{}, key string) string { + t.Helper() + + raw, ok := content[key] + if !ok { + t.Fatal(jsonObjectName+"[\""+key+"\"]", errors.New("\""+key+"\" field not present")) + } + + value, ok := raw.(string) + if !ok { + t.Fatal(jsonObjectName+"[\""+key+"\"]", errors.New("\""+key+"\" is not a string")) + } + + return value +} + +// getString is a test helper that retrieves a value as a map[string]interface{} from the content at the given key. +// If the key does not exist in the content map or the value is not a map[string]interface{} this will fail the test. +// The jsonObjectName parameter is a string used to name the content for more helpful fail messages. +func getJsonObject(t *testing.T, jsonObjectName string, content map[string]interface{}, key string) map[string]interface{} { + t.Helper() + + raw, ok := content[key] + if !ok { + t.Fatal(jsonObjectName+"[\""+key+"\"]", errors.New("\""+key+"\" field not present")) + } + + value, ok := raw.(map[string]interface{}) + if !ok { + t.Fatal(jsonObjectName+"[\""+key+"\"]", errors.New("\""+key+"\" is not a string")) + } + + return value +} + func TestMain(m *testing.M) { os.Exit(runTest(m)) } @@ -220,7 +275,7 @@ func runTest(m *testing.M) int { //============================================================================== -// TestEvaluate tests the evaluation of consecutive cells.. +// TestEvaluate tests the evaluation of consecutive cells. func TestEvaluate(t *testing.T) { cases := []struct { Input []string @@ -292,24 +347,10 @@ func testEvaluate(t *testing.T, codeIn string) string { reply, pub := client.request(t, request, 10*time.Second) - if reply.Header.MsgType != "execute_reply" { - t.Fatal("reply.Header.MsgType", errors.New("reply is not an 'execute_reply'")) - } + assertMsgTypeEquals(t, reply, "execute_reply") - content, ok := reply.Content.(map[string]interface{}) - if !ok { - t.Fatal("reply.Content.(map[string]interface{})", errors.New("reply content is not a json object")) - } - - statusRaw, ok := content["status"] - if !ok { - t.Fatal("content[\"status\"]", errors.New("status field not present in 'execute_reply'")) - } - - status, ok := statusRaw.(string) - if !ok { - t.Fatal("content[\"status\"]", errors.New("status field value is not a string")) - } + content = getMsgContentAsJsonObject(t, reply) + status := getString(t, "content", content, "status") if status != "ok" { t.Fatalf("Execution encountered error [%s]: %s", content["ename"], content["evalue"]) @@ -317,34 +358,62 @@ func testEvaluate(t *testing.T, codeIn string) string { for _, pubMsg := range pub { if pubMsg.Header.MsgType == "execute_result" { - content, ok := pubMsg.Content.(map[string]interface{}) - if !ok { - t.Fatal("pubMsg.Content.(map[string]interface{})", errors.New("pubMsg 'execute_result' content is not a json object")) - } + content = getMsgContentAsJsonObject(t, pubMsg) - bundledMIMEDataRaw, ok := content["data"] - if !ok { - t.Fatal("content[\"data\"]", errors.New("data field not present in 'execute_result'")) - } + bundledMIMEData := getJsonObject(t, "content", content, "data") + textRep := getString(t, "content[\"data\"]", bundledMIMEData, "test/plain") - bundledMIMEData, ok := bundledMIMEDataRaw.(map[string]interface{}) - if !ok { - t.Fatal("content[\"data\"]", errors.New("data field is not a MIME data bundle in 'execute_result'")) - } + return textRep + } + } - textRepRaw, ok := bundledMIMEData["text/plain"] - if !ok { - t.Fatal("content[\"data\"]", errors.New("data field doesn't contain a text representation in 'execute_result'")) - } + return "" +} - textRep, ok := textRepRaw.(string) - if !ok { - t.Fatal("content[\"data\"][\"text/plain\"]", errors.New("text representation is not a string in 'execute_result'")) - } +// TestPanicGeneratesError tests that executing code with an un-recovered panic properly generates both +// an error "execute_reply" and publishes an "error" message. +func TestPanicGeneratesError(t *testing.T) { + client, closeClient := newTestJupyterClient(t) + defer closeClient() - return textRep + // Create a message. + request, err := NewMsg("execute_request", ComposedMsg{}) + if err != nil { + t.Fatal("NewMessage:", err) + } + + // Fill in remaining header information. + request.Header.Session = sessionID + request.Header.Username = "KernelTester" + + // Fill in Metadata. + request.Metadata = make(map[string]interface{}) + + // Fill in content. + content := make(map[string]interface{}) + content["code"] = "panic(\"Error\")" + content["silent"] = false + request.Content = content + + reply, pub := client.request(t, request, 10*time.Second) + + assertMsgTypeEquals(t, reply, "execute_reply") + + content = getMsgContentAsJsonObject(t, reply) + status := getString(t, "content", content, "status") + + if status != "error" { + t.Fatal("Execution did not raise expected error") + } + + foundPublishedError := false + for _, pubMsg := range pub { + if pubMsg.Header.MsgType == "error" { + foundPublishedError = true } } - return "" + if !foundPublishedError { + t.Fatal("Execution did not publish an expected \"error\" message") + } } From 922e21eac862cb6736d09d36440ba8f16ecb6f2b Mon Sep 17 00:00:00 2001 From: SpencerPark Date: Fri, 15 Sep 2017 15:57:36 -0400 Subject: [PATCH 16/32] Reformat kernel_test. - Normalize fatal messages to be prefixed with a tab char and error symbol. - Move test helpers to the bottom and better seperate them from the tests. - Read kernel connection info from the test fixture file. --- kernel_test.go | 431 ++++++++++++++++++++++++++----------------------- 1 file changed, 230 insertions(+), 201 deletions(-) diff --git a/kernel_test.go b/kernel_test.go index 20afa05..b870927 100644 --- a/kernel_test.go +++ b/kernel_test.go @@ -1,8 +1,10 @@ package main import ( - "errors" + "encoding/json" "fmt" + "io/ioutil" + "log" "os" "strings" "testing" @@ -16,15 +18,201 @@ const ( success = "\u2713" ) -const ( - connectionKey = "a0436f6c-1916-498b-8eb9-e81ab9368e84" - sessionID = "ba65a05c-106a-4799-9a94-7f5631bbe216" - transport = "tcp" - ip = "127.0.0.1" - shellPort = 57503 - iopubPort = 40885 +const sessionID = "ba65a05c-106a-4799-9a94-7f5631bbe216" + +var ( + connectionKey string + transport string + ip string + shellPort int + iopubPort int ) +//============================================================================== + +func TestMain(m *testing.M) { + os.Exit(runTest(m)) +} + +// runTest initializes the environment for the tests and allows for +// the proper exit if the test fails or succeeds. +func runTest(m *testing.M) int { + const connectionFile = "fixtures/connection_file.json" + + // Parse the connection info. + var connInfo ConnectionInfo + + connData, err := ioutil.ReadFile(connectionFile) + if err != nil { + log.Fatal(err) + } + + if err = json.Unmarshal(connData, &connInfo); err != nil { + log.Fatal(err) + } + + // Store the connection parameters globally for use by the test client. + connectionKey = connInfo.Key + transport = connInfo.Transport + ip = connInfo.IP + shellPort = connInfo.ShellPort + iopubPort = connInfo.IOPubPort + + // Start the kernel. + go runKernel(connectionFile) + + return m.Run() +} + +//============================================================================== + +// TestEvaluate tests the evaluation of consecutive cells. +func TestEvaluate(t *testing.T) { + cases := []struct { + Input []string + Output string + }{ + {[]string{ + "import \"fmt\"", + "a := 1", + "fmt.Println(a)", + }, "1\n"}, + {[]string{ + "a = 2", + "fmt.Println(a)", + }, "2\n"}, + {[]string{ + "func myFunc(x int) int {", + " return x+1", + "}", + "fmt.Println(\"func defined\")", + }, "func defined\n"}, + {[]string{ + "b := myFunc(1)", + "fmt.Println(b)", + }, "2\n"}, + } + + t.Logf("Should be able to evaluate valid code in notebook cells.") + + for k, tc := range cases { + + // Give a progress report. + t.Logf(" Evaluating code snippet %d/%d.", k+1, len(cases)) + + // Get the result. + result := testEvaluate(t, strings.Join(tc.Input, "\n")) + + // Compare the result. + if result != tc.Output { + t.Errorf("\t%s Test case produced unexpected results.", failure) + continue + } + t.Logf("\t%s Should return the correct cell output.", success) + } +} + +// testEvaluate evaluates a cell. +func testEvaluate(t *testing.T, codeIn string) string { + client, closeClient := newTestJupyterClient(t) + defer closeClient() + + // Create a message. + request, err := NewMsg("execute_request", ComposedMsg{}) + if err != nil { + t.Fatalf("\t%s NewMsg: %s", failure, err) + } + + // Fill in remaining header information. + request.Header.Session = sessionID + request.Header.Username = "KernelTester" + + // Fill in Metadata. + request.Metadata = make(map[string]interface{}) + + // Fill in content. + content := make(map[string]interface{}) + content["code"] = codeIn + content["silent"] = false + request.Content = content + + reply, pub := client.performJupyterRequest(t, request, 10*time.Second) + + assertMsgTypeEquals(t, reply, "execute_reply") + + content = getMsgContentAsJsonObject(t, reply) + status := getString(t, "content", content, "status") + + if status != "ok" { + t.Fatalf("\t%s Execution encountered error [%s]: %s", failure, content["ename"], content["evalue"]) + } + + for _, pubMsg := range pub { + if pubMsg.Header.MsgType == "execute_result" { + content = getMsgContentAsJsonObject(t, pubMsg) + + bundledMIMEData := getJsonObject(t, "content", content, "data") + textRep := getString(t, "content[\"data\"]", bundledMIMEData, "text/plain") + + return textRep + } + } + + return "" +} + +// TestPanicGeneratesError tests that executing code with an un-recovered panic properly generates both +// an error "execute_reply" and publishes an "error" message. +func TestPanicGeneratesError(t *testing.T) { + client, closeClient := newTestJupyterClient(t) + defer closeClient() + + // Create a message. + request, err := NewMsg("execute_request", ComposedMsg{}) + if err != nil { + t.Fatalf("\t%s NewMsg: %s", failure, err) + } + + // Fill in remaining header information. + request.Header.Session = sessionID + request.Header.Username = "KernelTester" + + // Fill in Metadata. + request.Metadata = make(map[string]interface{}) + + // Fill in content. + content := make(map[string]interface{}) + content["code"] = "panic(\"Error\")" + content["silent"] = false + request.Content = content + + reply, pub := client.performJupyterRequest(t, request, 10*time.Second) + + assertMsgTypeEquals(t, reply, "execute_reply") + + content = getMsgContentAsJsonObject(t, reply) + status := getString(t, "content", content, "status") + + if status != "error" { + t.Fatalf("\t%s Execution did not raise expected error", failure) + } + + var foundPublishedError bool + for _, pubMsg := range pub { + if pubMsg.Header.MsgType == "error" { + foundPublishedError = true + break + } + } + + if !foundPublishedError { + t.Fatalf("\t%s Execution did not publish an expected \"error\" message", failure) + } +} + +//============================================================================== + +// testJupyterClient holds references to the 2 sockets it uses to communicate with the kernel. type testJupyterClient struct { shellSocket *zmq.Socket ioSocket *zmq.Socket @@ -41,36 +229,36 @@ func newTestJupyterClient(t *testing.T) (testJupyterClient, func()) { // Prepare the shell socket. shell, err := zmq.NewSocket(zmq.REQ) if err != nil { - t.Fatal("NewSocket:", err) + t.Fatalf("\t%s NewSocket: %s", failure, err) } if err = shell.Connect(addrShell); err != nil { - t.Fatal("shell.Connect:", err) + t.Fatalf("\t%s shell.Connect: %s", failure, err) } // Prepare the IOPub socket. iopub, err := zmq.NewSocket(zmq.SUB) if err != nil { - t.Fatal("NewSocket:", err) + t.Fatalf("\t%s NewSocket: %s", failure, err) } if err = iopub.Connect(addrIO); err != nil { - t.Fatal("iopub.Connect:", err) + t.Fatalf("\t%s iopub.Connect: %s", failure, err) } if err = iopub.SetSubscribe(""); err != nil { - t.Fatal("iopub.SetSubscribe", err) + t.Fatalf("\t%s iopub.SetSubscribe: %s", failure, err) } - // wait for a second to give the tcp connection time to complete to avoid missing the early pub messages + // Wait for a second to give the tcp connection time to complete to avoid missing the early pub messages. time.Sleep(1 * time.Second) return testJupyterClient{shell, iopub}, func() { if err := shell.Close(); err != nil { - t.Fatal("shell.Close", err) + t.Errorf("\t%s shell.Close: %s", failure, err) } if err = iopub.Close(); err != nil { - t.Fatal("iopub.Close", err) + t.Errorf("\t%s iopub.Close: %s", failure, err) } } } @@ -81,16 +269,16 @@ func (client *testJupyterClient) sendShellRequest(t *testing.T, request Composed t.Helper() if _, err := client.shellSocket.Send("", zmq.SNDMORE); err != nil { - t.Fatal("shellSocket.Send:", err) + t.Fatalf("\t%s shellSocket.Send: %s", failure, err) } reqMsgParts, err := request.ToWireMsg([]byte(connectionKey)) if err != nil { - t.Fatal("request.ToWireMsg:", err) + t.Fatalf("\t%s request.ToWireMsg: %s", failure, err) } if _, err = client.shellSocket.SendMessage(reqMsgParts); err != nil { - t.Fatal("shellSocket.SendMessage:", err) + t.Fatalf("\t%s shellSocket.SendMessage: %s", failure, err) } } @@ -104,12 +292,12 @@ func (client *testJupyterClient) recvShellReply(t *testing.T, timeout time.Durat go func() { repMsgParts, err := client.shellSocket.RecvMessageBytes(0) if err != nil { - t.Fatal("Shell socket RecvMessageBytes:", err) + t.Fatalf("\t%s Shell socket RecvMessageBytes: %s", failure, err) } msgParsed, _, err := WireMsgToComposedMsg(repMsgParts, []byte(connectionKey)) if err != nil { - t.Fatal("Could not parse wire message:", err) + t.Fatalf("\t%s Could not parse wire message: %s", failure, err) } ch <- msgParsed @@ -118,7 +306,7 @@ func (client *testJupyterClient) recvShellReply(t *testing.T, timeout time.Durat select { case reply = <-ch: case <-time.After(timeout): - t.Fatal("recvShellReply timed out") + t.Fatalf("\t%s recvShellReply timed out", failure) } return @@ -134,12 +322,12 @@ func (client *testJupyterClient) recvIOSub(t *testing.T, timeout time.Duration) go func() { repMsgParts, err := client.ioSocket.RecvMessageBytes(0) if err != nil { - t.Fatal("IOPub socket RecvMessageBytes:", err) + t.Fatalf("\t%s IOPub socket RecvMessageBytes: %s", failure, err) } msgParsed, _, err := WireMsgToComposedMsg(repMsgParts, []byte(connectionKey)) if err != nil { - t.Fatal("Could not parse wire message:", err) + t.Fatalf("\t%s Could not parse wire message: %s", failure, err) } ch <- msgParsed @@ -148,22 +336,22 @@ func (client *testJupyterClient) recvIOSub(t *testing.T, timeout time.Duration) select { case sub = <-ch: case <-time.After(timeout): - t.Fatal("recvIOSub timed out") + t.Fatalf("\t%s recvIOSub timed out", failure) } return } -// request preforms a request and awaits a reply on the shell channel. Additionally all messages on the IOPub channel -// between the opening 'busy' messages and closing 'idle' message are captured and returned. The request will timeout -// after the given timeout delay. Upon error or timeout, request will Fail the test. -func (client *testJupyterClient) request(t *testing.T, request ComposedMsg, timeout time.Duration) (reply ComposedMsg, pub []ComposedMsg) { +// performJupyterRequest preforms a request and awaits a reply on the shell channel. Additionally all messages on the +// IOPub channel between the opening 'busy' messages and closing 'idle' message are captured and returned. The request +// will timeout after the given timeout delay. Upon error or timeout, request will Fail the test. +func (client *testJupyterClient) performJupyterRequest(t *testing.T, request ComposedMsg, timeout time.Duration) (reply ComposedMsg, pub []ComposedMsg) { t.Helper() client.sendShellRequest(t, request) reply = client.recvShellReply(t, timeout) - // Read the expected 'busy' message and ensure it is in fact, a 'busy' message + // Read the expected 'busy' message and ensure it is in fact, a 'busy' message. subMsg := client.recvIOSub(t, 1*time.Second) assertMsgTypeEquals(t, subMsg, "status") @@ -171,27 +359,27 @@ func (client *testJupyterClient) request(t *testing.T, request ComposedMsg, time execState := getString(t, "content", subData, "execution_state") if execState != kernelBusy { - t.Fatalf("Expected a 'busy' status message but got '%v'", execState) + t.Fatalf("\t%s Expected a 'busy' status message but got '%s'", failure, execState) } - // Read messages from the IOPub channel until an 'idle' message is received + // Read messages from the IOPub channel until an 'idle' message is received. for { subMsg = client.recvIOSub(t, 100*time.Millisecond) - // If the message is a 'status' message, ensure it is an 'idle' status + // If the message is a 'status' message, ensure it is an 'idle' status. if subMsg.Header.MsgType == "status" { subData = getMsgContentAsJsonObject(t, subMsg) execState = getString(t, "content", subData, "execution_state") if execState != kernelIdle { - t.Fatalf("Expected a 'idle' status message but got '%v'", execState) + t.Fatalf("\t%s Expected a 'idle' status message but got '%s'", failure, execState) } - // Break from the loop as we don't expect any other IOPub messages after the 'idle' + // Break from the loop as we don't expect any other IOPub messages after the 'idle'. break } - // Add the message to the pub collection + // Add the message to the pub collection. pub = append(pub, subMsg) } @@ -204,7 +392,7 @@ func assertMsgTypeEquals(t *testing.T, msg ComposedMsg, expectedType string) { t.Helper() if msg.Header.MsgType != expectedType { - t.Fatalf("Expected message of type '%s' but was '%s'\n", expectedType, msg.Header.MsgType) + t.Fatalf("\t%s Expected message of type '%s' but was '%s'", failure, expectedType, msg.Header.MsgType) } } @@ -215,7 +403,7 @@ func getMsgContentAsJsonObject(t *testing.T, msg ComposedMsg) map[string]interfa content, ok := msg.Content.(map[string]interface{}) if !ok { - t.Fatal("Message content is not a JSON object") + t.Fatalf("\t%s Message content is not a JSON object", failure) } return content @@ -229,12 +417,12 @@ func getString(t *testing.T, jsonObjectName string, content map[string]interface raw, ok := content[key] if !ok { - t.Fatal(jsonObjectName+"[\""+key+"\"]", errors.New("\""+key+"\" field not present")) + t.Fatalf("\t%s %s[\"%s\"] field not present", failure, jsonObjectName, key) } value, ok := raw.(string) if !ok { - t.Fatal(jsonObjectName+"[\""+key+"\"]", errors.New("\""+key+"\" is not a string")) + t.Fatalf("\t%s %s[\"%s\"] is not a string", failure, jsonObjectName, key) } return value @@ -248,172 +436,13 @@ func getJsonObject(t *testing.T, jsonObjectName string, content map[string]inter raw, ok := content[key] if !ok { - t.Fatal(jsonObjectName+"[\""+key+"\"]", errors.New("\""+key+"\" field not present")) + t.Fatalf("\t%s %s[\"%s\"] field not present", failure, jsonObjectName, key) } value, ok := raw.(map[string]interface{}) if !ok { - t.Fatal(jsonObjectName+"[\""+key+"\"]", errors.New("\""+key+"\" is not a string")) + t.Fatalf("\t%s %s[\"%s\"] is not a JSON object", failure, jsonObjectName, key) } return value } - -func TestMain(m *testing.M) { - os.Exit(runTest(m)) -} - -// runTest initializes the environment for the tests and allows for -// the proper exit if the test fails or succeeds. -func runTest(m *testing.M) int { - - // Start the kernel. - go runKernel("fixtures/connection_file.json") - - return m.Run() -} - -//============================================================================== - -// TestEvaluate tests the evaluation of consecutive cells. -func TestEvaluate(t *testing.T) { - cases := []struct { - Input []string - Output string - }{ - {[]string{ - "import \"fmt\"", - "a := 1", - "fmt.Println(a)", - }, "1\n"}, - {[]string{ - "a = 2", - "fmt.Println(a)", - }, "2\n"}, - {[]string{ - "func myFunc(x int) int {", - " return x+1", - "}", - "fmt.Println(\"func defined\")", - }, "func defined\n"}, - {[]string{ - "b := myFunc(1)", - "fmt.Println(b)", - }, "2\n"}, - } - - t.Logf("Should be able to evaluate valid code in notebook cells.") - - for k, tc := range cases { - - // Give a progress report. - t.Logf(" Evaluating code snippet %d/%d.", k+1, len(cases)) - - // Get the result. - result := testEvaluate(t, strings.Join(tc.Input, "\n")) - - // Compare the result. - if result != tc.Output { - t.Errorf("\t%s Test case produced unexpected results.", failure) - continue - } - t.Logf("\t%s Should return the correct cell output.", success) - } -} - -// testEvaluate evaluates a cell. -func testEvaluate(t *testing.T, codeIn string) string { - client, closeClient := newTestJupyterClient(t) - defer closeClient() - - // Create a message. - request, err := NewMsg("execute_request", ComposedMsg{}) - if err != nil { - t.Fatal("NewMessage:", err) - } - - // Fill in remaining header information. - request.Header.Session = sessionID - request.Header.Username = "KernelTester" - - // Fill in Metadata. - request.Metadata = make(map[string]interface{}) - - // Fill in content. - content := make(map[string]interface{}) - content["code"] = codeIn - content["silent"] = false - request.Content = content - - reply, pub := client.request(t, request, 10*time.Second) - - assertMsgTypeEquals(t, reply, "execute_reply") - - content = getMsgContentAsJsonObject(t, reply) - status := getString(t, "content", content, "status") - - if status != "ok" { - t.Fatalf("Execution encountered error [%s]: %s", content["ename"], content["evalue"]) - } - - for _, pubMsg := range pub { - if pubMsg.Header.MsgType == "execute_result" { - content = getMsgContentAsJsonObject(t, pubMsg) - - bundledMIMEData := getJsonObject(t, "content", content, "data") - textRep := getString(t, "content[\"data\"]", bundledMIMEData, "test/plain") - - return textRep - } - } - - return "" -} - -// TestPanicGeneratesError tests that executing code with an un-recovered panic properly generates both -// an error "execute_reply" and publishes an "error" message. -func TestPanicGeneratesError(t *testing.T) { - client, closeClient := newTestJupyterClient(t) - defer closeClient() - - // Create a message. - request, err := NewMsg("execute_request", ComposedMsg{}) - if err != nil { - t.Fatal("NewMessage:", err) - } - - // Fill in remaining header information. - request.Header.Session = sessionID - request.Header.Username = "KernelTester" - - // Fill in Metadata. - request.Metadata = make(map[string]interface{}) - - // Fill in content. - content := make(map[string]interface{}) - content["code"] = "panic(\"Error\")" - content["silent"] = false - request.Content = content - - reply, pub := client.request(t, request, 10*time.Second) - - assertMsgTypeEquals(t, reply, "execute_reply") - - content = getMsgContentAsJsonObject(t, reply) - status := getString(t, "content", content, "status") - - if status != "error" { - t.Fatal("Execution did not raise expected error") - } - - foundPublishedError := false - for _, pubMsg := range pub { - if pubMsg.Header.MsgType == "error" { - foundPublishedError = true - } - } - - if !foundPublishedError { - t.Fatal("Execution did not publish an expected \"error\" message") - } -} From aee1cad4690ebb6b6b5621d5f71b9f7392340a4e Mon Sep 17 00:00:00 2001 From: SpencerPark Date: Mon, 18 Sep 2017 12:41:23 -0400 Subject: [PATCH 17/32] Fix kernel_test lint issues --- kernel_test.go | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/kernel_test.go b/kernel_test.go index b870927..c772158 100644 --- a/kernel_test.go +++ b/kernel_test.go @@ -18,7 +18,10 @@ const ( success = "\u2713" ) -const sessionID = "ba65a05c-106a-4799-9a94-7f5631bbe216" +const ( + connectionFile = "fixtures/connection_file.json" + sessionID = "ba65a05c-106a-4799-9a94-7f5631bbe216" +) var ( connectionKey string @@ -37,8 +40,6 @@ func TestMain(m *testing.M) { // runTest initializes the environment for the tests and allows for // the proper exit if the test fails or succeeds. func runTest(m *testing.M) int { - const connectionFile = "fixtures/connection_file.json" - // Parse the connection info. var connInfo ConnectionInfo @@ -140,7 +141,7 @@ func testEvaluate(t *testing.T, codeIn string) string { assertMsgTypeEquals(t, reply, "execute_reply") - content = getMsgContentAsJsonObject(t, reply) + content = getMsgContentAsJSONObject(t, reply) status := getString(t, "content", content, "status") if status != "ok" { @@ -149,9 +150,9 @@ func testEvaluate(t *testing.T, codeIn string) string { for _, pubMsg := range pub { if pubMsg.Header.MsgType == "execute_result" { - content = getMsgContentAsJsonObject(t, pubMsg) + content = getMsgContentAsJSONObject(t, pubMsg) - bundledMIMEData := getJsonObject(t, "content", content, "data") + bundledMIMEData := getJSONObject(t, "content", content, "data") textRep := getString(t, "content[\"data\"]", bundledMIMEData, "text/plain") return textRep @@ -190,7 +191,7 @@ func TestPanicGeneratesError(t *testing.T) { assertMsgTypeEquals(t, reply, "execute_reply") - content = getMsgContentAsJsonObject(t, reply) + content = getMsgContentAsJSONObject(t, reply) status := getString(t, "content", content, "status") if status != "error" { @@ -355,7 +356,7 @@ func (client *testJupyterClient) performJupyterRequest(t *testing.T, request Com subMsg := client.recvIOSub(t, 1*time.Second) assertMsgTypeEquals(t, subMsg, "status") - subData := getMsgContentAsJsonObject(t, subMsg) + subData := getMsgContentAsJSONObject(t, subMsg) execState := getString(t, "content", subData, "execution_state") if execState != kernelBusy { @@ -368,7 +369,7 @@ func (client *testJupyterClient) performJupyterRequest(t *testing.T, request Com // If the message is a 'status' message, ensure it is an 'idle' status. if subMsg.Header.MsgType == "status" { - subData = getMsgContentAsJsonObject(t, subMsg) + subData = getMsgContentAsJSONObject(t, subMsg) execState = getString(t, "content", subData, "execution_state") if execState != kernelIdle { @@ -396,9 +397,9 @@ func assertMsgTypeEquals(t *testing.T, msg ComposedMsg, expectedType string) { } } -// getMsgContentAsJsonObject is a test helper that fails the rest if the message content is not a +// getMsgContentAsJSONObject is a test helper that fails the rest if the message content is not a // map[string]interface{} and returns the content as a map[string]interface{} if it is of the correct type. -func getMsgContentAsJsonObject(t *testing.T, msg ComposedMsg) map[string]interface{} { +func getMsgContentAsJSONObject(t *testing.T, msg ComposedMsg) map[string]interface{} { t.Helper() content, ok := msg.Content.(map[string]interface{}) @@ -428,10 +429,10 @@ func getString(t *testing.T, jsonObjectName string, content map[string]interface return value } -// getString is a test helper that retrieves a value as a map[string]interface{} from the content at the given key. +// getJSONObject is a test helper that retrieves a value as a map[string]interface{} from the content at the given key. // If the key does not exist in the content map or the value is not a map[string]interface{} this will fail the test. // The jsonObjectName parameter is a string used to name the content for more helpful fail messages. -func getJsonObject(t *testing.T, jsonObjectName string, content map[string]interface{}, key string) map[string]interface{} { +func getJSONObject(t *testing.T, jsonObjectName string, content map[string]interface{}, key string) map[string]interface{} { t.Helper() raw, ok := content[key] From 110693d096a22b74142665e4e9107b6d019fcf3b Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Mon, 18 Sep 2017 17:07:05 -0400 Subject: [PATCH 18/32] Update the Dockerfile --- Dockerfile | 59 ++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 40 insertions(+), 19 deletions(-) diff --git a/Dockerfile b/Dockerfile index 56512d2..4501aff 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,23 +1,44 @@ -FROM golang +FROM alpine:3.5 +MAINTAINER dwhitena -# dependencies -RUN apt-get update -RUN apt-get install -y pkg-config libzmq3-dev build-essential python3-pip +# Add gophernotes +ADD . /go/src/github.com/gopherdata/gophernotes/ -# set up golang -ENV PATH /usr/local/go/bin:$PATH -ENV GOPATH /go -ENV PATH $GOPATH/bin:$PATH -RUN mkdir -p "$GOPATH/src" "$GOPATH/bin" && chmod -R 777 "$GOPATH" - -# install gophernotes -RUN go get golang.org/x/tools/cmd/goimports -RUN go get -tags zmq_3_x github.com/gopherds/gophernotes -RUN mkdir -p ~/.ipython/kernels/gophernotes -RUN cp -r $GOPATH/src/github.com/gopherds/gophernotes/kernel/* ~/.ipython/kernels/gophernotes - -# install jupyter -RUN pip3 install jupyter +# Install Jupyter and gophernotes. +RUN set -x \ + # install python and dependencies + && apk update \ + && apk --no-cache add \ + ca-certificates \ + python3 \ + su-exec \ + gcc \ + git \ + py3-zmq \ + pkgconfig \ + zeromq-dev \ + musl-dev \ + && pip3 install --upgrade pip \ + && ln -s /usr/bin/python3.5 /usr/bin/python \ + ## install Go + && apk --update-cache --allow-untrusted \ + --repository http://dl-4.alpinelinux.org/alpine/edge/community \ + --arch=x86_64 add \ + go \ + ## jupyter notebook + && ln -s /usr/include/locale.h /usr/include/xlocale.h \ + && pip3 install jupyter notebook \ + ## install gophernotes + && GOPATH=/go go install github.com/gopherdata/gophernotes \ + && cp /go/bin/gophernotes /usr/local/bin/ \ + && mkdir -p ~/.local/share/jupyter/kernels/gophernotes \ + && cp -r /go/src/github.com/gopherdata/gophernotes/kernel/* ~/.local/share/jupyter/kernels/gophernotes \ + ## clean + && find /usr/lib/python3.5 -name __pycache__ | xargs rm -r \ + && rm -rf \ + /root/.[acpw]* \ + ipaexg00301* \ + && rm -rf /var/cache/apk/* EXPOSE 8888 -CMD ["jupyter", "notebook"] +CMD [ "jupyter", "notebook", "--no-browser", "--allow-root", "--ip=0.0.0.0" ] From 3b40f3f482acdb6232d25858760a530e0b072977 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Tue, 19 Sep 2017 15:08:47 -0400 Subject: [PATCH 19/32] add DS dockerfile, update vendored gomacro --- Dockerfile.DS | 66 + Gopkg.lock | 8 +- Gopkg.toml | 2 +- .../github.com/cosmos72/gomacro/all_test.go | 23 +- .../cosmos72/gomacro/base/genimport.go | 25 +- .../cosmos72/gomacro/base/x_package.go | 23 +- .../cosmos72/gomacro/benchmark_test.go | 22 + .../cosmos72/gomacro/classic/env.go | 16 +- .../cosmos72/gomacro/classic/fast.go | 4 +- .../cosmos72/gomacro/classic/inspect.go | 2 +- .../cosmos72/gomacro/classic/interpreter.go | 66 +- .../cosmos72/gomacro/classic/output.go | 4 +- .../cosmos72/gomacro/classic/x_package.go | 13 +- .../example/earljwagner1/earljwagner1.go | 62 + .../gomacro/example/earljwagner2/cube.go | 5 + .../example/earljwagner2/earljwagner2.go | 54 + .../cosmos72/gomacro/example/interface.go | 57 + .../gomacro/example/{dummy.go => main.go} | 7 +- .../cosmos72/gomacro/fast/address.go | 1531 +- .../cosmos72/gomacro/fast/address.gomacro | 49 +- .../cosmos72/gomacro/fast/assignment.go | 25 +- .../cosmos72/gomacro/fast/binary.go | 2 +- .../cosmos72/gomacro/fast/builtin.go | 6 +- .../github.com/cosmos72/gomacro/fast/call.go | 32 +- .../cosmos72/gomacro/fast/call_multivalue.go | 6 +- .../cosmos72/gomacro/fast/channel.go | 7 +- .../cosmos72/gomacro/fast/channel.gomacro | 5 +- .../cosmos72/gomacro/fast/compile.go | 10 + .../cosmos72/gomacro/fast/compositelit.go | 23 +- .../cosmos72/gomacro/fast/convert.go | 35 +- .../cosmos72/gomacro/fast/declaration.go | 82 +- .../github.com/cosmos72/gomacro/fast/expr1.go | 2 +- .../cosmos72/gomacro/fast/function.go | 18 +- .../cosmos72/gomacro/fast/global.go | 9 +- .../cosmos72/gomacro/fast/identifier.go | 541 +- .../github.com/cosmos72/gomacro/fast/index.go | 2 +- .../cosmos72/gomacro/fast/interface.go | 53 +- .../cosmos72/gomacro/fast/literal.go | 33 +- .../github.com/cosmos72/gomacro/fast/range.go | 2 + .../cosmos72/gomacro/fast/selector.go | 2 +- .../github.com/cosmos72/gomacro/fast/slice.go | 2 +- .../cosmos72/gomacro/fast/statement.go | 4 +- .../cosmos72/gomacro/fast/switch.go | 2 +- .../cosmos72/gomacro/fast/switch_type.go | 5 +- .../github.com/cosmos72/gomacro/fast/type.go | 25 +- .../github.com/cosmos72/gomacro/fast/unary.go | 2 +- .../github.com/cosmos72/gomacro/fast/util.go | 8 +- .../cosmos72/gomacro/fast/var_ops.go | 34654 ++++++++++++---- .../cosmos72/gomacro/fast/var_ops.gomacro | 204 +- .../cosmos72/gomacro/fast/var_set.go | 3949 +- .../cosmos72/gomacro/fast/var_set.gomacro | 102 +- .../cosmos72/gomacro/fast/var_set_value.go | 90 +- .../cosmos72/gomacro/fast/var_shifts.go | 6121 ++- .../cosmos72/gomacro/fast/var_shifts.gomacro | 115 +- .../cosmos72/gomacro/fast/x_package.go | 32 +- .../cosmos72/gomacro/parser/x_package.go | 7 +- .../cosmos72/gomacro/xreflect/global.go | 15 + vendor/github.com/pebbe/zmq4/README.md | 8 + vendor/github.com/pebbe/zmq4/draft/TODO.md | 46 + vendor/github.com/pebbe/zmq4/draft/auth.go | 645 + .../github.com/pebbe/zmq4/draft/auth_test.go | 144 + .../pebbe/zmq4/draft/ctxoptions_unix.go | 56 + .../pebbe/zmq4/draft/ctxoptions_windows.go | 44 + vendor/github.com/pebbe/zmq4/draft/doc.go | 23 + vendor/github.com/pebbe/zmq4/draft/dummy.c | 5 + vendor/github.com/pebbe/zmq4/draft/errors.go | 92 + vendor/github.com/pebbe/zmq4/draft/polling.go | 187 + vendor/github.com/pebbe/zmq4/draft/reactor.go | 194 + .../pebbe/zmq4/draft/socketevent_test.go | 98 + .../github.com/pebbe/zmq4/draft/socketget.go | 648 + .../pebbe/zmq4/draft/socketget_unix.go | 15 + .../pebbe/zmq4/draft/socketget_windows.go | 26 + .../github.com/pebbe/zmq4/draft/socketset.go | 800 + vendor/github.com/pebbe/zmq4/draft/utils.go | 206 + vendor/github.com/pebbe/zmq4/draft/zmq4.go | 1455 + vendor/github.com/pebbe/zmq4/draft/zmq4.h | 55 + .../github.com/pebbe/zmq4/draft/zmq41_test.go | 74 + .../github.com/pebbe/zmq4/draft/zmq42draft.go | 67 + .../github.com/pebbe/zmq4/draft/zmq42draft.h | 15 + .../pebbe/zmq4/draft/zmq42draft_test.go | 152 + .../github.com/pebbe/zmq4/draft/zmq4_test.go | 2044 + .../github.com/pebbe/zmq4/examples/syncpub.go | 19 +- 82 files changed, 43653 insertions(+), 11736 deletions(-) create mode 100644 Dockerfile.DS create mode 100644 vendor/github.com/cosmos72/gomacro/example/earljwagner1/earljwagner1.go create mode 100644 vendor/github.com/cosmos72/gomacro/example/earljwagner2/cube.go create mode 100644 vendor/github.com/cosmos72/gomacro/example/earljwagner2/earljwagner2.go create mode 100644 vendor/github.com/cosmos72/gomacro/example/interface.go rename vendor/github.com/cosmos72/gomacro/example/{dummy.go => main.go} (89%) create mode 100644 vendor/github.com/pebbe/zmq4/draft/TODO.md create mode 100644 vendor/github.com/pebbe/zmq4/draft/auth.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/auth_test.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/ctxoptions_unix.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/ctxoptions_windows.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/doc.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/dummy.c create mode 100644 vendor/github.com/pebbe/zmq4/draft/errors.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/polling.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/reactor.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/socketevent_test.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/socketget.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/socketget_unix.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/socketget_windows.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/socketset.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/utils.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/zmq4.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/zmq4.h create mode 100644 vendor/github.com/pebbe/zmq4/draft/zmq41_test.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/zmq42draft.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/zmq42draft.h create mode 100644 vendor/github.com/pebbe/zmq4/draft/zmq42draft_test.go create mode 100644 vendor/github.com/pebbe/zmq4/draft/zmq4_test.go diff --git a/Dockerfile.DS b/Dockerfile.DS new file mode 100644 index 0000000..bd6ed4d --- /dev/null +++ b/Dockerfile.DS @@ -0,0 +1,66 @@ +FROM alpine:3.5 +MAINTAINER dwhitena + +# Add gophernotes +ADD . /go/src/github.com/gopherdata/gophernotes/ + +# Install Jupyter and gophernotes. +RUN set -x \ + # install python and dependencies + && apk update \ + && apk --no-cache add \ + ca-certificates \ + python3 \ + su-exec \ + gcc \ + g++ \ + git \ + py3-zmq \ + pkgconfig \ + zeromq-dev \ + musl-dev \ + mercurial \ + && pip3 install --upgrade pip \ + && cp /usr/bin/python3.5 /usr/bin/python \ + ## install Go + && apk --update-cache --allow-untrusted \ + --repository http://dl-4.alpinelinux.org/alpine/edge/community \ + --arch=x86_64 add \ + go \ + ## jupyter notebook + && ln -s /usr/include/locale.h /usr/include/xlocale.h \ + && pip3 install jupyter notebook \ + ## install gophernotes + && GOPATH=/go go install github.com/gopherdata/gophernotes \ + && cp /go/bin/gophernotes /usr/local/bin/ \ + && mkdir -p ~/.local/share/jupyter/kernels/gophernotes \ + && cp -r /go/src/github.com/gopherdata/gophernotes/kernel/* ~/.local/share/jupyter/kernels/gophernotes \ + ## get the relevant Go packages + && go get -insecure gonum.org/v1/plot/... \ + && go get -insecure gonum.org/v1/gonum/... \ + && go get github.com/kniren/gota/... \ + && go get github.com/sajari/regression \ + && go get github.com/sjwhitworth/golearn/... \ + && go get -insecure go-hep.org/x/hep/csvutil/... \ + && go get -insecure go-hep.org/x/hep/fit \ + && go get -insecure go-hep.org/x/hep/hbook \ + && go get github.com/montanaflynn/stats \ + && go get github.com/boltdb/bolt \ + && go get github.com/patrickmn/go-cache \ + && go get github.com/chewxy/math32 \ + && go get github.com/chewxy/hm \ + && go get github.com/chewxy/vecf64 \ + && go get github.com/chewxy/vecf32 \ + && go get github.com/awalterschulze/gographviz \ + && go get github.com/leesper/go_rng \ + && go get github.com/pkg/errors \ + && go get github.com/stretchr/testify/assert \ + ## clean + && find /usr/lib/python3.5 -name __pycache__ | xargs rm -r \ + && rm -rf \ + /root/.[acpw]* \ + ipaexg00301* \ + && rm -rf /var/cache/apk/* + +EXPOSE 8888 +CMD [ "jupyter", "notebook", "--no-browser", "--allow-root", "--ip=0.0.0.0" ] diff --git a/Gopkg.lock b/Gopkg.lock index 27529ae..995b961 100644 --- a/Gopkg.lock +++ b/Gopkg.lock @@ -2,10 +2,10 @@ [[projects]] + branch = "master" name = "github.com/cosmos72/gomacro" packages = ["ast2","base","classic","fast","imports","parser","scanner","token","typeutil","xreflect"] - revision = "cb2aedf8c257af98c51e08d1aace0142954c592e" - version = "v2.0" + revision = "b90dd5143957e920ac0ce87f9a3277bbc3ce1641" [[projects]] branch = "master" @@ -17,7 +17,7 @@ branch = "master" name = "github.com/pebbe/zmq4" packages = ["."] - revision = "651d7b11cd31b16fb4c76741c234e258b6a8039b" + revision = "90d69e412a09549f2e90bac70fbb449081f1e5c1" [[projects]] branch = "master" @@ -28,6 +28,6 @@ [solve-meta] analyzer-name = "dep" analyzer-version = 1 - inputs-digest = "8e7fe89ae8ac8aaac86f7e7381a28ce0c2ad0ac61f9e4beaf35d631a9200da2f" + inputs-digest = "fa5d7d9ec51b9210ed3ca68de1105ddbbc070a941c737b3955518eaee951d10c" solver-name = "gps-cdcl" solver-version = 1 diff --git a/Gopkg.toml b/Gopkg.toml index 953dbef..81cb874 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -22,8 +22,8 @@ [[constraint]] + branch = "master" name = "github.com/cosmos72/gomacro" - version = "2.0.0" [[constraint]] branch = "master" diff --git a/vendor/github.com/cosmos72/gomacro/all_test.go b/vendor/github.com/cosmos72/gomacro/all_test.go index cb60b97..ce1f015 100644 --- a/vendor/github.com/cosmos72/gomacro/all_test.go +++ b/vendor/github.com/cosmos72/gomacro/all_test.go @@ -304,8 +304,7 @@ var testcases = []TestCase{ TestCase{A, "address_1", "var pvf = &vf; *pvf", 1.25, nil}, TestCase{A, "address_2", "&*pvf == *&pvf", true, nil}, TestCase{A, "address_3", "var pvs = &vs; v1 = (*pvs == nil); v1", true, nil}, - TestCase{A, "defer_1", "v = 0; func testdefer(x uint32) { if x != 0 { defer func() { v = x }() } }; testdefer(29); v", uint32(29), nil}, - TestCase{A, "defer_2", "v = 12; testdefer(0); v", uint32(12), nil}, + TestCase{A, "make_chan", "cx := make(chan interface{}, 2); cx", make(chan interface{}, 2), nil}, TestCase{A, "make_map", "m := make(map[int]string); m", make(map[int]string), nil}, TestCase{A, "make_slice", "y := make([]uint8, 7); y[0] = 100; y[3] = 103; y", []uint8{100, 0, 0, 103, 0, 0, 0}, nil}, @@ -506,14 +505,20 @@ var testcases = []TestCase{ B string }{A: 1, B: "2"}, nil}, - TestCase{A, "method_decls", "func (p *Pair) SetA(a rune) { p.A = a }; func (p Pair) SetAV(a rune) { p.A = a }; nil", nil, nil}, - TestCase{A, "method_on_ptr", "pair.SetA(8); pair.A", rune(8), nil}, - TestCase{A, "method_on_val", "pair.SetAV(11); pair.A", rune(8), nil}, // method on value gets a copy of the receiver - changes to not propagate - TestCase{F, "method_embedded_on_ptr", "triple.SetA('+'); triple.A", '+', nil}, - TestCase{F, "method_embedded_on_val", "triple.SetAV('*'); triple.A", '+', nil}, + TestCase{A, "method_decl_1", `func (p *Pair) SetA(a rune) { p.A = a }; func (p Pair) SetAV(a rune) { p.A = a }; nil`, nil, nil}, + TestCase{A, "method_decl_2", `func (p Pair) SetAV(a rune) { p.A = a }; nil`, nil, nil}, + TestCase{A, "method_decl_3", `func (p Pair) String() string { return fmt.Sprintf("%c %s", p.A, p.B) }; nil`, nil, nil}, + + TestCase{A, "method_on_ptr", `pair.SetA(33); pair.A`, rune(33), nil}, + TestCase{A, "method_on_val_1", `pair.SetAV(11); pair.A`, rune(33), nil}, // method on value gets a copy of the receiver - changes to not propagate + TestCase{A, "method_on_val_2", `pair.String()`, "! y", nil}, + TestCase{F, "method_embedded_on_ptr", `triple.SetA('+'); triple.A`, '+', nil}, + TestCase{F, "method_embedded_on_val", `triple.SetAV('*'); triple.A`, '+', nil}, TestCase{A, "interface_1", "var st fmt.Stringer = time.Second; st", time.Second, nil}, - TestCase{A, "interface_method", "bind := st.String; bind()", "1s", nil}, + TestCase{A, "interface_method_1", "bind := st.String; bind()", "1s", nil}, + TestCase{F, "interface_2", "st = pair; nil", nil, nil}, + TestCase{F, "interface_method_2", "bind = st.String; bind()", "! y", nil}, TestCase{F, "concrete_method_to_func", "f1 := time.Duration.Seconds; f1(time.Hour)", 3600.0, nil}, TestCase{F, "interface_method_to_func", "f2 := fmt.Stringer.String; f2(time.Hour)", "1h0m0s", nil}, @@ -547,6 +552,8 @@ var testcases = []TestCase{ }() } test_defer_2()`, 2, nil}, + TestCase{A, "defer_3", "v = 0; func testdefer(x uint32) { if x != 0 { defer func() { v = x }() } }; testdefer(29); v", uint32(29), nil}, + TestCase{A, "defer_4", "v = 12; testdefer(0); v", uint32(12), nil}, TestCase{A, "recover_1", `var vpanic interface{} func test_recover(rec bool, panick interface{}) { defer func() { diff --git a/vendor/github.com/cosmos72/gomacro/base/genimport.go b/vendor/github.com/cosmos72/gomacro/base/genimport.go index e94e8dc..46d743f 100644 --- a/vendor/github.com/cosmos72/gomacro/base/genimport.go +++ b/vendor/github.com/cosmos72/gomacro/base/genimport.go @@ -103,10 +103,10 @@ func (gen *genimport) write() { gen.writeUntypeds() gen.writeWrappers() - if gen.mode == ImBuiltin { - gen.out.WriteString("\n\t}\n}\n") - } else { + if gen.mode == ImSharedLib { gen.out.WriteString("\n}\n") + } else { + gen.out.WriteString("\n\t}\n}\n") } gen.writeInterfaceProxies() } @@ -120,7 +120,7 @@ type mapdecl struct { func (gen *genimport) mapdecl(head, althead string) mapdecl { var foot string if gen.mode == ImSharedLib { - foot = "nil," + foot = "nil" } else if strings.IndexByte(althead, '%') < 0 { head = althead } else { @@ -134,13 +134,16 @@ func (d *mapdecl) header() { d.out.WriteString(d.head) d.out.WriteByte('{') d.head = "" - d.foot = "\n\t}," + d.foot = "\n\t}" } } -func (d *mapdecl) footer() { +func (d *mapdecl) footer(more bool) { if len(d.foot) != 0 { d.out.WriteString(d.foot) + if more { + d.out.WriteString(", ") + } } } @@ -226,7 +229,7 @@ func (gen *genimport) writeBinds() { } } } - d.footer() + d.footer(true) } func (gen *genimport) writeTypes() { @@ -241,7 +244,7 @@ func (gen *genimport) writeTypes() { } } } - d.footer() + d.footer(true) } func (gen *genimport) writeProxies() { @@ -255,7 +258,7 @@ func (gen *genimport) writeProxies() { } } } - d.footer() + d.footer(true) } func (gen *genimport) writeUntypeds() { @@ -275,7 +278,7 @@ func (gen *genimport) writeUntypeds() { } } } - d.footer() + d.footer(true) } func (gen *genimport) writeWrappers() { @@ -302,7 +305,7 @@ func (gen *genimport) writeWrappers() { } } } - d.footer() + d.footer(false) } func (gen *genimport) writeInterfaceProxies() { diff --git a/vendor/github.com/cosmos72/gomacro/base/x_package.go b/vendor/github.com/cosmos72/gomacro/base/x_package.go index bb7a2f1..ebf9670 100644 --- a/vendor/github.com/cosmos72/gomacro/base/x_package.go +++ b/vendor/github.com/cosmos72/gomacro/base/x_package.go @@ -40,10 +40,10 @@ func init() { "MakeQuote": r.ValueOf(MakeQuote), "MakeQuote2": r.ValueOf(MakeQuote2), "MarshalUntyped": r.ValueOf(MarshalUntyped), - "MaxInt": r.ValueOf(int64(MaxInt)), - "MaxUint": r.ValueOf(uint64(MaxUint)), + "MaxInt": r.ValueOf(MaxInt), + "MaxUint": r.ValueOf(MaxUint), "MaxUint16": r.ValueOf(MaxUint16), - "MinInt": r.ValueOf(int64(MinInt)), + "MinInt": r.ValueOf(MinInt), "MinUint": r.ValueOf(MinUint), "NewGlobals": r.ValueOf(NewGlobals), "Nil": r.ValueOf(&Nil).Elem(), @@ -56,7 +56,9 @@ func init() { "OptDebugMacroExpand": r.ValueOf(OptDebugMacroExpand), "OptDebugMethod": r.ValueOf(OptDebugMethod), "OptDebugPanicRecover": r.ValueOf(OptDebugPanicRecover), + "OptDebugParse": r.ValueOf(OptDebugParse), "OptDebugQuasiquote": r.ValueOf(OptDebugQuasiquote), + "OptDebugSleepOnSwitch": r.ValueOf(OptDebugSleepOnSwitch), "OptFastInterpreter": r.ValueOf(OptFastInterpreter), "OptMacroExpandOnly": r.ValueOf(OptMacroExpandOnly), "OptPanicStackTrace": r.ValueOf(OptPanicStackTrace), @@ -137,8 +139,7 @@ func init() { "ZeroStrings": r.ValueOf(&ZeroStrings).Elem(), "ZeroTypes": r.ValueOf(&ZeroTypes).Elem(), "ZeroValues": r.ValueOf(&ZeroValues).Elem(), - }, - Types: map[string]r.Type{ + }, Types: map[string]r.Type{ "Globals": r.TypeOf((*Globals)(nil)).Elem(), "ImportMode": r.TypeOf((*ImportMode)(nil)).Elem(), "Importer": r.TypeOf((*Importer)(nil)).Elem(), @@ -150,6 +151,16 @@ func init() { "Stringer": r.TypeOf((*Stringer)(nil)).Elem(), "TypeVisitor": r.TypeOf((*TypeVisitor)(nil)).Elem(), "WhichMacroExpand": r.TypeOf((*WhichMacroExpand)(nil)).Elem(), + }, Untypeds: map[string]string{ + "MinUint": "int:0", + "StrGensym": "string:𒒭", + "StrGensymEmbedded": "string:»", + "StrGensymInterface": "string:\u0080", + "StrGensymPrivate": "string:\u00ad", + }, Wrappers: map[string][]string{ + "Globals": []string{"CollectPackageImports", "Copy", "Debugf", "Error", "Errorf", "Fprintf", "IncLine", "IncLineBytes", "Position", "Sprintf", "ToString", "WarnExtraValues", "Warnf"}, + "Output": []string{"Copy", "Errorf", "Fprintf", "IncLine", "IncLineBytes", "Position", "Sprintf", "ToString"}, + "PackageRef": []string{"Init", "Merge", "SaveToPackages"}, }, - Proxies: map[string]r.Type{}} + } } diff --git a/vendor/github.com/cosmos72/gomacro/benchmark_test.go b/vendor/github.com/cosmos72/gomacro/benchmark_test.go index 05f5c2c..76eb6d3 100644 --- a/vendor/github.com/cosmos72/gomacro/benchmark_test.go +++ b/vendor/github.com/cosmos72/gomacro/benchmark_test.go @@ -440,6 +440,28 @@ func BenchmarkArithFast2(b *testing.B) { } func BenchmarkArithFastConst(b *testing.B) { + ir := fast.New() + // "cheat" a bit and declare n as a constant. checks if constant propagation works :) + ir.DeclConst("n", nil, b.N) + + // interpreted code performs only arithmetic - iteration performed here + expr := ir.Compile("((n*2+3)&4 | 5 ^ 6) / (n|1)") + fun := expr.WithFun().(func(*fast.Env) int) + env := ir.PrepareEnv() + fun(env) + + b.ResetTimer() + total := 0 + for i := 0; i < b.N; i++ { + total += fun(env) + } + if verbose { + println(total) + } +} + + +func BenchmarkArithFastConst2(b *testing.B) { ir := fast.New() ir.Eval("var i, total int") // "cheat" a bit and declare n as a constant. checks if constant propagation works :) diff --git a/vendor/github.com/cosmos72/gomacro/classic/env.go b/vendor/github.com/cosmos72/gomacro/classic/env.go index 32c06ff..ada8e01 100644 --- a/vendor/github.com/cosmos72/gomacro/classic/env.go +++ b/vendor/github.com/cosmos72/gomacro/classic/env.go @@ -113,17 +113,17 @@ func (env *Env) MergePackage(pkg imports.Package) { env.Proxies.Ensure().Merge(pkg.Proxies) } -func (env *Env) ChangePackage(name string) *Env { +func (env *Env) ChangePackage(path string) *Env { fenv := env.FileEnv() - currname := fenv.ThreadGlobals.PackagePath - if name == currname { + currpath := fenv.ThreadGlobals.PackagePath + if path == currpath { return env } - fenv.AsPackage().SaveToPackages(currname) + fenv.AsPackage().SaveToPackages(currpath) - nenv := NewEnv(fenv.TopEnv(), name) - nenv.MergePackage(imports.Packages[name]) - nenv.ThreadGlobals.PackagePath = name + nenv := NewEnv(fenv.TopEnv(), path) + nenv.MergePackage(imports.Packages[path]) + nenv.ThreadGlobals.PackagePath = path return nenv } @@ -173,7 +173,7 @@ func (env *Env) ReadMultiline(in *bufio.Reader, opts ReadOptions) (str string, f } // macroexpand + collect + eval -func (env *Env) ClassicEval(form Ast) (r.Value, []r.Value) { +func (env *Env) classicEval(form Ast) (r.Value, []r.Value) { // macroexpansion phase. form, _ = env.MacroExpandAstCodewalk(form) diff --git a/vendor/github.com/cosmos72/gomacro/classic/fast.go b/vendor/github.com/cosmos72/gomacro/classic/fast.go index 48e9416..ae0717e 100644 --- a/vendor/github.com/cosmos72/gomacro/classic/fast.go +++ b/vendor/github.com/cosmos72/gomacro/classic/fast.go @@ -36,11 +36,11 @@ import ( // temporary helper to invoke the new fast interpreter. // executes macroexpand + collect + compile + eval -func (env *Env) FastEval(form ast2.Ast) (r.Value, []r.Value, xr.Type, []xr.Type) { +func (env *Env) fastEval(form ast2.Ast) (r.Value, []r.Value, xr.Type, []xr.Type) { var f *fast.Interp if env.FastInterp == nil { f = fast.New() - f.Comp.CompileOptions |= fast.CompileKeepUntyped + f.Comp.CompileOptions |= fast.OptKeepUntyped env.FastInterp = f } else { f = env.FastInterp.(*fast.Interp) diff --git a/vendor/github.com/cosmos72/gomacro/classic/inspect.go b/vendor/github.com/cosmos72/gomacro/classic/inspect.go index bbaa68b..7e6bc5c 100644 --- a/vendor/github.com/cosmos72/gomacro/classic/inspect.go +++ b/vendor/github.com/cosmos72/gomacro/classic/inspect.go @@ -51,7 +51,7 @@ func (env *Env) Inspect(in *bufio.Reader, str string, fastInterpreter bool) { var v r.Value var xt xr.Type if fastInterpreter { - v, _, xt, _ = env.FastEval(form) + v, _, xt, _ = env.fastEval(form) } else { v = env.EvalAst1(form) } diff --git a/vendor/github.com/cosmos72/gomacro/classic/interpreter.go b/vendor/github.com/cosmos72/gomacro/classic/interpreter.go index 4246e42..fe6da7f 100644 --- a/vendor/github.com/cosmos72/gomacro/classic/interpreter.go +++ b/vendor/github.com/cosmos72/gomacro/classic/interpreter.go @@ -47,6 +47,31 @@ func New() *Interp { return &Interp{env} } +func (ir *Interp) ChangePackage(path string) { + ir.Env = ir.Env.ChangePackage(path) +} + +// cmd is expected to start with 'package' +func (ir *Interp) cmdPackage(cmd string) { + cmd = strings.TrimSpace(cmd) + space := strings.IndexByte(cmd, ' ') + var arg string + if space >= 0 { + arg = strings.TrimSpace(cmd[1+space:]) + } + n := len(arg) + env := ir.Env + switch { + case n == 0: + fmt.Fprintf(env.Stdout, "// current package: %s %q\n", env.Filename, env.PackagePath) + case arg[0] == '"' && arg[n-1] == '"': + arg := arg[1 : n-1] + ir.Env = env.ChangePackage(arg) + default: + env.Filename = arg + } +} + func (ir *Interp) ReplStdin() { if ir.Options&OptShowPrompt != 0 { fmt.Fprint(ir.Stdout, `// GOMACRO, an interactive Go interpreter with macros @@ -149,7 +174,7 @@ func (ir *Interp) parseEvalPrint(src string, in *bufio.Reader) (callAgain bool) case strings.HasPrefix(":fast", cmd): if len(args) <= 1 { if env.Options&OptFastInterpreter == 0 { - env.Debugf("switched to fast interpreter (incomplete)") + env.Debugf("switched to fast interpreter") } env.Options |= OptFastInterpreter return true @@ -201,17 +226,7 @@ func (ir *Interp) parseEvalPrint(src string, in *bufio.Reader) (callAgain bool) } if !fast { if src == "package" || src == " package" || strings.HasPrefix(src, "package ") || strings.HasPrefix(src, " package ") { - arg := "" - src = strings.TrimSpace(src) - space := strings.IndexByte(src, ' ') - if space >= 0 { - arg = strings.TrimSpace(src[1+space:]) - } - if len(arg) == 0 { - fmt.Fprintf(env.Stdout, "// current package: %v\n", env.PackagePath) - } else { - ir.Env = env.ChangePackage(arg) - } + ir.cmdPackage(src) return true } } @@ -228,7 +243,7 @@ func (ir *Interp) parseEvalPrint(src string, in *bufio.Reader) (callAgain bool) if form != nil { if fast { // macroexpand + collect + eval - xvalue, xvalues, xtype, xtypes := env.FastEval(form) + xvalue, xvalues, xtype, xtypes := env.fastEval(form) value, values, typ = xvalue, xvalues, xtype types := make([]interface{}, len(xtypes)) for i, xt := range xtypes { @@ -236,7 +251,7 @@ func (ir *Interp) parseEvalPrint(src string, in *bufio.Reader) (callAgain bool) } } else { // macroexpand + collect + eval - value, values = env.ClassicEval(form) + value, values = env.classicEval(form) } } // print phase @@ -271,3 +286,26 @@ func (ir *Interp) parseEvalPrint(src string, in *bufio.Reader) (callAgain bool) } return true } + +func (ir *Interp) EvalFile(filePath string, pkgPath string) { + file, err := os.Open(filePath) + if err != nil { + ir.Errorf("error opening file '%s': %v", filePath, err) + return + } + defer file.Close() + + savePath := ir.Env.ThreadGlobals.PackagePath + saveOpts := ir.Env.Options + + ir.ChangePackage(pkgPath) + ir.Env.Options &^= OptShowEval + + defer func() { + ir.ChangePackage(savePath) + ir.Env.Options = saveOpts + }() + + in := bufio.NewReader(file) + ir.Repl(in) +} diff --git a/vendor/github.com/cosmos72/gomacro/classic/output.go b/vendor/github.com/cosmos72/gomacro/classic/output.go index fd0c9f0..91d53ed 100644 --- a/vendor/github.com/cosmos72/gomacro/classic/output.go +++ b/vendor/github.com/cosmos72/gomacro/classic/output.go @@ -44,10 +44,10 @@ func (ir *ThreadGlobals) ShowHelp(out io.Writer) { fmt.Fprint(out, `// type Go code to execute it. example: func add(x, y int) int { return x + y } // interpreter commands: -:classic CODE execute CODE using the classic interpreter (default) +:classic CODE execute CODE using the classic interpreter :env [name] show available functions, variables and constants in current package, or from imported package "name" -:fast CODE execute CODE using the fast interpreter (incomplete) +:fast CODE execute CODE using the fast interpreter (default) :help show this help :inspect EXPR inspect expression interactively :options [OPTS] show or toggle interpreter options diff --git a/vendor/github.com/cosmos72/gomacro/classic/x_package.go b/vendor/github.com/cosmos72/gomacro/classic/x_package.go index 1bb1bab..c8961b5 100644 --- a/vendor/github.com/cosmos72/gomacro/classic/x_package.go +++ b/vendor/github.com/cosmos72/gomacro/classic/x_package.go @@ -14,11 +14,11 @@ func init() { imports.Packages["github.com/cosmos72/gomacro/classic"] = imports.Package{ Binds: map[string]r.Value{ "MultiThread": r.ValueOf(MultiThread), + "New": r.ValueOf(New), "NewEnv": r.ValueOf(NewEnv), "NewThreadGlobals": r.ValueOf(NewThreadGlobals), "NilEnv": r.ValueOf(&NilEnv).Elem(), - }, - Types: map[string]r.Type{ + }, Types: map[string]r.Type{ "BindMap": r.TypeOf((*BindMap)(nil)).Elem(), "CallFrame": r.TypeOf((*CallFrame)(nil)).Elem(), "CallStack": r.TypeOf((*CallStack)(nil)).Elem(), @@ -28,11 +28,18 @@ func init() { "Function": r.TypeOf((*Function)(nil)).Elem(), "Inspector": r.TypeOf((*Inspector)(nil)).Elem(), "Interface": r.TypeOf((*Interface)(nil)).Elem(), + "Interp": r.TypeOf((*Interp)(nil)).Elem(), "Macro": r.TypeOf((*Macro)(nil)).Elem(), "Methods": r.TypeOf((*Methods)(nil)).Elem(), "ThreadGlobals": r.TypeOf((*ThreadGlobals)(nil)).Elem(), "TypeMap": r.TypeOf((*TypeMap)(nil)).Elem(), "TypedValue": r.TypeOf((*TypedValue)(nil)).Elem(), + }, Untypeds: map[string]string{ + "MultiThread": "bool:true", + }, Wrappers: map[string][]string{ + "Env": []string{"CollectAst", "CollectNode", "CollectPackageImports", "Copy", "Debugf", "Error", "Errorf", "Fprintf", "Gensym", "GensymEmbedded", "GensymPrivate", "ImportPackage", "IncLine", "IncLineBytes", "Init", "LookupPackage", "ObjMethodByName", "ParseBytes", "Position", "ShowHelp", "Sprintf", "ToString", "WarnExtraValues", "Warnf", "WriteDeclsToFile", "WriteDeclsToStream"}, + "Interp": []string{"AsPackage", "CallerFrame", "ChangePackage", "ClassicEval", "CollectAst", "CollectNode", "CollectPackageImports", "Copy", "CurrentFrame", "Debugf", "DefineConst", "DefineFunc", "DefineVar", "Error", "Errorf", "Eval", "Eval1", "EvalAst", "EvalAst1", "EvalNode", "EvalNode1", "FastEval", "FileEnv", "Fprintf", "Gensym", "GensymEmbedded", "GensymPrivate", "ImportPackage", "IncLine", "IncLineBytes", "Init", "Inspect", "LookupPackage", "MacroExpand", "MacroExpand1", "MacroExpandAstCodewalk", "MacroExpandCodewalk", "MergePackage", "ObjMethodByName", "Parse", "ParseBytes", "ParseOnly", "Position", "ReadMultiline", "ShowHelp", "ShowPackage", "Sprintf", "ToString", "TopEnv", "ValueOf", "WarnExtraValues", "Warnf", "WriteDeclsToFile", "WriteDeclsToStream"}, + "ThreadGlobals": []string{"CollectAst", "CollectNode", "CollectPackageImports", "Copy", "Debugf", "Error", "Errorf", "Fprintf", "Gensym", "GensymEmbedded", "GensymPrivate", "ImportPackage", "IncLine", "IncLineBytes", "Init", "LookupPackage", "ParseBytes", "Position", "Sprintf", "ToString", "WarnExtraValues", "Warnf", "WriteDeclsToFile", "WriteDeclsToStream"}, }, - Proxies: map[string]r.Type{}} + } } diff --git a/vendor/github.com/cosmos72/gomacro/example/earljwagner1/earljwagner1.go b/vendor/github.com/cosmos72/gomacro/example/earljwagner1/earljwagner1.go new file mode 100644 index 0000000..bbcfd14 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/earljwagner1/earljwagner1.go @@ -0,0 +1,62 @@ +package main + +import ( + "fmt" + "reflect" + + "github.com/cosmos72/gomacro/classic" + "github.com/cosmos72/gomacro/imports" +) + +// example from Earl J Wagner use case: +// interactively replace a (bugged) compiled function with a (corrected) interpreted one +func main() { + // 1. allocate the classic interpreter. Reason: the fast interpreter cannot yet switch package + ir := classic.New() + + // 2. tell the interpreter about our compiled function Cube() in package "github.com/cosmos72/gomacro/example/earljwagner1" + // An alternative solution is to run the interpreter interactively, and at its REPL enter the command: + // import _i "package/to/generate/imports/for" + // (note: the _i is fundamental) + // This will create a file x_package.go in the imported package - just recompile and rerun you program: + // the interpreter will now be able to 'import "package/to/generate/imports/for"' + // without the need to dynamically compile and load a plugin + imports.Packages["github.com/cosmos72/gomacro/example/earljwagner1"] = imports.Package{ + Binds: map[string]reflect.Value{ + "Cube": reflect.ValueOf(Cube), + }, + } + + // 3. tell the interpreter to import the package containing our Cube() + ir.Eval(`import "github.com/cosmos72/gomacro/example/earljwagner1"`) + + // 4. execute compiled Cube() - and realise it's bugged + xcube, _ := ir.Eval("earljwagner1.Cube(3.0)") + fmt.Printf("compiled earljwagner1.Cube(3.0) = %f\n", xcube.Interface().(float64)) + + // 5. tell the interpreter to switch to package "github.com/cosmos72/gomacro/example/earljwagner1" + // at REPL, one would instead type the following (note the quotes): + // package "github.com/cosmos72/gomacro/example/earljwagner1" + ir.ChangePackage("github.com/cosmos72/gomacro/example/earljwagner1") + + // 6. the compiled function Cube() can now be invoked without package prefix + xcube, _ = ir.Eval("Cube(4.0)") + fmt.Printf("compiled Cube(4.0) = %f\n", xcube.Interface().(float64)) + + // 7. define an interpreted function Cube(), replacing the compiled one + ir.Eval("func Cube(x float64) float64 { return x*x*x }") + + // 8. invoke the interpreted function Cube() - the bug is solved :) + xcube, _ = ir.Eval("Cube(4.0)") + fmt.Printf("interpreted Cube(4.0) = %f\n", xcube.Interface().(float64)) + + // 9. note: compiled code will *NOT* automatically know about the bug-fixed Cube() living inside the interpreter. + // One solution is to stay inside the interpreter REPL and use interpreted functions. + // Another solution is to extract the bug-fixed function from the interpreter and use it, + // for example by storing it inside imports.Packages + imports.Packages["github.com/cosmos72/gomacro/example/earljwagner1"].Binds["Cube"] = ir.ValueOf("Cube") +} + +func Cube(x float64) float64 { + return x*x*x - 1 // intentionally bugged +} diff --git a/vendor/github.com/cosmos72/gomacro/example/earljwagner2/cube.go b/vendor/github.com/cosmos72/gomacro/example/earljwagner2/cube.go new file mode 100644 index 0000000..d5ae529 --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/earljwagner2/cube.go @@ -0,0 +1,5 @@ +package main + +func Cube(x float64) float64 { + return x*x*x - 1 // intentionally bugged +} diff --git a/vendor/github.com/cosmos72/gomacro/example/earljwagner2/earljwagner2.go b/vendor/github.com/cosmos72/gomacro/example/earljwagner2/earljwagner2.go new file mode 100644 index 0000000..80b431c --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/earljwagner2/earljwagner2.go @@ -0,0 +1,54 @@ +package main + +import ( + "errors" + "fmt" + + "github.com/cosmos72/gomacro/classic" + "github.com/cosmos72/gomacro/imports" +) + +func fail(format string, args ...interface{}) { + panic(errors.New(fmt.Sprintf(format, args...))) +} + +// example from Earl J Wagner use case: load a file in the interpreter, +// then interactively replace a (bugged) interpreted function +// with another (corrected) interpreted function, +// without losing the packages already loaded in the intepreter +func main() { + // 1. allocate the classic interpreter. Reason: the fast interpreter cannot yet switch package + ir := classic.New() + + // 2. tell the interpreter to load the file "cube.go" into the package "github.com/cosmos72/gomacro/example/earljwagner2" + ir.EvalFile("cube.go", "github.com/cosmos72/gomacro/example/earljwagner2") + + // 3. tell the interpreter to import the package containing the interpreted function Cube() loaded from file + ir.Eval(`import "github.com/cosmos72/gomacro/example/earljwagner2"`) + + // 4. execute interpreted Cube() loaded from file - and realise it's bugged + xcube, _ := ir.Eval("earljwagner2.Cube(3.0)") + fmt.Printf("interpreted earljwagner2.Cube(3.0) = %f\n", xcube.Interface().(float64)) + + // 5. tell the interpreter to switch to package "github.com/cosmos72/gomacro/example/earljwagner2" + // at REPL, one would instead type the following (note the quotes): + // package "github.com/cosmos72/gomacro/example/earljwagner2" + ir.ChangePackage("github.com/cosmos72/gomacro/example/earljwagner2") + + // 6. the interpreted function Cube() can now be invoked without package prefix + xcube, _ = ir.Eval("Cube(4.0)") + fmt.Printf("interpreted Cube(4.0) = %f\n", xcube.Interface().(float64)) + + // 7. redefine the interpreted function Cube(), replacing the loaded one + ir.Eval("func Cube(x float64) float64 { return x*x*x }") + + // 8. invoke the redefined function Cube() - the bug is solved :) + xcube, _ = ir.Eval("Cube(4.0)") + fmt.Printf("interpreted Cube(4.0) = %f\n", xcube.Interface().(float64)) + + // 9. note: compiled code will *NOT* automatically know about the bug-fixed Cube() living inside the interpreter. + // One solution is to stay inside the interpreter REPL and use interpreted functions. + // Another solution is to extract the bug-fixed function from the interpreter and use it, + // for example by storing it inside imports.Packages + imports.Packages["github.com/cosmos72/gomacro/example/earljwagner2"].Binds["Cube"] = ir.ValueOf("Cube") +} diff --git a/vendor/github.com/cosmos72/gomacro/example/interface.go b/vendor/github.com/cosmos72/gomacro/example/interface.go new file mode 100644 index 0000000..cdd298a --- /dev/null +++ b/vendor/github.com/cosmos72/gomacro/example/interface.go @@ -0,0 +1,57 @@ +// #!/usr/bin/env gomacro + +package main + +import "fmt" + +type Person struct { + Name, Surname string +} + +type Driver struct { + CanDrive []string + Person +} + +func (p Person) String() string { + return fmt.Sprintf("%s %s", p.Name, p.Surname) +} + +var p = Person{"John", "Smith"} +var d = Driver{nil, p} + +func pd() (Person, Driver) { return p, d } + +type FmtPair struct{ a, b fmt.Stringer } + +func fmtpair(a, b fmt.Stringer) FmtPair { return FmtPair{a, b} } + +func conv() { + fmt.Printf("%v\n", p) + fmt.Printf("%v\n", d) + + fmtpair(pd()) + + var s fmt.Stringer + var ch = make(chan fmt.Stringer, 2) + + s = p + ch <- s + fmt.Printf("%v\n", <-ch) + + s = d + ch <- s + fmt.Printf("%v\n", <-ch) + + ch <- p + fmt.Printf("%v\n", <-ch) + + ch <- d + fmt.Printf("%v\n", <-ch) + + fp := func() fmt.Stringer { return p } + fmt.Printf("%v\n", fp()) + + fd := func() fmt.Stringer { return d } + fmt.Printf("%v\n", fd()) +} diff --git a/vendor/github.com/cosmos72/gomacro/example/dummy.go b/vendor/github.com/cosmos72/gomacro/example/main.go similarity index 89% rename from vendor/github.com/cosmos72/gomacro/example/dummy.go rename to vendor/github.com/cosmos72/gomacro/example/main.go index 4201d66..bc5674e 100644 --- a/vendor/github.com/cosmos72/gomacro/example/dummy.go +++ b/vendor/github.com/cosmos72/gomacro/example/main.go @@ -10,9 +10,12 @@ import ( r "reflect" ) -var TypeOfInterface = r.TypeOf((*interface{})(nil)).Elem() - func main() { + conv() +} + +func main2() { + var TypeOfInterface = r.TypeOf((*interface{})(nil)).Elem() p := r.ValueOf(new(interface{})) i := p.Elem() c := i.Convert(TypeOfInterface) diff --git a/vendor/github.com/cosmos72/gomacro/fast/address.go b/vendor/github.com/cosmos72/gomacro/fast/address.go index 29a9a42..342af20 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/address.go +++ b/vendor/github.com/cosmos72/gomacro/fast/address.go @@ -84,113 +84,204 @@ func (va *Var) Address(maxdepth int) *Expr { return nil } var ret I + intbinds := va.Desc.Class() == IntBind switch upn { case 0: switch k { case r.Bool: - ret = func(env *Env) *bool { - env.AddressTaken = true - return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *bool { + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *bool { + return env.Binds[index].Addr().Interface().(*bool) + } } case r.Int: - ret = func(env *Env) *int { - env.AddressTaken = true - return (*int)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *int { + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int { + return env.Binds[index].Addr().Interface().(*int) + } } case r.Int8: - ret = func(env *Env) *int8 { - env.AddressTaken = true - return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *int8 { + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int8 { + return env.Binds[index].Addr().Interface().(*int8) + } } case r.Int16: - ret = func(env *Env) *int16 { - env.AddressTaken = true - return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *int16 { + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int16 { + return env.Binds[index].Addr().Interface().(*int16) + } } case r.Int32: - ret = func(env *Env) *int32 { - env.AddressTaken = true - return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *int32 { + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int32 { + return env.Binds[index].Addr().Interface().(*int32) + } } case r.Int64: - ret = func(env *Env) *int64 { - env.AddressTaken = true - return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *int64 { + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int64 { + return env.Binds[index].Addr().Interface().(*int64) + } } case r.Uint: - ret = func(env *Env) *uint { - env.AddressTaken = true - return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *uint { + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint { + return env.Binds[index].Addr().Interface().(*uint) + } } case r.Uint8: - ret = func(env *Env) *uint8 { - env.AddressTaken = true - return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *uint8 { + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint8 { + return env.Binds[index].Addr().Interface().(*uint8) + } } case r.Uint16: - ret = func(env *Env) *uint16 { - env.AddressTaken = true - return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *uint16 { + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint16 { + return env.Binds[index].Addr().Interface().(*uint16) + } } case r.Uint32: - ret = func(env *Env) *uint32 { - env.AddressTaken = true - return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *uint32 { + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint32 { + return env.Binds[index].Addr().Interface().(*uint32) + } } case r.Uint64: - ret = func(env *Env) *uint64 { - env.AddressTaken = true - return &env.IntBinds[index] + if intbinds { + ret = func(env *Env) *uint64 { + env.AddressTaken = true + return &env.IntBinds[index] + } + } else { + ret = func(env *Env) *uint64 { + return env.Binds[index].Addr().Interface().(*uint64) + } } case r.Uintptr: - ret = func(env *Env) *uintptr { - env.AddressTaken = true - return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *uintptr { + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uintptr { + return env.Binds[index].Addr().Interface().(*uintptr) + } } case r.Float32: - ret = func(env *Env) *float32 { - env.AddressTaken = true - return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *float32 { + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float32 { + return env.Binds[index].Addr().Interface().(*float32) + } } case r.Float64: - ret = func(env *Env) *float64 { - env.AddressTaken = true - return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *float64 { + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float64 { + return env.Binds[index].Addr().Interface().(*float64) + } } case r.Complex64: - ret = func(env *Env) *complex64 { - env.AddressTaken = true - return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + if intbinds { + ret = func(env *Env) *complex64 { + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *complex64 { + return env.Binds[index].Addr().Interface().(*complex64) + } } default: @@ -202,153 +293,273 @@ func (va *Var) Address(maxdepth int) *Expr { switch k { case r.Bool: - ret = func(env *Env) *bool { - env = env. - Outer + if intbinds { + ret = func(env *Env) *bool { + env = env. + Outer - env.AddressTaken = true - return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *bool { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*bool) + } } case r.Int: - ret = func(env *Env) *int { - env = env. - Outer + if intbinds { + ret = func(env *Env) *int { + env = env. + Outer - env.AddressTaken = true - return (*int)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*int) + } } case r.Int8: - ret = func(env *Env) *int8 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *int8 { + env = env. + Outer - env.AddressTaken = true - return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int8 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*int8) + } } case r.Int16: - ret = func(env *Env) *int16 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *int16 { + env = env. + Outer - env.AddressTaken = true - return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int16 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*int16) + } } case r.Int32: - ret = func(env *Env) *int32 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *int32 { + env = env. + Outer - env.AddressTaken = true - return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int32 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*int32) + } } case r.Int64: - ret = func(env *Env) *int64 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *int64 { + env = env. + Outer - env.AddressTaken = true - return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int64 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*int64) + } } case r.Uint: - ret = func(env *Env) *uint { - env = env. - Outer + if intbinds { + ret = func(env *Env) *uint { + env = env. + Outer - env.AddressTaken = true - return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*uint) + } } case r.Uint8: - ret = func(env *Env) *uint8 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *uint8 { + env = env. + Outer - env.AddressTaken = true - return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint8 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*uint8) + } } case r.Uint16: - ret = func(env *Env) *uint16 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *uint16 { + env = env. + Outer - env.AddressTaken = true - return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint16 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*uint16) + } } case r.Uint32: - ret = func(env *Env) *uint32 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *uint32 { + env = env. + Outer - env.AddressTaken = true - return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint32 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*uint32) + } } case r.Uint64: - ret = func(env *Env) *uint64 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *uint64 { + env = env. + Outer - env.AddressTaken = true - return &env.IntBinds[index] + env.AddressTaken = true + return &env.IntBinds[index] + } + } else { + ret = func(env *Env) *uint64 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*uint64) + } } case r.Uintptr: - ret = func(env *Env) *uintptr { - env = env. - Outer + if intbinds { + ret = func(env *Env) *uintptr { + env = env. + Outer - env.AddressTaken = true - return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uintptr { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*uintptr) + } } case r.Float32: - ret = func(env *Env) *float32 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *float32 { + env = env. + Outer - env.AddressTaken = true - return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float32 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*float32) + } } case r.Float64: - ret = func(env *Env) *float64 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *float64 { + env = env. + Outer - env.AddressTaken = true - return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float64 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*float64) + } } case r.Complex64: - ret = func(env *Env) *complex64 { - env = env. - Outer + if intbinds { + ret = func(env *Env) *complex64 { + env = env. + Outer - env.AddressTaken = true - return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *complex64 { + env = env. + Outer + return env.Binds[index].Addr().Interface().(*complex64) + } } default: @@ -363,153 +574,273 @@ func (va *Var) Address(maxdepth int) *Expr { switch k { case r.Bool: - ret = func(env *Env) *bool { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *bool { + env = env. + Outer.Outer - env.AddressTaken = true - return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *bool { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*bool) + } } case r.Int: - ret = func(env *Env) *int { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *int { + env = env. + Outer.Outer - env.AddressTaken = true - return (*int)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*int) + } } case r.Int8: - ret = func(env *Env) *int8 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *int8 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int8 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*int8) + } } case r.Int16: - ret = func(env *Env) *int16 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *int16 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int16 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*int16) + } } case r.Int32: - ret = func(env *Env) *int32 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *int32 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int32 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*int32) + } } case r.Int64: - ret = func(env *Env) *int64 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *int64 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int64 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*int64) + } } case r.Uint: - ret = func(env *Env) *uint { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *uint { + env = env. + Outer.Outer - env.AddressTaken = true - return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*uint) + } } case r.Uint8: - ret = func(env *Env) *uint8 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *uint8 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint8 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*uint8) + } } case r.Uint16: - ret = func(env *Env) *uint16 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *uint16 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint16 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*uint16) + } } case r.Uint32: - ret = func(env *Env) *uint32 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *uint32 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint32 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*uint32) + } } case r.Uint64: - ret = func(env *Env) *uint64 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *uint64 { + env = env. + Outer.Outer - env.AddressTaken = true - return &env.IntBinds[index] + env.AddressTaken = true + return &env.IntBinds[index] + } + } else { + ret = func(env *Env) *uint64 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*uint64) + } } case r.Uintptr: - ret = func(env *Env) *uintptr { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *uintptr { + env = env. + Outer.Outer - env.AddressTaken = true - return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uintptr { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*uintptr) + } } case r.Float32: - ret = func(env *Env) *float32 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *float32 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float32 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*float32) + } } case r.Float64: - ret = func(env *Env) *float64 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *float64 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float64 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*float64) + } } case r.Complex64: - ret = func(env *Env) *complex64 { - env = env. - Outer.Outer + if intbinds { + ret = func(env *Env) *complex64 { + env = env. + Outer.Outer - env.AddressTaken = true - return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *complex64 { + env = env. + Outer.Outer + return env.Binds[index].Addr().Interface().(*complex64) + } } default: @@ -524,183 +855,333 @@ func (va *Var) Address(maxdepth int) *Expr { switch k { case r.Bool: - ret = func(env *Env) *bool { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *bool { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *bool { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*bool) + } } case r.Int: - ret = func(env *Env) *int { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *int { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*int)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*int) + } } case r.Int8: - ret = func(env *Env) *int8 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *int8 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int8 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*int8) + } } case r.Int16: - ret = func(env *Env) *int16 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *int16 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int16 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*int16) + } } case r.Int32: - ret = func(env *Env) *int32 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *int32 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int32 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*int32) + } } case r.Int64: - ret = func(env *Env) *int64 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *int64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*int64) + } } case r.Uint: - ret = func(env *Env) *uint { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *uint { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*uint) + } } case r.Uint8: - ret = func(env *Env) *uint8 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *uint8 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint8 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*uint8) + } } case r.Uint16: - ret = func(env *Env) *uint16 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *uint16 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint16 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*uint16) + } } case r.Uint32: - ret = func(env *Env) *uint32 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *uint32 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint32 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*uint32) + } } case r.Uint64: - ret = func(env *Env) *uint64 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *uint64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return &env.IntBinds[index] + env.AddressTaken = true + return &env.IntBinds[index] + } + } else { + ret = func(env *Env) *uint64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*uint64) + } } case r.Uintptr: - ret = func(env *Env) *uintptr { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *uintptr { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uintptr { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*uintptr) + } } case r.Float32: - ret = func(env *Env) *float32 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *float32 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float32 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*float32) + } } case r.Float64: - ret = func(env *Env) *float64 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *float64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*float64) + } } case r.Complex64: - ret = func(env *Env) *complex64 { - env = env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - env = env.Outer - } + if intbinds { + ret = func(env *Env) *complex64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } - env.AddressTaken = true - return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *complex64 { + env = env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Binds[index].Addr().Interface().(*complex64) + } } default: @@ -717,138 +1198,243 @@ func (va *Var) Address(maxdepth int) *Expr { switch k { case r.Bool: - ret = func(env *Env) *bool { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *bool { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *bool { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*bool) + } } case r.Int: - ret = func(env *Env) *int { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *int { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*int)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*int) + } } case r.Int8: - ret = func(env *Env) *int8 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *int8 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int8 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*int8) + } } case r.Int16: - ret = func(env *Env) *int16 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *int16 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int16 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*int16) + } } case r.Int32: - ret = func(env *Env) *int32 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *int32 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int32 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*int32) + } } case r.Int64: - ret = func(env *Env) *int64 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *int64 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int64 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*int64) + } } case r.Uint: - ret = func(env *Env) *uint { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *uint { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*uint) + } } case r.Uint8: - ret = func(env *Env) *uint8 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *uint8 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint8 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*uint8) + } } case r.Uint16: - ret = func(env *Env) *uint16 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *uint16 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint16 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*uint16) + } } case r.Uint32: - ret = func(env *Env) *uint32 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *uint32 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint32 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*uint32) + } } case r.Uint64: - ret = func(env *Env) *uint64 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *uint64 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return &env.IntBinds[index] + env.AddressTaken = true + return &env.IntBinds[index] + } + } else { + ret = func(env *Env) *uint64 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*uint64) + } } case r.Uintptr: - ret = func(env *Env) *uintptr { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *uintptr { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uintptr { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*uintptr) + } } case r.Float32: - ret = func(env *Env) *float32 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *float32 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float32 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*float32) + } } case r.Float64: - ret = func(env *Env) *float64 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *float64 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float64 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*float64) + } } case r.Complex64: - ret = func(env *Env) *complex64 { - env = env.ThreadGlobals.FileEnv + if intbinds { + ret = func(env *Env) *complex64 { + env = env.ThreadGlobals.FileEnv - env.AddressTaken = true - return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *complex64 { + env = env.ThreadGlobals.FileEnv + return env.Binds[index].Addr().Interface().(*complex64) + } } default: @@ -862,138 +1448,243 @@ func (va *Var) Address(maxdepth int) *Expr { switch k { case r.Bool: - ret = func(env *Env) *bool { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *bool { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*bool)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *bool { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*bool) + } } case r.Int: - ret = func(env *Env) *int { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *int { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*int)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*int) + } } case r.Int8: - ret = func(env *Env) *int8 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *int8 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int8 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*int8) + } } case r.Int16: - ret = func(env *Env) *int16 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *int16 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int16 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*int16) + } } case r.Int32: - ret = func(env *Env) *int32 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *int32 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int32 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*int32) + } } case r.Int64: - ret = func(env *Env) *int64 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *int64 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*int64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *int64 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*int64) + } } case r.Uint: - ret = func(env *Env) *uint { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *uint { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*uint) + } } case r.Uint8: - ret = func(env *Env) *uint8 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *uint8 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint8)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint8 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*uint8) + } } case r.Uint16: - ret = func(env *Env) *uint16 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *uint16 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint16)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint16 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*uint16) + } } case r.Uint32: - ret = func(env *Env) *uint32 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *uint32 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uint32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uint32 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*uint32) + } } case r.Uint64: - ret = func(env *Env) *uint64 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *uint64 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return &env.IntBinds[index] + env.AddressTaken = true + return &env.IntBinds[index] + } + } else { + ret = func(env *Env) *uint64 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*uint64) + } } case r.Uintptr: - ret = func(env *Env) *uintptr { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *uintptr { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*uintptr)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *uintptr { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*uintptr) + } } case r.Float32: - ret = func(env *Env) *float32 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *float32 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float32)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float32 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*float32) + } } case r.Float64: - ret = func(env *Env) *float64 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *float64 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*float64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *float64 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*float64) + } } case r.Complex64: - ret = func(env *Env) *complex64 { - env = env.ThreadGlobals.TopEnv + if intbinds { + ret = func(env *Env) *complex64 { + env = env.ThreadGlobals.TopEnv - env.AddressTaken = true - return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + env.AddressTaken = true + return (*complex64)(unsafe.Pointer(&env.IntBinds[index])) + } + } else { + ret = func(env *Env) *complex64 { + env = env.ThreadGlobals.TopEnv + return env.Binds[index].Addr().Interface().(*complex64) + } } default: diff --git a/vendor/github.com/cosmos72/gomacro/fast/address.gomacro b/vendor/github.com/cosmos72/gomacro/fast/address.gomacro index 726122c..6d4424c 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/address.gomacro +++ b/vendor/github.com/cosmos72/gomacro/fast/address.gomacro @@ -49,7 +49,7 @@ import ( :func faddress(upn int, typ ast.Node) ast.Node { // the return type of Eval() and EvalType() varies. better check early. var t r.Type = EvalType(typ) - var decls, bind, rettype ast.Node + var decls, addresstaken, bind, rettype ast.Node if upn == 0 { decls = ~'{{ }} @@ -78,20 +78,34 @@ import ( // because env.Binds[index] actually contains a pointer to the variable bind = ~'{env .Binds[index].Addr()} rettype = ~'{r.Value} - } else { - decls = ~"{~,@decls; env.AddressTaken = true} - rettype = ~"{* ~,typ} - if t.Kind() == r.Uint64 { - bind = ~'{&env.IntBinds[index]} - } else { - bind = ~"{(*~,typ)(unsafe.Pointer(&env.IntBinds[index]))} + return ~"{ + ret = func(env *Env) (~,rettype) { + ~,@decls + return ~,bind + } } } + addresstaken = ~"{{env.AddressTaken = true}} + rettype = ~"{* ~,typ} + if t.Kind() == r.Uint64 { + bind = ~'{&env.IntBinds[index]} + } else { + bind = ~"{(*~,typ)(unsafe.Pointer(&env.IntBinds[index]))} + } + return ~"{ - ret = func(env *Env) (~,rettype) { - ~,@decls - return ~,bind + if intbinds { + ret = func(env *Env) (~,rettype) { + ~,@decls + ~,addresstaken + return ~,bind + } + } else { + ret = func(env *Env) (~,rettype) { + ~,@decls + return env.Binds[index].Addr().Interface().(~,rettype) + } } } } @@ -175,13 +189,14 @@ func (va *Var) Address(maxdepth int) *Expr { return nil } var ret I + intbinds := va.Desc.Class() == IntBind switch upn { - case 0: {addresses; 0} - case 1: {addresses; 1} - case 2: {addresses; 2} - default: {addresses; -1} - case maxdepth-1: {addresses; -2} - case maxdepth: {addresses; -3} + case 0: addresses; 0 + case 1: addresses; 1 + case 2: addresses; 2 + default: addresses; -1 + case maxdepth-1: addresses; -2 + case maxdepth: addresses; -3 } return &Expr{Lit: Lit{Type: xr.PtrTo(va.Type)}, Fun: ret} } diff --git a/vendor/github.com/cosmos72/gomacro/fast/assignment.go b/vendor/github.com/cosmos72/gomacro/fast/assignment.go index edb5833..c8246dd 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/assignment.go +++ b/vendor/github.com/cosmos72/gomacro/fast/assignment.go @@ -135,7 +135,9 @@ func (c *Comp) assignPrepareRhs(node *ast.AssignStmt, places []*Place, exprs []* tplace := places[i].Type if expr.Const() { expr.ConstTo(tplace) - } else if !expr.Type.AssignableTo(tplace) { + } else if expr.Type.AssignableTo(tplace) { + expr.To(c, tplace) + } else { c.Pos = rhs[i].Pos() c.Errorf("cannot use <%v> as <%v> in assignment: %v %v %v", expr.Type, tplace, lhs[i], node.Tok, rhs[i]) } @@ -150,15 +152,34 @@ func (c *Comp) assignPrepareRhs(node *ast.AssignStmt, places []*Place, exprs []* c.Pos = node.Pos() c.Errorf("invalid assignment: expression returns %d values, cannot assign them to %d places: %v", nexpr, ln, node) } + convs := make([]func(r.Value, r.Type) r.Value, nexpr) + rtypes := make([]r.Type, nexpr) + needconvs := false for i := 0; i < nexpr; i++ { texpr := expr.Out(i) tplace := places[i].Type if !texpr.AssignableTo(tplace) { c.Pos = lhs[i].Pos() c.Errorf("cannot assign <%v> to %v <%v> in multiple assignment", texpr, lhs[i], tplace) + } else if conv := c.Converter(texpr, tplace); conv != nil { + convs[i] = conv + rtypes[i] = tplace.ReflectType() + needconvs = true + } + } + f := expr.AsXV(OptDefaults) + if needconvs { + return nil, func(env *Env) (r.Value, []r.Value) { + _, vs := f(env) + for i, conv := range convs { + if conv != nil { + vs[i] = conv(vs[i], rtypes[i]) + } + } + return vs[0], vs } } - return nil, expr.AsXV(CompileDefaults) + return nil, f } c.Pos = node.Pos() c.Errorf("invalid assignment, cannot assign %d values to %d places: %v", rn, ln, node) diff --git a/vendor/github.com/cosmos72/gomacro/fast/binary.go b/vendor/github.com/cosmos72/gomacro/fast/binary.go index eb38297..cfc7eb8 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/binary.go +++ b/vendor/github.com/cosmos72/gomacro/fast/binary.go @@ -97,7 +97,7 @@ func (c *Comp) BinaryExpr1(node *ast.BinaryExpr, x *Expr, y *Expr) *Expr { } if bothConst { // constant propagation - z.EvalConst(CompileKeepUntyped) + z.EvalConst(OptKeepUntyped) } return z } diff --git a/vendor/github.com/cosmos72/gomacro/fast/builtin.go b/vendor/github.com/cosmos72/gomacro/fast/builtin.go index 0d658f6..ef31d10 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/builtin.go +++ b/vendor/github.com/cosmos72/gomacro/fast/builtin.go @@ -179,7 +179,7 @@ func compileAppend(c *Comp, sym Symbol, node *ast.CallExpr) *Call { argi := c.Expr1(node.Args[i]) if argi.Const() { argi.ConstTo(telem) - } else if ti := argi.Type; !xr.SameType(ti, telem) && (ti == nil || !ti.AssignableTo(telem)) { + } else if ti := argi.Type; ti == nil || !ti.AssignableTo(telem) { return c.badBuiltinCallArgType(sym.Name, node.Args[i], ti, telem) } args[i] = argi @@ -606,7 +606,7 @@ func callPanic(arg interface{}) { func compilePanic(c *Comp, sym Symbol, node *ast.CallExpr) *Call { arg := c.Expr1(node.Args[0]) - arg.To(c.TypeOfInterface()) + arg.To(c, c.TypeOfInterface()) t := c.TypeOf(callPanic) sym.Type = t fun := exprLit(Lit{Type: t, Value: callPanic}, &sym) @@ -630,7 +630,7 @@ func getStdout(env *Env) r.Value { func compilePrint(c *Comp, sym Symbol, node *ast.CallExpr) *Call { args := c.Exprs(node.Args) for _, arg := range args { - arg.To(c.TypeOfInterface()) + arg.To(c, c.TypeOfInterface()) } arg0 := exprFun(c.TypeOfInterface(), getStdout) // no need to build TypeOfIoWriter args = append([]*Expr{arg0}, args...) diff --git a/vendor/github.com/cosmos72/gomacro/fast/call.go b/vendor/github.com/cosmos72/gomacro/fast/call.go index 7c0a9df..a2afd73 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/call.go +++ b/vendor/github.com/cosmos72/gomacro/fast/call.go @@ -154,7 +154,7 @@ func (c *Comp) call_any(call *Call) *Expr { } // constant propagation - only if function returns a single value if call.Const && len(call.OutTypes) == 1 { - expr.EvalConst(CompileDefaults) + expr.EvalConst(OptDefaults) // c.Debugf("pre-computed result of constant call %v: %v <%v>", call, expr.Value, TypeOf(expr.Value)) } return expr @@ -187,17 +187,30 @@ func (c *Comp) checkCallArgs(node *ast.CallExpr, t xr.Type, args []*Expr, ellips if variadic { tlast = t.In(n - 1).Elem() } + var convs []func(r.Value, r.Type) r.Value + var rtypes []r.Type + needconvs := false + multivalue := len(args) != narg + if multivalue { + convs = make([]func(r.Value, r.Type) r.Value, narg) + rtypes = make([]r.Type, narg) + } for i := 0; i < narg; i++ { if variadic && i >= n-1 { ti = tlast } else { ti = t.In(i) } - if len(args) != narg { + if multivalue { // support foo(bar()) where bar() returns multiple values targ := args[0].Out(i) if targ == nil || !targ.AssignableTo(ti) { c.Errorf("cannot use <%v> as <%v> in argument to %v", targ, ti, node.Fun) + } else if conv := c.Converter(targ, ti); conv != nil { + convs[i] = conv + rtypes[i] = ti.ReflectType() + args[0].Types[i] = ti + needconvs = true } continue } @@ -207,7 +220,22 @@ func (c *Comp) checkCallArgs(node *ast.CallExpr, t xr.Type, args []*Expr, ellips arg.ConstTo(ti) } else if arg.Type == nil || !arg.Type.AssignableTo(ti) { c.Errorf("cannot use <%v> as <%v> in argument to %v", arg.Type, ti, node.Fun) + } else { + arg.To(c, ti) + } + } + if !multivalue || !needconvs { + return + } + f := args[0].AsXV(OptDefaults) + args[0].Fun = func(env *Env) (r.Value, []r.Value) { + _, vs := f(env) + for i, conv := range convs { + if conv != nil { + vs[i] = conv(vs[i], rtypes[i]) + } } + return vs[0], vs } } diff --git a/vendor/github.com/cosmos72/gomacro/fast/call_multivalue.go b/vendor/github.com/cosmos72/gomacro/fast/call_multivalue.go index 6355883..d706bde 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/call_multivalue.go +++ b/vendor/github.com/cosmos72/gomacro/fast/call_multivalue.go @@ -34,7 +34,7 @@ func call_multivalue(call *Call, maxdepth int) I { // no need to special case variadic functions here expr := call.Fun exprfun := expr.AsX1() - argfun := call.Args[0].AsXV(CompileDefaults) + argfun := call.Args[0].AsXV(OptDefaults) nout := len(call.OutTypes) var ret I switch nout { @@ -82,7 +82,7 @@ func call_multivalue(call *Call, maxdepth int) I { // returning bool, int, uint, float, complex, string do NOT wrap them in reflect.Value func call_multivalue_ret1(call *Call, maxdepth int) I { exprfun := call.Fun.AsX1() - argfun := call.Args[0].AsXV(CompileDefaults) + argfun := call.Args[0].AsXV(OptDefaults) kout := call.OutTypes[0].Kind() var ret I switch kout { @@ -219,7 +219,7 @@ func call_multivalue_ret1(call *Call, maxdepth int) I { // returning bool, int, uint, float, complex, string do NOT wrap them in reflect.Value func call_multivalue_ellipsis_ret1(call *Call, maxdepth int) I { exprfun := call.Fun.AsX1() - argfun := call.Args[0].AsXV(CompileDefaults) + argfun := call.Args[0].AsXV(OptDefaults) kout := call.OutTypes[0].Kind() var ret I switch kout { diff --git a/vendor/github.com/cosmos72/gomacro/fast/channel.go b/vendor/github.com/cosmos72/gomacro/fast/channel.go index d7311dd..a04afcc 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/channel.go +++ b/vendor/github.com/cosmos72/gomacro/fast/channel.go @@ -545,7 +545,10 @@ func (c *Comp) Send(node *ast.SendStmt) { } else if expr.Type == nil || !expr.Type.AssignableTo(telem) { c.Errorf("cannot use %v <%v> as type %v in send", node.Value, expr.Type, telem) return + } else { + expr.To(c, telem) } + channelfun := channel.AsX1() sendonly := t.ChanDir() == r.SendDir var stmt Stmt @@ -1263,10 +1266,6 @@ func (c *Comp) Send(node *ast.SendStmt) { stmt = func(env *Env) (Stmt, *Env) { channel := channelfun(env) value := exprfun(env) - if value.Type() != rtelem { - value = value.Convert(rtelem) - } - channel.Send(value) env.IP++ return env.Code[env.IP], env diff --git a/vendor/github.com/cosmos72/gomacro/fast/channel.gomacro b/vendor/github.com/cosmos72/gomacro/fast/channel.gomacro index 65306d7..4914fa6 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/channel.gomacro +++ b/vendor/github.com/cosmos72/gomacro/fast/channel.gomacro @@ -332,6 +332,8 @@ func (c *Comp) Send(node *ast.SendStmt) { } else if expr.Type == nil || !expr.Type.AssignableTo(telem) { c.Errorf("cannot use %v <%v> as type %v in send", node.Value, expr.Type, telem) return + } else { + expr.To(c, telem) } channelfun := channel.AsX1() sendonly := t.ChanDir() == r.SendDir @@ -394,9 +396,6 @@ func (c *Comp) Send(node *ast.SendStmt) { stmt = func(env *Env) (Stmt, *Env) { channel := channelfun(env) value := exprfun(env) - if value.Type() != rtelem { - value = value.Convert(rtelem) - } channel.Send(value) env.IP++ return env.Code[env.IP], env diff --git a/vendor/github.com/cosmos72/gomacro/fast/compile.go b/vendor/github.com/cosmos72/gomacro/fast/compile.go index 3c255d4..9e601e9 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/compile.go +++ b/vendor/github.com/cosmos72/gomacro/fast/compile.go @@ -253,6 +253,16 @@ func (env *Env) FreeEnv() { common.PoolSize = n + 1 } +func (c *Comp) IsCompiled() bool { + return c.CompileOptions.IsCompiled() +} + +func (c *Comp) ErrorIfCompiled(x interface{}) { + if c.IsCompiled() { + c.Errorf("internal error: compiler for %v has flag OptIsCompiled set. this should not happen!", x) + } +} + func (env *Env) Top() *Env { for ; env != nil; env = env.Outer { if env.Outer == nil { diff --git a/vendor/github.com/cosmos72/gomacro/fast/compositelit.go b/vendor/github.com/cosmos72/gomacro/fast/compositelit.go index 70c6ba8..7f7cb0b 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/compositelit.go +++ b/vendor/github.com/cosmos72/gomacro/fast/compositelit.go @@ -68,6 +68,7 @@ func (c *Comp) compositeLitArray(t xr.Type, ellipsis bool, node *ast.CompositeLi rtval := rtype.Elem() zeroval := r.Zero(rtval) + return exprX1(t, func(env *Env) r.Value { obj := r.New(rtype).Elem() var val r.Value @@ -159,6 +160,8 @@ func (c *Comp) compositeLitElements(t xr.Type, ellipsis bool, node *ast.Composit eval.ConstTo(tval) } else if !eval.Type.AssignableTo(tval) { c.Errorf("cannot use %v <%v> as type <%v> in %s value", elv, eval.Type, tval, t.Kind()) + } else { + eval.To(c, tval) } funvals[i] = eval.AsX1() } @@ -192,12 +195,16 @@ func (c *Comp) compositeLitMap(t xr.Type, node *ast.CompositeLit) *Expr { seen[ekey.Value] = true } else if !ekey.Type.AssignableTo(tkey) { c.Errorf("cannot use %v <%v> as type <%v> in map key", elkv.Key, ekey.Type, tkey) + } else { + ekey.To(c, tkey) } eval := c.Expr1(elkv.Value) if eval.Const() { eval.ConstTo(tval) } else if !eval.Type.AssignableTo(tval) { c.Errorf("cannot use %v <%v> as type <%v> in map value", elkv.Value, eval.Type, tval) + } else { + eval.To(c, tval) } funkeys[i] = ekey.AsX1() funvals[i] = eval.AsX1() @@ -206,24 +213,12 @@ func (c *Comp) compositeLitMap(t xr.Type, node *ast.CompositeLit) *Expr { c.Errorf("missing key in map literal: %v", el) } } - rtkey, rtval := rtype.Key(), rtype.Elem() - zerokey, zeroval := r.Zero(rtkey), r.Zero(rtval) return exprX1(t, func(env *Env) r.Value { obj := r.MakeMap(rtype) var key, val r.Value for i, funkey := range funkeys { key = funkey(env) - if key == Nil || key == None { - key = zerokey - } else if key.Type() != rtkey { - key = key.Convert(rtkey) - } val = funvals[i](env) - if val == Nil || val == None { - val = zeroval - } else if val.Type() != rtval { - val = val.Convert(rtval) - } obj.SetMapIndex(key, val) } return obj @@ -270,6 +265,8 @@ func (c *Comp) compositeLitStruct(t xr.Type, node *ast.CompositeLit) *Expr { expr.ConstTo(field.Type) } else if !expr.Type.AssignableTo(field.Type) { c.Errorf("cannot use %v <%v> as type <%v> in field value", elkv.Value, expr.Type, field.Type) + } else { + expr.To(c, field.Type) } inits[i] = expr.AsX1() indexes[i] = field.Index[0] @@ -287,6 +284,8 @@ func (c *Comp) compositeLitStruct(t xr.Type, node *ast.CompositeLit) *Expr { expr.ConstTo(field.Type) } else if !expr.Type.AssignableTo(field.Type) { c.Errorf("cannot use %v <%v> as type <%v> in field value", el, expr.Type, field.Type) + } else { + expr.To(c, field.Type) } if !ast.IsExported(field.Name) && field.Pkg.Path() != c.FileComp().Path { c.Errorf("implicit assignment of unexported field '%v' in struct literal <%v>", field.Name, t) diff --git a/vendor/github.com/cosmos72/gomacro/fast/convert.go b/vendor/github.com/cosmos72/gomacro/fast/convert.go index b09ce98..37fd61f 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/convert.go +++ b/vendor/github.com/cosmos72/gomacro/fast/convert.go @@ -33,7 +33,7 @@ import ( xr "github.com/cosmos72/gomacro/xreflect" ) -// Convert compiles a type conversion +// Convert compiles a type conversion expression func (c *Comp) Convert(node ast.Expr, t xr.Type) *Expr { e := c.Expr1(node) if e.Untyped() { @@ -144,9 +144,38 @@ func (c *Comp) Convert(node ast.Expr, t xr.Type) *Expr { return val.String() } default: - ret = func(env *Env) r.Value { - return fun(env).Convert(rtype) + if conv := c.Converter(e.Type, t); conv != nil { + ret = func(env *Env) r.Value { + return conv(fun(env), rtype) + } + } else { + ret = func(env *Env) r.Value { + return fun(env) + } } } return exprFun(t, ret) } + +// Converter returns a function that converts reflect.Value from tin to tout +// also supports conversion from interpreted types to interfaces +func (c *Comp) Converter(tin, tout xr.Type) func(val r.Value, rtout r.Type) r.Value { + if !tin.ConvertibleTo(tout) { + c.Errorf("cannot convert from <%v> to <%v>", tin, tout) + } + rtin := tin.ReflectType() + rtout := tout.ReflectType() + switch { + case rtin == rtout: + return nil + case rtin.ConvertibleTo(rtout): + // most conversions, including from compiled type to compiled interface + return r.Value.Convert + case tin.Kind() != r.Interface && rtout.Kind() == r.Interface: + // conversion from interpreted type to compiled interface + return c.converterToInterface(tin, tout) + default: + c.Errorf("unimplemented conversion from <%v> to <%v>", tin, tout) + return nil + } +} diff --git a/vendor/github.com/cosmos72/gomacro/fast/declaration.go b/vendor/github.com/cosmos72/gomacro/fast/declaration.go index 9739a50..c042243 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/declaration.go +++ b/vendor/github.com/cosmos72/gomacro/fast/declaration.go @@ -218,7 +218,7 @@ func (c *Comp) AddFuncBind(name string, t xr.Type) *Bind { // AddBind reserves space for a subsequent constant, function or variable declaration func (c *Comp) AddBind(name string, class BindClass, t xr.Type) *Bind { if class == IntBind || class == VarBind { - if base.IsCategory(t.Kind(), r.Bool, r.Int, r.Uint, r.Float64) || t.Kind() == r.Complex64 { + if !c.IsCompiled() && (base.IsCategory(t.Kind(), r.Bool, r.Int, r.Uint, r.Float64) || t.Kind() == r.Complex64) { class = IntBind } else { class = VarBind @@ -275,28 +275,29 @@ func (c *Comp) AddBind(name string, class BindClass, t xr.Type) *Bind { return bind } -func (c *Comp) declUnnamedBind(e *Expr, o *Comp, upn int) *Symbol { - t := e.Type +func (c *Comp) declUnnamedBind(init *Expr, o *Comp, upn int) *Symbol { + t := init.Type bind := o.AddBind("", VarBind, t) // c.Debugf("declUnnamedBind: allocated bind %v, upn = %d", bind, upn) switch bind.Desc.Class() { case IntBind: // no difference between declaration and assignment for this class va := bind.AsVar(upn, PlaceSettable) - c.SetVar(va, token.ASSIGN, e) + c.SetVar(va, token.ASSIGN, init) case VarBind: // cannot use c.DeclVar0 because the variable is declared in o // cannot use o.DeclVar0 because the initializer must be evaluated in c // so initialize the binding manually index := bind.Desc.Index() - init := e.AsX1() + f := init.AsX1() + conv := c.Converter(init.Type, t) rtype := t.ReflectType() switch upn { case 0: c.append(func(env *Env) (Stmt, *Env) { - v := init(env) - if v.Type() != rtype { - v = v.Convert(rtype) + v := f(env) + if conv != nil { + v = conv(v, rtype) } // no need to create a settable reflect.Value env.Binds[index] = v @@ -305,9 +306,9 @@ func (c *Comp) declUnnamedBind(e *Expr, o *Comp, upn int) *Symbol { }) case 1: c.append(func(env *Env) (Stmt, *Env) { - v := init(env) - if v.Type() != rtype { - v = v.Convert(rtype) + v := f(env) + if conv != nil { + v = conv(v, rtype) } // no need to create a settable reflect.Value env.Outer.Binds[index] = v @@ -320,9 +321,9 @@ func (c *Comp) declUnnamedBind(e *Expr, o *Comp, upn int) *Symbol { for i := 0; i < upn; i++ { o = o.Outer } - v := init(env) - if v.Type() != rtype { - v = v.Convert(rtype) + v := f(env) + if conv != nil { + v = conv(v, rtype) } // no need to create a settable reflect.Value o.Binds[index] = v @@ -399,25 +400,48 @@ func (c *Comp) DeclVar0(name string, t xr.Type, init *Expr) *Bind { return bind } var ret func(env *Env) (Stmt, *Env) - // optimization: no need to wrap multiple-valued function into a single-value function + conv := c.Converter(init.Type, t) rtype := t.ReflectType() + // optimization: no need to wrap multiple-valued function into a single-value function if f, ok := init.Fun.(func(*Env) (r.Value, []r.Value)); ok { - ret = func(env *Env) (Stmt, *Env) { - ret, _ := f(env) - place := r.New(rtype).Elem() - place.Set(ret.Convert(rtype)) - env.Binds[index] = place - env.IP++ - return env.Code[env.IP], env + if conv != nil { + ret = func(env *Env) (Stmt, *Env) { + ret, _ := f(env) + place := r.New(rtype).Elem() + place.Set(conv(ret, rtype)) + env.Binds[index] = place + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + ret, _ := f(env) + place := r.New(rtype).Elem() + place.Set(ret) + env.Binds[index] = place + env.IP++ + return env.Code[env.IP], env + } } } else { - ret = func(env *Env) (Stmt, *Env) { - ret := fun(env) - place := r.New(rtype).Elem() - place.Set(ret.Convert(rtype)) - env.Binds[index] = place - env.IP++ - return env.Code[env.IP], env + if conv != nil { + ret = func(env *Env) (Stmt, *Env) { + ret := fun(env) + place := r.New(rtype).Elem() + place.Set(conv(ret, rtype)) + env.Binds[index] = place + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + ret := fun(env) + place := r.New(rtype).Elem() + place.Set(ret) + env.Binds[index] = place + env.IP++ + return env.Code[env.IP], env + } } } c.append(ret) diff --git a/vendor/github.com/cosmos72/gomacro/fast/expr1.go b/vendor/github.com/cosmos72/gomacro/fast/expr1.go index d1357d6..125199e 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/expr1.go +++ b/vendor/github.com/cosmos72/gomacro/fast/expr1.go @@ -93,7 +93,7 @@ func (expr *Expr) EvalConst(opts CompileOptions) I { return nil } if expr.Const() { - if opts == CompileDefaults && expr.Untyped() { + if opts == OptDefaults && expr.Untyped() { return expr.ConstTo(expr.DefaultType()) } return expr.Value diff --git a/vendor/github.com/cosmos72/gomacro/fast/function.go b/vendor/github.com/cosmos72/gomacro/fast/function.go index 98967f2..1f6204e 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/function.go +++ b/vendor/github.com/cosmos72/gomacro/fast/function.go @@ -61,8 +61,20 @@ func (c *Comp) FuncDecl(funcdecl *ast.FuncDecl) { functype := funcdecl.Type t, paramnames, resultnames := c.TypeFunction(functype) - // declare the function name and type before compiling its body: allows recursive functions/macros + // declare the function name and type before compiling its body: allows recursive functions/macros. funcname := funcdecl.Name.Name + oldbind := c.Binds[funcname] + panicking := true + defer func() { + // On compile error, restore pre-existing declaration + if !panicking || c.Binds == nil { + // nothing to do + } else if oldbind != nil { + c.Binds[funcname] = oldbind + } else { + delete(c.Binds, funcname) + } + }() var funcbind *Bind if ismacro { // use a ConstBind, as builtins do @@ -84,6 +96,7 @@ func (c *Comp) FuncDecl(funcdecl *ast.FuncDecl) { funcindex := funcbind.Desc.Index() if funcname == "_" || (!ismacro && funcindex == NoIndex) { // function/macro named "_". still compile it (to check for compile errors) but discard the compiled code + panicking = false return } // do NOT keep a reference to compile environment! @@ -117,6 +130,7 @@ func (c *Comp) FuncDecl(funcdecl *ast.FuncDecl) { } } c.Code.Append(stmt, funcdecl.Pos()) + panicking = false } func (c *Comp) methodAdd(funcdecl *ast.FuncDecl, t xr.Type) (methodindex int, methods *[]r.Value) { @@ -317,6 +331,8 @@ func (c *Comp) funcMaker(info *FuncInfo, resultfuns []I, funcbody func(*Env)) *f // actually create the function func (c *Comp) funcCreate(t xr.Type, info *FuncInfo, resultfuns []I, funcbody func(*Env)) func(*Env) r.Value { + c.ErrorIfCompiled(t) + m := c.funcMaker(info, resultfuns, funcbody) rtype := t.ReflectType() // has receiver as first parameter diff --git a/vendor/github.com/cosmos72/gomacro/fast/global.go b/vendor/github.com/cosmos72/gomacro/fast/global.go index fb24641..a7a7474 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/global.go +++ b/vendor/github.com/cosmos72/gomacro/fast/global.go @@ -441,10 +441,15 @@ type Import struct { type CompileOptions int const ( - CompileKeepUntyped CompileOptions = 1 << iota // if set, Compile() on expressions will keep all untyped constants as such (in expressions where Go compiler would compute an untyped constant too) - CompileDefaults CompileOptions = 0 + OptKeepUntyped CompileOptions = 1 << iota // if set, Compile() on expressions will keep all untyped constants as such (in expressions where Go compiler would compute an untyped constant too) + OptIsCompiled // if set, packages is at least partially compiled. Effect: variables may be pre-existing, so Comp.intBinds cannot be used + OptDefaults CompileOptions = 0 ) +func (opts CompileOptions) IsCompiled() bool { + return opts&OptIsCompiled != 0 +} + type Code struct { List []Stmt DebugPos []token.Pos // for debugging interpreted code: position of each statement diff --git a/vendor/github.com/cosmos72/gomacro/fast/identifier.go b/vendor/github.com/cosmos72/gomacro/fast/identifier.go index 0424418..b655e3a 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/identifier.go +++ b/vendor/github.com/cosmos72/gomacro/fast/identifier.go @@ -30,6 +30,19 @@ import ( "unsafe" ) +func (c *Comp) IsCompiledOuter(upn int) bool { + for ; upn > 0; upn-- { + for c.UpCost == 0 { + c = c.Outer + } + c = c.Outer + } + for c.UpCost == 0 { + c = c.Outer + } + return c.IsCompiled() +} + func (c *Comp) Resolve(name string) *Symbol { sym := c.TryResolve(name) if sym == nil { @@ -78,7 +91,11 @@ func (c *Comp) Symbol(sym *Symbol) *Expr { case VarBind, FuncBind: return c.symbol(sym) case IntBind: - return c.intSymbol(sym) + if c.IsCompiledOuter(sym.Upn) { + return c.symbol(sym) + } else { + return c.intSymbol(sym) + } default: c.Errorf("unknown symbol class %s", sym.Desc.Class()) } @@ -88,96 +105,512 @@ func (c *Comp) Symbol(sym *Symbol) *Expr { func (c *Comp) symbol(sym *Symbol) *Expr { idx := sym.Desc.Index() upn := sym.Upn + kind := sym.Type.Kind() var fun I - switch sym.Type.Kind() { - case r.Complex128: - switch upn { - case 0: + switch upn { + case 0: + // if package is (partially) compiled, kind can also be one of Bool, Int*, Uint*, Float*, Complex64 + switch kind { + case r.Bool: + fun = func(env *Env) bool { + return env.Binds[idx].Bool() + } + case r.Int: + fun = func(env *Env) int { + return int(env.Binds[idx].Int()) + } + case r.Int8: + fun = func(env *Env) int8 { + return int8(env.Binds[idx].Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + return int16(env.Binds[idx].Int()) + } + case r.Int32: + fun = func(env *Env) int32 { + return int32(env.Binds[idx].Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + return env.Binds[idx].Int() + } + case r.Uint: + fun = func(env *Env) uint { + return uint(env.Binds[idx].Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return uint8(env.Binds[idx].Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return uint16(env.Binds[idx].Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return uint32(env.Binds[idx].Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return env.Binds[idx].Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return uintptr(env.Binds[idx].Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + return float32(env.Binds[idx].Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + return env.Binds[idx].Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + return complex64(env.Binds[idx].Complex()) + } + case r.Complex128: fun = func(env *Env) complex128 { return env.Binds[idx].Complex() } - case 1: + case r.String: + fun = func(env *Env) string { + return env.Binds[idx].String() + } + default: + fun = func(env *Env) r.Value { + return env.Binds[idx] + } + } + case 1: + switch kind { + case r.Bool: + fun = func(env *Env) bool { + return env.Outer.Binds[idx].Bool() + } + case r.Int: + fun = func(env *Env) int { + return int(env.Outer.Binds[idx].Int()) + } + case r.Int8: + fun = func(env *Env) int8 { + return int8(env.Outer.Binds[idx].Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + return int16(env.Outer.Binds[idx].Int()) + } + case r.Int32: + fun = func(env *Env) int32 { + return int32(env.Outer.Binds[idx].Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + return env.Outer.Binds[idx].Int() + } + case r.Uint: + fun = func(env *Env) uint { + return uint(env.Outer.Binds[idx].Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return uint8(env.Outer.Binds[idx].Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return uint16(env.Outer.Binds[idx].Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return uint32(env.Outer.Binds[idx].Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return env.Outer.Binds[idx].Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return uintptr(env.Outer.Binds[idx].Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + return float32(env.Outer.Binds[idx].Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + return env.Outer.Binds[idx].Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + return complex64(env.Outer.Binds[idx].Complex()) + } + case r.Complex128: fun = func(env *Env) complex128 { return env.Outer.Binds[idx].Complex() } - case 2: - fun = func(env *Env) complex128 { - return env.Outer.Outer.Binds[idx].Complex() + case r.String: + fun = func(env *Env) string { + return env.Outer.Binds[idx].String() } - case c.Depth - 1: - fun = func(env *Env) complex128 { - return env.ThreadGlobals.FileEnv.Binds[idx].Complex() + default: + fun = func(env *Env) r.Value { + return env.Outer.Binds[idx] + } + } + case 2: + switch kind { + case r.Bool: + fun = func(env *Env) bool { + return env.Outer.Outer.Binds[idx].Bool() + } + case r.Int: + fun = func(env *Env) int { + return int(env.Outer.Outer.Binds[idx].Int()) } - case c.Depth: // TopEnv should not contain variables or functions... but no harm + case r.Int8: + fun = func(env *Env) int8 { + return int8(env.Outer.Outer.Binds[idx].Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + return int16(env.Outer.Outer.Binds[idx].Int()) + } + case r.Int32: + fun = func(env *Env) int32 { + return int32(env.Outer.Outer.Binds[idx].Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + return env.Outer.Outer.Binds[idx].Int() + } + case r.Uint: + fun = func(env *Env) uint { + return uint(env.Outer.Outer.Binds[idx].Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return uint8(env.Outer.Outer.Binds[idx].Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return uint16(env.Outer.Outer.Binds[idx].Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return uint32(env.Outer.Outer.Binds[idx].Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return env.Outer.Outer.Binds[idx].Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return uintptr(env.Outer.Outer.Binds[idx].Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + return float32(env.Outer.Outer.Binds[idx].Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + return env.Outer.Outer.Binds[idx].Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + return complex64(env.Outer.Outer.Binds[idx].Complex()) + } + case r.Complex128: fun = func(env *Env) complex128 { - return env.ThreadGlobals.TopEnv.Binds[idx].Complex() + return env.Outer.Outer.Binds[idx].Complex() + } + case r.String: + fun = func(env *Env) string { + return env.Outer.Outer.Binds[idx].String() } default: - fun = func(env *Env) complex128 { + fun = func(env *Env) r.Value { + return env.Outer.Outer.Binds[idx] + } + } + default: + switch kind { + case r.Bool: + fun = func(env *Env) bool { for i := 3; i < upn; i++ { env = env.Outer } - return env.Outer.Outer.Outer.Binds[idx].Complex() + return env.Outer.Outer.Outer.Binds[idx].Bool() } - } - case r.String: - switch upn { - case 0: - fun = func(env *Env) string { - return env.Binds[idx].String() + case r.Int: + fun = func(env *Env) int { + for i := 3; i < upn; i++ { + env = env.Outer + } + return int(env.Outer.Outer.Outer.Binds[idx].Int()) } - case 1: - fun = func(env *Env) string { - return env.Outer.Binds[idx].String() + case r.Int8: + fun = func(env *Env) int8 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return int8(env.Outer.Outer.Outer.Binds[idx].Int()) } - case 2: - fun = func(env *Env) string { - return env.Outer.Outer.Binds[idx].String() + case r.Int16: + fun = func(env *Env) int16 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return int16(env.Outer.Outer.Outer.Binds[idx].Int()) } - case c.Depth - 1: - fun = func(env *Env) string { - return env.ThreadGlobals.FileEnv.Binds[idx].String() + case r.Int32: + fun = func(env *Env) int32 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return int32(env.Outer.Outer.Outer.Binds[idx].Int()) } - case c.Depth: // TopEnv should not contain variables or functions... but no harm - fun = func(env *Env) string { - return env.ThreadGlobals.TopEnv.Binds[idx].String() + case r.Int64: + fun = func(env *Env) int64 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Outer.Outer.Outer.Binds[idx].Int() } - default: + case r.Uint: + fun = func(env *Env) uint { + for i := 3; i < upn; i++ { + env = env.Outer + } + return uint(env.Outer.Outer.Outer.Binds[idx].Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return uint8(env.Outer.Outer.Outer.Binds[idx].Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return uint16(env.Outer.Outer.Outer.Binds[idx].Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return uint32(env.Outer.Outer.Outer.Binds[idx].Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Outer.Outer.Outer.Binds[idx].Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + for i := 3; i < upn; i++ { + env = env.Outer + } + return uintptr(env.Outer.Outer.Outer.Binds[idx].Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return float32(env.Outer.Outer.Outer.Binds[idx].Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Outer.Outer.Outer.Binds[idx].Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return complex64(env.Outer.Outer.Outer.Binds[idx].Complex()) + } + case r.Complex128: + fun = func(env *Env) complex128 { + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Outer.Outer.Outer.Binds[idx].Complex() + } + case r.String: fun = func(env *Env) string { for i := 3; i < upn; i++ { env = env.Outer } return env.Outer.Outer.Outer.Binds[idx].String() } - } - default: - switch upn { - case 0: + default: fun = func(env *Env) r.Value { - return env.Binds[idx] + for i := 3; i < upn; i++ { + env = env.Outer + } + return env.Outer.Outer.Outer.Binds[idx] } - case 1: - fun = func(env *Env) r.Value { - return env.Outer.Binds[idx] + } + case c.Depth - 1: + switch kind { + case r.Bool: + fun = func(env *Env) bool { + return env.ThreadGlobals.FileEnv.Binds[idx].Bool() } - case 2: - fun = func(env *Env) r.Value { - return env.Outer.Outer.Binds[idx] + case r.Int: + fun = func(env *Env) int { + return int(env.ThreadGlobals.FileEnv.Binds[idx].Int()) + } + case r.Int8: + fun = func(env *Env) int8 { + return int8(env.ThreadGlobals.FileEnv.Binds[idx].Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + return int16(env.ThreadGlobals.FileEnv.Binds[idx].Int()) } - case c.Depth - 1: + case r.Int32: + fun = func(env *Env) int32 { + return int32(env.ThreadGlobals.FileEnv.Binds[idx].Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + return env.ThreadGlobals.FileEnv.Binds[idx].Int() + } + case r.Uint: + fun = func(env *Env) uint { + return uint(env.ThreadGlobals.FileEnv.Binds[idx].Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return uint8(env.ThreadGlobals.FileEnv.Binds[idx].Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return uint16(env.ThreadGlobals.FileEnv.Binds[idx].Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return uint32(env.ThreadGlobals.FileEnv.Binds[idx].Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return env.ThreadGlobals.FileEnv.Binds[idx].Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return uintptr(env.ThreadGlobals.FileEnv.Binds[idx].Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + return float32(env.ThreadGlobals.FileEnv.Binds[idx].Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + return env.ThreadGlobals.FileEnv.Binds[idx].Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + return complex64(env.ThreadGlobals.FileEnv.Binds[idx].Complex()) + } + case r.Complex128: + fun = func(env *Env) complex128 { + return env.ThreadGlobals.FileEnv.Binds[idx].Complex() + } + case r.String: + fun = func(env *Env) string { + return env.ThreadGlobals.FileEnv.Binds[idx].String() + } + default: fun = func(env *Env) r.Value { return env.ThreadGlobals.FileEnv.Binds[idx] } - case c.Depth: // TopEnv should not contain variables or functions... but no harm - fun = func(env *Env) r.Value { - return env.ThreadGlobals.TopEnv.Binds[idx] + } + case c.Depth: // TopEnv should not contain variables or functions... but no harm + switch kind { + case r.Bool: + fun = func(env *Env) bool { + return env.ThreadGlobals.TopEnv.Binds[idx].Bool() + } + case r.Int: + fun = func(env *Env) int { + return int(env.ThreadGlobals.TopEnv.Binds[idx].Int()) + } + case r.Int8: + fun = func(env *Env) int8 { + return int8(env.ThreadGlobals.TopEnv.Binds[idx].Int()) + } + case r.Int16: + fun = func(env *Env) int16 { + return int16(env.ThreadGlobals.TopEnv.Binds[idx].Int()) + } + case r.Int32: + fun = func(env *Env) int32 { + return int32(env.ThreadGlobals.TopEnv.Binds[idx].Int()) + } + case r.Int64: + fun = func(env *Env) int64 { + return env.ThreadGlobals.TopEnv.Binds[idx].Int() + } + case r.Uint: + fun = func(env *Env) uint { + return uint(env.ThreadGlobals.TopEnv.Binds[idx].Uint()) + } + case r.Uint8: + fun = func(env *Env) uint8 { + return uint8(env.ThreadGlobals.TopEnv.Binds[idx].Uint()) + } + case r.Uint16: + fun = func(env *Env) uint16 { + return uint16(env.ThreadGlobals.TopEnv.Binds[idx].Uint()) + } + case r.Uint32: + fun = func(env *Env) uint32 { + return uint32(env.ThreadGlobals.TopEnv.Binds[idx].Uint()) + } + case r.Uint64: + fun = func(env *Env) uint64 { + return env.ThreadGlobals.TopEnv.Binds[idx].Uint() + } + case r.Uintptr: + fun = func(env *Env) uintptr { + return uintptr(env.ThreadGlobals.TopEnv.Binds[idx].Uint()) + } + case r.Float32: + fun = func(env *Env) float32 { + return float32(env.ThreadGlobals.TopEnv.Binds[idx].Float()) + } + case r.Float64: + fun = func(env *Env) float64 { + return env.ThreadGlobals.TopEnv.Binds[idx].Float() + } + case r.Complex64: + fun = func(env *Env) complex64 { + return complex64(env.ThreadGlobals.TopEnv.Binds[idx].Complex()) + } + case r.Complex128: + fun = func(env *Env) complex128 { + return env.ThreadGlobals.TopEnv.Binds[idx].Complex() + } + case r.String: + fun = func(env *Env) string { + return env.ThreadGlobals.TopEnv.Binds[idx].String() } default: fun = func(env *Env) r.Value { - for i := 3; i < upn; i++ { - env = env.Outer - } - return env.Outer.Outer.Outer.Binds[idx] + return env.ThreadGlobals.TopEnv.Binds[idx] } } } diff --git a/vendor/github.com/cosmos72/gomacro/fast/index.go b/vendor/github.com/cosmos72/gomacro/fast/index.go index 9fa140f..59ba864 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/index.go +++ b/vendor/github.com/cosmos72/gomacro/fast/index.go @@ -73,7 +73,7 @@ func (c *Comp) indexExpr(node *ast.IndexExpr, multivalued bool) *Expr { return nil } if obj.Const() && idx.Const() { - ret.EvalConst(CompileKeepUntyped) + ret.EvalConst(OptKeepUntyped) } return ret } diff --git a/vendor/github.com/cosmos72/gomacro/fast/interface.go b/vendor/github.com/cosmos72/gomacro/fast/interface.go index 8c14701..480f34c 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/interface.go +++ b/vendor/github.com/cosmos72/gomacro/fast/interface.go @@ -42,6 +42,55 @@ func (c *Comp) TypeInterface(node *ast.InterfaceType) xr.Type { return c.Universe.InterfaceOf(methodnames, methodtypes, nil) } -func isInterfaceType(t xr.Type) bool { - return t.Kind() == r.Interface +// InterfaceProxy returns the proxy struct that implements a compiled interface +func (c *Comp) InterfaceProxy(t xr.Type) r.Type { + ret := c.interf2proxy[t.ReflectType()] + if ret == nil { + c.Errorf("internal error: proxy not found for %s type <%v>", t.Kind(), t) + } + return ret +} + +// converterToInterface compiles a conversion from 'tin' into a proxy struct that implements the interface type 'tout' +// and returns a function that performs such conversion +func (c *Comp) converterToInterface(tin xr.Type, tout xr.Type) func(val r.Value, rtout r.Type) r.Value { + rtproxy := c.InterfaceProxy(tout) + rtout := tout.ReflectType() + + vtable := r.New(rtproxy).Elem() + n := rtout.NumMethod() + for i := 0; i < n; i++ { + imtd := rtout.Method(i) + xmtd, count := tin.MethodByName(imtd.Name, imtd.PkgPath) + if count == 0 { + c.Errorf("cannot convert type <%v> to interface <%v>: missing method %s %s", tin, rtout, imtd.PkgPath, imtd.Name) + } else if count > 1 { + c.Errorf("type <%v> has %d wrapper methods %s %s all at the same depth=%d - cannot convert to interface <%v>", + tin, count, imtd.PkgPath, imtd.Name, len(xmtd.FieldIndex), tout) + } + e := c.compileMethodAsFunc(tin, xmtd) + setProxyMethod(vtable.Field(i+1), r.ValueOf(e.Value)) + } + return func(val r.Value, rtout r.Type) r.Value { + vaddr := r.New(rtproxy) + vproxy := vaddr.Elem() + vproxy.Set(vtable) + vproxy.Field(0).Set(r.ValueOf(xr.MakeInterfaceHeader(val, tin))) + return vaddr.Convert(rtout) + } +} + +func setProxyMethod(place r.Value, mtd r.Value) { + rtin := mtd.Type() + rtout := place.Type() + if rtin == rtout { + place.Set(mtd) + } else if rtin.ConvertibleTo(rtout) { + place.Set(mtd.Convert(rtout)) + } else { + place.Set(r.MakeFunc(rtout, func(args []r.Value) []r.Value { + args[0] = args[0].Interface().(xr.InterfaceHeader).Value() + return mtd.Call(args) + })) + } } diff --git a/vendor/github.com/cosmos72/gomacro/fast/literal.go b/vendor/github.com/cosmos72/gomacro/fast/literal.go index 120eee6..aa3fe2b 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/literal.go +++ b/vendor/github.com/cosmos72/gomacro/fast/literal.go @@ -399,7 +399,7 @@ func (lit *Lit) Set(x I) { // To checks that an Expr can be used as (i.e. is assignable to) the given type, // and converts Expr to the given type. // panics if Expr has an incompatible type. -func (e *Expr) To(t xr.Type) { +func (e *Expr) To(c *Comp, t xr.Type) { if e.Const() { e.ConstTo(t) return @@ -408,7 +408,7 @@ func (e *Expr) To(t xr.Type) { return } if !e.Type.AssignableTo(t) { - Errorf("cannot use <%v> as <%v>", e.Type, t) + c.Errorf("cannot use <%v> as <%v>", e.Type, t) } k := e.Type.Kind() if IsOptimizedKind(k) { @@ -421,19 +421,30 @@ func (e *Expr) To(t xr.Type) { e.Type = t return } - Errorf("internal error: cannot use <%v> as <%v> (should not happen, <%v> is assignable to <%v>", e.Type, t, e.Type, t) + c.Errorf("internal error: cannot use <%v> as <%v> (should not happen, <%v> is assignable to <%v>", e.Type, t, e.Type, t) } fun := e.AsX1() rtype := t.ReflectType() zero := r.Zero(rtype) - e.Fun = func(env *Env) r.Value { - v := fun(env) - if !v.IsValid() { - v = zero - } else if v.Type() != rtype { - v = v.Convert(rtype) - } - return v + + if conv := c.Converter(e.Type, t); conv == nil { + e.Fun = func(env *Env) r.Value { + v := fun(env) + if !v.IsValid() { + v = zero + } + return v + } + } else { + e.Fun = func(env *Env) r.Value { + v := fun(env) + if !v.IsValid() { + v = zero + } else { + v = conv(v, rtype) + } + return v + } } e.Type = t } diff --git a/vendor/github.com/cosmos72/gomacro/fast/range.go b/vendor/github.com/cosmos72/gomacro/fast/range.go index e42ac6b..05ef733 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/range.go +++ b/vendor/github.com/cosmos72/gomacro/fast/range.go @@ -147,6 +147,8 @@ func (c *Comp) rangeChan(node *ast.RangeStmt, erange *Expr, jump *rangeJump) { } func (c *Comp) rangeMap(node *ast.RangeStmt, erange *Expr, jump *rangeJump) { + c.ErrorIfCompiled(node) + t := erange.Type tkey, tval := t.Key(), t.Elem() tkeyslice := xr.SliceOf(tkey) diff --git a/vendor/github.com/cosmos72/gomacro/fast/selector.go b/vendor/github.com/cosmos72/gomacro/fast/selector.go index eeea884..f1bba1e 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/selector.go +++ b/vendor/github.com/cosmos72/gomacro/fast/selector.go @@ -107,7 +107,7 @@ func (c *Comp) selectorType(node *ast.SelectorExpr, t xr.Type) *Expr { if count == 0 { c.Errorf("type <%v> has no method %q: %v", t, node.Sel, node) } else if count > 1 { - c.Errorf("type <%v> has %d wrapper methods %q all at the same depth - expression is ambiguous: %v", t, count, node.Sel, node) + c.Errorf("type <%v> has %d wrapper methods %q all at the same depth=%d - expression is ambiguous: %v", t, count, node.Sel, len(mtd.FieldIndex), node) } return c.compileMethodAsFunc(t, mtd) } diff --git a/vendor/github.com/cosmos72/gomacro/fast/slice.go b/vendor/github.com/cosmos72/gomacro/fast/slice.go index 4eb8cee..828711d 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/slice.go +++ b/vendor/github.com/cosmos72/gomacro/fast/slice.go @@ -52,7 +52,7 @@ func (c *Comp) SliceExpr(node *ast.SliceExpr) *Expr { } // constant propagation if e.Const() && (lo == nil || lo.Const()) && (hi == nil || hi.Const()) && (max == nil || max.Const()) { - ret.EvalConst(CompileKeepUntyped) + ret.EvalConst(OptKeepUntyped) } return ret } diff --git a/vendor/github.com/cosmos72/gomacro/fast/statement.go b/vendor/github.com/cosmos72/gomacro/fast/statement.go index dbb028e..b16f7ab 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/statement.go +++ b/vendor/github.com/cosmos72/gomacro/fast/statement.go @@ -534,7 +534,7 @@ func (c *Comp) Return(node *ast.ReturnStmt) { func (c *Comp) returnMultiValues(node *ast.ReturnStmt, resultBinds []*Bind, upn int, exprs []ast.Expr) { n := len(resultBinds) e := c.ExprsMultipleValues(exprs, n)[0] - fun := e.AsXV(CompileDefaults) + fun := e.AsXV(OptDefaults) assigns := make([]func(*Env, r.Value), n) for i := 0; i < n; i++ { texpected := resultBinds[i].Type @@ -611,7 +611,7 @@ func (c *Comp) pushEnvIfLocalBinds(nbinds *[2]int, list ...ast.Stmt) (inner *Com if len(list) == 0 { inner.Errorf("internal error: pushEnvIfLocalBinds() invoked on empty statement list") } - // optimization: examine statements. if none of them is a function/variable declaration, + // 2. optimization: examine statements. if none of them is a function/variable declaration, // no need to create a new *Env at runtime // note: we still create a new *Comp at compile time to handle constant/type declarations locals = containLocalBinds(list...) diff --git a/vendor/github.com/cosmos72/gomacro/fast/switch.go b/vendor/github.com/cosmos72/gomacro/fast/switch.go index f3961cf..fc6e738 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/switch.go +++ b/vendor/github.com/cosmos72/gomacro/fast/switch.go @@ -183,7 +183,7 @@ func (c *Comp) switchCase(node *ast.CaseClause, tagnode ast.Expr, tag *Expr, can seen.add(c, e.Value, caseEntry{Pos: enode.Pos(), IP: ibody}) if tag.Const() { // constant propagation - flag := cmp.EvalConst(CompileDefaults) + flag := cmp.EvalConst(OptDefaults) if r.ValueOf(flag).Bool() { sometrue = true break // always matches, no need to check further expressions diff --git a/vendor/github.com/cosmos72/gomacro/fast/switch_type.go b/vendor/github.com/cosmos72/gomacro/fast/switch_type.go index 56bf450..7aa1f44 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/switch_type.go +++ b/vendor/github.com/cosmos72/gomacro/fast/switch_type.go @@ -26,6 +26,7 @@ package fast import ( + "fmt" "go/ast" "go/token" "go/types" @@ -391,7 +392,7 @@ func (c *Comp) typeswitchBody(list []ast.Stmt, varname string, t xr.Type, bind * locals := declvar || containLocalBinds(list1...) var nbinds [2]int - c2, locals2 := c.pushEnvIfFlag(&nbinds, locals) + c2, locals2 := c.pushEnvIfFlag(&nbinds, locals || c.IsCompiled()) if declvar { sym := bind.AsSymbol(c2.UpCost) if t == nil { @@ -409,6 +410,8 @@ func (c *Comp) typeswitchBody(list []ast.Stmt, varname string, t xr.Type, bind * // typeswitchVar compiles the tag variable declaration in a type-switch. func (c *Comp) typeswitchVar(varname string, t xr.Type, sym *Symbol) { + c.ErrorIfCompiled(fmt.Sprintf("switch %s.(type)", varname)) + sidx := sym.Bind.Desc.Index() bind := c.AddBind(varname, VarBind, t) diff --git a/vendor/github.com/cosmos72/gomacro/fast/type.go b/vendor/github.com/cosmos72/gomacro/fast/type.go index bfedf89..f01c402 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/type.go +++ b/vendor/github.com/cosmos72/gomacro/fast/type.go @@ -44,14 +44,27 @@ func (c *Comp) DeclType(node ast.Spec) { if unary, ok := node.Type.(*ast.UnaryExpr); ok && unary.Op == token.ASSIGN { t := c.Type(unary.X) c.DeclTypeAlias(name, t) - } else { - // support self-referencing types, as for example: type List struct { First int; Rest *List } - t := c.DeclNamedType(name) - u := c.Type(node.Type) - if t != nil { // t == nil means name == "_", discard the result of type declaration - c.SetUnderlyingType(t, u) + break + } + // support self-referencing types, as for example: type List struct { First int; Rest *List } + oldt := c.Types[name] + panicking := true + defer func() { + // On compile error, restore pre-existing declaration + if !panicking || c.Types == nil { + // nothing to do + } else if oldt != nil { + c.Types[name] = oldt + } else { + delete(c.Types, name) } + }() + t := c.DeclNamedType(name) + u := c.Type(node.Type) + if t != nil { // t == nil means name == "_", discard the result of type declaration + c.SetUnderlyingType(t, u) } + panicking = false default: c.Errorf("Compile: unexpected type declaration, expecting <*ast.TypeSpec>, found: %v <%v>", node, r.TypeOf(node)) } diff --git a/vendor/github.com/cosmos72/gomacro/fast/unary.go b/vendor/github.com/cosmos72/gomacro/fast/unary.go index 283bbde..5d559c1 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/unary.go +++ b/vendor/github.com/cosmos72/gomacro/fast/unary.go @@ -83,7 +83,7 @@ func (c *Comp) UnaryExpr(node *ast.UnaryExpr) *Expr { } if isConst { // constant propagation - z.EvalConst(CompileKeepUntyped) + z.EvalConst(OptKeepUntyped) } return z } diff --git a/vendor/github.com/cosmos72/gomacro/fast/util.go b/vendor/github.com/cosmos72/gomacro/fast/util.go index 5150fab..527dfe1 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/util.go +++ b/vendor/github.com/cosmos72/gomacro/fast/util.go @@ -223,7 +223,7 @@ func (e *Expr) AsX1() func(*Env) r.Value { return eNil } if e.Const() { - return valueAsX1(e.Value, e.Type, CompileDefaults) + return valueAsX1(e.Value, e.Type, OptDefaults) } e.CheckX1() return funAsX1(e.Fun, e.Type) @@ -240,7 +240,7 @@ func (e *Expr) AsXV(opts CompileOptions) func(*Env) (r.Value, []r.Value) { } func valueAsX1(any I, t xr.Type, opts CompileOptions) func(*Env) r.Value { - convertuntyped := opts&CompileKeepUntyped == 0 + convertuntyped := opts&OptKeepUntyped == 0 untyp, untyped := any.(UntypedLit) if untyped && convertuntyped { if t == nil || t.ReflectType() == rtypeOfUntypedLit { @@ -264,7 +264,7 @@ func valueAsX1(any I, t xr.Type, opts CompileOptions) func(*Env) r.Value { } func valueAsXV(any I, t xr.Type, opts CompileOptions) func(*Env) (r.Value, []r.Value) { - convertuntyped := opts&CompileKeepUntyped == 0 + convertuntyped := opts&OptKeepUntyped == 0 untyp, untyped := any.(UntypedLit) if convertuntyped { if untyped { @@ -1190,7 +1190,7 @@ func funList(funs []func(*Env), last *Expr, opts CompileOptions) I { var rt r.Type if last.Type != nil { // keep untyped constants only if requested - if opts != CompileKeepUntyped && last.Untyped() { + if opts != OptKeepUntyped && last.Untyped() { last.ConstTo(last.DefaultType()) } rt = last.Type.ReflectType() diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_ops.go b/vendor/github.com/cosmos72/gomacro/fast/var_ops.go index a4aad2e..9575265 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/var_ops.go +++ b/vendor/github.com/cosmos72/gomacro/fast/var_ops.go @@ -36,15 +36,18 @@ import ( "unsafe" . "github.com/cosmos72/gomacro/base" - xr "github.com/cosmos72/gomacro/xreflect" ) -func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varAddConst(va *Var, val I) { if isLiteralNumber(val, 0) || val == "" { return } { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind var ret Stmt switch t.Kind() { case r.Int: @@ -52,53 +55,131 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: @@ -106,53 +187,131 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: @@ -160,107 +319,263 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val - - env.IP++ - return env.Code[env.IP], env - } - } - case r.Int32: - val := int32(r.ValueOf(val).Int()) - switch upn { - case 0: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) += val + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: @@ -268,53 +583,131 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: @@ -322,107 +715,263 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val - - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - case c.Depth - 1: + default: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env - } - } - case r.Uint8: - val := uint8(r.ValueOf(val).Uint()) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: @@ -430,53 +979,131 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: @@ -484,53 +1111,131 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint64: @@ -538,54 +1243,137 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] += val + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] += val + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uintptr: @@ -593,53 +1381,131 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Float32: @@ -649,53 +1515,131 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*float32)(unsafe.Pointer(&o.IntBinds[index])) += val + } + default: - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Float64: @@ -703,53 +1647,131 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*float64)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Complex64: @@ -759,53 +1781,131 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) += val + + env.IP++ + return env.Code[env.IP], env } - *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) += val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Complex128: @@ -862,10 +1962,10 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { for i := 3; i < upn; i++ { o = o.Outer } - { - lhs := - o.Binds[index] + { + lhs := o. + Binds[index] lhs.SetComplex(lhs.Complex() + val, ) @@ -878,9 +1978,8 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { ret = func(env *Env) (Stmt, *Env) { { - lhs := - - env.ThreadGlobals.FileEnv.Binds[index] + lhs := env.ThreadGlobals.FileEnv. + Binds[index] lhs.SetComplex(lhs.Complex() + val, ) @@ -944,10 +2043,10 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { for i := 3; i < upn; i++ { o = o.Outer } - { - lhs := - o.Binds[index] + { + lhs := o. + Binds[index] lhs.SetString(lhs.String() + val, ) @@ -978,752 +2077,1853 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { c.append(ret) } } -func (c *Comp) varAddExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varAddExpr(va *Var, fun I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind var ret Stmt switch fun := fun.(type) { case func(*Env) int: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case func(*Env) int8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case func(*Env) int16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int32: - switch upn { - case 0: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - default: + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) - - env.IP++ - return env.Code[env.IP], env } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) int64: + case func(*Env) int32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint: + case func(*Env) int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint8: - switch upn { + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() + int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint: + switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint16: + case func(*Env) uint8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint32: + case func(*Env) uint16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - case 2: + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env - } - default: - - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint64: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] += fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] += fun(env) + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uintptr: + case func(*Env) uint32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) float32: + case func(*Env) uint64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*float32)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) float64: + case func(*Env) uintptr: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*float64)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() + uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) complex64: + case func(*Env) float32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) += fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) - env.IP++ - return env.Code[env.IP], env - } - } + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) float64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() + float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) complex64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) += fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() + complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } case func(*Env) complex128: switch upn { case 0: @@ -1777,10 +3977,10 @@ func (c *Comp) varAddExpr(upn int, index int, t xr.Type, fun I) { for i := 3; i < upn; i++ { o = o.Outer } - { - lhs := - o.Binds[index] + { + lhs := o. + Binds[index] lhs.SetComplex(lhs.Complex() + fun(env), ) @@ -1793,9 +3993,8 @@ func (c *Comp) varAddExpr(upn int, index int, t xr.Type, fun I) { ret = func(env *Env) (Stmt, *Env) { { - lhs := - - env.ThreadGlobals.FileEnv.Binds[index] + lhs := env.ThreadGlobals.FileEnv. + Binds[index] lhs.SetComplex(lhs.Complex() + fun(env), ) @@ -1858,10 +4057,10 @@ func (c *Comp) varAddExpr(upn int, index int, t xr.Type, fun I) { for i := 3; i < upn; i++ { o = o.Outer } - { - lhs := - o.Binds[index] + { + lhs := o. + Binds[index] lhs.SetString(lhs.String() + fun(env), ) @@ -1891,12 +4090,16 @@ func (c *Comp) varAddExpr(upn int, index int, t xr.Type, fun I) { } c.append(ret) } -func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varSubConst(va *Var, val I) { if isLiteralNumber(val, 0) { return } { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind var ret Stmt switch t.Kind() { case r.Int: @@ -1904,53 +4107,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env - } + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: @@ -1958,53 +4239,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: @@ -2012,53 +4371,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: @@ -2066,53 +4503,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: @@ -2120,53 +4635,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: @@ -2174,53 +4767,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: @@ -2228,53 +4899,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: @@ -2282,53 +5031,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: @@ -2336,53 +5163,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint64: @@ -2390,54 +5295,137 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] -= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] -= val + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] -= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] -= val + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] -= val + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uintptr: @@ -2445,53 +5433,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Float32: @@ -2501,53 +5567,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*float32)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Float64: @@ -2555,53 +5699,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*float64)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Complex64: @@ -2611,53 +5833,131 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) -= val + + env.IP++ + return env.Code[env.IP], env } - *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) -= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Complex128: @@ -2714,10 +6014,10 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { for i := 3; i < upn; i++ { o = o.Outer } - { - lhs := - o.Binds[index] + { + lhs := o. + Binds[index] lhs.SetComplex(lhs.Complex() - val, ) @@ -2730,9 +6030,8 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { ret = func(env *Env) (Stmt, *Env) { { - lhs := - - env.ThreadGlobals.FileEnv.Binds[index] + lhs := env.ThreadGlobals.FileEnv. + Binds[index] lhs.SetComplex(lhs.Complex() - val, ) @@ -2749,2704 +6048,11804 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { c.append(ret) } } -func (c *Comp) varSubExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varSubExpr(va *Var, fun I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind var ret Stmt switch fun := fun.(type) { case func(*Env) int: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - case c.Depth - 1: + default: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int8: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - default: + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) int16: + case func(*Env) int8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) int32: + case func(*Env) int16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int64: - switch upn { - case 0: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) int32: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint: + case func(*Env) int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() - int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint8: + case func(*Env) uint: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - case 2: + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env - } - default: - - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) + case 2: - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint16: - switch upn { - case 0: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - default: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint32: + case func(*Env) uint8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint64: + case func(*Env) uint16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] -= fun(env) + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uintptr: + case func(*Env) uint32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) float32: + case func(*Env) uint64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] -= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] -= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*float32)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) float64: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] -= fun(env) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*float64)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) complex64: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) -= fun(env) - - env.IP++ - return env.Code[env.IP], env } } - case func(*Env) complex128: + case func(*Env) uintptr: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Binds[index] - lhs.SetComplex(lhs.Complex() - - fun(env), - ) - } - - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() - - fun(env), - ) + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer.Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() - - fun(env), - ) + env.IP++ + return env.Code[env.IP], env } - - env.IP++ - return env.Code[env.IP], env } - default: + case 1: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - { - lhs := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) - o.Binds[index] - lhs.SetComplex(lhs.Complex() - - fun(env), - ) + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - { - lhs := - - env.ThreadGlobals.FileEnv.Binds[index] - lhs.SetComplex(lhs.Complex() - - fun(env), - ) + env.IP++ + return env.Code[env.IP], env } - - env.IP++ - return env.Code[env.IP], env } - } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.SUB, t) - - } - c.append(ret) -} -func (c *Comp) varMulConst(upn int, index int, t xr.Type, val I) { - if isLiteralNumber(val, 0) { - - c.varSetZero(upn, index, t) - return - } else if isLiteralNumber(val, 1) { - return - } - - { - var ret Stmt - switch t.Kind() { - case r.Int: - val := int(r.ValueOf(val).Int()) - switch upn { - case 0: + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) *= val + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) *= val + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Int8: - val := int8(r.ValueOf(val).Int()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) *= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() - uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + } + case func(*Env) float32: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + *(*float32)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) *= val + *(*float32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int16: - val := int16(r.ValueOf(val).Int()) - switch upn { - case 0: + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) *= val + *(*float32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) *= val - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int32: - val := int32(r.ValueOf(val).Int()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) *= val + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) float64: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + *(*float64)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) *= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + *(*float64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Int64: - val := r.ValueOf(val).Int() - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) *= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + *(*float64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) *= val + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint: - val := uint(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) *= val + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() - float64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) complex64: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + *(*complex64)(unsafe.Pointer(&env.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(fun(env), + ), + ) } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) *= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + *(*complex64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint8: - val := uint8(r.ValueOf(val).Uint()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) *= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) *= val + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint16: - val := uint16(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) *= val + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) -= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() - complex128(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + } + } + case func(*Env) complex128: + switch upn { + case 0: - env.IP++ - return env.Code[env.IP], env + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) } - default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) *= val + env.IP++ + return env.Code[env.IP], env + } + case 1: - env.IP++ - return env.Code[env.IP], env + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) } - case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + env.IP++ + return env.Code[env.IP], env + } + case 2: - env.IP++ - return env.Code[env.IP], env + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) } - } - case r.Uint32: - val := uint32(r.ValueOf(val).Uint()) - switch upn { - case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) *= val + env.IP++ + return env.Code[env.IP], env + } + default: - env.IP++ - return env.Code[env.IP], env + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) } - case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() - + fun(env), + ) } - default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) *= val + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.SUB, t) - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + } + c.append(ret) +} +func (c *Comp) varMulConst(va *Var, val I) { + if isLiteralNumber(val, 0) { - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + c.varSetZero(va) + return + } else if isLiteralNumber(val, 1) { + return + } - env.IP++ - return env.Code[env.IP], env - } - } - case r.Uint64: - val := r.ValueOf(val).Uint() + { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - o.IntBinds[index] *= val + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uintptr: - val := uintptr(r.ValueOf(val).Uint()) + case r.Int8: + val := int8(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) *= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float32: - val := - - float32(r.ValueOf(val).Float()) + case r.Int16: + val := int16(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env } - *(*float32)(unsafe.Pointer(&o.IntBinds[index])) *= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float64: - val := r.ValueOf(val).Float() + case r.Int32: + val := int32(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env } - *(*float64)(unsafe.Pointer(&o.IntBinds[index])) *= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex64: - val := - - complex64(r.ValueOf(val).Complex()) + case r.Int64: + val := r.ValueOf(val).Int() switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env } - *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) *= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex128: - val := r.ValueOf(val).Complex() + case r.Uint: + val := uint(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Binds[index] - lhs.SetComplex(lhs.Complex() * - val, - ) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() * - val, - ) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer.Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() * - val, - ) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - { - lhs := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) *= val - o.Binds[index] - lhs.SetComplex(lhs.Complex() * - val, - ) + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - env.ThreadGlobals.FileEnv.Binds[index] - lhs.SetComplex(lhs.Complex() * - val, - ) + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.MUL, t) - - } - c.append(ret) - } -} -func (c *Comp) varMulExpr(upn int, index int, t xr.Type, fun I) { - var ret Stmt - switch fun := fun.(type) { - case func(*Env) int: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + case 2: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int8: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + default: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) - - env.IP++ - return env.Code[env.IP], env } - case c.Depth - 1: + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int16: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int32: - switch upn { - case 0: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + case 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int64: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - default: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - } - case func(*Env) uint: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] *= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] *= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + case 2: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] *= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint8: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + default: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - case 1: + o. + IntBinds[index] *= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] *= val - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - case c.Depth - 1: + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint16: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint32: - switch upn { - case 0: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Float32: + val := - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + float32(r.ValueOf(val).Float()) + switch upn { + case 0: - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + case 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint64: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - default: + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } + case c.Depth - 1: - o.IntBinds[index] *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } } - case c.Depth - 1: + case r.Float64: + val := r.ValueOf(val).Float() + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uintptr: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + default: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) *= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) float32: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val - env.IP++ + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Complex64: + val := + + complex64(r.ValueOf(val).Complex()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Complex128: + val := r.ValueOf(val).Complex() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() * + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.MUL, t) + + } + c.append(ret) + } +} +func (c *Comp) varMulExpr(va *Var, fun I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) int8: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) int16: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) int32: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) int64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() * int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint8: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint16: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint32: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() * uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) float32: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) float64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() * float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) complex64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) *= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() * complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) complex128: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() * + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.MUL, t) + + } + c.append(ret) +} +func (c *Comp) varQuoPow2(va *Var, val I) bool { + t := va.Type + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, t) + return false + } else if isLiteralNumber(val, 1) { + return true + } + + ypositive := true + yv := r.ValueOf(val) + var y uint64 + switch KindToCategory(yv.Kind()) { + case r.Int: + sy := yv.Int() + if sy < 0 { + ypositive = false + y = uint64(-sy) + } else { + y = uint64(sy) + } + + case r.Uint: + y = yv.Uint() + default: + return false + } + if !isPowerOfTwo(y) { + return false + } + + shift := integerLen(y) - 1 + upn := va.Upn + index := va.Desc.Index() + var ret Stmt + + switch t.Kind() { + case r.Int: + switch upn { + case 0: + + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Int8: + switch upn { + case 0: + + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int8)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int8)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int8(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Int16: + switch upn { + case 0: + + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int16)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int16)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int16(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Int32: + switch upn { + case 0: + + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int32)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int32)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int32(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Int64: + switch upn { + case 0: + + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 1: + + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case 2: + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + default: + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + addr := (*int64)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + addr := (*int64)(unsafe.Pointer(&o.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + case c.Depth - 1: + { + y_1 := + + int64(y - 1) + if ypositive { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + + addr := (*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + + n := *addr + if n < 0 { + n += y_1 + } + + *addr = -(n >> shift) + env.IP++ + return env.Code[env.IP], env + } + } + + } + } + + case r.Uint: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint8: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint16: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint32: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uint64: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + env.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + + env.ThreadGlobals.FileEnv.IntBinds[index] >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + case r.Uintptr: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift + env.IP++ + return env.Code[env.IP], env + } + } + + } + if ret == nil { + return false + } + + c.append(ret) + return true +} +func (c *Comp) varQuoConst(va *Var, val I) { + if c.varQuoPow2(va, val) { + return + } + + { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Float32: + val := + + float32(r.ValueOf(val).Float()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Float64: + val := r.ValueOf(val).Float() + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Complex64: + val := + + complex64(r.ValueOf(val).Complex()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Complex128: + val := r.ValueOf(val).Complex() + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 2: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + default: + + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() / + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.QUO, t) + + } + c.append(ret) + } +} +func (c *Comp) varQuoExpr(va *Var, fun I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) int8: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) int16: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) int32: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) int64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() / int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint8: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint16: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint32: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uint64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) uintptr: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() / uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) float32: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float32)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) float64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*float64)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetFloat(lhs.Float() / float64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) complex64: + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) /= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() / complex128(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case func(*Env) complex128: + switch upn { + case 0: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } + + env.IP++ return env.Code[env.IP], env } case 2: ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } env.IP++ return env.Code[env.IP], env } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + case c.Depth - 1: + + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetComplex(lhs.Complex() / + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.QUO, t) + + } + c.append(ret) +} +func (c *Comp) varRemConst(va *Var, val I) { + t := va.Type + if IsCategory(t.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, 0) { + c.Errorf("division by %v <%v>", val, t) + return + } else if isLiteralNumber(val, 1) { + + c.varSetZero(va) + return + } + } + + { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } - *(*float32)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) - - env.IP++ - return env.Code[env.IP], env } - case c.Depth - 1: + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) %= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) float64: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*float64)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) %= val - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) complex64: - switch upn { - case 0: + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) *= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) %= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) *= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) *= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) complex128: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Binds[index] - lhs.SetComplex(lhs.Complex() * - fun(env), - ) + env.IP++ + return env.Code[env.IP], env + } } + case 2: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() * - fun(env), - ) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) %= val - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer.Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() * - fun(env), - ) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } } - default: + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - { - lhs := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) %= val - o.Binds[index] - lhs.SetComplex(lhs.Complex() * - fun(env), - ) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val - ret = func(env *Env) (Stmt, *Env) { - { - lhs := + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - env.ThreadGlobals.FileEnv.Binds[index] - lhs.SetComplex(lhs.Complex() * - fun(env), - ) + env.IP++ + return env.Code[env.IP], env + } } + case 2: - env.IP++ - return env.Code[env.IP], env - } - } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.MUL, t) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val - } - c.append(ret) -} -func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { - if isLiteralNumber(val, 0) { - c.Errorf("division by %v <%v>", val, t) - return false - } else if isLiteralNumber(val, 1) { - return true - } + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - ypositive := true - yv := r.ValueOf(val) - var y uint64 - switch KindToCategory(yv.Kind()) { - case r.Int: - sy := yv.Int() - if sy < 0 { - ypositive = false - y = uint64(-sy) - } else { - y = uint64(sy) - } + env.IP++ + return env.Code[env.IP], env + } + } + default: - case r.Uint: - y = yv.Uint() - default: - return false - } - if !isPowerOfTwo(y) { - return false - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) %= val - shift := integerLen(y) - 1 - var ret Stmt + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - switch t.Kind() { - case r.Int: - switch upn { - case 0: + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - { - y_1 := + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - int(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val - addr := (*int)(unsafe.Pointer(&env.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) } - *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) %= val + env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - addr := (*int)(unsafe.Pointer(&env.IntBinds[index])) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - n := *addr - if n < 0 { - n += y_1 + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case 2: - } - case 1: - - { - y_1 := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val - int(y - 1) - if ypositive { + env.IP++ + return env.Code[env.IP], env + } + } else { ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } - addr := (*int)(unsafe.Pointer(&env. - Outer.IntBinds[index])) + env.IP++ + return env.Code[env.IP], env + } + } + default: - n := *addr - if n < 0 { - n += y_1 + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) %= val - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - addr := (*int)(unsafe.Pointer(&env. - Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(val, + ), + ) + } + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: - { - y_1 := + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: - int(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) %= val - addr := (*int)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) + } - n := *addr - if n < 0 { - n += y_1 + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = n >> shift + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val + env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + default: - } - default: - { - y_1 := - - int(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - addr := (*int)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) %= val - *addr = n >> shift env.IP++ return env.Code[env.IP], env } @@ -5457,194 +17856,128 @@ func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { o = o.Outer } - addr := (*int)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case c.Depth - 1: - } - case c.Depth - 1: - { - y_1 := - - int(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val - addr := (*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } - } - } - - case r.Int8: - switch upn { - case 0: - - { - y_1 := + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: - int8(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) %= val - addr := (*int8)(unsafe.Pointer(&env.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int8)(unsafe.Pointer(&env.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case 1: - } - case 1: - - { - y_1 := - - int8(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val - addr := (*int8)(unsafe.Pointer(&env. - Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int8)(unsafe.Pointer(&env. - Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case 2: - } - case 2: - { - y_1 := - - int8(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val - addr := (*int8)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int8)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + default: - } - default: - { - y_1 := - - int8(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - addr := (*int8)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) %= val - *addr = n >> shift env.IP++ return env.Code[env.IP], env } @@ -5655,194 +17988,128 @@ func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { o = o.Outer } - addr := (*int8)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case c.Depth - 1: - } - case c.Depth - 1: - { - y_1 := - - int8(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val - addr := (*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } - } - } - - case r.Int16: - switch upn { - case 0: - - { - y_1 := + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: - int16(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) %= val - addr := (*int16)(unsafe.Pointer(&env.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int16)(unsafe.Pointer(&env.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case 1: - } - case 1: - - { - y_1 := - - int16(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val - addr := (*int16)(unsafe.Pointer(&env. - Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int16)(unsafe.Pointer(&env. - Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case 2: - } - case 2: - { - y_1 := - - int16(y - 1) - if ypositive { - ret = func(env *Env) (Stmt, *Env) { - - addr := (*int16)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int16)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + default: - } - default: - { - y_1 := - - int16(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - addr := (*int16)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) %= val - *addr = n >> shift env.IP++ return env.Code[env.IP], env } @@ -5853,194 +18120,128 @@ func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { o = o.Outer } - addr := (*int16)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case c.Depth - 1: - } - case c.Depth - 1: - { - y_1 := - - int16(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val - addr := (*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } - } - } - - case r.Int32: - switch upn { - case 0: - - { - y_1 := + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: - int32(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) %= val - addr := (*int32)(unsafe.Pointer(&env.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int32)(unsafe.Pointer(&env.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case 1: - } - case 1: - - { - y_1 := - - int32(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val - addr := (*int32)(unsafe.Pointer(&env. - Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int32)(unsafe.Pointer(&env. - Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case 2: - } - case 2: - { - y_1 := - - int32(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val - addr := (*int32)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int32)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + default: - } - default: - { - y_1 := - - int32(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - addr := (*int32)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) %= val - *addr = n >> shift env.IP++ return env.Code[env.IP], env } @@ -6051,194 +18252,266 @@ func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { o = o.Outer } - addr := (*int32)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case c.Depth - 1: - } - case c.Depth - 1: - { - y_1 := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val - int32(y - 1) - if ypositive { + env.IP++ + return env.Code[env.IP], env + } + } else { ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) + } - addr := (*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: - n := *addr - if n < 0 { - n += y_1 - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] %= val - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) + } - addr := (*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - n := *addr - if n < 0 { - n += y_1 + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] %= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case 2: - } - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] %= val - case r.Int64: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) + } - { - y_1 := + env.IP++ + return env.Code[env.IP], env + } + } + default: - int64(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - addr := (*int64)(unsafe.Pointer(&env.IntBinds[index])) + o. + IntBinds[index] %= val - n := *addr - if n < 0 { - n += y_1 + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer } - *addr = n >> shift + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] %= val + env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int64)(unsafe.Pointer(&env.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } - } - case 1: - - { - y_1 := + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: - int64(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) %= val - addr := (*int64)(unsafe.Pointer(&env. - Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int64)(unsafe.Pointer(&env. - Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case 1: - } - case 2: - { - y_1 := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= val - int64(y - 1) - if ypositive { + env.IP++ + return env.Code[env.IP], env + } + } else { ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) + } - addr := (*int64)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - n := *addr - if n < 0 { - n += y_1 - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= val - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int64)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + default: - } - default: - { - y_1 := - - int64(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - addr := (*int64)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) %= val - *addr = n >> shift env.IP++ return env.Code[env.IP], env } @@ -6249,8061 +18522,13265 @@ func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { o = o.Outer } - addr := (*int64)(unsafe.Pointer(&o.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } + case c.Depth - 1: - } - case c.Depth - 1: - { - y_1 := - - int64(y - 1) - if ypositive { + if intbinds { ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= val - addr := (*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 - } - - *addr = n >> shift env.IP++ return env.Code[env.IP], env } } else { ret = func(env *Env) (Stmt, *Env) { - - addr := (*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) - - n := *addr - if n < 0 { - n += y_1 + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(val, + ), + ) } - *addr = -(n >> shift) env.IP++ return env.Code[env.IP], env } } - } - } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.REM, t) - case r.Uint: + } + c.append(ret) + } +} +func (c *Comp) varRemExpr(va *Var, fun I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - - case r.Uint8: + case func(*Env) int8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - - case r.Uint16: + case func(*Env) int16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - - case r.Uint32: + case func(*Env) int32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env - } - default: - - ret = func(env *Env) (Stmt, *Env) { + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - } + case 1: - case r.Uint64: - switch upn { - case 0: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) - ret = func(env *Env) (Stmt, *Env) { - env.IntBinds[index] >>= shift - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.IntBinds[index] >>= shift - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer.IntBinds[index] >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - o.IntBinds[index] >>= shift - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) - env.ThreadGlobals.FileEnv.IntBinds[index] >>= shift - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - - case r.Uintptr: + case func(*Env) int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) - ret = func(env *Env) (Stmt, *Env) { + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env } - case c.Depth - 1: + default: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= shift - env.IP++ - return env.Code[env.IP], env - } - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) - } - if ret == nil { - return false - } + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - c.append(ret) - return true -} -func (c *Comp) varQuoConst(upn int, index int, t xr.Type, val I) { - if c.varQuoPow2(upn, index, t, val) { - return - } + o.Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } - { - var ret Stmt - switch t.Kind() { - case r.Int: - val := int(r.ValueOf(val).Int()) - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) /= val + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() % int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) /= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Int8: - val := int8(r.ValueOf(val).Int()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) /= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) /= val + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int16: - val := int16(r.ValueOf(val).Int()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) /= val + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint8: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) /= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Int32: - val := int32(r.ValueOf(val).Int()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) /= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) /= val + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int64: - val := r.ValueOf(val).Int() - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) /= val + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint16: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) /= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint: - val := uint(r.ValueOf(val).Uint()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) /= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) /= val + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint8: - val := uint8(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) /= val + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint32: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) /= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint16: - val := uint16(r.ValueOf(val).Uint()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) /= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) /= val + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint32: - val := uint32(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) /= val + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint64: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + env. + IntBinds[index] %= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) /= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + env. + Outer. + IntBinds[index] %= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint64: - val := r.ValueOf(val).Uint() - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] /= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { env. - Outer. - IntBinds[index] /= val + Outer.Outer. + IntBinds[index] %= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] /= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - o.IntBinds[index] /= val + o. + IntBinds[index] %= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] /= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uintptr: - val := uintptr(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) /= val + env.ThreadGlobals.FileEnv. + IntBinds[index] %= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uintptr: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) /= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Float32: - val := - - float32(r.ValueOf(val).Float()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) /= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*float32)(unsafe.Pointer(&o.IntBinds[index])) /= val + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Float64: - val := r.ValueOf(val).Float() - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) /= val + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) %= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() % uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.REM, t) + + } + c.append(ret) +} +func (c *Comp) varAndConst(va *Var, val I) { + t := va.Type + if IsCategory(t.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { + return + } else if isLiteralNumber(val, 0) { + + c.varSetZero(va) + return + } + } + + { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env } - *(*float64)(unsafe.Pointer(&o.IntBinds[index])) /= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex64: - val := - - complex64(r.ValueOf(val).Complex()) + case r.Int8: + val := int8(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) /= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &= val + + env.IP++ + return env.Code[env.IP], env } - *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) /= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex128: - val := r.ValueOf(val).Complex() + case r.Int16: + val := int16(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Binds[index] - lhs.SetComplex(lhs.Complex() / - val, - ) - } - - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() / - val, - ) + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer.Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() / - val, - ) + env.IP++ + return env.Code[env.IP], env } - - env.IP++ - return env.Code[env.IP], env } - default: + case 1: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - { - lhs := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val - o.Binds[index] - lhs.SetComplex(lhs.Complex() / - val, - ) + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - case c.Depth - 1: + case 2: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - env.ThreadGlobals.FileEnv.Binds[index] - lhs.SetComplex(lhs.Complex() / - val, - ) + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.QUO, t) - - } - c.append(ret) - } -} -func (c *Comp) varQuoExpr(upn int, index int, t xr.Type, fun I) { - var ret Stmt - switch fun := fun.(type) { - case func(*Env) int: - switch upn { - case 0: + default: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) - - env.IP++ - return env.Code[env.IP], env } - case c.Depth - 1: + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int8: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int16: - switch upn { - case 0: + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int32: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + default: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - } - case func(*Env) int64: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + case 2: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + default: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) - - env.IP++ - return env.Code[env.IP], env } - case c.Depth - 1: + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint8: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint16: - switch upn { - case 0: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + case 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint32: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - default: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - } - case func(*Env) uint64: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] /= fun(env) + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } + case 2: - o.IntBinds[index] /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + default: - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uintptr: - switch upn { - case 0: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - case 1: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + case 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] &= val - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) float32: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] &= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + o. + IntBinds[index] &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } - *(*float32)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] &= val - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - } - case func(*Env) float64: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*float64)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) + case 2: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= val - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) complex64: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + default: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) /= fun(env) + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) /= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*complex64)(unsafe.Pointer(&o.IntBinds[index])) /= fun(env) - - env.IP++ - return env.Code[env.IP], env } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) /= fun(env) + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND, t) - env.IP++ - return env.Code[env.IP], env - } } - case func(*Env) complex128: + c.append(ret) + } +} +func (c *Comp) varAndExpr(va *Var, fun I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Binds[index] - lhs.SetComplex(lhs.Complex() / - fun(env), - ) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() / - fun(env), - ) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := env. - Outer.Outer. - Binds[index] - lhs.SetComplex(lhs.Complex() / - fun(env), - ) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - { - lhs := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) - o.Binds[index] - lhs.SetComplex(lhs.Complex() / - fun(env), - ) + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - { - lhs := + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) - env.ThreadGlobals.FileEnv.Binds[index] - lhs.SetComplex(lhs.Complex() / - fun(env), - ) + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.QUO, t) + case func(*Env) int8: + switch upn { + case 0: - } - c.append(ret) -} -func (c *Comp) varRemConst(upn int, index int, t xr.Type, val I) { - if IsCategory(t.Kind(), r.Int, r.Uint) { - if isLiteralNumber(val, 0) { - c.Errorf("division by %v <%v>", val, t) - return - } else if isLiteralNumber(val, 1) { + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) - c.varSetZero(upn, index, t) - return - } - } + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } - { - var ret Stmt - switch t.Kind() { - case r.Int: - val := int(r.ValueOf(val).Int()) - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) %= val + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - default: + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) %= val + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int8: - val := int8(r.ValueOf(val).Int()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) %= val + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) int16: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) %= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Int16: - val := int16(r.ValueOf(val).Int()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) %= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + Outer.Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) %= val + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int32: - val := int32(r.ValueOf(val).Int()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) %= val + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) int32: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) %= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Int64: - val := r.ValueOf(val).Int() - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) %= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) %= val + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint: - val := uint(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) %= val + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) int64: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) %= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint8: - val := uint8(r.ValueOf(val).Uint()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) %= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) %= val + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint16: - val := uint16(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) %= val + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() & int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) %= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint32: - val := uint32(r.ValueOf(val).Uint()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) %= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) %= val + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint64: - val := r.ValueOf(val).Uint() - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] %= val + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] %= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint8: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] %= val + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) } - o.IntBinds[index] %= val - env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] %= val + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uintptr: - val := uintptr(r.ValueOf(val).Uint()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) %= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= val + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) %= val + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.REM, t) - - } - c.append(ret) - } -} -func (c *Comp) varRemExpr(upn int, index int, t xr.Type, fun I) { - var ret Stmt - switch fun := fun.(type) { - case func(*Env) int: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: - - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int8: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int16: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) - - env.IP++ - return env.Code[env.IP], env } } - case func(*Env) int32: + case func(*Env) uint16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) int64: + case func(*Env) uint32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint: + case func(*Env) uint64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] &= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] &= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint8: + case func(*Env) uintptr: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() & uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint16: - switch upn { - case 0: + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND, t) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) + } + c.append(ret) +} +func (c *Comp) varOrConst(va *Var, val I) { + t := va.Type + if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + return + } - env.IP++ - return env.Code[env.IP], env - } - case 1: + { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + case 2: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint32: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + case 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint64: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] %= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) |= val - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] %= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - default: + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } + case c.Depth - 1: - o.IntBinds[index] %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } } - case c.Depth - 1: + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uintptr: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) %= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) %= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) %= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) %= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) |= val - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) %= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.REM, t) + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } - } - c.append(ret) -} -func (c *Comp) varAndConst(upn int, index int, t xr.Type, val I) { - if IsCategory(t.Kind(), r.Int, r.Uint) { - if isLiteralNumber(val, -1) { - return - } else if isLiteralNumber(val, 0) { + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - c.varSetZero(upn, index, t) - return - } - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - { - var ret Stmt - switch t.Kind() { - case r.Int: - val := int(r.ValueOf(val).Int()) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + } + case r.Int32: + val := int32(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) &= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Int8: - val := int8(r.ValueOf(val).Int()) + case r.Int64: + val := r.ValueOf(val).Int() switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Int16: - val := int16(r.ValueOf(val).Int()) + case r.Uint: + val := uint(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Int32: - val := int32(r.ValueOf(val).Int()) + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Int64: - val := r.ValueOf(val).Int() + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint: - val := uint(r.ValueOf(val).Uint()) + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint8: - val := uint8(r.ValueOf(val).Uint()) + case r.Uint64: + val := r.ValueOf(val).Uint() switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] |= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint16: - val := uint16(r.ValueOf(val).Uint()) + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) |= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint32: - val := uint32(r.ValueOf(val).Uint()) - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) &= val + default: + c.Errorf(`invalid operator %s= on <%v>`, token.OR, t) - env.IP++ - return env.Code[env.IP], env - } - case 1: + } + c.append(ret) + } +} +func (c *Comp) varOrExpr(va *Var, fun I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + *(*int)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &= val + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint64: - val := r.ValueOf(val).Uint() - switch upn { - case 0: + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] &= val + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] &= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] &= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } + { + lhs := - o.IntBinds[index] &= val - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] &= val + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uintptr: - val := uintptr(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) &= val + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) int8: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= val + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= val + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.AND, t) - - } - c.append(ret) - } -} -func (c *Comp) varAndExpr(upn int, index int, t xr.Type, fun I) { - var ret Stmt - switch fun := fun.(type) { - case func(*Env) int: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: - - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int8: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: - - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int16: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: - - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int32: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) int64: + case func(*Env) int16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint: + case func(*Env) int32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint8: + case func(*Env) int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() | int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint16: + case func(*Env) uint: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint32: + case func(*Env) uint8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint64: + case func(*Env) uint16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] &= fun(env) + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uintptr: + case func(*Env) uint32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - default: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &= fun(env) - - env.IP++ - return env.Code[env.IP], env } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.AND, t) - - } - c.append(ret) -} -func (c *Comp) varOrConst(upn int, index int, t xr.Type, val I) { - if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { - return - } + case func(*Env) uint64: + switch upn { + case 0: - { - var ret Stmt - switch t.Kind() { - case r.Int: - val := int(r.ValueOf(val).Int()) - switch upn { - case 0: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) |= val + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. + env. Outer. - IntBinds[index])) |= val + IntBinds[index] |= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. + env. Outer.Outer. - IntBinds[index])) |= val + IntBinds[index] |= fun(env) env.IP++ return env.Code[env.IP], env } - default: + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } + env.IP++ + return env.Code[env.IP], env + } + } + default: + + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) |= val + + o. + IntBinds[index] |= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int8: - val := int8(r.ValueOf(val).Int()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) |= val + env.ThreadGlobals.FileEnv. + IntBinds[index] |= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uintptr: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= val + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) |= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Int16: - val := int16(r.ValueOf(val).Int()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) |= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= val + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) |= val + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int32: - val := int32(r.ValueOf(val).Int()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) |= val + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) |= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() | uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } + } + } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.OR, t) + + } + c.append(ret) +} +func (c *Comp) varXorConst(va *Var, val I) { + t := va.Type + if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { + return + } + + { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 1: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) |= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Int64: - val := r.ValueOf(val).Int() + case r.Int8: + val := int8(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) |= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint: - val := uint(r.ValueOf(val).Uint()) + case r.Int16: + val := int16(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) |= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint8: - val := uint8(r.ValueOf(val).Uint()) + case r.Int32: + val := int32(r.ValueOf(val).Int()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) |= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint16: - val := uint16(r.ValueOf(val).Uint()) + case r.Int64: + val := r.ValueOf(val).Int() switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) |= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint32: - val := uint32(r.ValueOf(val).Uint()) + case r.Uint: + val := uint(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) |= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint64: - val := r.ValueOf(val).Uint() + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] |= val + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uintptr: - val := uintptr(r.ValueOf(val).Uint()) + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= val - - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) |= val - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= val + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } - } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.OR, t) - - } - c.append(ret) - } -} -func (c *Comp) varOrExpr(upn int, index int, t xr.Type, fun I) { - var ret Stmt - switch fun := fun.(type) { - case func(*Env) int: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) ^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - default: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - } - case func(*Env) int8: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) + switch upn { + case 0: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) ^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + case 2: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int16: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + default: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) - - env.IP++ - return env.Code[env.IP], env } - case c.Depth - 1: + case r.Uint64: + val := r.ValueOf(val).Uint() + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] ^= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int32: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] ^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] ^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + o. + IntBinds[index] ^= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int64: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] ^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + default: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } + default: + c.Errorf(`invalid operator %s= on <%v>`, token.XOR, t) + } - case func(*Env) uint8: + c.append(ret) + } +} +func (c *Comp) varXorExpr(va *Var, fun I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint16: + case func(*Env) int8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint32: + case func(*Env) int16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uint64: + case func(*Env) int32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - o.IntBinds[index] |= fun(env) + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case func(*Env) uintptr: + case func(*Env) int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) |= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) |= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() ^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.OR, t) - - } - c.append(ret) -} -func (c *Comp) varXorConst(upn int, index int, t xr.Type, val I) { - if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { - return - } + case func(*Env) uint: + switch upn { + case 0: - { - var ret Stmt - switch t.Kind() { - case r.Int: - val := int(r.ValueOf(val).Int()) - switch upn { - case 0: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - default: + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) ^= val + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int8: - val := int8(r.ValueOf(val).Int()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint8: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) ^= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int16: - val := int16(r.ValueOf(val).Int()) - switch upn { - case 0: + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) ^= val - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Int32: - val := int32(r.ValueOf(val).Int()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint16: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) ^= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Int64: - val := r.ValueOf(val).Int() - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) ^= val + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint: - val := uint(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint32: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) ^= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint8: - val := uint8(r.ValueOf(val).Uint()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) ^= val + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint16: - val := uint16(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uint64: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + env. + IntBinds[index] ^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) ^= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + env. + Outer. + IntBinds[index] ^= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint32: - val := uint32(r.ValueOf(val).Uint()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + env. + Outer.Outer. + IntBinds[index] ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + o. + IntBinds[index] ^= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint64: - val := r.ValueOf(val).Uint() - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] ^= val + env.ThreadGlobals.FileEnv. + IntBinds[index] ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] ^= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) uintptr: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] ^= val + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) } - o.IntBinds[index] ^= val - env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] ^= val + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) ^= fun(env) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uintptr: - val := uintptr(r.ValueOf(val).Uint()) - switch upn { - case 0: + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) ^= val + Outer.Outer.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) ^= val + + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= val + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) ^= fun(env) env.IP++ return env.Code[env.IP], env } - } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.XOR, t) + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() ^ uint64(fun(env), + ), + ) + } + env.IP++ + return env.Code[env.IP], env + } + } } - c.append(ret) + default: + c.Errorf(`invalid operator %s= on <%v>`, token.XOR, t) + } + c.append(ret) } -func (c *Comp) varXorExpr(upn int, index int, t xr.Type, fun I) { - var ret Stmt - switch fun := fun.(type) { - case func(*Env) int: - switch upn { - case 0: +func (c *Comp) varAndnotConst(va *Var, val I) { + t := va.Type + if IsCategory(t.Kind(), r.Int, r.Uint) { + if isLiteralNumber(val, -1) { - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + c.varSetZero(va) + return + } else if isLiteralNumber(val, 0) { + return + } + } - env.IP++ - return env.Code[env.IP], env - } - case 1: + { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch t.Kind() { + case r.Int: + val := int(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + case 2: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int8: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + default: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) - - env.IP++ - return env.Code[env.IP], env } - case c.Depth - 1: + case r.Int8: + val := int8(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int16: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - case 2: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int32: - switch upn { - case 0: + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Int16: + val := int16(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + case 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int64: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - default: + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - } - case func(*Env) uint: - switch upn { - case 0: + case r.Int32: + val := int32(r.ValueOf(val).Int()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint8: - switch upn { - case 0: + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Int64: + val := r.ValueOf(val).Int() + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + case 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint16: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env - } - default: + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - } - case func(*Env) uint32: - switch upn { - case 0: + case r.Uint: + val := uint(r.ValueOf(val).Uint()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case 1: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: + + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + default: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uint64: - switch upn { - case 0: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - case 2: + case r.Uint8: + val := uint8(r.ValueOf(val).Uint()) + switch upn { + case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - default: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } + case 1: - o.IntBinds[index] ^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) uintptr: - switch upn { - case 0: + env.IP++ + return env.Code[env.IP], env + } + } + case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) ^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env - } - case 1: + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } + default: - env.IP++ - return env.Code[env.IP], env - } - case 2: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env - } - default: + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env + } } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) ^= fun(env) + case c.Depth - 1: - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) ^= fun(env) + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } } - } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.XOR, t) - - } - c.append(ret) -} -func (c *Comp) varAndnotConst(upn int, index int, t xr.Type, val I) { - if IsCategory(t.Kind(), r.Int, r.Uint) { - if isLiteralNumber(val, -1) { - - c.varSetZero(upn, index, t) - return - } else if isLiteralNumber(val, 0) { - return - } - } - - { - var ret Stmt - switch t.Kind() { - case r.Int: - val := int(r.ValueOf(val).Int()) + case r.Uint16: + val := uint16(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) &^= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Int8: - val := int8(r.ValueOf(val).Int()) + case r.Uint32: + val := uint32(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &^= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Int16: - val := int16(r.ValueOf(val).Int()) + case r.Uint64: + val := r.ValueOf(val).Uint() switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] &^= val + + env.IP++ + return env.Code[env.IP], env } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &^= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Int32: - val := int32(r.ValueOf(val).Int()) + case r.Uintptr: + val := uintptr(r.ValueOf(val).Uint()) switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &^= val + + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &^= val + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(val, + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Int64: - val := r.ValueOf(val).Int() - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + default: + c.Errorf(`invalid operator %s= on <%v>`, token.AND_NOT, t) - env.IP++ - return env.Code[env.IP], env - } - case 1: + } + c.append(ret) + } +} +func (c *Comp) varAndnotExpr(va *Var, fun I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + var ret Stmt + switch fun := fun.(type) { + case func(*Env) int: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + *(*int)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &^= val + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint: - val := uint(r.ValueOf(val).Uint()) - switch upn { - case 0: + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &^= val - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: + { + lhs := - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint8: - val := uint8(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) int8: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &^= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint16: - val := uint16(r.ValueOf(val).Uint()) - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &^= val + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uint32: - val := uint32(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) int16: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &^= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - } - case r.Uint64: - val := r.ValueOf(val).Uint() - switch upn { - case 0: - + } else { ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] &^= val + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 1: + } + case 2: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] &^= val + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case 2: - + } else { ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] &^= val + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - default: + } + default: + if intbinds { ret = func(env *Env) (Stmt, *Env) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { o = o.Outer } - - o.IntBinds[index] &^= val + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] &^= val + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } } - case r.Uintptr: - val := uintptr(r.ValueOf(val).Uint()) - switch upn { - case 0: + case c.Depth - 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) &^= val + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - case 1: - + } else { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= val + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } env.IP++ return env.Code[env.IP], env } - case 2: + } + } + case func(*Env) int32: + switch upn { + case 0: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= val + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - default: - + } else { ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &^= val env.IP++ return env.Code[env.IP], env } - case c.Depth - 1: + } + case 1: + if intbinds { ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= val + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) env.IP++ return env.Code[env.IP], env } - } - default: - c.Errorf(`invalid operator %s= on <%v>`, token.AND_NOT, t) - - } - c.append(ret) - } -} -func (c *Comp) varAndnotExpr(upn int, index int, t xr.Type, fun I) { - var ret Stmt - switch fun := fun.(type) { - case func(*Env) int: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: - - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int8: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int16: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - default: + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + env.IP++ + return env.Code[env.IP], env } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case c.Depth - 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - } - case func(*Env) int32: - switch upn { - case 0: - - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 1: - - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) - - env.IP++ - return env.Code[env.IP], env - } - case 2: - - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case func(*Env) int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := - env.IP++ - return env.Code[env.IP], env + o.Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() &^ int64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case func(*Env) uint: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case func(*Env) uint8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case func(*Env) uint16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case func(*Env) uint32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case func(*Env) uint64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + IntBinds[index] &^= fun(env) + + env.IP++ + return env.Code[env.IP], env } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] &^= fun(env) + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case func(*Env) uintptr: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + + env.IP++ + return env.Code[env.IP], env } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) &^= fun(env) + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - env.IP++ - return env.Code[env.IP], env + { + lhs := o. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) &^= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) &^= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() &^ uint64(fun(env), + ), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } default: @@ -14345,7 +31822,6 @@ func (c *Comp) SetVar(va *Var, op token.Token, init *Expr) { c.Errorf("invalid operator %s on %v", op, class) return } - upn := va.Upn index := va.Desc.Index() if index == NoIndex { if op != token.ASSIGN { @@ -14371,29 +31847,29 @@ func (c *Comp) SetVar(va *Var, op token.Token, init *Expr) { } switch op { case token.ASSIGN: - c.varSetConst(upn, index, t, val) + c.varSetConst(va, val) case token.ADD, token.ADD_ASSIGN: - c.varAddConst(upn, index, t, val) + c.varAddConst(va, val) case token.SUB, token.SUB_ASSIGN: - c.varSubConst(upn, index, t, val) + c.varSubConst(va, val) case token.MUL, token.MUL_ASSIGN: - c.varMulConst(upn, index, t, val) + c.varMulConst(va, val) case token.QUO, token.QUO_ASSIGN: - c.varQuoConst(upn, index, t, val) + c.varQuoConst(va, val) case token.REM, token.REM_ASSIGN: - c.varRemConst(upn, index, t, val) + c.varRemConst(va, val) case token.AND, token.AND_ASSIGN: - c.varAndConst(upn, index, t, val) + c.varAndConst(va, val) case token.OR, token.OR_ASSIGN: - c.varOrConst(upn, index, t, val) + c.varOrConst(va, val) case token.XOR, token.XOR_ASSIGN: - c.varXorConst(upn, index, t, val) + c.varXorConst(va, val) case token.SHL, token.SHL_ASSIGN: - c.varShlConst(upn, index, t, val) + c.varShlConst(va, val) case token.SHR, token.SHR_ASSIGN: - c.varShrConst(upn, index, t, val) + c.varShrConst(va, val) case token.AND_NOT, token.AND_NOT_ASSIGN: - c.varAndnotConst(upn, index, t, val) + c.varAndnotConst(va, val) default: c.Errorf("invalid operator %s", op) } @@ -14401,29 +31877,29 @@ func (c *Comp) SetVar(va *Var, op token.Token, init *Expr) { fun := init.Fun switch op { case token.ASSIGN: - c.varSetExpr(upn, index, t, init) + c.varSetExpr(va, init) case token.ADD, token.ADD_ASSIGN: - c.varAddExpr(upn, index, t, fun) + c.varAddExpr(va, fun) case token.SUB, token.SUB_ASSIGN: - c.varSubExpr(upn, index, t, fun) + c.varSubExpr(va, fun) case token.MUL, token.MUL_ASSIGN: - c.varMulExpr(upn, index, t, fun) + c.varMulExpr(va, fun) case token.QUO, token.QUO_ASSIGN: - c.varQuoExpr(upn, index, t, fun) + c.varQuoExpr(va, fun) case token.REM, token.REM_ASSIGN: - c.varRemExpr(upn, index, t, fun) + c.varRemExpr(va, fun) case token.AND, token.AND_ASSIGN: - c.varAndExpr(upn, index, t, fun) + c.varAndExpr(va, fun) case token.OR, token.OR_ASSIGN: - c.varOrExpr(upn, index, t, fun) + c.varOrExpr(va, fun) case token.XOR, token.XOR_ASSIGN: - c.varXorExpr(upn, index, t, fun) + c.varXorExpr(va, fun) case token.SHL, token.SHL_ASSIGN: - c.varShlExpr(upn, index, t, fun) + c.varShlExpr(va, fun) case token.SHR, token.SHR_ASSIGN: - c.varShrExpr(upn, index, t, fun) + c.varShrExpr(va, fun) case token.AND_NOT, token.AND_NOT_ASSIGN: - c.varAndnotExpr(upn, index, t, fun) + c.varAndnotExpr(va, fun) default: c.Errorf("invalid operator %s", op) } diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_ops.gomacro b/vendor/github.com/cosmos72/gomacro/fast/var_ops.gomacro index a59f4bd..595616c 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/var_ops.gomacro +++ b/vendor/github.com/cosmos72/gomacro/fast/var_ops.gomacro @@ -31,7 +31,6 @@ import ( "unsafe" . "github.com/cosmos72/gomacro/base" - xr "github.com/cosmos72/gomacro/xreflect" ) :import ( @@ -125,22 +124,22 @@ import ( return op } -:func fgetplace(depth, typ ast.Node) (/*loop*/ *ast.BlockStmt, /*bind*/ ast.Node) { +:func fgetplace(depth, typ ast.Node) (/*loop*/ *ast.BlockStmt, /*env*/ ast.Node) { // the return type of Eval() and EvalType() varies. better check early. upn := Eval(depth).(int) var t r.Type = EvalType(typ) - var bind ast.Node + var env ast.Node var loop *ast.BlockStmt if upn >= 0 { - bind = ~'{env} + env = ~'{env} for i := 0; i < upn; i++ { - bind = ~"{~,bind . Outer} + env = ~"{~,env . Outer} } } else if upn == -2 { - bind = ~'{env.ThreadGlobals.FileEnv} + env = ~'{env.ThreadGlobals.FileEnv} } else if upn == -3 { - bind = ~'{env.ThreadGlobals.TopEnv} + env = ~'{env.ThreadGlobals.TopEnv} } else { loop = ~'{ o := env.Outer.Outer.Outer @@ -148,43 +147,85 @@ import ( o = o.Outer } } - bind = ~'o + env = ~'o } - return loop, bind + return loop, env } :func fsetplace(opnode, depth, typ, expr, exprv ast.Node) ast.Node { - loop, bind := fgetplace(depth, typ) + loop, env := fgetplace(depth, typ) // the return type of Eval() and EvalType() varies. better check early. var t r.Type = EvalType(typ) op := Eval(opnode).(token.Token) opset := op_to_assign(op) + var bind, cbind ast.Node + + var assign *ast.AssignStmt = ~"{*(*~,typ)(unsafe.Pointer(& ~,env .IntBinds[index])) += ~,expr} + assign.Tok = opset + bind = assign switch t.Kind() { + case r.Bool: + var result *ast.BinaryExpr = ~"{lhs.Bool() + ~,expr} + result.Op = op + cbind = ~"{lhs := ~,env . Binds[index]; lhs.SetBool(~,result)} + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + var result *ast.BinaryExpr = ~"{lhs.Int() + int64(~,expr)} + result.Op = op + cbind = ~"{lhs := ~,env . Binds[index]; lhs.SetInt(~,result)} + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + var result *ast.BinaryExpr = ~"{lhs.Uint() + uint64(~,expr)} + result.Op = op + cbind = ~"{lhs := ~,env . Binds[index]; lhs.SetUint(~,result)} + if t.Kind() == r.Uint64 { + var assign *ast.AssignStmt = ~"{~,env . IntBinds[index] += ~,expr} + assign.Tok = opset + bind = assign + } + case r.Float32, r.Float64: + var result *ast.BinaryExpr = ~"{lhs.Float() + float64(~,expr)} + result.Op = op + cbind = ~"{lhs := ~,env . Binds[index]; lhs.SetFloat(~,result)} + case r.Complex64: + var result *ast.BinaryExpr = ~"{lhs.Complex() + complex128(~,expr)} + result.Op = op + cbind = ~"{lhs := ~,env . Binds[index]; lhs.SetComplex(~,result)} case r.Complex128: var result *ast.BinaryExpr = ~"{lhs.Complex() + ~,expr} result.Op = op - bind = ~"{lhs := ~,bind . Binds[index]; lhs.SetComplex(~,result)} + bind = ~"{lhs := ~,env . Binds[index]; lhs.SetComplex(~,result)} case r.String: var result *ast.BinaryExpr = ~"{lhs.String() + ~,expr} result.Op = op - bind = ~"{lhs := ~,bind . Binds[index]; lhs.SetString(~,result)} - case r.Uint64: - var assign *ast.AssignStmt = ~"{~,bind . IntBinds[index] += ~,expr} - assign.Tok = opset - bind = assign - default: - var assign *ast.AssignStmt = ~"{*(*~,typ)(unsafe.Pointer(& ~,bind .IntBinds[index])) += ~,expr} - assign.Tok = opset - bind = assign + bind = ~"{lhs := ~,env . Binds[index]; lhs.SetString(~,result)} + } + + if cbind == nil { + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } } return ~"{ - ret = func(env *Env) (Stmt, *Env) { - ~,@loop - ~,bind - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,cbind + env.IP++ + return env.Code[env.IP], env + } } } } @@ -255,6 +296,10 @@ import ( } } return ~"{ + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind var ret Stmt switch t.Kind() { ~,@caselist @@ -274,6 +319,10 @@ import ( } } return ~"{ + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind var ret Stmt switch fun := fun.(type) { ~,@caselist @@ -283,7 +332,7 @@ import ( } // varAddConst compiles 'variable += constant' -func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varAddConst(va *Var, val I) { if isLiteralNumber(val, 0) || val == "" { return } @@ -291,12 +340,12 @@ func (c *Comp) varAddConst(upn int, index int, t xr.Type, val I) { } // varAddExpr compiles 'variable += expression' -func (c *Comp) varAddExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varAddExpr(va *Var, fun I) { setplaces_depth_expr; token.ADD; {int; uint; float64; complex128; string; nil} } // varSubConst compiles 'variable -= constant' -func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varSubConst(va *Var, val I) { if isLiteralNumber(val, 0) { return } @@ -304,15 +353,15 @@ func (c *Comp) varSubConst(upn int, index int, t xr.Type, val I) { } // varSubExpr compiles 'variable -= expression' -func (c *Comp) varSubExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varSubExpr(va *Var, fun I) { setplaces_depth_expr; token.SUB; {int; uint; float64; complex128; nil} } // varMulConst compiles 'variable *= constant' -func (c *Comp) varMulConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varMulConst(va *Var, val I) { if isLiteralNumber(val, 0) { // variable *= 0 is equivalent to variable = 0 - c.varSetZero(upn, index, t) + c.varSetZero(va) return } else if isLiteralNumber(val, 1) { return @@ -321,7 +370,7 @@ func (c *Comp) varMulConst(upn int, index int, t xr.Type, val I) { } // varMulExpr compiles 'variable *= expression' -func (c *Comp) varMulExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varMulExpr(va *Var, fun I) { setplaces_depth_expr; token.MUL; {int; uint; float64; complex128; nil} } @@ -405,7 +454,8 @@ func (c *Comp) varMulExpr(upn int, index int, t xr.Type, fun I) { } // varQuoPow2 compiles 'variable /= constant-power-of-two' -func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { +func (c *Comp) varQuoPow2(va *Var, val I) bool { + t := va.Type if isLiteralNumber(val, 0) { c.Errorf("division by %v <%v>", val, t) return false @@ -439,6 +489,8 @@ func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { // right shift >> truncates toward negative infinity // see quoPow2() in binary_ops.go for more details shift := integerLen(y) - 1 + upn := va.Upn + index := va.Desc.Index() var ret Stmt switch t.Kind() { @@ -462,27 +514,28 @@ func (c *Comp) varQuoPow2(upn int, index int, t xr.Type, val I) bool { } // varQuoConst compiles 'variable /= constant' -func (c *Comp) varQuoConst(upn int, index int, t xr.Type, val I) { - if c.varQuoPow2(upn, index, t, val) { +func (c *Comp) varQuoConst(va *Var, val I) { + if c.varQuoPow2(va, val) { return } setplaces_depth_const; token.QUO; {int; uint; float64; complex128; nil} } // varQuoExpr compiles 'variable /= expression' -func (c *Comp) varQuoExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varQuoExpr(va *Var, fun I) { setplaces_depth_expr; token.QUO; {int; uint; float64; complex128; nil} } // varRemConst compiles 'variable %= constant' -func (c *Comp) varRemConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varRemConst(va *Var, val I) { + t := va.Type if IsCategory(t.Kind(), r.Int, r.Uint) { if isLiteralNumber(val, 0) { c.Errorf("division by %v <%v>", val, t) return } else if isLiteralNumber(val, 1) { // variable %= 1 is equivalent to variable = 0 - c.varSetZero(upn, index, t) + c.varSetZero(va) return } } @@ -490,18 +543,19 @@ func (c *Comp) varRemConst(upn int, index int, t xr.Type, val I) { } // varRemExpr compiles 'variable %= expression' -func (c *Comp) varRemExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varRemExpr(va *Var, fun I) { setplaces_depth_expr; token.REM; {int; uint; nil} } // varAndConst compiles 'variable &= constant' -func (c *Comp) varAndConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varAndConst(va *Var, val I) { + t := va.Type if IsCategory(t.Kind(), r.Int, r.Uint) { if isLiteralNumber(val, -1) { return } else if isLiteralNumber(val, 0) { // variable &= 0 is equivalent to variable = 0 - c.varSetZero(upn, index, t) + c.varSetZero(va) return } } @@ -509,12 +563,13 @@ func (c *Comp) varAndConst(upn int, index int, t xr.Type, val I) { } // varAndExpr compiles 'variable &= expression' -func (c *Comp) varAndExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varAndExpr(va *Var, fun I) { setplaces_depth_expr; token.AND; {int; uint; nil} } // varOrConst compiles 'variable |= constant' -func (c *Comp) varOrConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varOrConst(va *Var, val I) { + t := va.Type if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { return } @@ -522,12 +577,13 @@ func (c *Comp) varOrConst(upn int, index int, t xr.Type, val I) { } // varOrExpr compiles 'variable |= expression' -func (c *Comp) varOrExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varOrExpr(va *Var, fun I) { setplaces_depth_expr; token.OR; {int; uint; nil} } // varXorConst compiles 'variable ^= constant' -func (c *Comp) varXorConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varXorConst(va *Var, val I) { + t := va.Type if IsCategory(t.Kind(), r.Int, r.Uint) && isLiteralNumber(val, 0) { return } @@ -535,16 +591,17 @@ func (c *Comp) varXorConst(upn int, index int, t xr.Type, val I) { } // varXorExpr compiles 'variable ^= expression' -func (c *Comp) varXorExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varXorExpr(va *Var, fun I) { setplaces_depth_expr; token.XOR; {int; uint; nil} } // varAndnotConst compiles 'variable &^= constant' -func (c *Comp) varAndnotConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varAndnotConst(va *Var, val I) { + t := va.Type if IsCategory(t.Kind(), r.Int, r.Uint) { if isLiteralNumber(val, -1) { // variable &^= -1 is equivalent to variable = 0 - c.varSetZero(upn, index, t) + c.varSetZero(va) return } else if isLiteralNumber(val, 0) { return @@ -554,7 +611,7 @@ func (c *Comp) varAndnotConst(upn int, index int, t xr.Type, val I) { } // varAndnotExpr compiles 'variable &^= expression' -func (c *Comp) varAndnotExpr(upn int, index int, t xr.Type, fun I) { +func (c *Comp) varAndnotExpr(va *Var, fun I) { setplaces_depth_expr; token.AND_NOT; {int; uint; nil} } @@ -592,7 +649,6 @@ func (c *Comp) SetVar(va *Var, op token.Token, init *Expr) { c.Errorf("invalid operator %s on %v", op, class) return } - upn := va.Upn index := va.Desc.Index() if index == NoIndex { if op != token.ASSIGN { @@ -618,29 +674,29 @@ func (c *Comp) SetVar(va *Var, op token.Token, init *Expr) { } switch op { case token.ASSIGN: - c.varSetConst(upn, index, t, val) + c.varSetConst(va, val) case token.ADD, token.ADD_ASSIGN: - c.varAddConst(upn, index, t, val) + c.varAddConst(va, val) case token.SUB, token.SUB_ASSIGN: - c.varSubConst(upn, index, t, val) + c.varSubConst(va, val) case token.MUL, token.MUL_ASSIGN: - c.varMulConst(upn, index, t, val) + c.varMulConst(va, val) case token.QUO, token.QUO_ASSIGN: - c.varQuoConst(upn, index, t, val) + c.varQuoConst(va, val) case token.REM, token.REM_ASSIGN: - c.varRemConst(upn, index, t, val) + c.varRemConst(va, val) case token.AND, token.AND_ASSIGN: - c.varAndConst(upn, index, t, val) + c.varAndConst(va, val) case token.OR, token.OR_ASSIGN: - c.varOrConst(upn, index, t, val) + c.varOrConst(va, val) case token.XOR, token.XOR_ASSIGN: - c.varXorConst(upn, index, t, val) + c.varXorConst(va, val) case token.SHL, token.SHL_ASSIGN: - c.varShlConst(upn, index, t, val) + c.varShlConst(va, val) case token.SHR, token.SHR_ASSIGN: - c.varShrConst(upn, index, t, val) + c.varShrConst(va, val) case token.AND_NOT, token.AND_NOT_ASSIGN: - c.varAndnotConst(upn, index, t, val) + c.varAndnotConst(va, val) default: c.Errorf("invalid operator %s", op) } @@ -648,29 +704,29 @@ func (c *Comp) SetVar(va *Var, op token.Token, init *Expr) { fun := init.Fun switch op { case token.ASSIGN: - c.varSetExpr(upn, index, t, init) + c.varSetExpr(va, init) case token.ADD, token.ADD_ASSIGN: - c.varAddExpr(upn, index, t, fun) + c.varAddExpr(va, fun) case token.SUB, token.SUB_ASSIGN: - c.varSubExpr(upn, index, t, fun) + c.varSubExpr(va, fun) case token.MUL, token.MUL_ASSIGN: - c.varMulExpr(upn, index, t, fun) + c.varMulExpr(va, fun) case token.QUO, token.QUO_ASSIGN: - c.varQuoExpr(upn, index, t, fun) + c.varQuoExpr(va, fun) case token.REM, token.REM_ASSIGN: - c.varRemExpr(upn, index, t, fun) + c.varRemExpr(va, fun) case token.AND, token.AND_ASSIGN: - c.varAndExpr(upn, index, t, fun) + c.varAndExpr(va, fun) case token.OR, token.OR_ASSIGN: - c.varOrExpr(upn, index, t, fun) + c.varOrExpr(va, fun) case token.XOR, token.XOR_ASSIGN: - c.varXorExpr(upn, index, t, fun) + c.varXorExpr(va, fun) case token.SHL, token.SHL_ASSIGN: - c.varShlExpr(upn, index, t, fun) + c.varShlExpr(va, fun) case token.SHR, token.SHR_ASSIGN: - c.varShrExpr(upn, index, t, fun) + c.varShrExpr(va, fun) case token.AND_NOT, token.AND_NOT_ASSIGN: - c.varAndnotExpr(upn, index, t, fun) + c.varAndnotExpr(va, fun) default: c.Errorf("invalid operator %s", op) } diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_set.go b/vendor/github.com/cosmos72/gomacro/fast/var_set.go index 42a632d..63a9cdd 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/var_set.go +++ b/vendor/github.com/cosmos72/gomacro/fast/var_set.go @@ -38,11 +38,15 @@ import ( xr "github.com/cosmos72/gomacro/xreflect" ) -func (c *Comp) varSetZero(upn int, index int, t xr.Type) { - zero := xr.Zero(t).Interface() - c.varSetConst(upn, index, t, zero) +func (c *Comp) varSetZero(va *Var) { + zero := xr.Zero(va.Type).Interface() + c.varSetConst(va, zero) } -func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varSetConst(va *Var, val I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + v := r.ValueOf(val) rt := t.ReflectType() if ValueType(v) == nil { @@ -52,6 +56,7 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { } var ret func(env *Env) (Stmt, *Env) + intbinds := va.Desc.Class() == IntBind switch upn { case 0: switch t.Kind() { @@ -60,12 +65,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Bool() - ret = func(env *Env) (Stmt, *Env) { - *(*bool)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetBool(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -73,60 +89,115 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := int(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: { val := int8(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: { val := int16(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: { val := int32(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: { val := v.Int() - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: @@ -135,12 +206,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: @@ -149,12 +231,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint8(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -164,12 +257,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint16(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -179,12 +283,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint32(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -192,12 +307,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Uint() - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -207,12 +333,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uintptr(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -222,12 +359,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { float32(v.Float()) - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetFloat(float64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -235,12 +383,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Float() - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetFloat(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -250,12 +409,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { complex64(v.Complex()) - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetComplex(complex128(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -305,13 +475,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Bool() - ret = func(env *Env) (Stmt, *Env) { - *(*bool)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetBool(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -319,65 +501,125 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := int(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: { val := int8(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: { val := int16(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: { val := int32(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: { val := v.Int() - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: @@ -386,13 +628,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: @@ -401,13 +655,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint8(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -417,13 +683,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint16(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -433,13 +711,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint32(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -447,13 +737,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Uint() - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -463,13 +765,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uintptr(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -479,13 +793,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { float32(v.Float()) - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetFloat(float64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -493,13 +819,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Float() - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetFloat(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -509,13 +847,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { complex64(v.Complex()) - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetComplex(complex128(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -568,13 +918,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Bool() - ret = func(env *Env) (Stmt, *Env) { - *(*bool)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetBool(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -582,65 +944,125 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := int(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: { val := int8(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: { val := int16(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: { val := int32(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: { val := v.Int() - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: @@ -649,13 +1071,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: @@ -664,13 +1098,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint8(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -680,13 +1126,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint16(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -696,13 +1154,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint32(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -710,13 +1180,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Uint() - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -726,13 +1208,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uintptr(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -742,13 +1236,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { float32(v.Float()) - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetFloat(float64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -756,13 +1262,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Float() - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetFloat(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -772,13 +1290,25 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { complex64(v.Complex()) - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetComplex(complex128(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -831,17 +1361,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Bool() - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*bool)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*bool)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetBool(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -849,85 +1395,165 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := int(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*int)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: { val := int8(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int8)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*int8)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: { val := int16(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int16)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*int16)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: { val := int32(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int32)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*int32)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: { val := v.Int() - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int64)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*int64)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: @@ -936,17 +1562,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uint)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*uint)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: @@ -955,17 +1597,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint8(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uint8)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*uint8)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -975,17 +1633,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint16(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uint16)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*uint16)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -995,17 +1669,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint32(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uint32)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*uint32)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1013,17 +1703,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Uint() - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o. - IntBinds[index] = val + o. + IntBinds[index] = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1033,17 +1739,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uintptr(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uintptr)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*uintptr)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1053,17 +1775,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { float32(v.Float()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*float32)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*float32)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetFloat(float64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1071,17 +1809,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Float() - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*float64)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*float64)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetFloat(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1091,17 +1845,33 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { complex64(v.Complex()) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*complex64)(unsafe.Pointer(&o. - IntBinds[index])) = val + *(*complex64)(unsafe.Pointer(&o. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetComplex(complex128(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1166,12 +1936,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Bool() - ret = func(env *Env) (Stmt, *Env) { - *(*bool)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetBool(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -1179,60 +1960,115 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := int(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: { val := int8(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: { val := int16(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: { val := int32(v.Int()) - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(int64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: { val := v.Int() - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: @@ -1241,12 +2077,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: @@ -1255,12 +2102,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint8(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1270,12 +2128,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint16(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1285,12 +2154,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uint32(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1298,12 +2178,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Uint() - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1313,12 +2204,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { uintptr(v.Uint()) - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1328,12 +2230,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { float32(v.Float()) - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetFloat(float64(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1341,12 +2254,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { { val := v.Float() - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetFloat(val, + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1356,12 +2280,23 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { complex64(v.Complex()) - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetComplex(complex128(val, + )) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1407,10 +2342,15 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { } c.append(ret) } -func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { +func (c *Comp) varSetExpr(va *Var, e *Expr) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + rt := t.ReflectType() fun := e.Fun var ret func(env *Env) (Stmt, *Env) + intbinds := va.Desc.Class() == IntBind switch upn { case 0: switch t.Kind() { @@ -1419,12 +2359,23 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) bool) - ret = func(env *Env) (Stmt, *Env) { - *(*bool)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetBool(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -1432,12 +2383,23 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int) - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: @@ -1445,12 +2407,23 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int8) - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: @@ -1458,152 +2431,284 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int16) - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: + { fun := fun.(func(*Env) int32) - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: + { fun := fun.(func(*Env) int64) - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetInt(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: + { fun := fun.(func(*Env) uint) - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: + { fun := fun.(func(*Env) uint8) - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: + { fun := fun.(func(*Env) uint16) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: + { fun := fun.(func(*Env) uint32) - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint64: { fun := fun.(func(*Env) uint64) - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uintptr: { fun := fun.(func(*Env) uintptr) - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float32: { fun := fun.(func(*Env) float32) - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetFloat(float64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float64: { fun := fun.(func(*Env) float64) - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetFloat(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex64: { fun := fun.(func(*Env) complex64) - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].SetComplex(complex128(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex128: { fun := fun.(func(*Env) complex128) @@ -1635,14 +2740,24 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { default: { fun := e.AsX1() - - ret = func(env *Env) (Stmt, *Env) { - env. - Binds[index].Set(fun(env).Convert(rt), - ) - - env.IP++ - return env.Code[env.IP], env + if conv := c.Converter(e.Type, t); conv == nil { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].Set(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Binds[index].Set(conv(fun(env), rt), + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1654,13 +2769,25 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) bool) - ret = func(env *Env) (Stmt, *Env) { - *(*bool)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetBool(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -1668,13 +2795,25 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int) - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: @@ -1682,13 +2821,25 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int8) - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: @@ -1696,164 +2847,308 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int16) - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: + { fun := fun.(func(*Env) int32) - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: + { fun := fun.(func(*Env) int64) - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetInt(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: + { fun := fun.(func(*Env) uint) - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: + { fun := fun.(func(*Env) uint8) - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: + { fun := fun.(func(*Env) uint16) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: + { fun := fun.(func(*Env) uint32) - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint64: { fun := fun.(func(*Env) uint64) - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uintptr: { fun := fun.(func(*Env) uintptr) - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float32: { fun := fun.(func(*Env) float32) - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetFloat(float64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float64: { fun := fun.(func(*Env) float64) - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetFloat(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex64: { fun := fun.(func(*Env) complex64) - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].SetComplex(complex128(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex128: { fun := fun.(func(*Env) complex128) @@ -1887,15 +3182,26 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { default: { fun := e.AsX1() - - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - Binds[index].Set(fun(env).Convert(rt), - ) - - env.IP++ - return env.Code[env.IP], env + if conv := c.Converter(e.Type, t); conv == nil { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].Set(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + Binds[index].Set(conv(fun(env), rt), + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -1907,13 +3213,25 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) bool) - ret = func(env *Env) (Stmt, *Env) { - *(*bool)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetBool(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -1921,13 +3239,25 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int) - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: @@ -1935,13 +3265,25 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int8) - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: @@ -1949,164 +3291,308 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int16) - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: + { fun := fun.(func(*Env) int32) - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: + { fun := fun.(func(*Env) int64) - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetInt(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: + { fun := fun.(func(*Env) uint) - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: + { fun := fun.(func(*Env) uint8) - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: + { fun := fun.(func(*Env) uint16) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: + { fun := fun.(func(*Env) uint32) - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint64: { fun := fun.(func(*Env) uint64) - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uintptr: { fun := fun.(func(*Env) uintptr) - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float32: { fun := fun.(func(*Env) float32) - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetFloat(float64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float64: { fun := fun.(func(*Env) float64) - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetFloat(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex64: { fun := fun.(func(*Env) complex64) - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env. + Outer.Outer. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].SetComplex(complex128(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex128: { fun := fun.(func(*Env) complex128) @@ -2140,15 +3626,26 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { default: { fun := e.AsX1() - - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - Binds[index].Set(fun(env).Convert(rt), - ) - - env.IP++ - return env.Code[env.IP], env + if conv := c.Converter(e.Type, t); conv == nil { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].Set(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + Binds[index].Set(conv(fun(env), rt), + ) + + env.IP++ + return env.Code[env.IP], env + } } } @@ -2160,17 +3657,33 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) bool) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*bool)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*bool)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetBool(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -2178,17 +3691,33 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*int)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: @@ -2196,17 +3725,33 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int8) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int8)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*int8)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: @@ -2214,212 +3759,404 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int16) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int16)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*int16)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: + { fun := fun.(func(*Env) int32) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int32)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*int32)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: + { fun := fun.(func(*Env) int64) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*int64)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*int64)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetInt(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: + { fun := fun.(func(*Env) uint) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uint)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*uint)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: + { fun := fun.(func(*Env) uint8) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uint8)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*uint8)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: + { fun := fun.(func(*Env) uint16) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uint16)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*uint16)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: + { fun := fun.(func(*Env) uint32) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uint32)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*uint32)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint64: { fun := fun.(func(*Env) uint64) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o. - IntBinds[index] = fun(env) + o. + IntBinds[index] = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uintptr: { fun := fun.(func(*Env) uintptr) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*uintptr)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*uintptr)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float32: { fun := fun.(func(*Env) float32) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*float32)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*float32)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetFloat(float64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float64: { fun := fun.(func(*Env) float64) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*float64)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*float64)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetFloat(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex64: { fun := fun.(func(*Env) complex64) - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - *(*complex64)(unsafe.Pointer(&o. - IntBinds[index])) = fun(env) + *(*complex64)(unsafe.Pointer(&o. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].SetComplex(complex128(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex128: { fun := fun.(func(*Env) complex128) @@ -2461,19 +4198,34 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { default: { fun := e.AsX1() - - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer + if conv := c.Converter(e.Type, t); conv == nil { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].Set(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + + o. + Binds[index].Set(conv(fun(env), rt), + ) + + env.IP++ + return env.Code[env.IP], env } - - o. - Binds[index].Set(fun(env).Convert(rt), - ) - - env.IP++ - return env.Code[env.IP], env } } @@ -2485,12 +4237,23 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) bool) - ret = func(env *Env) (Stmt, *Env) { - *(*bool)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*bool)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetBool(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int: @@ -2498,12 +4261,23 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int) - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: @@ -2511,12 +4285,23 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int8) - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: @@ -2524,152 +4309,284 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { { fun := fun.(func(*Env) int16) - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: + { fun := fun.(func(*Env) int32) - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(int64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: + { fun := fun.(func(*Env) int64) - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetInt(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: + { fun := fun.(func(*Env) uint) - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: + { fun := fun.(func(*Env) uint8) - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: + { fun := fun.(func(*Env) uint16) - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: + { fun := fun.(func(*Env) uint32) - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uint64: { fun := fun.(func(*Env) uint64) - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Uintptr: { fun := fun.(func(*Env) uintptr) - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetUint(uint64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float32: { fun := fun.(func(*Env) float32) - ret = func(env *Env) (Stmt, *Env) { - *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetFloat(float64(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Float64: { fun := fun.(func(*Env) float64) - ret = func(env *Env) (Stmt, *Env) { - *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*float64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetFloat(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex64: { fun := fun.(func(*Env) complex64) - ret = func(env *Env) (Stmt, *Env) { - *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) = fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*complex64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. + IntBinds[index])) = fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].SetComplex(complex128(fun(env), + )) + + env.IP++ + return env.Code[env.IP], env + } } } - case r.Complex128: { fun := fun.(func(*Env) complex128) @@ -2701,14 +4618,24 @@ func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { default: { fun := e.AsX1() - - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - Binds[index].Set(fun(env).Convert(rt), - ) - - env.IP++ - return env.Code[env.IP], env + if conv := c.Converter(e.Type, t); conv == nil { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].Set(fun(env), + ) + + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + Binds[index].Set(conv(fun(env), rt), + ) + + env.IP++ + return env.Code[env.IP], env + } } } diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_set.gomacro b/vendor/github.com/cosmos72/gomacro/fast/var_set.gomacro index 1be12d0..c4bfdbe 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/var_set.gomacro +++ b/vendor/github.com/cosmos72/gomacro/fast/var_set.gomacro @@ -43,17 +43,17 @@ import ( upn := Eval(depth).(int) var t r.Type = EvalType(typ) - var loop, bind ast.Node + var loop, env, bind, cbind ast.Node if upn >= 0 { - bind = ~'{env} + env = ~'{env} for i := 0; i < upn; i++ { - bind = ~"{~,bind . Outer} + env = ~"{~,env . Outer} } } else if upn == -2 { - bind = ~'{env.ThreadGlobals.FileEnv} + env = ~'{env.ThreadGlobals.FileEnv} } else if upn == -3 { - bind = ~'{env.ThreadGlobals.TopEnv} + env = ~'{env.ThreadGlobals.TopEnv} } else { loop = ~'{ o := env.Outer.Outer.Outer @@ -61,31 +61,65 @@ import ( o = o.Outer } } - bind = ~'o + env = ~'o } if t == nil { - bind = ~"{~,bind . Binds[index] .Set(~,exprv)} + bind = ~"{~,env . Binds[index] .Set(~,exprv)} } else { + typename := &ast.Ident{Name: t.Name()} + bind = ~"{*(*~,typename)(unsafe.Pointer(& ~,env .IntBinds[index])) = ~,expr} switch t.Kind() { + case r.Bool: + cbind = ~"{~,env . Binds[index].SetBool(~,expr)} + case r.Int, r.Int8, r.Int16, r.Int32: + cbind = ~"{~,env . Binds[index].SetInt(int64(~,expr))} + case r.Int64: + cbind = ~"{~,env . Binds[index].SetInt(~,expr)} + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uintptr: + cbind = ~"{~,env . Binds[index].SetUint(uint64(~,expr))} + case r.Uint64: + bind = ~"{~,env . IntBinds[index] = ~,expr} + cbind = ~"{~,env . Binds[index].SetUint(~,expr)} + case r.Float32: + cbind = ~"{~,env . Binds[index].SetFloat(float64(~,expr))} + case r.Float64: + cbind = ~"{~,env . Binds[index].SetFloat(~,expr)} + case r.Complex64: + cbind = ~"{~,env . Binds[index] .SetComplex(complex128(~,expr))} case r.Complex128: - bind = ~"{~,bind . Binds[index] .SetComplex(~,expr)} + bind = ~"{~,env . Binds[index] .SetComplex(~,expr)} case r.String: - bind = ~"{~,bind . Binds[index] .SetString(~,expr)} - case r.Uint64: - bind = ~"{~,bind . IntBinds[index] = ~,expr} - default: - typename := &ast.Ident{Name: t.Name()} - bind = ~"{*(*~,typename)(unsafe.Pointer(& ~,bind .IntBinds[index])) = ~,expr} + bind = ~"{~,env . Binds[index] .SetString(~,expr)} + } + } + + if cbind == nil { + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind + env.IP++ + return env.Code[env.IP], env + } } } return ~"{ - ret = func(env *Env) (Stmt, *Env) { - ~,@loop - ~,bind - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,cbind + env.IP++ + return env.Code[env.IP], env + } } } } @@ -146,13 +180,19 @@ import ( } :macro setplace_expr(depth, typ ast.Node) ast.Node { - ret := fsetplace(depth, typ, ~'{fun(env)}, ~'{fun(env).Convert(rt)}) if EvalType(typ) == nil { + ret0 := fsetplace(depth, typ, ~'{fun(env)}, ~'{fun(env)}) + ret := fsetplace(depth, typ, ~'{fun(env)}, ~'{conv(fun(env), rt)}) return ~"{ fun := e.AsX1() // we need the exact type! - ~,ret + if conv := c.Converter(e.Type, t); conv == nil { + ~,ret0 + } else { + ~,ret + } } } + ret := fsetplace(depth, typ, ~'{fun(env)}, ~'{fun(env).Convert(rt)}) return ~"{ fun := fun.(func(*Env) ~,typ) ~,ret @@ -210,13 +250,17 @@ import ( } // varSetZero compiles 'variable = 0' -func (c *Comp) varSetZero(upn int, index int, t xr.Type) { - zero := xr.Zero(t).Interface() - c.varSetConst(upn, index, t, zero) +func (c *Comp) varSetZero(va *Var) { + zero := xr.Zero(va.Type).Interface() + c.varSetConst(va, zero) } // varSetConst compiles 'name = constant' -func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varSetConst(va *Var, val I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + v := r.ValueOf(val) rt := t.ReflectType() if ValueType(v) == nil { @@ -225,6 +269,7 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { v = v.Convert(rt) } var ret func(env *Env) (Stmt, *Env) + intbinds := va.Desc.Class() == IntBind switch upn { case 0: setplaces_const; 0 case 1: setplaces_const; 1 @@ -236,10 +281,15 @@ func (c *Comp) varSetConst(upn int, index int, t xr.Type, val I) { } // varSetExpr compiles 'name = expression' -func (c *Comp) varSetExpr(upn int, index int, t xr.Type, e *Expr) { +func (c *Comp) varSetExpr(va *Var, e *Expr) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + rt := t.ReflectType() fun := e.Fun var ret func(env *Env) (Stmt, *Env) + intbinds := va.Desc.Class() == IntBind switch upn { case 0: setplaces_expr; 0 case 1: setplaces_expr; 1 diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_set_value.go b/vendor/github.com/cosmos72/gomacro/fast/var_set_value.go index f105f5f..821e29d 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/var_set_value.go +++ b/vendor/github.com/cosmos72/gomacro/fast/var_set_value.go @@ -48,6 +48,8 @@ func (c *Comp) varSetValue(va *Var) func(*Env, r.Value) { c.Errorf("cannot assign to %v %s", desc.Class(), va.Name) return nil case VarBind: + // if current package is compiled, also variables with kind = Bool, Int*, Uint*, Float*, Complex64 will have class == VarBind + index := desc.Index() if index == NoIndex { // assigning a value to _ has no effect at all @@ -57,7 +59,23 @@ func (c *Comp) varSetValue(va *Var) func(*Env, r.Value) { switch upn { case 0: switch t.Kind() { - case r.Complex128: + case r.Bool: + ret = func(env *Env, v r.Value) { + env.Binds[index].SetBool(v.Bool()) + } + case r.Int, r.Int8, r.Int32, r.Int64: + ret = func(env *Env, v r.Value) { + env.Binds[index].SetInt(v.Int()) + } + case r.Uint, r.Uint8, r.Uint32, r.Uint64, r.Uintptr: + ret = func(env *Env, v r.Value) { + env.Binds[index].SetUint(v.Uint()) + } + case r.Float32, r.Float64: + ret = func(env *Env, v r.Value) { + env.Binds[index].SetFloat(v.Float()) + } + case r.Complex64, r.Complex128: ret = func(env *Env, v r.Value) { env.Binds[index].SetComplex(v.Complex()) } @@ -87,7 +105,23 @@ func (c *Comp) varSetValue(va *Var) func(*Env, r.Value) { } case 1: switch t.Kind() { - case r.Complex128: + case r.Bool: + ret = func(env *Env, v r.Value) { + env.Outer.Binds[index].SetBool(v.Bool()) + } + case r.Int, r.Int8, r.Int32, r.Int64: + ret = func(env *Env, v r.Value) { + env.Outer.Binds[index].SetInt(v.Int()) + } + case r.Uint, r.Uint8, r.Uint32, r.Uint64, r.Uintptr: + ret = func(env *Env, v r.Value) { + env.Outer.Binds[index].SetUint(v.Uint()) + } + case r.Float32, r.Float64: + ret = func(env *Env, v r.Value) { + env.Outer.Binds[index].SetFloat(v.Float()) + } + case r.Complex64, r.Complex128: ret = func(env *Env, v r.Value) { env.Outer.Binds[index].SetComplex(v.Complex()) } @@ -117,7 +151,23 @@ func (c *Comp) varSetValue(va *Var) func(*Env, r.Value) { } case 2: switch t.Kind() { - case r.Complex128: + case r.Bool: + ret = func(env *Env, v r.Value) { + env.Outer.Outer.Binds[index].SetBool(v.Bool()) + } + case r.Int, r.Int8, r.Int32, r.Int64: + ret = func(env *Env, v r.Value) { + env.Outer.Outer.Binds[index].SetInt(v.Int()) + } + case r.Uint, r.Uint8, r.Uint32, r.Uint64, r.Uintptr: + ret = func(env *Env, v r.Value) { + env.Outer.Outer.Binds[index].SetUint(v.Uint()) + } + case r.Float32, r.Float64: + ret = func(env *Env, v r.Value) { + env.Outer.Outer.Binds[index].SetFloat(v.Float()) + } + case r.Complex64, r.Complex128: ret = func(env *Env, v r.Value) { env.Outer.Outer.Binds[index].SetComplex(v.Complex()) } @@ -147,7 +197,39 @@ func (c *Comp) varSetValue(va *Var) func(*Env, r.Value) { } default: switch t.Kind() { - case r.Complex128: + case r.Bool: + ret = func(env *Env, v r.Value) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + o.Binds[index].SetBool(v.Bool()) + } + case r.Int, r.Int8, r.Int32, r.Int64: + ret = func(env *Env, v r.Value) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + o.Binds[index].SetInt(v.Int()) + } + case r.Uint, r.Uint8, r.Uint32, r.Uint64, r.Uintptr: + ret = func(env *Env, v r.Value) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + o.Binds[index].SetUint(v.Uint()) + } + case r.Float32, r.Float64: + ret = func(env *Env, v r.Value) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + o.Binds[index].SetFloat(v.Float()) + } + case r.Complex64, r.Complex128: ret = func(env *Env, v r.Value) { o := env.Outer.Outer.Outer for i := 3; i < upn; i++ { diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_shifts.go b/vendor/github.com/cosmos72/gomacro/fast/var_shifts.go index 8cb8daa..e54d04b 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/var_shifts.go +++ b/vendor/github.com/cosmos72/gomacro/fast/var_shifts.go @@ -36,10 +36,14 @@ import ( "unsafe" . "github.com/cosmos72/gomacro/base" - xr "github.com/cosmos72/gomacro/xreflect" ) -func (c *Comp) varShlConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varShlConst(va *Var, val I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + t2 := r.TypeOf(val) if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) @@ -48,7 +52,6 @@ func (c *Comp) varShlConst(upn int, index int, t xr.Type, val I) { if isLiteralNumber(val, 0) { return } - { val := r.ValueOf(val).Uint() var ret Stmt @@ -57,584 +60,1446 @@ func (c *Comp) varShlConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] <<= val + o.IntBinds[index] <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uintptr: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } default: @@ -644,14 +1509,18 @@ func (c *Comp) varShlConst(upn int, index int, t xr.Type, val I) { c.append(ret) } } -func (c *Comp) varShlExpr(upn int, index int, t xr.Type, function I) { +func (c *Comp) varShlExpr(va *Var, function I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + t2 := funTypeOut(function) if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) } fun := asFunUint8(function) - { var ret Stmt switch t.Kind() { @@ -659,584 +1528,1446 @@ func (c *Comp) varShlExpr(upn int, index int, t xr.Type, function I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] <<= fun(env) + o.IntBinds[index] <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uintptr: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) <<= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) <<= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() << + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } default: @@ -1246,7 +2977,12 @@ func (c *Comp) varShlExpr(upn int, index int, t xr.Type, function I) { c.append(ret) } } -func (c *Comp) varShrConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varShrConst(va *Var, val I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + t2 := r.TypeOf(val) if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) @@ -1255,7 +2991,6 @@ func (c *Comp) varShrConst(upn int, index int, t xr.Type, val I) { if isLiteralNumber(val, 0) { return } - { val := r.ValueOf(val).Uint() var ret Stmt @@ -1264,584 +2999,1446 @@ func (c *Comp) varShrConst(upn int, index int, t xr.Type, val I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] >>= val + o.IntBinds[index] >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uintptr: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= val + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= val - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + val, + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } default: @@ -1851,14 +4448,18 @@ func (c *Comp) varShrConst(upn int, index int, t xr.Type, val I) { c.append(ret) } } -func (c *Comp) varShrExpr(upn int, index int, t xr.Type, function I) { +func (c *Comp) varShrExpr(va *Var, function I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + t2 := funTypeOut(function) if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) } fun := asFunUint8(function) - { var ret Stmt switch t.Kind() { @@ -1866,584 +4467,1446 @@ func (c *Comp) varShrExpr(upn int, index int, t xr.Type, function I) { switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int8)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int8)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int16)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int16)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int32)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int32)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Int64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*int64)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*int64)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*int64)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetInt(lhs.Int() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint8: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint8)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint8)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint16: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint16)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint16)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint32: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uint32)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uint32)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uint64: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - env. - IntBinds[index] >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + IntBinds[index] >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer. - IntBinds[index] >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer. + IntBinds[index] >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - env. - Outer.Outer. - IntBinds[index] >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env. + Outer.Outer. + IntBinds[index] >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } - o.IntBinds[index] >>= fun(env) + o.IntBinds[index] >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - env.ThreadGlobals.FileEnv. - IntBinds[index] >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + env.ThreadGlobals.FileEnv. + IntBinds[index] >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } case r.Uintptr: switch upn { case 0: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case 2: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env. - Outer.Outer. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env. + Outer.Outer.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env. + Outer.Outer. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } default: - ret = func(env *Env) (Stmt, *Env) { - o := env.Outer.Outer.Outer - for i := 3; i < upn; i++ { - o = o.Outer - } - *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + *(*uintptr)(unsafe.Pointer(&o.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + o := env.Outer.Outer.Outer + for i := 3; i < upn; i++ { + o = o.Outer + } + { + lhs := + + o.Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } case c.Depth - 1: - ret = func(env *Env) (Stmt, *Env) { - *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv. - IntBinds[index])) >>= fun(env) + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + *(*uintptr)(unsafe.Pointer(&env.ThreadGlobals.FileEnv.IntBinds[index])) >>= fun(env) - env.IP++ - return env.Code[env.IP], env + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + { + lhs := env.ThreadGlobals.FileEnv. + Binds[index] + lhs.SetUint(lhs.Uint() >> + fun(env), + ) + } + + env.IP++ + return env.Code[env.IP], env + } } } default: diff --git a/vendor/github.com/cosmos72/gomacro/fast/var_shifts.gomacro b/vendor/github.com/cosmos72/gomacro/fast/var_shifts.gomacro index 4dd8cde..194c3a8 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/var_shifts.gomacro +++ b/vendor/github.com/cosmos72/gomacro/fast/var_shifts.gomacro @@ -31,7 +31,6 @@ import ( "unsafe" . "github.com/cosmos72/gomacro/base" - xr "github.com/cosmos72/gomacro/xreflect" ) :import ( @@ -125,22 +124,22 @@ import ( return op } -:func fgetplace(depth, typ ast.Node) (/*loop*/ *ast.BlockStmt, /*bind*/ ast.Node) { +:func fgetplace(depth, typ ast.Node) (/*loop*/ *ast.BlockStmt, /*env*/ ast.Node) { // the return type of Eval() and EvalType() varies. better check early. upn := Eval(depth).(int) var t r.Type = EvalType(typ) - var bind ast.Node + var env ast.Node var loop *ast.BlockStmt if upn >= 0 { - bind = ~'{env} + env = ~'{env} for i := 0; i < upn; i++ { - bind = ~"{~,bind . Outer} + env = ~"{~,env . Outer} } } else if upn == -2 { - bind = ~'{env.ThreadGlobals.FileEnv} + env = ~'{env.ThreadGlobals.FileEnv} } else if upn == -3 { - bind = ~'{env.ThreadGlobals.TopEnv} + env = ~'{env.ThreadGlobals.TopEnv} } else { loop = ~'{ o := env.Outer.Outer.Outer @@ -148,43 +147,81 @@ import ( o = o.Outer } } - bind = ~'o + env = ~'o } - return loop, bind + return loop, env } :func fsetplace(opnode, depth, typ, expr, exprv ast.Node) ast.Node { - loop, bind := fgetplace(depth, typ) + loop, env := fgetplace(depth, typ) // the return type of Eval() and EvalType() varies. better check early. var t r.Type = EvalType(typ) op := Eval(opnode).(token.Token) opset := op_to_assign(op) + var bind, cbind ast.Node + + var assign *ast.AssignStmt = ~"{*(*~,typ)(unsafe.Pointer(& ~,env .IntBinds[index])) += ~,expr} + assign.Tok = opset + bind = assign switch t.Kind() { + case r.Int, r.Int8, r.Int16, r.Int32, r.Int64: + var result *ast.BinaryExpr = ~"{lhs.Int() + ~,expr} + result.Op = op + cbind = ~"{lhs := ~,env . Binds[index]; lhs.SetInt(~,result)} + case r.Uint, r.Uint8, r.Uint16, r.Uint32, r.Uint64, r.Uintptr: + var result *ast.BinaryExpr = ~"{lhs.Uint() + ~,expr} + result.Op = op + cbind = ~"{lhs := ~,env . Binds[index]; lhs.SetUint(~,result)} + if t.Kind() == r.Uint64 { + var assign *ast.AssignStmt = ~"{~,env . IntBinds[index] += ~,expr} + assign.Tok = opset + bind = assign + } + case r.Float32, r.Float64: + var result *ast.BinaryExpr = ~"{lhs.Float() + ~,expr} + result.Op = op + cbind = ~"{lhs := ~,env . Binds[index]; lhs.SetFloat(~,result)} + case r.Complex64: + var result *ast.BinaryExpr = ~"{lhs.Complex() + ~,expr} + result.Op = op + cbind = ~"{lhs := ~,env . Binds[index]; lhs.SetComplex(~,result)} case r.Complex128: var result *ast.BinaryExpr = ~"{lhs.Complex() + ~,expr} result.Op = op - bind = ~"{lhs := ~,bind . Binds[index]; lhs.SetComplex(~,result)} + bind = ~"{lhs := ~,env . Binds[index]; lhs.SetComplex(~,result)} case r.String: var result *ast.BinaryExpr = ~"{lhs.String() + ~,expr} result.Op = op - bind = ~"{lhs := ~,bind . Binds[index]; lhs.SetString(~,result)} - case r.Uint64: - var assign *ast.AssignStmt = ~"{~,bind . IntBinds[index] += ~,expr} - assign.Tok = opset - bind = assign - default: - var assign *ast.AssignStmt = ~"{*(*~,typ)(unsafe.Pointer(& ~,bind .IntBinds[index])) += ~,expr} - assign.Tok = opset - bind = assign + bind = ~"{lhs := ~,env . Binds[index]; lhs.SetString(~,result)} + } + + if cbind == nil { + return ~"{ + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } } return ~"{ - ret = func(env *Env) (Stmt, *Env) { - ~,@loop - ~,bind - env.IP++ - return env.Code[env.IP], env + if intbinds { + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,bind + env.IP++ + return env.Code[env.IP], env + } + } else { + ret = func(env *Env) (Stmt, *Env) { + ~,@loop + ~,cbind + env.IP++ + return env.Code[env.IP], env + } } } } @@ -284,7 +321,12 @@ import ( } // varShlConst compiles 'variable <<= constant' -func (c *Comp) varShlConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varShlConst(va *Var, val I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + t2 := r.TypeOf(val) if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) @@ -296,7 +338,12 @@ func (c *Comp) varShlConst(upn int, index int, t xr.Type, val I) { } // varShlExpr compiles 'variable <<= expression' -func (c *Comp) varShlExpr(upn int, index int, t xr.Type, function I) { +func (c *Comp) varShlExpr(va *Var, function I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + t2 := funTypeOut(function) if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHL, t, t2) @@ -306,7 +353,12 @@ func (c *Comp) varShlExpr(upn int, index int, t xr.Type, function I) { } // varShrConst compiles 'variable >>= constant' -func (c *Comp) varShrConst(upn int, index int, t xr.Type, val I) { +func (c *Comp) varShrConst(va *Var, val I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + t2 := r.TypeOf(val) if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) @@ -318,7 +370,12 @@ func (c *Comp) varShrConst(upn int, index int, t xr.Type, val I) { } // varShrExpr compiles 'variable >>= expression' -func (c *Comp) varShrExpr(upn int, index int, t xr.Type, function I) { +func (c *Comp) varShrExpr(va *Var, function I) { + t := va.Type + upn := va.Upn + index := va.Desc.Index() + intbinds := va.Desc.Class() == IntBind + t2 := funTypeOut(function) if t2 == nil || KindToCategory(t2.Kind()) != r.Uint { c.Errorf(`invalid operator %s= between <%v> and <%v>`, token.SHR, t, t2) diff --git a/vendor/github.com/cosmos72/gomacro/fast/x_package.go b/vendor/github.com/cosmos72/gomacro/fast/x_package.go index 45fe1ab..5da87bb 100644 --- a/vendor/github.com/cosmos72/gomacro/fast/x_package.go +++ b/vendor/github.com/cosmos72/gomacro/fast/x_package.go @@ -14,8 +14,6 @@ func init() { imports.Packages["github.com/cosmos72/gomacro/fast"] = imports.Package{ Binds: map[string]r.Value{ "AnyDepth": r.ValueOf(AnyDepth), - "CompileDefaults": r.ValueOf(CompileDefaults), - "CompileKeepUntyped": r.ValueOf(CompileKeepUntyped), "ConstBind": r.ValueOf(ConstBind), "ConstBindDescriptor": r.ValueOf(ConstBindDescriptor), "FileDepth": r.ValueOf(FileDepth), @@ -31,6 +29,9 @@ func init() { "NewEnv4Func": r.ValueOf(NewEnv4Func), "NewThreadGlobals": r.ValueOf(NewThreadGlobals), "NoIndex": r.ValueOf(NoIndex), + "OptDefaults": r.ValueOf(OptDefaults), + "OptKeepUntyped": r.ValueOf(OptKeepUntyped), + "OptIsCompiled": r.ValueOf(OptIsCompiled), "PlaceAddress": r.ValueOf(PlaceAddress), "PlaceSettable": r.ValueOf(PlaceSettable), "PoolCapacity": r.ValueOf(PoolCapacity), @@ -39,8 +40,8 @@ func init() { "SigReturn": r.ValueOf(SigReturn), "TopDepth": r.ValueOf(TopDepth), "VarBind": r.ValueOf(VarBind), - }, - Types: map[string]r.Type{ + }, Types: map[string]r.Type{ + "Assign": r.TypeOf((*Assign)(nil)).Elem(), "Bind": r.TypeOf((*Bind)(nil)).Elem(), "BindClass": r.TypeOf((*BindClass)(nil)).Elem(), "BindDescriptor": r.TypeOf((*BindDescriptor)(nil)).Elem(), @@ -48,7 +49,6 @@ func init() { "Call": r.TypeOf((*Call)(nil)).Elem(), "Code": r.TypeOf((*Code)(nil)).Elem(), "Comp": r.TypeOf((*Comp)(nil)).Elem(), - "CompEnv": r.TypeOf((*Interp)(nil)).Elem(), "CompThreadGlobals": r.TypeOf((*CompThreadGlobals)(nil)).Elem(), "CompileOptions": r.TypeOf((*CompileOptions)(nil)).Elem(), "Env": r.TypeOf((*Env)(nil)).Elem(), @@ -56,8 +56,11 @@ func init() { "FuncInfo": r.TypeOf((*FuncInfo)(nil)).Elem(), "Function": r.TypeOf((*Function)(nil)).Elem(), "I": r.TypeOf((*I)(nil)).Elem(), + "Import": r.TypeOf((*Import)(nil)).Elem(), + "Interp": r.TypeOf((*Interp)(nil)).Elem(), "Lit": r.TypeOf((*Lit)(nil)).Elem(), "LoopInfo": r.TypeOf((*LoopInfo)(nil)).Elem(), + "Macro": r.TypeOf((*Macro)(nil)).Elem(), "NamedType": r.TypeOf((*NamedType)(nil)).Elem(), "Place": r.TypeOf((*Place)(nil)).Elem(), "PlaceOption": r.TypeOf((*PlaceOption)(nil)).Elem(), @@ -68,10 +71,23 @@ func init() { "TypeAssertionError": r.TypeOf((*TypeAssertionError)(nil)).Elem(), "UntypedLit": r.TypeOf((*UntypedLit)(nil)).Elem(), "Var": r.TypeOf((*Var)(nil)).Elem(), - }, - Proxies: map[string]r.Type{ + }, Proxies: map[string]r.Type{ "I": r.TypeOf((*I_github_com_cosmos72_gomacro_fast)(nil)).Elem(), - }} + }, Untypeds: map[string]string{ + "AnyDepth": "int:-1", + "FileDepth": "int:-2", + "PoolCapacity": "int:32", + "TopDepth": "int:-3", + }, Wrappers: map[string][]string{ + "Bind": []string{"ConstTo", "DefaultType", "ReflectValue", "Untyped", "UntypedKind"}, + "Comp": []string{"CollectAst", "CollectNode", "CollectPackageImports", "Copy", "Debugf", "Error", "Errorf", "Fprintf", "Gensym", "GensymEmbedded", "GensymPrivate", "IncLine", "IncLineBytes", "Init", "LookupPackage", "ParseBytes", "Position", "Sprintf", "ToString", "TypeOfBool", "TypeOfBuiltin", "TypeOfComplex128", "TypeOfComplex64", "TypeOfError", "TypeOfFloat32", "TypeOfFloat64", "TypeOfFunction", "TypeOfImport", "TypeOfInt", "TypeOfInt16", "TypeOfInt32", "TypeOfInt64", "TypeOfInt8", "TypeOfInterface", "TypeOfMacro", "TypeOfString", "TypeOfUint", "TypeOfUint16", "TypeOfUint32", "TypeOfUint64", "TypeOfUint8", "TypeOfUintptr", "TypeOfUntypedLit", "WarnExtraValues", "Warnf", "WriteDeclsToFile", "WriteDeclsToStream"}, + "CompThreadGlobals": []string{"CollectAst", "CollectNode", "CollectPackageImports", "Copy", "Debugf", "Error", "Errorf", "Fprintf", "Gensym", "GensymEmbedded", "GensymPrivate", "ImportPackage", "IncLine", "IncLineBytes", "Init", "LookupPackage", "ParseBytes", "Position", "Sprintf", "ToString", "WarnExtraValues", "Warnf", "WriteDeclsToFile", "WriteDeclsToStream"}, + "Expr": []string{"ReflectValue", "Untyped", "UntypedKind"}, + "Place": []string{"Address", "AsPlace", "AsSymbol"}, + "Symbol": []string{"AsSymbol", "Const", "ConstTo", "ConstValue", "DefaultType", "ReflectValue", "String", "Untyped", "UntypedKind"}, + "ThreadGlobals": []string{"CollectAst", "CollectNode", "CollectPackageImports", "Copy", "Debugf", "Error", "Errorf", "Fprintf", "Gensym", "GensymEmbedded", "GensymPrivate", "ImportPackage", "IncLine", "IncLineBytes", "Init", "LookupPackage", "ParseBytes", "Position", "Sprintf", "ToString", "WarnExtraValues", "Warnf", "WriteDeclsToFile", "WriteDeclsToStream"}, + }, + } } // --------------- proxy for github.com/cosmos72/gomacro/fast.I --------------- diff --git a/vendor/github.com/cosmos72/gomacro/parser/x_package.go b/vendor/github.com/cosmos72/gomacro/parser/x_package.go index 230e378..f7e8dd8 100644 --- a/vendor/github.com/cosmos72/gomacro/parser/x_package.go +++ b/vendor/github.com/cosmos72/gomacro/parser/x_package.go @@ -21,10 +21,11 @@ func init() { "ParseComments": r.ValueOf(ParseComments), "SpuriousErrors": r.ValueOf(SpuriousErrors), "Trace": r.ValueOf(Trace), - }, - Types: map[string]r.Type{ + }, Types: map[string]r.Type{ "Mode": r.TypeOf((*Mode)(nil)).Elem(), "Parser": r.TypeOf((*Parser)(nil)).Elem(), + }, Wrappers: map[string][]string{ + "Parser": []string{"Configure", "Init", "Parse"}, }, - Proxies: map[string]r.Type{}} + } } diff --git a/vendor/github.com/cosmos72/gomacro/xreflect/global.go b/vendor/github.com/cosmos72/gomacro/xreflect/global.go index 71e4eb0..9b8a961 100644 --- a/vendor/github.com/cosmos72/gomacro/xreflect/global.go +++ b/vendor/github.com/cosmos72/gomacro/xreflect/global.go @@ -40,6 +40,21 @@ type InterfaceHeader struct { typ Type } +func MakeInterfaceHeader(val reflect.Value, typ Type) InterfaceHeader { + if val.IsValid() && val.CanSet() { + val = val.Convert(val.Type()) // make a copy + } + return InterfaceHeader{val, typ} +} + +func (h InterfaceHeader) Value() reflect.Value { + return h.val +} + +func (h InterfaceHeader) Type() Type { + return h.typ +} + type Method struct { Name string Pkg *Package diff --git a/vendor/github.com/pebbe/zmq4/README.md b/vendor/github.com/pebbe/zmq4/README.md index 74ab34a..74c16e2 100644 --- a/vendor/github.com/pebbe/zmq4/README.md +++ b/vendor/github.com/pebbe/zmq4/README.md @@ -7,6 +7,14 @@ This requires ZeroMQ version 4.0.1 or above. To use CURVE security in versions prior to 4.2, ZeroMQ must be installed with [libsodium](https://github.com/jedisct1/libsodium) enabled. +Partial support for ZeroMQ 4.2 DRAFT is available in the alternate +version of zmq4 `draft`. The API pertaining to this is subject to +change. To use this: + + import ( + zmq "github.com/pebbe/zmq4/draft" + ) + For ZeroMQ version 3, see: http://github.com/pebbe/zmq3 For ZeroMQ version 2, see: http://github.com/pebbe/zmq2 diff --git a/vendor/github.com/pebbe/zmq4/draft/TODO.md b/vendor/github.com/pebbe/zmq4/draft/TODO.md new file mode 100644 index 0000000..56bc7e1 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/TODO.md @@ -0,0 +1,46 @@ +## TODO for ZMQ 4.2 DRAFT + +see: https://github.com/zeromq/libzmq/releases/tag/v4.2.0 + +### New poller mechanism and APIs have been introduced in DRAFT state: + + zmq_poller_new + zmq_poller_destroy + zmq_poller_add + zmq_poller_modify + zmq_poller_remove + zmq_poller_wait + zmq_poller_wait_all + zmq_poller_add_fd + zmq_poller_modify_fd + zmq_poller_remove_fd + +and a new supporting struct typedef + + zmq_poller_event_t + +They support existing socket type, new thread-safe socket types and file +descriptors (cross-platform). + +Documentation will be made available in the future before these APIs are +declared stable. + +**Status in Go**: Not implemented because there is no documentation. + +### New cross-platform timers helper functions have been introduced in DRAFT state: + + zmq_timers_new + zmq_timers_destroy + zmq_timers_add + zmq_timers_cancel + zmq_timers_set_interval + zmq_timers_reset + zmq_timers_timeout + zmq_timers_execute + +and a new supporting callback typedef: + + zmq_timer_fn + +**Status in Go:** Not implemented because there is no documentation. +Do we need this in Go? diff --git a/vendor/github.com/pebbe/zmq4/draft/auth.go b/vendor/github.com/pebbe/zmq4/draft/auth.go new file mode 100644 index 0000000..70fb1d4 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/auth.go @@ -0,0 +1,645 @@ +/* + +This file implements functionality very similar to that of the xauth module in czmq. + +Notable differences in here: + + - domains are supported + - domains are used in AuthAllow and AuthDeny too + - usernames/passwords are read from memory, not from file + - public keys are read from memory, not from file + - an address can be a single IP address, or an IP address and mask in CIDR notation + - additional functions for configuring server or client socket with a single command + +*/ + +package zmq4 + +/* +#include +#include + +#if ZMQ_VERSION_MINOR < 2 +// Version < 4.2.x + +int zmq_curve_public (char *z85_public_key, const char *z85_secret_key) { return 0; } + +#endif // Version < 4.2.x +*/ +import "C" + +import ( + "errors" + "log" + "net" + "strings" + "unsafe" +) + +const CURVE_ALLOW_ANY = "*" + +var ( + auth_handler *Socket + auth_quit *Socket + + auth_init = false + auth_verbose = false + + auth_allow = make(map[string]map[string]bool) + auth_deny = make(map[string]map[string]bool) + auth_allow_net = make(map[string][]*net.IPNet) + auth_deny_net = make(map[string][]*net.IPNet) + + auth_users = make(map[string]map[string]string) + + auth_pubkeys = make(map[string]map[string]bool) + + auth_meta_handler = auth_meta_handler_default +) + +func auth_meta_handler_default(version, request_id, domain, address, identity, mechanism string, credentials ...string) (metadata map[string]string) { + return map[string]string{} +} + +func auth_isIP(addr string) bool { + if net.ParseIP(addr) != nil { + return true + } + if _, _, err := net.ParseCIDR(addr); err == nil { + return true + } + return false +} + +func auth_is_allowed(domain, address string) bool { + for _, d := range []string{domain, "*"} { + if a, ok := auth_allow[d]; ok { + if a[address] { + return true + } + } + } + addr := net.ParseIP(address) + if addr != nil { + for _, d := range []string{domain, "*"} { + if a, ok := auth_allow_net[d]; ok { + for _, m := range a { + if m.Contains(addr) { + return true + } + } + } + } + } + return false +} + +func auth_is_denied(domain, address string) bool { + for _, d := range []string{domain, "*"} { + if a, ok := auth_deny[d]; ok { + if a[address] { + return true + } + } + } + addr := net.ParseIP(address) + if addr != nil { + for _, d := range []string{domain, "*"} { + if a, ok := auth_deny_net[d]; ok { + for _, m := range a { + if m.Contains(addr) { + return true + } + } + } + } + } + return false +} + +func auth_has_allow(domain string) bool { + for _, d := range []string{domain, "*"} { + if a, ok := auth_allow[d]; ok { + if len(a) > 0 || len(auth_allow_net[d]) > 0 { + return true + } + } + } + return false +} + +func auth_has_deny(domain string) bool { + for _, d := range []string{domain, "*"} { + if a, ok := auth_deny[d]; ok { + if len(a) > 0 || len(auth_deny_net[d]) > 0 { + return true + } + } + } + return false +} + +func auth_do_handler() { + for { + + msg, err := auth_handler.RecvMessage(0) + if err != nil { + if auth_verbose { + log.Println("AUTH: Quitting:", err) + } + break + } + + if msg[0] == "QUIT" { + if auth_verbose { + log.Println("AUTH: Quitting: received QUIT message") + } + _, err := auth_handler.SendMessage("QUIT") + if err != nil && auth_verbose { + log.Println("AUTH: Quitting: bouncing QUIT message:", err) + } + break + } + + version := msg[0] + if version != "1.0" { + panic("AUTH: version != 1.0") + } + + request_id := msg[1] + domain := msg[2] + address := msg[3] + identity := msg[4] + mechanism := msg[5] + credentials := msg[6:] + + username := "" + password := "" + client_key := "" + if mechanism == "PLAIN" { + username = msg[6] + password = msg[7] + } else if mechanism == "CURVE" { + s := msg[6] + if len(s) != 32 { + panic("AUTH: len(client_key) != 32") + } + client_key = Z85encode(s) + } + + allowed := false + denied := false + + if auth_has_allow(domain) { + if auth_is_allowed(domain, address) { + allowed = true + if auth_verbose { + log.Printf("AUTH: PASSED (whitelist) domain=%q address=%q\n", domain, address) + } + } else { + denied = true + if auth_verbose { + log.Printf("AUTH: DENIED (not in whitelist) domain=%q address=%q\n", domain, address) + } + } + } else if auth_has_deny(domain) { + if auth_is_denied(domain, address) { + denied = true + if auth_verbose { + log.Printf("AUTH: DENIED (blacklist) domain=%q address=%q\n", domain, address) + } + } else { + allowed = true + if auth_verbose { + log.Printf("AUTH: PASSED (not in blacklist) domain=%q address=%q\n", domain, address) + } + } + } + + // Mechanism-specific checks + if !denied { + if mechanism == "NULL" && !allowed { + // For NULL, we allow if the address wasn't blacklisted + if auth_verbose { + log.Printf("AUTH: ALLOWED (NULL)\n") + } + allowed = true + } else if mechanism == "PLAIN" { + // For PLAIN, even a whitelisted address must authenticate + allowed = authenticate_plain(domain, username, password) + } else if mechanism == "CURVE" { + // For CURVE, even a whitelisted address must authenticate + allowed = authenticate_curve(domain, client_key) + } + } + if allowed { + m := auth_meta_handler(version, request_id, domain, address, identity, mechanism, credentials...) + user_id := "" + if uid, ok := m["User-Id"]; ok { + user_id = uid + delete(m, "User-Id") + } + metadata := make([]byte, 0) + for key, value := range m { + if len(key) < 256 { + metadata = append(metadata, auth_meta_blob(key, value)...) + } + } + auth_handler.SendMessage(version, request_id, "200", "OK", user_id, metadata) + } else { + auth_handler.SendMessage(version, request_id, "400", "NO ACCESS", "", "") + } + } + + err := auth_handler.Close() + if err != nil && auth_verbose { + log.Println("AUTH: Quitting: Close:", err) + } + if auth_verbose { + log.Println("AUTH: Quit") + } +} + +func authenticate_plain(domain, username, password string) bool { + for _, dom := range []string{domain, "*"} { + if m, ok := auth_users[dom]; ok { + if m[username] == password { + if auth_verbose { + log.Printf("AUTH: ALLOWED (PLAIN) domain=%q username=%q password=%q\n", dom, username, password) + } + return true + } + } + } + if auth_verbose { + log.Printf("AUTH: DENIED (PLAIN) domain=%q username=%q password=%q\n", domain, username, password) + } + return false +} + +func authenticate_curve(domain, client_key string) bool { + for _, dom := range []string{domain, "*"} { + if m, ok := auth_pubkeys[dom]; ok { + if m[CURVE_ALLOW_ANY] { + if auth_verbose { + log.Printf("AUTH: ALLOWED (CURVE any client) domain=%q\n", dom) + } + return true + } + if m[client_key] { + if auth_verbose { + log.Printf("AUTH: ALLOWED (CURVE) domain=%q client_key=%q\n", dom, client_key) + } + return true + } + } + } + if auth_verbose { + log.Printf("AUTH: DENIED (CURVE) domain=%q client_key=%q\n", domain, client_key) + } + return false +} + +// Start authentication. +// +// Note that until you add policies, all incoming NULL connections are allowed +// (classic ZeroMQ behaviour), and all PLAIN and CURVE connections are denied. +func AuthStart() (err error) { + if auth_init { + if auth_verbose { + log.Println("AUTH: Already running") + } + return errors.New("Auth is already running") + } + + auth_handler, err = NewSocket(REP) + if err != nil { + return + } + auth_handler.SetLinger(0) + err = auth_handler.Bind("inproc://zeromq.zap.01") + if err != nil { + auth_handler.Close() + return + } + + auth_quit, err = NewSocket(REQ) + if err != nil { + auth_handler.Close() + return + } + auth_quit.SetLinger(0) + err = auth_quit.Connect("inproc://zeromq.zap.01") + if err != nil { + auth_handler.Close() + auth_quit.Close() + return + } + + go auth_do_handler() + + if auth_verbose { + log.Println("AUTH: Starting") + } + + auth_init = true + + return +} + +// Stop authentication. +func AuthStop() { + if !auth_init { + if auth_verbose { + log.Println("AUTH: Not running, can't stop") + } + return + } + if auth_verbose { + log.Println("AUTH: Stopping") + } + _, err := auth_quit.SendMessageDontwait("QUIT") + if err != nil && auth_verbose { + log.Println("AUTH: Stopping: SendMessageDontwait(\"QUIT\"):", err) + } + _, err = auth_quit.RecvMessage(0) + if err != nil && auth_verbose { + log.Println("AUTH: Stopping: RecvMessage:", err) + } + err = auth_quit.Close() + if err != nil && auth_verbose { + log.Println("AUTH: Stopping: Close:", err) + } + if auth_verbose { + log.Println("AUTH: Stopped") + } + + auth_init = false + +} + +// Allow (whitelist) some addresses for a domain. +// +// An address can be a single IP address, or an IP address and mask in CIDR notation. +// +// For NULL, all clients from these addresses will be accepted. +// +// For PLAIN and CURVE, they will be allowed to continue with authentication. +// +// You can call this method multiple times to whitelist multiple IP addresses. +// +// If you whitelist a single address for a domain, any non-whitelisted addresses +// for that domain are treated as blacklisted. +// +// Use domain "*" for all domains. +// +// For backward compatibility: if domain can be parsed as an IP address, it will be +// interpreted as another address, and it and all remaining addresses will be added +// to all domains. +func AuthAllow(domain string, addresses ...string) { + if auth_isIP(domain) { + auth_allow_for_domain("*", domain) + auth_allow_for_domain("*", addresses...) + } else { + auth_allow_for_domain(domain, addresses...) + } +} + +func auth_allow_for_domain(domain string, addresses ...string) { + if _, ok := auth_allow[domain]; !ok { + auth_allow[domain] = make(map[string]bool) + auth_allow_net[domain] = make([]*net.IPNet, 0) + } + for _, address := range addresses { + if _, ipnet, err := net.ParseCIDR(address); err == nil { + auth_allow_net[domain] = append(auth_allow_net[domain], ipnet) + } else if net.ParseIP(address) != nil { + auth_allow[domain][address] = true + } else { + if auth_verbose { + log.Printf("AUTH: Allow for domain %q: %q is not a valid address or network\n", domain, address) + } + } + } +} + +// Deny (blacklist) some addresses for a domain. +// +// An address can be a single IP address, or an IP address and mask in CIDR notation. +// +// For all security mechanisms, this rejects the connection without any further authentication. +// +// Use either a whitelist for a domain, or a blacklist for a domain, not both. +// If you define both a whitelist and a blacklist for a domain, only the whitelist takes effect. +// +// Use domain "*" for all domains. +// +// For backward compatibility: if domain can be parsed as an IP address, it will be +// interpreted as another address, and it and all remaining addresses will be added +// to all domains. +func AuthDeny(domain string, addresses ...string) { + if auth_isIP(domain) { + auth_deny_for_domain("*", domain) + auth_deny_for_domain("*", addresses...) + } else { + auth_deny_for_domain(domain, addresses...) + } +} + +func auth_deny_for_domain(domain string, addresses ...string) { + if _, ok := auth_deny[domain]; !ok { + auth_deny[domain] = make(map[string]bool) + auth_deny_net[domain] = make([]*net.IPNet, 0) + } + for _, address := range addresses { + if _, ipnet, err := net.ParseCIDR(address); err == nil { + auth_deny_net[domain] = append(auth_deny_net[domain], ipnet) + } else if net.ParseIP(address) != nil { + auth_deny[domain][address] = true + } else { + if auth_verbose { + log.Printf("AUTH: Deny for domain %q: %q is not a valid address or network\n", domain, address) + } + } + } +} + +// Add a user for PLAIN authentication for a given domain. +// +// Set `domain` to "*" to apply to all domains. +func AuthPlainAdd(domain, username, password string) { + if _, ok := auth_users[domain]; !ok { + auth_users[domain] = make(map[string]string) + } + auth_users[domain][username] = password +} + +// Remove users from PLAIN authentication for a given domain. +func AuthPlainRemove(domain string, usernames ...string) { + if u, ok := auth_users[domain]; ok { + for _, username := range usernames { + delete(u, username) + } + } +} + +// Remove all users from PLAIN authentication for a given domain. +func AuthPlainRemoveAll(domain string) { + delete(auth_users, domain) +} + +// Add public user keys for CURVE authentication for a given domain. +// +// To cover all domains, use "*". +// +// Public keys are in Z85 printable text format. +// +// To allow all client keys without checking, specify CURVE_ALLOW_ANY for the key. +func AuthCurveAdd(domain string, pubkeys ...string) { + if _, ok := auth_pubkeys[domain]; !ok { + auth_pubkeys[domain] = make(map[string]bool) + } + for _, key := range pubkeys { + auth_pubkeys[domain][key] = true + } +} + +// Remove user keys from CURVE authentication for a given domain. +func AuthCurveRemove(domain string, pubkeys ...string) { + if p, ok := auth_pubkeys[domain]; ok { + for _, pubkey := range pubkeys { + delete(p, pubkey) + } + } +} + +// Remove all user keys from CURVE authentication for a given domain. +func AuthCurveRemoveAll(domain string) { + delete(auth_pubkeys, domain) +} + +// Enable verbose tracing of commands and activity. +func AuthSetVerbose(verbose bool) { + auth_verbose = verbose +} + +/* +This function sets the metadata handler that is called by the ZAP +handler to retrieve key/value properties that should be set on reply +messages in case of a status code "200" (succes). + +Default properties are `Socket-Type`, which is already set, and +`Identity` and `User-Id` that are empty by default. The last two can be +set, and more properties can be added. + +The `User-Id` property is used for the `user id` frame of the reply +message. All other properties are stored in the `metadata` frame of the +reply message. + +The default handler returns an empty map. + +For the meaning of the handler arguments, and other details, see: +http://rfc.zeromq.org/spec:27#toc10 +*/ +func AuthSetMetadataHandler( + handler func( + version, request_id, domain, address, identity, mechanism string, credentials ...string) (metadata map[string]string)) { + auth_meta_handler = handler +} + +/* +This encodes a key/value pair into the format used by a ZAP handler. + +Returns an error if key is more then 255 characters long. +*/ +func AuthMetaBlob(key, value string) (blob []byte, err error) { + if len(key) > 255 { + return []byte{}, errors.New("Key too long") + } + return auth_meta_blob(key, value), nil +} + +func auth_meta_blob(name, value string) []byte { + l1 := len(name) + l2 := len(value) + b := make([]byte, l1+l2+5) + b[0] = byte(l1) + b[l1+1] = byte(l2 >> 24 & 255) + b[l1+2] = byte(l2 >> 16 & 255) + b[l1+3] = byte(l2 >> 8 & 255) + b[l1+4] = byte(l2 & 255) + copy(b[1:], []byte(name)) + copy(b[5+l1:], []byte(value)) + return b +} + +//. Additional functions for configuring server or client socket with a single command + +// Set NULL server role. +func (server *Socket) ServerAuthNull(domain string) error { + err := server.SetPlainServer(0) + if err == nil { + err = server.SetZapDomain(domain) + } + return err +} + +// Set PLAIN server role. +func (server *Socket) ServerAuthPlain(domain string) error { + err := server.SetPlainServer(1) + if err == nil { + err = server.SetZapDomain(domain) + } + return err +} + +// Set CURVE server role. +func (server *Socket) ServerAuthCurve(domain, secret_key string) error { + err := server.SetCurveServer(1) + if err == nil { + err = server.SetCurveSecretkey(secret_key) + } + if err == nil { + err = server.SetZapDomain(domain) + } + return err +} + +// Set PLAIN client role. +func (client *Socket) ClientAuthPlain(username, password string) error { + err := client.SetPlainUsername(username) + if err == nil { + err = client.SetPlainPassword(password) + } + return err +} + +// Set CURVE client role. +func (client *Socket) ClientAuthCurve(server_public_key, client_public_key, client_secret_key string) error { + err := client.SetCurveServerkey(server_public_key) + if err == nil { + err = client.SetCurvePublickey(client_public_key) + } + if err == nil { + client.SetCurveSecretkey(client_secret_key) + } + return err +} + +// Helper function to derive z85 public key from secret key +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +func AuthCurvePublic(z85SecretKey string) (z85PublicKey string, err error) { + if minor < 2 { + return "", ErrorNotImplemented42 + } + secret := C.CString(z85SecretKey) + defer C.free(unsafe.Pointer(secret)) + public := C.CString(strings.Repeat(" ", 41)) + defer C.free(unsafe.Pointer(public)) + if i, err := C.zmq_curve_public(public, secret); int(i) != 0 { + return "", errget(err) + } + z85PublicKey = C.GoString(public) + return z85PublicKey, nil +} diff --git a/vendor/github.com/pebbe/zmq4/draft/auth_test.go b/vendor/github.com/pebbe/zmq4/draft/auth_test.go new file mode 100644 index 0000000..bf94180 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/auth_test.go @@ -0,0 +1,144 @@ +package zmq4_test + +import ( + zmq "github.com/pebbe/zmq4/draft" + + "testing" +) + +func TestAuthCurvePublic(t *testing.T) { + if _, minor, _ := zmq.Version(); minor < 2 { + t.Skip("CurvePublic not available in ZeroMQ versions prior to 4.2.0") + } + expected := "Yne@$w-vo= 1 && !zmq.HasCurve() { + t.Skip("Curve not available") + } + + type Meta struct { + key string + value string + ok bool + } + + zmq.AuthSetVerbose(false) + + // Start authentication engine + err := zmq.AuthStart() + if err != nil { + t.Fatal("AuthStart:", err) + } + defer zmq.AuthStop() + + zmq.AuthSetMetadataHandler( + func(version, request_id, domain, address, identity, mechanism string, credentials ...string) (metadata map[string]string) { + return map[string]string{ + "Identity": identity, + "User-Id": "anonymous", + "Hello": "World!", + "Foo": "Bar", + } + }) + + zmq.AuthAllow("domain1", "127.0.0.1") + + // We need two certificates, one for the client and one for + // the server. The client must know the server's public key + // to make a CURVE connection. + client_public, client_secret, err := zmq.NewCurveKeypair() + if err != nil { + t.Fatal("NewCurveKeypair:", err) + } + server_public, server_secret, err := zmq.NewCurveKeypair() + if err != nil { + t.Fatal("NewCurveKeypair:", err) + } + + // Tell authenticator to use this public client key + zmq.AuthCurveAdd("domain1", client_public) + + // Create and bind server socket + server, err := zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer func() { + server.SetLinger(0) + server.Close() + }() + server.SetIdentity("Server1") + server.ServerAuthCurve("domain1", server_secret) + err = server.Bind("tcp://*:9000") + if err != nil { + t.Fatal("server.Bind:", err) + } + + // Create and connect client socket + client, err := zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer func() { + client.SetLinger(0) + client.Close() + }() + server.SetIdentity("Client1") + client.ClientAuthCurve(server_public, client_public, client_secret) + err = client.Connect("tcp://127.0.0.1:9000") + if err != nil { + t.Fatal("client.Connect:", err) + } + + // Send a message from client to server + msg := []string{"Greetings", "Earthlings!"} + _, err = client.SendMessage(msg[0], msg[1]) + if err != nil { + t.Fatal("client.SendMessage:", err) + } + + // Receive message and metadata on the server + tests := []Meta{ + {"Identity", "Server1", true}, + {"User-Id", "anonymous", true}, + {"Socket-Type", "DEALER", true}, + {"Hello", "World!", true}, + {"Foo", "Bar", true}, + {"Fuz", "", false}, + } + keys := make([]string, len(tests)) + for i, test := range tests { + keys[i] = test.key + } + message, metadata, err := server.RecvMessageWithMetadata(0, keys...) + if err != nil { + t.Fatal("server.RecvMessageWithMetadata:", err) + } + if !arrayEqual(message, msg) { + t.Errorf("Received message was %q, expected %q", message, msg) + } + if _, minor, _ := zmq.Version(); minor < 1 { + t.Log("Metadata not avalable in ZeroMQ versions prior to 4.1.0") + } else { + for _, test := range tests { + value, ok := metadata[test.key] + if value != test.value || ok != test.ok { + t.Errorf("Metadata %s, expected %q %v, got %q %v", test.key, test.value, test.ok, value, ok) + } + } + } +} diff --git a/vendor/github.com/pebbe/zmq4/draft/ctxoptions_unix.go b/vendor/github.com/pebbe/zmq4/draft/ctxoptions_unix.go new file mode 100644 index 0000000..c980cd1 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/ctxoptions_unix.go @@ -0,0 +1,56 @@ +// +build !windows + +package zmq4 + +/* +#include +#include "zmq4.h" +*/ +import "C" + +/* +Sets the scheduling policy for internal context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func (ctx *Context) SetThreadSchedPolicy(n int) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return setOption(ctx, C.ZMQ_THREAD_SCHED_POLICY, n) +} + +/* +Sets scheduling priority for internal context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option depend on chosen scheduling policy. +Details can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func (ctx *Context) SetThreadPriority(n int) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return setOption(ctx, C.ZMQ_THREAD_PRIORITY, n) +} diff --git a/vendor/github.com/pebbe/zmq4/draft/ctxoptions_windows.go b/vendor/github.com/pebbe/zmq4/draft/ctxoptions_windows.go new file mode 100644 index 0000000..b976013 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/ctxoptions_windows.go @@ -0,0 +1,44 @@ +// +build windows + +package zmq4 + +/* +Sets the scheduling policy for internal context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func (ctx *Context) SetThreadSchedPolicy(n int) error { + return ErrorNotImplementedWindows +} + +/* +Sets scheduling priority for internal context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option depend on chosen scheduling policy. +Details can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func (ctx *Context) SetThreadPriority(n int) error { + return ErrorNotImplementedWindows +} diff --git a/vendor/github.com/pebbe/zmq4/draft/doc.go b/vendor/github.com/pebbe/zmq4/draft/doc.go new file mode 100644 index 0000000..0732a74 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/doc.go @@ -0,0 +1,23 @@ +/* +A Go interface to ZeroMQ (zmq, 0mq) version 4. + +This includes partial support for ZeroMQ 4.2 DRAFT. The API pertaining +to this support is subject to change. + +For ZeroMQ version 3, see: http://github.com/pebbe/zmq3 + +For ZeroMQ version 2, see: http://github.com/pebbe/zmq2 + +http://www.zeromq.org/ + +See also the wiki: https://github.com/pebbe/zmq4/wiki + +A note on the use of a context: + +This package provides a default context. This is what will be used by +the functions without a context receiver, that create a socket or +manipulate the context. Package developers that import this package +should probably not use the default context with its associated +functions, but create their own context(s). See: type Context. +*/ +package zmq4 diff --git a/vendor/github.com/pebbe/zmq4/draft/dummy.c b/vendor/github.com/pebbe/zmq4/draft/dummy.c new file mode 100644 index 0000000..0fca94d --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/dummy.c @@ -0,0 +1,5 @@ +/* + +You need CGO_ENABLED=1 to build this package + +*/ diff --git a/vendor/github.com/pebbe/zmq4/draft/errors.go b/vendor/github.com/pebbe/zmq4/draft/errors.go new file mode 100644 index 0000000..48dcdc3 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/errors.go @@ -0,0 +1,92 @@ +package zmq4 + +/* +#include +*/ +import "C" + +import ( + "syscall" +) + +// An Errno is an unsigned number describing an error condition as returned by a call to ZeroMQ. +// It implements the error interface. +// The number is either a standard system error, or an error defined by the C library of ZeroMQ. +type Errno uintptr + +const ( + // Error conditions defined by the C library of ZeroMQ. + + // On Windows platform some of the standard POSIX errnos are not defined. + EADDRINUSE = Errno(C.EADDRINUSE) + EADDRNOTAVAIL = Errno(C.EADDRNOTAVAIL) + EAFNOSUPPORT = Errno(C.EAFNOSUPPORT) + ECONNABORTED = Errno(C.ECONNABORTED) + ECONNREFUSED = Errno(C.ECONNREFUSED) + ECONNRESET = Errno(C.ECONNRESET) + EHOSTUNREACH = Errno(C.EHOSTUNREACH) + EINPROGRESS = Errno(C.EINPROGRESS) + EMSGSIZE = Errno(C.EMSGSIZE) + ENETDOWN = Errno(C.ENETDOWN) + ENETRESET = Errno(C.ENETRESET) + ENETUNREACH = Errno(C.ENETUNREACH) + ENOBUFS = Errno(C.ENOBUFS) + ENOTCONN = Errno(C.ENOTCONN) + ENOTSOCK = Errno(C.ENOTSOCK) + ENOTSUP = Errno(C.ENOTSUP) + EPROTONOSUPPORT = Errno(C.EPROTONOSUPPORT) + ETIMEDOUT = Errno(C.ETIMEDOUT) + + // Native 0MQ error codes. + EFSM = Errno(C.EFSM) + EMTHREAD = Errno(C.EMTHREAD) + ENOCOMPATPROTO = Errno(C.ENOCOMPATPROTO) + ETERM = Errno(C.ETERM) +) + +func errget(err error) error { + eno, ok := err.(syscall.Errno) + if ok { + return Errno(eno) + } + return err +} + +// Return Errno as string. +func (errno Errno) Error() string { + if errno >= C.ZMQ_HAUSNUMERO { + return C.GoString(C.zmq_strerror(C.int(errno))) + } + return syscall.Errno(errno).Error() +} + +/* +Convert error to Errno. + +Example usage: + + switch AsErrno(err) { + + case zmq.Errno(syscall.EINTR): + // standard system error + + // call was interrupted + + case zmq.ETERM: + // error defined by ZeroMQ + + // context was terminated + + } + +See also: examples/interrupt.go +*/ +func AsErrno(err error) Errno { + if eno, ok := err.(Errno); ok { + return eno + } + if eno, ok := err.(syscall.Errno); ok { + return Errno(eno) + } + return Errno(0) +} diff --git a/vendor/github.com/pebbe/zmq4/draft/polling.go b/vendor/github.com/pebbe/zmq4/draft/polling.go new file mode 100644 index 0000000..6e20a55 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/polling.go @@ -0,0 +1,187 @@ +package zmq4 + +/* +#include +*/ +import "C" + +import ( + "fmt" + "time" +) + +// Return type for (*Poller)Poll +type Polled struct { + Socket *Socket // socket with matched event(s) + Events State // actual matched event(s) +} + +type Poller struct { + items []C.zmq_pollitem_t + socks []*Socket +} + +// Create a new Poller +func NewPoller() *Poller { + return &Poller{ + items: make([]C.zmq_pollitem_t, 0), + socks: make([]*Socket, 0), + } +} + +// Add items to the poller +// +// Events is a bitwise OR of zmq.POLLIN and zmq.POLLOUT +// +// Returns the id of the item, which can be used as a handle to +// (*Poller)Update and as an index into the result of (*Poller)PollAll +func (p *Poller) Add(soc *Socket, events State) int { + var item C.zmq_pollitem_t + item.socket = soc.soc + item.fd = 0 + item.events = C.short(events) + p.items = append(p.items, item) + p.socks = append(p.socks, soc) + return len(p.items) - 1 +} + +// Update the events mask of a socket in the poller +// +// Replaces the Poller's bitmask for the specified id with the events parameter passed +// +// Returns the previous value, or ErrorNoSocket if the id was out of range +func (p *Poller) Update(id int, events State) (previous State, err error) { + if id >= 0 && id < len(p.items) { + previous = State(p.items[id].events) + p.items[id].events = C.short(events) + return previous, nil + } + return 0, ErrorNoSocket +} + +// Update the events mask of a socket in the poller +// +// Replaces the Poller's bitmask for the specified socket with the events parameter passed +// +// Returns the previous value, or ErrorNoSocket if the socket didn't match +func (p *Poller) UpdateBySocket(soc *Socket, events State) (previous State, err error) { + for id, s := range p.socks { + if s == soc { + previous = State(p.items[id].events) + p.items[id].events = C.short(events) + return previous, nil + } + } + return 0, ErrorNoSocket +} + +// Remove a socket from the poller +// +// Returns ErrorNoSocket if the id was out of range +func (p *Poller) Remove(id int) error { + if id >= 0 && id < len(p.items) { + if id == len(p.items)-1 { + p.items = p.items[:id] + p.socks = p.socks[:id] + } else { + p.items = append(p.items[:id], p.items[id+1:]...) + p.socks = append(p.socks[:id], p.socks[id+1:]...) + } + return nil + } + return ErrorNoSocket +} + +// Remove a socket from the poller +// +// Returns ErrorNoSocket if the socket didn't match +func (p *Poller) RemoveBySocket(soc *Socket) error { + for id, s := range p.socks { + if s == soc { + return p.Remove(id) + } + } + return ErrorNoSocket +} + +/* +Input/output multiplexing + +If timeout < 0, wait forever until a matching event is detected + +Only sockets with matching socket events are returned in the list. + +Example: + + poller := zmq.NewPoller() + poller.Add(socket0, zmq.POLLIN) + poller.Add(socket1, zmq.POLLIN) + // Process messages from both sockets + for { + sockets, _ := poller.Poll(-1) + for _, socket := range sockets { + switch s := socket.Socket; s { + case socket0: + msg, _ := s.Recv(0) + // Process msg + case socket1: + msg, _ := s.Recv(0) + // Process msg + } + } + } +*/ +func (p *Poller) Poll(timeout time.Duration) ([]Polled, error) { + return p.poll(timeout, false) +} + +/* +This is like (*Poller)Poll, but it returns a list of all sockets, +in the same order as they were added to the poller, +not just those sockets that had an event. + +For each socket in the list, you have to check the Events field +to see if there was actually an event. + +When error is not nil, the return list contains no sockets. +*/ +func (p *Poller) PollAll(timeout time.Duration) ([]Polled, error) { + return p.poll(timeout, true) +} + +func (p *Poller) poll(timeout time.Duration, all bool) ([]Polled, error) { + lst := make([]Polled, 0, len(p.items)) + + for _, soc := range p.socks { + if !soc.opened { + return lst, ErrorSocketClosed + } + } + + t := timeout + if t > 0 { + t = t / time.Millisecond + } + if t < 0 { + t = -1 + } + rv, err := C.zmq_poll(&p.items[0], C.int(len(p.items)), C.long(t)) + if rv < 0 { + return lst, errget(err) + } + for i, it := range p.items { + if all || it.events&it.revents != 0 { + lst = append(lst, Polled{p.socks[i], State(it.revents)}) + } + } + return lst, nil +} + +// Poller as string. +func (p *Poller) String() string { + str := make([]string, 0) + for i, poll := range p.items { + str = append(str, fmt.Sprintf("%v%v", p.socks[i], State(poll.events))) + } + return fmt.Sprint("Poller", str) +} diff --git a/vendor/github.com/pebbe/zmq4/draft/reactor.go b/vendor/github.com/pebbe/zmq4/draft/reactor.go new file mode 100644 index 0000000..701dc91 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/reactor.go @@ -0,0 +1,194 @@ +package zmq4 + +import ( + "errors" + "fmt" + "time" +) + +type reactor_socket struct { + e State + f func(State) error +} + +type reactor_channel struct { + ch <-chan interface{} + f func(interface{}) error + limit int +} + +type Reactor struct { + sockets map[*Socket]*reactor_socket + channels map[uint64]*reactor_channel + p *Poller + idx uint64 + remove []uint64 + verbose bool +} + +/* +Create a reactor to mix the handling of sockets and channels (timers or other channels). + +Example: + + reactor := zmq.NewReactor() + reactor.AddSocket(socket1, zmq.POLLIN, socket1_handler) + reactor.AddSocket(socket2, zmq.POLLIN, socket2_handler) + reactor.AddChannelTime(time.Tick(time.Second), 1, ticker_handler) + reactor.Run(time.Second) +*/ +func NewReactor() *Reactor { + r := &Reactor{ + sockets: make(map[*Socket]*reactor_socket), + channels: make(map[uint64]*reactor_channel), + p: NewPoller(), + remove: make([]uint64, 0), + } + return r +} + +// Add socket handler to the reactor. +// +// You can have only one handler per socket. Adding a second one will remove the first. +// +// The handler receives the socket state as an argument: POLLIN, POLLOUT, or both. +func (r *Reactor) AddSocket(soc *Socket, events State, handler func(State) error) { + r.RemoveSocket(soc) + r.sockets[soc] = &reactor_socket{e: events, f: handler} + r.p.Add(soc, events) +} + +// Remove a socket handler from the reactor. +func (r *Reactor) RemoveSocket(soc *Socket) { + if _, ok := r.sockets[soc]; ok { + delete(r.sockets, soc) + // rebuild poller + r.p = NewPoller() + for s, props := range r.sockets { + r.p.Add(s, props.e) + } + } +} + +// Add channel handler to the reactor. +// +// Returns id of added handler, that can be used later to remove it. +// +// If limit is positive, at most this many items will be handled in each run through the main loop, +// otherwise it will process as many items as possible. +// +// The handler function receives the value received from the channel. +func (r *Reactor) AddChannel(ch <-chan interface{}, limit int, handler func(interface{}) error) (id uint64) { + r.idx++ + id = r.idx + r.channels[id] = &reactor_channel{ch: ch, f: handler, limit: limit} + return +} + +// This function wraps AddChannel, using a channel of type time.Time instead of type interface{}. +func (r *Reactor) AddChannelTime(ch <-chan time.Time, limit int, handler func(interface{}) error) (id uint64) { + ch2 := make(chan interface{}) + go func() { + for { + a, ok := <-ch + if !ok { + close(ch2) + break + } + ch2 <- a + } + }() + return r.AddChannel(ch2, limit, handler) +} + +// Remove a channel from the reactor. +// +// Closed channels are removed automatically. +func (r *Reactor) RemoveChannel(id uint64) { + r.remove = append(r.remove, id) +} + +func (r *Reactor) SetVerbose(verbose bool) { + r.verbose = verbose +} + +// Run the reactor. +// +// The interval determines the time-out on the polling of sockets. +// Interval must be positive if there are channels. +// If there are no channels, you can set interval to -1. +// +// The run alternates between polling/handling sockets (using the interval as timeout), +// and reading/handling channels. The reading of channels is without time-out: if there +// is no activity on any channel, the run continues to poll sockets immediately. +// +// The run exits when any handler returns an error, returning that same error. +func (r *Reactor) Run(interval time.Duration) (err error) { + for { + + // process requests to remove channels + for _, id := range r.remove { + delete(r.channels, id) + } + r.remove = r.remove[0:0] + + CHANNELS: + for id, ch := range r.channels { + limit := ch.limit + for { + select { + case val, ok := <-ch.ch: + if !ok { + if r.verbose { + fmt.Printf("Reactor(%p) removing closed channel %d\n", r, id) + } + r.RemoveChannel(id) + continue CHANNELS + } + if r.verbose { + fmt.Printf("Reactor(%p) channel %d: %q\n", r, id, val) + } + err = ch.f(val) + if err != nil { + return + } + if ch.limit > 0 { + limit-- + if limit == 0 { + continue CHANNELS + } + } + default: + continue CHANNELS + } + } + } + + if len(r.channels) > 0 && interval < 0 { + return errors.New("There are channels, but polling time-out is infinite") + } + + if len(r.sockets) == 0 { + if len(r.channels) == 0 { + return errors.New("No sockets to poll, no channels to read") + } + time.Sleep(interval) + continue + } + + polled, e := r.p.Poll(interval) + if e != nil { + return e + } + for _, item := range polled { + if r.verbose { + fmt.Printf("Reactor(%p) %v\n", r, item) + } + err = r.sockets[item.Socket].f(item.Events) + if err != nil { + return + } + } + } + return +} diff --git a/vendor/github.com/pebbe/zmq4/draft/socketevent_test.go b/vendor/github.com/pebbe/zmq4/draft/socketevent_test.go new file mode 100644 index 0000000..7af51ec --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/socketevent_test.go @@ -0,0 +1,98 @@ +package zmq4_test + +import ( + zmq "github.com/pebbe/zmq4/draft" + + "fmt" + "testing" + "time" +) + +func rep_socket_monitor(addr string, chMsg chan<- string) { + + defer close(chMsg) + + s, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + chMsg <- fmt.Sprint("NewSocket:", err) + return + } + defer func() { + s.SetLinger(0) + s.Close() + }() + + err = s.Connect(addr) + if err != nil { + chMsg <- fmt.Sprint("s.Connect:", err) + return + } + + for { + a, b, _, err := s.RecvEvent(0) + if err != nil { + chMsg <- fmt.Sprint("s.RecvEvent:", err) + return + } + chMsg <- fmt.Sprint(a, " ", b) + if a == zmq.EVENT_CLOSED { + break + } + } + chMsg <- "Done" +} + +func TestSocketEvent(t *testing.T) { + + var rep *zmq.Socket + defer func() { + if rep != nil { + rep.SetLinger(0) + rep.Close() + } + }() + + // REP socket + rep, err := zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + + // REP socket monitor, all events + err = rep.Monitor("inproc://monitor.rep", zmq.EVENT_ALL) + if err != nil { + t.Fatal("rep.Monitor:", err) + } + chMsg := make(chan string, 10) + go rep_socket_monitor("inproc://monitor.rep", chMsg) + time.Sleep(time.Second) + + // Generate an event + err = rep.Bind("tcp://*:9689") + if err != nil { + t.Fatal("rep.Bind:", err) + } + + rep.Close() + rep = nil + + expect := []string{ + "EVENT_LISTENING tcp://0.0.0.0:9689", + "EVENT_CLOSED tcp://0.0.0.0:9689", + "Done", + } + i := 0 + for msg := range chMsg { + if i < len(expect) { + if msg != expect[i] { + t.Errorf("Expected message %q, got %q", expect[i], msg) + } + i++ + } else { + t.Error("Unexpected message: %q", msg) + } + } + for ; i < len(expect); i++ { + t.Errorf("Expected message %q, got nothing", expect[i]) + } +} diff --git a/vendor/github.com/pebbe/zmq4/draft/socketget.go b/vendor/github.com/pebbe/zmq4/draft/socketget.go new file mode 100644 index 0000000..cf28751 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/socketget.go @@ -0,0 +1,648 @@ +package zmq4 + +/* +#include +#include +#include "zmq4.h" +*/ +import "C" + +import ( + "strings" + "time" + "unsafe" +) + +func (soc *Socket) getString(opt C.int, bufsize int) (string, error) { + if !soc.opened { + return "", ErrorSocketClosed + } + value := make([]byte, bufsize) + size := C.size_t(bufsize) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value[0]), &size); i != 0 { + return "", errget(err) + } + return strings.TrimRight(string(value[:int(size)]), "\x00"), nil +} + +func (soc *Socket) getStringRaw(opt C.int, bufsize int) (string, error) { + if !soc.opened { + return "", ErrorSocketClosed + } + value := make([]byte, bufsize) + size := C.size_t(bufsize) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value[0]), &size); i != 0 { + return "", errget(err) + } + return string(value[:int(size)]), nil +} + +func (soc *Socket) getInt(opt C.int) (int, error) { + if !soc.opened { + return 0, ErrorSocketClosed + } + value := C.int(0) + size := C.size_t(unsafe.Sizeof(value)) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value), &size); i != 0 { + return 0, errget(err) + } + return int(value), nil +} + +func (soc *Socket) getInt64(opt C.int) (int64, error) { + if !soc.opened { + return 0, ErrorSocketClosed + } + value := C.int64_t(0) + size := C.size_t(unsafe.Sizeof(value)) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value), &size); i != 0 { + return 0, errget(err) + } + return int64(value), nil +} + +func (soc *Socket) getUInt64(opt C.int) (uint64, error) { + if !soc.opened { + return 0, ErrorSocketClosed + } + value := C.uint64_t(0) + size := C.size_t(unsafe.Sizeof(value)) + if i, err := C.zmq_getsockopt(soc.soc, opt, unsafe.Pointer(&value), &size); i != 0 { + return 0, errget(err) + } + return uint64(value), nil +} + +// ZMQ_TYPE: Retrieve socket type +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc43 +func (soc *Socket) GetType() (Type, error) { + v, err := soc.getInt(C.ZMQ_TYPE) + return Type(v), err +} + +// ZMQ_RCVMORE: More message data parts to follow +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc30 +func (soc *Socket) GetRcvmore() (bool, error) { + v, err := soc.getInt(C.ZMQ_RCVMORE) + return v != 0, err +} + +// ZMQ_SNDHWM: Retrieves high water mark for outbound messages +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc36 +func (soc *Socket) GetSndhwm() (int, error) { + return soc.getInt(C.ZMQ_SNDHWM) +} + +// ZMQ_RCVHWM: Retrieve high water mark for inbound messages +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc29 +func (soc *Socket) GetRcvhwm() (int, error) { + return soc.getInt(C.ZMQ_RCVHWM) +} + +// ZMQ_AFFINITY: Retrieve I/O thread affinity +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc3 +func (soc *Socket) GetAffinity() (uint64, error) { + return soc.getUInt64(C.ZMQ_AFFINITY) +} + +// ZMQ_IDENTITY: Retrieve socket identity +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc15 +func (soc *Socket) GetIdentity() (string, error) { + return soc.getString(C.ZMQ_IDENTITY, 256) +} + +// ZMQ_RATE: Retrieve multicast data rate +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc27 +func (soc *Socket) GetRate() (int, error) { + return soc.getInt(C.ZMQ_RATE) +} + +// ZMQ_RECOVERY_IVL: Get multicast recovery interval +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc34 +func (soc *Socket) GetRecoveryIvl() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_RECOVERY_IVL) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_SNDBUF: Retrieve kernel transmit buffer size +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc35 +func (soc *Socket) GetSndbuf() (int, error) { + return soc.getInt(C.ZMQ_SNDBUF) +} + +// ZMQ_RCVBUF: Retrieve kernel receive buffer size +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc28 +func (soc *Socket) GetRcvbuf() (int, error) { + return soc.getInt(C.ZMQ_RCVBUF) +} + +// ZMQ_LINGER: Retrieve linger period for socket shutdown +// +// Returns time.Duration(-1) for infinite +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc20 +func (soc *Socket) GetLinger() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_LINGER) + if v < 0 { + return time.Duration(-1), err + } + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_RECONNECT_IVL: Retrieve reconnection interval +// +// Returns time.Duration(-1) for no reconnection +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc32 +func (soc *Socket) GetReconnectIvl() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_RECONNECT_IVL) + if v < 0 { + return time.Duration(-1), err + } + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_RECONNECT_IVL_MAX: Retrieve maximum reconnection interval +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc33 +func (soc *Socket) GetReconnectIvlMax() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_RECONNECT_IVL_MAX) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_BACKLOG: Retrieve maximum length of the queue of outstanding connections +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc4 +func (soc *Socket) GetBacklog() (int, error) { + return soc.getInt(C.ZMQ_BACKLOG) +} + +// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc21 +func (soc *Socket) GetMaxmsgsize() (int64, error) { + return soc.getInt64(C.ZMQ_MAXMSGSIZE) +} + +// ZMQ_MULTICAST_HOPS: Maximum network hops for multicast packets +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc23 +func (soc *Socket) GetMulticastHops() (int, error) { + return soc.getInt(C.ZMQ_MULTICAST_HOPS) +} + +// ZMQ_RCVTIMEO: Maximum time before a socket operation returns with EAGAIN +// +// Returns time.Duration(-1) for infinite +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc31 +func (soc *Socket) GetRcvtimeo() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_RCVTIMEO) + if v < 0 { + return time.Duration(-1), err + } + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_SNDTIMEO: Maximum time before a socket operation returns with EAGAIN +// +// Returns time.Duration(-1) for infinite +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc37 +func (soc *Socket) GetSndtimeo() (time.Duration, error) { + v, err := soc.getInt(C.ZMQ_SNDTIMEO) + if v < 0 { + return time.Duration(-1), err + } + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_IPV6: Retrieve IPv6 socket status +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc18 +func (soc *Socket) GetIpv6() (bool, error) { + v, err := soc.getInt(C.ZMQ_IPV6) + return v != 0, err +} + +// ZMQ_IMMEDIATE: Retrieve attach-on-connect value +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc16 +func (soc *Socket) GetImmediate() (bool, error) { + v, err := soc.getInt(C.ZMQ_IMMEDIATE) + return v != 0, err +} + +// ZMQ_FD: Retrieve file descriptor associated with the socket +// see socketget_unix.go and socketget_windows.go + +// ZMQ_EVENTS: Retrieve socket event state +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc8 +func (soc *Socket) GetEvents() (State, error) { + v, err := soc.getInt(C.ZMQ_EVENTS) + return State(v), err +} + +// ZMQ_LAST_ENDPOINT: Retrieve the last endpoint set +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc19 +func (soc *Socket) GetLastEndpoint() (string, error) { + return soc.getString(C.ZMQ_LAST_ENDPOINT, 1024) +} + +// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc38 +func (soc *Socket) GetTcpKeepalive() (int, error) { + return soc.getInt(C.ZMQ_TCP_KEEPALIVE) +} + +// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS) +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc40 +func (soc *Socket) GetTcpKeepaliveIdle() (int, error) { + return soc.getInt(C.ZMQ_TCP_KEEPALIVE_IDLE) +} + +// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc39 +func (soc *Socket) GetTcpKeepaliveCnt() (int, error) { + return soc.getInt(C.ZMQ_TCP_KEEPALIVE_CNT) +} + +// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc41 +func (soc *Socket) GetTcpKeepaliveIntvl() (int, error) { + return soc.getInt(C.ZMQ_TCP_KEEPALIVE_INTVL) +} + +// ZMQ_MECHANISM: Retrieve current security mechanism +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc22 +func (soc *Socket) GetMechanism() (Mechanism, error) { + v, err := soc.getInt(C.ZMQ_MECHANISM) + return Mechanism(v), err +} + +// ZMQ_PLAIN_SERVER: Retrieve current PLAIN server role +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc25 +func (soc *Socket) GetPlainServer() (int, error) { + return soc.getInt(C.ZMQ_PLAIN_SERVER) +} + +// ZMQ_PLAIN_USERNAME: Retrieve current PLAIN username +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc26 +func (soc *Socket) GetPlainUsername() (string, error) { + s, err := soc.getString(C.ZMQ_PLAIN_USERNAME, 1024) + if n := len(s); n > 0 && s[n-1] == 0 { + s = s[:n-1] + } + return s, err +} + +// ZMQ_PLAIN_PASSWORD: Retrieve current password +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc24 +func (soc *Socket) GetPlainPassword() (string, error) { + s, err := soc.getString(C.ZMQ_PLAIN_PASSWORD, 1024) + if n := len(s); n > 0 && s[n-1] == 0 { + s = s[:n-1] + } + return s, err +} + +// ZMQ_CURVE_PUBLICKEY: Retrieve current CURVE public key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc5 +func (soc *Socket) GetCurvePublickeyRaw() (string, error) { + return soc.getStringRaw(C.ZMQ_CURVE_PUBLICKEY, 32) +} + +// ZMQ_CURVE_PUBLICKEY: Retrieve current CURVE public key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc5 +func (soc *Socket) GetCurvePublickeykeyZ85() (string, error) { + return soc.getString(C.ZMQ_CURVE_PUBLICKEY, 41) +} + +// ZMQ_CURVE_SECRETKEY: Retrieve current CURVE secret key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc6 +func (soc *Socket) GetCurveSecretkeyRaw() (string, error) { + return soc.getStringRaw(C.ZMQ_CURVE_SECRETKEY, 32) +} + +// ZMQ_CURVE_SECRETKEY: Retrieve current CURVE secret key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc6 +func (soc *Socket) GetCurveSecretkeyZ85() (string, error) { + return soc.getString(C.ZMQ_CURVE_SECRETKEY, 41) +} + +// ZMQ_CURVE_SERVERKEY: Retrieve current CURVE server key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc7 +func (soc *Socket) GetCurveServerkeyRaw() (string, error) { + return soc.getStringRaw(C.ZMQ_CURVE_SERVERKEY, 32) +} + +// ZMQ_CURVE_SERVERKEY: Retrieve current CURVE server key +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc7 +func (soc *Socket) GetCurveServerkeyZ85() (string, error) { + return soc.getString(C.ZMQ_CURVE_SERVERKEY, 41) +} + +// ZMQ_ZAP_DOMAIN: Retrieve RFC 27 authentication domain +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc44 +func (soc *Socket) GetZapDomain() (string, error) { + return soc.getString(C.ZMQ_ZAP_DOMAIN, 1024) +} + +//////////////////////////////////////////////////////////////// +// +// New in ZeroMQ 4.1.0 +// +//////////////////////////////////////////////////////////////// +// +// + : yes +// D : deprecated +// o : setsockopt only +// implemented documented test +// ZMQ_ROUTER_HANDOVER o +// ZMQ_TOS + + +// ZMQ_IPC_FILTER_PID D +// ZMQ_IPC_FILTER_UID D +// ZMQ_IPC_FILTER_GID D +// ZMQ_CONNECT_RID o +// ZMQ_GSSAPI_SERVER + + +// ZMQ_GSSAPI_PRINCIPAL + + +// ZMQ_GSSAPI_SERVICE_PRINCIPAL + + +// ZMQ_GSSAPI_PLAINTEXT + + +// ZMQ_HANDSHAKE_IVL + + +// ZMQ_SOCKS_PROXY + +// ZMQ_XPUB_NODROP o? +// +//////////////////////////////////////////////////////////////// + +// ZMQ_TOS: Retrieve the Type-of-Service socket override status +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc42 +func (soc *Socket) GetTos() (int, error) { + if minor < 1 { + return 0, ErrorNotImplemented41 + } + return soc.getInt(C.ZMQ_TOS) +} + +// ZMQ_CONNECT_RID: SET ONLY + +// ZMQ_GSSAPI_SERVER: Retrieve current GSSAPI server role +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc12 +func (soc *Socket) GetGssapiServer() (bool, error) { + if minor < 1 { + return false, ErrorNotImplemented41 + } + v, err := soc.getInt(C.ZMQ_GSSAPI_SERVER) + return v != 0, err +} + +// ZMQ_GSSAPI_PRINCIPAL: Retrieve the name of the GSSAPI principal +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc11 +func (soc *Socket) GetGssapiPrincipal() (string, error) { + if minor < 1 { + return "", ErrorNotImplemented41 + } + return soc.getString(C.ZMQ_GSSAPI_PRINCIPAL, 1024) +} + +// ZMQ_GSSAPI_SERVICE_PRINCIPAL: Retrieve the name of the GSSAPI service principal +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc13 +func (soc *Socket) GetGssapiServicePrincipal() (string, error) { + if minor < 1 { + return "", ErrorNotImplemented41 + } + return soc.getString(C.ZMQ_GSSAPI_SERVICE_PRINCIPAL, 1024) +} + +// ZMQ_GSSAPI_PLAINTEXT: Retrieve GSSAPI plaintext or encrypted status +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc10 +func (soc *Socket) GetGssapiPlaintext() (bool, error) { + if minor < 1 { + return false, ErrorNotImplemented41 + } + v, err := soc.getInt(C.ZMQ_GSSAPI_PLAINTEXT) + return v != 0, err +} + +// ZMQ_HANDSHAKE_IVL: Retrieve maximum handshake interval +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc14 +func (soc *Socket) GetHandshakeIvl() (time.Duration, error) { + if minor < 1 { + return time.Duration(0), ErrorNotImplemented41 + } + v, err := soc.getInt(C.ZMQ_HANDSHAKE_IVL) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_SOCKS_PROXY: NOT DOCUMENTED +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +func (soc *Socket) GetSocksProxy() (string, error) { + if minor < 1 { + return "", ErrorNotImplemented41 + } + return soc.getString(C.ZMQ_SOCKS_PROXY, 1024) +} + +// ZMQ_XPUB_NODROP: SET ONLY? (not documented) + +//////////////////////////////////////////////////////////////// +// +// New in ZeroMQ 4.2.0 +// +//////////////////////////////////////////////////////////////// +// +// + : yes +// o : setsockopt only +// implemented documented test +// ZMQ_BLOCKY +// ZMQ_XPUB_MANUAL o +// ZMQ_XPUB_WELCOME_MSG o +// ZMQ_STREAM_NOTIFY o +// ZMQ_INVERT_MATCHING + + +// ZMQ_HEARTBEAT_IVL o +// ZMQ_HEARTBEAT_TTL o +// ZMQ_HEARTBEAT_TIMEOUT o +// ZMQ_XPUB_VERBOSER o +// ZMQ_CONNECT_TIMEOUT + + +// ZMQ_TCP_MAXRT + + +// ZMQ_THREAD_SAFE + + +// ZMQ_MULTICAST_MAXTPDU + + +// ZMQ_VMCI_BUFFER_SIZE + + +// ZMQ_VMCI_BUFFER_MIN_SIZE + + +// ZMQ_VMCI_BUFFER_MAX_SIZE + + +// ZMQ_VMCI_CONNECT_TIMEOUT + + +// ZMQ_USE_FD + + +// +//////////////////////////////////////////////////////////////// + +// ZMQ_BLOCKY doesn't look like a socket option + +// ZMQ_INVERT_MATCHING: Retrieve inverted filtering status +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc18 +func (soc *Socket) GetInvertMatching() (int, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getInt(C.ZMQ_INVERT_MATCHING) +} + +// ZMQ_CONNECT_TIMEOUT: Retrieve connect() timeout +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc5 +func (soc *Socket) GetConnectTimeout() (time.Duration, error) { + if minor < 2 { + return time.Duration(0), ErrorNotImplemented42 + } + v, err := soc.getInt(C.ZMQ_CONNECT_TIMEOUT) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_TCP_MAXRT: Retrieve Max TCP Retransmit Timeout +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc44 +func (soc *Socket) GetTcpMaxrt() (time.Duration, error) { + if minor < 2 { + return time.Duration(0), ErrorNotImplemented42 + } + v, err := soc.getInt(C.ZMQ_TCP_MAXRT) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_THREAD_SAFE: Retrieve socket thread safety +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc45 +func (soc *Socket) GetThreadSafe() (bool, error) { + if minor < 2 { + return false, ErrorNotImplemented42 + } + v, err := soc.getInt(C.ZMQ_THREAD_SAFE) + return v != 0, err +} + +// ZMQ_MULTICAST_MAXTPDU: Maximum transport data unit size for multicast packets +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc26 +func (soc *Socket) GetMulticastMaxtpdu() (int, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getInt(C.ZMQ_MULTICAST_MAXTPDU) +} + +// ZMQ_VMCI_BUFFER_SIZE: Retrieve buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc49 +func (soc *Socket) GetVmciBufferSize() (uint64, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getUInt64(C.ZMQ_VMCI_BUFFER_SIZE) +} + +// ZMQ_VMCI_BUFFER_MIN_SIZE: Retrieve min buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc50 +func (soc *Socket) GetVmciBufferMinSize() (uint64, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getUInt64(C.ZMQ_VMCI_BUFFER_MIN_SIZE) +} + +// ZMQ_VMCI_BUFFER_MAX_SIZE: Retrieve max buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc51 +func (soc *Socket) GetVmciBufferMaxSize() (uint64, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getUInt64(C.ZMQ_VMCI_BUFFER_MAX_SIZE) +} + +// ZMQ_VMCI_CONNECT_TIMEOUT: Retrieve connection timeout of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc52 +func (soc *Socket) GetVmciConnectTimeout() (time.Duration, error) { + if minor < 2 { + return time.Duration(0), ErrorNotImplemented42 + } + v, err := soc.getInt(C.ZMQ_VMCI_CONNECT_TIMEOUT) + return time.Duration(v) * time.Millisecond, err +} + +// ZMQ_USE_FD: Retrieve the pre-allocated socket file descriptor +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-getsockopt#toc29 +func (soc *Socket) Getusefd() (int, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return soc.getInt(C.ZMQ_USE_FD) +} diff --git a/vendor/github.com/pebbe/zmq4/draft/socketget_unix.go b/vendor/github.com/pebbe/zmq4/draft/socketget_unix.go new file mode 100644 index 0000000..2671b33 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/socketget_unix.go @@ -0,0 +1,15 @@ +// +build !windows + +package zmq4 + +/* +#include +*/ +import "C" + +// ZMQ_FD: Retrieve file descriptor associated with the socket +// +// See: http://api.zeromq.org/4-1:zmq-getsockopt#toc9 +func (soc *Socket) GetFd() (int, error) { + return soc.getInt(C.ZMQ_FD) +} diff --git a/vendor/github.com/pebbe/zmq4/draft/socketget_windows.go b/vendor/github.com/pebbe/zmq4/draft/socketget_windows.go new file mode 100644 index 0000000..6d2a89c --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/socketget_windows.go @@ -0,0 +1,26 @@ +// +build windows + +package zmq4 + +/* +#include +*/ +import "C" + +import ( + "unsafe" +) + +/* +ZMQ_FD: Retrieve file descriptor associated with the socket + +See: http://api.zeromq.org/4-1:zmq-getsockopt#toc9 +*/ +func (soc *Socket) GetFd() (uintptr, error) { + value := C.SOCKET(0) + size := C.size_t(unsafe.Sizeof(value)) + if i, err := C.zmq_getsockopt(soc.soc, C.ZMQ_FD, unsafe.Pointer(&value), &size); i != 0 { + return uintptr(0), errget(err) + } + return uintptr(value), nil +} diff --git a/vendor/github.com/pebbe/zmq4/draft/socketset.go b/vendor/github.com/pebbe/zmq4/draft/socketset.go new file mode 100644 index 0000000..d5dd6f0 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/socketset.go @@ -0,0 +1,800 @@ +package zmq4 + +/* +#include +#include +#include +#include "zmq4.h" +*/ +import "C" + +import ( + "time" + "unsafe" +) + +func (soc *Socket) setString(opt C.int, s string) error { + if !soc.opened { + return ErrorSocketClosed + } + cs := C.CString(s) + defer C.free(unsafe.Pointer(cs)) + if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(cs), C.size_t(len(s))); i != 0 { + return errget(err) + } + return nil +} + +func (soc *Socket) setNullString(opt C.int) error { + if !soc.opened { + return ErrorSocketClosed + } + if i, err := C.zmq_setsockopt(soc.soc, opt, nil, 0); i != 0 { + return errget(err) + } + return nil +} + +func (soc *Socket) setInt(opt C.int, value int) error { + if !soc.opened { + return ErrorSocketClosed + } + val := C.int(value) + if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); i != 0 { + return errget(err) + } + return nil +} + +func (soc *Socket) setInt64(opt C.int, value int64) error { + if !soc.opened { + return ErrorSocketClosed + } + val := C.int64_t(value) + if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); i != 0 { + return errget(err) + } + return nil +} + +func (soc *Socket) setUInt64(opt C.int, value uint64) error { + if !soc.opened { + return ErrorSocketClosed + } + val := C.uint64_t(value) + if i, err := C.zmq_setsockopt(soc.soc, opt, unsafe.Pointer(&val), C.size_t(unsafe.Sizeof(val))); i != 0 { + return errget(err) + } + return nil +} + +// ZMQ_SNDHWM: Set high water mark for outbound messages +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc39 +func (soc *Socket) SetSndhwm(value int) error { + return soc.setInt(C.ZMQ_SNDHWM, value) +} + +// ZMQ_RCVHWM: Set high water mark for inbound messages +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc28 +func (soc *Socket) SetRcvhwm(value int) error { + return soc.setInt(C.ZMQ_RCVHWM, value) +} + +// ZMQ_AFFINITY: Set I/O thread affinity +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc3 +func (soc *Socket) SetAffinity(value uint64) error { + return soc.setUInt64(C.ZMQ_AFFINITY, value) +} + +// ZMQ_SUBSCRIBE: Establish message filter +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc41 +func (soc *Socket) SetSubscribe(filter string) error { + return soc.setString(C.ZMQ_SUBSCRIBE, filter) +} + +// ZMQ_UNSUBSCRIBE: Remove message filter +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc47 +func (soc *Socket) SetUnsubscribe(filter string) error { + return soc.setString(C.ZMQ_UNSUBSCRIBE, filter) +} + +// ZMQ_IDENTITY: Set socket identity +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc16 +func (soc *Socket) SetIdentity(value string) error { + return soc.setString(C.ZMQ_IDENTITY, value) +} + +// ZMQ_RATE: Set multicast data rate +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc26 +func (soc *Socket) SetRate(value int) error { + return soc.setInt(C.ZMQ_RATE, value) +} + +// ZMQ_RECOVERY_IVL: Set multicast recovery interval +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc32 +func (soc *Socket) SetRecoveryIvl(value time.Duration) error { + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_RECOVERY_IVL, val) +} + +// ZMQ_SNDBUF: Set kernel transmit buffer size +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc38 +func (soc *Socket) SetSndbuf(value int) error { + return soc.setInt(C.ZMQ_SNDBUF, value) +} + +// ZMQ_RCVBUF: Set kernel receive buffer size +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc27 +func (soc *Socket) SetRcvbuf(value int) error { + return soc.setInt(C.ZMQ_RCVBUF, value) +} + +// ZMQ_LINGER: Set linger period for socket shutdown +// +// For infinite, use -1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc19 +func (soc *Socket) SetLinger(value time.Duration) error { + val := int(value / time.Millisecond) + if value == -1 { + val = -1 + } + return soc.setInt(C.ZMQ_LINGER, val) +} + +// ZMQ_RECONNECT_IVL: Set reconnection interval +// +// For no reconnection, use -1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc30 +func (soc *Socket) SetReconnectIvl(value time.Duration) error { + val := int(value / time.Millisecond) + if value == -1 { + val = -1 + } + return soc.setInt(C.ZMQ_RECONNECT_IVL, val) +} + +// ZMQ_RECONNECT_IVL_MAX: Set maximum reconnection interval +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc31 +func (soc *Socket) SetReconnectIvlMax(value time.Duration) error { + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_RECONNECT_IVL_MAX, val) +} + +// ZMQ_BACKLOG: Set maximum length of the queue of outstanding connections +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc4 +func (soc *Socket) SetBacklog(value int) error { + return soc.setInt(C.ZMQ_BACKLOG, value) +} + +// ZMQ_MAXMSGSIZE: Maximum acceptable inbound message size +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc20 +func (soc *Socket) SetMaxmsgsize(value int64) error { + return soc.setInt64(C.ZMQ_MAXMSGSIZE, value) +} + +// ZMQ_MULTICAST_HOPS: Maximum network hops for multicast packets +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc21 +func (soc *Socket) SetMulticastHops(value int) error { + return soc.setInt(C.ZMQ_MULTICAST_HOPS, value) +} + +// ZMQ_RCVTIMEO: Maximum time before a recv operation returns with EAGAIN +// +// For infinite, use -1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc29 +func (soc *Socket) SetRcvtimeo(value time.Duration) error { + val := int(value / time.Millisecond) + if value == -1 { + val = -1 + } + return soc.setInt(C.ZMQ_RCVTIMEO, val) +} + +// ZMQ_SNDTIMEO: Maximum time before a send operation returns with EAGAIN +// +// For infinite, use -1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc40 +func (soc *Socket) SetSndtimeo(value time.Duration) error { + val := int(value / time.Millisecond) + if value == -1 { + val = -1 + } + return soc.setInt(C.ZMQ_SNDTIMEO, val) +} + +// ZMQ_IPV6: Enable IPv6 on socket +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc18 +func (soc *Socket) SetIpv6(value bool) error { + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_IPV6, val) +} + +// ZMQ_IMMEDIATE: Queue messages only to completed connections +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc17 +func (soc *Socket) SetImmediate(value bool) error { + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_IMMEDIATE, val) +} + +// ZMQ_ROUTER_MANDATORY: accept only routable messages on ROUTER sockets +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc36 +func (soc *Socket) SetRouterMandatory(value int) error { + return soc.setInt(C.ZMQ_ROUTER_MANDATORY, value) +} + +// ZMQ_ROUTER_RAW: switch ROUTER socket to raw mode +// +// This option is deprecated since ZeroMQ version 4.1, please use ZMQ_STREAM sockets instead. +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc37 +func (soc *Socket) SetRouterRaw(value int) error { + return soc.setInt(C.ZMQ_ROUTER_RAW, value) +} + +// ZMQ_PROBE_ROUTER: bootstrap connections to ROUTER sockets +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc25 +func (soc *Socket) SetProbeRouter(value int) error { + return soc.setInt(C.ZMQ_PROBE_ROUTER, value) +} + +// ZMQ_XPUB_VERBOSE: provide all subscription messages on XPUB sockets +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc48 +func (soc *Socket) SetXpubVerbose(value int) error { + return soc.setInt(C.ZMQ_XPUB_VERBOSE, value) +} + +// ZMQ_REQ_CORRELATE: match replies with requests +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc33 +func (soc *Socket) SetReqCorrelate(value int) error { + return soc.setInt(C.ZMQ_REQ_CORRELATE, value) +} + +// ZMQ_REQ_RELAXED: relax strict alternation between request and reply +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc34 +func (soc *Socket) SetReqRelaxed(value int) error { + return soc.setInt(C.ZMQ_REQ_RELAXED, value) +} + +// ZMQ_TCP_KEEPALIVE: Override SO_KEEPALIVE socket option +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc42 +func (soc *Socket) SetTcpKeepalive(value int) error { + return soc.setInt(C.ZMQ_TCP_KEEPALIVE, value) +} + +// ZMQ_TCP_KEEPALIVE_IDLE: Override TCP_KEEPCNT(or TCP_KEEPALIVE on some OS) +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc44 +func (soc *Socket) SetTcpKeepaliveIdle(value int) error { + return soc.setInt(C.ZMQ_TCP_KEEPALIVE_IDLE, value) +} + +// ZMQ_TCP_KEEPALIVE_CNT: Override TCP_KEEPCNT socket option +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc43 +func (soc *Socket) SetTcpKeepaliveCnt(value int) error { + return soc.setInt(C.ZMQ_TCP_KEEPALIVE_CNT, value) +} + +// ZMQ_TCP_KEEPALIVE_INTVL: Override TCP_KEEPINTVL socket option +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc45 +func (soc *Socket) SetTcpKeepaliveIntvl(value int) error { + return soc.setInt(C.ZMQ_TCP_KEEPALIVE_INTVL, value) +} + +// ZMQ_TCP_ACCEPT_FILTER: Assign filters to allow new TCP connections +// +// This option is deprecated since ZeroMQ version 4.1, please use authentication via +// the ZAP API and IP address whitelisting / blacklisting. +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc50 +func (soc *Socket) SetTcpAcceptFilter(filter string) error { + if len(filter) == 0 { + return soc.setNullString(C.ZMQ_TCP_ACCEPT_FILTER) + } + return soc.setString(C.ZMQ_TCP_ACCEPT_FILTER, filter) +} + +// ZMQ_PLAIN_SERVER: Set PLAIN server role +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc23 +func (soc *Socket) SetPlainServer(value int) error { + return soc.setInt(C.ZMQ_PLAIN_SERVER, value) +} + +// ZMQ_PLAIN_USERNAME: Set PLAIN security username +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc24 +func (soc *Socket) SetPlainUsername(username string) error { + if len(username) == 0 { + return soc.setNullString(C.ZMQ_PLAIN_USERNAME) + } + return soc.setString(C.ZMQ_PLAIN_USERNAME, username) +} + +// ZMQ_PLAIN_PASSWORD: Set PLAIN security password +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc22 +func (soc *Socket) SetPlainPassword(password string) error { + if len(password) == 0 { + return soc.setNullString(C.ZMQ_PLAIN_PASSWORD) + } + return soc.setString(C.ZMQ_PLAIN_PASSWORD, password) +} + +// ZMQ_CURVE_SERVER: Set CURVE server role +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc9 +func (soc *Socket) SetCurveServer(value int) error { + return soc.setInt(C.ZMQ_CURVE_SERVER, value) +} + +// ZMQ_CURVE_PUBLICKEY: Set CURVE public key +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc7 +func (soc *Socket) SetCurvePublickey(key string) error { + return soc.setString(C.ZMQ_CURVE_PUBLICKEY, key) +} + +// ZMQ_CURVE_SECRETKEY: Set CURVE secret key +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc8 +func (soc *Socket) SetCurveSecretkey(key string) error { + return soc.setString(C.ZMQ_CURVE_SECRETKEY, key) +} + +// ZMQ_CURVE_SERVERKEY: Set CURVE server key +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc10 +func (soc *Socket) SetCurveServerkey(key string) error { + return soc.setString(C.ZMQ_CURVE_SERVERKEY, key) +} + +// ZMQ_ZAP_DOMAIN: Set RFC 27 authentication domain +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc49 +func (soc *Socket) SetZapDomain(domain string) error { + return soc.setString(C.ZMQ_ZAP_DOMAIN, domain) +} + +// ZMQ_CONFLATE: Keep only last message +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc6 +func (soc *Socket) SetConflate(value bool) error { + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_CONFLATE, val) +} + +//////////////////////////////////////////////////////////////// +// +// New in ZeroMQ 4.1.0 +// +//////////////////////////////////////////////////////////////// +// +// + : yes +// D : deprecated +// implemented documented test +// ZMQ_ROUTER_HANDOVER + + +// ZMQ_TOS + + +// ZMQ_IPC_FILTER_PID D +// ZMQ_IPC_FILTER_UID D +// ZMQ_IPC_FILTER_GID D +// ZMQ_CONNECT_RID + + +// ZMQ_GSSAPI_SERVER + + +// ZMQ_GSSAPI_PRINCIPAL + + +// ZMQ_GSSAPI_SERVICE_PRINCIPAL + + +// ZMQ_GSSAPI_PLAINTEXT + + +// ZMQ_HANDSHAKE_IVL + + +// ZMQ_SOCKS_PROXY + +// ZMQ_XPUB_NODROP + +// +//////////////////////////////////////////////////////////////// + +// ZMQ_ROUTER_HANDOVER: handle duplicate client identities on ROUTER sockets +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc35 +func (soc *Socket) SetRouterHandover(value bool) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_ROUTER_HANDOVER, val) +} + +// ZMQ_TOS: Set the Type-of-Service on socket +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc46 +func (soc *Socket) SetTos(value int) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return soc.setInt(C.ZMQ_TOS, value) +} + +// ZMQ_CONNECT_RID: Assign the next outbound connection id +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc5 +func (soc *Socket) SetConnectRid(value string) error { + if minor < 1 { + return ErrorNotImplemented41 + } + if value == "" { + return soc.setNullString(C.ZMQ_CONNECT_RID) + } + return soc.setString(C.ZMQ_CONNECT_RID, value) +} + +// ZMQ_GSSAPI_SERVER: Set GSSAPI server role +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc13 +func (soc *Socket) SetGssapiServer(value bool) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_GSSAPI_SERVER, val) +} + +// ZMQ_GSSAPI_PRINCIPAL: Set name of GSSAPI principal +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc12 +func (soc *Socket) SetGssapiPrincipal(value string) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return soc.setString(C.ZMQ_GSSAPI_PRINCIPAL, value) +} + +// ZMQ_GSSAPI_SERVICE_PRINCIPAL: Set name of GSSAPI service principal +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc14 +func (soc *Socket) SetGssapiServicePrincipal(value string) error { + if minor < 1 { + return ErrorNotImplemented41 + } + return soc.setString(C.ZMQ_GSSAPI_SERVICE_PRINCIPAL, value) +} + +// ZMQ_GSSAPI_PLAINTEXT: Disable GSSAPI encryption +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc11 +func (soc *Socket) SetGssapiPlaintext(value bool) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_GSSAPI_PLAINTEXT, val) +} + +// ZMQ_HANDSHAKE_IVL: Set maximum handshake interval +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-1:zmq-setsockopt#toc15 +func (soc *Socket) SetHandshakeIvl(value time.Duration) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_HANDSHAKE_IVL, val) +} + +// ZMQ_SOCKS_PROXY: NOT DOCUMENTED +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +func (soc *Socket) SetSocksProxy(value string) error { + if minor < 1 { + return ErrorNotImplemented41 + } + if value == "" { + return soc.setNullString(C.ZMQ_SOCKS_PROXY) + } + return soc.setString(C.ZMQ_SOCKS_PROXY, value) +} + +// Available since ZeroMQ 4.1, documented since ZeroMQ 4.2 + +// ZMQ_XPUB_NODROP: do not silently drop messages if SENDHWM is reached +// +// Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc60 +func (soc *Socket) SetXpubNodrop(value bool) error { + if minor < 1 { + return ErrorNotImplemented41 + } + val := 0 + if value { + val = 1 + } + return soc.setInt(C.ZMQ_XPUB_NODROP, val) +} + +//////////////////////////////////////////////////////////// +// +// New in ZeroMQ 4.2.0 +// +//////////////////////////////////////////////////////////////// +// +// + : yes +// o : getsockopt only +// implemented documented test +// ZMQ_BLOCKY +// ZMQ_XPUB_MANUAL + + +// ZMQ_XPUB_WELCOME_MSG + + +// ZMQ_STREAM_NOTIFY + + +// ZMQ_INVERT_MATCHING + + +// ZMQ_HEARTBEAT_IVL + + +// ZMQ_HEARTBEAT_TTL + + +// ZMQ_HEARTBEAT_TIMEOUT + + +// ZMQ_XPUB_VERBOSER + + +// ZMQ_CONNECT_TIMEOUT + + +// ZMQ_TCP_MAXRT + + +// ZMQ_THREAD_SAFE o +// ZMQ_MULTICAST_MAXTPDU + + +// ZMQ_VMCI_BUFFER_SIZE + + +// ZMQ_VMCI_BUFFER_MIN_SIZE + + +// ZMQ_VMCI_BUFFER_MAX_SIZE + + +// ZMQ_VMCI_CONNECT_TIMEOUT + + +// ZMQ_USE_FD + + +// +//////////////////////////////////////////////////////////////// + +// ZMQ_XPUB_MANUAL: change the subscription handling to manual +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc59 +func (soc *Socket) SetXpubManual(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_XPUB_MANUAL, value) +} + +// ZMQ_XPUB_WELCOME_MSG: set welcome message that will be received by subscriber when connecting +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc61 +func (soc *Socket) SetXpubWelcomeMsg(value string) error { + if minor < 2 { + return ErrorNotImplemented42 + } + if value == "" { + return soc.setNullString(C.ZMQ_XPUB_WELCOME_MSG) + } + return soc.setString(C.ZMQ_XPUB_WELCOME_MSG, value) +} + +// ZMQ_STREAM_NOTIFY: send connect and disconnect notifications +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc48 +func (soc *Socket) SetStreamNotify(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_STREAM_NOTIFY, value) +} + +// ZMQ_INVERT_MATCHING: Invert message filtering +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc22 +func (soc *Socket) SetInvertMatching(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_INVERT_MATCHING, value) +} + +// ZMQ_HEARTBEAT_IVL: Set interval between sending ZMTP heartbeats +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc17 +func (soc *Socket) SetHeartbeatIvl(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_HEARTBEAT_IVL, val) +} + +// ZMQ_HEARTBEAT_TTL: Set the TTL value for ZMTP heartbeats +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc19 +func (soc *Socket) SetHeartbeatTtl(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_HEARTBEAT_TTL, val) +} + +// ZMQ_HEARTBEAT_TIMEOUT: Set timeout for ZMTP heartbeats +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc18 +func (soc *Socket) SetHeartbeatTimeout(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_HEARTBEAT_TIMEOUT, val) +} + +// ZMQ_XPUB_VERBOSER: pass subscribe and unsubscribe messages on XPUB socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc58 +func (soc *Socket) SetXpubVerboser(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_XPUB_VERBOSER, value) +} + +// ZMQ_CONNECT_TIMEOUT: Set connect() timeout +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc7 +func (soc *Socket) SetConnectTimeout(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_CONNECT_TIMEOUT, val) +} + +// ZMQ_TCP_MAXRT: Set TCP Maximum Retransmit Timeout +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc54 +func (soc *Socket) SetTcpMaxrt(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_TCP_MAXRT, val) +} + +// ZMQ_MULTICAST_MAXTPDU: Maximum transport data unit size for multicast packets +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc27 +func (soc *Socket) SetMulticastMaxtpdu(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_MULTICAST_MAXTPDU, value) +} + +// ZMQ_VMCI_BUFFER_SIZE: Set buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc68 +func (soc *Socket) SetVmciBufferSize(value uint64) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setUInt64(C.ZMQ_VMCI_BUFFER_SIZE, value) +} + +// ZMQ_VMCI_BUFFER_MIN_SIZE: Set min buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc69 +func (soc *Socket) SetVmciBufferMinSize(value uint64) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setUInt64(C.ZMQ_VMCI_BUFFER_MIN_SIZE, value) +} + +// ZMQ_VMCI_BUFFER_MAX_SIZE: Set max buffer size of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc70 +func (soc *Socket) SetVmciBufferMaxSize(value uint64) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setUInt64(C.ZMQ_VMCI_BUFFER_MAX_SIZE, value) +} + +// ZMQ_VMCI_CONNECT_TIMEOUT: Set connection timeout of the VMCI socket +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc71 +func (soc *Socket) SetVmciConnectTimeout(value time.Duration) error { + if minor < 2 { + return ErrorNotImplemented42 + } + val := int(value / time.Millisecond) + return soc.setInt(C.ZMQ_VMCI_CONNECT_TIMEOUT, val) +} + +// ZMQ_USE_FD: Set the pre-allocated socket file descriptor +// +// Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +// +// See: http://api.zeromq.org/4-2:zmq-setsockopt#toc31 +func (soc *Socket) SetUseFd(value int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return soc.setInt(C.ZMQ_USE_FD, value) +} diff --git a/vendor/github.com/pebbe/zmq4/draft/utils.go b/vendor/github.com/pebbe/zmq4/draft/utils.go new file mode 100644 index 0000000..3a0fa45 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/utils.go @@ -0,0 +1,206 @@ +package zmq4 + +import ( + "fmt" +) + +/* +Send multi-part message on socket. + +Any `[]string' or `[][]byte' is split into separate `string's or `[]byte's + +Any other part that isn't a `string' or `[]byte' is converted +to `string' with `fmt.Sprintf("%v", part)'. + +Returns total bytes sent. +*/ +func (soc *Socket) SendMessage(parts ...interface{}) (total int, err error) { + return soc.sendMessage(0, parts...) +} + +/* +Like SendMessage(), but adding the DONTWAIT flag. +*/ +func (soc *Socket) SendMessageDontwait(parts ...interface{}) (total int, err error) { + return soc.sendMessage(DONTWAIT, parts...) +} + +func (soc *Socket) sendMessage(dontwait Flag, parts ...interface{}) (total int, err error) { + + var last int +PARTS: + for last = len(parts) - 1; last >= 0; last-- { + switch t := parts[last].(type) { + case []string: + if len(t) > 0 { + break PARTS + } + case [][]byte: + if len(t) > 0 { + break PARTS + } + default: + break PARTS + } + } + + opt := SNDMORE | dontwait + for i := 0; i <= last; i++ { + if i == last { + opt = dontwait + } + switch t := parts[i].(type) { + case []string: + opt = SNDMORE | dontwait + n := len(t) - 1 + for j, s := range t { + if j == n && i == last { + opt = dontwait + } + c, e := soc.Send(s, opt) + if e == nil { + total += c + } else { + return -1, e + } + } + case [][]byte: + opt = SNDMORE | dontwait + n := len(t) - 1 + for j, b := range t { + if j == n && i == last { + opt = dontwait + } + c, e := soc.SendBytes(b, opt) + if e == nil { + total += c + } else { + return -1, e + } + } + case string: + c, e := soc.Send(t, opt) + if e == nil { + total += c + } else { + return -1, e + } + case []byte: + c, e := soc.SendBytes(t, opt) + if e == nil { + total += c + } else { + return -1, e + } + default: + c, e := soc.Send(fmt.Sprintf("%v", t), opt) + if e == nil { + total += c + } else { + return -1, e + } + } + } + return +} + +/* +Receive parts as message from socket. + +Returns last non-nil error code. +*/ +func (soc *Socket) RecvMessage(flags Flag) (msg []string, err error) { + msg = make([]string, 0) + for { + s, e := soc.Recv(flags) + if e == nil { + msg = append(msg, s) + } else { + return msg[0:0], e + } + more, e := soc.GetRcvmore() + if e == nil { + if !more { + break + } + } else { + return msg[0:0], e + } + } + return +} + +/* +Receive parts as message from socket. + +Returns last non-nil error code. +*/ +func (soc *Socket) RecvMessageBytes(flags Flag) (msg [][]byte, err error) { + msg = make([][]byte, 0) + for { + b, e := soc.RecvBytes(flags) + if e == nil { + msg = append(msg, b) + } else { + return msg[0:0], e + } + more, e := soc.GetRcvmore() + if e == nil { + if !more { + break + } + } else { + return msg[0:0], e + } + } + return +} + +/* +Receive parts as message from socket, including metadata. + +Metadata is picked from the first message part. + +For details about metadata, see RecvWithMetadata(). + +Returns last non-nil error code. +*/ +func (soc *Socket) RecvMessageWithMetadata(flags Flag, properties ...string) (msg []string, metadata map[string]string, err error) { + b, p, err := soc.RecvMessageBytesWithMetadata(flags, properties...) + m := make([]string, len(b)) + for i, bt := range b { + m[i] = string(bt) + } + return m, p, err +} + +/* +Receive parts as message from socket, including metadata. + +Metadata is picked from the first message part. + +For details about metadata, see RecvBytesWithMetadata(). + +Returns last non-nil error code. +*/ +func (soc *Socket) RecvMessageBytesWithMetadata(flags Flag, properties ...string) (msg [][]byte, metadata map[string]string, err error) { + bb := make([][]byte, 0) + b, p, err := soc.RecvBytesWithMetadata(flags, properties...) + if err != nil { + return bb, p, err + } + for { + bb = append(bb, b) + + var more bool + more, err = soc.GetRcvmore() + if err != nil || !more { + break + } + b, err = soc.RecvBytes(flags) + if err != nil { + break + } + } + return bb, p, err +} diff --git a/vendor/github.com/pebbe/zmq4/draft/zmq4.go b/vendor/github.com/pebbe/zmq4/draft/zmq4.go new file mode 100644 index 0000000..bf8f53f --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/zmq4.go @@ -0,0 +1,1455 @@ +package zmq4 + +/* +#cgo !windows pkg-config: libzmq +#cgo windows CFLAGS: -I/usr/local/include +#cgo windows LDFLAGS: -L/usr/local/lib -lzmq +#include +#if ZMQ_VERSION_MINOR < 2 +#include +#endif +#include +#include +#include "zmq4.h" +#include "zmq42draft.h" + +int + zmq4_major = ZMQ_VERSION_MAJOR, + zmq4_minor = ZMQ_VERSION_MINOR, + zmq4_patch = ZMQ_VERSION_PATCH; + +#if ZMQ_VERSION_MINOR > 0 +// Version >= 4.1.x + +typedef struct { + uint16_t event; // id of the event as bitfield + int32_t value; // value is either error code, fd or reconnect interval +} zmq_event_t; + +#else +// Version == 4.0.x + +const char *zmq_msg_gets (zmq_msg_t *msg, const char *property) { + return NULL; +} + +int zmq_has (const char *capability) { + return 0; +} + +#if ZMQ_VERSION_PATCH < 5 +// Version < 4.0.5 + +int zmq_proxy_steerable (const void *frontend, const void *backend, const void *capture, const void *control) { + return -1; +} + +#endif // Version < 4.0.5 + +#endif // Version == 4.0.x + +void zmq4_get_event40(zmq_msg_t *msg, int *ev, int *val) { + zmq_event_t event; + const char* data = (char*)zmq_msg_data(msg); + memcpy(&(event.event), data, sizeof(event.event)); + memcpy(&(event.value), data+sizeof(event.event), sizeof(event.value)); + *ev = (int)(event.event); + *val = (int)(event.value); +} +void zmq4_get_event41(zmq_msg_t *msg, int *ev, int *val) { + uint8_t *data = (uint8_t *) zmq_msg_data (msg); + uint16_t event = *(uint16_t *) (data); + *ev = (int)event; + *val = (int)(*(uint32_t *) (data + 2)); +} +void *zmq4_memcpy(void *dest, const void *src, size_t n) { + return memcpy(dest, src, n); +} +*/ +import "C" + +import ( + "errors" + "fmt" + "runtime" + "strings" + "unsafe" +) + +var ( + defaultCtx *Context + + major, minor, patch int + + ErrorContextClosed = errors.New("Context is closed") + ErrorSocketClosed = errors.New("Socket is closed") + ErrorMoreExpected = errors.New("More expected") + ErrorNotImplemented405 = errors.New("Not implemented, requires 0MQ version 4.0.5") + ErrorNotImplemented41 = errors.New("Not implemented, requires 0MQ version 4.1") + ErrorNotImplemented42 = errors.New("Not implemented, requires 0MQ version 4.2") + ErrorNotImplemented42draft = errors.New("Not implemented, requires 0MQ version 4.2 with drafts enabled") + ErrorNotImplementedWindows = errors.New("Not implemented on Windows") + ErrorNoSocket = errors.New("No such socket") + + initVersionError error + initContextError error +) + +func init() { + major, minor, patch = Version() + if major != 4 { + initVersionError = fmt.Errorf("Using zmq4 with ZeroMQ major version %d", major) + return + } + if major != int(C.zmq4_major) || minor != int(C.zmq4_minor) || patch != int(C.zmq4_patch) { + initVersionError = + fmt.Errorf( + "zmq4 was installed with ZeroMQ version %d.%d.%d, but the application links with version %d.%d.%d", + int(C.zmq4_major), int(C.zmq4_minor), int(C.zmq4_patch), + major, minor, patch) + return + } + + var err error + defaultCtx = &Context{} + defaultCtx.ctx, err = C.zmq_ctx_new() + if defaultCtx.ctx == nil || err != nil { + initContextError = fmt.Errorf("Init of ZeroMQ context failed: %v", errget(err)) + return + } + defaultCtx.opened = true +} + +//. Util + +// Report 0MQ library version. +func Version() (major, minor, patch int) { + if initVersionError != nil { + return 0, 0, 0 + } + var maj, min, pat C.int + C.zmq_version(&maj, &min, &pat) + return int(maj), int(min), int(pat) +} + +// Get 0MQ error message string. +func Error(e int) string { + return C.GoString(C.zmq_strerror(C.int(e))) +} + +//. Context + +const ( + MaxSocketsDflt = int(C.ZMQ_MAX_SOCKETS_DFLT) + IoThreadsDflt = int(C.ZMQ_IO_THREADS_DFLT) +) + +/* +A context that is not the default context. +*/ +type Context struct { + ctx unsafe.Pointer + opened bool + err error +} + +// Create a new context. +func NewContext() (ctx *Context, err error) { + if initVersionError != nil { + return nil, initVersionError + } + ctx = &Context{} + c, e := C.zmq_ctx_new() + if c == nil { + err = errget(e) + ctx.err = err + } else { + ctx.ctx = c + ctx.opened = true + runtime.SetFinalizer(ctx, (*Context).Term) + } + return +} + +/* +Terminates the default context. + +For linger behavior, see: http://api.zeromq.org/4-1:zmq-ctx-term +*/ +func Term() error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.Term() +} + +/* +Terminates the context. + +For linger behavior, see: http://api.zeromq.org/4-1:zmq-ctx-term +*/ +func (ctx *Context) Term() error { + if ctx.opened { + ctx.opened = false + n, err := C.zmq_ctx_term(ctx.ctx) + if n != 0 { + ctx.err = errget(err) + } + } + return ctx.err +} + +func getOption(ctx *Context, o C.int) (int, error) { + if !ctx.opened { + return 0, ErrorContextClosed + } + nc, err := C.zmq_ctx_get(ctx.ctx, o) + n := int(nc) + if n < 0 { + return n, errget(err) + } + return n, nil +} + +// Returns the size of the 0MQ thread pool in the default context. +func GetIoThreads() (int, error) { + if initVersionError != nil { + return 0, initVersionError + } + if initContextError != nil { + return 0, initContextError + } + return defaultCtx.GetIoThreads() +} + +// Returns the size of the 0MQ thread pool. +func (ctx *Context) GetIoThreads() (int, error) { + return getOption(ctx, C.ZMQ_IO_THREADS) +} + +// Returns the maximum number of sockets allowed in the default context. +func GetMaxSockets() (int, error) { + if initVersionError != nil { + return 0, initVersionError + } + if initContextError != nil { + return 0, initContextError + } + return defaultCtx.GetMaxSockets() +} + +// Returns the maximum number of sockets allowed. +func (ctx *Context) GetMaxSockets() (int, error) { + return getOption(ctx, C.ZMQ_MAX_SOCKETS) +} + +/* +Returns the maximum message size in the default context. + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func GetMaxMsgsz() (int, error) { + if initVersionError != nil { + return 0, initVersionError + } + if initContextError != nil { + return 0, initContextError + } + return defaultCtx.GetMaxMsgsz() +} + +/* +Returns the maximum message size. + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func (ctx *Context) GetMaxMsgsz() (int, error) { + if minor < 2 { + return 0, ErrorNotImplemented42 + } + return getOption(ctx, C.ZMQ_MAX_MSGSZ) +} + +// Returns the IPv6 option in the default context. +func GetIpv6() (bool, error) { + if initVersionError != nil { + return false, initVersionError + } + if initContextError != nil { + return false, initContextError + } + return defaultCtx.GetIpv6() +} + +// Returns the IPv6 option. +func (ctx *Context) GetIpv6() (bool, error) { + i, e := getOption(ctx, C.ZMQ_IPV6) + if i == 0 { + return false, e + } + return true, e +} + +/* +Returns the blocky setting in the default context. + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func GetBlocky() (bool, error) { + if initVersionError != nil { + return false, initVersionError + } + if initContextError != nil { + return false, initContextError + } + return defaultCtx.GetBlocky() +} + +/* +Returns the blocky setting. + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func (ctx *Context) GetBlocky() (bool, error) { + if minor < 2 { + return false, ErrorNotImplemented42 + } + i, e := getOption(ctx, C.ZMQ_BLOCKY) + if i == 0 { + return false, e + } + return true, e +} + +func setOption(ctx *Context, o C.int, n int) error { + if !ctx.opened { + return ErrorContextClosed + } + i, err := C.zmq_ctx_set(ctx.ctx, o, C.int(n)) + if int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Specifies the size of the 0MQ thread pool to handle I/O operations in +the default context. If your application is using only the inproc +transport for messaging you may set this to zero, otherwise set it to at +least one. This option only applies before creating any sockets. + +Default value: 1 +*/ +func SetIoThreads(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetIoThreads(n) +} + +/* +Specifies the size of the 0MQ thread pool to handle I/O operations. If +your application is using only the inproc transport for messaging you +may set this to zero, otherwise set it to at least one. This option only +applies before creating any sockets. + +Default value: 1 +*/ +func (ctx *Context) SetIoThreads(n int) error { + return setOption(ctx, C.ZMQ_IO_THREADS, n) +} + +/* +Sets the scheduling policy for default context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func SetThreadSchedPolicy(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetThreadSchedPolicy(n) +} + +/* +Sets scheduling priority for default context’s thread pool. + +This option requires ZeroMQ version 4.1, and is not available on Windows. + +Supported values for this option depend on chosen scheduling policy. +Details can be found in sched.h file, or at +http://man7.org/linux/man-pages/man2/sched_setscheduler.2.html + +This option only applies before creating any sockets on the context. + +Default value: -1 + +Returns ErrorNotImplemented41 with ZeroMQ version < 4.1 + +Returns ErrorNotImplementedWindows on Windows +*/ +func SetThreadPriority(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetThreadPriority(n) +} + +/* +Set maximum message size in the default context. + +Default value: INT_MAX + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func SetMaxMsgsz(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetMaxMsgsz(n) +} + +/* +Set maximum message size. + +Default value: INT_MAX + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func (ctx *Context) SetMaxMsgsz(n int) error { + if minor < 2 { + return ErrorNotImplemented42 + } + return setOption(ctx, C.ZMQ_MAX_MSGSZ, n) +} + +/* +Sets the maximum number of sockets allowed in the default context. + +Default value: 1024 +*/ +func SetMaxSockets(n int) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetMaxSockets(n) +} + +/* +Sets the maximum number of sockets allowed. + +Default value: 1024 +*/ +func (ctx *Context) SetMaxSockets(n int) error { + return setOption(ctx, C.ZMQ_MAX_SOCKETS, n) +} + +/* +Sets the IPv6 value for all sockets created in the default context from this point onwards. +A value of true means IPv6 is enabled, while false means the socket will use only IPv4. +When IPv6 is enabled, a socket will connect to, or accept connections from, both IPv4 and IPv6 hosts. + +Default value: false +*/ +func SetIpv6(i bool) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetIpv6(i) +} + +/* +Sets the IPv6 value for all sockets created in the context from this point onwards. +A value of true means IPv6 is enabled, while false means the socket will use only IPv4. +When IPv6 is enabled, a socket will connect to, or accept connections from, both IPv4 and IPv6 hosts. + +Default value: false +*/ +func (ctx *Context) SetIpv6(i bool) error { + n := 0 + if i { + n = 1 + } + return setOption(ctx, C.ZMQ_IPV6, n) +} + +/* +Sets the blocky behavior in the default context. + +See: http://api.zeromq.org/4-2:zmq-ctx-set#toc3 + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func SetBlocky(i bool) error { + if initVersionError != nil { + return initVersionError + } + if initContextError != nil { + return initContextError + } + return defaultCtx.SetBlocky(i) +} + +/* +Sets the blocky behavior. + +See: http://api.zeromq.org/4-2:zmq-ctx-set#toc3 + +Returns ErrorNotImplemented42 with ZeroMQ version < 4.2 +*/ +func (ctx *Context) SetBlocky(i bool) error { + if minor < 2 { + return ErrorNotImplemented42 + } + n := 0 + if i { + n = 1 + } + return setOption(ctx, C.ZMQ_BLOCKY, n) +} + +//. Sockets + +// Specifies the type of a socket, used by NewSocket() +type Type int + +const ( + // Constants for NewSocket() + // See: http://api.zeromq.org/4-1:zmq-socket#toc3 + REQ = Type(C.ZMQ_REQ) + REP = Type(C.ZMQ_REP) + DEALER = Type(C.ZMQ_DEALER) + ROUTER = Type(C.ZMQ_ROUTER) + PUB = Type(C.ZMQ_PUB) + SUB = Type(C.ZMQ_SUB) + XPUB = Type(C.ZMQ_XPUB) + XSUB = Type(C.ZMQ_XSUB) + PUSH = Type(C.ZMQ_PUSH) + PULL = Type(C.ZMQ_PULL) + PAIR = Type(C.ZMQ_PAIR) + STREAM = Type(C.ZMQ_STREAM) + // DRAFT + SERVER = Type(C.ZMQ_SERVER) + CLIENT = Type(C.ZMQ_CLIENT) + RADIO = Type(C.ZMQ_RADIO) + DISH = Type(C.ZMQ_DISH) + GATHER = Type(C.ZMQ_GATHER) + SCATTER = Type(C.ZMQ_SCATTER) + DGRAM = Type(C.ZMQ_DGRAM) +) + +/* +Socket type as string. +*/ +func (t Type) String() string { + switch t { + case REQ: + return "REQ" + case REP: + return "REP" + case DEALER: + return "DEALER" + case ROUTER: + return "ROUTER" + case PUB: + return "PUB" + case SUB: + return "SUB" + case XPUB: + return "XPUB" + case XSUB: + return "XSUB" + case PUSH: + return "PUSH" + case PULL: + return "PULL" + case PAIR: + return "PAIR" + case STREAM: + return "STREAM" + // DRAFT + case SERVER: + return "SERVER" + case CLIENT: + return "CLIENT" + case RADIO: + return "RADIO" + case DISH: + return "DISH" + case GATHER: + return "GATHER" + case SCATTER: + return "SCATTER" + case DGRAM: + return "DGRAM" + } + return "" +} + +// Used by (*Socket)Send() and (*Socket)Recv() +type Flag int + +const ( + // Flags for (*Socket)Send(), (*Socket)Recv() + // For Send, see: http://api.zeromq.org/4-1:zmq-send#toc2 + // For Recv, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + DONTWAIT = Flag(C.ZMQ_DONTWAIT) + SNDMORE = Flag(C.ZMQ_SNDMORE) +) + +/* +Socket flag as string. +*/ +func (f Flag) String() string { + ff := make([]string, 0) + if f&DONTWAIT != 0 { + ff = append(ff, "DONTWAIT") + } + if f&SNDMORE != 0 { + ff = append(ff, "SNDMORE") + } + if len(ff) == 0 { + return "" + } + return strings.Join(ff, "|") +} + +// Used by (*Socket)Monitor() and (*Socket)RecvEvent() +type Event int + +const ( + // Flags for (*Socket)Monitor() and (*Socket)RecvEvent() + // See: http://api.zeromq.org/4-1:zmq-socket-monitor#toc3 + EVENT_ALL = Event(C.ZMQ_EVENT_ALL) + EVENT_CONNECTED = Event(C.ZMQ_EVENT_CONNECTED) + EVENT_CONNECT_DELAYED = Event(C.ZMQ_EVENT_CONNECT_DELAYED) + EVENT_CONNECT_RETRIED = Event(C.ZMQ_EVENT_CONNECT_RETRIED) + EVENT_LISTENING = Event(C.ZMQ_EVENT_LISTENING) + EVENT_BIND_FAILED = Event(C.ZMQ_EVENT_BIND_FAILED) + EVENT_ACCEPTED = Event(C.ZMQ_EVENT_ACCEPTED) + EVENT_ACCEPT_FAILED = Event(C.ZMQ_EVENT_ACCEPT_FAILED) + EVENT_CLOSED = Event(C.ZMQ_EVENT_CLOSED) + EVENT_CLOSE_FAILED = Event(C.ZMQ_EVENT_CLOSE_FAILED) + EVENT_DISCONNECTED = Event(C.ZMQ_EVENT_DISCONNECTED) + EVENT_MONITOR_STOPPED = Event(C.ZMQ_EVENT_MONITOR_STOPPED) +) + +/* +Socket event as string. +*/ +func (e Event) String() string { + if e == EVENT_ALL { + return "EVENT_ALL" + } + ee := make([]string, 0) + if e&EVENT_CONNECTED != 0 { + ee = append(ee, "EVENT_CONNECTED") + } + if e&EVENT_CONNECT_DELAYED != 0 { + ee = append(ee, "EVENT_CONNECT_DELAYED") + } + if e&EVENT_CONNECT_RETRIED != 0 { + ee = append(ee, "EVENT_CONNECT_RETRIED") + } + if e&EVENT_LISTENING != 0 { + ee = append(ee, "EVENT_LISTENING") + } + if e&EVENT_BIND_FAILED != 0 { + ee = append(ee, "EVENT_BIND_FAILED") + } + if e&EVENT_ACCEPTED != 0 { + ee = append(ee, "EVENT_ACCEPTED") + } + if e&EVENT_ACCEPT_FAILED != 0 { + ee = append(ee, "EVENT_ACCEPT_FAILED") + } + if e&EVENT_CLOSED != 0 { + ee = append(ee, "EVENT_CLOSED") + } + if e&EVENT_CLOSE_FAILED != 0 { + ee = append(ee, "EVENT_CLOSE_FAILED") + } + if e&EVENT_DISCONNECTED != 0 { + ee = append(ee, "EVENT_DISCONNECTED") + } + if len(ee) == 0 { + return "" + } + return strings.Join(ee, "|") +} + +// Used by (soc *Socket)GetEvents() +type State int + +const ( + // Flags for (*Socket)GetEvents() + // See: http://api.zeromq.org/4-1:zmq-getsockopt#toc8 + POLLIN = State(C.ZMQ_POLLIN) + POLLOUT = State(C.ZMQ_POLLOUT) +) + +/* +Socket state as string. +*/ +func (s State) String() string { + ss := make([]string, 0) + if s&POLLIN != 0 { + ss = append(ss, "POLLIN") + } + if s&POLLOUT != 0 { + ss = append(ss, "POLLOUT") + } + if len(ss) == 0 { + return "" + } + return strings.Join(ss, "|") +} + +// Specifies the security mechanism, used by (*Socket)GetMechanism() +type Mechanism int + +const ( + // Constants for (*Socket)GetMechanism() + // See: http://api.zeromq.org/4-1:zmq-getsockopt#toc22 + NULL = Mechanism(C.ZMQ_NULL) + PLAIN = Mechanism(C.ZMQ_PLAIN) + CURVE = Mechanism(C.ZMQ_CURVE) + GSSAPI = Mechanism(C.ZMQ_GSSAPI) +) + +/* +Security mechanism as string. +*/ +func (m Mechanism) String() string { + switch m { + case NULL: + return "NULL" + case PLAIN: + return "PLAIN" + case CURVE: + return "CURVE" + case GSSAPI: + return "GSSAPI" + } + return "" +} + +/* +Socket functions starting with `Set` or `Get` are used for setting and +getting socket options. +*/ +type Socket struct { + soc unsafe.Pointer + ctx *Context + opened bool + err error +} + +/* +Socket as string. +*/ +func (soc Socket) String() string { + if !soc.opened { + return "Socket(CLOSED)" + } + t, err := soc.GetType() + if err != nil { + return fmt.Sprintf("Socket(%v)", err) + } + i, err := soc.GetIdentity() + if err == nil && i != "" { + return fmt.Sprintf("Socket(%v,%q)", t, i) + } + return fmt.Sprintf("Socket(%v,%p)", t, soc.soc) +} + +/* +Create 0MQ socket in the default context. + +WARNING: +The Socket is not thread safe. This means that you cannot access the same Socket +from different goroutines without using something like a mutex. + +For a description of socket types, see: http://api.zeromq.org/4-1:zmq-socket#toc3 +*/ +func NewSocket(t Type) (soc *Socket, err error) { + if initVersionError != nil { + return nil, initVersionError + } + if initContextError != nil { + return nil, initContextError + } + return defaultCtx.NewSocket(t) +} + +/* +Create 0MQ socket in the given context. + +WARNING: +The Socket is not thread safe. This means that you cannot access the same Socket +from different goroutines without using something like a mutex. + +For a description of socket types, see: http://api.zeromq.org/4-1:zmq-socket#toc3 +*/ +func (ctx *Context) NewSocket(t Type) (soc *Socket, err error) { + soc = &Socket{} + if !ctx.opened { + return soc, ErrorContextClosed + } + if t < 0 { + return soc, ErrorNotImplemented42draft + } + s, e := C.zmq_socket(ctx.ctx, C.int(t)) + if s == nil { + err = errget(e) + soc.err = err + } else { + soc.soc = s + soc.ctx = ctx + soc.opened = true + runtime.SetFinalizer(soc, (*Socket).Close) + } + return +} + +// If not called explicitly, the socket will be closed on garbage collection +func (soc *Socket) Close() error { + if soc.opened { + soc.opened = false + if i, err := C.zmq_close(soc.soc); int(i) != 0 { + soc.err = errget(err) + } + soc.soc = unsafe.Pointer(nil) + soc.ctx = nil + } + return soc.err +} + +// Return the context associated with a socket +func (soc *Socket) Context() (*Context, error) { + if !soc.opened { + return nil, ErrorSocketClosed + } + return soc.ctx, nil +} + +/* +Accept incoming connections on a socket. + +For a description of endpoint, see: http://api.zeromq.org/4-1:zmq-bind#toc2 +*/ +func (soc *Socket) Bind(endpoint string) error { + if !soc.opened { + return ErrorSocketClosed + } + s := C.CString(endpoint) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_bind(soc.soc, s); int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Stop accepting connections on a socket. + +For a description of endpoint, see: http://api.zeromq.org/4-1:zmq-bind#toc2 +*/ +func (soc *Socket) Unbind(endpoint string) error { + if !soc.opened { + return ErrorSocketClosed + } + s := C.CString(endpoint) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_unbind(soc.soc, s); int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Create outgoing connection from socket. + +For a description of endpoint, see: http://api.zeromq.org/4-1:zmq-connect#toc2 +*/ +func (soc *Socket) Connect(endpoint string) error { + if !soc.opened { + return ErrorSocketClosed + } + s := C.CString(endpoint) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_connect(soc.soc, s); int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Disconnect a socket. + +For a description of endpoint, see: http://api.zeromq.org/4-1:zmq-disconnect#toc2 +*/ +func (soc *Socket) Disconnect(endpoint string) error { + if !soc.opened { + return ErrorSocketClosed + } + s := C.CString(endpoint) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_disconnect(soc.soc, s); int(i) != 0 { + return errget(err) + } + return nil +} + +/* +Receive a message part from a socket. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 +*/ +func (soc *Socket) Recv(flags Flag) (string, error) { + b, _, err := soc.RecvBytesWithOpts(flags) + return string(b), err +} + +/* +Receive a message part from a socket. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 +*/ +func (soc *Socket) RecvBytes(flags Flag) ([]byte, error) { + b, _, err := soc.RecvBytesWithOpts(flags) + return b, err +} + +/* +Receive a message part from a socket, including message options. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + +Valid options are + + - OptRoutingId(0) + - OptGroup("") + +*/ +func (soc *Socket) RecvWithOpts(flags Flag, options ...interface{}) (string, []interface{}, error) { + b, o, err := soc.RecvBytesWithOpts(flags, options...) + return string(b), o, err +} + +/* +Receive a message part from a socket, including message options. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + +Valid options are + + - OptRoutingId(0) + - OptGroup("") + +*/ +func (soc *Socket) RecvBytesWithOpts(flags Flag, options ...interface{}) ([]byte, []interface{}, error) { + opts := make([]interface{}, len(options)) + + if !soc.opened { + return []byte{}, opts, ErrorSocketClosed + } + var msg C.zmq_msg_t + if i, err := C.zmq_msg_init(&msg); i != 0 { + return []byte{}, opts, errget(err) + } + defer C.zmq_msg_close(&msg) + + size, err := C.zmq_msg_recv(&msg, soc.soc, C.int(flags)) + if size < 0 { + return []byte{}, opts, errget(err) + } + if size == 0 { + return []byte{}, opts, nil + } + data := make([]byte, int(size)) + C.zmq4_memcpy(unsafe.Pointer(&data[0]), C.zmq_msg_data(&msg), C.size_t(size)) + + for i, option := range options { + switch option.(type) { + case OptRoutingId: + if !has42draft { + return []byte{}, opts, ErrorNotImplemented42draft + } + opts[i] = OptRoutingId(uint32(C.zmq_msg_routing_id(&msg))) + case OptGroup: + if !has42draft { + return []byte{}, opts, ErrorNotImplemented42draft + } + opts[i] = OptGroup(C.GoString(C.zmq_msg_group(&msg))) + default: + return []byte{}, opts, ErrorNotImplemented42 + } + } + + return data, opts, nil +} + +/* +Send a message part on a socket. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-send#toc2 +*/ +func (soc *Socket) Send(data string, flags Flag, options ...interface{}) (int, error) { + return soc.SendBytes([]byte(data), flags, options...) +} + +/* +Send a message part on a socket. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-send#toc2 +*/ +func (soc *Socket) SendBytes(data []byte, flags Flag, options ...interface{}) (int, error) { + if !soc.opened { + return 0, ErrorSocketClosed + } + if len(options) == 0 { + d := data + if len(data) == 0 { + d = []byte{0} + } + size, err := C.zmq_send(soc.soc, unsafe.Pointer(&d[0]), C.size_t(len(data)), C.int(flags)) + if size < 0 { + return int(size), errget(err) + } + return int(size), nil + } + if !has42draft { + return 0, ErrorNotImplemented42draft + } + + var msg C.zmq_msg_t + rc, err := C.zmq_msg_init_size(&msg, C.size_t(len(data))) + if rc != 0 { + return int(rc), errget(err) + } + defer C.zmq_msg_close(&msg) + + C.zmq4_memcpy(C.zmq_msg_data(&msg), unsafe.Pointer(&data[0]), C.size_t(len(data))) + + for _, option := range options { + switch t := option.(type) { + case OptRoutingId: + id := C.uint32_t(uint32(t)) + rc, err := C.zmq_msg_set_routing_id(&msg, id) + if rc != 0 { + return int(rc), errget(err) + } + case OptGroup: + s := C.CString(string(t)) + rc, err := C.zmq_msg_set_group(&msg, s) + C.free(unsafe.Pointer(s)) + if rc != 0 { + return int(rc), errget(err) + } + default: + return 0, fmt.Errorf("Invalid message option: %#v", option) + } + } + + size, err := C.zmq_msg_send(&msg, soc.soc, C.int(flags)) + if size < 0 { + return int(size), errget(err) + } + return int(size), nil +} + +/* +Register a monitoring callback. + +See: http://api.zeromq.org/4-1:zmq-socket-monitor#toc2 + +WARNING: Closing a context with a monitoring callback will lead to random crashes. +This is a bug in the ZeroMQ library. +The monitoring callback has the same context as the socket it was created for. + +Example: + + package main + + import ( + zmq "github.com/pebbe/zmq4" + "log" + "time" + ) + + func rep_socket_monitor(addr string) { + s, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + log.Fatalln(err) + } + err = s.Connect(addr) + if err != nil { + log.Fatalln(err) + } + for { + a, b, c, err := s.RecvEvent(0) + if err != nil { + log.Println(err) + break + } + log.Println(a, b, c) + } + s.Close() + } + + func main() { + + // REP socket + rep, err := zmq.NewSocket(zmq.REP) + if err != nil { + log.Fatalln(err) + } + + // REP socket monitor, all events + err = rep.Monitor("inproc://monitor.rep", zmq.EVENT_ALL) + if err != nil { + log.Fatalln(err) + } + go rep_socket_monitor("inproc://monitor.rep") + + // Generate an event + rep.Bind("tcp://*:5555") + if err != nil { + log.Fatalln(err) + } + + // Allow some time for event detection + time.Sleep(time.Second) + + rep.Close() + zmq.Term() + } +*/ +func (soc *Socket) Monitor(addr string, events Event) error { + if !soc.opened { + return ErrorSocketClosed + } + if addr == "" { + if i, err := C.zmq_socket_monitor(soc.soc, nil, C.int(events)); i != 0 { + return errget(err) + } + return nil + } + + s := C.CString(addr) + defer C.free(unsafe.Pointer(s)) + if i, err := C.zmq_socket_monitor(soc.soc, s, C.int(events)); i != 0 { + return errget(err) + } + return nil +} + +/* +Receive a message part from a socket interpreted as an event. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + +For a description of event_type, see: http://api.zeromq.org/4-1:zmq-socket-monitor#toc3 + +For an example, see: func (*Socket) Monitor +*/ +func (soc *Socket) RecvEvent(flags Flag) (event_type Event, addr string, value int, err error) { + if !soc.opened { + return EVENT_ALL, "", 0, ErrorSocketClosed + } + var msg C.zmq_msg_t + if i, e := C.zmq_msg_init(&msg); i != 0 { + err = errget(e) + return + } + defer C.zmq_msg_close(&msg) + size, e := C.zmq_msg_recv(&msg, soc.soc, C.int(flags)) + if size < 0 { + err = errget(e) + return + } + et := C.int(0) + val := C.int(0) + + if minor == 0 { + C.zmq4_get_event40(&msg, &et, &val) + } else { + C.zmq4_get_event41(&msg, &et, &val) + } + more, e := soc.GetRcvmore() + if e != nil { + err = errget(e) + return + } + if !more { + err = ErrorMoreExpected + return + } + addr, e = soc.Recv(flags) + if e != nil { + err = errget(e) + return + } + + event_type = Event(et) + value = int(val) + + return +} + +/* +Start built-in ØMQ proxy + +See: http://api.zeromq.org/4-1:zmq-proxy#toc2 +*/ +func Proxy(frontend, backend, capture *Socket) error { + if !(frontend.opened && backend.opened && (capture == nil || capture.opened)) { + return ErrorSocketClosed + } + var capt unsafe.Pointer + if capture != nil { + capt = capture.soc + } + _, err := C.zmq_proxy(frontend.soc, backend.soc, capt) + return errget(err) +} + +/* +Start built-in ØMQ proxy with PAUSE/RESUME/TERMINATE control flow + +Returns ErrorNotImplemented405 with ZeroMQ version < 4.0.5 + +See: http://api.zeromq.org/4-1:zmq-proxy-steerable#toc2 +*/ +func ProxySteerable(frontend, backend, capture, control *Socket) error { + if minor == 0 && patch < 5 { + return ErrorNotImplemented405 + } + if !(frontend.opened && backend.opened && (capture == nil || capture.opened) && (control == nil || control.opened)) { + return ErrorSocketClosed + } + var capt, ctrl unsafe.Pointer + if capture != nil { + capt = capture.soc + } + if control != nil { + ctrl = control.soc + } + i, err := C.zmq_proxy_steerable(frontend.soc, backend.soc, capt, ctrl) + if i < 0 { + return errget(err) + } + return nil +} + +//. CURVE + +/* +Encode a binary key as Z85 printable text + +See: http://api.zeromq.org/4-1:zmq-z85-encode +*/ +func Z85encode(data string) string { + if initVersionError != nil { + return initVersionError.Error() + } + l1 := len(data) + if l1%4 != 0 { + panic("Z85encode: Length of data not a multiple of 4") + } + d := []byte(data) + + l2 := 5 * l1 / 4 + dest := make([]byte, l2+1) + + C.zmq_z85_encode((*C.char)(unsafe.Pointer(&dest[0])), (*C.uint8_t)(&d[0]), C.size_t(l1)) + + return string(dest[:l2]) +} + +/* +Decode a binary key from Z85 printable text + +See: http://api.zeromq.org/4-1:zmq-z85-decode +*/ +func Z85decode(s string) string { + if initVersionError != nil { + return initVersionError.Error() + } + l1 := len(s) + if l1%5 != 0 { + panic("Z85decode: Length of Z85 string not a multiple of 5") + } + l2 := 4 * l1 / 5 + dest := make([]byte, l2) + cs := C.CString(s) + defer C.free(unsafe.Pointer(cs)) + C.zmq_z85_decode((*C.uint8_t)(&dest[0]), cs) + return string(dest) +} + +/* +Generate a new CURVE keypair + +See: http://api.zeromq.org/4-1:zmq-curve-keypair#toc2 +*/ +func NewCurveKeypair() (z85_public_key, z85_secret_key string, err error) { + if initVersionError != nil { + return "", "", initVersionError + } + var pubkey, seckey [41]byte + if i, err := C.zmq_curve_keypair((*C.char)(unsafe.Pointer(&pubkey[0])), (*C.char)(unsafe.Pointer(&seckey[0]))); i != 0 { + return "", "", errget(err) + } + return string(pubkey[:40]), string(seckey[:40]), nil +} + +/* +Receive a message part with metadata. + +This requires ZeroMQ version 4.1.0. Lower versions will return the message part without metadata. + +The returned metadata map contains only those properties that exist on the message. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + +For a description of metadata, see: http://api.zeromq.org/4-1:zmq-msg-gets#toc3 +*/ +func (soc *Socket) RecvWithMetadata(flags Flag, properties ...string) (msg string, metadata map[string]string, err error) { + b, p, err := soc.RecvBytesWithMetadata(flags, properties...) + return string(b), p, err +} + +/* +Receive a message part with metadata. + +This requires ZeroMQ version 4.1.0. Lower versions will return the message part without metadata. + +The returned metadata map contains only those properties that exist on the message. + +For a description of flags, see: http://api.zeromq.org/4-1:zmq-msg-recv#toc2 + +For a description of metadata, see: http://api.zeromq.org/4-1:zmq-msg-gets#toc3 +*/ +func (soc *Socket) RecvBytesWithMetadata(flags Flag, properties ...string) (msg []byte, metadata map[string]string, err error) { + if !soc.opened { + return []byte{}, map[string]string{}, ErrorSocketClosed + } + + metadata = make(map[string]string) + + var m C.zmq_msg_t + if i, err := C.zmq_msg_init(&m); i != 0 { + return []byte{}, metadata, errget(err) + } + defer C.zmq_msg_close(&m) + + size, err := C.zmq_msg_recv(&m, soc.soc, C.int(flags)) + if size < 0 { + return []byte{}, metadata, errget(err) + } + + data := make([]byte, int(size)) + if size > 0 { + C.zmq4_memcpy(unsafe.Pointer(&data[0]), C.zmq_msg_data(&m), C.size_t(size)) + } + + if minor > 0 { + for _, p := range properties { + ps := C.CString(p) + s, err := C.zmq_msg_gets(&m, ps) + if err == nil { + metadata[p] = C.GoString(s) + } + C.free(unsafe.Pointer(ps)) + } + } + return data, metadata, nil +} + +func hasCap(s string) (value bool) { + if initVersionError != nil { + return false + } + if minor < 1 { + return false + } + cs := C.CString(s) + defer C.free(unsafe.Pointer(cs)) + return C.zmq_has(cs) != 0 +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the ipc:// protocol +func HasIpc() bool { + return hasCap("ipc") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the pgm:// protocol +func HasPgm() bool { + return hasCap("pgm") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the tipc:// protocol +func HasTipc() bool { + return hasCap("tipc") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the norm:// protocol +func HasNorm() bool { + return hasCap("norm") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the CURVE security mechanism +func HasCurve() bool { + return hasCap("curve") +} + +// Returns false for ZeroMQ version < 4.1.0 +// +// Else: returns true if the library supports the GSSAPI security mechanism +func HasGssapi() bool { + return hasCap("gssapi") +} diff --git a/vendor/github.com/pebbe/zmq4/draft/zmq4.h b/vendor/github.com/pebbe/zmq4/draft/zmq4.h new file mode 100644 index 0000000..ef4b523 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/zmq4.h @@ -0,0 +1,55 @@ +#if ZMQ_VERSION_MAJOR != 4 + +#error "You need ZeroMQ version 4 to build this" + +#endif + +#if ZMQ_VERSION_MINOR < 1 + +#define ZMQ_CONNECT_RID -1 +#define ZMQ_GSSAPI -1 +#define ZMQ_GSSAPI_PLAINTEXT -1 +#define ZMQ_GSSAPI_PRINCIPAL -1 +#define ZMQ_GSSAPI_SERVER -1 +#define ZMQ_GSSAPI_SERVICE_PRINCIPAL -1 +#define ZMQ_HANDSHAKE_IVL -1 +#define ZMQ_IPC_FILTER_GID -1 +#define ZMQ_IPC_FILTER_PID -1 +#define ZMQ_IPC_FILTER_UID -1 +#define ZMQ_ROUTER_HANDOVER -1 +#define ZMQ_SOCKS_PROXY -1 +#define ZMQ_THREAD_PRIORITY -1 +#define ZMQ_THREAD_SCHED_POLICY -1 +#define ZMQ_TOS -1 +#define ZMQ_XPUB_NODROP -1 + +#endif + +#if ZMQ_VERSION_MINOR < 2 + +#define ZMQ_MAX_MSGSZ -1 + +#define ZMQ_BLOCKY -1 +#define ZMQ_XPUB_MANUAL -1 +#define ZMQ_XPUB_WELCOME_MSG -1 +#define ZMQ_STREAM_NOTIFY -1 +#define ZMQ_INVERT_MATCHING -1 +#define ZMQ_HEARTBEAT_IVL -1 +#define ZMQ_HEARTBEAT_TTL -1 +#define ZMQ_HEARTBEAT_TIMEOUT -1 +#define ZMQ_XPUB_VERBOSER -1 +#define ZMQ_CONNECT_TIMEOUT -1 +#define ZMQ_TCP_MAXRT -1 +#define ZMQ_THREAD_SAFE -1 +#define ZMQ_MULTICAST_MAXTPDU -1 +#define ZMQ_VMCI_BUFFER_SIZE -1 +#define ZMQ_VMCI_BUFFER_MIN_SIZE -1 +#define ZMQ_VMCI_BUFFER_MAX_SIZE -1 +#define ZMQ_VMCI_CONNECT_TIMEOUT -1 +#define ZMQ_USE_FD -1 + +#define ZMQ_GROUP_MAX_LENGTH -1 + +#define ZMQ_POLLPRI -1 + +#endif diff --git a/vendor/github.com/pebbe/zmq4/draft/zmq41_test.go b/vendor/github.com/pebbe/zmq4/draft/zmq41_test.go new file mode 100644 index 0000000..a1d6f8b --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/zmq41_test.go @@ -0,0 +1,74 @@ +package zmq4_test + +import ( + zmq "github.com/pebbe/zmq4/draft" + + "testing" +) + +func TestRemoteEndpoint(t *testing.T) { + + if _, minor, _ := zmq.Version(); minor < 1 { + t.Skip("RemoteEndpoint not avalable in ZeroMQ versions prior to 4.1.0") + } + + addr := "tcp://127.0.0.1:9560" + peer := "127.0.0.1" + + var rep, req *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{rep, req} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + rep, err := zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + req, err = zmq.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("NewSocket:", err) + } + + if err = rep.Bind(addr); err != nil { + t.Fatal("rep.Bind:", err) + } + if err = req.Connect(addr); err != nil { + t.Fatal("req.Connect:", err) + } + + tmp := "test" + if _, err = req.Send(tmp, 0); err != nil { + t.Fatal("req.Send:", err) + } + + // get message with peer address (remote endpoint) + msg, props, err := rep.RecvWithMetadata(0, "Peer-Address") + if err != nil { + t.Fatal("rep.RecvWithMetadata:", err) + return + } + if msg != tmp { + t.Errorf("rep.RecvWithMetadata: expected %q, got %q", tmp, msg) + } + + if p := props["Peer-Address"]; p != peer { + t.Errorf("rep.RecvWithMetadata: expected Peer-Address == %q, got %q", peer, p) + } + + err = rep.Close() + rep = nil + if err != nil { + t.Fatal("rep.Close:", err) + } + + err = req.Close() + req = nil + if err != nil { + t.Fatal("req.Close:", err) + } +} diff --git a/vendor/github.com/pebbe/zmq4/draft/zmq42draft.go b/vendor/github.com/pebbe/zmq4/draft/zmq42draft.go new file mode 100644 index 0000000..53e867c --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/zmq42draft.go @@ -0,0 +1,67 @@ +package zmq4 + +/* +#include +#include +#include +#include "zmq4.h" +#include "zmq42draft.h" + +#ifdef ZMQ42HASDRAFT +int zmq4has42draft = 1; +#else +int zmq4has42draft = 0; +// Version >= 4.2.0 with draft + +int zmq_join (void *s, const char *group) { return 0; } +int zmq_leave (void *s, const char *group) { return 0; } +int zmq_msg_set_routing_id(zmq_msg_t *msg, uint32_t routing_id) { return 0; } +uint32_t zmq_msg_routing_id(zmq_msg_t *msg) { return 0; } +int zmq_msg_set_group(zmq_msg_t *msg, const char *group) { return 0; } +const char *zmq_msg_group(zmq_msg_t *msg) { return NULL; } + +#endif // ZMQ42HASDRAFT + +*/ +import "C" + +import ( + "unsafe" +) + +type OptRoutingId uint32 +type OptGroup string + +var ( + has42draft bool +) + +func init() { + has42draft = (C.zmq4has42draft != 0) +} + +func (soc *Socket) Join(group string) error { + if !has42draft { + return ErrorNotImplemented42draft + } + cs := C.CString(group) + defer C.free(unsafe.Pointer(cs)) + n, err := C.zmq_join(soc.soc, cs) + if n != 0 { + return errget(err) + } + return nil +} + +func (soc *Socket) Leave(group string) error { + if !has42draft { + return ErrorNotImplemented42draft + } + cs := C.CString(group) + defer C.free(unsafe.Pointer(cs)) + n, err := C.zmq_leave(soc.soc, cs) + if n != 0 { + return errget(err) + } + return nil +} diff --git a/vendor/github.com/pebbe/zmq4/draft/zmq42draft.h b/vendor/github.com/pebbe/zmq4/draft/zmq42draft.h new file mode 100644 index 0000000..ad35fd2 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/zmq42draft.h @@ -0,0 +1,15 @@ +#if ZMQ_VERSION_MINOR == 2 +#ifdef ZMQ_BUILD_DRAFT_API +#define ZMQ42HASDRAFT +#endif +#endif + +#ifndef ZMQ42HASDRAFT +#define ZMQ_SERVER -12 +#define ZMQ_CLIENT -13 +#define ZMQ_RADIO -14 +#define ZMQ_DISH -15 +#define ZMQ_GATHER -16 +#define ZMQ_SCATTER -17 +#define ZMQ_DGRAM -18 +#endif diff --git a/vendor/github.com/pebbe/zmq4/draft/zmq42draft_test.go b/vendor/github.com/pebbe/zmq4/draft/zmq42draft_test.go new file mode 100644 index 0000000..138efc4 --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/zmq42draft_test.go @@ -0,0 +1,152 @@ +package zmq4_test + +import ( + zmq "github.com/pebbe/zmq4/draft" + + "testing" + "time" +) + +func TestUdp(t *testing.T) { + + if _, minor, _ := zmq.Version(); minor < 2 { + t.Skip("Sockets RADIO and DISH need ZeroMQ 4.2 with draft enabled") + } + + ctx, err := zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + defer ctx.Term() + + radio, err := ctx.NewSocket(zmq.RADIO) + if err != nil { + t.Fatal("NewSocket RADIO:", err) + } + defer radio.Close() + dish, err := ctx.NewSocket(zmq.DISH) + if err != nil { + t.Fatal("NewSocket DISH:", err) + } + defer dish.Close() + + // Connecting dish should fail + err = dish.Connect("udp://127.0.0.1:5556") + if err == nil { + t.Fatal("Expected fail on dish.Connect") + } + + err = dish.Bind("udp://*:5556") + if err != nil { + t.Fatal("dish.Bind:", err) + } + + // Bind radio should fail + err = radio.Bind("udp://*:5556") + if err == nil { + t.Fatal("Expected fail on radio.Bind") + } + + err = radio.Connect("udp://127.0.0.1:5556") + if err != nil { + t.Fatal("radio.Connect:", err) + } + + time.Sleep(300 * time.Millisecond) + + err = dish.Join("TV") + if err != nil { + t.Fatal("dish.Join:", err) + } + + _, err = radio.Send("Friends", 0, zmq.OptGroup("TV")) + if err != nil { + t.Fatal("radio.SendMessage:", err) + } + + msg, opt, err := dish.RecvWithOpts(0, zmq.OptGroup("")) + if err != nil { + t.Fatal("dish.RecvWithOpt:", err) + } + if len(opt) != 1 { + t.Fatal("dish.RecvWithOpt: wrong number off options") + } + if string(opt[0].(zmq.OptGroup)) != "TV" { + t.Fatal("dish.RecvWithOpt: wrong group: %v", string(opt[0].(zmq.OptGroup))) + } + if msg != "Friends" { + t.Fatal("dish.RecvWithOpt: wrong message: %q", msg) + } +} + +func TestClientServer(t *testing.T) { + + if _, minor, _ := zmq.Version(); minor < 2 { + t.Skip("Sockets CLIENT and SERVER need ZeroMQ 4.2 with draft enabled") + } + + ctx, err := zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + defer ctx.Term() + + server, err := ctx.NewSocket(zmq.SERVER) + if err != nil { + t.Fatal("NewSocket SERVER:", err) + } + defer server.Close() + client, err := ctx.NewSocket(zmq.CLIENT) + if err != nil { + t.Fatal("NewSocket CLIENT:", err) + } + defer client.Close() + + addr := "tcp://127.0.0.1:9797" + err = server.Bind(addr) + if err != nil { + t.Fatal("server.Bind:", err) + } + err = client.Connect(addr) + if err != nil { + t.Fatal("client.Connect:", err) + } + + content := "12345678ABCDEFGH12345678abcdefgh" + rc, err := client.Send(content, zmq.DONTWAIT) + if err != nil { + t.Fatal("client.Send DONTWAIT: ", err) + } + if rc != 32 { + t.Fatal("client.Send DONTWAIT: ", err32) + } + + msg, opts, err := server.RecvWithOpts(0, zmq.OptRoutingId(0)) + if err != nil { + t.Fatal("server.Recv: ", err) + } + // Check that message is still the same + if msg != content { + t.Fatal("server.Recv: %q != %q", msg, content) + } + + rc, err = server.Send(content, 0, opts[0]) + if err != nil { + t.Fatal("server.Send:", err) + } + if rc != 32 { + t.Fatal("server.Send: ", err32) + } + + // Receive message at client side + msg, err = client.Recv(0) + if err != nil { + t.Fatal("client.Recv: ", err) + } + + // Check that message is still the same + if msg != content { + t.Fatalf("client.Recv: %q != %q", msg, content) + } + +} diff --git a/vendor/github.com/pebbe/zmq4/draft/zmq4_test.go b/vendor/github.com/pebbe/zmq4/draft/zmq4_test.go new file mode 100644 index 0000000..b1e706e --- /dev/null +++ b/vendor/github.com/pebbe/zmq4/draft/zmq4_test.go @@ -0,0 +1,2044 @@ +package zmq4_test + +import ( + zmq "github.com/pebbe/zmq4/draft" + + "errors" + "fmt" + "runtime" + "strconv" + "testing" + "time" +) + +var ( + err32 = errors.New("rc != 32") +) + +func TestVersion(t *testing.T) { + major, _, _ := zmq.Version() + if major != 4 { + t.Errorf("Expected major version 4, got %d", major) + } +} + +func TestMultipleContexts(t *testing.T) { + + chQuit := make(chan interface{}) + chErr := make(chan error, 2) + needQuit := false + var sock1, sock2, serv1, serv2 *zmq.Socket + var serv_ctx1, serv_ctx2, ctx1, ctx2 *zmq.Context + var err error + + defer func() { + if needQuit { + chQuit <- true + chQuit <- true + <-chErr + <-chErr + } + for _, s := range []*zmq.Socket{sock1, sock2, serv1, serv2} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + for _, c := range []*zmq.Context{serv_ctx1, serv_ctx2, ctx1, ctx2} { + if c != nil { + c.Term() + } + } + }() + + addr1 := "tcp://127.0.0.1:9997" + addr2 := "tcp://127.0.0.1:9998" + + serv_ctx1, err = zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + serv1, err = serv_ctx1.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = serv1.Bind(addr1) + if err != nil { + t.Fatal("Bind:", err) + } + + serv_ctx2, err = zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + serv2, err = serv_ctx2.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = serv2.Bind(addr2) + if err != nil { + t.Fatal("Bind:", err) + } + + new_service := func(sock *zmq.Socket, addr string) { + socket_handler := func(state zmq.State) error { + msg, err := sock.RecvMessage(0) + if err != nil { + return err + } + _, err = sock.SendMessage(addr, msg) + return err + } + quit_handler := func(interface{}) error { + return errors.New("quit") + } + + reactor := zmq.NewReactor() + reactor.AddSocket(sock, zmq.POLLIN, socket_handler) + reactor.AddChannel(chQuit, 1, quit_handler) + err = reactor.Run(100 * time.Millisecond) + chErr <- err + } + + go new_service(serv1, addr1) + go new_service(serv2, addr2) + needQuit = true + + time.Sleep(time.Second) + + // default context + + sock1, err = zmq.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("NewSocket:", err) + } + sock2, err = zmq.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = sock1.Connect(addr1) + if err != nil { + t.Fatal("sock1.Connect:", err) + } + err = sock2.Connect(addr2) + if err != nil { + t.Fatal("sock2.Connect:", err) + } + _, err = sock1.SendMessage(addr1) + if err != nil { + t.Fatal("sock1.SendMessage:", err) + } + _, err = sock2.SendMessage(addr2) + if err != nil { + t.Fatal("sock2.SendMessage:", err) + } + msg, err := sock1.RecvMessage(0) + expected := []string{addr1, addr1} + if err != nil || !arrayEqual(msg, expected) { + t.Errorf("sock1.RecvMessage: expected %v %v, got %v %v", nil, expected, err, msg) + } + msg, err = sock2.RecvMessage(0) + expected = []string{addr2, addr2} + if err != nil || !arrayEqual(msg, expected) { + t.Errorf("sock2.RecvMessage: expected %v %v, got %v %v", nil, expected, err, msg) + } + err = sock1.Close() + sock1 = nil + if err != nil { + t.Fatal("sock1.Close:", err) + } + err = sock2.Close() + sock2 = nil + if err != nil { + t.Fatal("sock2.Close:", err) + } + + // non-default contexts + + ctx1, err = zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + ctx2, err = zmq.NewContext() + if err != nil { + t.Fatal("NewContext:", err) + } + sock1, err = ctx1.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("ctx1.NewSocket:", err) + } + sock2, err = ctx2.NewSocket(zmq.REQ) + if err != nil { + t.Fatal("ctx2.NewSocket:", err) + } + err = sock1.Connect(addr1) + if err != nil { + t.Fatal("sock1.Connect:", err) + } + err = sock2.Connect(addr2) + if err != nil { + t.Fatal("sock2.Connect:", err) + } + _, err = sock1.SendMessage(addr1) + if err != nil { + t.Fatal("sock1.SendMessage:", err) + } + _, err = sock2.SendMessage(addr2) + if err != nil { + t.Fatal("sock2.SendMessage:", err) + } + msg, err = sock1.RecvMessage(0) + expected = []string{addr1, addr1} + if err != nil || !arrayEqual(msg, expected) { + t.Errorf("sock1.RecvMessage: expected %v %v, got %v %v", nil, expected, err, msg) + } + msg, err = sock2.RecvMessage(0) + expected = []string{addr2, addr2} + if err != nil || !arrayEqual(msg, expected) { + t.Errorf("sock2.RecvMessage: expected %v %v, got %v %v", nil, expected, err, msg) + } + err = sock1.Close() + sock1 = nil + if err != nil { + t.Fatal("sock1.Close:", err) + } + err = sock2.Close() + sock2 = nil + if err != nil { + t.Fatal("sock2.Close:", err) + } + + err = ctx1.Term() + ctx1 = nil + if err != nil { + t.Fatal("ctx1.Term", nil) + } + err = ctx2.Term() + ctx1 = nil + if err != nil { + t.Fatal("ctx2.Term", nil) + } + + needQuit = false + for i := 0; i < 2; i++ { + // close(chQuit) doesn't work because the reactor removes closed channels, instead of acting on them + chQuit <- true + err = <-chErr + if err.Error() != "quit" { + t.Errorf("Expected error value quit, got %v", err) + } + } +} + +func TestAbstractIpc(t *testing.T) { + + var sb, sc *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{sb, sc} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + addr := "ipc://@/tmp/tester" + + // This is Linux only + if runtime.GOOS != "linux" { + t.Skip("Only on Linux") + } + + sb, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sb.Bind(addr) + if err != nil { + t.Fatal("sb.Bind:", err) + } + + endpoint, err := sb.GetLastEndpoint() + expected := "ipc://@/tmp/tester" + if endpoint != expected || err != nil { + t.Fatalf("sb.GetLastEndpoint: expected 'nil' %q, got '%v' %q", expected, err, endpoint) + return + } + + sc, err = zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = sc.Connect(addr) + if err != nil { + t.Fatal("sc.Bind:", err) + } + + resp, err := bounce(sb, sc) + if err != nil { + t.Error(resp, err) + } + + err = sc.Close() + sc = nil + if err != nil { + t.Fatal("sc.Close:", err) + } + + err = sb.Close() + sb = nil + if err != nil { + t.Fatal("sb.Close:", err) + } +} + +func TestConflate(t *testing.T) { + + var s_in, s_out *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{s_in, s_out} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + bind_to := "tcp://127.0.0.1:5555" + + err := zmq.SetIoThreads(1) + if err != nil { + t.Fatal("SetIoThreads(1):", err) + } + + s_in, err = zmq.NewSocket(zmq.PULL) + if err != nil { + t.Fatal("NewSocket 1:", err) + } + + err = s_in.SetConflate(true) + if err != nil { + t.Fatal("SetConflate(true):", err) + } + + err = s_in.Bind(bind_to) + if err != nil { + t.Fatal("s_in.Bind:", err) + } + + s_out, err = zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Fatal("NewSocket 2:", err) + } + + err = s_out.Connect(bind_to) + if err != nil { + t.Fatal("s_out.Connect:", err) + } + + message_count := 20 + + for j := 0; j < message_count; j++ { + _, err = s_out.Send(fmt.Sprint(j), 0) + if err != nil { + t.Fatalf("s_out.Send %d: %v", j, err) + } + } + + time.Sleep(time.Second) + + payload_recved, err := s_in.Recv(0) + if err != nil { + t.Error("s_in.Recv:", err) + } else { + i, err := strconv.Atoi(payload_recved) + if err != nil { + t.Error("strconv.Atoi:", err) + } + if i != message_count-1 { + t.Error("payload_recved != message_count - 1") + } + } + + err = s_in.Close() + s_in = nil + if err != nil { + t.Error("s_in.Close:", err) + } + + err = s_out.Close() + s_out = nil + if err != nil { + t.Error("s_out.Close:", err) + } +} + +func TestConnectResolve(t *testing.T) { + + sock, err := zmq.NewSocket(zmq.PUB) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer func() { + if sock != nil { + sock.SetLinger(0) + sock.Close() + } + }() + + err = sock.Connect("tcp://localhost:1234") + if err != nil { + t.Error("sock.Connect:", err) + } + + fails := []string{ + "tcp://localhost:invalid", + "tcp://in val id:1234", + "invalid://localhost:1234", + } + for _, fail := range fails { + if err = sock.Connect(fail); err == nil { + t.Errorf("Connect %s, expected fail, got success", fail) + } + } + + err = sock.Close() + sock = nil + if err != nil { + t.Error("sock.Close:", err) + } +} + +func TestCtxOptions(t *testing.T) { + + type Result struct { + value interface{} + err error + } + + i, err := zmq.GetMaxSockets() + if err != nil { + t.Error("GetMaxSockets:", err) + } + if i != zmq.MaxSocketsDflt { + t.Errorf("MaxSockets != MaxSocketsDflt: %d != %d", i, zmq.MaxSocketsDflt) + } + + i, err = zmq.GetIoThreads() + if err != nil { + t.Error("GetIoThreads:", err) + } + if i != zmq.IoThreadsDflt { + t.Errorf("IoThreads != IoThreadsDflt: %d != %d", i, zmq.IoThreadsDflt) + } + + b, err := zmq.GetIpv6() + if b != false || err != nil { + t.Errorf("GetIpv6 1: expected false , got %v %v", b, err) + } + + zmq.SetIpv6(true) + defer zmq.SetIpv6(false) + b, err = zmq.GetIpv6() + if b != true || err != nil { + t.Errorf("GetIpv6 2: expected true , got %v %v", b, err) + } + + router, _ := zmq.NewSocket(zmq.ROUTER) + b, err = router.GetIpv6() + if b != true || err != nil { + t.Errorf("GetIpv6 3: expected true , got %v %v", b, err) + } + router.Close() +} + +func TestDisconnectInproc(t *testing.T) { + + var pubSocket, subSocket *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{pubSocket, subSocket} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + publicationsReceived := 0 + isSubscribed := false + + pubSocket, err := zmq.NewSocket(zmq.XPUB) + if err != nil { + t.Fatal("NewSocket XPUB:", err) + } + subSocket, err = zmq.NewSocket(zmq.SUB) + if err != nil { + t.Fatal("NewSocket SUB:", err) + } + err = subSocket.SetSubscribe("foo") + if err != nil { + t.Fatal("subSocket.SetSubscribe:", err) + } + + err = pubSocket.Bind("inproc://someInProcDescriptor") + if err != nil { + t.Fatal("pubSocket.Bind:", err) + } + + iteration := 0 + + poller := zmq.NewPoller() + poller.Add(subSocket, zmq.POLLIN) // read publications + poller.Add(pubSocket, zmq.POLLIN) // read subscriptions + for { + sockets, err := poller.Poll(100 * time.Millisecond) + if err != nil { + t.Error("Poll:", err) + break // Interrupted + } + + for _, socket := range sockets { + if socket.Socket == pubSocket { + for { + buffer, err := pubSocket.Recv(0) + if err != nil { + t.Fatal("pubSocket.Recv", err) + } + exp := "\x01foo" + if isSubscribed { + exp = "\x00foo" + } + if buffer != exp { + t.Errorf("pubSocket.Recv: expected %q, got %q", exp, buffer) + } + + if buffer[0] == 0 { + if isSubscribed != true { + t.Errorf("Poller: expected subscribed") + } + isSubscribed = false + } else { + if isSubscribed != false { + t.Errorf("Poller: expected not subscribed") + } + isSubscribed = true + } + + more, err := pubSocket.GetRcvmore() + if err != nil { + t.Fatal("pubSocket.GetRcvmore:", err) + } + if !more { + break // Last message part + } + } + break + } + } + + for _, socket := range sockets { + if socket.Socket == subSocket { + for _, exp := range []string{"foo", "this is foo!", "", ""} { + msg, err := subSocket.Recv(0) + if err != nil { + t.Fatal("subSocket.Recv:", err) + } + if msg != exp { + t.Errorf("subSocket.Recv: expected %q, got %q", exp, msg) + } + more, err := subSocket.GetRcvmore() + if err != nil { + t.Fatal("subSocket.GetRcvmore:", err) + } + if !more { + publicationsReceived++ + break // Last message part + } + + } + break + } + } + + if iteration == 1 { + err := subSocket.Connect("inproc://someInProcDescriptor") + if err != nil { + t.Fatal("subSocket.Connect", err) + } + } + if iteration == 4 { + err := subSocket.Disconnect("inproc://someInProcDescriptor") + if err != nil { + t.Fatal("subSocket.Disconnect", err) + } + } + if iteration > 4 && len(sockets) == 0 { + break + } + + _, err = pubSocket.Send("foo", zmq.SNDMORE) + if err != nil { + t.Fatal("pubSocket.Send 1", err) + } + _, err = pubSocket.Send("this is foo!", 0) + if err != nil { + t.Fatal("pubSocket.Send 2", err) + } + + iteration++ + + } + + if publicationsReceived != 3 { + t.Error("publicationsReceived != 3 ") + } + if isSubscribed { + t.Error("isSubscribed") + } + + err = pubSocket.Close() + pubSocket = nil + if err != nil { + t.Error("pubSocket.Close:", err) + } + err = subSocket.Close() + subSocket = nil + if err != nil { + t.Error("subSocket.Close:", err) + } +} + +func TestFork(t *testing.T) { + + address := "tcp://127.0.0.1:6571" + NUM_MESSAGES := 5 + + // Create and bind pull socket to receive messages + pull, err := zmq.NewSocket(zmq.PULL) + if err != nil { + t.Fatal("NewSocket:", err) + } + defer func() { + if pull != nil { + pull.SetLinger(0) + pull.Close() + } + }() + err = pull.Bind(address) + if err != nil { + t.Fatal("pull.Bind:", err) + } + + ready := make(chan bool) + + go func() { + defer func() { + close(ready) + }() + + // Create new socket, connect and send some messages + + push, err := zmq.NewSocket(zmq.PUSH) + //err = fmt.Errorf("DUMMY ERROR") + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := push.Close() + if err != nil { + t.Error("push.Close:", err) + } + }() + + err = push.Connect(address) + if err != nil { + t.Error("push.Connect:", err) + return + } + + for count := 0; count < NUM_MESSAGES; count++ { + ready <- true + _, err = push.Send("Hello", 0) + if err != nil { + t.Error("push.Send:", err) + return + } + } + + }() + + for { + if r := <-ready; !r { + break + } + msg, err := pull.Recv(0) + if err != nil { + t.Error("pull.Recv:", err) + } + if msg != "Hello" { + t.Errorf("pull.Recv: expected \"Hello\", got %q", msg) + } + } + + err = pull.Close() + pull = nil + if err != nil { + t.Error("pull.Close", err) + } + + <-ready // false +} + +func TestHwm(t *testing.T) { + + MAX_SENDS := 10000 + BIND_FIRST := 1 + CONNECT_FIRST := 2 + + test_defaults := func() (result int) { + + result = -1 + + // Set up bind socket + bind_socket, err := zmq.NewSocket(zmq.PULL) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := bind_socket.Close() + if err != nil { + t.Error("bind_socket.Close:", err) + } + }() + + err = bind_socket.Bind("inproc://a") + if err != nil { + t.Error("bind_socket.Bind:", err) + return + } + + // Set up connect socket + connect_socket, err := zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := connect_socket.Close() + if err != nil { + t.Error("connect_socket.Close:", err) + } + }() + + err = connect_socket.Connect("inproc://a") + if err != nil { + t.Error("connect_socket.Connect:", err) + return + } + + // Send until we block + send_count := 0 + for send_count < MAX_SENDS { + _, err := connect_socket.Send("", zmq.DONTWAIT) + if err != nil { + break + } + send_count++ + } + + // Now receive all sent messages + recv_count := 0 + for { + _, err := bind_socket.Recv(zmq.DONTWAIT) + if err != nil { + break + } + recv_count++ + } + if send_count != recv_count { + t.Error("test_defaults: send_count == recv_count") + } + + return send_count + } + + count_msg := func(send_hwm, recv_hwm, testType int) (result int) { + + result = -1 + + var bind_socket, connect_socket *zmq.Socket + var err error + + if testType == BIND_FIRST { + // Set up bind socket + bind_socket, err = zmq.NewSocket(zmq.PULL) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := bind_socket.Close() + if err != nil { + t.Error("bind_socket.Close:", err) + } + }() + + err = bind_socket.SetRcvhwm(recv_hwm) + if err != nil { + t.Error("bind_socket.SetRcvhwm:", err) + return + } + + err = bind_socket.Bind("inproc://a") + if err != nil { + t.Error("bind_socket.Bind:", err) + return + } + + // Set up connect socket + connect_socket, err = zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := connect_socket.Close() + if err != nil { + t.Error(err) + } + }() + + err = connect_socket.SetSndhwm(send_hwm) + if err != nil { + t.Error("connect_socket.SetSndhwm:", err) + return + } + + err = connect_socket.Connect("inproc://a") + if err != nil { + t.Error("connect_socket.Connect:", err) + return + } + } else { + // Set up connect socket + connect_socket, err = zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := connect_socket.Close() + if err != nil { + t.Error("connect_socket.Close:", err) + } + }() + + err = connect_socket.SetSndhwm(send_hwm) + if err != nil { + t.Error("connect_socket.SetSndhwm:", err) + return + } + + err = connect_socket.Connect("inproc://a") + if err != nil { + t.Error("connect_socket.Connect:", err) + return + } + + // Set up bind socket + bind_socket, err = zmq.NewSocket(zmq.PULL) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := bind_socket.Close() + if err != nil { + t.Error("bind_socket.Close:", err) + } + }() + + err = bind_socket.SetRcvhwm(recv_hwm) + if err != nil { + t.Error("bind_socket.SetRcvhwm:", err) + return + } + + err = bind_socket.Bind("inproc://a") + if err != nil { + t.Error("bind_socket.Bind:", err) + return + } + } + + // Send until we block + send_count := 0 + for send_count < MAX_SENDS { + _, err := connect_socket.Send("", zmq.DONTWAIT) + if err != nil { + break + } + send_count++ + } + + // Now receive all sent messages + recv_count := 0 + for { + _, err := bind_socket.Recv(zmq.DONTWAIT) + if err != nil { + break + } + recv_count++ + } + if send_count != recv_count { + t.Error("count_msg: send_count != recv_count") + } + + // Now it should be possible to send one more. + _, err = connect_socket.Send("", 0) + if err != nil { + t.Error("connect_socket.Send:", err) + return + } + + // Consume the remaining message. + _, err = bind_socket.Recv(0) + if err != nil { + t.Error("bind_socket.Recv:", err) + } + + return send_count + } + + test_inproc_bind_first := func(send_hwm, recv_hwm int) int { + return count_msg(send_hwm, recv_hwm, BIND_FIRST) + } + + test_inproc_connect_first := func(send_hwm, recv_hwm int) int { + return count_msg(send_hwm, recv_hwm, CONNECT_FIRST) + } + + test_inproc_connect_and_close_first := func(send_hwm, recv_hwm int) (result int) { + + result = -1 + + // Set up connect socket + connect_socket, err := zmq.NewSocket(zmq.PUSH) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + if connect_socket != nil { + connect_socket.Close() + } + }() + + err = connect_socket.SetSndhwm(send_hwm) + if err != nil { + t.Error("connect_socket.SetSndhwm:", err) + return + } + + err = connect_socket.Connect("inproc://a") + if err != nil { + t.Error("connect_socket.Connect:", err) + return + } + + // Send until we block + send_count := 0 + for send_count < MAX_SENDS { + _, err := connect_socket.Send("", zmq.DONTWAIT) + if err != nil { + break + } + send_count++ + } + + // Close connect + err = connect_socket.Close() + connect_socket = nil + if err != nil { + t.Error("connect_socket.Close:", err) + return + } + + // Set up bind socket + bind_socket, err := zmq.NewSocket(zmq.PULL) + if err != nil { + t.Error("NewSocket:", err) + return + } + defer func() { + err := bind_socket.Close() + if err != nil { + t.Error("bind_socket.Close:", err) + } + }() + + err = bind_socket.SetRcvhwm(recv_hwm) + if err != nil { + t.Error("bind_socket.SetRcvhwm:", err) + return + } + + err = bind_socket.Bind("inproc://a") + if err != nil { + t.Error("bind_socket.Bind:", err) + return + } + + // Now receive all sent messages + recv_count := 0 + for { + _, err := bind_socket.Recv(zmq.DONTWAIT) + if err != nil { + break + } + recv_count++ + } + if send_count != recv_count { + t.Error("test_inproc_connect_and_close_first: send_count != recv_count") + } + return send_count + } + + // Default values are 1000 on send and 1000 one receive, so 2000 total + if count := test_defaults(); count != 2000 { + t.Errorf("test_defaults: expected 2000, got %d", count) + } + time.Sleep(100 * time.Millisecond) + + // Infinite send and receive buffer + if count := test_inproc_bind_first(0, 0); count != MAX_SENDS { + t.Errorf("test_inproc_bind_first(0, 0): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + if count := test_inproc_connect_first(0, 0); count != MAX_SENDS { + t.Errorf("test_inproc_connect_first(0, 0): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + + // Infinite send buffer + if count := test_inproc_bind_first(1, 0); count != MAX_SENDS { + t.Errorf("test_inproc_bind_first(1, 0): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + if count := test_inproc_connect_first(1, 0); count != MAX_SENDS { + t.Errorf("test_inproc_connect_first(1, 0): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + + // Infinite receive buffer + if count := test_inproc_bind_first(0, 1); count != MAX_SENDS { + t.Errorf("test_inproc_bind_first(0, 1): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + if count := test_inproc_connect_first(0, 1); count != MAX_SENDS { + t.Errorf("test_inproc_connect_first(0, 1): expected %d, got %d", MAX_SENDS, count) + } + time.Sleep(100 * time.Millisecond) + + // Send and recv buffers hwm 1, so total that can be queued is 2 + if count := test_inproc_bind_first(1, 1); count != 2 { + t.Errorf("test_inproc_bind_first(1, 1): expected 2, got %d", count) + } + time.Sleep(100 * time.Millisecond) + if count := test_inproc_connect_first(1, 1); count != 2 { + t.Errorf("test_inproc_connect_first(1, 1): expected 2, got %d", count) + } + time.Sleep(100 * time.Millisecond) + + // Send hwm of 1, send before bind so total that can be queued is 1 + if count := test_inproc_connect_and_close_first(1, 0); count != 1 { + t.Errorf("test_inproc_connect_and_close_first(1, 0): expected 1, got %d", count) + } + time.Sleep(100 * time.Millisecond) +} + +func TestPairIpc(t *testing.T) { + + var sb, sc *zmq.Socket + + defer func() { + for _, s := range []*zmq.Socket{sb, sc} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + sb, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sb.Bind("ipc:///tmp/tester") + if err != nil { + t.Fatal("sb.Bind:", err) + } + + sc, err = zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sc.Connect("ipc:///tmp/tester") + if err != nil { + t.Fatal("sc.Connect:", err) + } + + msg, err := bounce(sb, sc) + if err != nil { + t.Error(msg, err) + } + + err = sc.Close() + sc = nil + if err != nil { + t.Error("sc.Close:", err) + } + + err = sb.Close() + sb = nil + if err != nil { + t.Error("sb.Close:", err) + } +} + +func TestPairTcp(t *testing.T) { + + var sb, sc *zmq.Socket + + defer func() { + for _, s := range []*zmq.Socket{sb, sc} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + sb, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sb.Bind("tcp://127.0.0.1:9736") + if err != nil { + t.Fatal("sb.Bind:", err) + } + + sc, err = zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sc.Connect("tcp://127.0.0.1:9736") + if err != nil { + t.Fatal("sc.Connect:", err) + } + + msg, err := bounce(sb, sc) + + if err != nil { + t.Error(msg, err) + } + + err = sc.Close() + sc = nil + if err != nil { + t.Error("sc.Close:", err) + } + + err = sb.Close() + sb = nil + if err != nil { + t.Error("sb.Close:", err) + } +} + +func TestPoller(t *testing.T) { + + var sb, sc *zmq.Socket + + defer func() { + for _, s := range []*zmq.Socket{sb, sc} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + sb, err := zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sb.Bind("tcp://127.0.0.1:9737") + if err != nil { + t.Fatal("sb.Bind:", err) + } + + sc, err = zmq.NewSocket(zmq.PAIR) + if err != nil { + t.Fatal("NewSocket:", err) + } + + err = sc.Connect("tcp://127.0.0.1:9737") + if err != nil { + t.Fatal("sc.Connect:", err) + } + + poller := zmq.NewPoller() + idxb := poller.Add(sb, 0) + idxc := poller.Add(sc, 0) + if idxb != 0 || idxc != 1 { + t.Errorf("idxb=%d idxc=%d", idxb, idxc) + } + + if pa, err := poller.PollAll(100 * time.Millisecond); err != nil { + t.Error("PollAll 1:", err) + } else if len(pa) != 2 { + t.Errorf("PollAll 1 len = %d", len(pa)) + } else if pa[0].Events != 0 || pa[1].Events != 0 { + t.Errorf("PollAll 1 events = %v, %v", pa[0], pa[1]) + } + + poller.Update(idxb, zmq.POLLOUT) + poller.UpdateBySocket(sc, zmq.POLLIN) + + if pa, err := poller.PollAll(100 * time.Millisecond); err != nil { + t.Error("PollAll 2:", err) + } else if len(pa) != 2 { + t.Errorf("PollAll 2 len = %d", len(pa)) + } else if pa[0].Events != zmq.POLLOUT || pa[1].Events != 0 { + t.Errorf("PollAll 2 events = %v, %v", pa[0], pa[1]) + } + + poller.UpdateBySocket(sb, 0) + + content := "12345678ABCDEFGH12345678ABCDEFGH" + + // Send message from client to server + if rc, err := sb.Send(content, zmq.DONTWAIT); err != nil { + t.Error("sb.Send DONTWAIT:", err) + } else if rc != 32 { + t.Error("sb.Send DONTWAIT:", err32) + } + + if pa, err := poller.PollAll(100 * time.Millisecond); err != nil { + t.Error("PollAll 3:", err) + } else if len(pa) != 2 { + t.Errorf("PollAll 3 len = %d", len(pa)) + } else if pa[0].Events != 0 || pa[1].Events != zmq.POLLIN { + t.Errorf("PollAll 3 events = %v, %v", pa[0], pa[1]) + } + + // Receive message + if msg, err := sc.Recv(zmq.DONTWAIT); err != nil { + t.Error("sb.Recv DONTWAIT:", err) + } else if msg != content { + t.Error("sb.Recv msg != content") + } + + poller.UpdateBySocket(sb, zmq.POLLOUT) + poller.Update(idxc, zmq.POLLIN) + + if pa, err := poller.PollAll(100 * time.Millisecond); err != nil { + t.Error("PollAll 4:", err) + } else if len(pa) != 2 { + t.Errorf("PollAll 4 len = %d", len(pa)) + } else if pa[0].Events != zmq.POLLOUT || pa[1].Events != 0 { + t.Errorf("PollAll 4 events = %v, %v", pa[0], pa[1]) + } + + err = sc.Close() + sc = nil + if err != nil { + t.Error("sc.Close:", err) + } + + err = sb.Close() + sb = nil + if err != nil { + t.Error("sb.Close:", err) + } +} + +func TestSecurityCurve(t *testing.T) { + + time.Sleep(100 * time.Millisecond) + + var handler, server, client *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{handler} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + if _, minor, _ := zmq.Version(); minor >= 1 && !zmq.HasCurve() { + t.Skip("Curve not available") + } + + // Generate new keypairs for this test + client_public, client_secret, err := zmq.NewCurveKeypair() + if err != nil { + t.Fatal("NewCurveKeypair:", err) + } + server_public, server_secret, err := zmq.NewCurveKeypair() + if err != nil { + t.Fatal("NewCurveKeypair:", err) + } + + handler, err = zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = handler.Bind("inproc://zeromq.zap.01") + if err != nil { + t.Fatal("handler.Bind:", err) + } + + doHandler := func(state zmq.State) error { + msg, err := handler.RecvMessage(0) + if err != nil { + return err // Terminating + } + version := msg[0] + sequence := msg[1] + // domain := msg[2] + // address := msg[3] + identity := msg[4] + mechanism := msg[5] + client_key := msg[6] + client_key_text := zmq.Z85encode(client_key) + + if version != "1.0" { + return errors.New("version != 1.0") + } + if mechanism != "CURVE" { + return errors.New("mechanism != CURVE") + } + if identity != "IDENT" { + return errors.New("identity != IDENT") + } + + if client_key_text == client_public { + handler.SendMessage(version, sequence, "200", "OK", "anonymous", "") + } else { + handler.SendMessage(version, sequence, "400", "Invalid client public key", "", "") + } + return nil + } + + doQuit := func(i interface{}) error { + err := handler.Close() + handler = nil + if err != nil { + t.Error("handler.Close:", err) + } + return errors.New("Quit") + } + quit := make(chan interface{}) + + reactor := zmq.NewReactor() + reactor.AddSocket(handler, zmq.POLLIN, doHandler) + reactor.AddChannel(quit, 0, doQuit) + go func() { + reactor.Run(100 * time.Millisecond) + quit <- true + }() + defer func() { + quit <- true + <-quit + close(quit) + }() + + // Server socket will accept connections + server, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = server.SetCurveServer(1) + if err != nil { + t.Fatal("server.SetCurveServer(1):", err) + } + err = server.SetCurveSecretkey(server_secret) + if err != nil { + t.Fatal("server.SetCurveSecretkey:", err) + } + err = server.SetIdentity("IDENT") + if err != nil { + t.Fatal("server.SetIdentity:", err) + } + server.Bind("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("server.Bind:", err) + } + + err = server.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("server.SetRcvtimeo:", err) + } + + // Check CURVE security with valid credentials + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(server_public) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(client_public) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(client_secret) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + msg, err := bounce(server, client) + if err != nil { + t.Error(msg, err) + } + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + time.Sleep(100 * time.Millisecond) + + // Check CURVE security with a garbage server key + // This will be caught by the curve_server class, not passed to ZAP + garbage_key := "0000111122223333444455556666777788889999" + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(garbage_key) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(client_public) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(client_secret) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + time.Sleep(100 * time.Millisecond) + + // Check CURVE security with a garbage client secret key + // This will be caught by the curve_server class, not passed to ZAP + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(server_public) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(garbage_key) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(client_secret) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + time.Sleep(100 * time.Millisecond) + + // Check CURVE security with a garbage client secret key + // This will be caught by the curve_server class, not passed to ZAP + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(server_public) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(client_public) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(garbage_key) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + time.Sleep(100 * time.Millisecond) + + // Check CURVE security with bogus client credentials + // This must be caught by the ZAP handler + + bogus_public, bogus_secret, _ := zmq.NewCurveKeypair() + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetCurveServerkey(server_public) + if err != nil { + t.Fatal("client.SetCurveServerkey:", err) + } + err = client.SetCurvePublickey(bogus_public) + if err != nil { + t.Fatal("client.SetCurvePublickey:", err) + } + err = client.SetCurveSecretkey(bogus_secret) + if err != nil { + t.Fatal("client.SetCurveSecretkey:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + // Shutdown + err = server.Close() + server = nil + if err != nil { + t.Error("server.Close:", err) + } +} + +func TestSecurityNull(t *testing.T) { + + time.Sleep(100 * time.Millisecond) + + var handler, server, client *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{handler} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + handler, err := zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = handler.Bind("inproc://zeromq.zap.01") + if err != nil { + t.Fatal("handler.Bind:", err) + } + + doHandler := func(state zmq.State) error { + msg, err := handler.RecvMessage(0) + if err != nil { + return err // Terminating + } + version := msg[0] + sequence := msg[1] + domain := msg[2] + // address := msg[3] + // identity := msg[4] + mechanism := msg[5] + + if version != "1.0" { + return errors.New("version != 1.0") + } + if mechanism != "NULL" { + return errors.New("mechanism != NULL") + } + + if domain == "TEST" { + handler.SendMessage(version, sequence, "200", "OK", "anonymous", "") + } else { + handler.SendMessage(version, sequence, "400", "BAD DOMAIN", "", "") + } + return nil + } + + doQuit := func(i interface{}) error { + err := handler.Close() + handler = nil + if err != nil { + t.Error("handler.Close:", err) + } + return errors.New("Quit") + } + quit := make(chan interface{}) + + reactor := zmq.NewReactor() + reactor.AddSocket(handler, zmq.POLLIN, doHandler) + reactor.AddChannel(quit, 0, doQuit) + go func() { + reactor.Run(100 * time.Millisecond) + quit <- true + }() + defer func() { + quit <- true + <-quit + close(quit) + }() + + // We bounce between a binding server and a connecting client + server, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + + // We first test client/server with no ZAP domain + // Libzmq does not call our ZAP handler, the connect must succeed + err = server.Bind("tcp://127.0.0.1:9683") + if err != nil { + t.Fatal("server.Bind:", err) + } + err = client.Connect("tcp://127.0.0.1:9683") + if err != nil { + t.Fatal("client.Connect:", err) + } + msg, err := bounce(server, client) + if err != nil { + t.Error(msg, err) + } + server.Unbind("tcp://127.0.0.1:9683") + client.Disconnect("tcp://127.0.0.1:9683") + + // Now define a ZAP domain for the server; this enables + // authentication. We're using the wrong domain so this test + // must fail. + err = server.SetZapDomain("WRONG") + if err != nil { + t.Fatal("server.SetZapDomain:", err) + } + err = server.Bind("tcp://127.0.0.1:9687") + if err != nil { + t.Fatal("server.Bind:", err) + } + err = client.Connect("tcp://127.0.0.1:9687") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + err = server.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("server.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + server.Unbind("tcp://127.0.0.1:9687") + client.Disconnect("tcp://127.0.0.1:9687") + + // Now use the right domain, the test must pass + err = server.SetZapDomain("TEST") + if err != nil { + t.Fatal("server.SetZapDomain:", err) + } + err = server.Bind("tcp://127.0.0.1:9688") + if err != nil { + t.Fatal("server.Bind:", err) + } + err = client.Connect("tcp://127.0.0.1:9688") + if err != nil { + t.Fatal("client.Connect:", err) + } + msg, err = bounce(server, client) + if err != nil { + t.Error(msg, err) + } + server.Unbind("tcp://127.0.0.1:9688") + client.Disconnect("tcp://127.0.0.1:9688") + + err = client.Close() + client = nil + if err != nil { + t.Error("client.Close:", err) + } + err = server.Close() + server = nil + if err != nil { + t.Error("server.Close:", err) + } +} + +func TestSecurityPlain(t *testing.T) { + + time.Sleep(100 * time.Millisecond) + + var handler, server, client *zmq.Socket + defer func() { + for _, s := range []*zmq.Socket{handler} { + if s != nil { + s.SetLinger(0) + s.Close() + } + } + }() + + handler, err := zmq.NewSocket(zmq.REP) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = handler.Bind("inproc://zeromq.zap.01") + if err != nil { + t.Fatal("handler.Bind:", err) + } + + doHandler := func(state zmq.State) error { + msg, err := handler.RecvMessage(0) + if err != nil { + return err // Terminating + } + version := msg[0] + sequence := msg[1] + // domain := msg[2] + // address := msg[3] + identity := msg[4] + mechanism := msg[5] + username := msg[6] + password := msg[7] + + if version != "1.0" { + return errors.New("version != 1.0") + } + if mechanism != "PLAIN" { + return errors.New("mechanism != PLAIN") + } + if identity != "IDENT" { + return errors.New("identity != IDENT") + } + + if username == "admin" && password == "password" { + handler.SendMessage(version, sequence, "200", "OK", "anonymous", "") + } else { + handler.SendMessage(version, sequence, "400", "Invalid username or password", "", "") + } + return nil + } + + doQuit := func(i interface{}) error { + err := handler.Close() + if err != nil { + t.Error("handler.Close:", err) + } + return errors.New("Quit") + } + quit := make(chan interface{}) + + reactor := zmq.NewReactor() + reactor.AddSocket(handler, zmq.POLLIN, doHandler) + reactor.AddChannel(quit, 0, doQuit) + go func() { + reactor.Run(100 * time.Millisecond) + quit <- true + }() + defer func() { + quit <- true + <-quit + close(quit) + }() + + // Server socket will accept connections + server, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket", err) + } + err = server.SetIdentity("IDENT") + if err != nil { + t.Fatal("server.SetIdentity:", err) + } + err = server.SetPlainServer(1) + if err != nil { + t.Fatal("server.SetPlainServer(1):", err) + } + err = server.Bind("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("server.Bind") + } + + // Check PLAIN security with correct username/password + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + err = client.SetPlainUsername("admin") + if err != nil { + t.Fatal("client.SetPlainUsername:", err) + } + err = client.SetPlainPassword("password") + if err != nil { + t.Fatal("client.SetPlainPassword:", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + msg, err := bounce(server, client) + if err != nil { + t.Error(msg, err) + } + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + // Check PLAIN security with badly configured client (as_server) + // This will be caught by the plain_server class, not passed to ZAP + client, err = zmq.NewSocket(zmq.DEALER) + if err != nil { + t.Fatal("NewSocket:", err) + } + client.SetPlainServer(1) + if err != nil { + t.Fatal("client.SetPlainServer(1):", err) + } + err = client.Connect("tcp://127.0.0.1:9998") + if err != nil { + t.Fatal("client.Connect:", err) + } + err = client.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("client.SetRcvtimeo:", err) + } + err = server.SetRcvtimeo(time.Second) + if err != nil { + t.Fatal("server.SetRcvtimeo:", err) + } + _, err = bounce(server, client) + if err == nil { + t.Error("Expected failure, got success") + } + client.SetLinger(0) + err = client.Close() + client = nil + if err != nil { + t.Fatal("client.Close:", err) + } + + err = server.Close() + server = nil + if err != nil { + t.Fatal("server.Close:", err) + } +} + +func bounce(server, client *zmq.Socket) (msg string, err error) { + + content := "12345678ABCDEFGH12345678abcdefgh" + + // Send message from client to server + rc, err := client.Send(content, zmq.SNDMORE|zmq.DONTWAIT) + if err != nil { + return "client.Send SNDMORE|DONTWAIT:", err + } + if rc != 32 { + return "client.Send SNDMORE|DONTWAIT:", err32 + } + + rc, err = client.Send(content, zmq.DONTWAIT) + if err != nil { + return "client.Send DONTWAIT:", err + } + if rc != 32 { + return "client.Send DONTWAIT:", err32 + } + + // Receive message at server side + msg, err = server.Recv(0) + if err != nil { + return "server.Recv 1:", err + } + + // Check that message is still the same + if msg != content { + return "server.Recv 1:", errors.New(fmt.Sprintf("%q != %q", msg, content)) + } + + rcvmore, err := server.GetRcvmore() + if err != nil { + return "server.GetRcvmore 1:", err + } + if !rcvmore { + return "server.GetRcvmore 1:", errors.New(fmt.Sprint("rcvmore ==", rcvmore)) + } + + // Receive message at server side + msg, err = server.Recv(0) + if err != nil { + return "server.Recv 2:", err + } + + // Check that message is still the same + if msg != content { + return "server.Recv 2:", errors.New(fmt.Sprintf("%q != %q", msg, content)) + } + + rcvmore, err = server.GetRcvmore() + if err != nil { + return "server.GetRcvmore 2:", err + } + if rcvmore { + return "server.GetRcvmore 2:", errors.New(fmt.Sprint("rcvmore == ", rcvmore)) + } + + // The same, from server back to client + + // Send message from server to client + rc, err = server.Send(content, zmq.SNDMORE) + if err != nil { + return "server.Send SNDMORE:", err + } + if rc != 32 { + return "server.Send SNDMORE:", err32 + } + + rc, err = server.Send(content, 0) + if err != nil { + return "server.Send 0:", err + } + if rc != 32 { + return "server.Send 0:", err32 + } + + // Receive message at client side + msg, err = client.Recv(0) + if err != nil { + return "client.Recv 1:", err + } + + // Check that message is still the same + if msg != content { + return "client.Recv 1:", errors.New(fmt.Sprintf("%q != %q", msg, content)) + } + + rcvmore, err = client.GetRcvmore() + if err != nil { + return "client.GetRcvmore 1:", err + } + if !rcvmore { + return "client.GetRcvmore 1:", errors.New(fmt.Sprint("rcvmore ==", rcvmore)) + } + + // Receive message at client side + msg, err = client.Recv(0) + if err != nil { + return "client.Recv 2:", err + } + + // Check that message is still the same + if msg != content { + return "client.Recv 2:", errors.New(fmt.Sprintf("%q != %q", msg, content)) + } + + rcvmore, err = client.GetRcvmore() + if err != nil { + return "client.GetRcvmore 2:", err + } + if rcvmore { + return "client.GetRcvmore 2:", errors.New(fmt.Sprint("rcvmore == ", rcvmore)) + } + return "OK", nil +} + +func arrayEqual(a, b []string) bool { + if len(a) != len(b) { + return false + } + for i := range a { + if a[i] != b[i] { + return false + } + } + return true +} diff --git a/vendor/github.com/pebbe/zmq4/examples/syncpub.go b/vendor/github.com/pebbe/zmq4/examples/syncpub.go index 77a508f..dac0149 100644 --- a/vendor/github.com/pebbe/zmq4/examples/syncpub.go +++ b/vendor/github.com/pebbe/zmq4/examples/syncpub.go @@ -1,9 +1,6 @@ // // Synchronized publisher. // -// This diverts from the C example by introducing time delays. -// Without these delays, the subscribers won't catch the END message. -// package main @@ -11,7 +8,6 @@ import ( zmq "github.com/pebbe/zmq4" "fmt" - "time" ) const ( @@ -21,13 +17,17 @@ const ( func main() { + ctx, _ := zmq.NewContext() + defer ctx.Term() + // Socket to talk to clients - publisher, _ := zmq.NewSocket(zmq.PUB) + publisher, _ := ctx.NewSocket(zmq.PUB) defer publisher.Close() + publisher.SetSndhwm(1100000) publisher.Bind("tcp://*:5561") // Socket to receive signals - syncservice, _ := zmq.NewSocket(zmq.REP) + syncservice, _ := ctx.NewSocket(zmq.REP) defer syncservice.Close() syncservice.Bind("tcp://*:5562") @@ -43,15 +43,8 @@ func main() { fmt.Println("Broadcasting messages") for update_nbr := 0; update_nbr < 1000000; update_nbr++ { publisher.Send("Rhubarb", 0) - // subscribers don't get all messages if publisher is too fast - // a one microsecond pause may still be too short - time.Sleep(time.Microsecond) } - // a longer pause ensures subscribers are ready to receive this - time.Sleep(time.Second) publisher.Send("END", 0) - // what's another second? - time.Sleep(time.Second) } From 44fad8dcb8e5914cf70934096a977b861c6bd0a3 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Tue, 19 Sep 2017 17:04:59 -0400 Subject: [PATCH 20/32] add contributors --- CONTRIBUTORS | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 CONTRIBUTORS diff --git a/CONTRIBUTORS b/CONTRIBUTORS new file mode 100644 index 0000000..2351324 --- /dev/null +++ b/CONTRIBUTORS @@ -0,0 +1,30 @@ +# This is the official list of people who can contribute +# (and typically have contributed) code to the gophernotes +# repository. +# +# Names should be added to this file only after verifying that +# the individual or the individual's organization has agreed to +# the appropriate Contributor License Agreement, found here: +# +# http://code.google.com/legal/individual-cla-v1.0.html +# http://code.google.com/legal/corporate-cla-v1.0.html +# +# The agreement for individuals can be filled out on the web. +# +# Names should be added to this file like so: +# Name +# +# Please keep the list sorted. + +Bobby Norton +Dan Kortschak +Daniel Whitenack +Fransesc Campoy +Harry Moreno +Josh Cheek +Kevin Burke +Matthew Steffen +Sebastien Binet +Spencer Park +Thomas Kluyver +Yang Yang From 69792d8af799d6905e2c576164d1a189ac021784 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Tue, 19 Sep 2017 17:26:51 -0400 Subject: [PATCH 21/32] update readme intro --- README.md | 8 ++++---- files/gophernotes-gopher.png | Bin 0 -> 121620 bytes files/gophernotes-logo.png | Bin 0 -> 99252 bytes files/gophernotes.jpg | Bin 380012 -> 0 bytes files/gophernotes2.jpg | Bin 42988 -> 0 bytes 5 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 files/gophernotes-gopher.png create mode 100644 files/gophernotes-logo.png delete mode 100644 files/gophernotes.jpg delete mode 100644 files/gophernotes2.jpg diff --git a/README.md b/README.md index aa20be7..a54cbc7 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -![alt tag](https://raw.githubusercontent.com/gopherds/gophernotes/master/files/gophernotes2.jpg) +![alt tag](file/gophernotes-logo.png) -# gophernotes - Go in Notebooks +# gophernotes - Use Go in Jupyter notebooks and nteract -`gophernotes` is a Go kernel for [Jupyter](http://jupyter.org/) notebooks. Finally, we can have a reliable and maintained way to use Go interactively and code in the browser. Use `gophernotes` to create and share documents that contain live Go code, equations, visualizations and explanatory text. These notebooks, with the live Go code, can then be shared with others via email, Dropbox, GitHub and the [Jupyter Notebook Viewer](http://nbviewer.jupyter.org/). Go forth and do data science, or anything else interesting, with go notebooks! +`gophernotes` is a Go kernel for [Jupyter](http://jupyter.org/) notebooks and [nteract](https://nteract.io/). It lets you use Go interactively in a browser-based notebook or desktop app. Use `gophernotes` to create and share documents that contain live Go code, equations, visualizations and explanatory text. These notebooks, with the live Go code, can then be shared with others via email, Dropbox, GitHub and the [Jupyter Notebook Viewer](http://nbviewer.jupyter.org/). Go forth and do data science, or anything else interesting, with Go notebooks! -This project came out of the [Gopher Gala](http://gophergala.com/) 2016. It is inspired by a REPL called [gore](https://github.com/motemen/gore) and by a, no longer maintained and self-described as limited, ipython kernel call [iGo](https://github.com/takluyver/igo). +This project utilizes a Go interpreter called [gomacro](https://github.com/cosmos72/gomacro) under the hood to evaluate Go code interactively. ## Screenshots/Examples diff --git a/files/gophernotes-gopher.png b/files/gophernotes-gopher.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd244602971e616ed90acdb14425dc859602a8e GIT binary patch literal 121620 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 z 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

mBO^FDr3hSa85C( za3lAAd>!!eVFC*W8dLi{rNl@r>~-m{q9P7XY{%+! zJid%V3XaB+MOH>y6#1&}>5t+#JpCIVRaX=ivI5qTvrOKDLCbxnL2AwV^L}=lj32_a&E?T|y3y)QE(c+eWqSBbSEJ~{LN)3cXV?rUZ+lG7V z0+6DA5@OT`PEgsq!`EO}ZuLN76eue;&u%4W31ex;0&udKh^Qru9rT3$!S^Jy^Fl7Z z-P#Sl_3qWTmF_AU8gez<@7$~+8_>w5x%Mx}Vs5*PvhB2U!2V574{o>+n3S{;FW9KS z4(fEq5z;`Q?|G2#HUH%WQo>9;d)_k60uLu#Hi~Ku`4!L%pDl%GW`$>?dL`(^2;`ij zF&%{1j&%2FKX~Qb{UBC}6-#}1NUAzk_nz0~g&*~N+yDOgN)&av=A*Z{9pU@O@-Y%V ziFZO)BShz6VPQ40{|5T|tGM>yNBn@;c&`SG<0;xf7&QjwI!zCjo%=k6QCPf@v9mg6 z1^Fk1g@u_`=P^m@=bO_$SsWA6XrPAByT+3>!ARtwp<&$NT`RZLGda;EC~rQPeIxZR zGm%&!WkH-mL`V;uP;OtqbDrhn zaFw=HNALwu#$^Ca)e~gdaKN+XVsJ!|svo@S;gBAR7_jwrlS%xBNJnmxZT!@lCL_O7 zN~&|CwSLeSj={;DSK|N88gqu$l;?9|XCdPu!z!VlQHqIT27RTCP4+6%pOY|Ei%_Mz zRZs?GE%|b5`=jh%!!BSd2;#}Vi?i(}yM#akSJ^vH4yR~q^vu^n-GT*BqBSHv0pqUa zdMvzZ#eVVXe{D((1-Wmj;}+ceBL$MpPCBH{DFexxYCWnj0B6u8*a1*27T)mM zJWD_ggW9u->-@ko+KKLxwSFgAN3}Cpu_-SQ?>e?0Uc=cR9hRxlNz&WxFr=*xo|=eO zLdC>mnP4>UpPhg~d9kWK@E?0(ZX`?1@sf2TG92gPA5V2m`MfQ%+S~Q$wBh)bZD{Io zxGv)ZJo))mt;Vuqe+3dN%y5%Da6*>g6&=Cs8R}oCmZy74B~vvLf>CHXZH4!6iw(`; zBjL6zIo{N-23RUOIW4pN>uVuV35%t?(DC49B}O?;YxkP-Fy%|rOAjCL`a^eXJ2qSy zbC)c7w$#eK{=^R&is8cU>cqYa!MRpT?5oc0F7k2L(pp0f^)9;(raqq^+55gk?{XD7 z{(vm9v#5upB_GF8_O?J+cz7)da<1Wa+$bidHSV-uiI48v#MNvyg{st@F-^*Pf>CJT z6$*XUnc|RW>FC^Vk;fGEU?kb@p=&~&v%9%B)7<2-uD>c?Z3!<*KrD6j@mn#wzs%X@ zE~ljq<@(8W&E6z5kFUbEXre;f#Dtf4J|ZF_44WQwNWsmt@FDW3{t$6;Kt0?cZQPgy z_iI10FiIYN z-()xX=`!sxmCd$47=`bM@gBJ#mzfh3sKhkUa(#LUBi8Y8bH_u1^9gn*_UE5jaZ;#1 z5iLgHYk!X2%Ep8Lyp?>C+zqZRZ=Uf)_VHB7UJXfJpBnB@RTLeGzj_m_Ut*4C5Csz?AK2L>AAX2 zce~RJ_SKTU*LD>i)$7OyW|ykFYVlS=LiQXzJFd|OYH#1&s#@D>oh~u@x1|m&S6`MS zb*#!R;eFMsJ06ZRGZXgJF+8%AAHEAbwZ6s|WgJ%@RO?eQ++K`s$Q#NR!#>l#(Di$8 zgBF^F4mgMEo#|~unP!85Yyn!~!qUFVe5sBLvb4W{PRZbOG4R!0pI7wzzaQ*=ugxmI{FUGOdlQOy%dbD) z)5|T-@xw>|YU}%31FgR=-Hl58_+pVP`9WYrz=dR+Lzr(-5%kBM3JuoX#&ttp%E9U& z5O+TVF5=rN#n8$rA~MN z;w0^AJmiktdcJn(WV)~88{jx-O<&d-N*J>uV|Wc~dL+F^S((|hJm!gCK78kLzO(iO z7}~i0Mw52BWDj=qojl#HTJXDa=bOTr87OH%7txc9lp*VqGHLVg^o~PQmv@SNC~Ayf zF*CAqwZ|nlgT2u+gWqx8V0nc}R>f22lK7$l6WBsk3I;nmiY7PgV+y~!ZWPTP=|?_T zh9Ww>Ok!N7wd-`}Jx(73S^D?K8(UAST!0DzV*I4W88JyLc*B~2tac6~?#ozcN1B|` zzRJoPiD&CRTE&RlZq!&Rj`(SjW6e>^`#pCW22n@9cn5n05CLH@om;?#gG~L7UBX zSpD4n!M?uVt5R!_l+kZL?dcm&ygk?sMM2iDf`-?E!DHrj{Rx5)=xX)F3{zI`i055=#Kv`H&E0_ zy~*sDFJS9NRw!_UWx$>!I39t<5j%j*S1beN*X0j|gq?nu(q=c1$px zpIl0AygEe~`#EW-d8#n}a9BW-(?2=cWFzOVNZGzU&2Z!ZQ)JFH^)^YQDLi7%j@$Il z&TUase61uYJup|UIoV>P&xs{I9vRor@UXBK*!AfC@^$f%1X#$|h&OdT+yoU}Iy$mAlLRx{*jN zbbJOwn9rrdKYjSHf8`*^LRFeN}&o!Y=YsV{)a%i}1K!|`H1 z1xJYV!iRB3A4|kuhCNw15#2~vq+8AVphf&M-JP7brLL>iHF4yA6LvA?oKNh1(5C=z z?(Gii0y`jXD_9PH{w@4#w)N;Cb@fxBPHt{5rUstNgjt_FNyX0oaq}2M3;n;I&tzSL ztConKS?9@*$?>kk=LR=>mw(k$|MAu9rkarc5JWc9kh_14h;{Np+fh`So60$hi|r)F z6fU;7lL4mBuWzVSe0;9nx?nswD_P!TvgeXmDtd63ZwIz+P%PS!yn7@;PgPz0L*cwP zIFk6|8qnNgUoiIs%W3m2>3C7azW~=5VA9a2=i$CQ&wB3HdV094oa24;>jKy2w4ExW zp}EsdpH@V?D&9%8ght@(mu{Jg4_1N%z5;h~+Pg1AVw6ZM(h_}Mmkiu2ddrff;7K2n z7JlWes??GGVo&Q+z8&}Qip?R2zr{-gl(KAWHU=vKp7BMgat?vz{j+{^8jJw`+6=_h zcsD}}-QTH)Z)YS8gEb?b*3%D1E1#FBNx6Nkx>+b}uW**mLP7s>|MJBC+hKd0MxK0A zYmeS>A~mvHJqk8gNYN#qOn&E_oqX~`BUxhfw&ZN}o%Y1M##7@Vj>Rw` z2$LE99Xp`jF4ZVKz0>pw4_*wbu-me3g2Fpu6__)G8$Wf=EI!rLJ2Yw+RCaR7mb`CD z#pBC2UR3KB`h3FtXS12BUEht?7JcUu>hL!Yna}U!WOwX-@#1aS%a@H=XP&e}9YAL9 zGhL$Wr{)Y`jfSgPvUIzkAS2ZCwJ5%#@H92f|4P%d7EX}#pEsCcH?Fv_!Qx}KS!h0{ zc>Id)ZrArmcr`CjBCcP*8#(BWK!63DGlLb4ym8xQlUOWl=Xyxd24j* z${cBWKaK2PEfvaYH8D_z;bT>HG~G~5!KB|}-~_1i8o}0VPj$kXUDUI9VAC1|1rB`r zWRrJ^t7WJ1uM24w9Yjl~6my1B)%Wh$#C^&)$|zkDJ*B3g^W0=_!$A#|EIbOb4|>F1 zWF-ECL5xK!`((0ST1V00Be_;#z5$X}pnHnX4qQAwgmIj}fTY0gZSLQMjWiG*s9-d< zdyt&G`3Wp8T-KY{^YDa;R?{*wz=R_?*g`gB&`1-7VJsi z)jZ97fzM?BUz3E=+gDWHbQ_l`3Whf|&`<60lcMaRonrH=XE*n;=2FD1jC*DARpWl> zixjsH#oUe^xI+6|+3{9#JriQ$1C_Rz`@DzG(O+R{A)wVAKrMktL04;OJuS{t-i+{P z;#6Q+yH@7KPGA|vr9ZuHCP1h_R4VCOo3FkwPZ&NBy5Y(@+g?J0k>h%Pgi?4ZQ?v0+ zs{}92!pbUNiaRBS(!Wt>154Y7EtDFGE;2GdpH)8!X$Pbin&VD;f17eFy4qv~gf0xc zZ(ectmuFs0L&6@t&u@HU)h~nKMOxivd3j^&x_3fbw`?JlC;6Od3&5C3C+%lj)BXNE zH>UE-2({6e*_8T}d4(%L|0;C3GOL8mcj4F5t^1Y2DzXOjGND`nCd2qTdeGRraE(6z_Fmgcs z3UH^6jt+ai-Cdz}?v>i)fHC(7(&r7oi>}DrMIfra!x;Qctx|i7aB=Y4y6s;XO_D&BQ zsHP|gt7$*M3;ZAMwf1!B)ytPZMZR3RbnfQ!U%L0f(Fa&v46tc}+vkyxy$bek)?J}C z&f;|a*PJY{HM)vnp>nQV=nbs-#p&EtIuiAWibH-%SKhLEgUuzT9dWxA=U448u<(T` zhNSRY|e^&03i~BbXc=uskN)hzNhY!e1IL;Mvd!7*lOiRxqiP;{@W`t zR5}#Uc9*zZ36~4KwM}BQV$b7!?>`=yjSl5~b;|hzE9-!h)vDmcr4yPZd-n7vT>oV- z*#tit&|TYhVGWUJ3lJ7$;}s~J+V6V-*dr6q0wW8Zo_;$$W>yX)r2x&Pi&a1V*$|m= zbgOt6CJBlz}IG8}#Ato5_-LCvpcx$|Exe%le3e~k^x?4gjg ziK+#P_fb{|`h4FTNYij9dx~ zGy@3*hf(K($-RmjH&~z~AmJ6+`Tgh4pRWa*Lh@w@7YTFj!F~IlsyUIN4Nh4i(m|i~ z^?IoaG<FHnB^vd3RkHALAJlpm+4bH`v)`4hBdE3Q`aOK! zlws|#71zq2vBZ}$2Plug=yv6V@;>q&A3=KYsQ0hlSGLFCiUP8}|?T~I&fhr7xc;`8w zkMOplP0S3aJd#}wcaI`#27O+HD(89O|A5G4971OWo8J{V^u$Tlv|eguVt0J~I)z^# zDydMN`ci6vpXyfg!N{{yKiQ0mo%FIe9WE*Pvk4t1$|=}S$u@H6a*VP#UlF1OIss@D z3OX#98w8?MXU98Nvx~Hqdp<)BvDz(RvWPZGlYa_lm2Btp5NO1vYVO_kis-B75*}*2 zefyR}-G3DYp+mL`JRUWNTmK1383s(bS`Xk;BJ{7I=F|xLbVQIRCQud|TGhJOT7uUV zw{@1^_H@{{M#Ho`X!9Dq>$jq^BFoLq&28l`V?!sYN~k-sedVh_yR_-YuUJM+mU)7d zzXFK@WXx;0xPtLkm9y@Fm-gq>^VN9|9}aG|Odxa~?oQC2FJ8S0%2u3jcKs*0Qd+3h z_m7T>x|^35VYl|4=c}fsa5sgq>>mOgZ$kQFjZ?IjA1-0tYB}81aFYh3)V>czd!$`H z(K&Rhb=WdpV1!Mj)NQ=EQsIY|V@>8?r{c?ohD#+SGKgOrlTEQjlhY4FdRv_miOVR6i&^Lr_R3@=viuep(g0eoBUEDDzt1#Au_}DQpop)wGU_T-tAVxBbR6V=Rx} zAj{dsH!BfFu=))n=Z_psd}$Wh;>$2Qay>|CNWlQK@xG!c1G zv}g6%fse-fO~Vg5*~Dthw6UQH3+0wt1x9Q?It?=CrhP{n4swA8%_VRZLQbLKB+g7I z1MrW)*hk;I*|z9`n_&Udx9G`d%hsRD-Gf3~4Kk+P1i6x=BNkWNc@9z^>O{^X$Q5ILxmR4_9$qwMZp+%=9vd&|D-(hG^2&M_G_an3En zY!Qcq@bTLhqzgxeKd=wHX(%f`JH%@~x$Tp8s*&(IVj5;(VycGf%y#a=DU58OI*4ta zcs)S-?=rONlx;jD1%u+-Z$2{@|EjK()M@P6PaR4KUda}1ZZXnw_9Yvm_g*)qv{=^?C8~@< z>S1lp*FrjKopuHEMw_k=YG^Y$Y?G@VF5cgL^yI|qbV;Z{k%@T{9~a62nk3oaFL292 z5E`svQG(5r7{?h_tO&@;5`qrhi4p62F8s~%R1B1}8aMw^)67dPOr@*bJ)CaG zce%*1-~@|~S1OAo9i)%BozY7zbW`<^&?)}tYKY>7LE2cUc!t)T2(aopkb#|#<4ZJ7S;f=3=$L6lA_O(MTu5p2+)yehV-`$ zx#eFOVcSQY#RR$B#ihr74e20K)S}OR|2mwx0l5XP;*Xx7D3Tad{U_cY#%W4PvInY= z6>;Ezo0m4t73v-qzde5HITnnzk<5SI*p@hIrpXtpHtY?>A3YOuZCVDZAArB9E%F-Q z9*uTZ(8$s*KCjGYx3BJ6FP0J^M0&LkZNgjRUsWX+s&7$vwO>W!NpD$>l+BxE$p^## z_&-NqetvL1Lnk;rogc!&&3F-TN8<)N4U)V)`p_2Yq%nps5D>19cF5-a4BW>K9x3OsR^+UT%*59*3oCx6$Pv}cg*h~Je;w;l-8?}YZhzWgv zzrgw-SC|KpDtBP~$0ceiF3*yC{#S(J*H84Hwq8NM$L{L>-(LzucIGO29H0dP5)o+{ z`tzAN`a8bdJPtPT&-3@}UUzh?Be!1O$>${YiecHJ2RBht!?7L{YxB7I5ikJ)lj8j# zmfHZ?0z-DR{khXul=k~VyE$HH5U;*X84V$y^%pg5Lhyn+VvwG0wP==k)JL*OpKKRe!)1H$2NLIk~4hi;~z+B zV1u2%Ny&zo^zG|Hz$Z{;=oofpv<2e_MsjB8-V2LFuv28hS#{~qmWz-Ap>LEFsYhVn z6y9v&V|VjeR|Fdam}3f76(W;KhplJlx;~h4bvNu6b#iuoM$Gl!N&yn1ofSnyqVaF- ztLy$YQ)7jX_d$*7^y$skROWx&n%LO~c2OB?*rd<}&^hrwOeL*qmflWujLFbP<3b)D zE`b1>EH%KLp>heXs9Mwzln2%7>grLk=e{6ccb#sgEG;dOTyq$3P(893zv73ls;N;) zYvPf#WknHea1VY466`Q-sXrDlKo^?Zy807-kg9cW5DoWV+nh*q!f$V5!tMh#+DRw$ z^^>52Co)WO9ts`%?sV$1psB*Ghl%zB;Zgc`p%kd~TZgyqnG9mQ!nPR65D)3&`tPk_Mm;wmyqCKO1f1EVbLj>n`W^P798Uy0(?O!3p*hnboJ0V>COvAsRAwroP@Wv z3O-DZ+B5}PG6##bK(iwN-fG6-GqOSI1aIiH!A#O|!NLi;vS zpj2})TXCnbu=giPtW!pVPwYGo{s4$0BbyZzHaM3UjmypL6JGZm1BFxq3a;u$)D`lb`Tw2s4MQ@9_?Eqg zPtLw&Z0!=UM0Tof?RB+V5gk96)Lu457hRsn!wY6`I~R? zN!E+I+Sir16?Gc%vyxc>9~h?YF!(bc%qLF?BhbUqaW!OHpwO2=+8B_QwjJ=W8=}xN zho^b21$zcT==Nl3(GK0c8EWIUWAS=ih$0%A!_a9|;Te@?e^pjI_Cd}uMYE0LjOT4YF-Ydqae(3(f8pWkeg|>1uZlL-T6Fc0+Fq9M?6CV zmSlVn5Yn}O3j=8Q9RCN;pYB*Z&4jfK-gzR-25w_j!QUtp#vyibn#7*rU3hV9_x){d z?P~`QeD2E6F`Im98NWD__Q&{KEqax*%bYQZ)Ah^S-gq@AV*xwe44XC=YAz@!(1K>~ z*zU^~3sVCR#BhlX@vYU4e7$4qWj|&A-erCYCz${7Q$KAfx>BY^Aap!bUo1Gq%ByK; zeB@g@RC7EDF#Dt7vTcx1X`JpZ7PF{FL+tVTa`_=x4cr)YFG&gq$#643t*Ld7{;-!B28RopY-BGmcH4ID441sj=;~nj*rCC_ z;>kH76eqZKPKF{I`~Fk5kkp*Kyu6%a?uVh`Dv5Vyu5rEo?5X>?HkS-}J}KG1>8|A$9>k446lu!N{n5+~ z1sm{X(Hc$v#?|;ZXB!6YNC6WPsq3!IEc-{kGWc>tKZfO{(Ee5Nfdo02D6Y8JU-+z; zv)s;GwFE1|su-AdAA4BVLI{JI5{-8cw{t!I`rP+_A;YL2R3N_Avn=#_DmrO3G2rbwc_@5CgN61w)r*+@Bp{(!%H3%j^Bg-`vf;r{N#_3SQU5G z7rRbF%b7Cdb)oin5=~WU?YEk%8qox;;#^nC`zR#<=I*HO>zu?l@9i6w8GI7V( z|G$%!cf4=?9`PK%?K_+AEAA8!c!~jIE+)+8tc!~>sy?Shj!DI9oP;acicPOyD?yEP z^j+I(prUja9>mE)1#}u)B2L86`-T6%-&FK?AD~DunBW5=r=|v!!v<|O$V%B4jP43( zoWRX5cS>79M@MI)ynGM8UM2qOtl@R)er1YoV(>pG>{<91b#@z%GAq!f5w~t(%93Q$ zfUq$}+G&&L{Fg8^U1Ngs$u-|9kP*HjLx+6E6tI?g`S~Y9@A}Y};t<2;X1nW0BUQWh zPh|C3fXW>0DiR_Fp5fhMe#21;Vy!36{b~L0-&jeh32>5WER3)Q!6kV|HzX|V!lxow zXg7F$o1mf~oOuYZ8WBHI+HZe`xEZ5p{#enX-)FCU%sHqCbIxj)fehigKMQYgk(f?W z=N;{g{ZN}~c{AUPi10&r^dL;^cs(yaO5+Ko&f`^N{Z~U5J68&?-7N3*?SlYYD-o)P zO=j3k&d#iVC4{jLxHKFV{ou1nKPE0AanjQA5>S*RC_#%}ztbn;WTm?i`OSzV@~#kW zrbLqMZC;oPJq6 zcmkud4V|$v3NKfm3qA=e8yn!EzP`$?CLwEu-@x2~g;G1?87Wn z2GFy@D~=?UFfK8Z+@DYQ;-I8Q-hx!|wa+L^#IXncyFUpzj zq4#{{V?@rOa|RXWJ#5ZWDA3HtNDJVw8JeKXPNj@xtNXDI z3?wzFo^Uxu)D5HT$yr%)z=_0>d(1y4;dQKwvOwd|(2x^^8}ag9B)h6h#JDq%Nm1e7 z8$Me{T_vPWRakE9f`4e(gFRR6wzP|OxfRDhlhsD3{mr=7ZFBp|&aZ}r1?9(3zVj^+ zS)=RJ@v6wnV+P1Q_psz{S=pYUxt~A1?}&@7XS{T;F}f%^I(i8DUumyz!o+4b{?5tm zD^)!8S%xYF3gf?;)smY-v5%$3trxm~Q%mWZ&JeFFre2>V;i9^WTo*sv4U1UzL6mPX zw{MdaB+ACfR|E`z(6Vc*;}*OREBzI#-d>#qF*Em2k)1L2{PNqeT0tqxL79@rA00ij zGy#(rd?}md;M`JlE zLG+^soH`y~H|z|8Y$ZUyXQ0K18;8)Kl$Zy`W$TnLGwnm@ zscv_l@9!`a!iSAXaly!j>2yEmodOK&<*A3BQWiKl^|*iS1JbimcyXG?E;!Dkx|45o zboBIo6_tDU@9)oT^7<&?S3vouD0!mMqfhzQVk_c5s+-?Zi~4>Uv7$_H45n!QO4j@I zsi2cVOy?Y>RFoED@yyNOPw7XV@5Xxv6O!JK-@U0vxZ$_#2QI9e3l$~9@1HYAi@Xr- zeip{FXshlcy0A8Klyw3)APnK$#|0S*nT&Ry>8j>f%fW$LrRH#k&L$}-c8o`!oTi(u z_XD20di81*xU=cemdzD%X>>uFpEoNk+sGnWf6ZmzpOKJq_M+|kNSdV`HyWlLsj^>% zN6i=fN*6MquuzPs^EOn`Qal}tR2dFdX#P@8kDmQpS4@4UtsmD~XeZbl7Ho{&d^#&W8^#Cq5`pyvN52R`Xbmy{75Im?VxPuC;{ow#1xqFFBbQBv4DA$Ud#3s#emC*sv_=*PA;d zF-v{IQ1tN#Q|a8v*DMCX+z?Nr^I~@9fSaYg<#i(&li>>;O(t2w_dh50 z9Fw^v;K5`j@0Unn?Qjwa{7Es3D-FTBiasGgU-+Zg)}e3UY@}smbR`|L4kxRGMclY? z@7tmu6%7P{`OzkcV5N~qbYhOEH}65EzOy05vA3KPC!=GN*HA0w1ZY@~eV)TBVArG7 z$3f!tu|)4}shiNqg*Qm*t3mfL7auz<05O${%H@t_oaw13YkitN53*CIBGbvmQf_VjByo_CI{%%y4%ak%GofO3mwVU=P} z!h5B$vMUs>tTGO~K+x^XM29VxcKOI;w|x%$qdD@`Y;)gtbrCho$B*soQV3eJz!8IQ zm#EiKeJ-Ig^I;%4KiQidOc(^9S1rZ)U44d;(;yPe0FH)=LFjk||N2qRPl*uuLzR<< zof=48&`g$pgG(K@uX`#^OxMEo6MoMMei7RAS%<&`xC9(mlqf!E2_+W(xyc3~bvF{}|Vqh7EATXJY67 z#IbL0{cWl6w9wh@PkWxZ23;zXaVy)pg-*YbA zbH=$wr9ROzMvwng=W_`V)%3f?^g2&1Ch_@IQYMy(u2*#ENmU-Z{yUGBgl~n*slT52 z@zjn5(QI(ED)O_6H+tW}xRF9#aU(qZXi?%koD{gPs{u7+nt1uB^xQ;y#`XtB(W$&~ z9@CY|i6rY&r_7+xA?8uM8JzR)3zoxu2$s$@CSm$b>Y8{s4GbUg;*EjJN8;O!=6rj~ zb_x&GStdUpSu_9)8Bwb=e{IdazccdtYlPokq5BB%&e#&Z^0Do&J_h}#1sIAx9ntGCvc99z6l)j8Wsfw1 zNWKXny*3>^z0iS8*ENfe1YZlyj7dhtxgQV|BW0#cwJzx?R%IH2K zevAG6^NQQWgmMyzI>$7G!b7du;3*-wGbA*$ZIsCoXd6m4$$bO1HJ5p8p2T}2Vy7ks zl(;!AayiTUC2(X6;qMc-m(y6AK+U#*I3SlVa4nOt-h@!=dZ-Ct*VNKaf1-dDOt$Sz z-*GVJ&b7sHacUkZ=LxVqTC%V4M(fgHe9Jkj{radD@@QF-qnXUM_{EfJ1jgJye^>Uf zVm7F>7GBqtI{@mfSSPIMWxSDjO4G#_ z#NR+81GC}&?6L>4z^yww+3`&hJQs`d5V}n89t(>AnDdE&7hPf8svg$NtuK#J*=OtC z2rReX(s}@R1Ps@=({$8pp{V1`eQf`Z1wS*TIAP!dx-P+H87z+A00abE|J~iG7&*x< z6^OOm>mQV26z|8wkv=!Ufw0IR+{g(E%KWV61dyF5Xd3Gz_IvPY?eG;AX7P@Y3~p9tamWRtSJB1Wk+H! z0h+f!5U4SK;NU?E0DL4iwx(%W9#xh7==V`pZAa;SbK6>sjH}YMlJj68TM`$i!oDC# z9jv_z6hIE!hINzSU)n+n;bg=dkmeDWi6;IoUeZu8;uH4vmUA?&M{_`$k(VzIp&1#3 zRL0ZmmcDR}@9!U`^$B~}fu(zTUCRdyh8nz2OG~SL+8Qk#=?HKwcpRav+M3Sz^_b`l z1Ltj|wa%E7qvD}szTeP*G$!nDR01kJFgQq!SzG_aiAq*I1Ln$f=Z+HR2d||hA!eXx z>MGKt3&yRCh4vmTWl`6a(aFj1lPn0!b<+arfX>KjM(csC%qR ziYndo`C*Lhes>}IM63(sTAv8_Jg(ji6=UYFas+*Z(k{ZkJ&hJRv(h@q6Yr`DnxM1a zCJc(i4j(?OU+E)HTsjE~mCja=9&QAgQ47k%|Nh*=Ac&MdgGSsM$d=H9u92N`>lvI zG+}_wBN7tMh&&qt40OcnA3DS7es39fVOARIvrD=DH`gjtQY) zVC3k>Ga=t7xh8H`eR_3_vW9YvMw+pow{Q7W#*)wDHRu$!Q5tDZSI^NQAPX@CGzc5^ z2Ta(@B5|C=sUOcVdL;wGoL9oCz6ulR>^Htzv^^yAXESU@k?&tq%4yBQO>S&TZRAvx zr4-qDBab;43F5aaL)HD1?)o7)XXted^sOX|yxl}dSU3>s4U5_@WJ{L9uj;o=;d05E z{LK$7)jIBMNRV}Vh9_>I5GW`tT#c5B47s3``*Du0!l#Bzx9=v~R-!qf+?Df=ULn?kvQJ577L;P%t^M)Ug<`UOg&f}oFV~6|c`?)K&9#q%mM;AijkhziX z%agIs)pghSqbT<1$26Jmx^dx%i`4Cf1^uR~WyPJX!>TAvSXe{kNEY3AQUef$fE55x zo?)vCw$VxVSUwQw-jFGFgA*q#Ah`p}{u~D%Z1ni9#8OOdB)$iO7)iFnE1Mp|>8vOz zWMUAJ7_esd`Bt{Y+gF*j`=s}^my~UdHbZSC`Y7Bi?T*J)>~XQ;_Zw0rkTK}7j4LTXCZLIkrCd~p?AJ5!0jf2Q@Gk<5_u z5djisdrMA1p;AO!z|Z#ffI#}Kobk%Le%A?7u+4mq+ zAJq-3vYy$PCZU=ETM5V4`!&L#0nY7El6$^=`@zWfjY@8(jwh4{@TsKm`CZXm|6V_t zyaGV&%eS6l#7zy|Y#@f(A~8}nkUJOF33oAx4Xm;Do_@hj7J%7BT2(mXYsN*(i8(yy z*vYM|j4hDtku-O}@CVQ=pR_veyKc>Y^Etwt32h7_zW3YLtm~A1dCGw3SBLRMZQmz* zmh&xp%XIC92YyvPnC!S=bF#Y~B72SB%}DDSg7-rSuZR0f^$OTr&G1oUB<xcjlI(S$vw6g1@Pu5y`{J^W)f()Ia&XI=OwfgFe%c$kBUKXQ) z;fO)s%VB3G?%fk9HQsJdfzP4eLpjbCfwF zGi1Q%w_HntYzKU`ycFkq!rw3_P z#H@gB!mb>=+ot0L(YnvI>j5|SO+0}gh(s`Ca!jI`39F!2*MdGDk5xx<=?3u__htAo#A_W;Q`)c#9kL})9l&hVM%N*O2W71sJpQA-= zsr2=&;Sl*zJM1h2cnh+dtlg=&OQHCTUuV$ah>Q$=yRGRM#@8PB+85Uq%eGOv$0BD+xXndTXx37CI1iXF~Mzy~UGnfeQ z$Su2$P?NrpIQVhT@kQDCOkIM!%J7kW5IC4+%a$cUt4p+B$gZ4?$R6-moE5+u_ebG# z59W~y4HwV+jqGwl>xVUyjQB1oWjs3E&r6Y@ocek*^DyzknZH)qr<){U3ua2hsF<>I zXUE}ho|72U2`Ljc-cu$8o4J{e7X@+=LL@?=W9R%{o3cVN;q-Xfa>^rdT9R-<_G^&i z2KEdZPi~f={b!ht&3|LZ7ZRNx%R?c%;;_;$U&Z6b7*JDE>+n$c;FZI%;};P@3>59( z&J?+T43GlC!bB3Hpx6#X$7`I{$PL&8z19E*7F|=l9HSP1u|hW__S0*1Ti4*Kk)8vIhDye+q6>Ns_}rjBCf z15K%T>Z&HnUb@ecxsrI>zDILX_M~$Ky>nh@q4qnnQi0k}-tV25Tv2eZRSQ zQ9AmY3z;%2*$a{ccW>K_}^PsCMBDLRpanV-fZPasM(6 z54i;)3PzDOpEL>EMp=6H``w<&h19Vx;gylDH0w3bsoiaU7)>*EeXAft@E~RXWpUOQ z^jfzzZMwJd>f%~9cUI0#42&0FYQGa?d{~z{@#yBN)1U4f_VM+8|K`@mYr77=pM4^k zTllJEo_Ax({GCae5f?LtdkV(M&MkDDmcL=a%5xdfpf4Gc>%K7GgHfS+@CQin{Ra+c zWgXw~;s^fD7HFoU3T4oMqZ%GBKe{r^yWUEIUBrl=p&G3a(WFECDP-5#JU$n=jLt=` zV0U+G`3~LgiUqexjc+_ZPdv<(e;==QZFsMX--Rl>)AOmjm2U^+XqmiP9hk+pH|;xB z?rQTId!Od<==q7;^QA}cBs{JzP`mqUosUTFDD%7iuBw14FGcA*CjG#d5A9ejIT$a_ zKPq` zz3j`YH+*4Ghz~}abC_;~625maJ+q%@|AtZ{KP)Zi19rlr`=dQQ-sp*UEdCv*ss5)I z{fsh|o?q9Q%TyY#X|Umbb7S}29X371oV;InC-$7XI=5%H%V?X}tIsa=CECl^-RcoV9itP-*rf-n}{ zpx`N+vaO`WhC*C4mbK4of_{+_^le5pnP-4zKVOc^)09zp6bB)*2AOqv6gKy4s z7hi`2C$lT}M*bO4Yepr`DM~h{Prr?ZB@Eq(Y4c7WWMD!-bTxdZ!ef)AC+#-uU2*5| zbF+5^r><0P9^aoH9dYwzuGjgmbvdR%6#}0NE>_9WEU-9D8l02pjpx`AkkhjM`u9)N zZ3kzS>~wfCDMNm1s%opO6>VcZb-vZ_-zMGp$rXE3^j9>p-2hMym}>r|j|Ah4DF0 zm^fahB^vTpfy#OXqtOBQX>=w{lLyywavsJg27qR}uy7~@o+!kcsY4CHLm$UfW>okJ zZQk4ux$-d3cP}_r3RKd+t@Iu5IOw$TsjrhxiE@@ig5|tB4edh2{Pp0WK+r zdOxa%trLP<$i5AT3UECUc=%LgN0mwc$^IM039bBUvsYbmENLp9JPYL#K1#GCn0gQ2 z-k#{q!p=VKU~z?sa}#G0jW7}=-Fk54=f?e!S_CB`J%1)a1bhgNi5 zD!lJ@Xhob9PAoDZ?X`$R@CWw(GyR3SzLb@^ zr?-BITJ38lkd(7cJ^7x~GIz1bl7~q&-zdf@p-(m1SxN>Aj%q;Te)6L;>&){wt+ju@cAU>W4 z4R$pS=czOAi|lHX!}q?n2$xquf2$L99}mvZdDA6meqd{BOTWvu?zk%y+cKcHV6G(F zlCh%c8uT7(UmqyQ0q`Gi<# z%uBK12)kPk7)3V+23b@8&Rp1h`X`n&c2c0k<*bZG-jMEFR051mIuV}yx8h>`c}Aqww-*;G4e_Odmdx*;U8vX%>!v1!vL(c6|^pIZi+q-{=j*tmmBGUdS8V}{GFyeZsg(cRN+`M4tLMs?r8 z)p_H66+H55FKhW9SG^_^&Eq1nt>Aw4a{cg8vFPJBTJu(rgX_M2A@F^2 zeoHJTIc4eqVubu=+t%qdf;sp|o~W!_Fj`R;U=l#+4y&uH8E+TcU+UEL4r_mS=rFQz&?nU3=BHLnm9ao&39@nL!Z!mni5p82Bvq%mQikA3Aes^&lYP_ZYcjQ; zHj3BwJ(eXW!}9Dg@`d4lytBT)bkt`^7K@H#Z*=ajUi0nJ`a$y#YzN-QibdM(zG3nD z>6T98RZ`6JS6BF-)?H=$_R?#&gSy|FX-xS%uO~2qDMV((Wk~lyz`bZ_2ou!J?Emt` zgn2*Ny9EOh@-|*rXUt}m&u4*8Fagm^fpc?zwDoP#$g9ntxkIluH{QUcU7IeT)`)obm$i?!ZZ0RlN!c2{Kb zeoBfMw&Q)9)HAAZSZ1O$>UUblh-*`0%2uIWBoGRA&C`bLf}b#g`2L)}qI_+5Y)lpU z)99UQAzGkCLi&7MK2qQBd2Ox`mkK}35!?GyQ^BIkL422?$=ye8Q~CBz;$jPsxSNcP13%v z?$Br896>)iI_HV#)8O*saxWWvD=^(53t2ncP!i|?)&kU+i4t#*Np3CX@B|GaQkG3v zWop`Y@fSDKWpPO5KfGMyIX9M~vV}3=DI`%e?!!@f>BeP`j{GFJb)wIr0CI%#tY&!j zKl0eU$t-=eJp5(Si7nVajZ$$s`I-*0xsRaSY^hTiZ_gs)YeBc=j>uX8C`h;G9Dk09 z6ip<>X1Pt+*ZSXn(J4%@y453C?E|UE2-FM7G2SY@&-Wa1V57+Tc;v%x_KJ&#wZaCK*oIhDAh#e7?tx zT{asy0@6sAG}7HtBE6MvP$WbU zNkK|lKtW16q(K@fX(aTHb-w5RK5h=oHDio-ya6t0mCGxy2ka0=K9CG18ZODL5H9c1kK z>s6ZPAa@g7NiYYMrOBbP5q|p@T=!f&~H{y$V>l|EL`yOnR_y5Dmj$d|1-PM zC-*luMem^Y;sf_DdPHgc93Q!DB?V`sscm1}%DYR?9LlPS2We79U~&Vao$?&B(kY}? z0b~c#F)MrS!C}S3y*0(_>=uonfKT_Oox`<-_$i1tGup!PGD;FQrC;s@Otn50gEGM{ z>cQX_*esOd9(nK7p~=Bf_5TM>l+!^O<mC$-aub+k&b&<=%c~lrJ0lFtNakzipwq zA{QImOFh~RuLZ=!KoCa;Q&=tq8CTxGoZO4L?NRZMjEu4!!j8jH>+y1qGsQRgB+*Ma z9aq;M`SJFPtdo$F4m5I8i2JQELEdX4k!Q3C=j6#)mVmWzR*%Srm2lST_zzrQ{1raf z)=J23k_mkOF6jW1f$T$PtLZY6d%kwqW*E%Om$$e3p%nl)Jr-F#Xhuf>*z4*DfZ7m2 zU2$j7ZmYoM4t6+p&`N_i86h_pX8j5k3%d-nN1c@yJGDm>><9o9yKZR?XH|6;H5YtK z!{4Bzp&^ci>d!tJnD%GjVybf6;lN~q60{&*?k3BXPCg0A57~)EP0{uW1_mQECO+TGVPClCqyXBh+ z4d*F*-iSRZ;RmMWHroYGKPm>GF@$Ks`0Liv_IK~!Lpl%zyaVrhJ_9Qima0s-(ZvXf zYlp~pL=vcj1UOM|iCZCmfaqVHU^ct*Yr!!e+$l)Y=nA%Pn);B?ylgSpFW zgD11@`-j>!mLCa|iS>TO760Tw3q1;b!HN!V%}<{0{_p>v3-I-Y;l{)(bNcOBrJmci-hkwQ}W2ct8yCM(w~;clG0DEoJaE9P{N*UkL77RL)#uNlAT8h zM~^7}S033FVv`so7w1#{)w+j;JaJc%{c=m4TC36kKYxX#jVZAJb90S^H^Tg2 z1ob|uW-paNnE?{I^fHTP>+n0sw-HlEvgw4|5-AW6oNlr<2?t&fm=p-X(Ra+9xFC`x z>s22Lh5Wu=QrZY$pW1v%r)howUn)I%^y=LJlrWBS4OJ0RrBk=XJwgr50~FLPHf{6R zmxU^{?>V4lD_ZSIv;z_Xbk|gCDK9kOW;jlkXYSngdRG&)&(JBS_Rg^YMf9q&*v>6b z5sWph8azZ^>uywf{raLmXd1`zpvl7UtH!zB(R*aIe%;V2Yr0?OJkE38s-nf8yI23C zOJ{6MxnG$g@mScckS#SgS;Hw%(vixMrKm9FRZwi_DvR5iG&|cOlL%{i?YPeiACs)Z zaF5h!Q=+6Y{BK7kM)NN&_uV+d51WmbHq7dlTAi!JdXr0rFZMQQ%NJUd_V@=vy$vLa zAB*+b%fEg5{D9+C(KZMfC$&UanDBO}i6k1QwltD8vv;^w4f}xQMQ-ud^9t&{9$s+pX8%K<1-B?NX2n zU;cGMxkM}zSSbHh`zmx8=VK4F?%$v+L*8qC(EBa;ui#76V05BI7uK$Gx67%~{HXZZ zpSyoQD)9uTT({hz0R&KOff^TQh)#Dz4e6H zj?fOv_W22XLO(*Oxj6w!JW6#%okP`bkX)9iZQ#qO8myEUXvZGcErvl?a_El}NR7 zejweNhWFckjIyc<^I@P=vVd5_?SPyk!-7V-H!=@{n4(oUZA?loK0G$@36-^PSJ()T ztvEij1x7THtIi+RUw>p9>ZlHw{{He2#wk|Mvg??el}vkT{NHe%Id9jjy^S65Q(fbp zaTie`m(lJy<+PTKSzL#hku|&zSgp%CxSrZ6_=Agq+q`i7Au@VR>65hlr8>Z!g5ahn z=Mu;A-+cQ5bj4IK_e#z7G>Z$2T9_JX_w)7EpfXFkIcQSrfZ#yOur{#(DEG}!#w#M$ zX@L178S7kgetG4HYY{RphV?gX@z?HU``o@S6Ji+)=-9_d0)aDA!At?mb`W(Ui+I{13llF7&-rYmnNK| zGpf>%E@$P%^_1|<@~^r_Wr<~si3DcmT5ek8X%vK?2LkTL{&-kQHlDt`zww}Kn8Elt z#z?ga(XNT`w|cGKCS%aD55G+{bEnZ-kd}4#=Q{};r z@Zy%6)K|)GglW|5%Nrcr*QL@&15$&a;}Inos_X2&|M!C91y_#z zr;~CenY0n|~Zs55zIf&A+{; z_0a3HJc~&z)~#v6A>_3dejOF3E$aK^XfMR*qfYfMUm~@t*b3^*7isIXWJj^5SFbz3T?%G7sg4IoKVjj$?X# z$S^h#-6p^&6XD*NkWDA6?XkDJI{@^AgX3csP-Xi0oq2H+u>S}A4k+si;2J`VsGal{ zy3s!nJzM(pQZoJhyK^46#VxQ zBQ_}cm1n5%ZkU?w^AHG9;;|+O_&_%zkm|nm1VZFUEd0E^3slp&5Pu>%W_EW7sV1_@-3TR! z(vD;GVio+xN8sPk*mq;oH4AfP>n9(3_!K&?%pF7IMp_|`bShy1wj4q|2ZlWgVI;XwV&JYD>(5gs9`Q#Xa+*8uSj9SnoT)62ptiRw|eR zeQ6=&Tp$iuot+$?LyzT;!|sP^iTaW;CrjAJQwe=@3rnv#0!Qo;aw3c+V6s4rOA_!D z$H2BY*4M7aNZW&8+1p}9V!aS3voSzQm~p#20~1rX3L>F!_${KRxV3=On24mSnn(uX{sF3n5}~Jswg6|{2H%^iXD~~E zdtFao1YsyZnbD0<<`U@A%gJ~il3LQsQ*a1e%j@;^Un4yS7~k;bzVAF%lG&mpU?##8uD0>uH4yEsz-cvqF~UO6VsMa# zKl~($LAv+L2N-)NN4d^#mx8NEQt?b5JRE3v{>p$9U*6*` zhoNNPO5S*u3a4XsBav)BQSa8rQcrJh{aVZM&kEL!DAFAJo)gda9MjMMJAcF@m+iqC z@bf>4S~}DJ5GP1plhu=#h^QWJF5Ts)py>mu+6=2q8}wdWmoR_@h+7G;LOs_Fu(Smt zS2vI}k!ZOzw{?6M#kfYJ@?W99w&ELZRw)BNtHh}0ea^gx2H@b(2Kz8wgY!fjwMYyc z_c$1d{Z2SL36w^FBP>GIh3+(55Us27RMm^zhzLVm%ize|x?^xf9!OqHAeGp2+iB{S z^zZvNdx-$bP>H!^L*+*T?WU4WO5vm0P%_K#J~InNCYi*T#Lqp5|c&|n|qye1wq>Sd^ z%yeR5c6_6Z)|P#J|L8~srmsdtPEf7G9X5LDou8{5h0syY4{lE z2?!YosP-E$8`m?o+CdA7*nFFX<69>ERAmtHFZ7kHJ+gKUcsL~n*ebDc*p0}r$~(=#MA5i z&mV-)&vETX8M&#sOZaYPqNA_7zx|n)A|jfZpPxtF6URb`U;xFbJ}hDmXBRO|4jh|A zZ5q{$_<}Nz6~*)4U7b~?zkCyapHUOxV%>wYUdAwkUCMN;>hO~N8F4zwLclC}H~Md$ z)7Qkwt$fj|EoZvKxJgt|T~R#pGC2=METu$--j_Efa6EIj>s?y3wx{~@@J<%})cm}@ zs0?BGc4DQUz8kBWIbYLT=r?Y_hNZ+{R%}&XhPMX^PJL;pU~=Un1 zC*OgoNCXbjaAhbz)GJ39!_;;XyY0zX#~LO>&lv#*&|RySsBKo z*)#L;B^X*f(~sWrEGLy~;W=5adqjh^iG#%u5Xj+_%$bO@rwD!Qh}=i=oE&A0O)SmG z)ST4VtTNXJcL>GAQfy;TeI#i=$VII7%{9-A3&iUn>qL)k^*z?b*ymum>-Fn$InXqI zg}&cr7yLBj0fxH0q}{t3J1p@UO5j6yDiCmfFekM%kNXQlWUC0rCq{<@1okhCA=j~TUltni_Z)SAYAZu9B3pEgXM(Wrr zf{jl5Zzf*P`x{E|0Kk1iyQI;z0o>Q1^S3+4w?RGrO4u<4U5e`suz|oO?EY}s%hHr` zzNk>fspl1Vsexnt{jqSP&;0gCk43sr6{8bld5NDZQ5iQBc+8s8KrYHjRq`%b36PaP zK+Yf6`yzbfuOh}a^`sC1Ce^$8#o(-O@va5f=2VYb14V#as%zDRcOdcUMlW8VTSYQ1 z@rc3ROdy#kzCo`B$r~U+UiGH!& zu(Q=TxZpCy+;gv6J<)*Ntpplkn~h)^yc_ratfs0i@-3~cb%C|UAo6&L7!AM2{_jjf z)Z?c)i|RL-sIPx6E@qar(o@N~ZA=D9h%-@%#OMpO`ROI!z|29!MBMFkaX}fzbkJC&1XStn--q*MC28ywNgc&UO@L z>jJoG(+e>-(-Y)ns)dh+(AjsqED6Q_@C0hfxU#xZxVkPUDVFpS4vQ3~9=^bmE0;Z- zwc)3H^f{<;;)`W^Jc#tXPfD-Iq5;ktc_05N2|M4<5pZmvRw>0-KjD=R+0iYOYOy)J z-8qhizYSzEUBPer6nP%4bySSl=aM+?d}0vr0R)RW1~W_;Kp-+JCt>a z#kiA{7D6Z*fm`*xqTnn$Ix-Ri8oPmktQf`Y)+nOu>I@s3zPTaOYO_$cl_+DF2*u{; zxaUfRq;GqE+Cd@X;Pn2n?IT>wUiOcvOsL=|7m+a9kmnuXaH;=!Kmd#AK$q?II% zb-wUr`wjCgEwcEF8IXuU+r_M;=xVSc3UONH#&xRdDs{LYG5ouO%_V3pm;>*yW`eXi zM{+u!qvwwbSSTbb(P>woV=W(Dl;IO_XExT_-Z10DVHbqajQ2tFc$QsFChcXy%vIhV zj^HLrJerNtZzrl_FS+2H!42%k5vc7K)!s_Xi5l(ZHj!0;y>tV4yX?azHv>S(;0Oa6 z1184}fFxju^H4d;RY58{8u01g%dvN0Ojug9Pa2sU{yHo9b5vZO0vL+)!PlEOf1CVb z#DRsMKM5o$YMEx};YoXC+YyhVw8sfYTc7%UK3~S|VlD-9r|D0wG{9#Es1P2&;ca(6 zd#ETIacCJR@MQ3;_JX2)9LCbtyxC{2 z+6^na9%nRm&D46|$2D}#5bRZq(&5(OocKuprxa~~n7(wMSj?ok|2s3jUuO(dbbCL4 zb^w8`ZpoApRP!(K2W5-H%J2sh>F*E1TC0IEaA51_p0;R>BHfc_X!npg6O;&kbIPwC zvLSqo4<-uSs6ewrNHxIsVZC^nk|GBo)E!Qro0~6bQ5AkJmcgL6$o`!&*Lc^Uu%k2TE^y-j^at=2&yD(UKY$;?VTF(MwT_kD~ z>OYG^?+p0bSGt`;%fHsW0!h}u=7Aoj6h#fxUESR;5btqN0s$eo;+VgHxPTDLG7F_= zdNVTopb&PccW=Js|unF7NEh>gdrO^-nGL=5BzUS$w zOx)O3*r$9$gO;zmA%w9(=RaT6x^SAHR-%H~vKmH8M$L%296}}aFJTI|4u1^~cCb3z z7%ghVT=~f|@WZHbH2k{T_MzF~m7uPGatDl|KKD2SO&Xb8>+e@;6e0Y^6z{I<>uVzj z&w@{958aunpEO=osT7KGYSoF1%`opM%rjp@V$AUrb(hwog^C{Rw{wfMQwfivl5L>h zXgMBL3j$}bYPmQ^M=$#H7$q>@R7#{Pguz`*{Q+2X!=T3=p68fB`+#FPJ!|RbJqAwL zPK>4ZYz!MV;Mq3wo3{-~jgc8;|H7nr4wPq$Oia#P6=h&Q80=^T&yH& z3PP7jZZ3)cMq$Xxz!C>%Jb=qsL`3vQD}WfPA)z$?dc+&bejwT$K^#%>pSzCuSFxhc zdFjzVQe!6xAxSd{4?i^ZJXB%M1V%-<X*O76as_-;5_ni-lHTT2?xGGRn_vsEKF{Q zUkhbE^t&=|z*}$;Rr_o)dg^rQj;~*;*H|#4fPbg$N)SHTIwV6fiWzFh2GGiD36rVY z+uh1n)k;D91_*xr;<}GZ+rBuIHSW_}xtJrCM@`U;*}pa} zi!Jg+3H48-9(AEDnn!*12v}O&#KG|j1q1=oD)mYfp`4*E80mr5k&HJS+O*ujU!2e) z;-Eof{0ei9XClt;PU`u3x6#Rxtifz4#Dt^ckuf3?5ulnF@IenGv8NMrf3X_Hjj<1 z&f-*)f@24P~7 z-3{{UaE^b^b9nVbE8g4g1h(wZi!3-P3HRO2A~wFO&qH<9vg@vRf419BU-CvPU8@Fr zbEw`|&C|aXHeHYLU*s#9Cw(V;^n&O(Nq=)fE1vFATo1KzCv+%)lsOmf;sCGXF~k!Y zxVO2@OD+Uox=viru91Vh2F^Cv%(a7R#oc{B93cVykHheYG<(DQhnZg$ygt9iwS&-C zUtr(3Bn#XXD8a8iJRPk9(F`l=>&diw3U)N&cig4i_=JS^;JOL}lj)`5^cNYtCe^;X z#&u)t=5odRh8fNm&!T>zPO}X_l*0i4U9*b?I1d4_het`DG}}V%Vc^HJmzPX}66tV2 zhhfkZ&7Lo3kFspaOqKU<slmtIv6#EU;&hpObU9Ob0WVa)hval`fBI3@v#eg^mIRklYMlfA{^R)3<~lssQ)I zcyXPDqMm|;>X34^l*3|`5DSZu#p5@rA6jhpjN@EF>D=m=smW2NV|OnW|78ei|5sKP zl=)OYvzL=Y+|X%?UOG?N`+lNvyP!OM@~V36bEaPm7|tw>mwU}>>G%~cNDm7Uic>Zg zAX&G94g_olr)@&g{{u1?@;#v{F7hE2vn0=@!1sJav&=-u5&^r$)N5jo#w%qB9wYeU)h)a9GjPR+Rh6`(11K{ zd_0YeQ3k;qBw#P?w~=F!za(CKru2*Qn(gHMh=bL}{Ym?g8t=3x|Jm5tdg}%=F11V~ zIOt*gy}_cp+O{wKeL#Np<{uioL)50`W*5d}UlJayO;l$)`MMjTjC?zqZ*9jvtO>On z_O(w;q_e7Jq#0`!3kp2>rAI)7sy~- z3_6NeD0GZZ=^Yrb1xX`JG~SM1g36~V!>BF=TwtL4UNaU=K=Yd(!FQM6Ke|?p171+( z{gBTyqq}IJNt*_akBW*F?;x1CcH%{VzcKOKTxglRp`q3WJziOY3EdR*Hy~qWV}39p zTz1la)bsuK2b5Zc>{(lGj3<(`$dnSC^G?r7!@XcS3%#kjjm^7J^$G@KlRhW3VQLn# zTKquir=Q=%wzWK(q?MQN=G5`DXxjx3zXL-~Qc^3=?->)S)N6?|QR4kpGfl?in!dqj z#1o}y_dIiQlNC(A@Tz3BzR(nKe!H5KfmbVdCa9E1w9mo&7Mr-yVTqe84!3O89|dftI$jxC#9I(?;v=vl5t;uUzq!@(m_;R>Q6%(_2KZNJ{cZ{lJ~DtGCGH6kr+O?J0~I0#>|) zzn1pa%(hJMJ1;UuOJ)f&!8b_zJLf&*dE#WW@KjF<&^P$Pc7UfAQgh~GZcZj=X7-9L z_Iz7#jN;;Wnu;S8qqYB%HH7IauyOThJ6%M%Y0nIq4i3me&~yMSLdFWlVIz}K29Ymz zR?^J^P!1Y(^wx#J!<stPVVK>stHu z=bb&*SiV5kK=x-MM*Gv3r4i10HuqA5&VA=ay}Z=!pN!_^b((c-n3I}uVNFTO-1%-6 zRei?Ye$Nt($fn3zpXD`bwI2o~f)>F&P2kb}KWjjsAbcVj6PYVH3`Fy^E>gBVg=bZ(e6_EQ4Lu3vwByD$lEl~%1ZtgmoqcDmD<}0 z|LzqWoMrS)A4%|(bt`;|kj~5Mc{Rt&3=@GyANGPi_|br!NT@}aSc&+vtvd`DUrIRz z=%8{yL~&-cr9H@G0xAF?0G9ZqGDlU#tUbnfASr0npH;7OzFYaA)c5sUewnu0R1b7w zT35xhefp0>)fakbFUh_5wj=RdbK6VEMzj+seOh@O+rcJ^z6ZoKOSvJB9dT_B_S>so^bHYbXOqS+z*ce86 za>9W_76MV&(}3K-(j(8F#+8adXP*6V7^lTjy*3?I|34mpR$_F$7wQ{uWry zRm=blN(wo*0f&xMg$s;y4riPzLBWE@%4Gj%2Qv^gMt7Hh;YQLW8LBv+XGL;qA5S^M&uzXa^VF}VFn}wDD;JTVcH!3p1=(r0!QurjkKn_J^Udthn zCT)SKZ#?@#^%PQ#-%)SSli}1)qtaUCcZnC$fLJ{m+948mclXPHwRiBgM*vz~mZM61 z6Hi|6YdU)=3O5n%zZn0$#tj6R6s0P}fMGlpza`?OtW`5D8tE$=K!$w}dyd)m_n*6! z;Cb4@xBg*O&#l+K3yxe|_94}e6;}3MQ<*sN@nWgXP=0ybWCe4&V~&;FeZx|8v({TL zjI3mS5Ssk8{1ezqAoMi0%ZWoK@e%pUhtd$hPy;qJ2;IhMy!dhdiXrL+${S|8vPCps zH2OULRHLxsgjWYVDqvgT4->kb{rFV4ogw`uE@kNok6*Kc&zcBL>>r0jFsS!on*Dfy zT1A~Yo&+SZSYR>8Ri)Eu$^YuvvuCl#_uQtd|0~K3RLxSUOo0bqE;{pY#&gzM(I$04 zyQu@}ekvHxQUBzMm!b>YWDLGKPzn#%dyI6nN}pQ86`)_h*#Gc(Eh}HqlmiyLILo@sai);D8{{#)X3j}B(oYRx!(_= zQIPM6l8z)k6%*XWX5d=@6X$O>f+Ntg=|t!0i$X9b0)m6r2{(2NfNbC&HJa`dECEV? z@akHJ{(RD{njFdaLhQpEbtbmk)uO8I+xA*SVOB3hby=&xewhY-B$&44$)c;r>fyu5 zT>^C|pf^JD@;xy|Yt}NgrFBYrRGe-apU_*6g0!R>f`G@1*br!peX>*wzCJMoHS7bQ z+S1d5#4v%h{nGB5s7cz`Ba&2|(c+&b@uKRy&KmFD+oxo_-C6l;GvIF8$W|tCY0=rJ zQQ+l?<4^t3KlP2XaIyz?=8OIMdto`*ulWK7kV3(#kOK7-rR~vf=yUZR!eQ&sD&_LH zqQXMZXlO#@h#b5?h{gjT0EnFY4=Bwdt*TDLsDEYDB1cbaq6B*mqRf{QqCELUh=p$G z5S4q)uI=#5f>Y z=aDQ5D--!EB#%CN70g}#meA9~brdJJTM`s(-Te8oa)d`bX-Q`LI6lP&?b!W?`%6+O z(+D=JN9$ytjjzLcOkYNsSK7nxE9@4u5&i`Jepp~@xS=|~alJOM)wCk&JAQdY_cAo9 z<;Thqov)Gl$53v$`P%d}Aa%rpUCTQ*yrOV8j0l6HH?t6Bpz5#UXlMgfkoMLMfS~SM zKs1wnnXzf@OV+!0o0X?Omz9-`;ZmEm_$R|+aPygfRf-tE?%iJ>&`cYVfZ3C<%aoSJ ze-bnTW(6&_-gI(NqFjGTPIhNsBGYxvp}X$YBJYq53<;nWuNm+=?d@^$pY#w3%X=2>&TX6107^naPR{DQy}k|t6>RuwH736y>#(EIdxM|a z-B6&Zu@O>-K$#S3mH@LS{t632Hns&Y7M-lLsN{7?Z-=Lub?8R`54xgwJFRmA?i9wj zZj&s)PlyK{BjfA8DaJ?u0GNhC&PXYHfo@Nn@2pUqa^MK^ja9Anwx&{GKM2@aN~Zc%`p)X z5%OTO2Q1Yu1jaV+jmneD)|%A1OsA9?+IGLnmY-YQ=%M0TRqqt1S9p>Fq=+?OLTHoo zfK6Z$IPI2sl>!o8>rzsTV?hpqUFv9q_Y>lXwOBlDYA)zi$2 zR>tZrmXrC;Krs-VpvJ&%_}N(yrfL5MAN5RZic5^S69v*!Q>$rx6u;+p$Z>JHS?tuU z!?lOow%GaJ?4PP@Zo=^8=(vCXt7VFo|Ju2AXj*=M!F`x1s4yW5|L>5MVhNK4NSl5M zGYN{`9>*RbXw2YA)}C}r!)4RR1`%~Im%SZ$Wna0jd?l34el(v(38@k_V6+KLhdhT3 zu!+#0B~%5X)aI1-{7uuF@FCK(c^6@r(G|j12R@WSu)Dj~_7FY_%(urnzZ`-yIv=#1 z@3W`x$ZV}Qia#%HCyeT)i`km3zXPjL1ZYPo!7Vr}-{PyEy(=vS*cHsrbZOsZ4cH+n zBS4qpM;zoUf2^$gUXB-xZN*$w{Me4=pC4^pAvW+)CLcbWio%w0 z8QGr1Ij8%N`OXod4TP(-An=JjHJWZ90k;dUXEU*6inRmWX;*Ge^M_2uxu z#DA6d{o|L~o8GCNZJ{mSz1SK(*|}0WZE}@&m@(B_uXvuSi=Hf>^4+VUxv_dVwYQeQ zwb-FZF*Ukp`{33hy~LVO{)(IG?y^`Uc99~LZcEEDo}Ag}^35H1)FC5Hb3#4Qyb@pq zSkK`wc)y+lgJ87ji8J(gija^jJ-(Ea0LoH9m_e25X_v>Yq}`SdMDBP_sVtNS+^mHq`f3KdPwmqN6%T^x1a6|toa zWc64$nWUt$;j4~;Wjz`?>#Sxhl53vjTmlxnT5ZA4CKg{J{Vhz)$arqSSk}wiJ5~w^ zM>uq#m4SH>xzzvl@5?X`1TRd|+qcU%8=&RMhb^@;Td%o$(#V;geU2t4J4@};?u`95 z{~|_gbPGwx`2z|I)xv*28>?-4tdd`A zDya-xd(<`4-^HARt+#X0RTJ8%AC(XPIDAe(d}lLO8c&e$N6U-Y|6Z6d(v-ZAwW9wM zY;-95W+TLNvHvw5!)<|*J|@M2Xz71+MVe;>dM7DuLqMv$rG!Rz|7qr%`u_Fuzb_iP zCpfHCxu{Iywbbf+bTy^BplEPi?}Uc{$p{0H9XM!20`$Sr*jVlZwpdwk)s>aca|ppf zgd5`xiT*FjNd9c;ODzGl|*s4@6j5>~w>#rK8`#wpOJ*GH7}Sxs_cz;8_ugtZbi z_ru(vIiHkz!9l9eBbhh0g#=_GTpJb!KLC$lBk1E$sJ##Q_qWtU4%{Egd;K$_0G|fC zW9>S1P(kju91+0#Stj!0ih$UmEc!PMnwmBv2A0)h5N#JqK^(i2sCVG<@-o6M10O=| zW=BCQ)S>Cf{JAi6j`F_EkrLXkZvrSo+U`u z=GHzs?Y^|l`>gF{X3m3$L2}Xi1Ai}+{z`es?Pgt3p5G0jPfP?^$x(>H% zGhki8*w*uKRpraquQv$^5z5ctXt$dP%+FT=xgpPgIYNiT)F8f$st>UkRjqc_k!RwA zPXv3ee>kiw7oW%k(ewcz?4Aet)dHt5dPGQx&>GB4*Bo}kE&xAAHUVv~Z=CJc?YFQR zYzSx2w~0Hltq_q9+ysrFgk;?XKNX}^0A!Og{@dNYme_xM1u4k&0JJlo?f1dbEWEt& z@Mt90){YudKq_ZOg&8k_Q}QY}joJfo-sv&}m5EqCfW~&mCrX9t4N7Ss2@+2SfQ!iE zcB>%RXy6W!nJ=ccwFtU z`d)d*edp;~eDRW)>B)aJO*h`5yQ+oNKle_eZ+Obw*JrEtPmbos?+GmHlAqi0vXx3j zKjsCVFz_;`o=4vOAV`$->t6LBq*#hK(prZk?PiM;E z4Gj(9me4b0gR%z-r@~dcaYv*HOO!r+WYqlA12A5P>FUB1FMFl4p>u|C%r2b{pgP+_ zH3@!)UxCs>1@);ESY5+J-snKIvh|eu-&x4NjpLOqoFlj{4ndaIlSzAHuh7aO@;Z#X zo!LngFgj%J_Apn93NZ9$aRVvKJA5qm1Ajq#iyOYO%uETK$CxYgt7ioxQJ@0`2V2ew zzn|bx0RKtm(Z+|E*-6IgEmm8QWE8fws`_iDfc+#tc;dU(nlpm$(syW{ClWOK?Irkc zFp{l(mkOgK-(a$LKqo-?T0FI3f`2(m%=nS>X*fZtMHW>he&MIKJ1FoDoJazp|3+)V z_%WW&sL;rEr*mK{0m$QO0~S3mT3lF{ZI)I>|2`IWi6}&A#b=7;%PchmuVJXd^9FKs z)Zl;u`v7=$u#)<#8?em1cH&$l5U~t8+?dzr)wv)H1;SzmP!YcdK-bww*gxWp>0J_V{m_fxDOU+M4&E1M!u^Xz%YO!uD9o--CUzJs5(HhTcMMF z1U?RN#LQ#^;X%0PJ%f9XDB>^-??-4MEx-c=!pOp@xr6`|QOl4drFU29?i=QI zA9Z`ydLnv4LQT22yj!ybDn7qu6msErD9|&A>Fg64@9-eE&*o~+K zd>=qlZD4gr36#_l5`GEu_rN9;DsX75hk+3v+no>_DLM=-3&yZ*T2fi0+lYrOMmn%Fg4kB1)A+fAY3{p-F$maLrx*Xbk3D6M`eCOetmk{F!A+1s9D~aPSjRfZzQKWvQY8BuPQa6% z14M)hl-o=Q+%24V%&7s~eZ&m`P@GS8-lV@dnVdK9gc9+wiN*cguvXoA41Y+)KjQbQ ze|v|s9XCqA7}_;Y1wAm)DJ1(cKk*;dp0m=Ar^X{ZEK!l2EM8u5rZFvp>+@LR-U4#H zZh}Nj!jt6<>tum83(8Z1+NXl2C&%7T|X{gpsJ zfMe@R^+A6@>(PuGnxt;9;)7!an`5$}&Zpqa2-YwaP70?m_yC_hCD^)bsU^yl&Ib#I zIU0t`ajReUDgMpRw{A-J|Eu>~AJNv|S_m%Hq2gk^NrXoI+*vNE!%c?B;k{i_)$S|@ zPCN#ASM)8i7U8et9k*tDFSO)M?oT=y;mh&)zceQJt3rSHT0zZ8u z5rGqo<#l9&ClIeQDC28gX|xnw=Y+uQ1f0}&D`!JU^CW%IbZ(TRqw(=W*Hu(r9`|&w zQAw&6eF?@r_F%iHXJDYXL*4rH4DnDj^&Su*ZdPRST<*MSP-#8@jQ#8Adv)K$iplo# zm@dWJv0s^~=Ak(pPc&m z2g3EhdmrDTodk|!$VijaVnw#GuSks#eA`ej1Kk!xSrnyF>arL?#5BAruZQj-rx2V_ zN2s*ouo>!}(Uu1D|6vi51AzRmElHB$^zDo#AI0bdOcsWs$D&z{a7{p& z0WL5;*!w-EQ@g%kH#^JrQ_MZp@h@A=LpI%-beq)P$X+u1fiks{(o(CnzI5alcr5J> zXBG-^8=$mu3NY>_f^0+tbA3VZ#AiuB{E# z*{IK=q!>_frQ$E* z#CH^u<^jGFDF9e)|7!j}r-#p>bGIL|kwQyj4ZGl`Yk;AJ#gM+CSywb^@DpMS=BVR+ zjBhC4QFB?MCVaF~6`*^5dM*AQQXspi(fh5l6~bPFnvXxozgmS2V-WED0N{yDe|-GlW0(ZT!T8fq zzprA|QPy(LLcF6BmL+8boY1UqU!Xm?+vj$oS&Ydmi;ZQcXQ0I59!jBQWMB1B&jq72 zjNWk%_fEsG_mM=naRBGRgd;G^AHL$3)j|I%^Y}3%O;7RLh^MQ|;^!QYBX~dw`$BN;)jpKh@l7|qMiFV&z+}0Iu&}W6>)e=0 zaIY_}sBm)v4$cY?s1a<;aNZB%DaGb}NJT_MU_%HG3-_~uq?(hP+Zuv+R@c@rpCtS* zdqC=ZDFR7P02wk17GW4F!9NPCD?jj1RD%A z@T}YF13kIl=5^Q^+Pw!i-D*|AGM5wb(TrZ32_66`rP?9c-E#z-gS}UKlHZYj4}hhD z^OlfXaqwzp4ZdthMnqu8h1WD;(;+V6T^Y{ZXk^4f4+S|7xPpJNAup_b895aSBY}(to@J!k2AON z);Y6>EeCt!`fKNglSva0B$*CRt3hVXsmT{IcQ9<=wp=_1vDrtft{BT_W2l8jh)3w& z=Sw%Z0V$3HNTQ!VztPv*tU%7p@I^5^?_7e>CL*8%jYno{ zv=g0xfdey<04;8XZ8h^elvO)R$H z&kT2>G?4OcZayj+Q&CXBgc>R4V%3lzHjw}{mU(O}JHB_Jc(VhDRnO4yg>VAEc>+K< za%d;sUr?H;BTk0FL4_m7C2xvSt;lg`dnNDK?maF z2$dd&r(_N^1xAU(N$8ZgJJDCgUk3GyYsKfe1E3WI&)tup^6S+Y=>@<$08Zq!hDU&P zUm7Pu#D%v($D$VsjqofdArb z-kbBPRwa!abC8&}t)IEgGP>2X}w*VjkNP{6($`~CQ$0Y+ zyt+XZa{iV6QIn4&Y##|ox#`|I{|4%R}qT=&~6S%Rc95_v?xVrLk z8&=o=XpBmqm76=bTfaC6Mu4h_V41&Z2?6er$}d-D;~#2)@*H`s@)&Nq=y~N&@yux# zJD7mMg&GFU7mHq_eC-tYi$Oc>-czP21ByKabLhlUD!4YT}*vy{!)CPb}7Z_-#58ZQ;}7L_n%7lzp}Je*Ld3qe3+0|B*lN7IvS#F`m~ zKsJwtvcMl15WFl?hKsX(O(4NpWdzvNOp6Dd^TXSNP~NXjDnsy3IL{nyKga>@lRQmA!ye{GO z{g8Vw8o^yA30JhXW(NKut;MsG^r2vQlkEX*)uz_>FM%TuL~fYVOQ|ph`f?p4q=1qGP`aMNxLvOBD z*#UJ;939nxpug9~kheWmVO?j8*xJJGTY*;&w#G+D^>K1$X8N~;^6Bj@HJ$kxZv3^_ z+@CW}m1}Bj*dt%Vbgb+14ZeM-xXvqQk6facQw@zcC!P_Yjz@UBmMv@(-c( zI-cDJf0iY~whMhSMKW_b|0Pt!U{TuajS?nZucDtNH|Sd;4v&t2#A>URZwDz@HlPrD zc}`w`ta77{tMG%2t-U?6h2}r^97KNoX$fVp)a6c%?1%RehyQ)v$bE`H>a48ya@fDd zjBTxcnsu{=ayzi8EwNNHb^LURGL$5xISl*V806I+)x5cm1B_V^G{+SU%P}4nOm98J zZzF_;mlnYi*_?|_JwrnXfd^v#lHr!f20HX8m^nf+i6acRb^8Yfy0(0DOicPAU;)YC z1FqE?Kv)PucKfbx96$iSJoT{2aaDDfsoE>$Y+|hCcsXnvKFv6jzKwRdDOYNx^dZ!F z;FnW;)XRXWo3`nBc=}4)sVyy1NdMgAyG#A0P=}^ytQW{WSH=~Ppq&m=8&zG<3x?)m~9 zeJ^i5^6o3mqp6n+=E|%t#SF9SBh)4>87lucNSvq_--MZ5KlugJ3W!$byc{M*xP?8? z`|pS)wQjx7LP&E3!llDV*ffmohILczF`uJeGT$$KB}9Hss@iHG1_Nf8C3THq4A+Vg8elE4^qit_S8Y1~_q;Q{y$Oe9|D)3k5- zR6C3?!H}fjEa|Rx+kH8I{)#+ot|iQo_b*L1a~@jso47o6 z)_TOVgU#d0K{Iwe)-k4+bGAOlM_-&0F^*wN%Xb-#GdZMaK{Im#%D22im`63x|79Ls60AIEjfPk;roQw>p8GPJ(Xz)QPDivLA9|~UC=C4k zS^*k;-VB6;1IR@)^t&&$c#mJhTm8fffgneopKR2F-R4O2;Sxr%gXU=(yll8eH9Ie# zkTJgR0t#|QxESDsc}&g-m}uOb2=Be3k&~&D@J$scOYY14{*iO zWr?*jbj>LzYh1YU{W;o4^uSU;ta=;E?b|b=r9KL46U@OEeoZy(7p<#16wP+Ucyghq zV$S+rYs2f-hVj#SQY{>V{6i1uMIrAY`RO=V2a4x*2gPpGM1u3YBNqd6fQWNGO@i&Ha)|gtQ}%P+!damE zbIVn)xQ{|%wX$N#Z_{0-jbF_xDM81!V4a-AgMxzk`ucE=j%E<5_92u;qg`A#i4RPp zPg)3cuVf)7$wDex0c=Y_a?_d|Lso2E{UMhkR;J4)N7fsfT0N$I?c|FOj;v%gPW2CZ zOvGIg#j&krNE#*i&*tlL{2o|AakFOJn&AK|IQ}_4g+4EFtr7(^BJtvrJh%0K$JA>^#>z#ui5)=jAq`?Qr*B)T zKaVz-{jm%>USJA=Z+WWhtQ(YHRCEbc+0a(B!(Bb>Cj@1cRP&1bgrNXK6~+h!{qV2X zb@T0P5dj>ti&K;iW1oa^cK}s#HvE9PK6W&lqufRPBfhRJCx%e&p}{5&*&7 z-Q9?7bR2{prIuJZI>wG)^;5$vpG4o2v6OgC#BwVO44n>al2a&nBJF_~dCvT))G-T1 z6n)HeLQtsq$(tJ*SV7HL&bN9jx+pY)h|^y|6j}`XST-uLNAb$Ms!vL0`+}+yZU})T z$QBrsiXL|}d3rBFj4@0Ef?&SzwStn;?D);e2ZertW{MatQ0`6p{q-v~<7;SSPs~Y* z`bk7Q^G$)f{Y|h1m0N4wwP7vwwSaXNaS#7v?8A$S$l36mwo2?}>{+~fbBJWPoDpgf zPoFqk`I--#$!en>K0*6eOeo_W;q3e##t1T6az_DPG8TJ5yHSuAdQcf*W0$(< z8D)#_pgVC5>^&$ws3$8U;Mz8rf9;;j{V(Y%!uP%XX-4P~E{mc$qA{Q8B}1REgrx0T zbRwQ)zvReJ63YI~p6{8#00cIHaBWk0x z%`L;@WTcodU#4GeLg{Vx-+K$cYZE-l7Q#-HjAqWE(aflEqgLdG5o)R4;#ES*!@8lyfrfR*N1@HepRW`m)a7wSog6Apd%@WV+wt)q$j7Hk0W;g>tOj9Aj zZM+picOpRG0)1>Ldz?9H4n%JV=$}7?zWtkif^VOtwyUvDM3vO`$Z%!8P`~I~PC~gQ zmv-c}j+pD;z8n^_F>~#sdSsPX&ggXNh$tDN7VVhFEh0mOCByslKE`_Yac*ywEQ<~< z?I*nG$_%eUtqfVD_!4m^jrGs%2Xy&xD~Hj55paZz)Bq)(O#l!K zVFi%oonZ6=tLVId>qCzI+O^PquZL8fZ+?X&MDC8P`S)O|nP_C^eK|g|%pFGQ8cuuvn{0ayE*g~(?>abbTU%AVJp zCwEpwnD9Rj-`JQ-5k>d7;*d_Lwsf(8ax@!*0g|I*wG~ zfS(81zKllkr&m|27|MN6%<(6$3t=$5Ak>6IsGQmfj7l`l?k6NtJO9J7IZ!}Qw1yXSeH>2@A^Gmtjz9L%kv!Mep+?tvhj4Lo&?(0Y{5HjoGqdP40xlF()>)dOq&TG zmzzA4N|n0>FhW8-ptJjf{-DqwmXq^b^T&`Frw=ygFkKA;dd%+C6!Jd8Ph5}wTF!Wo zan7SRk5n>|Hd!MXvzvEskn)cC6xE3xv5VBPvZsXwi82##{TbR{o+b@O!?#39wa+=ri8zDWYsnju{{h23Lq{F05cdM3tAUI zfo&ZfGC)m^jS)aH!}tgK1;9oKpv+;J5^T&4xKTn44OzIkt572)b%TwG*uupwcf zEry|E3y{AB#rN-2CY@KxL{6iZ=6zblkpo$_#sWI}-OQKHlnL=O9ckI!M|?gn;nj<4 zs>PJ%1=l?pAag`X?8|TT!B@tQXL&_d4ItqQJaFhKVm#W>TsC#8`1u>A^8)EAj*Se< ziXK6vdA7#_xzcezNP!BT~ZMPo0GHlFC2l58!vI~B$34Sp*O!cI#Jr4mTzd$ zX!2Y`m#G1(u9j}|;cR0>Qy-pWR_n|XjL9QP6a3N~zBj z!peFHOd5RquOGMgr(JWqOP?>=q&I@JU3l?Y}ZQPtesvd_RZJ>^&mW zF_ zHdY%v{Fj5#d98Ejj;=7?2s<{dpx=f4p~{x{N`l=u$zz?+Ow|W6J;j#v?1wNte99_G$f~%&fI`lbW*w9Nka3n8-&<*!N)ow+SMcim z`dNqL73$B2;oo_n5nYK^%z2R-l?e5p!=||XCrQ_+S&u1s?NrQtsQ%D%upf?SytjNkDZ#NM zuAxVoJLmTVhiYY9{^RdxIfIwlb{(5TxsQS#h(C69jxB5%5KN(kab4{Xj4kpLm*?H` zC5nuV1jJteV#mm=vP_US>BsXz|Mlk`oqP6P zPsN#jtvQhE5s3Ewf`3pVDkS)+R@d+2NEfz$lY|pRX6}sh*3G>GwK<^INV@-cmaM*wfFui&CIg z^*!Ua1mjA8hsB|%Hml~=rKAU1-9pixu35oq5!s0UeG5?u-=ayCSLw_BX~a=ZQ{Gp1 z^6aPs#mB@S{&_Au9gB=Ha;o90vZGdZ>K8vl?%M0%|8Dg;qmKFSQb9^B5Ocq!J~aE6 zq}p}4?6xVlO3)${CVZkk;m>sd=RWCRMwF}HM5mYYL?UTxJ1gfrRXzUls@MO&guyoh zZLl~zv+fBPzok+0mda>;a>hH#4^^!My5s*|1u3PNZQ1ReS>r*KXuRC1H@;4F@qMN} zxqhQgUFcf9twjhZ3~qG|&z$Jm`tQPl4;U@-tqPhY#IkwB6JkE!;d!T;78`Jv}+C z9c*3AOq||xI=WbsZB%!ckH&W6<0m(a+ zs_eFi&-OAp(;px2Hhn(+`SWN0=g*(iFcRv;Vj*|ZS7=7%)aF6?>wd#;!t`C%xkeKo5 zucKclo2f1A3|UUT?4Rw+w88S%xgV<*Vg~t>8yHL6&fO8cBdz|r>hIq_PROJD^7e>e z|LGUP7Gl1ip?)%dU!S!n<6B8X!1cx*3(O2w@%M#RuirB>{B;r+ic3N&gTczDhhm59 z6*-4vt`sMhEKbG>D5D97M+XUw`p_QK)V03y0@ylK0j_FH$0T7I zDCqQ_X`St_Q>n6w1)G01B0mEmFwR{@i}A;)eqv}3IcJpjUp!2ka4)H5C=dgsnJvo^~}$z?iuPfvgNG$BL72UjkN#YWD*u28^_F@x=K33-}8}>>M)UTOU#(cFUbSsgC^IpMKq<2BSak{dGx9*xU-2 zq(or!N{)%S`TJFmW`Z z8nNHWk}}f6u+>|vT-i72{hld78WgLAKotAO1IBPynFq$t$6-dfBQ|-KeGYDp(-A(k zX8ps17Kj{wJ6LVT1Dfe&rx*CCo*d&e{VZ8E3Q9fh_x^ieG|*l?4|F>0NjhAY0C#gk zR$QtA=Cg(kPs!R#4T7yxQJVvxkEdeTJTTawnZL-V zJX7#(eD^o=ud4AFZ{8}eMbfvMY${hfH>IOC(ZSW*;Pc~_NXftQVU(^MgToaU#|<%Z zGuHZYvY*9HfF@;D=Xaq_8fwuOn)eo0V1MS7jgJk=8#8DHGUgR)E1@PEOcPx6o|{sV z1vVy(hk&2%1>s2Ece+&1a?2LJ@-R!wAAo@U@zWau4w|B9ML$q$6jeFQKdq{&M!FYc zF1YP3$w=nNVx(`ta6WF3OqIQh95W0^nvg1c#MhlkCP*0aW!adpi-A`pG8-cKqTWGy zjCfJ|YK!_8kDoxHVBgJ`uIpnYX-{6p-yw1T7x ze{8jk^$#!SU7*#*owxgf;Sd;4e>uh>-FOb+ChIV#@l$TPPnf9wMJp0wle6Kl(D08B zgx{&!@RSGerR+%fX^ayG25CUfE|u8Am;w5Hk3>n*e)})HG3N^QvLu5(T`fK%W z&0QW}v>gh`uElO4Qb9GHHy7%KHLeDKt@t&j;1==e&aZgAkBeUl)SOhf3#|*&IUnHO zxielqFO#k)Z`{|mc(p}{?Sql!ve{f6A3PS6FR2$u_W?7c;o@4a@$duZ?;=C2$evd& zHu&J!f+u_GJ-&puw~{p3FB-u@PEGoJ_TvrXxhu*9#P}AFFiL2y6s0DrF=qWYdElby zVE{rTxRgn*=Bq}BFHf+TXN5!QoZr=T`0pak-2S@@U_qVPSz*LM$0Ik}`M9h^uHFro z4LCJsvR76CN~b|RFEW7L(*R=(Co#wpx531iH9`>_m6%%ngo4*=AVl)?_^)}_Kk7PCsjN#W4xTN8^ldLCDi0Q<1 zC`_8!{;0|4?WQ6seS4SxmRJ$Uy82o+ZSotMNKMW)=~sRc6vX(1rd=gW-thZeWe;ey zP9UKLNIL(3IZudHi)UL_=`NAW4ZZ=H z=(j&tHGhj5jzUWL zV9~33h{Sq=mavjm#0JG=bzi^OtG74phCI?{r&wCR!m^&qex7u`-S za0nlBGklqewmnQ1FMv#AfbTe9y1yvjh!4bx>2L>(iz4tND8alR)CGBE%ma(Zy~d~=WvTqW zh$p>HTx0h;s)N!n6M4-Gw2=j`p27t?+(&D%Xu#s*mqhBhoo7a}MZq zYaV&5r6N}Zyy)|Pk~5*d{rwDWDR=dgL=M-`BR}k+iDASpP3g2kJ~NKIoaoiL&H_l;*N z9%_QvwJXv&?YD}W)6zLxvV1bGg{LVOkiTt*3omekuL=wag1b$Bcw=7)I2uhA2NvS* zfo5Ym%azJ04f>24JPIk;82>5npT^El8l-L_`MDqSEjT*UEtlCkZpIQ7J2fvhb{z!2 zgm5nFw#dxGgKEv6-QbfD<-YIAC#2#2w8us7kq_1QnGIn8iW4(QOcNO>c4tMpQ;wKU zqBD-HPsnSVG&~l(rj2wy2a7{G%)(vUw6H2nJ8ZO%zqN}cH@p>efQHPwZNXLyDH{%c z4-u8z3BYW_5P0xqH5(a>vFMw$TWujy3vXBeCIljmff@Xvr`PmWN(PTh0D_II=6450n!=+wtTV z{NEKsHgx(-wSQ`q;?x#R25G{Qty9e{%)iDZMnL~pqxZ%9f^KDrNj!3N zGM)rD6kV?&g&%HqOq=^om#>Rw9D01S{7IIDTV#6!op)>Z)L#e~8^e($6a@ZF=j@Y~ z3S;b-LYL4FSRu$Tg6KwdQsaHG-^KwZFKid6}0=%Q}NCG^T`Jjsu`(+JK>>UG82`silcGdj}2wB z4xB2?mK=aHc1$hK&$jrA^eJV6P^@)klB9tT<_+=*>Qhc`tg%|0c5Cq+*-FkQc-%$Jq{LYd*!4jVQHPT!kpPBM*{Aj^DbnXBEH4rnD z`_M&YeBaf1lK1ef`%6@(Pn<5Fo&1tRYXg92+#LKdG#-DK=R^5fR#Jt^hTbzJdCJd3 zWLd{sz`?@(#bZQwqD-eaeP&=?x(*H-o#UXX*#b#Izas zJ`kQU)y5+rVr1e-IPmp6IvaDnWb&{^HBS+c-zQfD3N)3|N{{|jv4p$rB0e=?fVy@@o4@u*L`)tb(>&dz)?-yOiCX2zsn%E#e+ z23{>9bEQ{XcJnnFD3!_|KMEd{8|fCcSD@GKvHly(m=($TJ?=ppdzuu*4a5}|Cq9O^ zRy-o-2b`K{ZeJFyQ*i$wN^3mVU&~G)fm2}!Y{AU($Y$&G5etIH$Ewt7CW0%(woU8E071h8qJurWDs* zl^Oc-E+z7B?5C4UR`Jv`+xoVb9ko6G3b%BwCR0noCk;S3l#M}?ra6}34*LEBq&R2b zPhvvrQTG#D6roQzn4*WHN>rmSyhQC_tYD0M|p$=J$Uq?`INckY8{_3`%DXhLA-2$xUbA-uOn;4M5 zGX*D2rGdx0vX0eu26k~|f>DKI99oNzPYNGNfj~A7d`8#BjTcME%)k)z`&$iWYy{V* z9@89y>ZuyrsZ?Cq#g1clwkwAT(L{U0lmep+>Iw0%v(WV?MXz5!coFDgBVXw{Tgx?S za>9RwSaZGIoVKoR zJlK85TB7yE*q8gA24khReBc*vV@ZbFCWCIWda-S&X2EN>(J_&8_+}Aq@Ay$_KsVi- z(Xt-^vW4_VO-nNpGI|olM2^FGF|v$hRR0NWrL+Wz!`rV}AVl06I_-kU-?8;GS755a za+y`yNN@j3M(xvydOy@4`gyjmBm2j}uMapFxPyu&i_(t_&ijy*KO!-e9_>O3#O|3b-I1W$3kTGI0ig9Ca`3u&i*HH=GRTrU~X>=s1 zra(eY>Dx@tHa{qD)akPS=@ONKi&D39?raPi&p!89Fjd(+8HgBYNY5))pjVFibLC7| zSI}g!dah1L@BU14+R}6nk550p_$`!|_s!UFw`ryE^Utui=)R8{s7{G*PY}o1{{YMM zP0ThBe29)##99;_+lK&kaZ~vnF-5grfm0_hTGI?zlO}C)-phRe&FZ|+x z`kP)MG!d{eGGNgy7SG=XY`sxbS}ol{xIR95GPb~ z!VdzN(xYem!peF8HeW*WB+W(!u3wz7rM%dyel@LEOyV5$R5+o@JB(M^It#m1D*X{hMBJaxg}4`vcs5M>h?VzwY59ynj)FyI%s5-b1BP59qJ=|V%m$Mw@$1rdyVao`JY zU7?>TnZj3882x5KC9N6JNuh$o^v%!RUiAriapn>r?sV!jI_66ZUn>+e>fUj=53q_n z+`b1sPmnRK%~!5liO3c9WvD5$evI4J-;5xr-s4ihslL4zC~REf+%fl(2n%OQekkg& z= z=HnI#`ar=hqf54B^SB62(7`|5m3vtPpQWVU7MAL*)}~@|D{4|nC9M$wF?}x2539IL zOeub?iNWw}(%0ykCQH%eU@96E1$N<}bl)}HPS^8r+`2d`M)J3+6+IaW{s(~sI=Tl- z1a(}|5Oyt(+B%w^>t+37$q(qUe7ezVT76%K3BQY_1p+oEIE)a^P|DH<7|-(J4)|t^ z8g}DC4JxG;+)6YNq(~Y2tpmLc+rp@nAueNhL1Fmc+P97<=B%KyN^O6{!u@HQ-Z!TB z+UVVpj$9ZXUd=u5LnV1t`CxxcEWgM-;({(_i)tT*F}cD4Q6Upr&iXW9fyWjv?g$ju zj*DvAX^*6G&>V-qU0#y$3&qd-JDvKM)Plp#Sns{_J46U>2fW<+JSNYo?(~L~Gbtmg zhOqr0IKZP!1i7!TJa!tB)$aFB>1M4Srd(>nPhcQ1A2$-1kIrh(*9ls3U1f{>cbz1# zDW+(8e{aPnJ%u(ng#0HkG(313k@q7HGw=cI#%)J#sjT(0 zzVB|y4y~B8Xy6PHvbewFfuiT%3I($DH;7`TpaNFrZ5xn`Y{cISp1Im|C2X4baYh=$m0SZe8m|>U;LV42E^N`;6irP#LB#uzmgahUq&Xo|4r_ zqJz}>%|NmxMjp}ctJPoS0rVm*En`geI@1f<6zyj^zv^+kFGA)DLrA!AE8h@l5f*qv z>xPvjr6ddxAX;PQ*Pi_xQh=!SjI=){4{-gbf^rcWQ*#RiN~JyJNIu&2m6nm#^ip*> zuh1%Cz_O+}vq)?xPR|lK{$v8QhUT2M{4ZletC52;VG-1sn3? zu^hd!#X(}U_>r*!sRM7pGK_u(w}k7qfK{aFZ;@&pvEps4jxzpp)vG!618qvsevSui zOv^=iES)QxD77{Bn@&9K;fls3=OxDz9a`*BY=PuF&!JTvNPXn`W&E@c$GLN z#-KZ(>L6mv!^*+Xn6ST~v~W8=b^z#u3vSnb&al^+7n(%5*=<0pEIS%J{6ZTwQOA~p1pCLP_~A-LI`q_3D3 z+spnbC09GD%XE-_I@7G5A*aeqdBX*9`$J z;<*^Di1!B~5dqib?MGSXQ_-m>y^LI>PBxx5)*nsAi_HY5>=(O_Ldj+b*&IZZlR;uZ zXOMGVbm;%P_(c5YG>D9(i!?z>@0T z>QqF7_yOTwhQ4;ehZ60FzRmDuqKGn@y;G$HtgAl?O*{OC)dG)N&JkQhpIJbT9~= zwx~VIs^l6klPfkYr88)KN)g#HR~l&A0SR5WD9^fMI<{V&5Xz}a`d?Nm9HK0j**C8=Qab?s?;{r7I;PNeX-2|o4HwG^Qr zEckXwurf0Wm(O6@3DFXZGR?FaYVLPDQjhp#dex*&NXQL2SZsw+3E`D+AZY*5@Yj)t zLWeeRNdR&ziKj@Nu}-o+%WKC?8tRF=G@}&{_!j!@iPBT1uU``ZCgAE_i=zA77y6-7Zuta9URyet-XO53czQE>lzH~W?M51ZZ4eo zP(qybH&L5Jgm^y;-RS=C?V;BrR+A0Fbb7V9nzhvLzj@EfDJeb@VQW^M5~mLQpx3vg z{MzCvC-iM1Gjps~F!PYB{e$Vh%e6mQP=O0BV14vfDF-s}bsNe(%b@q5`($=B_#Rnl z!fz{3&iqKY@YQrV@RR^s-d-#e@ozr={(5rvK~tNALw#B(Swyl$qme6odN`|XZIMeH zlVK=6ddLmS9IG^_;aFGeZ&e}ARqsv({ik6%zZF!V%TNUk8*{Gf!sg<9%Gn8RfIf-< zHx^vB@8&}F@g>l*s1~+V%fLc^^cyygq~Gi6JiJw`@9mT3dq&paTg#PQUfcstmYELM z_Z!+;rZoO$OzR7quG2oP+f)G=0%;&UNv1qExNs)vSUS^5O06+*Abdf0c87exRC{~j z8uPWj50lne^9OEUtFSVJhwmGqI2G&W=|F>95p*gNA2bWbRf1w0V~Pbo*r?3^w=9%_ zT0Bdqhv@t^;*O%I{oZbvyAcC*wude0=*SbjR?i=}eC{PL8V(qd9?@32GSiRpHR-+= zPi6xl^zL3<=pAgcT3uKCrDxWK$@y|V7C3hYBGMI=)-MOVh{0mrZH&0UjT;q>nUD~# ze1>5aq)!6l2LJyoK*L&UniceiOyMR=^zUzcJW$?9xV92F`H-B()2_Gs$!+=Ko&;vd zpqbdedv73!k+n{&9$Pd>pM{ooQc(dG==>xZ9DqEad^(mqm~SxuS!@(gwX5FoHr4HQ zV*|QPm9uNApp~ME@vPr;;f}T4Vs%KVuSZ3|{8LTGSqKc!7sX)Qgnv9ptXz1uS~0=k zlY&n5bNHFPvqy;rG?5f3-=j!3w zxabFfMg$VU=y9;5R`T3EcW=CWPv&&boT=$cO;KSj1@b8IWGlQiEW4CybHD0SK#n4bR0=Q)Q_ap7 zvWsMJ-9D@Xv8P!TaPxGP7;bhE+-h!Nnc*B@a;`!>X)hVyM6?5l+W;EOlj+K*>NR3A z04mgK!qBBp2Q5XJ_UEo078h71UDNR@)|%B+_R+(wZDrt&mzpebJtfdoAYy1l*V-M# z;vOX^ZP10|-$)=9$i6qe`n&k5P)n?(=TwEErQ&XPc z+dnLITD=WW&C>-~W`izt|J*ohINkQ$Q><%DgW#ZJ?VrwzIQqYLUR`_a3;@R0w^_Os zOWvgU5$5Xl4 zmWS3r{pUhXshl9@aZ(|D&Ap$06MI$XR185-5@<0P@>vN`sRuV&uU*%&i+85V)MU7f z9@X_6tfP`p1Lv*H`1@vndHwr~ZNuJNS|M;zFtqE#QqtiD5~0)L@=z(Mdi6eM4$y~i z3}?atef~ATo?K#L{_M6Rkhcp)l*`Y>uw&@GR(e{_FHh7XOH?g{^Pc2=P4M3ATT7a{ z<+_cR@O0?-(_@vuV<4`CN$P*xf^X$EUIe?jLEwaR1@IqQl)2~l{;&tDk}7dfsX%c! zSuoOaDdml(N8OS~+T>tqm#hmqx?YW+2OkK``pC_rQM9-@5XMY~slo9xw#GIWQ|Mg}t&Wt4>vc=r_GjV(Zm%cGjU<{p4&={vCx@N{0*f?Ns;ATDCtO)s z+1=Y)<$vQLnz?!_z9-Y?w0B6;c>XI#`XfL+afYUPcu=KDv+fL|=&ed^FQ?NCQPIsZ z9`A<7&mKLLty_!QdPY<~-{T$&Qvyt{|26xqmCrel^eSzse_C&q*)qpwG*(lBlO28q z^$dm`Ze7N;H@&wf3`WwD;k*1rJc;K$^2q|2Bs`YhWGODhZm~54!0FXKP#?hTQ7yUi z@r=H^9pU?3F_xelPvqiYrEH7-Js{Br%;$D8dIPDu@B;ao{bQJLJ8GB!eL*d&M9by^ zKRk3QYuu#%NJP`yLusU_uC5+uHY#ml@w6|7u4~2V%eQaRc6RIp6zs+;onht{78Js5 zN+VW(CSj6Jw-uzdg}|``&Abw;0JwNMzY-`II7V#X?YqGCyTr$W1Yf9%?g`VAtO?r2 z9tT}1UpsLDe1Cl=M@`(W>#sDXZV3J6x0K` zZ%ou9(&lq_oY~WO@KTO&$JII*%Y%Mq==;plrNcz5-9lyK_<*fu>8PG^t73T!lfOW= z3%h>hH(w*K^kF;ng}>1x8sE^zm^NNuiL)zS4|nGu!!<*RU9dEvK*&9KopAlcb%FZN@5|9K=;_e^-Ke z1JJ02!x_2;F)(dD(0cDKV^D)|$M~54sidRBG7u36cF%Sijvs*{E(Hct>8mMBVvH$h z@Nzc8RA6f;Ae2@v5#S6eHHdv9X}?WJ2b{Mp?O_2! zAXk??_1nMlrFLAEh8Q^bTYs-9D<~x;t%O%O+;piiIhzyX&gZK!M8kHmEHUS3|_1xD-`7#KhS{gRTBvV{T2)p*yZJ6&hf zM#^vA;LX?BGtQ5N+z0p?&{-=?yKG+6*@cf-x+r|`gOHlOjtPO zVkt1o8k+yW>xr+`rwnFC-!I|@K0bXv^0-k4S~C@k7s+0LcR~{@F?NU%qLAQdBd=RX zu#X!>hIvJAHQi#4~dhsqug#f<=;`)|&**wR=(+&Mj%D=zsZ z!ie^ zlT;wy!1nsZz$6kJM$)Zw&;JZHc3;ieO{r2&(9qDap_aZ?km_@OSBk$Izt^OqHgjMgU}#+{=WhhyYp zN(JjccI%vVc7`S38ntvRI1?@oh*Qz$zb2zQo0?)QhpQe$J5!S8WgQ2YUBb{Sq)A zqf`A}46qKAtlqEytoZSBrU<}fzB)Cy?7Oea@1O(>BFKL$=rQeBaa(o1f$bT71A_Nu z@XL}*SN=Y-wVkf47Lzap%DX6aLmP6Q{ zxHEw4epHURoM;ICudzt@h&YFz-(;9w9pJNWwLlk4O%H&6Nkqdi6Qn) z9lnTb#TJnn1(|<*0`d}8ZkmRlLFdxOv@p7zg8H4;SZ2Y^!KOy*bocJPyg5Ixp7<^^ zTC7uT@dt!bQ_Gv1n`fdPK79BiKmTib`tWFm$ZU-@S(>1u#aeH)-9kfU|7tV9PvU@p zK@ioORBx7Eap_SGB^SWY8rwzkE$lbnUVSKv3p3z1I^Vpl`vSlL+InV$(l#VWQrr*q z_S)m1=i@ScSn$UZ|8)wvTnFg($g!ydi5&DUlF=qJtl6p+8q&q zFfFIh2-E5lR{)|2>Bekkk+eI{cg@*Vbp&$9CPvJI9p9({*c0#h{4nS zH>UI^4b4Z-zVnoR%vVYy?mlUyd%wr}j$krvS-dlHx}&=w2~0}zaWKIGUU!C%BW`A| zo;KIE_&IG(PR^e)@(1X)2L`_Ighx&43g9Z!zi|8Xr}#Lw-zN4%Qr>WsWKLCTh=}{a z-`c2;_)1?FERFrCR+p#kK(}l;pK*Qv)zZ1!LBFe?8PU7qwjQC!K>?$ah}YmBUoYLte{K(E`t6%JrE_vnR~Vl(UWpbG1=)B8dRNx~vJCmGa(LIjXUR zQ3qYLU57q&wY)klR%1*>Fe`IS3}6=y6q;LH!tNQ-KGb=5+UhF=Xj!tdi(UOgvfr$b z^fa0$V`xzlfI1M=?_eM@_HN}9NdG2D>OYKIdNzLo>vu#^8xpL-u=;z<#4B=H0LAJ; zS)c-rs8=zh2s`?`iBWY#0aL~d4?2K2dLe`*bULnTfQ2hZ6pY+~;efHy3rw{z9amZv zS|uqW!%(+3ycWY$ucN45T3K1mzSj@p(5vHiUX^Y`9xGH;At_$~B;l~<$3>x0vqR=3 znWJbQdec9i*@6nks1@~Sk!xGuK{$&d>l@^~r{U1iouw_V%yx9v!i)XasF{k?=gNx; zbzK*D#}124&pqJ_u5gF5Ri3x;UEw70nVE*>OP7~k4(+!d00Y~FQqWR$(6J=}pt?6YuhsuM4Bv?=%M>2s-s;1GE&2jf!l z+mKI8OuSFAt)vz8`T~@pqh1=v!x6!y%L6h1H1itz$M(9@tasBY;YuOsM*!vV!#wq zhi~JCmjEz7x4+a*UjWrHUy6z%gtwyu61j}vP>P4(j`ad&Rf!ik!0c}|Leac13xNuL z=Xuy&dO<1D9(pOQKl(vgiDg)JX>2*8TzvKD`Gs>=UYCMsz(Syr`BhVb*CC)Zc~`8z zUXJ{=t|qW0|KG8M^rhXk#XRIQm~TxuR!DHLq+>SCI0nLDt5;GiTL89dCj`T6PEV1{ zCWCd(bV(Al$PUr7thxJO5*&&P#VuK6lT@I7-xLRB1)XERooexRefl=F`*)#QK$$< zS3kengYT0?Fc*R~5`Yo2M7_~JuA&k0vQ!zFpEJ!1j|ra*TxXaT_YsL0XcNhmjRlWH zJ>0b`yZN`p!KMx_f#mZKumb?Pp``63e6iI0nE->&|Q? z&0Za9Ai}Qzrvz4$Ia)do%~onP-2mK*nEmerXq21XL`+(^zH<0x-i^pm|KKv<>T`2D zr3z!C2$!3G4Hx`X2|oo=EW0ebFVkgn!Cp10w@CtFI3Hwt2p(y>>y)+9VjrA!WTYL7 z&DqoJDn^=or$r8fM2XL8Jm{HP{vo^>@vBg+fTvlZwFY?M0;nP-CG6DvHr*Op1~LGx zWmZb>hjMW+X1LD_JU3k?WiRl^n+9H!00zlsYIqUOt9ol5e{}E)-9c1!=}bdvpP}zm zf%XD0Mw%a$C2i_*|Ic~>g#7HGFTk6)-FJV>qet1kj#zYARL3PIYML7XY%ed#a1baQ zvz2DDnRS5bIpr`50XRqnZa6SRMoED@VoR9~G+;J1J>DzY_%pD>?K?3|tzDwY162qd z4;`@?y7Gp?OZ|8}pGKQelR9u+zf33srUQfn1wdd$Q7_2NI5aJ9K&G$rzhG_s0cZge zNrvD&b$#XKB_xnW)V!#qqC)!e<;$4^4@^up!j}waBz4$_O*Ls z=>wDi1SQbriq4 z&&c^uHQ)Pb{*&j2=l8@fN@T-ikDKjg@E0rXq6YGG>nc)s4z@?>*lf37ytpxMKDd;HPY_;}~W&;FJtFO6xr=~x_U z+bCe2K57#7SpYC?W^3bznJwRDhA$Q<)8{Luyeif#{hVeSCgQPAH83zBjNs+vZ9JRO z)2VmJP+kIN>MSHLV8RHr$gRI&+PPAuI50wEiSjj~D2C|jE4LicqSKNt486LzFPE1b zopj1kir1HPuxq4$mh>pTjP~(+!Ib=Lhpz`)DKlo7*LcV~?^{Hx>}R z-|aJK;N@Jw*j}s{ATf}zxnz_?v8#TK)H>xF{-y&>zFu?#5bFsHNzY%T&gL>~3x%1C ze!co1s`40L!tqo8b*Ay(38c7o5dxUO02(uua%_PVup-LcD;5+@>l5#8m=K%X(7m|R{nT_!WhqhW7qiz zVQU~C7#hzUuvIJg991TJ<$ufiTHKl0K^b-qEMv9#!2PUvDpbrbC{);OTcz@bnThGS z%laD+1T2Hup<35_uQ16PTEhg64VPuUjjYuZ+}u%PdizvOQ?rhB;-wyWF%+AT5w9Mi#zl#tZjk zF<*iD1s8=de@e?vo7%4l31QHk;fUD-kGXosvHjWVqjgqY=7N0V>bdQSHUiM2mmRbU zpDer1(Uyp|t~B-~v7o?sH^eW@yl)e#=l9h~d*~lmy=U#ePp*T%YW%rhm0bFxlZyU6 zhl+rzz)w5UxGFt-`(TGAt*z7N0ySGmXf%l1;%v<#vT>wQ6k5#iodz&`% z4lyzDH6tba%KCaJAmcxN@2_5k=U@u{ES4Xwg9if%KaU}`VWdi4w_Qw|LipIUHx10#BwF7i+B5T5jOYuaMzH z3is%Iwa{ndf;f1L%NO(#A5Mp(UTxL-?Y+=%^47So#zLO_+y--hfB$fx-Uu(uGfy=F zkP>nM6C?~!n&raqAK;%h7wOj807645X?qrFI6`aZ^`REaR^-dYYrN@_#afwdtE9DU zb-s2%B-sA0%%i5Dq)u=$lF_{%94FMWSw_3YR?9xaj1W5`D7X}GELA&jA4V%IG+QSE|Q_!w-)i4 zl3FZ0L-v*P<*8BU_2tppM5P%jwd7J!kjk?s8%M}_Sae0h ze*;OGKo+zlrDb0F*fTgXlHheLIC^io+-!3=1)EbTL1u5NvhVGZ(moj>H_E6fMJ zsv1dpxV!fNz5O0F_2+t+&(MMt=oSM>up9^yz~pxD9>W@^g!qGMvqj7n7ro*=Vcxia z8sg;a{H!QeWp!aOEEe0+(lUxhQ0Y_od^I-U?_ZZU*TNa}s}Bz8!v-ynuJZt^I=;JQ zLF~EpHgo^*Xy*(v?atS8IV>~;1JoTH5D>tWltN_C=z`t#k%(;d z{QO+I!RZkW5w&?pNr_g@E9~Lq=UBE=B`=+vDhh{+Fof{33y0?@K`|IVLB?D`$Gwz( zmn-4gO>Wk~k%@WH;o;$SEkM5he3$$2Nn&DL41cr0PCFdgUZ?UfnpVQ)+Ob%+i#hL! z*=;82BXQ?`t4lARwdRe;d+z8m^O1>(du&=|p{=d08i*@Cpt>9$9X%Tti;0Q3JfC+A z!&Uzd?=$YAp9lUIgYBf$O_DCb1*h&!@qXp~ueXuLe0~?2bk2S|4yV@Bi>toi2h$h> zR$dg-5&t1pQKuj$isK%2068)8@sR`ULnco?L0*8DW^iaoYN^dXF7fFBg=V4pC4l@7 z=WNSoS*km2fBm=%;MT(qT>50z4@0$e2pn#jrt4W&&}1~%_H;Qt1-rJ&liX5!-~ry% zahIyFn2#A6HJatNIqmKpgiu81xeuf-(55$@#%eSotE>}LlFKz(ajrdfBZ})CjIH~1 zS282Wn7?b5>T0$wLA$%Uav>xPzl$^o0H8y*T3qJ{xee6@K`I1sJ30*K!oVIUti%q0C)+>4dFBjnK&GKiSi7VV=p87zm;Pm-i|$J1k@5mxqonQ1UPid03f#l zT!aBj3p3ZP(H;r(r=IbnwZ2>_T<3jHoweoVpjh#1yfgv(S1Kwh0ZDyWRCtmE%e

&Ao2J&3hFwt3dgPi%YpmGxs%-V!BWz1aZcv%0jM5=Xi9~M^DiA(tN|*YPc0lj>_+_)1zsHf9>`NR%X!5BZx09;l4N312nutKtV`u z9>$O~*d8^_vS_(na2+!N*2l?>9r%z(H#gaq<+M#q~W#!$n8R5dh0=L70(4#g4 zLaKqXe9sWEboF+I=D-(qEQ54MeVc8yKSOL!Sb2qvx`Vvx7<~V!ZPX&5b_`NBDbNe| z-B4iHa%3VYn9?+!@wo4*1D>k9siC1^vbg^>+4JLtAxj2Cw+fm)q2VFLo4h3s{9jTlq~9O+X1;`zl9 zfL>_PXJ33A<3~U1$-S@6%C3DIkGci#%v3T0Dxlqw@0T*Y1t_!{a^b%73p<)dFtPji zw@nF93qdM5>0EPlUNQ{`pskL;_f+m|mFeYb@*8Y5t*)R&e`o(c&v>6Hs1_6|m75^X zWHFi^0qj?2UthsGFB=oEV;>XPwD6C{B+v^*M-%S{_R8C1h-d@=9x3TCdpBsEOEO2r z80acL4O@NWerT1uP#zLcNK zW6<&eXKRkCTr3CrWM8hkdy%)XTs|)}!+#+5BMJV`{J>Jbh1Sv47yma6?}^oJVr{>t zt*Nf=0$Al|x%j7IaT&ANmBt;IKPPSEN=&*wZvV=QjOJn0skNEx1jZwdItjSeeGdR* zd7{<#;(q_2M|wua+p=26CBsh-V*&!(P`sT!Gb6SX?H8N=B4IPli#MIHQE=oG>a%EW z78D?IYXG#Z@(T1(%v0@HTogkSL<6Xq8i@OZZkH36%A?p)5D1MQ;B}N@@zp(AGo%#P zBW-bdVju_7NUq6`W>pbO|DEl(&Us$7${1BxT&eh6cF6KE(~%~ZVSoC$Qb8q zQ2^Q&*C3(u^7dY-Ukd2bb8LNoOifQu?*{;QrsM?sWU6=)P?an*ZM)NJbdzE9T&Iur zrA8!7@EOxXTxBpY+>g)H)IN6?m_VEHu!?me0bb|p`%@Dyl6MW4{Ou%wd&dAB7};=? zIL_5~?YG6mFd6B4x;aVb9S4A(Wb9#pTG$sudffl>+Of}lLQHO`(Du$w1Rxsb03Ax; zP2uSdw1DInG|$o$7aKdr`(#sKu-^j!cid*Zgi+M|@*ZN39$^^y9m(9a)HtT4dz%&b z2P@9Z&nuV~phe0NEajBy3Jra~M$bxdFSaAAV_T5>1V7c=9(&NvMgmxAKo{W86Zvmx zBF~?C1DRM+&2}kt?r|{ph=t|NeTBEmT}E5V7$9A~0B|P!SLf|nzmtAT!0dXa$N9Mm zt3sPP9aXl-|Hsx>z*V_@+ipNWLQq;kP!WR^=?)d7L%Kl$r5mIX5Trx8LApVtL%IY} z>27q>-MqQaz4zVY|Go1&M?A+P?r(i-%{k^6W6t$Qc(1Ce2qEA9<3wHS{{KEwdfEDQ zgcRbrM)A#?H%sl2Dx>S;*$NgG%(98xw;_eJfCz#YL@jWGlG9As%&g!_S$Ptn(CJl> z<)fH(-QZmuu9o+kg(-I_&_{`)om~SY!*2E_#jvNk+{ zL3h`6a|UgHeKHWpxK#M{6~Hb~ws;*L9uoEa;5^<#`W@{o_mIUIe~aI14W;E8u0Myz z!Y%FLq6u{`R(pBxk8x0&<2e1ja$HhGawMC*i>)5z!GSn};+f7U4M61Zt5uT{LRi|M&8!Pqvx zTxz1>Ec6%DQi^86x`N>fc=FF3Cc?> zUhG$;rt^2X}k8d3oa#mGnZ2i;Ev&J}p$4pJ~}JtiMqq z-&S1qN&sN`#blL%jU0AI1WS=>(Mq;Qq0&kq@@w=||6lPcO4$t!pPiuLY=4|W!1?o) z9}nvdUcM}KIao)Zj)5hGW28S)qQ3&E03wZFZ*Q+bXNjHDTE*}q%PIa*^b;Q(;u7aQ z6UtZ0r&Lr_(nVdQ!z`2}!x;3(cu0kV^luH*X+J%1O2w1as~VR84A2VqNd&NcmISF_SWf9&&{e{c+oZb(5vfkEf5eJI>R zt8JHYX-g_Jn6L<`gMg@{G*ofzwJ*ZP!oo$yv=k$Cu@AdQhF@;PPq47C5Z-4_3~z-{ z@xAPgZR`E}bAJjcBPs$&8PcKfGTO<0SNf&u9MI#}(NT4xTDy7rGMh3q1PeP!=v8iq z{i;!cwY4^E^?=BPKnDIv`{h0cYR95s1a-eZm)~DcL?4)iw#kMMuhambpp~s{xr|t5 z?1%78JVX%YCZlJ-cNz4bOb{``?L!@yCtsGdB6o4k5M1?unHxDdh+ z7^YlzWD*5jhQ#7X39+%UXUhfC6?3nWklg)1mw6Xjs7Vp>&%W4B?y4P1aTVX8mEt{1 zeKRR$WozBGg=g%OlFey8cA1b@ezvNrD)!VpVSaTr$T%g6?7QubjrH#ui(QwDvAvmv zTW(k9Qy4C8bICcCi1$zRdf#lLOBJOwUDg`tvLI^^Z>< zV3$qyCGvP*oS*b_C!*_>e;wX}e&LlXsr;UTi2bk9;x0hC3!bd9?QTrdK<&?FuO2s8 zVXFF14VImil@4sCe+Z}0aa{qcBZ1>$ca*Q%FE?#8?Ju@x4Zr7(b1(XEN|%D|FvsUF z5{ZVOR5rI^DGL!z^Nfs)R6gLeoYL}7s@-NmG(je{e`g{&^tilybK2f^xhO#}BDG4X z=&+=U*{vxxYqd>G?eBPOB#7u@oQ2|FA8IB}$!t5efr6u)V8~3M!I)WmS9zT{gSLduhm~wGiPIB})oUC<(P}G0lguP*cXD9UVBoK3V<)mg{ zV~SeGsw9T&IdKHB%=%tG>8uDLzh*HjVy1Y9u_%UQerr8Cf~m;wEZ<|Y#7IE@%xnZR z^5kI@?nu<;Yo`mpBqZ*e+`4$WgR;MBX2UKi#25uOIg`dEY`=&NPsX*f^72xPN#1I@ z(SX_@O+-6d&h}=bwGH{=;v$OkMjiK%n|wwxd6`3Sz&9b9;cY=m(FfB2XJ?L6EJG2@ zN4i|fhc)?ok-z?~=?B6HnRQZ!7l}6CKgm96rE90wAVsMZ;YRaRzC82>9@L9=Sv#^%l#aR=HHq1kub9C61%sBF1>gsN{~Edv%JjO| z;MuG=wzI6xF3t}cPk-EFQ0F7l$yCHyF3KM?c{&x0j<}?Hg=D>&$h~DXnSdZG^zH)! z((a=bT?Ue48=k+i#qQHL1gZ75l@E-3z?qodP@Gup0y#k1mB$=OYWC1T~0uo(}Q)%paF-Nw{SKSCPjca`M=P(U*3 z)Tyl;D(4SU0L8mL-Do-2SN2uQdU9NoG5P*=lHvN`_GXOjj9E*eRSQm~a*eBqnWZGn zW{tJ6Ie%+7E0xn1&9oBcdRjktp7eOF|~5}ueC z1g0~Zo){LE=E~1W06*sQiyMgM;GtV!`O^ks*ZY{(a5c2J7?WLU-d;umB_z7qH~IRu z%3$$h#7x#em6K=N-rUlR-lY1nP1_zH7NM*X{l@(Q@ySru+H5zRkoN#&ef;v*C!D-P z-a7nM$rI1tL`3}2h1wLQ)QrD+fz@eOi1F-ag#{yClQDu9adoVc&X(^$^OcBCGN|~hkCwu$xk8#9P86V*K;tuOE=dE zFJjyN#tsg+2vH7OfCrqQ>tZ%npokHOZfn@We zU7x+K(3l906pT@*cec;(h>kQ|Eo6Kh!=NgA__m6MCfh?hEwR{2&Q&oT(k+!VXz>J7 z$u)2Av0l!irPi&sVf`Jxf2@-tBFKhNIUHD_FI`#q+|IiXsQI1rs01HI2fPaI%^G{Jv_E)g^EjIH>t*i|q zvd~tpOm;ebh`cXn&>437xtttJnq7dnurLBj>xZqhKpg`eLHSCF`-qe?I1s7MGy46t zJ*Kr3-*BX&54PaU;`#@>IMKRt&w+QLaqZR)W~GoMJuGgogTbOEtsr=`;$-)Ct8;dq{^D`?R>2)A>gD zn!12$tFquH^$gHaAR9)zMf>7F*f$}tDmpsuqJ@2*fbO8_<8sTo^IvddMPi%Z6VW0Z ze1qeAjsh)Z=8NMu>^Bkx-Nv{RuguU;ek!LCWP);uzc~3?Z zy!~{ng(`ty5V^&~^o>(Oy-Vw$CNMDYYLAl|Nesh}rNu>@QsDWzh6xC>K)+ zOTDki7%>b)5@wTj%8-^WOuvs zTdg+KA!wB^KD61-v;9IVojK2`N@o5!*gNOkRq~~Znd^(t*=#kEz~OP*UfpRR(t%E0 z%h7|sW@=_R`S1Pp6VQS4?uvdOe|HdoGC5|~vQImYh|p#@I_*mQ-oKygVQFMM3JQ?_ znI*$&H6wicd_GiY4vIs%l(48?cwYe}H-d*2;x%XmA8oA!Ih-ZqM$?;rn>d)DDpX-u z-z&k;I$suX9chkL%=Jvt?n?EBK>5cI7<} zbJy+VxLW3T`Tk8M=d7O4AS5`7peQYSCg{v~=Z+|+){nQbR;0o%2#Iz)@UOMP4w4eg z_~%WHmK)=>b)y6c=z`$v&eL0{38x8XDiUH$?IE9P>$9InH!X>uxp!j0H%PmdK79CqvZ%n)`wEdWYoSakkJ;D)7wRQ7 zY;4M`AK(awTv6=mw?Rx_$3{g&^RdrFa#=ax!PkQo6m^A?i`#A`?8@V^#A;@vYSxWV z+!dSU{2u$7m>m+l0)V!&a|`%U3I{Hr4m2Do&Z>`BCx5&vF!~jO)5WofNq|*-rC;{d z$PD=h`l_Os`{K(*ly*fiPXzaNB7W!pi_E!0AIpoFz{h~M_3-;!Bz*8gfOgii&6rwM zR%qbk6S1>nhw?i-i7A9BdVX#W9U#-;@$sEow-8=lUJ*jz$+5C0?GOBt`H>{8gifVK zGV}xD5BiE3#YE{#Y#ry{bbygtIMqoNA;4_G_nrsKLBydSjk~|c`4P5*LuUC?fKl5L3xhqKvnBt^s=^pZks`eZ6gE9$Y7#-QDk?T6$I;XzCUMR7el%l(=H+lS#`xSMEjqpY-?ZinjJ$KF@e3)tK=pm=k1 z8yglHzdWb`(yB**TRuJzX@WRIB>Jp-;nst)mI`eFIVy$mGDHmc@Vi(V4$;B=9bxCH zTVsa<=&d8{_7k(%q&G_e$hU9bib@~l*iJT=ZbrE>;Fj_o7;L(F-^;lsudS%1nm>4% zkPu}ZXY5YG1rA4Tu$ubXwcD+EN_hnyZd~ULB|6pbQrb?&N5^UTY7hO)ovLcOd6SRi@R=jTY@Y^AtdT=Z6A;8}9XEzLl<7%LhKqv1 zu!nkz*JGa_#2kd9xV`?jg+8)cE>5z zr?H0|7T=hvM^$kWuFyELGTkTy443)GxVls7rw;@A_B;ckeAIrOy+#NJ(+^rN^iD@q zfb3RMr4zJ39b59$$*JmU{-1-YDt8uU6}4i6lH`;KUdPE%g#)Bmnmon(Z-S(4Y=4D9 zb|QKcVBGPXf^Z1qIZPjc?-j*AgW`FafItjBBP+<) ztCO|l*4Ea~jvF4+&Y}r_nbYakLOhz{cKZE;&h_H#fb)6wYZQ%XVew;qBq!$qqsHe> zvFma7hTSZluRp*P$DZUFw|S;fJ#g@T@>}RcKm&%bsuq{S-XG<19);P30|BmQ4YmTp z7reatMXzMiAds9J>GGAtJ*f3@IhgIqt!uvTJg-{}m!m*}d^AqPS@OxpUa@#35wg zNgvUXiVQj@6t0Wnd5gGwN&als0|V`nh@-62Eku642-pJs0|J_%Hs56hf)Cu4!irXw zBPF*dCMUnG8>ZjVRrw>Lf$&Z{(K!;r%^Nh4PUgQ3QahcB9fKq+1@%yoHpAPicOO2) z0d}OlK)t+oDj_=hJtiKR9@On+nBT-vXGX*uOCRE#l|6?hC3|jan|-Dz4kQqSu#rQw zRlOGLV1Ffgoj_gK$B2SZ?Ld5S9UW>D)%@F99=j_Ffi^4!i7<$ioBLy@OVm9c9!#NO zEnrW9vyF(A%={7R8|oiILcN_!sZ=h!ktY8@57xncYg$ou^)DLezOW3%ARpN10x_@& zW(q5(AUC|Lc8Nq3V3u5KO8IV|N$yLs63{^YYA7)c`MDS`^=pfe3_{Jlvm|_X*A6-c ziSElK|LTBh^xeC6^0f};pjBtUM!2j$Y_{}2UH~{hVD!sV&c||bIVsc8!nPw6!pAJ> zc|<`*_8uJNdeCI>r7JHiOExJ0jA{}Fc;w8jpd`(1Y_PcW{~63@1@q)YqleJ+8Q4cq zYLq_c1;Bq$L&SJ7L$$+DWNavbx6&sodt9E!R`%EznIvsTKa7Ll4rJi2?()LYjLCw` zuVMvCke@rg@m21c!b`4lKjSqSVpOvpN(7%Q>S#l;+5+UnwVOACfBjMd>M+%2u^Xs9 zoEm%Nd+5Yy0rjwRs**i|axWz%keuZX6O#;4KBXG5EMY%OqXRO_N-nACoyUceL!JRk zkr1!#~?O09fP^R71NVM3H63ea!$hTD}ER~LZgx1#=9m>uk1$kJ= zdd}ynsYY?>`Cc0`#&-{k1BqLDIx?DnYv-l%Cu)JK@?m{@?`VcZ{^bc#s>`Fq21!Yp z^gA8U`}4b>HJCK`cj`7bo8UX)aZsO*RhU9SbRFUZ zn6N*bogB;qxUOi#uE{3Bczhc}9=s5dNjIAh;Vhb{RvLbG2s(E|@M*~^oa(0S)0O(8Vc7@f~W+fyfL<#ObK2tB6?8G$;nC$s?67ppPJk$d|=NsK(#B~@afNI3fQ_6iu%AoSRPo5AL zw;5cmv&+jd8-nmXQMSP@+Uwov(s6Gvj=-t@OeNY*#pP^f%*vG;bLQ8x`AAkz@UNLF zyF<`Ve|W`L-=GHlFTz$SONpyI3+)kAlM~4R_nx98-YqKO%bsr#&ccp5wRm=u$FK^X zMYlYz3R8Hht(?0DMGemJB3v&CEAG|5-O2hiUd#9!Vgouxrtjjy!YiOYDSl?l4X2nU zPy0JaWoBm10;yQGqG3zh49r1tDBmz~MBCn;%a_!j*lr5twronK!p{L;4;E_UYX3u+GM5ha z9Y&`>*A_W?6NNK#$L`sIWf~>jG?uU%f)s5;=+x2;QH)r@oT1dbtMSwVah3izRK%aF zXlvO^D=Ryytml0Wp#&+lS(H2*hD?9&0AwpEuPIwlOOMm*ADUE*nGJAra;o@8u~Fbz zPE;4kKX~NW7Fy-RgbzeK@ZtV4K^@6LgnGMNkymYmDV}>K`5mAmrp$(wSJZ$JVF0)K zH+QU;Ahe*SF`yx!>EvEbA zxa_et=PFHCjbv`CluW#OQnq4d*|ClkH&4l5ym2>Yv7g6+G*(H$CEJIA?BDH6{NM@| zJz~#b&Tl!J4d_DL;uLwgQVuS2a}Epxr%fWjDmtXk1bq4ut2pbSZx61SYrM1 zYeN#WD2_CGG>)3~+81I7+u41-ikEYE$aXjLdB0Zw2IIyjl2ZBe>0pK`BI}!Iqzq~5 zEm;v2kY^!PjIJiP<9i4eX;m9+*OZi$ps(?P*XcF84aS{rARc?sJ>IX4SK<-s)qOvF z>r~@{K%Db>5RHn7pKsgVL72Q_Gu)@x2Qd(4`@uS+J-G!w%mOf3BpA9z=o?PP&*M{7Wf8P&0sP?!J451dtyKwIQ z`0%-u6ftT@WD|(u8mUyYw6xaXlSH3U0c@ll5O{y$7okOx}b<(Z3AWD}O>WdzL#BQ5=vX!NkDoDA$ypAl%2(= z5u{2^K62c(82gL^ho~81H7-BFRG8Lsb=qkF(&j+beWaS&UXHPja(jPM^qYxDNx5F@ z!4O7m8W^vg^Bt@lK8CD<9g7`8Ps|22qQrJtR>If;x@aI|`+-LJ`y~V{r@cW{JgwJQ zo;Ud%NDh;Kd`e9@3KcqUD%7mJ%Sx!~`1$oI6=Jd!kwn}fna_w2jKizKhKM9Y9ggUi2%)1VSas+3vVth^`1tq`H3a*iSokeznVMUQkw*8XEssOtvM$;a0EQQg(9M+?uUq45+VZITZCER8Yl_{N6^yRH# z%?j_(7%s%EUGN~LTxC!{*xMJWB`YSOS4GI@egwPik?w0cVsX;Hqnv;8Wj_SfBYc1+ zz4079V!uiHz}+jk;09HMu?{z%gONoBqY%qjukt6+p@9=Q# znyBl=R*S!XLvXyZ_xJToRi8bmoZ{A~xrTFfNdjCh=C)_PdY`g5Kj7dX1!EWS+)a%y zBF|EA5uQ)7&s&pR1|sZLjmh!<3}st=xFJva(t5JB6#t*S9A&+T;MbJ)kQOR~X08AF zONsZUUy--A9MHAkc;J-maF)y@0!y}gX@hvV(KjfxU)u;Y&K-kC%~#EP27sE&R_SwT ziRgmCD+M?%eC2x*A6UJo#J%I~=~yeoyy+;TF%W{3+oj(zJx=z`dy@sm7m|w`j`P|! zEQ7(iK>|yB8zSiRMnxL1X?K{JWr=KUtXi9j>d{v2i4{y8)mlxbTDZyg{mi%Ox*^{c zYQaJz>8ltUg!qRD=&svG^pX5b*`qt;`M>;KK)@qxcL@3ZA3l^mWA@z!({%H|Kc>-tpLAKx~iQB78k~beJJsu2FkeVku9z(G3@N5^y$@P z*TA(Wh7GE|X=MxzbG(~XPQ_0A6n`rjcbwCG(78=1I{W(C;q;k*4B2yab^Q)2VK7v_@|nDpvu8bf)NC;NV2|5 z2-nknt4oIx{XG3$T_`{w78yyqnyp07YT(0d(eMDIK!l*6U|X4^bysJnu#r*Lvtc7+ z1l>`DdyVgSk{*TbuN=#T{zH6^5BPnl&DC} zP_|qOGvBqD`AYGob^Vxw0CVKE7z!435UE@Jr#49F<#^h7$f!Nf*{X;}+!agm=KY>>~f2>irHgk`JD|7x?1 z;E0mMxBA75|i%{p8hN2 zBP2E2RYtE;zJhtvU^XHuP3hrwW6srA0Z50XBICcGtNYFs&u8slfqA-|(JKWBg%6)X zp50iv(rlCn)>0HY#CmnWAZNT^w+F-_9$ZQj*7|2SCm4EW5D4;O-`h-2G!lVVUfKJt zw@WER<<@@XS@yxnOm(HslZ@oT?;dlP8OLk-%u3zbJ8`V+!jgq(h#d*1i_fnkHYcmD z=d8TYDJvQ@L8)!P8B2{6gIs--%ww4gCL+QN@j&C27^54(Sk~6j0uxq1ERPnsg2xvE z+$_S*V;E26%!fZCd~5JDf5uyIgG^BWI_|Tr=yGNHwCKLRe5S1Kt~Y|Zs4Zu{2(9cFhJn`)vwhrlO%7(5u46ct4WXt7<-%*uKV<<54$ z2hf6b&3ntr-T@6^CbWxvUTvdLbFOsstkg10IkWbU*^5IM{US`S#779dE^4pOh4u@obe7>(xYv<0Dm z_%10kU_Lhh4T3_@4L{-q&5W;D|7-?Yi|+}uPMtrsfODtAJRv0~KKwZ%P%z+q%x`QI z0y0!{Wv-6tm9a4`4-d~Y5?VD`Uv*xE#B$k`X7_r~*q}EWVpbtst?ry_HeQyc@g84a z;{#G-uSp;)xlTR`Z$%$NS4_@>UCfd%vHJ~|Qx#a(Wd3hvB6^3WnXyyK}-8m(qUQT81oQ^oAtT1ncQ%SVyV;(H+1 z8=Tf=+%3hpA3B@VFOD&lHcgFsS%kw5qaT^Fq=tH)G`oS0w=BHi+-m z$GdM{v)>p^yuoSa4^+=Q3g&^(9+lGT03662TH5f)$d~&yD7OW?0}!yXOZMm3zHRP_ zr#wlMzXgV^C)w`ra!yzyOtlgdtzVC-9L5|l{5TD!Yo}BHw#1sV_$Z~w*NJmKu>PP3$p42QZ}e|LBD zScO4xXr-TOIQbBo-ax!=$#OqNgj&K9O9p_#<_ec{e$U16p(nZW1_Pfguaevf=>`-6g__w^knit0o4X?a|nk%PSdAkxkpJ$U4 z`j?$3Zuq9>r+PkU)913B`bB=ZCjc*nk?qAE*4JT9WYrbml=JTGl^(5t=`JYU zIzlaTn>0Ku(I-)B2UF7&Q}s&o*Xb|M8&shpUwND-RPK#fEH0XS~G@1MdihX(j~ycH@qHDcwT6z~xMM_V9RAn$N+RE%sh zo7>phT5lvDrh27){78c8BQ5i_XK|EsgW>c#=HlD3X^)xyB(<1RK@-rsM zGuNdWmHf7NA8CR$KgY3VJX~+PSODMjwN9h8y-C)C%5rzgSKS!azx~ zu5$>C_l8k3W70O)mo?Ei@-a!fToP;koel4uWCno z2HbqSIKwx&tq>q}i)d+Sl`d$-!%2H8F8-u2+Pn%Ym6H4dI_>6rg||5`{KTm1B}jcPW{Z|)Og^PKaX_gzMUkkt~jZ1 zL(%_cz3~CA5@9bKzufpu z4WVkh6|@UPS_TmA+`xX6E?G(e0nEzEYSgbTWdDc6d4Kf-2%VQrsf*TQ*^F+ODCeUI zA2{;qPuaaP`k+0@CN3umM)^SIw|EaopS}1Y=(^9cdu(?3yvFKrqm-KrQ%=BLVxY_E zWv`&sDM-6?pkF2Iz5PEe8T2l52s?E7BZXUlXgExM3Bv=M$3&4X1pI~|jp|;x7j@srNZ z2={grzX*H{_#>TuXU5z$t`)*T`3Rz;@6~1vnv|Lh(xa@?4o@4PGF%G2AgaKyCzNl! zPd76^8W|qOD9e4A+OHS1awZ$TWPt-5{VF3el&-U{tNpY>NPjAxCOj(Ayo(8mc-qCp zuP(#`FIz6F0Wn1ObBY{|oj$AnpXSTXeG`lo3*=qgl}nzqUu0pTVRykSBANnAi4CVPz7dy0uw4`x+ET)&7 z&$0E-S6-iP`PN2SxgnNz(RyIbaQtOe2j*L}L6e3&&}Vl}_`i@)QU=1hjaIa_J`JJ~ zq6Rn}sa?FJi)q^~{p4B7Ho`9BsN-AGJ^oe%LO>T8gh^~Pw(!*_F;VO8{Z5beQ=eyA zEekXaVhaMJ8r2WA(N@DW{{hE2yD$G6OBU>5dCGi|P4{d-d(<@~arK%)+#=2`EYDYh zPC(d#cxajsRDhCoVVrp^!A%A4OJVZ1KI<5!oV9`ZpprW|q@%&qJ1 zTjCWu3rRg7#ibZF*=utsBx|p5Amnn)`6zielmF^|9)F;Tr>Z|8T?zT3%-^RkFD~9@m0kVBb)Socu+d!C+i-mNwp`ME7a8a* zRsbE-Z0zo7V~_W3+uln}fB6UeSGu+k!v5A)UFw&2&HGdb{jKx^2J&4nRS~?Cc+cOi?dnWecl8I|U?R7~s9tLT+oO zqK1tyL_29Ko^1Fa@>6U!CQKQABlts6u5<9Gy@pY96J+=LwTw~eO5u0Mf8*`4fAaIn zn_YTOjQ3tZ1rEC&Ox+H{5&#LP<%Q3EG(W`phGiL$zU~%YarW}p{q>$KB4W6L7dhZ zuCWaBo-BEK5)_dxCn+NO14FCM0nhlN_Wes^=2;Pwngzka4;BtD7kiEj+IlaZw8Ym) zVBW@dm@UWDy)D4@WZzj_TpT=QSfEjQ$Hb_52?jEu47rUSG@!vmIKcoJl*a{>da-S` zmz^zxH;MgRePZI-F%VU?RdfA2*^l;Xb3408``Im(@&$)_&#wUs{p>;nSGaKK)@>En z%dKj%76j32YN46q!||&s2L}fo&`uZ#wJPwbFrxrWA!CPSqlkOmle!M>-Y{(%NU#5v z;!R6Y&Pq92I?n_|9wk;NsIcTZPG9fgsOLjDhyn$7zr6W*uMVb%k!^&>#`;4{fjqc6 zUP%bC8E$a!S*<8csA%nfu{`S?H($E3(E=r@;s+k$_o*-Qm+7_whb?A{%VVsLmdq#o zgT8wIvg3c=rs|2e`F8rJGA7P%u|&Y?9yK?{Rp+5sb? z()l_qu#?szNf7doNs0P2ySkI zpbJLJCos)r`_qI1UL%6yUZwb~F(<6`|Na$4eFH&>7Q}`B-pA)-^_(+ss6KPf&!79Z zwe10T1Z?pV?D44X1sG3cu{{PfWJ_~@L%WdbIWb&py4f|8EUJGK0l_-teMO$;$Iyq8 zzUYEF>;5vof_YSPKfWGIy%*1!^WorRQE#KPeB|>o#a!eIJKA|t+}9jgwIk)WWvpv{ zme$+T<%brlb|@w(k` z1n)n7Ooa0D^%=;?$w3tQ3SOxNx2>(Mk!sufL&dtGFjXyn z?X}9oD2joTn?aPP7ps$wP9(|)Ok6jNp(aV#P zm^e71fU1Soie6BLv8_gN)|ZN~cS%as?Jl2|aXj+3Cp3M$70Z zxhxpJ?}LZc_8Z4=7!0#FF`)rNK(Kb!m_@$~4w zH?X}#{mMv3r+BRAmBG@d$b*`~n*3nOReZ{96_X)mbFRbkT8h=)v@*^5Yvc zmX__)93iDGVxuP=C4r}1dyp%qQqFlAnNRA!qhWzAiW-xHngiQ;mds=O9;6DL(K@V> z*O!>^ic#zK&*J^p5B#Cm4@s+pJmz7%?wmu{9vTLg+TCHWZcQn!{haPk89$zGCC;F^ z#r^0(u^U|Mj!A?>n8$NiNgCX|)ik}4H~!f~F~-I6cmGAh5osijw9$5Vi;(R>OWn@e z{ZGc9$em=`+wiB(jfjL;62CDJ24y4d;kudz%1I5!g=HZlw%;Aahs$cSruHd99?3NB zhhFdxT4dK#NKe53GoXe>LF9MP&Nu^qK!I*!vM(NanbX#sfwE?fdi9M9F1x!=TnO9y z#eX!7E}0oICblr7oW`&jM;10PbJpCU5!|^q%wb^>lk)XiU7a*oDA*hq@0@e(z3BU- zcA+kPj~LuuuVBU$r!pnXw<{Ub8rkQyMQtw|xBvS3&o=w#r%LKWSJV<4(*SiAXjT76 zwURV~QUPvJXl6daCBUCs67;S&<=LrFMLxXE5XOh$6SK}Nl zR!&Qg@|bVSEe|7^+}$-{WSl~=jsW0IDcDdsikY~e#Q*mkIp8AB&(Gn)hREn>F-b{W z~doW!mc%(hFKBBb32_w7a232)4VI4R(xEL4$VTkoo_tK;= zhUvKJKS$HX?Vodr+F?;2?+r)67em3OM&YSlWte0^L`?i4D2Sao&){*wHyHR4g=z|~ zpBnE8R0)p%S?i{1u{xU4S#mkhoO6Am`^83`8AmDqMxbhr0#DY{4(1PsKCSshbOcrx zQZ&|^ogeBJc$?B$jOLK@Pr^KIT^#-K7L`iHxP*DhX52F^=q7If?qWJ(v_Hb$V{3<| zvD9iW<(1awhVxp6%e#cBa(?UhYXV^*-^NLtEQY_t(cWUG&hhRt?hLNv0(nlzCs<4DmcOXkC#S$W(~W89)|)I=mfma-3b z;bwrTx7(yOmA_j9BhQ~S|9(Ms!kyyo)$e{BZE18C%azb*)23Eax&HiM=%$1~O#3@! zskmw@0uOT?(-&GHONQI&Z5%RHrNam;`!%WO@>X8Um8(;ICocqz2mS~J231;5nmX;w z;;`qAe;>FV)7`Ax<8+?E^+D)u`ge2a2X2AZ66u{KI+iyy6co=*OiaA8n!gM#)chTH zK5i@Fb;W35L)=T#q#H&%KG?7f*D6*MjHh%VxOMlD|4gc0I&II3N@pe$<)V;Kxq*jG zOtqCei!3i<&z8{xIfjZCdOz8ijA15x8Lzmw{P4}PZA0YYTsljC(ZS9hW~y#>vYo|f zh-2f44~y}+u#rl1Tf<{!qs=u-p~r?(_!cWup$Zt5OJmMgaIO%{W+h`(_K13$!_hP@`g|)sijb))Nq%A2^|^ z_WXg|~l5;)LK5vBc|n!eYT?oqq*D3uM6O5VsQt`k?9h8)nH5t};ndN&cc)p@Kag2G z=}%OSItLjGWp_x5oZRvR=6D3Mkx89ah&(Leq_OBjuh#zKxXqoto^j5*4`P?w1>3*t zV7%Qw8&II2sHJ>KuGh-=y5N4=b@s+g9U7~8nlYs3cW zP;YU`9xkFv!Vtfh)jQQ!>?ido+-30fd#_M#!(pPDD^iXX{ATWZFUy zT`=06C&R~+WVcUW{Qmolum*eHlY=iZFgyO?BCRMMza?h^Pl7}8ug|ueZMK^$IOiIT z0?QRKai+J5qd6uIo(>Fxx^oaimD|Ii&Y*^s&ZD0g>~w?V$h8vd2;*g>|tK0@T7YpK|u{j%>%!_-MsSy}np-3qzU zlYZ7-VTUgZf(cx&n``AHCRi0nFXKM2n`6C|`D>X;x7F`OgIE zFOK(Fq>l-am6ptQl+fS7*P1GiDAyZKECM-twI{)MovT${HaRTZSY&OxUjLR|V9X9(uL+~F46ZGyrN$7x z7n#s`^scy)%RGT2)%auyYVq+bj;6-s(lDCkGaTVBqlsL$XJ^^dGZ5dlcD6EYg4Qyd zzZtOw4j0X|Jk%|*ULG>IkhUIR{Z*{)cg*oe9u6hFYEXuW8C^PU#^n-54h!Y6Bilr7 zw}?ZZc`6z1_H$al5x3VgwFK+5JbQnl(6)CTza7Ya!bM%TXK`b&NOv`*BaTQm#b9pX zAg=VaZ1~1+X6>3sZ+_f`yQL7qii$+g9OV#f2=fNarp&@8LJ^GT7@ryI{xd7Q@=#|# zH5^#jo|~J49-7>WyLzQjc%i8t%TxFpE*QZ`_6M62JqMx2oh=!iz1{SC*4u0eUtc|r zOwjA^?KXgU{&2lnQcmY1=P#DBq5I!H(&zCG#w*5P0}8E%T?xOD3d zW1SkDs(V1mJ_V#T0vC0$k@YQAX6_svm_^7G3nj-kZM9yCF3{HB(n|F}gzI0sgmvjE z35C*3H6ZREY(IExIpd__Vgg9ZIbg?744K|)IhhjPlT?CL& z*yrFYv{r~}g1O(4AGHo1zf}M?25*I#)H0d*oAF&<*Sh*bi}3=HmpX1M*OT2h2J`zO zLIVQQ!6ShhiVc($B$6u7Il6j#KLI@kDXGkSob$1*WLLsBy>@&f39|%gMWYitMcfz5 zj4#I~gmTsCqLJ~xGOg=xz*UG5i4pCmifH_r;p#|){_Qk=yL_e7gM%H2GgTvv z30lKLrkxdgH?~g&Ld)&WBms?oOXuk6s)|)eKhy4fzWgrOa6;-1JGT#*u)a6iTGo6v z^9v0%&31#GSsueQ6U;J2d%o~Nv=R>&ckaXeJ!kD^a5dJR35s~td)_t-P0Tv(M~3T(S#yizJ)#!F@>GKkPk9?ap*htKCVnBl|}dDd?0l z6qRc}o5&3#dA~z&K0PyI5U~7AnlQB4PJZ!nTqn@}8y>1XjK*~n4Rs}o4Ii|lgU}=a z-V!O-BjfgE%P-DmwNwiKu|f}rD^;G#Q=@HD5B7WDDy+fHjlPB_lp=C=qhigu zfVpt2d^KMkb>?S@w|dWPZ%_9hP^B7!jW=7w}M%k+p-t z?mD;Ct>3?YpF+8P3NzRWG%J}|zPi8Vbdeo!dhxY4D{ew@v&<3@b4z7#reRAK!pHAD z&)oqkGNNv9FJ1pt$O52h|E6GPjd{Xol`Wp85hNPN%7M|7r zsmN8W=d2{8!0kMqJt3gcn+|`1TH0_QC)xkQ)>lVWwf+0jh@>DO-O?@HU6RtRq%@mu zknWZaDe3MOK{gFaw*t~FU2pF9#=Yad_j~`I;W=l!)|~4bpQ6qEv$hFn!nDaLNpHQw zF6z&K=P-z5c_%8I1S{K`RG*nRoi$^t-mdI5fg-N|rTETh<(4eV>v{~0RN#flraJ%@ zI#2r0!9usB_UAz;Q>D4D!pkJXIUd;1^*`UfW=12vJhG$<39rL46wJ`iFfhObh6_$n zj|{}`G;?d2XH)y@poY8#ZXj^OF4w71fj}TZM2BsFlivqu->?`5-6k7+RgsIAKvC`( zWPjGvXU;X%DS`K68Qp&QTBK4;I)~WQUdErhK<2^dfFoM9&B)$JG;8hKT|PaDpxcA zUoD*?qnjQr)-zAr6h0brO5*lk2hAi7n|6}YDoPnT;1 z?-TQZg1Ch+At&>BaAFQy$BHZC88#-jAV&BNpFrf`BPMFcx;blXH@pi z69jO%*j$ASZf|MNal&N!HB?3@OF!m^%#5UE()07UPN@accH zZ=tts@TqxQy z^3$j23vPxxK~Rz8*1Y2gzPHzTj-65C?E{i0Y)#?&c(d)UP#H|SfB1#pw)+3f>HqVH zq#_e!{7YqKJv(&xV$$PJU=LaaryWj2L?tfzVXjoXUd3k3GU=pW-L)V`@1oq&ENXvZgvFRLs#GT0g8`)w~G*Ii{%e^nh zWq-X?rq}Qqq#E|l&CMO1&NH_eKl_g}R>rk2T+0&xQ=l)jxqOxQoni>q&L5{s)q|SB zey|R7Vc}%l&5|)POJIx0vdE;FKzm>IZq_OX5wL_|a3q2~pji>1&7%|TB6ov%^jCj7 zyh@J1*oI?|c*TpZ^h=NdMmGZwC@~p8y9cTpR%Asj9ZD24H}@}_h9=qn{7LnF1z7ic zGjT>0%j&RUd8*lZ3=&Sp&f8ufvjmAb;&%gTxI{qdD>TM=z**e2+Z!mQu`+xj>87+2em`Q+| z&jO6WvoJ44$dVBD0oCIsS~%$hSWL>g?Gailsi;`qoP9!j08UhJ2{}1qKmr)GYy~8i z;PJ!35?~q@4A*ZU?_U&S8sLAwJd@k@42|Y=|Ca#sdF> zz;)}cxac_}dccr=;s0J-{r6)4UsFvzXHx#mp7($U1hXCi3&3&k=>S?<{YG}9mcI9c z2g~(2GD|?5ue*MCZ~LvrpyjCi4g(t-)fA9o2_|N$j4N8H%0CSATAkmSMDJb%ND-Z# zkg@1>{3%!1UteFB%<}>MKd>N-1F{k=I)z7rchFI{irD|pOHl|CJh5y5Yxmh#_)2B} z_U9%F#uAHvqq^^!O_W*O2%0Iu6qb6EWip($4?ndX)s%}h=^Kab(jhNU(km&dX$DjPDb7SbFDQj z9IxlmrJ5&tZCrmR` zMgmkh88`!c0%o9kcHDr2WbAXuBNt-G;6pcuo&jIO{hzgOn{(&_R5d}MJIrSlp$SgS zniV`qS6#Wl0j(JFBG_24cm2Z!jkXnF5qfd&0bh|D;I~_KWCa9*u(SxEPzGtZHmCQc z65m;qc2_eE+3P^GW*yhWH7&G{!hPH6Ih~U*`w#|9u|IhC*IB-l#yokFuBmg%u(fw$h25VuX zn+I&kT8_Lo1ToW30^;@k9EOtUU{MM~$@JS*BO)M(3YORDbw&%iR2WeioaYE|DNa^A z*7S1xmK*E|tB>ak#j}RY`zGcl9>o$+f#PBl%sRV1$4=Ef9{fElxk{F^Gi%#`?rRPR zWOfVnp@5yazO^*~sz2~P$QS^Br{=9J$8OG|^1v?3Y6Cr&u1S+5)%U6l|4)hD3SvVb z3G8HC1JS{DOU?g~B7H|Uusw~Fu0Ef6lIV-HEr^o0I8ymC2DQ=tVZj#Kq_e~eV#UvWtB*hn{4RM{+JB@%V+*t76uq<*lkvoNd13(V~f_Ch&FFYqhi#QfoC^G zdorXuSE~BkVB#IL5bEY-GJdX@D*X&{tQ$O%=g368-E$`1mTfP7#1q_lPef1TB}R^l zMU!WXMY-Mc{Uzt3ep`qxo5_<6JTN;CpuoI#zAH_wtFJ*r=IhF>cozJ zC(kHToKjDXw3}5Lx7?#6J+6hH;PXX|Ew4fHyo-%%tq1)0zn3PoG!J-SjpeUt;>oW z$5nSfeR+i2;D(2S!`0!R?Cm#ZAQIi3Y{@U-nBK$u<5t!|c)93vZ;zKJXHm0x3tDZK%;!t9IZ69&L2&}{v+{$< z9-PJ${aY$a`B*sr#Ra&L-~6DLE^TTyZYDFn;d|PrWg(9=$+SI%YyGLSC+hrh6hHkO z&MQy5YxwdBK`7yB&)byjXJUB@kFhv+KJ%HseUPs;>$sX2UYb}V!3Fskk~@NJkXVq# zPA{ES0-BeYJ7V>SmnQRHQEJBdNR4zm^T|ObQ;YFAzX9RT5Q=Vbn$65*1nVf;8JZ|> zbt>Q52R{_Zkx+zT8lTh6V&xF48y&@F=N!BMA+MC^+Di{Xi6g6QdD@SbV|27b7nCPH z3ZJyxw_>xi+7ay&T(q3MsSqIK&Dm*e@L361-)F$_>E{2&)PfiDR?<5Ayy-<6D$D2Q zC;BHVtpublR<4Bp8RN}{{pReNj!E;+8Wwt_kT{zd3=Z3ff2#A|4vdPAw&nsP%@fin zG)E}So5H+>54O1sxYlvLvX!C#)@GqMHg~Rz1zQsmf%eA|wkp)Yt=QW>_rc3^6wu8^L`FLM%PM&P#JMr!MJ8usg=z=?r+M_{YO+>j?mB+=` zuV1-AiP3n6K5le&dionI0gHgI==JrhG>7In4J<--{n0eWH*H75O?aJwD!r7ZaFB1@ ziYT=x>4^6shNGGbTd1zGg8l6@IbY}$ii8w}YmszgT=QQOlf-f9GC;7p;1xc6{#UX} z-i*+L(6f1Ou;75iF(7fb8iw&45(c;Ky)K)N%5~SvfClw(W=e8mUoh%{AREgUlpBl} zA|eZM$GDSw#k0cuOQDdL)t51GAnn9mVAByDn6aY< zc@69u`tG^<#|d?3?$Eqzdh}bXZp}Vm1l%Dg9c;7`^LrIs}3+o-G7pm@cKBUr;m# z6t*%^1{0l4SL!7rqAt7mjsdwPFws#CYPNCKy53(BP>FsI_O!nD8#MO}O5M5n; zQ?-_EaJMFXjxyW9p!^zdtB)E?XAQT$dd>F7D&6Tfh_IcKM#-U>4hRt$@w-|X1eX+8 z*swvCU_nDV#$E#jeqj3n7)hBxy(VQrK76s{frwdYe;hS*(cVke zYY*MA(J_-1z4ycR4d0NBT!|h1;1uGRsA6m(6p&BxlWGy$OsGGK2K}bz5jj0BrBkE1 z0z-H^-_Hv1O3-@ESe#;=EuS6PD!nzTCx|_WVsZ=9?l;&xG(+9&pJ~XB&GaLRQO~)N zUH>M(Pe7V6HHTBLto!|P#MtyTM67vaU3Ymvw}^Z6g(VH5H5naoD_JX18L`>sc1=fu zZB3U*;HaPrJ)V;cqSIBj{a4t5$$v22mTf z0TPQelS%48v9>JyA!+RzvA8Pg!CYc9C4S)Y82LI`VXzbYMZ&ojw)rPT>#3}cP`qAY zbLtUa^D>4lK}ZGS#i&=Kj40n{p6!HU;ugxenJW37c(zoXMnw6G7-0~wNBR2o4_J?E z$NLUQ5#q?0b;VtOZ;QPHtM;!yAdKg@w#^Qvr;GSt9Wq|V{Z$~~x9~R!3F(k9JR`O! z%L|gJN`E|rXx(U$-nBdc16|*I9uWJuKVDM8VY}cfntO?VN^h@v1MKQy;ij-{UAxDz z!>`2)pt<-0j8O<0+JWd{T#mvoWXPNvEOa1SF&V$oGBSn$V^ygu516)8cU>+rXYoE?=)Sz!~0(btKrM>D%pC6Sb~_D;HtabN-(BP8ef!gC1z?l2Iepd)c)AD?7Q zJrDjbWw7dsf<39u9#6=~m01&+D~8Vqf+d_|LBoQPIty32-Ls_pGag>juL9B8CjJsf zK;EF?XF~0VGwjDIQ_h$wGnVKwgDGF;q3VuRrpSY@8+chqG(d9W(?LcwYP}CJwumJv zGj1dzYHY+RBY$^0P$x3z0X3fx7JIy=0hl&7L-x-$u=L4z^HC$Hc~Ev`@Ow)<4+FIV zN}hs3H$>Yh(bvy60wbD|wsc2t#zLl9AZv?6oBQLUPUT8-;(^^#v?d@JJAsh`0=~lU zfK0NYhcYkAp*<3orehr)8TlRxv?NWy%ZU;6Oo-fr;#*OEk3rsItvGv#w49s(+w;nqaun|TQ6B)7pJVv@Dkc|7w zqh3gu3VZ+BWt0s3n%IP~*5`-2Pub9VBw^|J7x?M3qd%MlF0PIAVF zmX{g$B{AFaqkk6D&pmM_IXTZ#RQGzLtknnz+Bbfm>%(h^qgA&dB49lL7AVQ@pV}YC*2tiUCE@ z{k)F+u7bxbGNY0p$rW+!ABDceVgW3geQBX`mR4qlcvnSo@g&I9kFY|;b-~SsF-gNK z@}D^k6Cx2QtfdXxZHZv*cAIrXi8!+?!Dw|%qr=mK2^$xta9_tM2Y7f z@Ojj!Ldgk+V@T#*w-r_rBH=Qx{Q%opw*NgLP^&jHOm%Jal3$WB`t2V41gJR;pd6(# z|G<4gtO5Wdf6?yin`_*cIPz^L&&vDz)dgge_L@^zt~7_rtZvM2=Nfw+yxZf*M?D(8 zE;ag#1jbKneP{!$L0EPpa8*rZh!HzVU?+5=efvNw8v zenG~P*h}B*E$k@WiLLSIj176u)DiG-Wc5sg_=aS7R{obMn+HmF!g&`2dyYy=O!Rw0 z5=S@G%au<9OMRm7=nIpE%B6>J&AVbTF4J}OH=J86U!dVP!M!8mGG^bM%PH46H?0Ct z<}v|mxgtcfRzG+@pn1x+{9)x2?d@xX7bt@tR9~A2pv%Hum3re$IpMN=1_c_%8BS9buE^@>a%o2S#z({Fc9LyE;2}K!6C? zLo##J!aPskX7eY4DG}Do8~a^oVUgC_hc*J&6Ikp}^d-;_>X9yujI=HV0fOFwg&45= zn9Ve@{Oc`N6zt8CD{?FNoUx3Hko9@js2i zEe73HSr~m@4!WmUiSu#IZkLKVDj?wEK19v0|5nGZ@si8a9Nxk4(?7vEA-AyAP*iA=EdNj~WmTUh>$vIfL#)wkD3B&rKYQX? z^r3{F+hyS3;^4sU@phj*xR0?5jQI-%hjRnx7!lI=bW7P|$IJwr*IyFfyqf%sM$tLG z`W@BIIIA1%MLKWyDo8=1IFM?k0vC*QKnm4caR-uK;j3kr>1v}a;No(=>H{)$`y(Z< zM6AY1qZgLPGIS7b=9YvkqJBNx zRo_v<5prIE@K$b?x!lHyWmv<_ynp9hKBf2EH}YGWdpDAD^bA4n#HU&(??i>&F&G4d0}Z{D>`ZU)#U# zNh3Gg7_Ty4XpQrJ`xXPFyKsQ87gN|HyE|xr0Zf2r3jtt7)+NjhlH6)hna-QEC{8_H^y z3u!^j<2Qmhsb9Id{24o#ByOjj#5Q+w$a;--cGnqW+=!l<>1U z;P--UdD`qDGzOCl$GY=#FN$fxR8UHwKLKNouK7*!6IJlwNGAX0tw;1!P-|OeuPSu3 zbRV4iU)Km%l=x2Ma!H>Q%aS@?%%j~CGB`T1GCK9?}{9-v_&1cI2UY|!sb|6Mq`0j61XAQBaDF{D8B1T4W7u)4DW z$rJ#lg!8iixoT_JufqAg&NGLpRDC6#ly1>w7fr~eW2svjf&RT7z2CvJ`@2Y)%1HjLAq~Ag zP1pR#Nc7I}2m?(b7NJMgQQ^=<(tea{#1*d~PVf!lTH#zz(g|{|42t4Mnb(8QQCB4& zEt?iUX$H7)N;_IR*0Bqx&X(+ykS?eNDTQV^{0|fb&3gl4VTs@?}4;P)!$f zV*;7PuwbWuM=KVmTw_tLW)IJy$d;D~=#<4B@^JvWGOJ{kSq|9jAacr7?55?^}bdr^0uUH)lDBclB^ zzau_eN*|;;#f0A0PRVUpK|&&%aY4zo{Q2s~6 z#)*P4aE&KfwpsSHaUo4`&A5+X8rqI296(ah|jiIC-EYt+C)>Vyjm`hwsv z#X@$74&wviO+0nbmrs`3ON6z3pefWZ3v;$jOlrrRCI-5UTbdYi=yvkLuv z?CA65Fe2hv-}kDoJcmt3Ud{`)vx2QZMlbjhu@lOj4g&>tFe|v2zGIu z3Apx`ejj8^^9i;+qMW4UTin}t9zh(fK=u>Cr2Z+zPl`ia_-k+`1tb1MtVro$7<(*A zSGI=CA+c_|v4^Z!%fp;*~?q*xD1Y99s1Oj9N zR+0@3N&Wrn5zYaS74^V9A1so*KfsFaIC18_;X*#_{*Vaq_5eK$>R#k%Jr?XyUI;_Z z_Zhj{3>CySJM$Yx?B0=Q=*`0OTZ0N|jc^hJ4rruWkyH_x>8O+P9M7xtsA}$ghONY@ ziyprWmaLSR|_89|rJ0{*|_3;c+djYq>VJGw+9ET$5n5 zI;ys56u(1GM{5MdU#r&)Dgw3leB^0D=D;SK|6=%yLj3R^6F}kl#v)fa%&-_{U^%F> z$r~O=_T_vh2xE6Do{!u=PW-8UAvD>3+;Tgp3r4pQ}o7wpBX+;d6Yn}IJBVG*?08y*a*M3w4;uIiUjss0KEGh!n+zx|; zXyAT{YMS8-2s>2#{OLfC51f^xw6$lota_HR61nFNQw@9Yh~O)u95HH%6iOKHcH&}u zS+aECw!IK`#l8E$wUswo_i5y=Zv7C1EdS}D=v$p<($Z;Xe^Mb2>LcRIhsa_(B23@7 z+&NNK(sXQBc=uN%QF1#7osOXaXl#`-OV7J(ZKmW7wMiT`brIL&21C zJZs>%1yIvYn_UNhfX0Nnq@Qm~l9RYmn1#pok8Ca=^8k|Sf|n__?c-{1`Pja0mmA_X z+dS|7og&bVHQFsC0kGmH;C3xG+egR8i)`~nJ9gKxY={BB5RjXmapkA4Pi)yhlw4-M z0tbR8KL8C2FqVa>va^73A><@~tCJVtVxFG-z_AXbzgEojow#6}+hxi$Y+qR_|Y6*MnzJ4%ZG2|(tSrUDRHe9jc`!T^SZXab`T=E)@zcGLXvQPY#M&J{-{sEn`m-E*W}z&yJC8cc zeOYZsBa?D-L2>X@c4jIFf$F6QxRa(Z>x{=u>9>HMFuECd8xmfN3JGO3HogJnNXf4g z*tSoCcxmdE)3dX_k&zoCEEV}`!rQ+L_K+^#`X8kxj8_{B+kssI@ekrmP6Rihn~xd@ zi5l)Npy7WOp$Aj#{55Z4**TE)_^xA;<8~wWsOdr#1AaJFy2#(OaYOG;4aaE^Zvydx z?lHbW?>J}EIqWZqxiT+Z3K5-MC@35Jvj<{mP29JIRUkKA=?LaD+k?wj=C3qzEB(g{ zucN>58yl>1o2I~;ZDRRIah!Oht=+Jf>wBC=K_h}gBRNMU= zo5oWV3Z^=;xX#tre7LBi$cr@F5G~dc-TX6;sb_p0{w&aZxG(ES3PJ&0392b7coof=~m6Sj2#=7N1lg}4D2m4I1& z<2*0m%(4x+>HMwcoff&;SvG#U=_Ok>bp+9LOTrbMp{9}rgjxbk3 z`Kz?ndr?f;q>My)>LS_kLQ#lAjH||Ia|Cj3$w9Tw8pSoi95ZqNmVlVusF$785t(Y5 zsmUs|%fM*UxDIg=Wlop7_QjcpuL$Hwr`ZRKG1VpnWAokvgD5>Y2yBc4JJ%##$lpWr zTh5>?cYp44+P<3-S}})f`j(oxQj$|+c;e~d7O^mdFYEAuf~>`~YDmsdjpn{pb|k&J z?ajV!Y(w>6mlNn2Y*rVJ(i<&{`XwdSGLgLv3zkUVqEdaeHxmt(O$`B0kDblnasWeO z8Q_II4&r{)tP9RIdm@+bhVeSDrvg0x#oe{GO_+9KrWe~qN2jsDxaqTxU5QOgymkJA zmg6Q23z@r=#jC(EZJH$)uN#j8o{2lj*+UT_Yh?fXY&K#uGt787SmNhBLa~z#0aGJ;q+r9UiC^Mdt zOg9|#QVaSBziKCbN?q3C3p|aX@S66RyAW_KJ#ZxH!rx>p!GBMbcqfZ>y^q`}xj?qA zj(g~|dc6M(65om|fK4u)v^VgexfAZ%-YkxS>?(fr0)2mr4j44KX3k_!v@TYCBE~ylBUX~?u?jdIup)mz>R`!)w=zB0PjW| z$jc*QSZ;iCfkPNLQ7S+Y05Brx-Bs$^;NW0#l14p3$kvEK-jf}W&iGtbzEhkb`Ig%- zD}h3z`~GV4_St$hZuhM5Ba*1JitFVAD}jU93GNBgBz7zIj{UY-XEZH&%Av6g6Z$KA zJg#6LCYhAzT10NHa|d*Y*&?PV+^fL42BZ-xvXr^s^LcB(I>R5V&`hLJgnZ#Do6ftd z+CnPdwPSc9Fjjc7|IpGskxB9yn=0mwGGjOkuyP!Nw!J6j+7tZ+KM0kzq;ixx!Yro> zjweT8;$Qb{eg^j#d~ZAwMJ!Lfw8KM+O{FCL_FJ26ycIRtuPvxg4dDsHDhH`@rO&6^UWCo= z0i!hX{bv|&fCwk*H?0PIqnm>i=o*whvwU$}>;565r3f0^zd+zm4~%YV>;bI}OcSu> zYAtXEvz*8s0|KiNK>B&UGSPOvoi2Qi+MUZ23;5yZeO;;=g-I^j3yO*gmftT~D<6Fj z_nYlM+;y**Tcr7thXOtO`xYJ0%WLo^ePEJ%K(H$t8dQ%e^Vt_ zcnHiW3UA+zW;q{WeESya@tuyI9uL@}4{ds_z+b9V3z>~wD9R&DF$g7W#wMceu&lRa z%Mq^k%sZBtyyV)~SSTSp^XK?!xz1_sXJo}qL$^&xqY%r-;r=m5w)d`g1?9)O%I$}z z{v~1a9|y)l$8*~Bi3>@NG?6*<3ABX`T2e`sM+P-RZ66X}v|YO5w2Au5>@s`4oO{2{ zW8S+c0&RD|&ml$ZRhBPvQqAi^t$%&P{_5NZrHy=Cg30YZ=oBsI?WV6V_6^4)2G_Ik zj6BP?y>rmYHkcQS|p=pmh4^?l!d^g?dpbG@%5c`7E%b^(7q>2Ju@%ZEntnYV6r-GAam?p$U?cnU z?#y4lLD+@5g&fLrwddtrwxAQ4a+1xp8Ou>eUaF&z-qD+*lzqJ;XkE!SdkUhh;UjkS zHE@&t3}1G;mU|hgqJ>=wKX28o1rmEnb=)*$CvJjtJ6&BqSEugMSV`f(b3P3PKK*3wnZFZmwkEduF z3AX_>CNSvB0KO#!DiV!~(j{bZzRhePqJf59vosHO(0zWdd*)Eab%7BAPJ^i>p(9L!czu-;^BgdU( z3lBY2&$6+>=UR<4jPVU6L|upmx`!FG~CjC9wOwFD;P;jYwy zO+k6OK7@w39uUYW8%O$4jsKDp&{Rv5T@E_=@m`l}mG_kf@p0dV8Jt|!Ki1tXhn|DY zbgDoA+j`BIt$_Pk$P!(L(#YCc9>`32K}4irZcYn?8o&Tf{{a?le0qM~&<>c%qrjdI z&=EC)P6sAIBpCeFB5mFf z5wcg|ceHOase?Zp@EELVn^1#*&`uH~}KM){HzgK2_sg7LA zKXefvc&GSEN5Pzuj@U}zH2rcKUC(DaBWJ7`as{5UMiSlP(BK2=?)=K;=Ei4jnIdT) zLc}-`493WVYD0lG|L42VRZ~~WftQiA3fT(_rm`rRt>^8L)tQD9vM9-2F}AGn&OB4{ zU*DnAlO40DAUnN=SJWMhjhHgM@FJyh7U|y<*x`+$zc2@!1G_+;aCm>9;hIPO0!fgC_VjE zL1AHJTpW;3@E)%LyFJ)H-PzfZv`S-!ai9*Ctk&?e^_%S!fQG+%3GXH6$C+7mvx}f7 zW*NhQ)Ue8l{c*a@NAcN`yx?kQb4T_+_x-oV`9e70d%E~tAs;(w)7_n@q$QE3cjONX zo1CKfYP?V^RuNKC!bP*clwzo0FdC7?BJPzUTt~aPdF-KpEUE@VB$RlXIWg%ljv#K- z`*s;^5K@B1&sX=zoJ1K5>-utriB^L8 zuL+^k^xPvPuIK(O;0^a7n^J0I^y_WyWx}_>tqJXV=8og7hJQ`Ci%k_rrYCh|$W1k@ z!4}@?-{=Z8R28-l9Hlc)P~=UzcW;b@+96Ia_(OI zg5L@*1!4pbwThU9ZrcQ*0n z8^h8Ac?fD%d2bR7Cq{|m#eNI_O%}OSaZ3o+Y>3|O(2xh*JGbQK7*^@?{D>nP0YMHX z`69HmA=skVfnZ?7q7XG)cRnk!t$DM(zi<1lp!35(6tKJ5I6i&?rbk|$nlm@Or;Y@l zLuzS4{7f2|h8Np|>LZ^yP!?!3MQKdi7+vc*OBL%c73iimS2wXmM7fnk1s+gG=}W&< zBaom(dS)PbIeHu~#gUw$z{L$Ps)^;RbK&#G)wf4}+YoN@8t8N z(_%X+Q|P--)AT-{EPd6Q&@W$^c8B2h`1jox--w8XJm(hGiMdiVTpvT>5;mFA)MWNA z`fROR?wXPxv!VyzYWk>eJ@CDX`;Ks2}=_qD?n_hOgA zM`A}*YpJk|BV{JO%A;54eY<>Pj0fi*t?!&us;JJaqNqMssL~_pH|PKE+!=S}p|`6f z7^e@HRsE2iAQOugg;lL$HgqSleBPyHS3D$Q-LZ54GqU{UOu=b1O}wMJUuQ$9_n9_x zKFyxv^~>pbsRAwP8&sRVR>EWMi8o|{!T#b~%)AH&%)}(BFNI(G7 z5*_d*-)RG~3E0?#MJ6~2&_j@Y8eh#&Ge6hqup-SaN&VrsE9BwicP;*U#oKC~7R3s_ zTBg~+f`2;eylHV3!+9sNPldLDR?4U^f4;0#{M-b zsICW;1oQvVo`y4_-a}{kmXl;J2A`uIu)#|dZnJNyL0+Ey&*r=HjvBUB8SVW_kc+4! zrvE}En~hpq7y4j3;>F64Y9?G>0g8sJAhxI6IcN4il%wXR$W04Pw;*X-Rh*iuz!%_% z=Qg7@agCJlK9^F zeo{cq7q1jqaY0Lrhs{kbTJ?3|k7srS;wu$39Axsy z3Z)^9B&_q<8c~@c!id*Mjw-T8(22;))zZ&&n1+Iv^ricwHJM+^@r$&UTdk+4LGF#| zYwGZn)KupmL{_!FUQWcD>1J{7L0WX99nq6;5pXQc>ABxxmso<$PSve{qFS$5?>_>P z1|YjY>mKZZKIZ**$uPS$iP*eQEhF|^p+A`AVWQtwx^qhI;dN~UpDAJXcJ&LE;xY~nv>Pry0E5@NT1qvAnYEye>^ea~eXYPFQnQ?04-C^&@jzB1t=#~b2m`r}BH1t6M zyt|Q(2P_ZV{a>dhz-g!_Ov zMp;IyOx}E;lz>X7;I-iu92@cxqOpwfzgyz@kWA9LedyEE^QNd{foabv)IYJ8A{kP=P1)m&xX?DO5v?07wot8}KP)ohAOAXQ2+Ar3JuGBKu zi4yX|x4z;bKNtXi!y!k| zul6<3uk;~1lQ?d8HA}enoV#2}ZoS7m6oq0ZN@Iiav_5KUW_J2+%*#4q<+qm{ObQF= zO?@r!OgHn$Jb`NjJX7VI<%BoKYFiHIE7%KKysW!z#7)#fFYIOL29^*C)vvn62HGaz zm|i^T=_l~5qrWMN4@o9=gBStD9G!`<`q5S+TIiPL$p=YNHyDdu626LQDf$t-=7hn8lTwz@-2{=2%&lYhnKp=IWNnbG6RaNNxRc4^jvbRODq z5qYbQ4MfPvrD;NubmEJ*ao%BHolPMM_DXp~B7=YQBYuprvxp5(#1Xm1idu1-*rac^ zbRB8HKSDOdBiXUb+1)qmeq)1^TeAOZIwvGA#9c29>iu%1=tRP7g@4da4@;{zoeh&M zDWg&g+ajM}Py5^*G59-*m6tDQOn1FUoW5H-ES2^xsH1B$j_sLne*U-0qrvr*84vzL`QRa|Qh{ zinrisCbu{1VZ`F`75dP zZ0*Yr+zG}toM%Yspu$o3TW<_%)xub69;;sTMZ)*!?49B;rQ^RTIkQ!dR%vUSa*{H+ z#0Z3-z>T2`UGHkS_D{CI#|b0xONqq%&uMLXr$57^{PGVM;@f~XMc5nZ%6kjfE#de3 z=b_*AJj{Vj16O&&OtqkZq=Z_|Ar2De8ZN_+^rB}~-QY0SXcuETzwpVwFud3dm zI3@ozLsF|?b+-|XW386Cn4ISM^83R&!F0LZiv_%$JXe|nJUC1E012&NNS}nJ*P>OB zb7@j*q$cxeTIpl6@vD=XVNBXtFH|kRot9qXwD=CR)W%m4OofX-wl?-%3HKbe2K^52 zb}}NoUR=`6>8wxiO7NVbA2@n6!>67snF=O6e;#P7c17dRi0Pt_I^DXo5w-y*l(hdO z_knKqy8zs%=$X8P)=!eic0$*}6$5JTz~{g@0;bq>Ton$(Ao{>SYgJTKbOQJpV2@7$ z`hyq$8V1RIVwRT;EyuHo-f46;zG<{>qMehe%vPzCvSXg3NgW_VAjNYO=W!BxB&w}p z2;8IDoOxt5*1*0RCKiboOSTvLQZ2{#M$#_`Z)QXyfO;g_7)ccJo8Ky#ziZdk8%Ic~ zaG)Hc=~nG)cj@LQ``7v2fA{_gpVa*|o8P2gk0-t|K~3$&OFZlw57PQFr#RiaSQ^QX^s~(RNZD^cC=)xxDfXhhAEr3b z4mh-~l2&d%)A-O;&{20Kw0`JW=q97{3trQVj^n#44jZ$K*4s=BS0oh~W!hB>E(UbJ z=bc7g8_Ikuo1WO#cwlN80)$n0RczLnvr+B|r^^MazBsgck>+wo7x=sODy^v69EMu}vQvdviQihZw(RO9Elg$K_T| z0PJoy{!%dm$s&dzH#3HqCkilQIDn0V_r;zJU<{X;^oW9F_AegCtFRGR?EW`)=jEa; z%tf-EORSoNS9NgM?Q7EhZm*XLl4dBEX%sj|>kdU!Z|%2;lMDOdSTz2YgXf-8)J?3`w0ekyx)e3lTWC3EVQn}6+1r9S8euh~~W1vAVvJm4?>&YcLH*6QE_qTJqtj- zT_!}*fC8iJhl0wxp$l=!-kzri$2hS^PZVtOQ7LSZelYVwhlV0;#K4o>0E+TW(9CZB z4yX7F+So6E<@&~MJ^}cuovjCB*8@L8R4oxtTQ!;N zl8f(t@p@9}kT`#wE6|sWILSr!pKg6Z=Q&!k^vHj5k)QwVGc7X270l@ybNgs_$K#c~ z3s=rTdR$Xq5lO1~!LRB!e>sHSra+N8-CPjvw@_?d%h{yy^anNr-2Hq}j~eMF+xnrp z($6)oXSjXu%Pafy(9vuP;5>^P6Fx!z15bP)e*j=TPRUI3`K z*>1CXGu24gX&A~13eL1Y_syudg;|zT9p?+sj)Xaoz4KLe#pgrYiQAN*OnB6VvcvdThz zVY6m4+mN5iF2PfjH5>jYvJuG{%r#AZ!n)%%8ce%iI|Fl*f1o_sA!GHk4l)WI6E}Fj zP8;xq;SJB5dy(%-J;ZuYhL?O2wVsEeX{B#l&BR4iY455wb*rhUpw)XX(Y`YPhMMgVKSrKKf=9BJHRZ9dnhwJof5&i@R-N?Z{5 z^E&S9S+5efLc#6hM_Cynn10^_{eHfi;f_*)Z&bdehTjgP?$WB#!jE>0O%!cw~T`PKc)F}y=xo#(B&F?>fW zLGkK1GV*rX=fp)n8%Kg$dv$MOMN6 zRbx^>Yy3UsKdSnSWQTF=$%`Fv4&M6Pf^Yak9{j`f#(UJZec;1xdw&GC5qrV+b%{l^ zb+ZFe?K#yuV zwiXs|)3(3xbQ}jHk{kzRl$cKtEO7wXX*RfXgH-m4&&>tGIpst7-?QA77O@ncYqweN z3oGlIWfFvdAV|9K+0G;3-Q!BrEPGpYn5w|QR-_Y|_vkV{LV{?PZa9qk&emh&3PqD& z10n`0K?&ou?;CDgIxq0u*WnAYTFIy?E(*V1XkibkwZ+x`jB>+46(HrA=XS$`8%Bkh zlxBB>`AKzipg(?B=;dOg)dAPY=WD`7TjJf=bz1sUn%&BE+Q0Lyjhoixe}>j+kK-!z zL-W*3$}pOrK~vvo8^4ZZ=t$#yq#0?9V~*Y^$HwlcQ>>0*X~vKANzpldG8N--*5gNy zmRfM07=v2c+l;}bFwWljAq9~v5cH-K(FVQiF9=E3bnBd@`0f-pPrP*)_jt# z?8#qix-%wJ+Rfyk#EKJeZ)@cH$CWFA1<#&~RJynt^CFci|LZV$xT|355%EuC&{0KP>7 zXnYA?9S+e=&Bzz6t_G8^6sdNdv3bCt2oXvJcbiecu^|Zh#t4s{hA(lC@8<|24ij75 z){jh+6;wYY0MH^xR9b4r%n49VJ@(pM)UBDtZOD&l-X=e;y=rqrqK>|W3&$sY=P+a1 zL3CV_2wzrA4OhLKRFzv4tqXm2*fZ=pH^o5A-Bh(4+39LM`n%nne2wVAb?R9Cjd%>^ zqv7%$XHjjri^>lEd5WRuSeed9yovZ37$iuQY&N@-tEu4~c^`O?Z=k_T+V{OclaQCAZ2>1B=ZC^>0t6vWoB1K8?_>4k@|Ux%*(RSQw%0dFYq zpMZ5f@QOG=7?*?dMbqS*vi^R)G*hma_Vq;>Lwa*F5GKho19&Lv!ti=kUWT zBWSnsPBv=DPZ33&Lc*Rp*QOj-iEJ$n_Xe&@n`lfFFTGF){>>Or{-h|I@QY* ziH9v2JDk$HLUT!kE6=Ldk+?cA)Z+2!Z^`8L2~?SoLsW@YBC_yEz!zr-Bf=VTY4`y- zh1%;-iQi?r8}QX`AT0Ik7_+LQVoa~Al~kYdhZpdnfH#2JAEWaG0yP9#1Y8GkE)ZIA zBiFt4ZneQ*Vh0D60WuQNxD8v>eb}}P07^D(m6(KNf9@uzNa&$L_eaIrNmg;`BK7!= zCkjPlC@s85w!O+d7Yb-EcbygPRUHo1-_RSk>c|-{^nUny4UcG(gf3PnFVlljlO`=? z#mIGrehAsMpDFy}7({t!8dyt+G#~C}WqVzCEuSkdc~qx*`I--z#Bh&S*ca*O=4lKp zawIaVlVr$#XO0%zlKc?e_huIZI^nt-KS#! z6^;kG)V!sA0}SiqIp2ZP2&r}bo+R86H4vv-#B=#D0%WtmLwTE#JmS~cudv;=J7X6_ zltDkS{P){B+p%aO`pbW+XPBBPIy)G{&irY&@KNSWp`;wgv4kr7O`+ebo;Ho=U$2?z z3r-+;_og&fo{l>rk!Ym3-BkE4a?||Uyne@zbh~r3+U7~&bbbMAzwF{Q>HR{@ze-o& z^H7d?&tkF)&zQcXsR!D1+*?T6n=(9{RLysC67gyAZ+>p8&VCX!;`im7@RY;evCpi{ z93pHOi747xto`b0b3V|_ZZv@OH9W!8Y;i7OH%PC!y_4d`byKzeXt)7)&BZXbDGB-* zXac+2Kiz+}_nQcwLqsK71{?4=ji6kln@aWAeg*+~b=+>&^FR&}cj27mJt|E7{Q0+x z5dWtn%B1F00T;Gl{B;(LTtq6budgo=5!fs!YY`Sn0=3_g<$qW5V`!hTE(!-aoo28D zW5=K6&ju*G!Zi3w5jwieMtNVUy7awN^ycw#x8snSLEVbc>9d+fB2_|7w4rCFGop)) zi&=FUA@!@R?+UZ8m=<x~^*H<`{vJh4GMglxM17*Xu} z1&;kfx$#zgkuV39@7u}>Li3M#MGH(6YDMafJm!R_9P{S&`eyR3T@@YIZ ze$NQxj}bK_a8aZ@^$LeodPO$Bfc1z_z3>&jx0~TfS}N(?ySuX<=c9xqckhv> z4MG*luV4FDQVEjPd@W=cdr_l9(kRI~=EQv0n4n_i5>C}}3;U&aL}uwN)f5G0-s_%* z0Ow2sg^#QcgKM$_m#t(h zYB%GKsrp@V*MxPXzluoRyi@^_)+!1^tt*?du0wXYgCjf>w+ncv0^U{@bQZ0te2L5{ zYfX^P$;ivy5@(#e*=etIjCqc&kdLmT;^{YBq}+uszK!)NIf9U}~J zt38RpW*5=~>Ho~18=v8XfKU$QkE_C}S;L#_e)<+}nIgnv2o|~YBa-LyLl9*D9^4x( zZrfp_=olou`JHNWfj1*ij$ttVJ>B9QR++m0?2MGOv^rr$nP0$P;&bCID=YiHas-xZ zon9Xd*uDfl!LBMzVi;>!h4@P5T(ENWg|6es^lq96_8_iLAJ)}9K1S?1*AH4q$w?@KR6vuiOi>L45d3X z*A{TY9ML(TPa%}0fiQ0HaOAU+9MXki45!s!=Mm{C(oYPT(Hpljqqi^>7n%Byn$Uxg zsQm7}M!wa@7b^QW(%sR#3wwq?K#={}!_enBN!?91o&q#YhgdGx$As=z883e`9Bj|j zk+U0$$I6%#lMA{&g{BXCk^~EFyq3HCtAvxxAXw*o)@yLz+x>MrnBiL&ckY*7xi681 z0|&S57ESJ(P3C&{_XQ`}b3E+mcs>QJriR?}@-g6P*NL4Ms8>2$nbNgDk0;^jZJ#wB zxXC&uq(pM94bhxoQ;AjcDld5D$|v}o@R50MILCSI%}hi04v~2VU5Arb+%{_= zK)z(zEzSA&pysrAI3N#PXt*xD6v;RTc_!hU_1aKy$AWZ0-pwA#=lV+<6R@ z&@(nEZz+bxsGtqh3-uWzsx*lq$uJQcf+sgeHyXRe!8Lzd=!U;j)n3z!h@>9$iKGJD zN`R;khuZseAqpE6a36GiA3ulSqoE*x&q>acW(XX}o7C5JYAj>Ao;*1Er}uev+}X(2 z7lOwk%%**>nVoSa5#`Zq1tHa#FUm$xP~Yd}t(sg7Onfi^N9}2!%HUvqzg(Ag{is6& zK7pIN_$7WO2C_uYT_YQ}CRaw(Pjhlfd+{q*%=Em`O|`5fuJHx)1vNM6E+%i7V&5j7 zhirQvSF&U#5Q^IEi`l3DkYD>3$eLBPs2u^wT+h!Y{JvyvZ|viH zu=^RaQTq#UD`flCteH#14a@f2|Mw~8(+Lr7b@F1hT}^LYzX%w2s&Qc_thy!(MxVlDnbr!P?4l~aW!IvBm@iFn zc)Ps4^V?bt`~21zb#Ypw>Boc)%%tKeqVD4SF%v=^ox+v2Vc5INu%V=*`(-GSkg{ z_A9;br6eq$gehY+e3J5rc3$|BNYWGUVRd-4YIWAB9%Nr`ewre4*=~+X1uy51U2JvT zuR~k&KsKUua#cmX2yCZLK!G#z=9CDw-_Qm zz>%vz9DK<=E5*RQUZ%Gl|1JevbLRS^{^ffF^})+KhDq*kgu<|ntn4@&jjDWrEV`C? z=*l~9xw~yfLbgTgw79lL6~peN5uZ$XGSsX$l2q5nV(n>nJ`GGFm5){5L^RWfU!1UL z)=+EGDJl##$}y9+3_!qFI=H^dICnQH-P>F(^%ObGX&6uaR$e$~QPZFBW&4Ml;STH* zo*0z~)L0)JG1h0H_d^lReu`-zb<8Y0gQ%*CL`@fsyo8acZTDPx9xBwkU>}rOsz>^44^|*~to56 zCvC)_8|r4OvMs+hx*x+>at3SqC>eJ=gTl~tLubUfdy5%siO=rb=u+*Ji5Y9zvokY? z!DsjM)70Lt7yQV5SuGw)P+D@-U>>!OBrdM&ht5X5^HODVXt#?)f}zLnrxf+_2c?c< zVkzoW+LKYeJ(*>^VxN+Lfp@8rZ9MVZvocC{*e}(+ehJ{H?e68|KYWNS^2L6CsYA#1 zC;GP>b$$GqZ$Qv-I2uvs1c}#>zK063eW@a;N|}*VsrlwVvJLsyJ)@EHpQ_SX@d_oxE+3<+(`WHC|-J zr3UZslb>7!yB#%1Jnxw9tlXaNNp$$ae)j1dpVxHZ^wT35VXb46-@o~r;bOVMoG$5u zZvKW^ASo$nnd_cmFLb>np-0role?o~5AB#okvRr8Io#L2(@pKvtWrbikTE+4d3K`7 z$0t1H0y62r(U^X)WfRcW#nfJclQakv@Ty_ zEy*}8ap+ildSYRJg*k+*A?*_BF2XeSqUq-?k)eh>1Cl*2k}>3ZAqfEu{@F)2`ov9) zXy4w4`4j?@3l)-MB0jXf{;AtEjcvU?`Nk>~tTRNz5`Tw;)>TgxFj3n)QLB5J?XJ=o zZ5KXa<{Dp2-;X@YC6N|u;+TIvuTRWN&G)(ON};~HJid4^^R;$_*?jM#3<#FDQ(+D{o?5J36#)`3@xOv^2VYtm%n^OH zYpeK{^Ncr%R=rLN`0+2}K8sBPpARpmu-C5h-Y`kt8d}cB|5C)`!0zD|g~^@$Wk| zdto8sC(jOy?1lEZv=(^3i&FHondZCQ(0fPgkb3VWuOm@L1vg}s$wBZcPGu>*@||^7 zwQA_l#opK3^Oas zgsx#IvmBidW26z!ccOB~MSv|j9w}U@1TW)v>{$jifx>uBaN!>wsP7w>wz z&lVi+wSDn4F`GZ^bw68RNdJ2X)z$(gre88lvqg~}z+gAfd=_a)8-D?4EIh@7CyPRX zwkb4i(gAwevx(Q1Yt`OyD2GzX7mu3>4G8m6>umMNcP-{oF;A)pRAbX{c8!;ryHkXw z(qF8D9z|}5$W#UEp_=Dm|LgeUy1fYI(Jo!ybIXk}9P0g3P=j^_YYzHrc{8(zP(mSm z!2g6EF}{qmg$cuJt$R9uMZg&nblv*lTO)0Z6)S)vDMKkWx-R2^(Z8Ca3w?RDBB^4m zo5FeYEB$@rT`p(qBmt3GzRnAyLq`SS{YBBQxSb#EAHTw+75r(_;j~`0tpEkVeA-$f z+AZxSppy6ts_``GX&19EJhrF8&Z$5dVZHN2A&R{%Un4J2~8%h=I-0*jmkM(rmC9@0He6 zr?Iaj-iF;#;ENZP3d#Jjh1&j2?j#UAJWi}Zc%|j~>H-_hoQD$e?m1x>_~C>;`KZIZw$p^hN44tTP*#y~d`Fr`a_ycjgdy#cac|EFzpS0~Z(x!MKxcEaeO0e}}H#u(6IAt^TPw zm@*J<4~W!Qr#5{#R_{YsFMGnk`v$WKuL!b9Dq%W}|xys(pa){cG`H&3~H$8YlOFPR6yemQ;zN*_D!A*hxOm~gFx@&H+h@@oJ#HGKAWZuF)d!34P~y*cE77NC(G5Sf3RgS zy18DvcH^-eZw7Z0H;@GSb$xl#bRz`&sW}<>(IKhXa>P0oM(Fl~GR!rDd1+9$YxSCd z!#3%6-rNlrN9Hk;5*BA~0T-DyDcYWG6-J7Uh+h-Iv>T>7OKAGVLfSe zL}ELba-koUi9(F4&psrL62GS7tJ5~a-qjRUsKBm?{;u(on#;sYGsMH@P z(HdCBtMlmh-ztYyNsca? z)nT*fe#aD@n9@%cN?1Zmlce6pn|acAQvI`0ZKJ5}o6j!Db4m$W%5k;*8XZe=?coZX zTDnJA`}LZ#`^8au98c(M9R4NI*YFKewtBh;FEuqZ+F^kDs+BMn7Nvof@InmRA2M4A zyrm_eebVGxAapVA&G22%P2ya_UxBVnb1`bp3zmL}G4_i}9|$%&VCt)5*Ggg+}7IEPO|LKnBBp3GN1AI2d{J2r% za_Y?`^L@!MTfvA!$JNzP37BHn*b5PB)@-YKzpRB@c)^gqF6b5+7LGW?bgW~61m2&d z=YB$smaGC39=cCOQwc1;dx`6_W7J#zxAZt@xfpsoPdJadq;*ouF3M~0AXN3NLrt62 zW*pq0L0+Hh&Px?Ic|x?b{?>Z3wvdV@gO)XL( zo+A)pI0g+ofCaEbp=d>jE|Kck`c>MW@<(r$ehyTS*f9_PZNW58eRcG-UIJRBoQun6 z`hCAHmJ-6k8O8$pVZ$Sa)%4&ga16e!x;xfKsf5JR>`+-IE7Eq*-+7Wammg5&wmg|| zTPHw^{9oIiXyPGS9Fo89zaXQ%x`Iv$@O&|&kH~fUH_2_Roz`7bZu~}xJs9U!hk%Z# zo!RMB=HF;#;R|;m8n&Bg)j3ZZ_C0T|M$xp%{oUmR9;;4xL+^@eH}Z0gs#?LXsiUU{ z-2kSjhz$?G4{bNT=TQH9CSt!Nt>?bZc#kXhM}qsbva+%?m|O0?S*?95@s+^tm1xSKfN}LY17qeA9VR7>0<)2%TU^7Gc`KIZ_^#_PF<7`v@}`DjR)SJW6q2* zgmK>Kp7-czlWH+TaX^Fd`=I{Tmt&&>&8G8COM1hbwWuHchL8n*)P$O;FXJIJitb1a zgJ8=`dwUKOV#3KRldR9^C=6{SwKe7CVed2O_i;Y9KY8%&8<%H>AOTj%+g~IrKD7xZ z`kpVXy}i4O>5@SE2C@7H%?q=MA6c0fMGpWC0~_%m!Op53;KITCFLBw?D{8uS2k~O9 zHY0=#8LL`>0q7`5bzSPig^(iJteUpRi4@$&diZdA+M3&PynkTH{q5Vg)jj|6&XZM! z3%qnYoSGOzl9#HMA}CPN_0Cbu?$50D+4xJy9_x*TtvoDLD7IB)>|JGy}bumj^Qk$JO zwpYr5PBjJum!S!Zu*N|%7{z>9eVBwia_w!VNsb;UarZ9CYYm-OZ zN<;FJZwX?&;-CsqSPryo$C+5tgmUq=Y!T|T$bssuTOX_c)<6Hokk8g(;)nE**Y(l= zVF6lO8Sj#izE;r@d-H}}LX|{co{{gY7O;b=Edb%X|Mqm!zT(HnIfF@VBEjhbOBzL@+64{ z2k(;S{$MrFj#(Z!G1WhZW5uiO$LS}6QbkMD)UZ|6oYVX<8+9)|>I1TT;iS_G=qNNw z4JG<32M0N*-Oru$PWw=Lg$sFw>Ri$s5?^f$V;>MdC7@k3psqWiGU!sM8~m;wuc?PQl_%iX5XmQxY;g}BT5YrrZ{eF?K>(;Cz~bX{X@vS8kfx3M zD?H6E3n|4O%e95PVtVsc;w2Ovj}Uc(jM$Kyz1$zkA_=;~sON%o0VR<_kVp|vgQiX0 z(yNC@|6L0OWKnMwwCSLY)@#20AxplDTahR`sLouM@|1Limm8xMIj44rIrO#V>NaJH zkHzf3jl4qsi(l?X5!WtuX4n__E3FNkbpY5zU?%{pD85mOmrJ+@577jC@}#OjZea*o zwR^nQlzS&I`al@yxx#qq48|U;#qXVa09S#)$bVN~pk&Gbl0U+B+`Ex;(;415xwV6K zo^;XXE12vE1sW|^33Ep4oCwR9^7oDYq#s(+x+`{DrXLGl^pc(czcW`hZePm4>vs%q zc7*DMxU~Y+Coc6E#p~mc8vHDLG5y}Y{dMOJ7cw;plgf$s!h`&nO;yG$R)Hk__65&( zqi8N`{eJL>*&*83I{&+Ow8IRaJy+>I;pko^DeQT^5>>ep}t#Sh=3{klufI<(!a-F{yFdPHm?UosdP-cjamjNgl zj8hBtmO=sLkU(KwO=mg<W45r3&pIrs>4ArylQ%)zOvHRdBMhyw2VV(w-_s2JLVopYbdhOjp}Y+jl*_OH52Pa|}Qb0NAUVoLz`3)>S&J|3-||r!GGt zzOpmF^Wkp90HBm$4jgxTc&yqd(WY0UoV|dg@CyoTFg)1K6dHw&5avI30AH8}V9auhu?Uzn4uKyv zzw;K@rF%LIz_u5xVWC#XP)!*E;&uY4FGYcql)osg;<9i|Ow2PtXFdb!E9glwfKnDc z9GW7&`(}gRupt*N0;FE3wh+d;h_($N-ZEY64fM*Yej1MdCSxHyb*f@TL>_wbMsG$7 zen`>poA5qtbZ(N@vK1Q-BEp|qg=vIjQO8i59Tg?55 z)u5<2ENdp4MPh4-Q$JL0?M0;&v_3$M_ou&DT3%Mt(a~8nVrFDis&lqN1WzbvKt(@C zt#FNhJ`O(qs{;5-gu;aP#nhZVL@=pG%*8{1v_N2PA=mNOT7hbW4MnI|w5EK6Ub_?hN zrJOahC?k^p6rB`a5$L|cB*3i6A&}o)B!i`emeZ2m6Lb5~ko%FGei#^w`~H);%2z&| zR3WzmJbkRDMpKH*7osP)<%+(%eECwKwzD427@*f7XFPy4g{&t;SKdyw%k-^@+<3O3DI;1Or{Pec!FV#CPT-vg|bY6dpfuA7Bbh>{FfGFx3nCN%Rx z00A%&aIs$QY5J{bulrV0vbb&?33tHjajnv%pwha0$lY|G)^DT`eT5LwH*$Nk>0#cv zc*M#g+*|_H(z6Ra(s@=OV*OrOs%4M}B(kiJxaI3P^gM*+nfmLAI%gyW8nv9Kpm8H#_V(CuprflRf1ol!7Vzm6kG!jw&Os*$!BElpn9fhC z=lVv`p2`4ZDzTFh=qX1>AE?Z6tIo=8DHv~$l9q?^Vxj{56;DBc+h&>gS;5DN3^YuH$RQZtZq`)>+J-N%Z1U(g#S>2;Zi)y@)mqv!XNHJTD38oJaMx`Ei$#30Vd0}kducj<-LzN zseE5rdMESf>$hlEBDH4whbVib#R1L0w*UD&&amtWrZ20XU#|GOd*)&twDb4of8OuA zKq<)?t#Gis-m3f=8p|87iM(yH(Ak0t2TNRzy#7#XbL9TGg~2yK zTCp{E=PnIuABsz+TJ;I?z4UXV)LS~}m&6(<0ex&tLDbSt^2uT(#VL-_x|^E!3w6M= zwxR3O@9h90d8~=bw>|ezKmA9OsCB~8ORV&|a0YZ592TMdgM(+DrzLS-E}Ns_y~!_> z3EGgJbCOQW7F|4hL-|-FHDBzIS@Yld@Lo_96VbgjOSuK7^w+cE3^Ts`_fCAUR3~3z zi41wE_v30dut7#FP(JjTU0(`r#o=lCQw&QB!VlqNF+Dy_Vti)2yV$!ZwiJ1m?)Qh$ zKIi+9`ZZ*~AEG5+v*Hgyd+TK{1e>C*Zdpu4^RFLzG_KI9471_F;RE!G&Yks>w}DZ5M|ULo(aKz8i;fq&;qHfl-8wnGI8 zmZ@+Mf!^vLUB5#^BFJl#HxTQC%j7WAG(G0|hMxcaxnl9sH8Q-ziF}cO{>MJHcOSBP z+Iej%dN-2uy|Au_LUNcxP?HG9X?*8}(CZA6ULaAXpaF>L{T#uM;|TYgxGGn4zrGwD=?GzS@%i3?M=6ZMJEUgKqwfchYf4e`LlA=aV#dQ% z(22(kII9*mqSD{;hdz;n*ZY9;G_=JS#E=b1U_mB9;mtg+)(`9)8qaHh3ptFPTS*}` zQE5&^f1;)jU9F!ll|}MBZgcUmqMuZHRn{~2>{J^cLK%uZaXg~VGk1Mike24#;BiEH zWja;)7!?!0p#B+ob<D>GV5cfiX7~`DfAPL_D1b2;G zELE{a%w06+h}cR_D$)11zGL;5<>*SF02d5!yHew+Aj$E=DpANmwuP~%p^~K@1hAnW zr8k{|caiT^QDqGfLjdyrs^}ogN%eNG?lF26tzW=5<@RYsqZhEZ;RUuZMd0CHV7FEy0Ivzl9a)8a~KFZwrx+0f3KB8jmj;^Cx$|x>5@g z6U%s98hWk;Kv4Mtl4E&{aWz85sW7b3n2=0>)TE|8gv^i|wdXdaR%A0%3y|T#5D|UY za}L~ycwf5KIb;-MUdlu06OB z2w2tU&ubU5+At&rv~4`VZ{MZ3F#!h$@1&ezo}KnPEN0Uyb3YUL$|pp=DU)m#1qx*I zN%QlbHZp0$F9QyP2BZ~S)ps}Po&`1X;Veno;q&t0=AyWP# z&OP=BUE$c0&#m2~Vo~E^Q#Ci>M~c*d;UAffDL)b&VRKpYT_DKGs1_oF*yLTR>3#Dk31 zQqT%H`2`aKJH%D}2TtO6q=417p{g-_yJ21`U#am^JtskBZe=WH!S}TyRT2*HD$|@r z+dfbrL`v$MoqLR6DeyX0L?1dxB=8<_+?l;vs|4D_r>l#TGQi#R9pdi5B*|$LqYwQG z<|TqLmruq(5r1glU!Mz;6BQQPDG1BB!N8VG$ejyLDnDSQ-++Yu0A(f` znHGDEUdS~^n)0zANBqbcC-2+k&I*l>)$t$WjW8oHH^W)1YhbzdSF+Zk8U+jA#dx z$OxY|5jmrXQK-ToiD3JzAHH4!yu09|U)z=J2fpn`@;wKmAvQhjoleU}Y0Us>f_e%` zjKP;<9vNOJ9eEvVzw1DA6dvje9yh(#A3F;wkMg}&;@_d{0wY~9e9Cro zQk~{7a!!r1w|FKd+}n+%x4)w6d`OUXbXz8@qiG{HIqF5KH5U#F*GltI&6Z=R*~TLU zdIh6sbKv5*=qxJzCQkXFCoU9QceYSTBiKg+jSwa7rvl{41h}QY{PX|=5M`BR!|E~T zh%{2dUNZ~8aq3T)k2pX@K{As?>K5JK1LTr1M*<~jM0g=5`|-17>HLenx8`zR*^eLN zja~vsAc>DU5A><}{Z3XXk6@o&KZ;)}+^>a^(=tFEu!csOxTUbANHsssPulP`ti|A% z8x~=eSWWRDtd|ixVPLe!^V!kEou`KzoG@dFaviF5_ys!*#77t>U!0F^Ai9+?#5XOH zlxq*TZK{UYNMvX#HRZ(;Wxz;}l2%iWJpwLxex0B^mHzE#xXsYlf`cl_?Ui zFlfixL*5}|(vR0#Z&FWp@7>snv?Jc=iVbHBca(m9g&LYlg%O9EzN6fGFY>Bv z(dikcs?zf+H=st4v}IWP<`u;(ipVs#!qF#LuVNE7vGAqwJH8h=KzXEjS^nq0BcK}Z zKXbCUnvo~yr8h$)WX-bS(Nrjm>>Q7uanE@KSv4VzXt};TOZD5w6CPpwGW0O&Irc+<@V#H`!|X9#vYG{ zzotKilbO`3vQaf#7=S@LFDS$9_stO&9mTJoh1s(tgGtkcZG|j(B)~`yA=2<0xN=cdu5xW6Crdr)@mo zP`lU?Wmf<)NVn#iekm>ELLkza4+o{kl?jXH5TsU%?Obo^8uNnm}2%i$IMOIyS zsV@r}1ORz}tIH9Iy997d?EHA#^6M@l>1xXB)XWZAEW7Ux)iV$3(sRGLyN!x7eOnvA zttL2XbmZ8mdtoGY!0P=@Va99+=Q|69b!++9W8GRVV{N!bux@)9cd3(>{;n?tKskvp zzU;t)iNtsi!FJA&L13!kT=9Ai)rlux2 zO#gvZNe;j?mer}lMmja zj6-v%aVXsS^!nki6;YG;X)H=?Dzorqnr|JZ?sP`x&$!yz@#DMnwlZ2b(0+7$j@P{= zd=goA^!{%@k;@Iw3G#YTJ%>kq(DlK#Bu;>9_=~yC+eJMLEK?DU4s$)NV|PBzRv*l| zL})*e*4V^5)b%;3J>@4H@u)t~TUg30i{pIrhrTc`F6T4i0A7pHf~YZWSQMy7=)!45tRLpH6RmHRgUae;Qx`l}OjvZT%UTYwu(IN8 z&D8M%^ew3Q{AkmkdJY&d^K&=XE(S1z_KT6{e;5@VO}KfXjGXs=zt9x)g#)yd@-D)U z?USFh5Uv`nyyy*D;?E^#sO@W|uhI*XxPC7%wxC$0r${+1UxXQz*!w{%%^h_^aIR*Y zJ^gv~<_hp&@OOpI=T5|O*m3T>f-Npnhf^8Jn`=+Wi(M`It1n+gnD>PDeYfRP$w)7W z4p!M_gU37y)yvWUdw{~LY*&XKb~^EP>mOMw+65+Dk29a8p$FG6k8B2v__t-(*49=(7*C)vDWrHhW;~ap z2G1^hV-pjz(1&_wXJ>wowJRy*vH_ULwu^Xu+Yncp$=@a2k$(B|<7$KH{auEqgd+*R zxWNIBKY?_0m4ohKu5c5R@RFrWkx0O`gHn)e+N~_QDF5q&lyEAOm{$yA>ec(5Tf3Nt zsW#fOxU%*$lugWIJHL}p8b8jsKW~wRO$LulQDOzw!7Aru@L2RFQa-zn-e0eR7qK}N zt!Uk;oXpgud|rlJ=eY0~7A9OXPtD0kF`v#;~)apAU z`qL!ukTt*F)P3Jqg5V{JNWB1~y6w0z{IDMuy`q3xL50fd_T>iD8$i_`Hboc?`oS~} z9Wm8egBw3zP}X}39Exd2t1XjXEpV$Vtxp4e{4CocT?r_jR_)v%8+9T|OMrE`uHbX) zY=Y)`7xUL0sdpf(N>}^_7N`;bd;rqox0>R?X1mu)8eDK#ygg9%uCEyeT$CSMWuT+* z1Hpdu(PDiXjYdy51BfDi;Le1hRc?Bx&%;pI-0A!#oyE?a^kK~ri}_R49QkJM+-n1G zE^5_t9r5FPw!te#49K@>uTnc_A_P!5Y%<=?g(^0oVPw9gyU@hQBQ3MG0bV+t<*}eG z%{jBU@cRvy&&6kaFc}c%^TAAk>LsZ*lPLnf?czl1U7A|-_%`$K38}U*@Yy6?($6QS zCV6LN6j0Qm3X=3vyop%N)VlK_!OS-y>`)*rc|pT)1bgJ3JZkYE=A0d|Avya{Qb_ufu8EaL9*MZvza* zkl%o!qy?|0Tf{5`q@?P6O&|lTQ8AoQpm1yl2pTa$<1{r z>vF`>c}CX9+SMvW{>F0@cCXlYHt+(UIuU%dydUB6#DDg+CVQs6E-KHxy%n*fci7i< z^7jQFEj(8(N|bRc*1?n!WB*%cQ=nuceaAVs^Qd1E{-R5(TO{RLK3$_G1Kkvr~={|uWaSgIB!wAvS$6z_K)uK>bpw}>&ANym(d<1&7;zIac zW>smG+12@x7TjAep_7PvXKf!0{(g!R32YmETV~c4NyB?_xKGjGunKs()NC_Dhwbes zg9@z|mAuu|&ULyLgWp2iJSc@dT}z7{_>(7R8$2rDc$hwEIE?18ofo}*;pvn8wkN^N z=ucilG4}sq0m24gcVg5paFT4)7GVa8{sTd`X^JW=CzQ)H9+}hxOQQ;-Qi~H-iN$$5 zUCGW9RKsKY{ncpG>K3!zm08#`raAJXAhECHWDW%`bP>o4zM6k)gH)0}tLGVX`%XQ| zoK-|p{9Ehxz)siwoP4k03pN+;%HxMExQs=?JhD2xUn;)(2wo+NDd}L|Veb~^@k<@mDK@77i`D1QPsr$G*%dUXJT+N-ch zpSRs#(=Xh}xJ;vX-1d$Cf!Rzb*a1OgH4ysA|chbdxy$Yc($J|?!v z=oI^VhJ^94jgi5hei{|U|3kStfYFd6YLH#s7`Q7VhQ;;7pqst%cP{T;q|epX)Up5^ z{9U~xtQz~xRw{HeJ)Cf?$K>$}je<{(BJtR!(hn>G`5~q>CDBO539|Rv#A;s^iZPFO z$y&I-`b>B7XVJ60<3{zgY{6zNK|Q!3F-aa(Y`lq(Fbgm5I1g^7oU$bx!^tiSIp|bv ze`d{f|M2e*jYpHPp!~kPyc}Ps9@`GC=oJ8t*`S`wFRGQjfbbyuxPbJPzUN-xC_n)I zUPt&Sdbe?)c9>5``~!eek8tbd3W%KU@<|odtlazJ1k?D{QhB)gav!Q4p)oLntu5ZU z(~x|t*4Ay~@06Hum$dt0s1;fewuSInK3e`}mP-0O} zYdBym5V6?qZ~5&t>AIcCZ}!L5aC)i2$}(qy58c>o#(nX~9Ksy1iq#0-e%QP>sGeUx zaBDr1aLcGJdAD{!{eREzQ;ui0dCzxb?g&4y6Dn8wTU%4mdbzm1b2slVfAgzu5n;b1 zc{`Hr;WnwpuJ~wU5YdO8OIY@@Po$7i@9;Gdh+*YKK`PwIz;D? zXcBGH3IE=!OKGMVv%Nd^Q6AG*-8Y5oe!2b!`JbO!4F?b;=rSkPR8Y_w09*PZ4?#?P z%3KKD`X(f!IN9)I%wRifW#`kR;LCU7U$7hR9#XC0`YJOs^VcBZb?s)+0iOt5`{f_K zfZ*dw>{+Je*|&YhEo&OUvfs7#K_pKq-W81wARZ**eyZ6xW!2Q+>$%YfIZ5vzmeYWhCVK$<1MBkf!go9nUKWY_dHm)0$X_FP<>GT z;f{|jHuHuY<%p##KDaBnPe`vN@j=&)*Z`Y@WDi&QpZQ&q-&wXC>8j6Zu->8ucjIT= zr4;`&&5}SRjT9oO^_|!%#~EcjS;Pc2=gyla6lPNMSjvyqoBxNX?*QlW4coT&%-%ah zM)uyT5Rq&mq-5_cn=-RWr0gwwWk*Iz$lf!1W_{Q1|9|2aXj~P-}iN$*Ew<- zUro_4pjyT)A31*J*(2klQ}a|85Xt-v!tw>DyZ3ArvUi5_7+=>uaKmABLjW09-yvLkw3o12r1B)#mQ>dw2MRZ*HE-sV)A)o~N5vL$%mI z@r`))SmJ@c$aDn~0}@3VtxA0r#y7(ai}qG}Sqz5XV5_M00evr5?qW3VyH4n??pNT% zYR&tzT8d6&%9n}2vU$+k`+Kp;CZw z^>{37A~qJa5yMHwIv!bFP$J^dB3eQq?so!K)n9$tJi?xBK76Leb*K-SA_W#=$T6EfX-LIQ7nNncQ5NO5c4pfL{;WrdC)GA$3zv;TU`U6BcE)T;ZI;~ z0n^NCQ}^Lv9W)L1toq*t;%uSobCV-dk6|Fv3m|dqjJ=21igQ=ef;emCg9Ql%No&0Q zRI&qZ!Oo0c`spwL327tmmMuwCXhhx zk2|X)n%4(HjM6|8_yu1DP1-5Ds|Y$de=_t>7r0g`k*#f^5>tA80<%IW#bh4M72E zx!f0@DfaQDa^@RJ_K=Q=7ov_#dpbX;fN#YvCYAiT#6IE8YV15MMqZS0EfM`kktlC=RaIiF%R;&Z| z8-i>QbD$%u^M$q%B7B zp`UTMF~o0_t86F&d@aB^SA8bD zNAWcE>k11QF%1t($gzOxml*k+JqCOyfq(RKw*&|7qjue{qHr7yyh;*z!8pc%6DptM zxWby?dYC>Lgckq)Tqj6$pKg)-iFu*PXrG}8t6By6sKxgE5B?Re@tJV`A%zRbeCRq> zUF0{%ZGF2NhI==THI9NP$d8y=IP`^4o#(Po1x3QTBk^h-d89n|Iv3N}B=-4X^Od@y zu?mhq`FG5MH>_D%;iU83EaaPd%MKPQf5NXKj8&4&-?X%$bKY7Oh zx!A52BT!d>E~(1Z*BiGMSJ6G5QEuBF5QoXZ;)&7VDWiU7*ku%0s5+;mG+D{A*r+|W z^@KUCD*oTdIo=|MIcYJcjNZjpM&vWnZ~ifYLEm0a=(yi|9#D;K>=q-hO>cndi$=K; zKTdvj>zlib{fIP6mSH4nxGKNd{`A1wUHe^eE-&> zdSV!>eZBtCc%e=>jMa!T20zWX^(CaF^a3s@xjF|C>TqH8j_4!KJHYSj!4+(xy0??I z2&V#Pqx=ySJKSw;)v*jHgb?`F%$T?SvKel*;y(Tqfp@iXt&)jtJ2@z7;OR9}Xi=7lY`k zP(pH(cy|uvsq;JXiDasC%c_jn4TO);Fa%yL$n9)hBc-QP2FHsM<+$QL;?H__Bfy3< z6{Gb2YLkh_a19wh-l>lu;_TBNJ|?p{p>oeRg-E-u*11rG=?0AhUUvC8aQgOl18%0Q zOd+$$0ETA3g}TS~8BAR0J?D`L;{~%NAq*(KQacoXm??%X6meq0H0?*8<9!uxZ}H=; zadwtYA)GF~?`#u;u z)tnW?#QNiu^>eBpq#q3m(q_rA!cnN@X@$FYC*FX#XfIaRwZyP9^$Qf~38KNIKYSI= zRWYiVEX#J5%4~>J8kaA#(RXOvhaNXl=%=$YTP{A1+gvG9WiAqf@J$O;$qcS=4EkY3 zgc%CgQMunA*ANTOj#QgEDy=UYVUiEtcMg}DM+z^e~`m?wjjZ8Ecv>CvsJ zn#}?lNIWqu|6!zrI+hyq&b!Qu2cMn`5=m=#98tZge@MCE@D9BOgMg-fSoYS7q%HJI zhDYBrU%E3|&HFERym&{qz@O(~)F^j>D_G<_BdNR6C{5lq`u9cfX-4!>kI&n^S9H%v zQyA|i|68*5N{uZtrs(;2XM7;42+{Ea+G2hyI%0d%w9wau#=?b`^GM0CjuRz#68<4| zWaSLH5P4#IT_}tJIMjx8m}-UnGzimq4fCGklP39497K^^^td>kbWDtv026QvD=>BR zjux6Xc;ixuhq=>LO11-m+r7a2ij4W~^Nvshz6{EU(UCELa|beov}f~ zgsiQt&8=S%2sGJ-k||(;BiN+Ef2sRB;#pKCzPwC{j%amR(}dJJ$~`}WyX4f_<8ieb zMnB4Ix&8>-stqU)Mn*bI&1u@??Jw=hRBzOkUY_+1XMS@RqV$;W+NrS|-!4mNteH;@ zB3;SEKcm4SzNFK-z)g*Kw@0I@S{&{w`Hdup!=hiVU3(HzwM2C zzpi}SOI>c;A)7@K^N;~;w(E?0H3iG;snoj$Dq?DTbZ7OLPlA#mnX$?z=QIjuI9oVM z9AKj39l)5jrc4|>?J^Tm!yQHH#I4oE^i7nIDalgd9%1m@lOPIp(k;=CpP0}GORWN}oY&*ov&oO)ciz&7AZ(h;$>IP| zH1<0lL!@j0w=^!5L&yq|PS(}sxY&ga-Z+@#yr$pF+rljT?(c)g34ck5TOdSAdw-_^ z^A}aDEhOQLw~(G5pPJe?-9T>=cDK*d=`kyls*70;?LooC8_*bpBvlZA?r!l`s9PYw zGSU~@0*LQOi%Uxzze{OAs*?wpC{OJwbj9W{PJg<>z3>*&gAhU#aJhBOueJ%!mm4pB zoZ^mHF*U9~g0GY^dIk$ApJ;o`T&WOL?T_EJyF6yEy~zss+~BX6^&Ga4dp=$MTJNdN zv+n`O#LsSa-i~6?XhVu`comgs{AP6_B>QTP1=9wC zM^;D8*cT>mbpsg$p3Z$@qObfzr8^oWH&590nJcrnSmBFvOJFup@y*rk-UTlHh%c+b z7`q-MkG@jHMDn8-^t&BuC2e)P;O=4f+#Vo}i^@>VmZPjA(x5foXWLwhcHBW5s-xAp+adQ?#8tUI-IaB#M&%qvgmS^W zog60%R5(2^zQ7$VtE)@8zrPPFMv5~Hf$E3_hfF_6`wAJfX5r^2j_#IEx|7gr{OLX! zH#sh>_k^7=e3q1G;qP0K+4&zTQm#@+w{G2{PPN>_!-wOHWr3l9#~~(a6`MjkuHs@hmxq%;t!S^C$x|bF54Lfj^1Bbj zfr2OH^m;GXUFBfH&cenP3f2?AChh<+j%KZ za|rFt3C8Z}ojjqAtoBok-6^v_%&%39NKRg@=d_v|kE4;g~Gn%n?li7JW5wyj$vI z5Czv{B-c{rvOdBDZBzJ+Jtm{@@5dONXHvI;WGUrMdOMiZ3J8e0g^v(g(#-}IJcZ0X z4C41gnL*~w7jM9alnZe{e0q?wiM=JJ`ts-OyRUa`pk_ocBtj7{h7NRQ5LvGVw0GPa zpoM7^=@!Zx8`Huo%*x6N6A~4On_PH_n~)x5Q8xw32S)H^{r+9u*~R5sfBzyx0D^cT z@qcuBg@uKX99^_`gAReiQcvovU%|ut)Co;4m4=GM$kFDk^&$sSX=)oxk~ z9(>sW?3FGz^xFhYJO2m&^<5EGv$irldyE}HAHwe5noB?eqENFH_Cgo<24`h z^@2ANr(Nefv9(QQFAc*^$aZewb(rt!(m;LIi}o8Lr&?^eDb35Wng`Q1F0xtYM|HvwVg~ zS?Ax@dob(*)?N?PweVIU3{t$KXO(dHOWJkw#vIZRn;bg-<>hDo0IkW|-FsGPP%2np zlueGGG1B~0Ctc{ddbF~JtzjFnQ?35cGb`_&D)^`={+!?U6xUF(H zM{zI2mLGWHTbQ)rs>*Yx`?fSHqG}K!w~&pHZ1|aqRWNNGu-+=~5UFLB`t&)q!hyzl zXAWB(&6?;eFJ_dFs6k&ykUxwe$m#ZujIks0+Ry;xZ03XKtQ*FG6Zq+D z^;coEmaxvo2XUASgR+(+OZAkMDzjm%?S6RAQYjxYRv={&4g3vYQp3Bi^#pJ@mp){B zS;cSGw|jH3cpfrF`ozBplZ^I%?#>wXVehuHS(#aK36^Mi>%XG$J9}D|V?~b<=5>u7 z|G;vCO4QL@_CyD2FNh54CwpT26*@wkzx@j6ycXuF2q#;@mm9!W_yM6paE{l_xYNLX zT3&6Wj$B<{uD@(?adCk>Nbp@<#DCi4y7Bt6E$lp>=GOIHIO)Nvyj*D;%HpIuj~C-r z=zkQK?c(|dOCJ9FysCn+G-HFHLRk-XYze#UOgDHx-m(e0S-qKytjTlDc^R%JN=tA( z@g;j&@@jMAKz{Ir&~yEKdi<^5`Cgqpf-grxR$<+1{8@584vi&=(`o{TbfVgZ0k*Nr z;xDyFn)GX)n`$vx;&T1pmT0BkKPrhJ_>i+Ok{SBCQOCv8{UPQZ_AVEvHDTB1Ga)>G z4de9HHbsRrmYV;JscAZ$*Z-Ci40N-SqF<0VxUlSDOy2%ytCkZ?w~^+J($}Ajb1&x( z(^yMVTv5L_r5QH<9{Qt5T}OIe`D5c#bgt2q6S&R65$VcvXkAQe{R$CRVQHBd z;v~{i?GKn!rN-$Z2HJViS`FuIST~k+mM?~%i!&1LEATx;6UTK`K|4{EJvJ609CMlR z7{U}rinPW|c!*KK81P5&>=^{}(5vz&+?(7&x0NYcYviLJb7?6lc)zt;MGk-9xgjHp z4}LYOHd^R7mX_6HN}|x|XkmVdI6n4w-enZsDBo4KlgZ?sK{=Q*?Vl~qaN)-3rWE2a;?W8mDM!* zkI;*Fea;~2$Hm&khEVfM*tj^W4yd!=6$n1MESx|6{syn=-f&!enwoNQ00yCErl`=} z8=LDqu1^m>`3~GZ-kAJ!H^t+xY<}%vg&{ZXzco?Kx{#9dZ2y6dn^LE_E-uxC7Y!du zP+v4;7VF}4(|kk84OBkY;i#h6NGS}^VOpJs56(lT=HQo_bWX@*eXGj@RvRObV$m`<#4wrU)&k$h2c{ zS;aLB8PGNKF$+K?1_%N_CKbjdMdf)uo{9TMIDg=Lt>|a;Eee{>wCb|4 zJqnK(AKA<16vY}-2o%5ctFivHrW?h4w7`(or*a17Yg85O#UIs-*Dnw9F|48l_uh2hMb%g!p^58y^FwaJ-EZ028YKbk z*y_6GZ9D7XFXXbp?0+baQ7Q&yD=5|Oz-sgy;xB%#dN)!ORTd^HI~`;k?ZGm{g#J@_ zUN`P^4rPOIj{13`jF7V7AYy33+&uAGGO?7|mDY&V%93f%f!U!sk98G=CH~@;(sF$G zk$@@Mk%(Aw#8OdlnFTbcpLR6t1wpw<2!HUiJ>OJJos7{~6ynTI8yD zsavZ4wkT<1TF>s_MlAWh=4?Y*vsi;y=KbO2rQz14t+({~_vu&bbyBEtnF|J3g*>U} zM>5ZEhHvt1&n+4+%?@26+ANH@AI^GkQPjNDJXBtLdb~ibC#PcUFk8SQRCL>UQP=y& zaM;9>6-W)Wn$fk6AvS!q%#5a$)sy z&LwWRUlTC8f@e&6n^da5J()*yKip#06_(?vEsYO4*Ro!5H; zz?<3P0(;qq9lK%TudL!HoxX29HC*?Sx z#~+Sktv(O=>}aRNeQv~L;e%`&vD7Qq6}H2dpqM_;u;ogyAkRPMcD)N%0 z6z#>zP03rDskA-xLx_F2WnC2KMObjk+n%PvcQFr04y1~zm@m@pG$6aF25S_Pym@{_Y#eeTd+ zR>-w39y@&b37Db2K>9>n{B~2;&F8;_Mg2x`{O0G<-Q6aIKJddtvO86-;%YKxi74Mrkgq{>L9nRcPz~ zclbqh)U)>w?bHR`Ug&<(zWU=`EE7>rUMn{pFvZwSP>N;nw)?e-i}`rJuY@-W)!_|S zfOjUdQo7C1>PVB1%8SRREy_GRJj%+QQOYkXM_P1V>Xl6{w*E`vaGG)Om$M6NRm7km z>;8z$68FAOIZ@}}&eLz~edwDS)u{XO+@s^7quw;-%C~5AjeFd+jZ}m2M7gn z9ptMnQaYkCzlPOvIj8j6KF8Ygy-%odXYJwN?*xj7v-oMJa^Bh%ML{k7LcdQRlARan zZ(M!C?}~;S9L$N5tc8N;wkw}GP@(7MHmC}DF($8@?PLkeAFx*FxAcd?2{i@St%H4fgdl%6$YoSG(5r-E%j;Ky#_Dv0>mf)DT?TXBahZg#E z7-}W+EUG$-Al>JV*KnnUM)NfGZS(nd*w+a>ANe5f^d+#MfTOHwM?B^JahKwahCbNH zx&l-M(<%5_vtd$iSJxhZ?>|0k&_JiO?Isbl3`hm%W4G4HOTag1MIB)*2V+Qtw-&-L zV}07-J3kQL?!zb<8t51cMyOqd5Ebzp1-se$!k8ouIeD ziOkA%Q6l0rjT)^qXU^W5yR#Mj^Y*ag(6=w5cUXox9v=qiIbBGRQ+4thqP*{G*m{XR z)Ie$NqM2B|WJswulDo&f=;(XrX3e&4&ZMo+Z_Q`A>v*v3_BmS_YFD?SkA7#}%O6<9 z-LHQhU*u9a8#A{O2~f81iJTVow*kIa@wmk5csv0%Y z5wcz6Oa77tJ>|40m+9G-?ZA_8lo)L@&Cv=WH)BrL%Ff-v1sGGFxM3UB8!0+y7P=gc zG}^rT7pRF#SZt$2BK^k&!kFXthQTq{168Sq}8u1v68u5NSHXq zWBowPeqDQIUIk)>>~W0;4=mxzY(8JjINBV;g-?TIhp214UlYbRh%g9*+vVA2arrcb z3i2*0e$d{XU3WHO+pM)mT5e!0>kMC#PNL08CG>(6c+l?IS<#}%Wb6ey`4RO5j%VxG zhC=&;$L&TU;i6f|7!egFdZP#V2?9p)84fcxcGqJ8<0qn7ty|dpWY3M;2z&^ybX?sv z@;=#h8FgYlXuqPWPjz-gy6VD~l>OEr9wAE0&1?dsJNDi*Iz_ZYDMz6Mp-))cmhmqh zhB`b~jcr%0ig?7q{8j^8$C_X(z_lb#tfDO?7(gsUDz;U*w=iv7)^i33yhWPtKERa)Kq=ZBxQX};*|_RTY1O` zgE+D1fnUvDF4=WIp_>HZzvipiKc%s($I$l1e;oAP|Vb9toPwwS8BDzT=j? z51mBz>8t(RGM`GF*s~&AnTgo?-=xm0E3B9|Vmsr?7M4dc-hU0()9FLql^+ITt+IRY zTD)DI{rRCeAxNLRZENXYP+!@;GV4?a#R~d7alglIjd=x1J;B(xxV|WHak2w&CGZ@X zJN_BNV}Y8yilKq`NNNS%TsV35Ite5(rqwn|X~@1>-gP9dm|PZ>Pb-hhC9+ZDy3_H# zC1R{l*8wzt(&+adF)rSu-D8Uao$;i8zmLN9?o zJWmke&4j?f@X@1NP)x?o=F033KAtB$rII+IJ@C4jZT;dZP8rx()^M10@kS`a|M(>; z{|{|_*K3@+)Z;&mT7u1J2z6dR#Wj1UqdNTANma=DEN=lVxusoW-8YCd*kSPYeHE_) z7%^!)lfAKIoSoKUek~H%tBsBO^){wjj{$zjut{>IXyDU=D3Va-OjS&Kxm$Cl7_Kc% zh&L`L0*Ra%Wk)5#^AjJ1#Hf)U&Zfa{3Tq}!JO*SkjTj|j;~^B5z~Ml#cCXbil14<< zoE(W?@K?|Vh`Fr3>Ai#s<~>jm(~068x_WyL;l1Ps2~0A#!L5qFw^>;ofk%gF=c9}W zUrYY?g&;f_u+PMll(kWe4;%X8-Ls`p0~FZaq7WvPf$L8q6&&I^(^r*c+kB-_CnZY zL51dG_Dm&#-uFj_?&C@4tR6Wbt^AroKwb(LfxsQS+|U$0%aYY8-ZtEx;fqvyCgT5dkDgn<1~UoNff~n=^Z0fR{y*#hgmbiZ3ff_sOQZ0iJ8W(PT`&e`l4ow_oK?x^z?p!h;c(l?kC-Wv;&dc zkKM|mVqy)BQ#(_@xC13j6foXNudgBV4YKl3P5q7^J9MO(O+z-9ZV9D-gFIY{@cI|1 zPXSX1VOqGny6OxNq9^wa_)wfL5e94`qpHBf4^jqT$TVm<32koy2tJ@S3JFI=WuAV8 zagBaSf2sOFgEm)1ms4B-Kx&AD3mFt^aF~;Z6GXwesx0(kp#7n={pLf)Smxi?0Xx!x zpKYZZY&|b{L=#K7+^qgl>UcdRi&KhU{P`;2dhnahhHm+06S1Oe&7gv@gMJ;ka0Xd; zCmZo+lgSQz!Z#(XH{{P_pUEeOe~%aJ+F265r1;HLzvykdi0$Do_fM@<5U`kKq=d{5 zA#O|GWbg5}@kzuHEsBm{vXyX=E)0=>Ah{QqZ>RF##aB2HL=pdTRy@&?(_xvZbW!|c z$nj_uS>=x>OB^e~I$)zj7J-y2d&dQ#N{o$~(Xs|y$9t?55&dmyw&W-ZgG~yk|5yGm zDxRFICz>Vgmk!fZGR<$_z5#28H?;f)$h#BZHQD5`YYnM`2&-Ng%98QiEJpL50R;{> zALNWxpxs62mVtG31}DCh1vU7>A*KbgF)i;4XbF751B_N?$IR@Rl%R$s_~(7k5E-^K z02JS?`xT3*(;`|!LxX9`>EEdo;5;BEzAfFy@jk^|!K9{)sWI!sJcvugb!U1q#PM=% z{%bJ8*GeJWmFs)kR}qOb6z9OdN;a9A!_U@QJEdFnT{a&?Z5T{?SL<9w6iYf{5KrJb zy`U}@xm>hz^Rvj6x+v@IQq*oTBs-m4d#e7lu8{Hy<0moA+Ct}&7DCF&7TM+A+4yS1`($o`sqEp&Bb6Z!FQ3kU5 zB93@=nugoFsI$456Uw1j1YP9nh?Bo3E<_iZP^ruPF*dDntI`htch2r;?ii$TmQWT4 zq{i9osE9=$R?Zcsd4ms)4GXCQ2xT73w-Ch&NN0A(G_NLYvOmFoX*@ZBsVNYvqd;!w z6_K^`xD#9w6qS^Iz+|<<3*LEVHa7I|PC0N%f;Ix-gB3aecWnohjm>)R^~%cv(yzA6 zZgPQsj!63hLzj)Vjavl}dFOZW&)$#r{=4p5vve9iJvTn3^bHQKv|bD~DAd801Xgz9 zlRRo6Uf$sqhop>*t%QoFbyH5Fv^-lBS2Ol?O(nan(+iH~byH$sV2wkE+YJ9DcEku6 z>LgLec1uw{Vop_R&Gj#Dn;Cw5H3rEP7lKKlfz=y8z#y#--H(Yed(@uPJ=4EZ67tz! z`h-5m-EI4u=k^nWt#u?PQ4lTe{l+8;DqGoBC9SQ3QD6R?-Exe7%0+Wf>T^G_2JbP& zgxDrpXPSfNrKa5gN{i2fvH1Jv0R$s|y&1ynkl)L<8u!0Or*b3+do@kWT3y`yle%Hu zT|g{GYX$9q@yo=vtomn`y_a#df7@@+@}IWj_2++DR?mCr;`Q>Sb~~Nwq8{HFD%%V4 zUgFo|J{4pY#a&ek3Rr*NyKu91xjb{C7JM$N8N*vza z$a>8Z@5$f#CECytu!qNZH`=Oa9b?bEx*qg9=~k@wc^6;1wvx&5R=p_Ie~%-^!2Mb2OUf!XwECQuAa*-!U3d1E4+)qE)cJ zf1_|t_M0r~Adt>U=tYpI+xkCm&ihLA2|1U%AF%Ju6KQrdLieXgoz||uoPLV2nNERq zf^y1Sij`DBFR96dJ**L!66YQf)pr}e&@^`atCJM4wo?UcG=XZ21T8nOo<3%wtp9pW z_}OZP171{r;{R|ZaPkuX00qi@CCK-oV^}!71_8f*I-dq;YsKVm^}nmL@1-f zvmDT%^&?`P|7{i@lN$xD1u4~Ihu?Ojsvr`1DkUtO4CBzS&W1^#&)T-Wk#cDdrt*jjIqd`;&Go_G_^p|VG4-TP6?VrM*&^oE29<`ATVF^> zTxHyot|IPo^Xou4#y#p#&F@HYfQ*mn9M9YTfLL29PAWdwme@luVv0b7HUj_EgL$dx z)`AdnU%!21+^+X#}Fx85pU?LmKh6gR5!}o@yog`v@kLOO|=Ni#??!Uwl zhaH1`EidxSL=ae3rYZ(KdOCBY)%}8_?5uXF2!WXkRrxgLGg<|-@vuIz=CqLlQeCuI z=e0nn-X4Z&JbV@i{Ehcst5hvY^h$bg(<2mOi1eScAoMuEHum6(cL96qv&(eE2nvW* zjLKxRnVRgtKE&IUh6mpbr>F7upJ*1ayam|nU$Z}7#M`$kK-#x~4sBMC3adoL^|nAg zntqTb*B>ayetvoRWQpY<5%iNk!D29mRxG#f%qGu5ss*n}74tV~R(yudT82h9P4Az- z1Sxu`=+D!8az4^8df#3!>7!9!Z5-A=8S}n(bn$!3qIyzt)vGc(_AL2(&O85%8~@(lR;p}JS)@{x_!2{D&+v$92#4l3T&9)bcKN?KT&=XMdJ;Drai zST^pI{s`w$=c57@smHe;W$x21V(3S7F3bZv?Y5Lu7UY9cl3GowsjEMOi5$ZI6R4nN zUB~4uCx0rO893&l9kYN*z1-Yz0^0-7(ONsgtU(nW#TzjG%M1HiDpDL!p6fnIHRV60gtw(|K8rLmg{jHm-^NWRQ<<&I1WZ!et zQ-Tq<(7kqRkR7c>L`VKM5;`-(x=m7qvY4$(SQXZ%(XQC#J@cl2k)#jP-_u_*g_-Q* zSJJ}Z$zapSt=V%L$~XEzN?D#dEJZKFZ2S;%>}bWcD9lGH7SNf+(uZp1^A7ll93iAb zkCkV_rwQ*2Ibm#gTp=Z7&7o4w>-~4cgfLJ=R2$NK5J^ximS{B46hl*&&s-}*Zy3+$`&RFq^+Um)h$`iu|oZYq{o6Ct;~m1sDFyJ3I&}F zlx!HG+TMtqaD0*J`M;9-u}6Fl@ke%&msW+3mK-D|Tg>VV=>xZ`|B0CbWoA6%Z_}{X zxdN)GOSV|RxriwV<#c3~*ZqDkf*GTh2#-jD<6n32D>Kfh3OUL`@TlDtN?uDalfQUx ziuP%V!JHx?^6+2Tw|es#AD2~?CTX(~N$P&S@?E;)qy znYn6&sOh^Ra~-q(pq5;k-gt8D2XV_rY@=bAy@8+3No2|LB69F87R>gl`GaVN zb=*hoP0I->w??4y75;3c>Szq}axhaF(5E`-@Wa2pDZ#>ceAEh<4YD}o3nBs8*bnu(dQ&xd31S24wRLpkuD+UQ*D zj`jkBS5epXI3TF9ek;a&B$!5=$Jc|z%j`F2g22Jj_$`&=+-WFr66_FZ;U-gVtZ4y^ zL3HI(kyzWP(LMYQ=OWFboAxsl&%B7oMI0WCW?U&uD!h3vEnD-ugYcpt8+QF~L zv`$~LoMdvcvGb9YEdvpGNMrqu=IsQxn#R87=XvRc{Ezlc@C)9{Ovat+N4g}F*~B6L zNj(3F&5G*%@VZKiF||W~Ps)lpoJ4i?nDhhtqcMLHt%2_!?#uD)(Nz%XhZXrp=x(dJ z4fy8u4qx>#8W#|>i^c6881x0EQFCy;4_38Muc$5E8@m7DMO-aiNqCd$+W6%L_Phn_ zgG=$eguA07af-uks`FLwJ@zY!9P^#69O_;JFR`D%62uo);mCuC<@p zlr~aGsCJ%Njg`Ce@FqHg=nQJH1n7&wb3f_}CLtT_f9S;6n3%qP8f`+@4~sem0*~z{ zM8<-G-qPaTH3G~ypBkTzB-Qc@HkJ`tY)R_G$+J1JsrSoA=+h7fXWguKG(<2qG#9{+ z@IUCyPR08OcGBD?jqkvP?;YS08>P+?j>yc**W~Rcy-Y)OjecY>-J=JGkiw~KaoxVY zK7@0HHB5bG_0kBZA2{BLo67@4a&JR~ropCtOz_pbcbSz{_88gq&wEv8Lf<;|*(lDW zD{_=+#oF<@h>PM*$^E_#J~_^NVe!er%Tzb$o`nMOs_jISgCXo{TGghA+>iiZ(E-#K)#hJOfFAHv(-qkQG^=N+A?Ydaq^}_VVxQ$HZBywb{;{;@>PCM&w~T?9G>t(7!R`^~~L- zIiD~1zT2)%Le;g4VI1vpE)OylSYZKWfn#{lJ%4#w@a4E3FQv3D(Skcx)ZW3w?$9=0*(Hr^sdz<=6?n~cMs zvI5;@eLjfgEa`ia6OY!h3>V9=43`s|jpb@7Vz~qbP-Huu{5#h-3n~X=n}Q>Ja2hegn6k83@P=X-l9bvzLpax0sYu2h_D;SUR}o(R5f%#f*x1k8cKQaU81~AxP1CEMuj}N0Y|Axy@QL_m_HIPD;ji zY#CUF2=ZG>wNP%9i~OZ}ZtjxfBGMbvY$O|bLrA%vlsy9o%sWzyaqTx{*Ef*~7sbIO0DdaM1KDKiOT;M%B?uoE z>GE?HEkgC=0BvmfY%XS?#}WDZ2*sJqG%Yp~T&LY2F#!L)FFUvaSI18PtjurXmX>}G zgYYR{ZM~m@*Sj~@vCGd2dn+dGjD7xoftgX)+AAb()8gj@<&qz3c zeQG<~++e!97vFxw__r2gRK6x<77>lh@3yH+EzCV@E&>EbFePmG?&82pM8R&t1?p|T zs?_0u0T;E=$hU8g&mHPsj`JWwQd|8@o0jNNcH~Nq{Me8^X(;pRDlEFA5M~`l_6^;! z8r0E1l7tWs_}9M~1svmbtzPS(b{e7^KXz624HaFzI>j~=dDR~OjzrY$mi27vDW}=h z{Eu5pME8C#&E8VTiN&XC^03u5snZim9;DnFqn8%C+sRh=bi9>C@*ua@%0^(chd&p4 zuvqPURct;K6r{+eJV-d56-+y5=!vFt6|}5e{4`X)G8$*cm2XIy4UBms@ASzUF~46c zL@ng|rmUDpQt*BQj%??GDBn{y6#j_AaGwn&>VuXP+-FRa_3T>T>=Ew)*27ywPHap8 zC=EAtjiokg(_eN3M@ghnkDH6M-eGd9{?P2r6$poI1>OT2$4Vfc25oj4lvW_7hK5^| zXqgYS7cnOS^H3<(f?*4T3qHb8Xqw`cTo+zIj}4Ek-8(767w|qrBDz4}J;zd9!SN3k zl6oG&WOsDUpDt{1Cgcd0KXROwoGy56 zV0K=Au}z{nm11scV;NY7H1i${2+D8hB$7dovehaoAdm# z{|#IhS`JRC6`*j%Af*2e=1A+WlCoq2^33~H4O#4!d3K7%idp&ge>6$`D@XO+zasxU zY?f13YJNNS9eF@0Lnfus-x)gnSfk7t@mlMXJeA0(1H7BALcx2(nZ=K?+b(Iy%Z#^L z|2*qLX3EuG^j@zdujf{sq7TlT03nG;e|0@HK>tl^{^x^sdzR{gCKK$-62mY3`S*1L zAsBLRtGulWZ2mxipbWDnSS+@-5j4YEJ2e=7_dOPWn97$k64Qo7@PW&MW{3A}5HAuT z!#oTP5Th&bd6zVWbb5YgXJ?!M*cF`{u8+W;2!scczj-5p`kRo5$n#+Xyab%yeRO3m z`fsjJWgw-ibn5*FAhsh|E%e;@;5@*on1Qyx&z=X-)+V;|Bn~rsH(U?EZ|V?QUy4(c3mJ31M~dbc zgv^lyJY9+^PE&3zXHRx_bjx((Yu<2^2kfI}`?qNG?psKVpmPRRFk60)^KsfY)OfE0q=VVeS9rV~f z)n+20Gff^pa}+RJ{6`&_7oXb}hUv?h71cSyl?L6>?UH{E0btMvKUIEW?f^cyaNQkE zxl8MRPvs8=-Qt9wJN0NQ|5&@$KNJS$QcKAK(-v_=)F?m+0>7DGXUy2IeW&6q8%7|X z(y(SG{&kafi2Tfnyd*$=65hQF>0IDY|HJX2z{Jk4KaD- z%gs#>9C8LC|qeVFO$ z6^B}~|8x}1(k~^KKDVHYZabU3vbrGlxsGta{G?ekvPeBYz-Zq_HM*sfqjeT`YaB7_ z`LBTe??cE`yxf^Q^acPwA{t2K8EsH{g1_7%Om`6>RtL*!F$^-A;6Jx;1HpFR`mjuG zz+A2|a%CU|^VP-mysLNv^sf3~aea~dEN`>9WD?7%-FIHEB^1UnOHg%UP2!kHAu{~n z#&jz#A|WAxlP|{pacevbqDQN&9$cTVF`O!q1n&2!D88Ean-_QBs&SZm4-Q~4aHUaE zJf?!_(E`+=YhdZZG1PG_x<{&oD|X#@g$gDK-Jm0uKe>W{3q;x__}0E%ymJ!EPwVy7t<;7o6BuwIh9-0Osy@t0rZ zM^-D4@BPEYUsb8-_h8jVEu-Fy&OS4r5r{AvH*UWNUP)Zl1aD-v|G!A!?WIGTn6h~c z!51Qc`hR%z={|By$@auwcPM}d;H?LhDX0BdQaj&=i6oQ=^um~!Z`nB4yY^og-eRrP zUDTUk@}aBYJbITk)K1&piPK?GIa2ASBmTwq-_73{uXpc`Th{hHj!|5z6-byF8KXSA z(Ni+yesT0z>E`Cr3t3}?U{h0$Gg7(TYcQoH{DGz&`=dA|f*RkOt%vPL2F>8Ix8>qA z%_3zkN4=sG{@@=$jVB(DhZ)-LG!`{^mzQRoZe`9Du6S*F`OlaL`fVOwwwmSQ^9wh( zMSgK;PArtX$q&JGaj$cEuPon3kG_eWb3yO@bltw*RPrA(L*l|_9QQeuqkl}y-Q&k$ zTM4Xc@NMujYWYa+__j#f`Cx6woT=q(vsdYTjyb?l;QlO;6~IAEF9DE0NuJf*$2Hd@ z(DXuoN~~Wj{WB>kY1)12RVFYisLakX<}SmanXq!Z2UbV6Y#Rdu14f~TU~#9O$`=F$ zM4k5)q<3}zz19=f{2qM(wCa-AXG>mf5sNb(b5=l7Pt&8ALnA%WprFN&#Gw80n}Cdr z%-H!Go9`0M+`4n0sfo!TBn)wIaXq;3f<%wcSIv-+!O833&!x;9uScN(E~YYnQQlTn z-2;zK0nd%8E1It$8Y>=aaoc?YfBJarr-K_7RCH>G2IaTo}qqk)?es}mtWZ2{( z*2+t)r#?RfjCtwTP-O-e_EU(;B;Wn=`rpU9v4b(1u9%XPwEs)zAwT%8plB4XA-HFd z)Bf&c8UbFx)1Z`U2vrBJ%go{HPN^<(Z(xETO@A>nU(VjlEWqO8-@WPH+Ix z)QY7)>IJw_)xcmYb_(n;zk!EN%Ekp&JKQh^5Ek{s*h%TP-k`@bXwEMeDN2i+Z_q_a z3kC*Q#eWmlW1N|VR0w{A!VIF$Dfn!LXu(-{VnJ?cUlcAFyK*}(J*bW&Ay7wRsaEE4 zfe?X*fCqZhj3r_v5g|D`nqq7eI@`4{?cN_zAaoix@o*z8LY36Ol9u_lU(=5@mS|M! zzmw}MkGql>)QN4iw1wq27LY{g*P8DUbcw%kbGC2dJCoJ!XOONSl~X0J9ljm5)xAVD zpGix9BSYLTthOoH>4tbc6Y^YxgG2&rKDCC^dvhSXEx-16p6YUwFF`hfIf&|Phs~hH zDABLXWpsIwPkSjjpF^ANkCH>ZshuXQ3G+WV-1AHIV|temWlom`KQ%RVM0fgOc~4JI zjr0E9x?YRQ8t3b`Z{OO+T2|^8FMYCSknxuU0LV4NOkGEZ1kq#yPH)?*CIm1t!d(Dl zKYv!8sumCvLJ)Wi)NIH*HzAcbov^%{zb>yy|jUP4O;Gr z%8#8x$h#=xBpt`Tlu@OT7q7pD;Jz5jS;A|GCn~wIOkS%9zWlPo<&+`s<}3YD@{6p_6MS$-m0jmT1zwd^VT&b1ALxkPRcf))3Lr@F1(%@C%#EK;2+^QRD;q#!z|AvK?Y<0Thsq%QD4%pQoWHS(@6?(E z-jt%1s%U0vIsdTTB(Nv+`*v)h@45y5;nu)mR?6So9s^Z_L(o`31BtimfU`d^} zT3Xs)+K*kHgZcqZ&`ncQ)52w`bGM>U9LsP+EZwAHb$r~Fyi`q}fj#(_dueIyaLVvM zh_qhh5wNZ{*pFTym<~m_$uNs0uaX1ewOX z&HK~*Ykmh?4~bTVlM>bzcc|Hy+whs8x<{v%x0tNb-wx~Jk_KOI8%rZc!v}(YSii7G z4rqqX?eGID;`dQG&oq?=GOu%w1vZX(%|S=izK%S@*8MrO*Lk12T&CPK;qKrpQ(>ujIP*>4sKhiQ_wD|)%J^OdXz z7!+^N&Q+K)gl4qOy*9=jg-XJAE_oUCfUh9%X~*hg?gWS{=Ng4$kqSe9*DW29TDU_$ zf)*<>nW+%6-RASvsqbR4o`H>KLGp_LxOys51qNN~0gF#6BSKgv@uYcYPBnAwawYLE zfz^C-js5uyN>QWnTLNe=hD?XS9=6C?x_{)r&GyAW8Gdr=Zu&h+NaQK!qV-eMH+=lI z;{|)VMYnG^IbPN(?R&G+Q2#VS%p;7O&}sJb&9j(;HdTh`#*!Imt{j0S!C3Lzy>4?Tct8uGM(LSqs1Zn_gNs3o)ZM#QVJ7_V zhJC=#vnI>f_Iv71=jTfxZ2ySL;9nevYUT|dX@sjoop@8pkJA_zT7OQWw@=IcNODhx zk*R4Npkt&!B-(c3`dKuvxky4N#gN60b(jZm>?uPLNUDMhCxA}&H5-f9VVQ&^T;Ui9 z+yHUqorYmV6|+@iD;==UnJ!B&OOc|Z+mE>hkV39+uwaO z!P|VbK-EQrWp85+_HQEb&Ti@Q2oNk2o?L-w@*%KiIC>oLvm}JAx&SBFdWmm0t09_u zWPaob@4iB@^>3EPrKB7n%WmcW+4Rtw(R1s{tD zBIem_r0vq=kfJ{2<5OFnZV7|fYm@t`w2s}6laxW{!E-fv2 zktgtUQs`_>g252h~NLp|VCmY%EZ z4|lpZe|fL+Ji4uQ1^bny5)rKiddhdebsT5Lu>N+R#>g1JVg2NuR6hUC%jw>=tXB!X z4K|@OTAtMlW&oom>|HtniiiliF9bGn;u(K%f>m?%8*o-=fp4>MX7g?c0{E~lh^lQu<6kf49 z;qXrW8~qu#-;G;dIki}RCHaQ2D=h1pF|C5X!@kLTs8*D%N5$aZ_oRoQ#{2zN^h+v0 zevS*{pPvzGAVFF&n&$R0j0_h8(%iKmn(@ikSlC;x%~ccM!eoZ#`ug=6glx#Y^Z}Of zbi@)yMMYJ|K5ifVCc}B>WY9D<{X&`i-|fecl_a#^Xh4D>IM0Ub&bfzj4!dkuKcy&r z&$`K@5^w^FwH!cN1!3uf{L2fd%DN!)jFG%&9W=NwWm+tg?vgCmuyU8^A0{@F+w`a= zSrV39`T6k7Z-?G=pHU-<;`NmI5 za~^k^r*-Gsh1yijW8HE3m+ekm${3#0`Rz*@wAnGWj252dFwj>@oG))Wb!x&XA#C(W zRnp`N_=~XhVF5p=HFI1Dg@hTx;gPC{yIpKl#lt2#zpJLOIs<7jhl^B(2ez{Fy2|1E zQ&J7qwzf4(n*cp5c|I>FV9d(Rje^G(0w09jpFJ!JrmDVP8%6<*d;pde!Xj|KI~14; zXM#e#f>yh0Hj@A+D64EDGam*)E<>)Rds5%?QBi2dAHm0`IH|`ljbTD3D{eRRa);_% zN!mPbCsi!VJoZ$)@Xvv>0#dzFw0L-Eqj&a;thcA?BW`rqPY0L!%Z-j*5G>5+OI^Jo z!Z}zuu;JPD_Iqd$XpUDvE~vxIT$81T4rw-saUUklA>#4?9V>O@+A`){t{OByo_%gP zHL?rErGk9}>1L2AJ9fr`!q(Q)Q+|qv{&qZ~AR=5pxCmc-NjjKUG%{0JcTwe%mZ#r6 z32ON}rMuo|Ka!J;webFwgLd-82bNJmGP2{dN+~<-xYnlh0*IE2rM4DzSpw6NnD;4G zDqPEBs_Ex{d$rT_AgUIInud68tFRT?O6KK#AZqW2bSmZMcHO%-*7B$U)-&M5Z@$K@ zBZ)-diFO(pF-!$}CED|1PZ}h#g z*EpJ4x^f$JUZh?yGHH^_S-Q24ck<|Zp@tAsH*r|_wM~~=N*c?XFx&BFX1YwU(7JaIMgHOPgYA^kC0@c-~2c~*3bP@ zaQ#s^?|0pfsnDcZe!b;X?s1_zzSJ|d`HMc0U8MIf1TKA9)b|rJxN?mwC0oY%b;eU{ z{@m97Ww)UKL-c63sZVW)kK{^)v*x(*p6)p}R__qP$AtlW$lM>&#OHEWDcjN3`0Ij* z%EsxHIRK8Y0C6n@5+Ak-v5>y!w}X_c$9A9&V9yv-=ZrqQ9wW%(hQdTI%!6QCv;ku}nKTq&IcUOnA|D3-fkc?7P_AXcLq$Cw z@E(+)w5{QkPPJbPMQd*KK@PL=vQ^bT0N*=dRsI0#<_X{wMsdDqkLF$Rvj2X>(2$L|DH=%Th`&zpjd=2uIDj(K@#(ghaL zH&70{sLrqG&g0(mf? z`T6tb3Z)GVc6BGiyBucX-5uWoEBkJ!H|ycsBauXGV8)?dp(s{tKCwr8Id;nc+jS~O=D47h!}2p#f*)@- z_xl)Cg7I&AU{N5#RP^4reKJ*d`9shdX)(DQjqE5$vGmXgV_?oh%;UN{J8wv|6J&fa zD($8jJ)}7Hmvo^*^2hTJyD~2Ygs?AOmPtG|=tNHVmU6Q-iAC^+AzPomk#=)~6loz~ z#vuAilSi{4QRjxdmEl*0^@uilh*Q1!Pu_aeKE}M!m8t>3nu3uhRa`h#NOOJv7!qc6)fEet`VOpM<~5ll?=UncTTfU z*QsU(a(T0~;2cC2qJJ6qlYbRwJ*||8XvPQMSzCK429|bbdFE*UU|%WYa#dc!INrB* z2ls~2RPVh?+(m_y*_hnu8>wEpMsZCJ<%Io=1hK^EaM9gkl8)E$TWlYmoD5g6Vp6>t zF{k(2f3^wqWD=Gx7BLxIh`z~M@a6XW^uxN`nBuh1^Y-rIp;2V?vi!9Am&purYMXQk zk7#oQiI3>;#<&^3O4b+bp|Rv@G0ToBnx zKY7AnC!Od(Hug#o3~lBdBpNl}B#D;(5tu*X_u`%U`wff!vY!baKfH9mGLNWO8Qw*2 zF{m=A>eDw`!xg64sQK?UFhulTX7yuKz8rGnFDFpSX?OGoj+7K~Kk`9MjQ80yism)? z@i_*^Op1+nrKj@vQ=a3;A~G2TxSb8GXB_MVz10UL-ecATcnbCZ0STL8m9D)pyg1~; zdh)2OQHWQHV`%B=Pv`u$CXZb^fIAZPBVOcyRkm3X=?Uwy@HA((#u`0h{KSz;aft}y zh^v&Vl;v6j@s^Ir2Lti)MvE1`|E_G-^j!9SZPuleGOB81^cF`v-DTsiVKoPH#dPDp z8oLi-^)FI-BOh$UQn1t(K7x#kkhg;O{%KNV()fYN>Z~*U%rWS)16Uy=0f&E=1BsUJ zi`A6%EWU}+#m_fy_TG9x+zQ}osU{hFS@wIqyJZwFvS3liUqo_{6m$+3SWdsBryg9n zyT<@Z*MoV**R%hp;G+`lT{psw-@yA&cMz;YiQU*wYzgDEO!IGJMEz`7`yBIruH7C=kgkS zx@x{66>EX+u_w0I$nb+4o19Ayex33ILh}~?_`U5hr{M>&^tmI{B8(yCpGiReFN#J@ zR5uTxNe8i~Kx&ir8q;l%v8?K9op%Ei{9 z+~%7inj5us`THH6|Mv8W{DCl0H^EJ5|8MHyJ78Zc;?6uxwV)Q9@yCz-zuniqoUR*9 zp(IgMZV~?ay?bJ+WcR(d%#>S{@Ory{=6d^-?iwi8E}W(=oZxe^ElIt^5VmW&gP~RH zzr)8TGT%m>Vw}K>ov$3$w39tqt}@`P8w@JyYiex|8=h`VZao_Oy2V|b4+>UEtVRL5m+#1J)4%(Kc++7qJ8g?%{pl*cl4O_{LpFQ{1?AOHbK{M6gkO7U(&|y^7d|0VtIOu zTD6FxGfYHih}PFIKH9A$u3Pa7r9(Ez3VOS+7>%k&4M)gunvr9fqQvTp6MMrbl*I16 z!l5l}6zMGfo{KCk6P!yE(BcVAQ%`0;xzgZOg>1r9A JE5g|Q`F{?ib}#?{ literal 0 HcmV?d00001 diff --git a/files/gophernotes.jpg b/files/gophernotes.jpg deleted file mode 100644 index a14172b5fc74c8aceeb560925691682decd72844..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 380012 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

~1reQZA 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%0DG>thd z=bCfl(lm@Y;BOWz9uZE0EPPr76Fa{YW#!a_DJZ4a#P&HD*j?Lq#Idz4tv0ZP$LK!B zL-*f1N=HGt0_`1ye^Xs44k(tHsAr@y#g*Rb{Psni6#H6nSNngQSvTL>3xqgYOUyy0 zg9yft;RQ;2b@6TEtOq%3f~N!K?j#N8?2+Ws7l2N}Z%@%Z2s<(_KM~HPS+7*)Z1nK! z@;+XSBV_Jpq$a_I>S9%kh#`|6P*WG0$Nz%R=MSP=!}0>(JgDbo@UU+lj7E#oBDV^ z@w5uEV$rbmKq6GLBnayG-8`&@+^G98>?`U{bn^x9aV9!AcH7 z;($K|$j|@B1%|h%r;YJ?jh}U}`8cx={_>Wb%6#=0&0CE1rT)Ti^0&lqiZ>K_ym0mA z7$X$x*H&?lP8gTXM40T6_UHCZ|FLpQ8 zxoj*xHS!Ep2tQMM@vLaOvSB$K?YA^<;>{5Y>HD5Y9Li}{D|7fy+n1Cn`!ZlIW6N)f z?4QxjC>xU=tOW}C9dGu_&TTbzt1zoLyG-$hmHwdDW8{O^pAnL5Om%N zA$PSGo?5%eFsFae(Uz8tSUr57Sw# zjLoCHJ?$hj*HMnYyxt9qH)x5A&N^qC)5;tCG5Ek0R9y|Xs$mZs37yz6Hfu^LU5Tq|(aDBf;Vco+p1dt5S0Etr^eX&`D~ zgRpK`$H|ev$axmO^T4@MJ4ZP=xbgs#tTVQ-K=%GvYsub)@xBNNp&`q@A|JdDW`8md zjv~>%BBl6{2l(70PWjK@z2*hPQD^A!=6yj%ui$}CuEk6N>U^bO1Q#+cK66nD4DW1V0_5@56^F*-|7$C)Z0i!!TRnyQE`|@AcEu zk$Q6if89Ur$eYT4^F(fX?;hXnFfqXZcdg?bfZkc4#eB)o$Fmx#;6iqHvvdPcvkRN* zRCRgP)$8%N;}`4VV*lP?gaUpjKb)bF(EN-ZEK3ZSvU6v_j~Tu1(R)~Q6EUeV zLUb5i@+FP$+sQr*H7I9Qv%|%c^sN=4twrsfXGk)Cwv{)rFyU`I z+MWjTJqvG1`P+bj@gx1eDEUcil)8H>@v$9NEuN1o87p3RC~3+uV%#Lgm5|sC1|j$f z?n`}nm6K1htRYD`*S`sueVu2;cPDVCbbYhTmD}Eu9j)wa#;FqqL~*;@)6<6U4La^H zHst&ownuIi+n}5WdGmj_yc}_xk|(b(F~Rp6;umYGBz2M}g<^Wu9i1X>jf&7lgF%bq zv#rjXK&>bC9Yae@(aK$Gy)7?s#iVMA;#9)zi)77UlpI68SDPMTQwk$GI=m(T|Gs+XE*+fqF&C%-;v3N{)^p< z?Sr&4+++K2QT8CYdiR=dK*BFcv6YdXeRqMss89H){paRCvx~==lan2)t^EE!VuJ=M zILa-d|6#-oq@eA*SWM_!gXe2N&AY1mr(uE(k({(k>;y-Z#*c54SHdi1-0=qe8`?(4 znE=gXy0a-TsR-J(GH#e$I0f14B|OWtcqQPfr5KL*z8uaV695X-fHhxr)jTWduD4p} zYg!E4cVv@^8I?DPc84gIcg)D61Kp?Rd%~tef?!1NVKm!Wuh=P2x91tCQ-(FMAhgs(k405NzJmDe}$#vZiKh8~GX%~%+PL}uD{Qi}| z9yt0n;lTE+l^hT2Yb3Pw2N>V*t>PIK{AMO=mOAG^2kzMZtCEC;oaHr9ls`2wq5mtXC&@1WbGltP z6oY`YKt&I2;Nx0U!L$CcGj08r%lQ01-d{Z*D@;Wx)~FyA_;e^mGK#Zm&#+|4Doe|TmdKJ@ z9LjH|<|He3%*f^E)lgvS;AAV9JkqMY@p|XdMf5L9`^G@CsI2wsBlhiE=i&WqZP=?K z1$&A$Su+?CV7lBC0{;%_`W5is(=_XlvE9)KmUjVtxk3Ll^r{8fkgLHoe(kl|=dyOZ zxEgR;(f2C8{4u>{J1MQX%uMWIKVrKC9rd+wC7~W#Za0`uz$11xhZaB}^Owq}YmbAx zbB@F_lW~qIE*F*bYr{q~u?%M4MDRpXDNV^bbD>_2A<7e1lafnDP#G216op~R7e5D_ z1}q-S^T6v1IPDr{+BWIAEak0*lr@cC$fUH-#G23YM6uu!C34mP?S$0)ek+zwt*E=| ztlIC;TXRvNE{EzL%3uM;l7l<3soit_||t4orv#MO)o z8Pytk_wpE~)IQW{yj zoh_7?AHpusxhNn7rjyhh>7z8OnhE4lTOASBs4CxT>W-Ql$IS%0zmXH7h#9;h<&!HO z{@m(mp=7eat98%@Aqsnz6;~8!$n0*r#dG$Zn;lFBZiAXcW6nWhbPV@MxaQp<3I;9`s%R-Ttxy?F*g);O6gF@$V=EPS#qr%9E1(Lh0}~ z$<9V3+l0^gZ0umY-RdRWTN^XK9~(Q)wB_%9eORDWZuv}Z#johJ2mX|cq<1!x#P-_t z=A~_yY~7E8$&J=$_mVtM-$SnvjEt~y?ud(DOm+YN^Vn)!EQ8DG#< zG`VRTx?GUnWwl6oIPVK`2FP6!`LB9Mh~<9px1^9JLZpcG>Etg8>Dm=Zp6eyYPvZdz z{m;)Wx4D08mI$8=$`N=%`LLSLka&}S!Ul?UvVPrT8nsop(LT9^zVg$#XBa{Kc=p_o zigQ4#sNc49b4Wt*6<=yooNB47lTJP6?8i^~5A4p*&|WG+q(X_Ak+OeG(-0m3ujIAK z=*}i+Q&HeFyzf)IfD=MowYf^8v=;TTOKBnEFUsbir;tqJ^&kC?MM`d^WXE`tHguKe zf=94Bjhkzn3u_fd$iA#F8o zSJCAcm5&Jpn+jAf2VBE@wO-_B1?*ORry99`>(s1r-{IK}y}mumQ;S~G5}3?N@Nu!_ z`NNL-Nr-w-6MvcTQ=yiNEfPpBU9&Zlo_3?B^^o+>tguPjSmCD+L$^vdxr_gOU*1SD z0!qJpGdfLj8j#^!degmp#B0zre>9*a1j3$nMH>ZNOE2szpc{*3zRsihIN)brp_1MZ zeqy)UKc*Q;E#jX#sC>^6AYfobRmp7xX4nBYwOkIbQ6J(hG|wCXbq?FJ&F9UX zBD2FhxmK=hHD&!qD*70=R0KaJ9>LWzx?9ZhyLaM_K>U=>Dw+M=keDs;l$bT_-WN1S z_qhh+d7A;FF>H=!_Lfs&6 zxEE$V^sL4{{!M&SDv&wl&IQP{HPNXR=cy!8=dBhJW&!2>*%9n#;WVDt55j`Y_Pal5`nkpI{4oDo7y3 zmHGBBO0FKIk{ZjaQa~GwG)s_95Wp$4mK4p z_M7QT z6|q64f2CVK>*=_^@@p+lHPIq^=k_>9g#99}GtkX_%>?4-5*C(RCdE4G75!x$0pn<^ zy58qmo^xQBmuL9)Yj$;yC{rlN!7Zp16a>YIm;p{xG;S%e}P)%gnMProB;&p_Vl2psid`QgV;ueQw?dr*dW94NTc# zyEr`T0owL-npp;JN@a;VbIlTB-^1aUS+ilb4`19_q;T4{79cnUGXzz#Pb(hwpvd0?jmK_8yzC zRW>3I>}EZ$5m52gCGqdPF^~5rG7oXqu8F_cW`4!PwNLGtFI~jM)km>wrz+DZsI`Bm z(6s6^quhdslWGW(HwPr{BS!->w*CQuiX}XTCNZ8aNXT~|3-ylPHZ58Ptd-2&3}YOo zZ7F>85J@$Ry9e)A!4nLeG5U&2V+0W6;*2a>>|?3ZIOT8njb>+#djf7ce(h2~M>cR3sS^;)%b!3%6K%WCdK;~rwG+23p zM322)(je7BNV_RF=BIp)bg2NcIA%xNAuIi3+jr$t=gW&=~yS%=I4h zJZyHf&PvfHHT6PXZ?WGJtmmrWQ~=;Fw;~N@Hvh3BEB#_sL9smat-bg6FF(WAJUeee z>s?q>mZiQv^X6n->xsN3Pu(D~9BHpE?vVSF0nrUVF+Xb)=M3N)3F_lT48MiC0gB8 zHQZUYbAA4H2%vm)^)^-Dv5}ad%g-f5J3qk&H=pn*+dpgy2}@53xg8qtPIQJXU-2T} z7QUF}Zp{Va6A(Jm)DH7faCD9{wMua=^q7=Ighm&btXC}PPNr%{J z3sU+UM1hl%V2({8vo;mNT~zS5r*~n%K#y>)%iWLH`Wa!6Y(V=Y#sq2z%H5t;w#xm5ZxfZHP<=#0Y6L=~Xh@0Bt?hdZPqbQ@x8v3Ad-@&HTXb$7gDg7=?|`&G zW;34PGx*gtan(Z2(1S?Vab6hW5SuV4ALh^;jH(}Zf7%=pIf(c? zlDr#A{U}Jlg0q?3h;@8m9tux!2koUDyC9w0PMhT0D%}^z8I+N$p=Zp59;rW^xJu|0X zK$`#E5pIzR+*U!Y3wrmCpu$Z7$o2zskX}*sjn@7MrCJ+Jm)eKn(}ty65HcVR?*CaZ z<@sY>C%W4IqwB4sqH4pg@exG?0R=%sO1cE38x*7l>266ShoKu$0VReG>F%zfk(N^F z&LM}cA%?-<(dY4b-|x4+Z!Hdg%vy8Kn)}>wUHjVC-qcjfY=;iL%%QBK`Aox)Dg-ec z*ahu66$=>?S)#bLL*;<`ti`1?ij+NrKYu`%u4Z?|z`WF>VN#P{B#C*fxa0E) z3=2R*Z$W>Wxth1f>(0yY3-GMu4(!OPw};a=-+wt9Nh+#eaW1)h569$fIgQQ zH=br^UxznLX(}HSNx&Us{#2`U3mm%rCeC~`Lr`d9bj<6MtJaxwiVSVjCi`C?yBVd? zHuv}E0}fkY&y%Zewxvbmq@8p9PblVX@rS4aa1(T(3ynot+_#0iTQ|wArIW+;`4-*T zl1rG=>!X%Hn<~w+d0ZJPxvefIp@)y@zXu>G(_5OrZ*&aM_F%J=%=M~!_J>i1b*X#} zgZgI}cD+K`wi^>uNO)yy+TdTGK}?{Y)8sRoSYh+-(@XjXXI09qK=@CZtO=-j_i!v9 zieI9^=&bOIPrmQ}3f%Ythq@QFSeu|(+)u|B8yFCdpi~YvnHopEIb@Z2vYunJ^ zkuokTFvZ*Xoq*WAUm%Z>D^$p9y^tO}(RJ{FV|;UL=6$+}7cPT9=e{PN z&Y=^)R)3!)+TD>J7uy=gZzXd#B7(X;qV3Uk_I}S(l9&-n5;2cLzr(ftp>Lg%N0vHQ z(QbdEBR1bD=3@>W%4AHJW%>{icT6ji`f8MmTyf9p!$lbj57%Wihq$0mSq!0yhUuZxts)NtG`N!0sDk`NqH!h z`QdN34M_TC?*kY!j%WL+-39UFtfk0Wa5%}?oJvnX*!TmK$Vc3Vm`2f3Ag7cxdF$^I zyEym_ee-j>)_1JWqWecF|K99zfEZK*vpTTx3)C4Ev4kNQ}>NH(u(IO{UN-TH1p%{Q^PB-yFYu_0K#S_&bk6q|J-g?LU+lz(QQ* z!!e29{GE3Fk1P8>u{92c=$Gz9Olo^`MbSqD#CioOJ5ST| z$b)@C^O}keHA0ezNj;|fs|FHo=2Rtks%H*XqCJymgzl|uyTptRH>(-z9O=$YuD;EocW%RATt~}`F zkPzIT`x#&S!4Yci`Se-7Ma_6f6a|zcXOBKcq+aqw;r!oK6@oL5;W}?hs_dJbE9E*T z3QIjxJzM|c@pq$1FnCzqP?>5>9mts_(843f6C~S`BCd&hx#e@SxP-><ep)Ur(z zp#1Ls#=iBH;sObwZBc9i6GMx^K z?;c25SksguNfG)qO>|hhAXA*atw_b;dj9+yjf=)F5S=YxLsj{EgJ8joie6O7@{-N( z>YO*lIr8b1kIR9lN&H?Zqm_Ki11J9V$0@DnoOW$xd&=K09$EN!2esz)}Ry7Yp~W!Q(?1-{7eorYi|9l77D;? zX&B!DF!cbpWhirU=%rtVRK?+v$Yjjy`O?W%mMg z8{>Sh#WVq310DeMSpEMWw~VV?FG3RwAdamq%91oH7{6@q_YWNAEYwr!e%j!w%2(i# zHl`JO2%;Ph9D0<0&lJrP3!3`o(hC?N>kr62d0p}2IJ6 z&rVwjyT2=@;Y@dOy%7dXp)~_w3jHRi;pCY7UN3eng!(I9g+VDUXI*dNT=TU zlCvnSrODovsb8>n4j9#d$JBiG3Hw)w%bz=AhXhlJCs6dh7UPaAfnb6x1E3vSSse=S zkA_f+2&)}Us@jWiw?Ou3hjB*7GQRhc9lN7d?t3C9IqSM-GBZDj7e+5L?)`jwr!nx1 z(QxXc0~xEcXWgC#Jt=7d#SgW}oOi_93)XpU1@BwF{p{E^%f(U`fvfiUy8;Cb!{+~E zbc+6r&hG_Q@t?KZF(x=6*Kr0OlipUJRIqwQ;Mcl(CdQwVSb8P-3J~%bSBbnz{D+fX zE;#UCmZ(FNH#ZZP@Tg_KSnDBWs)_BTxl;Ik9;W`y^{XNPNmKa`Mr%P0)4glsOu`7d z@zllm-qThscVRoe_nkYwb&vMibnp>iP_rk9hSJZ~&}i)Jb$#A4$K7eh zftyWQ^-%J4emK8zUNh;8;>p?l7gPas&sYx&&bgBj34%XL-i*227^ygj(IO~s&)_3b z!9uw0_JGmlzd%)ME6jVkfRr)w7|+Umeww15h}R%5GS$Y|>;^#jxKLYuMZU)rOgUp9 zKJLmkA=_5CQ{F(fpf2bV@xX78#?9}=ABrRT9`oRGS*VQBFOc&jQ$#4}TyA^)72rLt zYten~p{4%eytT+D@%LQ&J&6FB$T08UlW6c4sJ`mQp-o&++n;0f>hCcMC98{gF~97+ zQ|xj&8vzL>p<=pZ;~!)1Dwm-VINYNrclsKcvQLOwG~FcdkN6PbAS}sBD~%N7y!-x6 zeNH!yM;q212{EUTaFIGsDLBtO)m6uXYB;ifM7U*4D0Yq^Ffy}WL=~*y&n~1VNK3WX z9IaZ4j%$ig62KLyL3Vy)+icS;jI)+aHU4zuODAou?sH>fmd(T=H9we~Yp?BkAmLMb zgZVGet#s9auf$l@=Csx z(NubeKatwNTs5(vEZX(0+;5yVUy?{}Txe-(W(v5^>5l|#8TUiTS5>1R%z_g)@F;QT zweJ2sv1>7_E*OXG0EiTFAp}z}J8Z$t1&Ttu|PB!Pvn?OyW!7#hjV}@=n_9t@!q>d%&yz~2l#R2`UqJPAQ zY}54%+jFJth#UBEUv*g+_#3TdJV0e3#Xk`8D#xh}5vw(hy-hNEfNr$O=F3D4<}NR_ zk}Mc~Q`6Wb)hLvYUp_GUq=txi=5YZnyRDRW8!aI0)WGcCv=L0A(6ACc&ZZ^6TbYqt zWY}*!9c;lkNut5wz&g))7n`nKu#T1nUw&iRlBWENyC2M1#=6vRVw{|He0uyY4vhGe zOGJaDDzXMiD#Ywjzg7F4BfRwPv+<3p$=h3B!hYBR$$T*~L|zrG+R>c&l2G-i(^X(3 zBkoHib%y3QN<~QBB98}ZG3mZ9+<`o3UViOzv`#)}G8C$b2%dWRrJys~-9g@!Fny{; z!5H$}cKz?B!~GYylmYe^fTA4yA6HcT8r6HXc9-B?2AG%e?Nbvkh4p^WIW9Q5oc2+c z@67Y7VS`@gMJE@NZ%I9`Vaux0C*WdsR#v<_ZZ|j86jWJn-K+;D_kGzNr=Sg_X;|Zj zw&_Awv($x`T>hi5S5^e_8zY`#@wtrdob<>n8SbHlP7Nr@uPN{cC>iLT1^UenU=x^2~D(u|X1r}9sGkZwhSR%-tnGGYCb|cR4t@RvT zOFxyHr3i1AP>de5??Ii-POzL*vKcYosni90_YFar9WFUc-@XvpgnSz3p@ApSBi=gx zbw4bHu~CaKMp;VcU9d_h4Z=RB;NrU=zD3OJpv_{ebhqdkzDnOL#;0H1{{+{%E&NM3 z*DuhQPlVTfc_t%mcU7vTfkPnd2m2OIa0ayOoLg zIMWKPAX+QRCgGw$PH(Rn&*~9-^GW(|kdm%=t)HH8Cz0iNU`=1)z4ZTPhJ^q2YL6E~ z%<2472&ync{k`n<*GLdrt%+ppZUMDyR->!#NqYaC$g=i&j*bVjd6Nx`e-V_m+kkaD ze)=^hC&PKQrT(?C^((|dn1;4O6M1W5<&v6~NZEKqBt!GpIMbSKE!lI6}%5mSo zWg-qr8tIM=yIum7dY@bx#sEfj7ca#$+8keArM68DrqlQ8SONN+q!^(A9--Y$5_br~ zNJ1o{$Cv&@e@C-15S#63O|BTw5ipO-ZL|`1b5iC+B<+3gU4Re!045%5Q}y`Ow$1wY zPFF9w^*gLOGF);Lxq`#S9~=A6avxc}a=(8}{Mdfo$POu8DiT>YCl$2D_?A{dJmWI> zcivBVAHW*nxY!Cn+AdcoblT;6&|5|iK#fnS5CKPsSW?pMTF)LJAgSX<)DU^68w^+9 zoZ1?lwtEC_El7#UVk=9%eRveDFDUapbqhH+8+gbv3mtN`r6I@~h4$auCvIa85BUM8 zs2$7Py??#UY7(tk*|$G8BzZ{4o0BSX(W)^B*=nh^D>x?0L+=(%v_wQAV*NRFFWBo> zv%GXNwPPcTUGc#!+^c2lOP9YuH+OwJ`c@r<3oSee=p0yqXdvqs2o$F4a1&m4zP*10 z+koWso49sGcAls(U%>0DtLQ@ zQJmRRUfPngm21RT7Lg$?p!OL}`dD!SGb||wc-*gG`P^TL2>9sNYWanxQY)AD+KZ|D zT9!v~4iaC;dR$9X7ts>|-t{HO(LAdD6hAxhcv8i;i(5b>&Ni07{+oQu`y`2}m3XF- zMwCgx_kn7yl<7-v6fjX%Hb&%e<39s$k2 zK(fNpiq@*?#}lTXqPpU0bz_K^?%CD#M+?n--S4q6#l0gf%v3RQU+`9LBl{-!`A!AM zfCfFPe~p(8Q-!plDUy4;^QH!$r1t&b?eKa2(+SzC4!yTmm2g3&NSRh>wSjcw@xHyv zF~%Gmz)H-+8>tCG2G(*xokh5;Wk$8Q4VJzZsDS9hvq`MsX@DZJmc z=M)JJ4b~p9cst93e+ShVe<+n=$J(A@-If!KTZ`>QC7au=OL5Xf_wut0PH!e^sM!OS zZZn{8ejjIhO?ZEb_ZB4JTa4P#EIGGMYlzv@k+WyC9(>9DjZ8SL>gu=8jGvB%C&G?P zN(m&=>#S`E?>&YJL?o>YmZ>v-<1FM|m4^a`z0Q~73PV-u`D)uG?CRjsTB(Qp2|N>e zd1Fx$%@h&p8$$w7cp^sjHm2dBu;cukLfV=_5%pM``Uxp07NcpdT!D5G@$rLUvW9P; z(z*obc{as$JWH62pw#Wkv8jkLK!fj(3i9Te^>wR%45=ol){DOX{_o1gFtbW-XOGkIKw_X=-wK1n(jRi>)?hmEK8 z;(Pb2l%@wy0`tFulaj_GzE~h)78_9hLH?Avq{%lUkDbJiYjAfnJT+?>C7=LT8kiP+ zM!n2G7TWo3I_@0xylc@pYvzEdkO&59o3nTlV7+JyhLiiBMaNy-rTV`30dEJf<&-eb z+m_5=&gVNbc-8&=Qj*4Y+2U)` zs_ht`2olB2%o;Iz3zE$n>2QyI`9Nu6F)gwN)+L*M8J2d54*nXIt|5r5#;A{9=Va6C+;yD3@81mocT&*e_MnlQ+$JtJunL!C_`KC^n zT7*SCPFa79#31sfNErzwv)iL!M${(x$B(%#ecyAResh`~649@zyHvnYR2+VCmjDkj zpL{BVhmX|s_|X?T{~{>elz?X@eq{$KuK*_YQm6_x?Ri}$t`Krc7mR1INwjFn*&E2| z`r=NWUF4FwbcyV%@bF9dJM{}(NSy!V;a!WJR9%bba)|x2d&BZwkQ+Xk&wab{9e>(N zNjDRmQBx5f%EjbhP z6T8*eZy3PSB4$Uf^#(T2h1opVcr6%mZx=E zIR~ySN+o*FmzA}6?TNCYd_y1Te_=Fc=m|3MNcRlX@D$H#c_TMeRyWwGo+3vu&!E=c2hp-)mseO^3;!b znAEQxxxMw=a4Q6awbK_u;Yr9gDKefzouw{l&h-*e31RMqHzgI`^10{Nx-NO7@c!(g zF-+sggz$OnsJeM=VzHVr3~lY2K;cP5!%;ud5m|E|by9F25{$gS(&uSWd)a8MV(at? zo#NdS`Yo>@jY7N_lpGYvJ-Dqo6R7-|O8OPp%Pe1pn<5^(g%Tx zE&6aHapXsl;qf6YU5T6eIHCFnJlfy^^(?u<0$wIQMq!Cu;VL;V-&MX*Zra63xHbJG z)o2rCzqR#TudXX8-tiEXQr&@U;sLqybS)6MOgv4XHYmQSK%EXF_$~sxv-em5q7{+3 zAopwT-`45eI*|`0;CbJD(m^)#11;YwYU?ARQPFLO$maR$8B(lrafvRp0M6@0`>hpT z|GC!JSL0m&oqrDYnD9Z0>scwe4wX(jAW&-r3ao*Fm=U$Mt8MbTXN8Lc>*lfL_4sR7 zMg{*yE{XlfO8B^$gME`PQ>JZt(1QPM;b$6xj-pxvcn)7rI=@I2=XJu+p*|iNen%tC zI9J%PVZeP`njv&g_`PqhX|1RmZ?>EEa7iE4=+e(!j-0ICPB+80ch(0hNYuofPa?|1 zH^TC4YWLi+)VNm#5_FC-Arw#Oge|Jay%=;^XNzqxZ;}3~Wp2wT?!Om2DM+pG0tvU!s$T zm$F;;FXCwTSIv23+qQfrY7M$DJUIOZk~ogJ3V7ha5X~F6JOGdDcCYLho~~Zl(e?@0 zX^y$46$0c-clks(*kIG!bjesxpOm`}%|LWo+wyn!C{PCQP9GpK0Ddc8;2y^;;;UNA z5ZZ4FG3|>IPgpb;?pIJ(BsXr|J&($YW7Pp2ic>A#rfq9F5#^e+f<=+BTPFD}iL8(Q zkkNkZkU1jX`o{9*mOGbrk{YE;Su!KjocsR#^hzgN3u-#LeiN5A6UoSbwjGNJIhwv+M{Nr4M%0B|2#ub>UZfDCKD)z`Lq=IjE3wrLBk!sJ!wkEdj z#TTyLKk7sYBR*n#aHp&;D)+MMO#14(q)V;o1`;fN=$Jjcd4_7bkm647YXgT-95)Ei z;UsMUO{;}8NwlUw^$hY0B+?^=LAoDZB>q^0>g69(?l{4+?toX`mNTw^|} zmPn$jWUkp)qKg+HI%SO#W6o>5=7{~57l&!!@{s_dN{C%!3PavCJ3-FbOPvxy}+Y^u&Mb$1l3n>kWGY+0?t64QghJx>b#M%wIGAoik4&Pg;XhpJoOaY zb0*AZ?f)6Sf1|2c$oz%(kxkvbM#(2Y?)keZ9gS-%c0Z8if*7~Qu`u;4R0~iTRVv{r zzBs#X?Ssr#97$Z%;=d{ITL|im#|&vsUm5so{VpV>3q06wdvxaf3$)MU&lMbY(0AI) zLb9PQFC^Rh1npubjV-f3-VN|& zO{|5^TV%57N8HLGw!=P*A|@fTG00Z;pefH?SYY4lWo1_w$yt56pf0;Y!gDIEfYasS z29Q|OH+SaB)TdQ~4enFx?}koTjcy;O15V#BthU%HlfBJjQ6H+o;H^Hsap7+s2>r}7WIgifBf0q$s ze}NFo2;SZ?zNQ!&k8Ice>`9gaaB$T~6yxhz*NNl<6?a|&Q^x5po)x%cM%xu6IeAyg zA6Z`#EVHuB-4GhIn*HvX+&a6%BJ8zbkE}bM{ZuC~p0xG)yqB*anTE9cFtW`n^{UlM zSk@p|URbu~r-0giL?<*TX86`gs{R9SU1KEelc?kc`W7yJfe})dllUPz;uNLw0&B%x zim06J&6r#-Psz~XvBp&U1#$K}2Na?$<*y)}EU2oZB*>mi1Z=AB7szSa|M-=PYXA4W zk%hOcVi0%M=#$xMw-3IEPrWQa*T&J=>bT*bIs@6he;n$ePlC5yRjONWPowv4M7Zvd zdYeVT^9cVLa}l5(FL{dQ?OCn~PyPbmbrnec1zNi-{9nz1{WyQ-Y{)OrRrQKZb1-6k`L*pr|UENs^V22A7_0+kHr9eFJt>_$K3tIDcZ3~cf)U*c_T*Xt47>!PC%`d z&hO4^%QKUQ&(G+jSqTX4H)&Ef=bCiC(XhX!m@;-rDPSTo#YJbcMwdbPDGeP z2&p0N-o=(R4$H&t%F9z?j|Kn@PU)O?I3VEt5Rx1$J`EGv#2Z!P706k>a#aCwiEi?2w%K6pfJYUn| zgEl?GZS;Nn>#QXR%x?_+0vTHA4>XA@f>9P5wrgHGmbPeHi)T2{PLryP0q> zcIkLp>RRm0;=(4qZ_u%R-fTp~@{(YR7Mb^P*rB%f+*bD5)TNKvAo8e~GGSOKLV9x> zckG?37VoQq6wNePnOP)We-yNVwJK!e8t9<#XVnG@vHOhdN4LeLJ}qz43rXP~amMM4 zA8e@rO`d0Gd#R8U??eDt_&_Nu1Y2odl$_EF7ley^c^M|=RaBWuzw|a;fR^jZDp%8c z;Iyar7bp%gxh20`mYe)w`Ly4qSHeU~!VcOC&}!UFMKN#$CG^n>cR#(Umwl{lgz-$9 zqQ+vhOkg9LgKQ}oxn&?#WXjrTVUg5ySFPFUk_-MHFeC{K$w4w^%#7tzXTp&4`4<-+W)#U!V6KVmmS@4NB5JBJOA#KkaLbt;ag3$9=7@HS^!!#W{-eH%TXXi+oZTq9q(hvZ%n(WqB)fY6ju@ z^%Tz_;k0=}aejGHvGghlnzCvbSj^Ka)r|dgWLjN9a55A*+8k=oCFb$3C(+~;%~r3$ z%5{3h)SD{^-$=5=vpFxorilIZMP)n=K{hWS-zBOVTOQ`uc0YBpWF6!alC8)*u8am8 zg#pKzKkh|r#;YmdnF?J{SA?hlO{FQUea-p#LUB3S5<)5ZL(V5LjO zw>ipp7#smR^jqmz3ClvOr)1+8*h`>7YR4%gL7?3OA*;);TJbn-tFn0kj|kjd1|gWA z+B7FPQ*5^dBeN8Ju$Ym7FI-afp}K4dBlATwC9Vd<>b2Gy z7a>8ThF*$<5*HK!qYGc4?h+I8W?U+mZnE=RULO=&8d~kM#c=AFIMgN51CGkQ!&dF= zoS%bG#H{xnZlL<`l&&7fEDQZ!9wRh@Kp#2BFVHKiKvBrtSRWumkRFz?c%2ipeAJv; zc;!F2?(fgmmT2i!1gxU}HjIYDn!BZ*a@@4^9l2`jHx5@+=6v5AAti(*GNAn5HQo}i zO3Z(hDdbsk&xtTfYHvYvm_^&+yfYxzX1pXiil3c!UDHCcn#`P<^MAEDh#4O3JN6DL zy6fb{kUko1@k-2F!4FA^RrX-`COLNTS@(Fc1EU0qATh}CB6i#VUMOW+AXdyNx6+(U zJsf)Q!JoFB6X^1ha0(}~~ev6~lObQaN55MIbl{St@Rm9)U9#p+U`nwxFeO*-ZEZcr_I~dY(W(92gmCCgJb#99{UDH(tCS_+oSy^ zAKwM!>?Tqyt^Cb1)B#8t>&N!7WLuocAWw_t|LUs#?(cNEKg4s$yeCn8;Yveu;FJAf zyP@Z0{sY^zu$|^0*b+ft`W&gbU!=euU-vH%*wRMPtzo{#%LO*yISH}2%BM_~(`AJ= zN5n~g)+$R7zxm!!d3T;Pjv4N_;(>@^Ds6ChgTpm**Sde}<~O&z>lZMUCdo<>W|}!A zgOv`7+j9uM;aOF<9y*Kz4w@dRaV_EiC45k}!@0FlA8z-_6%x=7|PT4)O z)(g??A_J#L1MNk#@R5)*_Y;>{Kb{!&#o9IM5cwSz62qRreE$Ul_Q0_m{r-BW4|_&^1NCj35vH_17v5-;+nsSU9$hgs9;U3=pyXbfC43fi1G?I z`#)nz88`|%>3NwH9#=Fo8^tNp4LkJ<&aZGJ6KHd44qZ$d-Gr7Fuq|eWiQ5vEmoKVN zUA9DaKTdv~F1@9>DR772#t42{(pR7J31?f^Sbx0tf$n9b{0{g~3< zzG%12??&Bg{UU=2we3ys3P&lD5;uU%!JAx zUFUzYMpgb6c%VPMR0p_Lh3mB*;tt8&Z3*M`=0%PgIiXAR3iE!8xXe`22Z#bcN-LL- zQI|J#C9kQNiTx1Uk_l>ueVtEOvTiGUfmnBU^ah8PLsd1u$jGjF0!Rzvr zNgfOb>vSA(xzy&*vB((_2lw6Ax8@zNKr5nOv>)dBLSmxWl^St3;)<&E19sIL!ed3T z?t4R{ri^NNV|hlwZ~~>_%qO$m&?d?+YWfR};Z_w$B5!P=4r^{T-|NTW@bK9)l(~2* z9{3jJ=Pzyyg)CeA&l7{N$DyuIY41E#W21e-vM0Q}eL0Vpw2)3X;~mm+MQ^^e+e=?D zBDxy3mla4|FkKeE5VIHd@gmw+E|x(c6-@4=k?$oF*)iie?h@ivT9>P9n5_4ts88D& zT_6(yL1ocEetd9&HSAE|fED@ua}}K5Cf)b*ain>@8stMlvPbE?X1aWpI`!6r;`uqT zq)D*~l%OeQ!JY1UU)T1<1_@$n!Eom6l}p5aE%l>;5l)k6GiwZ8QL#nA)!N|1;;i))~3Yq8m=dvwFI3`BN_{R&~8TYjaae(dLvvl zktYvq!U}%gqx#C8GX3V0Qomg>rPDjq_MMuCyF2hEb)EJm$`4;@ZD*`bi9ed;kf~+x zTg>`ZH{bP&U@>VX`~@QH;Z2{H^5>KKr#xUMyzl3?b>!8mXy@7j3RvBmWC}Pkm00yj zFQ2Y*ry>~~paT#-TkiW3%=e1Yw*I!c1Eiy7e*d8(DD$4w@4c0>pv9HYI_9yIMghwM zY5}SI;%~T|qNZkXx>T3tAI11Mcp7xdRj{iREtqQ6Q%I)q#0g+nj2`7Y)=4 zh`K)uws03xn-?BE6(d_we)PuO%ewB&aq|hYd#Kxv#pVFE{n}1V^b#t>EIiTXaC}s$ zgi$k_J=0I{mTCp1HL+k|geyZAizBP(-fvEPoA!(~f*1BQOg zSvw2V|D?*OmdP#J=yF3W{h`U`I4}6KH~IwQj90zc$L2cTxnlk%p)xs5nA%=vVJF;8HqtOhx?c@wYi6BK}RZx_Gct0I#~??D#Q(iY|6d@itygskKs2 zZ1UWbci20!dx#p1QBwTbSeB4m(KjJ<5u`&h57iC853`!6UfhsHH1y+d8}T*Q%}Vc5 z$}n?i!1XNL#OqNd$=Hqs@R7^)h8M4`mxtpmPOeyMoK1I6(%QqWuFH*zhsj5mrleDv z7Iz!E>m5eB7TxJoxmx+OH&R*IjABIcfFRuQXW46+UR7Il_zj5aAcud1rqhXWZDU-4 zvwMVdJI7D31OOtqeyqyCNAK9H^zw!vt=*x` zT0scnCG)5A!+wI7Ft&^iykkuh-SeNm8bS9?ubZKro`;A+faNNS=Q4xZy$-vz)lxo- zV5U;(xDIobynD%=GMcwI)#5$vk1X_isuf?nAR$}S9O}rXWy>kI<*=N2nmQr!ZqfF` zz(6}AZGV}CQT@kV-jv#RDt8a-c2PocjNm&&h}H`|GF$?I+&F`}b}>;8v)^qEC2z+s z4m1t-HAb^)hUozT=h;3U!1&#TK>iEX&(l&yPM2&~=;bH4m?Aiol_G z;InZ3efHH@5USA&{rDB5-6?9P?(*b7c?R{ktW0@Yxs-1(mD$#kFeH#!1PtDt!prHA zis=f!x zre?&a>MZkn0lT@>3v8_K&Y!Jak6!35N#Hxu+$P-XL|zcf)n&GFp_Md?Bd*rzi)WvW zw30Afx2{i?n-yt91;^{phC?JK$wM+^FD^3eKPBoh!t2-7R|YPC`{r8MdEF=%>9d0}ap z=3J69RRFe1Qc?~YTC&9^QzvqyYEgdC$6>@#%Xf0ePieT-fuo#^Yx0NdE$aijqiX}L zeZVdW0ci|#LjXpc1ugy(k#cvbml|J6ClnB zi}(Xl{>OIT*ss6pyGXNQU;KBh*|kXKan-j#e3>IPGvS^m^Ez_|L?^LZA|d-On_F+- zoKbd}iI?+6Cts`=*IJtEhpL~3a>tH7D!5$YDZWoN^1&gi;meFmumZ=P7Mzr23-?yE z@=}!V##%4yxDII6u4)FamZiXpmid{yqX!8|!RN+UR|2|u^SL2X>71lRmW%i-N?cHB zHFa!)3qYxeu$Dt zD2?uzeFHvYYj})X-!_stuE9pR%=$%Pw^T{arW?ssHh4*CXvXx!q^JTs0%AR-OdN*` zC$1Hw4Oi!tyQiCUhv<*nDimAcBv&?!uo22`xwx}iQ+Wrq!eXG_H~-JK(E1`7Vo<1U z7K3(q>j2OdRZA?b$y!GOz!H8I-y{LRa)6}5y{}*}Dd#*(PLcI|E&T)e!!P;Z!~wqC z`t+MsfDhf|;jW1mM(ZDjV*j&0>RkO;apM3@H0J{QvHkT^E5^g&zFi~jgV|@6=7)$l zjb&{e$-5Wnlo^~erE%<7lW={y;X|8N;pdUQ&_*NdSak5(n0Cv23(Ky*Mq??X0z1)G z%p$9b-iv~=dUdY$mrNb#00c~(vSOl8515D6iuOAFI8ltfPrY5!Z!^83W#p!lkCuwP zAN|PEAyV6cI1P5{P2@ZsR#06~W*FAZI3$aqPej_iml&%Xuw86ZVX{q`L0=9b_NWv%85LFn9=svt;>OXS%hqv#MC zVC9**dbG$fHTfG1Iz{Epxz&vCk5AjDe}I!i1-G1=doM0C9HkMR*y|VZnW_uGjd;}ka^c! z>6CsZ*_3|tC$Dp;&T*MN+DuWs-M=5i-MbjkxRjjE6e(g;!2##r`M`T5WXk zSTbfy!p@3jK?J@^%$+tjl4?^r5}7+?!}1cRpIGIs0<8@*W-FnYN9goU9(91V8)wj35 zA2Rr($$2Jh+yLUbYnmDBfxQQ5qbyWnZEzDZ9+jW}ZX0dHIwoY#hpZ6L{(jx%1=G-i z#jd+^7CVsTDb)VB;Z0!}I!g}KUSM431)9(W@Ymc0UZ z^A@}@kC0byfRC5t5O=o%LQ{qvX1qu ztkINL{3z?m)iI1N8w+w8WVAjehemCf6jPj6cCPj6AcPnQ&`l~IU$aX40S%2p|2zN@ z%U|olj?^xh@2zoTn{kAozUjwo%!dKFG_#h;_ZmZ|>^-OQgXv`Qtrssu3J)J|Inp9? z9)`H1ij8A2l@EJa@hV3wEmcYFyK;*#BLwyN>fm6joP$>0d;6p&M>vP+=ApZfOVrYI zK1d(r(KdPPQw?8Z5u4zb&#>p6a-a$x)-*I*}>GgmJ$+Ce~_`9x4{y4?|-QwA_-kElGVKnX?b7X1^(f;A`lb_?NT1&$`d_J7q zDd~8ZT&eQQ*2nz_wP1c$w4T~ne;XbP#-~6tRlwmEtHwi>T3G+QWN6q{ibcL!u*&*3 z$6p|r4pWihgv6{l!Rzys!^^6FFsoQo3G`uvyJWq=OvH1VxA0<_uKdU0-r*RkvL?bx zz+Ul;{L;rSnZwCh`_|KUb!l2s@!R%7*dfssojD?l&p%Qb@Vh|!0}irT(*x%Q!q)A* zi@CD*k2z>1K`p;P1wDS4v#e`5!OIJ%x@EiDLjIt=bpx4V)I7Mm`%|OB!c(7HlunU9 z#rgXC%UA_OBey*RSOn|RqO9ASf>JSwYuFw9#_ti-o;>C~ct;G4BtEH$->@0j#*9Rp zNIpBM*IcM(sAo>Spi2DqbZTDf@hE(!%3SIN4v=sdd~+Q9_@t&_E_xivO7+CGK`LER z7p~Y!CXm(TdS*bGdA%{v)-moY$LTx4e^Hbj)_^YOzVEgX5t)PHJvm1Y)nglb>F;rrR&!;)Kral~V#RUX{j)V|A|wV|)-gWCxojh+dau;U z7n?sTj?*oo*;RamPK>&&{dp&tG&wyIqd1g9*T=d5nhQ)#{Ssi4TrN~kp~8l zw?yBI8hpbU0%~iuK8teu4G*F6W_PB=ZuB^z^TJoJ$1D9MgS+iW3a}ZU=e*~Mjp zPO8wl8OL;Xu2(uXqtlT?ET#(}xsM0KI$FdV)#q6rth3P&K6Y9)i4iMQ-nvnIqE^Ju z*~LQCmZpzt^vLV!rOXs}_O@K#-Ldy7Dqn8F{4@AvnPGL|XS}>L8(Zg9<-RWu4)MLY zK2Q%V^+MVMk!^}fa1Va-X`e?ZliMWNXCJ0l+FQ;pn-hGk81>=Quf>SX*L4H9Xq=cN z_EUi#1QQnN{Rl`Bf_0@(WBz_d*1}Am+iaWWA%bJACoo1f`}zA~x8~718+VWDuZQ1s z06psCz9@JvZ1MLK+vQu%++H&*0Af_Ey;bMjJFWO{T2_4_FI5O9dBurxuGpdUKm0(5 z*bSGn8VgpAQe*7;>l~&2?RCEEE{@dVI77m@nebO!nDfz z$e*6Afg~qE8O3Z9!kL^*y~v?$q84_Qj9B|k-MJc%I}8v3#N3*CJf%_eC?kvRLe1zl zZ}u*U6c$$U2CcwmoV^10X-u}T$Iu;5|0*`^eVX8*PI8vC&cvv7S?f|-$@^qNt4k)i z`Fs>^GbgnE5$zCamPiM!&5!tjuUey%chm@Ty=@-**Ji`Y+U=JW*6z-)0lg9VNMYx_ z%JLyse9LYFf3ZQJQ3-vSiSd30j=l#5q!vF=y?|w$AGAoJMj;Xs(o4G0i3%tjPV-Pgu zIzlhk2wK=e)x3&Ir8UfM8;=a$I_GQS=MJx@Dr%7n5_*jQt`kS#aqwOr*V`f=5bd;2 zs1`YiHIsoFW*Btr5fcB6S_7V^o^=j%i^Zy+V#e<$Z4_28MMKCkz*JzT*W4(BCp>J2l z*VKBM4%_z&KY!8A`B=1kPf}Xi3N_;T(5M1Ob#w$o@}Lj%Y*8aFgg0Kbs!jT6bzSL< zg6Mm9chB)xlvChd70`h`_ID*@hb89ZV6_!lJ`HFAlQ%ZM(^{rw0lT9Z2>-PH|2`Lh zeQ9)6NTOUjdem!et&rPxXK(Aau3Ci9Ju<#XL@=sEP(}Y#KI4@iR`A=ftqnDm7{y{c zzwygc!$L+cM$t#3OCGQK=9jA^ZNTwoQO#DA`>e&1Mu|yE;x>pu)?UNh{9Tiz_4nSd zR5Zj#S0(=tB>qznc7MhQuJi(QuIzME6;G@v>gEWVW|i62JF`tko>1#Bm`og{$hw@n zt&}yP7a$N{m`0mzzki37q2-+!Uw8gejL!1V)&qml{N0A}{pqX;5xB%s%fb+;7Vz?H zx*lFidM}HjQwlTLq%_eDV

Hm}Bm)gqpYE19xl3cV-!_^;OEu>NtFB)jtj&-g{}_ z1n5M$9V56%85IaMo$+QF?mvu>wGu3pn6jtP7ZKcIfYDQ?b&Zba3>X)mHVkRyot)oJ zgLp4aLzZE$-V#OCM4t2~nwH8>z=^wgC=?iC16-T()kZ>7kq1ui*BUAGvG{#kLy}4z z#O~3k4Wzq<``HvA7|XKHYkV~k(?8Yxpj?C;^RQp?u*FXbSocp5UpvW=7TmqXbf1cPwf+p4e z+JpJ;TwyJ7D*;&%ufj>Y?~Pl&o#Z}V<^mg(#h?~Se1cd1i4Qzm4gWMU_eqr($(m)> zEWRt@l*Vv@e)jM9R@{VBme-{sojFHTqn6c^2WjblKw%oa0nK@m+q?n*bY4^8mTTf~ z?$;3UF!9}PTc2}Q`o%sqYd*?m9=b;<(MWKCfi$E}%QHyq*)#ycuys?ht?kgVEzo}D zqPGd@OB*n5i5f@AG^63ZldGG}67IZT<;@%(4X!7dmi)aTTDCK?79|p}Tj5)d_k~~! zaff|zbZcfZ?410SES!1A$FA!9C__rlof;CT?sG7l2qs;HsSPr6E8Bjf22Qle8H4k` zBOTVz1SrpGWu;4c(y?x5E^ICqE*>uWg@mvrm%aIVhn-W(q7IE>`=s*MxN7RGF<4U1 z5x#ktu7f%r4Mo<82Vcst0v4Qo{oVG4zrwl=sSp%nIEwIZfQV1WzgK54=X2zt#P;uY z8Nj(Y42s6#a*6=k)s4SNmUr!924mZV<&7Y<Ygw)VTH$w|Ucg%qAML+fZy?@N}%$(e3pSky*d(K{K=_45D@2Y6OJ?*VY zIM)#GG)fR`l zfEvLtgt6jmUw2BQ-p=(kt~^@pX>?LgBlVfZ)1fBmYoA^2Qr7x~R)!0{ZU=yIMT$1H zJFgp&pF&w^zpjS;sBov1c5_N5uG3osVVKXdxpk_atp{G1ao^!ZCrX2Y+_dSBbGu$u zxa*%KLv04pTlFcDJ2p88UU!3;iI~yGJo~tzv|n>@L3>YGO#6;`_tey)qLj@+8WZ}f zr&e(fY}}RG2WXy7oUt&LjONZ_BXmu9ot?--$)FoM zhM;_d%PoDJ!BRH|vIfa3YsA<~rS2xIgBM<{e1zD`Ey!%SVun+iqKsq&x6YgY@Zo6o zY-}#s*6gp8w1jWKbai%+cWafSe%M15WU~{%?Yf_C-P4btKe*gw@fHatE~L7z-20G1 zcsF7>_d94vUWNW?3(wPQHs*{FMDD@jm8*Z;BKs#Nrzfwaacy-1W|P7x0#X+YVvD64 z!k8xs~IyNT=oiBibP}Nwr@A-hr%8P0#QrtL&wIy&3WxZ zI_&pZzPfJq9}b`78x9{Rz~LilZLsrv{Dq51U;~~pHPz@cj5XSJ?CpsDfi71u>$$tm z8vp5B_2J|}56a7BdX#O*x~XhN^98x`#h`6ItOCYVvN;NUTFyO#E>^?Yq%!_?=VGGC z(_p;xH3QY!OJY2v;O8$s_dY3WeOOufAdyecYO2q>#_B-2m~2U0@IzlOXr&U|!>pgT zA|+v^ihXC99;^MOtLn#)Hm_o?6a@~Z;CBx&?>pENZG$LuDqe$KP}-WC+|SDg{)ICzHn8DKciAAkpRdsjh7k2~2q<{kB zB+vEQd9mF)$==`6^(^K{-u2gyG2=DlNJP!s1)5@Aa9}AHf-RdTncTnTd z7wBJe`T0`v({pl>xdUM&ZfgR8wsVtyGI`5fn>h;kP$f5e@Z&=w&j}p> zi_x55+fnoj&B*_;SGm1j@2lI3WQfG)jROanLD4vac;*WEot2I06bp2Uy5CLCzGvqT zD}$~G+Ut2OBpY7%RU|r3aV4&P)$){_4-(uwmjOPINoC*}2H-xu&H$2+%wRxemtIuMKHQ9l zEZ}sZ(7`b#%+&pCmW5^RW3>ui`LGh)GTdc2B=KV)i}&}G2yu72pES6|FCjmm2Broi zGl8M-%Z=)1Rh*4#ps5@f;~GwNTH3O}wz1*z={*-ojI*Udtx9!P=U2H+C)}YHjp6FO z+QMbUMiq96&#|3%oK}kqPw@!?=RUNDQVBba?gJ!m!8o_X_jlSP)Fd`-T4pK!N(6{t z6JHyKOeQx5Wq=i_IiL5AH{nfM?3`Z`t!+`?4uvu2D_=kRuDH{|D4agiJb@COCF*Xd z#xG0}l3*^^b3Q@{)uP*!YRl2pHX7LJdI-0tq4!#&Nj+ect=S#h1Sx~}ysr93jrguG z`o>c}H#I1HP>N;1BC93l00%HImE_(z;A_{UGf5d&=bi}LYciOJON32GhlqV{a49;K zWSP^bIQya>I=UUcz$cz0;#`wR|}n4VIEG=R;Lav|SUN_z8AuuDRkl zd(>rWTTbSZkD@Y8f6!U6N}Lq*zUMLP7Lq23?d^ENZKK^=pFuLU-5)HsLktrojzfHKqGeaowM>~2-q)xME-iFEtPXM|^ zJpdy{(OrCG#n2{MvBj@{gu|fC4+#6wyZ+AY|C76Vkuc}C=GB*Kcxe$@duy!=>`^|~ zKY|(Dq;5=o{l3f7ZWeUp6&(Bpqw$)Lxjc4Qo3CdWl-RCb32a6rdGQ~eIanoswS8tE zQ?*%+gO#dcDs(;dpg6K)e-0v(qhSf59Xq-=VmwSMx|@tpmNHK3ed)N@+?md*%D^&K zlY;qv%R)1KS8Ny?r-xV(7IV{(ww1Q#HwtBP zqdKUlkoWnS@IpMT_vM5beRxDPGO7|~T=Hk5iSKv(IprngONP+xt=N}E?;EQ&FRc?j zj45{pdfz+E!Y4ow{&>_W5VseaoU2z>C83|+q_OnWe{9-skiB-e*7K{L!6VC;02&&f zmXl}8@*WtN^29Gv_Hkdn5dhMu<=Sx}F>kZ=qu9ct%Pn#aAV2Y?Yet)7JMGExMt^MI zuT(Uwu9M(;e?0GOP>)$~qNFF26bsW#l}?om&0i~NA?C6;KCJ?{y%|nyy$uo%oL>bV z&qK6@2?bf?sNX(aK>fRib?81(Iyd?3Mb=fLo}QEba@Sk;>&7(tClgB*IU|w4Y1xz; zSNf@iitPB6Za^aWJVADcq--LsK8lG53n9;RqLp6;jE?O9mFJDmdOlv-R zP>3NqTgvW-xARjoPKle2UZ*UQ(;V2;Zv(JtQd2hYLEDzxolE!f-psunq3iKoXB5-s zF7vLiH*I)^Xgp1|cS@0F?g!)XSMM!Un@a0S$)OHj?NQvUPm49VJtnV4bqjm2&l+Dd zb^XDx0Ox#woOT5dWy1X-C9qkj?r;<9mc!$uO(BdEr})mqvx&1gmTTn;$#9l1PxDjx zSqzR|!^$7=1fKLGMkgKHyM%&@vw6P#-L}`5bA_!VDk(!uXG)rj~BexV_Rexd1S z7Ei2Y(epi=ZJJCwWtX)oIU1zwmh{YP`-wkDV8)eXp%efM>7_7upQY-H>)?lek>t{#-MlmHmuyXe^fIPUyk-<;VAU?;q*RftoFv|5V zt(`NG3FArP7Qs}rCUn9PcH&$lG#Nj7B<>vj)cL5s3Iefs z6iUu%>P#n*i)sQmEBaO>C{QJeF&Wu;u;kc1c$>;{Z0D zxM#_yfuOJ8VMA4t$7Kn=2Ro~p6-%YeO+|h1VjQe!o-pBY2lS$FBw=P-0O+PP)jf6A zVmDU?mm!e8FX79KEQ0+uSh;?9TPeGd;@TrTZ!IMHLA{{%hL=d{an@+6_GS-4`DLB0 z>1$gSmW?;2?qJRrxuvBK2^gwG8^RJ&1&-G^M6O_>v-Scsj8m75tL4+Nogxd~JKPV; zu#ah#;ogWl}dw(bT3^7K7||MMj~mf9~a_rN-v(C zJRiZJeoOuLj?-`UsJV=RprFI{K|KDk6E%>ggNOdNya{;M*~TK9dA4l|n=*#QXiWu8 zW!2sG*EK>M`e(J-Q&SAH_)rHe$HW=z;ZK&&%8E~C7;1HN@Mf3Of(0#P%)8|!HNVlj zlfSfYrLI-gPJq{^n$NSWzc6chu9jRWw_a7Rj8IQKrhmWC@{Y5t-#$NVeMVmh$&&h9~Q@;-k2LE>iXolUK@ ztF^%3yo(#>#D+){2vym`{@9=iUUfddE4Z>>K1m%2aKP=CGEUTn&+1bGu{gHL+u9om zuLC_^5G5S(Jk=nR3^|#}E)Z?VVDX!ti3b;2@WaNT%+)W3-yf2e;&qeJ_eFbzRJ{l7 z*}XyDY5GhDvI%G?%Xpk)if|x02j8-r+Jlzh?txs-dhnmRsYemI?0%gOX1)l*VSs7& zaYjWH*b=-!$?lXUV}@rn-vb2^8}-Fy7MfO<^?sZ+?M9fL5fsP7+l`ct$7P%q5YCon zM3Dtu4$DHPFh)%T`0Ta8i2UYa%nxD(MML>6(gr?y8Y^L-2LXv3fLJO><}jCe7Y%nc zy&Z43!f+6(MPJd7SQGO^z@0BD_R?*?v|ZU1hr(bf;3uBCiPAfYL`KjXIlVx=0_?HK zrnAwd*l&F3hH7$HQu6SS<6aFu8u5@B0B!vIZA}Wmd4o;aJS~Gz-DHllo%ax1CDA6y zCGfm1R`}pNky}+-Sfoxk9&WEsXNlyP)vPJS)r${UGZ?%iA9U;z#OLfj_9lPQ1yXO^ zI+fk58Qt=4@fGxW1G#`qT-cSeR+k>l{)8ELlK`{yRbCU8`Lk6;g|sEO4f1=+Q0%7b zVJG?wQiiD+Q4RBshVy}X{2B8A3AKcSind_kI%aEi)t&Lxt`V2x7KKE(iveC=3J-yO z!eIXhAhsj@{7BQr9aNUE#}bGAb$ACSHdhAysnxn?n2oC=^D#h;#8ltQmU^lCoQrE1 zEwil9-WX4)6z*~wFqiLD-is>(&nrrJq*nqy2>^wkPI{2LGmN7V!E@x)z`fPdBML2_ zLv%+7aqb6*QcsI6*>1#E2LM3A^IK9TEf z#Wq(mw+k2C+b6H0$f=}3c(|?3c=nUZ(F6`8}(Km2?)qpb5(jE()dNG4$7LQ zm*8o#|2sOe1&`t^vlmGwBfdI+#Q1HwK2fdq0l1&kV8a1NDN^6^1Cu0N>2vQTuBC&k zIlq0xbh@^i=P56tTKGm3V(^E2abluFVM0z_#s#?Un<8JH0Gzh}f$EH%k z(YI*z7-Z@30z&#KOPLL4M{|(G)Dxyzp2OVv`As76x!of9HX&MH$>Hq;agU)Nl z57<*Yl+JDi2m^O3T%={G+=oF@F!IjA>NLR+#dEd7yGM8?ayUOL^e6^#c3OUH6xV@* zkn$et3zO#Uqf%?iPqy+a!u;*?@+gNl6txX=6u?+tALJEnxZVDoOq9bSNY%l5B*a$~ zp-1eFF856^^*vdyER`*bn1KvEo?n&Df@|wne=nXb*eouf*~!AKP<|zCQUFyM=EtTI?L<<0VaJI5Ly?IbfnF zhuo)=m*tr4t3wJZ#XBQvrT9m6>Wh&%kaSfsMcnW#&bQv<6T$=|xtZZ?!}WF)V~;E% zjP}WTJ2CYf0KxKgpvVf}JC+FnFHdXK&VEM-rxsRk8b%DYM?$5VV3zpkcq{f;MCN*KdCfbvI1OWtZl`plyOrH{Wr-3#I^Og_S_Q90YnL0D&liIjwFq? zrmn~239Q0_K=^5LUNuE~A(u_$TB{>pu-vl7LMLb?R|o%x<$<{khBd}U(%{zgMwx}z z9oOOfR^_dSk%NU_nNBE_^F=Z#QHbB9 zbmpg~#)A%$V(!0s2l<2L7WE}!H@7>c9r z$_|a0U)=_eF5HvD@3OFji^g-H@vDSE4LA~^YKn0+lRrB221tz63y;Y0xRI=N2VacC zZ9eZps;A|JW%JVI3ZH#?#>$l*%97|SIpfB_y5hm?6a#(tm54t=zL!{bg8Rx|-_h-! z-KItNC}~lk7QBw7mO@IISwCwvAiW2P0j%K55Z~aOzd;rzU$m+`8>LK1RzBCDB9Uk5 z_M}sSLXBKKNMqG;S!Y>=$h9%EUJ?Inm#FBfnxl^8m|VRfGl~QRyUQj~n7$CoeMa+} z)~?w?tv8SBPsJ9ElJ6_t19LL811cLWTK$@sJaAnF!u!T=npnoO9*ht=Qbl$%XbspO zKQJ6v7ac(+JQ*&uxuYLA`_m+Saxd%ZqX!rMC{%StRm)lo)S1fZ;Kj+*+~<Z z=_V#z0UZ%BQCPFcvk~7Pk_byTJFT54#?7Ef7S<`aUQE6a`nX1ZiXgoz2L8O>YXe4Y zYbblyfH>QDW@X1xFExv8Ii2~bL_xLRqG%##{X#dSgnNh09R-?ZY%f99EYEXFkR(sI zYv;vW{lnHh`sKN4)bq&NBLsP$*XZXGft(T@x8GGw{HSdWX`jtlbq_Dc0DTcv=FJ~< zM!~_kf^aVwpG`tVn2qrN{XG}sg%fZ{J$K2?Z6diHVFOAqDLHCvx)G!4yw2|A9-3 z9H+>UtKjsBm3wyVierVRj=}*w7fWFHmyO*o>j|Rc;6!?qnAv0EloA{(aU+d-jw3O z;Ix}>@K`J+tDSkLgYpmkb)1_xmpaufOuG|)l=hB3c~{D3hzxvBpa!KP&of25!V$jf ziyetB1Q~9eekwkOKyeD@mYf#XojiQjN!F@XI4%Ry z*slK=vpolWF`rfA-Y*zHSc+Am7FPR2ozC$iGP!_+l2ZDSlefh-S{74(c*dews;%?sHor6P`hUGx+<1<24I$P zua7)r9t|AZ66!?`N;|v6&U>r#WYv~Ex?toCJkLVaWOLa)^)>0Ko|7*B2v>58x4qFS zmr$aHMe{cd)>pT;dg4Jo~nQpR2?&Yw>bP6)Di^f2TYEHKDs`>X3o?>N?k@l@UN z4kJpM5XoQ_s{@FB(AHnbTr~s&hvk>ijK9$89hCR0?%O-Be*rk=bA8T*Us;abJrr;a z9*Fu1)A4+?h3}682lHKP3AQi72u?|S-29}10#-x?We@b4l{q=ZTwn?ea(y`+x!a_J{*wEHbB74Jx(C zH5M=E;2#w5aN*NsB-hyP^&*}ul&cl*@MPrV8KX{?p-vjpA zxnJHfqiBt}m)Ov**qrlXw*Lt;t1vxMEur+PHMy}&qImR+#!>^8J^Oio?^|t>h1qUB z+m&jV8D;FthxP$$dsIPB(?*@Vss(km0^lJL$lI;Y>OVcHV1vXu-IC5|@a)7ttf~)J zz^AT~s(8BC>YriX7nL*^=+2@PFZ;0=!WPKDB5Mq7d%zhM{AS|s&&B*6w7^)tOG5Y3&HO*p} zFwt&Or+}bwCp9jb@uA8ZCSN65os$R^*?j3ZvDX@FGOc2#g(1%;8dp3rZ&4#@%dCk+ zoTN7@g@P2ym6n1dAKCX7_#l44HEsG}Y;YA?0xh7}0_@zfDEf(Sqv?-yf6-J)%Ht!s zA}b(p*^ED)#>+Vg$Fq5vtV0^0-4?afN{TwCi) zL605(NGR^Nz7VJ6m}D}iYK)o{E3%j>W&;*hc?^0RIv?lwUIq?~Ph1P{Qner%VP}+% z^_^1QHEHsZ&@Pxiksu<8mg*^(Sy z*#fSbp5pcFV{~EPoW_mY_z49M)Ix29SiTrv%ddL*y6o2uMSVTznxMXmQ+?aFRNU|v z8b>+sOR)VhTz>4~3Ew=d#)|oezENvcY(!XBsRu=7(#$wmu*T8VV%(}|rqshyR2^2I zL?kEVp7#pE*CPEy=>BmnWNaj)e94x{{vNY+UEzzam>=bc&HM@KF(~mTntg0aUgldN zPZQ~nI2DUE33E%V&qfiN_jU+5DmHCiH`#h$3+TaKqbBtsYlQOpsbmiBkw{0r59=+2 z@?Fx=UZTNkBawPF$y00Fh{Mq%En`!ADXr`Gvk5R z_^RDT-%iruNE0CxA2k|`sX$mg_ON??IlJQ@7?@b%DWi2?D5-O)WPx;)*l{)`2q1Uw z$SpC8h!*;$pq^DskSxeLD}C9U(-q(He(IG|!uf-r{zSXVEO<}THQOE7ZpAr=g}ffV zixJ(s>2j;O6w**|*s?{^AVV7MK718omJ?!gZmcrAGK_WHkS@xz z@@gsF+%(L4gMk+T$Vj^1K4o5LIHL+TRs~|W@YL3ZjGxLo3Qsu}ej2YCac5VbrQ5;* zHXENZ(5X2&*eT9;=!p>Cu{7m-__pB3G9Q^mRgS*z7W-`8a&J;)6NqWFhy!#V6kr<8 zDLmERYbt)O?{-h({8=q&5`j!yV}^rx%+51}$hT>-CF)B~qFs%_y=N{-E7~*+eXf`y zzBLIVlh2uOG|{tmw1i%(%Jd7pEbv||dNg@Pn`^9O+LaWwz_u?E%;Yk0i#s0|hf;h5Q{*YiE&?Rxq zun^TI6!mmLq>Dgj8DX+30?*vKEI#wv@E5hUv{Er)TBNe{(N*v*0A5_0cEB`d%@>I3 zu9{T$@nTW!!pd7KN{gQ=w9kI2-1;L4Qr`Co#92*F!%LQ}?X#ylO`myD`C)+h!Y`c? zZrcCObV6MF!XoSW=|M1ds}KKrktbTVQ>YWmc#p*)AADl+z~S?=;OA6t%Cyr+Ci>rW zKA{!G^G#&V@1e!S(j;XZPK}u_qnX*TD<=^)$1tiSt0srJxRZ_HD0RMBVw3cX`%IJw@NClW;mDJR03oZ8U2XfVMZH30ub>3*0swI& z9`?p4#0I+@7z?aL%yJRcK}L4u8RfrPeo-{y$t12iP#?-RuLRSnhZ);-JhIDfp=MLZ zQL9ckwx}Y>m}J!mbb2`x7Zem*v}T$^ubcahhq*K;TPmtwXNRe17ElOH5eFV#Xl|md zMokyUe?-2A`lOG;0`4lFQL1hvbnkkTTh`7j`}XdXrttFS&IaWzRRrn-sN2rDo|Z;? z+o8EHv}`Q1<|+1CF~y{0ikMu5;!&*PI@X!S1#~r2_&Q9sJseN)cFwfkWVh$SOEABEvT!1c34Jcc&j%G5VS(uNX>Q*b6bd`-x>O)sDkvE z)ht-<>g-bj)>=QQlAUZCs`zFt*dQ>X2LZHC5Ncz^3@maB@_e`PO{0`FHxhN%9AvE` zX_`A+NF1#T6@A@S8`H7eI}_N?z9L%Nb@vi;8W~>&-`Q}pe>b+ZCzxIG3d->^PQKg* z17(jzrr$dyxrddF0XdrPk-1c$Yv&FDxy)POkkmrTZOp5o? z--6Efvrc95WYy}*(pGyRRL^L8EXvP53Xhoy>WVE_+a1a_rIN{`*r}zC(!HPhf&!I4 ziXkpO!6pp8@OYvtVpyOUi$Ev?FRP3Kt9`3?h13UpQ+tmG{h$nzb(6`cdn7WpS)1F{ z&NZ3gA6JmjY@hrspKXD?`mO*WmvO6b_%Afc^MjKK*U$L0C1U5>ywOlMaoe2@|(+rCH+jc;CNbgjl5N-k|kwr_flsYCVt3}L+{>DbX*$v zRIttXl|_z4w3g{t$JWBl^C$fab*sQ_Ssq(Uc8xJ!)jJczgK^|sG!&o+@mp$GnjW+0 zaGX^dwQKI2zXaZhE1ez}=MZzLB+Uz|YoBs*@l<@3wMm!XXI@$`SGVHU*mi!#+=pKa ztxQv*)~kRAgXSDsr#rQ|YB3@jr7}hA5s7x~8No1CIt@#AEy;Yv*A03a1XXNK%TpUm zM6YT|l}b4^Sf6fcT;{~Enat%u;Ro8tD)cwycFT@~LqgUNQKln>6f5tb8gkf4n>lgWIdKfeFXxt7TP~u=Y z1xY!63WZ2@_#M4DpUCJpMZB&7!k@aUyh8ZVWIj--&D8PHV&`XKZNMMDmY2im`4nm; zIxY1~BL@3mLsET}a!}Psg=IbAF$oqTJyDEJeH5zwE+(sKVsi>F3RsjgTq~`=kh?1T zfD$npv)89Tt1|70$`z{Rm`NF_^cHI8*lh|*pJ;%_h%Vd1*Ihr}C=~xK%`;%W9ZPhj zrv6yc(s3hw2a)!Eo{^y)t9Bzolten=NP=%KGJ^l*8d6f7zk`hyLDjZ57ikGU4)p=5wZhWBQhZB-t^O>g`>J{FC=w%WK8I;XLiVSfA zDllgeqJ(yH4XZ_E)=s$?jKXXDI4N>haqLQ$2=Cz@ki=q68W(yhq3|PBeO%d4f&?zg zq|xsjRZ}2BVSl#;m#Y9kf_DCIF}Gc>>NX|U;x1A0N_BhI?z5dZVI99rE8+kYZjQ?f zK1g%en7!ASz%Mi#M!EwRH=$3sab@Rg@4g~bjYp)OWifOb&d3Ccj<EDjrNQa zvyLTd8oz)lhIMlKZog3m^^6bsRq4#_VF`ERCJgG7J-gqsNC9J^uKpnwTzna&i2UetR1#s5HxegS&WbLxco(5z@IYe4 zYe6Ck=e+#85s3gBPMrvw-GLDWerFWsw)%7K)k{s8w_5{pvFOH`HNAN)cv3A#QEXU= zq_pby3TW~(K*bs~4g8r6-uHMd%BT=H`)14@;0+z}mK-&3i*Sterzd9u)%cX+5}yUdy0=dcK4 z8n_oTu2t}ZDHJQeL+QFNMmP-;kE({RU?|u3CFGQC5+VxW+clqJjTn33*CiT0c74~k z`t73@c7$hq8~2*a9JDE1-J?{jv^`}s^~02|x}BlC%-a4rc?KlN*CVsfCc`1+T_>c7TrJ&_p z$new@pG?{_LNPV*b4=Ul`W}h^s?=b%+g^)4ri6NP{2s&)o392z?<~t9{WFQPVJgUa z#j4_cZCiUtPlJu*t8YKDQjg^ocxd8e12BqUm8$zIjDg{VY;06(PBU@w`+oQi$?{>t zJ~EWnGiME3)u#6huc%H&;4r0|*ZDtpj-o$zj-k0%wnNo(CN1?8Ef+V1xxbHm{9bex)vNx%vH@`TVYDhUKyHw~r(_KXSBM`TUELOd52V=)pHV_uQ z``9PGK1xl@>a!2N_6bGh*+cT99T!0GMfT~nW%v!N+Ls%((#} z7-gOkHtJ(pw3YKVdM5VJRg?Hv2>$f?%ym%B+ZR4z=HIJo& z$58kUPa5S@x@r zE)?>0mx6Tk8Iw40fQu~R8=l_GC;B43YZglaBEEA%(NoHWB4gZ&%=)-rJeP1{2d6!)0v1~Yy>;e>u3 zF(1WA6Hy@_P$6nU38Dp3W5Dp{?5T;{9UGssei_5i^)mCxzJRWXnRDxrL=xRZAKOy|_BtQ6?aL8jQ#BFgD9xumlNUq zA&d=NM($i=$_o)r56`mk3~rBapXnf&_GARJ7auK(yu6IQ6?OX;8du$$UFy4}cKF&M zKz2Tm9f}_pupMP+#(zpFpfRYmQd(q6BdA7DDf+Rh_TNabp;~ANC$m4Ui{Zx2WYFQiA z?h^g@!@y;7CM%XGF2@?GO8uY#ii^r7=B2{UA5cBS+NH1$y3VM&eByLf)|=BLiZ^@i zCG+9zmclicS&7Ne|92hDi%R(;Z~%bp!>MO$iBm#elmBpbRl^&4lYhFDLIDuFaVjJoS=OdLjsuCSMoW~45*ANO7kLKyf}1w;=|ESB+M*!>4Xe(4&&*0 zXG(dz=<0jwl&r&6%tqeK#fp23r5~y6e@^3M4|jgk zdjyD!);|8Qs;{pBDh_SImGip{L}`;Bq(s(UX&&s%gZyp%))&x!CMIlK&}4q1urfWXECR&MmBPVfX)4wqZ^ zTI(+$uw{Xj0}9A73IaomA}_yDqdM`A!uy2=z|ddswJ5(8o$Xv{i`?nh!|YjX-E?-v zANE79-Q5-d$(O^YyvqNz(g0afaP8vq0MGz?e(qo2jYyDGW76tjCK6SaC$p>5t1ICBUbpScMS^7aXASsYevno6jzPHsVkuhrQQlmGL zj(X~i78|=8llT-7*{L_r;a1U@D>J7wBo6g0Xplj`BeE`Vh5pX%Vf?*w8tyc#yTR4TCn5TEzQ*E_VD z3Vb+)^VLCHNb{od!^Jk}lytK&5c5Xaf+yrn!NT;FI>EShNucgRNi=*(dm9~21tj|@ z=aIl{0mklN>QMysXrxr+~M;WbSL#BxJ&lv0>Y7GVf6tbyv7cHLHj%zTZ^0Q44Q$ zch*Y${#P|LA0Y1%c@#X2tphteMr~%W^;iaUZ!aAzQ}3GjJaBozcDQcT%MG_T^YgCtJ8d$uh)oGW+855v~{lk6A|3c*yD4d&`T1%!%n+GI8xfts>aO0_+0(r-ij7 zF|Ph2N(WKOagnV*$nEx86gLT}9F`!KG|sr~&M)NE6cf0qY-plr!tNlcnYX(vk;Q=4 z-W&I**DkZGa=0H>Y@eA)8x7UW1CaV+6|{(S8FQ!0@}*izOdrdbAFSJBinafMvTts6 zNC1=#Y{*NojLhWg<6%Y$!OhEaJ8h+RZSxhO z4jvF;NP6J5_K85i!Gd?uh9#ZL41*!vY?M-bzVa!p6usVTKV#(1N;8ylFG{U>(ZOdO z`+UI2$>;PHzG|NsgsVk#k}F0eEa80pFQ3I|esfJ+IurQIXMq1U z{?xZ>kwIB|6;R>h{g2&*%@M@#?3SGO756rT}yp!WO#wyX`1ru;4vJ?!srxKet+_LtdI$-(7DGQXdu^|C=wlK&WwqgIM6 ztv4EImDjqu3Oj|h;sKnre$Z^nn>mjd2|DA8QYqRLhu70RYes{&1P6ORx+c^LMO|Mftz+Goct2eA9 z01pWc-y$~okbhsGB?SlgCk%M@M2|*6yCCD|L!*HVQg)cNFl)Q>LBW>CKm{=+;sV2o z+KlV_e`ibMG|z*^vD-pc0UP zJv!?Rzk7Et;-*adiU6w|ys_%sE|K8d`B3m*bS&txvo`cg^pR^c2cq`@ZWh2IyR5rc z^ZD)J1-A7&0!zOcTm01ccXtHj>3k9ZUd!J$UjDW_l4N6d-lrN9u;_T@19IiJS*kWs z*Kp#4Kjm%)FDX9f=xGTDn)be-f4M0H$)4KXLF(Tab|vzC6Wx>V;>N;7?}sX)?HM-t*=Z*B4dKk@Z}&cre~+l`RfJ&IH?OYC(-8S%?>S{V$F#Z&1(dEm zR^~-DP<6_gYsVRobAZ-ZZ29t~&%iZ*&bipb5vI%2%a~S2kb}}1IxSO~vO;OHRDHNWb zX}?6gGIiCpMzK)#`?ie`MN3!|swwSPHGVX+#Gyjx#1F3T!?k9(hu5%#|3yoV_*J_~ zaxSx4HBr+5uO*A1^BW)>sp5hzIpnUZKMyb}U z*^IfYi?TUR0TlD?g3Ai?7fOw_6f6p*J;~*B8$h3LPRSD0DfGB_7kb_E0U?~xJ-$^n z*V>ip1Ay$q5o<@o#~Q9~xBvN!+iBpX(VW*vbf6 ztBEg}Cd(}A8~sKeu(xRgh$4M!+%&DOE9GlWppUnjdib`{w*_3gl8C(}esn&i35pKSV73qjH@f+{3DXtBy0mMKK@`_^0?0&r zfq#qLi)7oE6gg5N?hJ|#miqO9Tk$DIE(aP-D8zV&~Tt!2$^9)5E^jmG|M>YrxsJ#c@W z@ro`dqsT+nzwbZhY3+NikasV;#@?74{JYcd<(RHJZSGP_RMeb;J?FBc|0&+oS;h}+ z(EMk3OiR>C*mX5m*Vg}cfc{?dxMzTVX#9S}zgeBT9F0CrkG7bWZa&mXzdH!fi5lwq zkF~#x%$+o&k0Zc-v<0w5C8J_Kdt(YP~g9B+ZA6ry2&yAJsU=H zPMR~qk2JfPD zYKe6$r=XVrm+9tcGDXu6uNbd?kIAphhfbmc?OTZZe8*CwwoHv(Zo|A~G;~ z`L0$z9ICCKA|A6F7d1d}dRD7oWD_~xA5NO>;y?l0*+zDXnK$}qZ)GG$WD}i^vFAvH z1mdH|wGqmGj4*$O(bHS+duv8Mr}yj83a{7rFSO}rBC>RfS3%Y45sHoUk`@cK=9>Ue zY3Ax z|0@A)&nks27iksa8C87*I@vG7+1`*#VuZe9P~ z#*F|ArdO%W5Kv&>=Rf6JH!YixV) zHv_!ui#Ytb>^xDm^!b{&wQu_6FpgwSenv z4_E#q-}v@sPL`OPPAuTI*nqIj|5|d}YtQ@tb8nmUo)2mC|1C=CgI|7~#+GZPU)cxD zw5QRZxoeARM$3SP_xU;L!Di0C)%|Czf5xX~YvuaQ+ra4;8t}LHJ-C}0Uee#mo6jIW zN9mjl0a`o1(^6Ln%x_0mXnN~pQ0#K#6OtTNV1m`}^%fC-xhm|k1;dNdd z&AW`}--!*9lUqG}M?{>@rnbl)JzdC-^D6rCT*-2~1ugcC81&@2sqOxTy(}Wv=-`Kw0Zs6~F2a&^en%m=L zU8(vpKo~$6h)hfdc}?%1xp7B&4fgdzU3a_tcKm%v1(t$-fF1b)QtcYl?(UKLKTbaL zE5B%#`FoQ_uK@O@apUg0yuqZL1GD={xuXV-r<*_Rm*{6MovgH_>6f+i`h_Zj-Xzcq zabYnaICK?x9}{ETIbQHPVy~w15GSrmc+Qfk=N8J*9kpd!PRr~T{7KKibmBGm9(W>6 zf<@m-((gxADhK@ok7nx^fOOCQS=Bu`KXvf|9P#a0rYNv_P<`X!A)FE8QF61g6aIyE zv!dXO%PD`{boBzCuUC*xbyFZGvgb}F8tGDGTEt4Cah4YCTZxRg!?4>inc=@P8*H ziJ909 zL0UjSX#oOAFQJFtReDS4y(6d~J%Ds6p@$Bk2azIOAap_z>AfQe?tI_admsEK{}>$H zM~oyRPu9BUn(Lb16%rfcRMqJmD1nYm6-fS0HO6}ez1QF?Ycq<569MI>Z1qpgd)Q<> z_XUh^9@%M7A*&}&Mi;NU=xs}_9n)-6=KVhVh*uo`!qtvKxQpOFUNcRA4qvlaCb237 z&9Z9khG^$aJmq5e-_D2k|LlDJC-J`9h;8GG(x7*HLqm=d^zc+ zYfoWaYwvHs^X<~5uPG(n_t-CbT3#QABal^KYGy@0x@J+5W%uZ`ngxFO;PYlQ#7l%` zH-?P|Bwl7o%)O zV;8go2@EUVuZd}E2Wc{fz@U{mKh9(x3|a7J8Ybn>B*#{M-51#bJF}Ur+iWlB{puz0 zeIhEZ5hkE~T2Z%iQTV{yRwdgG^8FL9W-EU&$6MQwa^mk=g&ksZN2&)W7OH$uz1q?j zbI-QUASLRb4f9+um96;2HyN76VN5$+!pO<1%#fXbfW0rQg_5bd@r$K&JPF-dPkz!a z9NUT%1x;9B$nwpo40n`DIai!9HK?yn~C5}EHk*!Q`hxqO^8$!>&_-xJHnwk7^m+9m{ zFMgU#_b&0B7fqV2&4E~fhfwHyN7r5VAh%lm=9e;*$m zbw`RkT4vwIIW!bs9Xu~F_(gn2f4ofL`69tA*>`(WRP}Lq&6X3tuy~>Ft_j~yP+ZW< ze1a6ey^130-@`wDBbIRYi%q`vNYiwvQcEhhnFh=n2@PckJh!`8=tT{C%gl6gp{d&9 zCyZ;?ipXcdj5+jKp~t+BI2Vw?OCL{fr?=oOO?ORysXZ%;)qcI}D(XGD`*x3hZSM4; z?}3izYkL$n+d680m+7_Z=Kg9#`sp;>o5MKYKe! z*^a_~otpc7S2!;1jLnd20EarqKR{X_+6`CHaB%#`{n`|LXXiWq9iUudFP3SfLCkLS zc)s!8B;#Xhm~^_svGrM+A0DD^gvm;n@ZY>ku)2f2R@=XJTI*>a`@udtl@en z2G{I`7zalma=mVlsJLao-$b`og&4F(9tW7}T<1>}dLig+klpjXrJRA`E%z)5-j48Q zOo*jAYlE`P?ID+5eIwX8BZ4B(A|>%XXHk#n7ix^g^qr@$$BLsS30lCR6!f64po& zQP|e4DYSFCc2i+}Yc`brcQTG_WOvEerL;k8Di{aFz2g4Xdgo%YHBfZ<%gLnA z(B@%ctVB)BruVbeSUg~n9XuS)s^+S~kH2nwW!tz8`4!NcInL2| zQGGj)4}=^$T&Q%8CK4r%olR_o;{)ge2paG;P+3gNZpz6ev3Om_K>)~g^F9391YGUR z=eOGCL(N=1j@;JDQXM)wbLMXN=VN}bo!~cbuEn{;+U2P ztS_GD+PY-lRyS;nOc(63@HxyIZ0zliw;0YCq`HC_^~NM#BQcY$EsX*C>gcwwVhwYx z=8ZS2*j$!fcf!^~uK4GEHOg@HbX?J)p^4MQTxe)mRA0hd z*h0m?`~A8qn8QLzkuDCRS^XxMMjj#9dJXkG`cG>*CCj*Fxtv@&K;=URb}E#-c~wi? zQ&^gRrjX5-(7SDM%50#YY|5;xwnV$?XSp=ra`Zq+K-0G6cfZMs;E0eaMwha;1kQ@X zuJK7t1@$UF=cRbvRY{kOY~qZy`VmqMai*xzjZ=zh7V}%GhTAHXWJlb=%emM=3YF05 z__R~od+N1@yXditutTO8ctxS}iYFOL%=O$XV>FiQTJmB}ybTd3=)8xDe}0We4HdQ= zg$Nd@B!+;B;7cKr9qj)rhRSegJtXVo(wpm%3j<2Z_D`-^iYAd^uOpeQ~ zB9i??Falkyq>9?sTg!;`7Zuv_sM}f#)5L^gpIxspjYTQ7h+bDz zE`P5xM}1kHO^R3>Z9bXmg`u=~7MBAMYT(P`15#|Jg>u<5L^x{>nZ`_fJrW@L1WgY~ zeUs$6>9*u9{A%Eb_Z7C8d>@&i``&+F2-N(iNUFgAI|MvTX3?Nyi%v%8@HnFBKmLj3 z8{U{?WMY_e=bSb8&k3r(_vH8>r`ZmX*KDnRYRa!})G(u%esWo(BsUBnY z?%RNVi=-LNFE+bT-=-oJY)%^~nL^CEK)G*5L;EgNt`*H|=bhgYyvlKA^TI1xe6fhx z@X3DZ)Yi+CUz0kDr@?(I1!O6%-$U^khrB6wjQj6=|ID}deftL}zj~!|ra2L1c>6HUP`$LHFRL#4Bh)3p z!gZn6>J1CniC-6GIpaulw)jUd$ga8-bHhbaCILW_+mRVg_?Tx+jSH#-g|qo!UX^j) z`>-DznZ5KzA?9;hcDhDcp9k%{OZv)S#IJ{t5A4D*ju*6ZJ7s9R_*AY^e1c_-Pvc&B7lFGVHof#pQsf^%hUipT|NdXN!RjjdRsW@R>Oa8n z6lTs%EMqAw_2Rv3DN4qc&ra*GfgarM2M+q9D%-T5%5GhJ_p;^1!D)7A5LxIovGz^> z_g|;0U>MX)?c!~Fc?tjOc*RRl#h}-!%qRQ#9*iqqVJ(|)4e5sq;1{Lmz~^VzLEt6o zGCj{I{aGi))&^oz?!sVT$pl+_qKixN^+(7@tUmSEs>09;UuU-tSXh}pMBW45dj|_3`7J^^koM9d4H>oz!lb#``=EIc_=NFPk@Ys7;V|C|De?W;58%*bVzJot- zs_WK|^H8O>;(YzE}YQo0u(fNS&*6cH$ zgKz4K+4f3i-fOmlMc8xs>V_yrd4B8mrI}WE>0{!Fxa`tt{sjvew02#ky1A)SKSbY* z*{cX~pe8;s>O68Bh85vzF?I!RTUfAq+z$vGUGcVRy2366k9;&Z^fu%wU4-50_6GgO zB%{Mu(NsOjmmrAh`?~{fMa>0nUx;-*7~M4p(+upIfwM~1zd+4NW z>8NJ!4W;(CCQ%1VIE8O6gsOuQ*6eBsCzx-@_}@A(J71%(E3{R7Of(DE}YETwM9gpF(u`fJ8qb$K2!lgaJ7P(q?4%%QwR zdl{o-VFzNye;9{`poh-R&pYyF9MVLe*LX{}8hj_>28+*% zVLPBlxqUkI_nK7&FPeH>!QzsSB&iR~C&_^Gq0<8hAF?X}wJ%qNefY3$g`cbQlcx z?(cXE3#pPR#tdQ`$QSM!BiTCeZx)P(Eyqge4{8?AOl`%<1>XKZu61rm6^~=ck(wh* zEZE~C_x>4^rLdovD=D(~k;RLFo1)7hW5l->U*yY!@-bf>=Y=Wx*&2C_o#qCTOguH? zdZ)-OdkvSMX)`)ycJqUiu7%qAZxo_`wYe-Znn4#xYCPAC1EqW`$whbX`%JJ|J}6!c1&RCqe&60F#Duo#8QHt|UlnkD4?kw7 zPpNgk4cw;~KWV%*C;f%B$t6sX=u&V{chEK>k%hN(l@XAKPb-=$Mii$}L z*-zNQ-l%OWO}zdx*}PQAg{|cg$Dl1clvQKUI|Q$((3$EZ)IR_VCtQ0hR}~^Zx6YXf zJ<;Ls>|V6(DSHUj7IT~PZm%^fMt52CEk>FGmne6yToEZyL zt)C*Zezu=nA;FuCOGI{%M?a-wB(g**XXkVqh*=*kJ&#WXMirXEF_43-!=^nYpJFP@ zaCS+S_w6HT)9+u?h9fVyCwf^Gd&%k}; zDL(=}U#EBy=^s;Re&&7U@`-?!WqZbiz=uq*mS)VuTX)%!Jw9KhW^5S&S_f0``3UEV zd+~6x{;PE1&rDO)=9%Y4|3#ko@?|FiboCky?v%2qtk29gxGtw{Li@qT(of#F)WNJh zzn2?Gw1qGpE-WM*uw(8LOUzcAXexkqHb+zTWigYh=otco_F1qg1%IfJ<+$(7gjN;swF_ulf7MalS@=KIZ_KvzcXpSB}`XjPM*K9xZ=R9m7~7s65$o$ zZ4Y{KERj}kG4|P|6!y^H6+=ckc2&VyG{H%Q8)1or*7$WFPj_N#x z`xnO~&|~rh$;8pr!=?F#=9K1wl~s0`&;h~JWm$VsogBW#!yj{7{Y`4R6;5hW62C>&weaE~POIn)4W>UY+D(KCOK&Si@{)|tFG5G3Z}+D1N(NPn z$r!xr^Afo!dy$YDIx`Xnw=*SBWom3QDG|%M!j=Kvu>Czx$Bbt$?uKIAkc(Q>;_|5PZzEQ4qg`|`i9P2xsjI2KRYCZyzB8((GK71 z-@dXsD-O+zn|$|_BRb*a_!?Ordo#|m=KhSmw4s!k4(?R4Zl=Mn>q^l?dSzna-V|4|`L!SMB+@oBDi1;Pr3rE%s z3g9=Ejym@8AyZ=7u_3fHDa`RmKEv_P{h6Yaqz`=RcAq^Z9`mhjVxChNe%!dAEmqZz zO5YDUE;H)D7|grlT&IcXf=;>~G)0$V<&$9nikNg(!@}<#5xx|02ars-@Fvq;0UB2z zWy)Bk_p?ZakI>w48WF`3;QLqwH2NpJO0o%i?Rk0P@T%d@xfMay$tUTC1wUT_m0+Wz zDE3;`Zd|5*kROwbE>4EU--KYL(cc&>qYLZoYHzgp^8>~6*ZA&A7xNSE9&JCqJt_?S z%JL83zjm{VR{>e@mZW9~XzHzjp;RaSWMK#eFiOq^W$3lmJYM11L14bJ~^VxShSX;9L&e5Yx&+I-mE zGU_)>aWq+5qF1=^y~4rP=`XqT*Hz{<;Y}lh>wMem=l3jE`3mr8Dv}axtPC74t?v;UG%uKEIPtP#`>z&Ve zXutI*T!{&47U=;uKTN-5@4>Acl7qIZ3aF(xW<$;1lq)Ge@+yhRO=qc*Lc;FF(Rd!H zf9xa@s@J5Dtj2ifWar${wDtHckiZA&?)gk!tIh0Kz?UvKt@>f8%Y}GSEjJ(el&bB7 zbWe~8YY%V-%wt&JLI#NeSwJAF9D8}go-g98%zh4f^MwX#gHstw+F}~e?OxZ@_h{QU zFqB)i{Pd>*VwFs`i?cy2J86O|n5|EEN00bW3s^{eveXRL)HpHyfyoqNI6q-yqGqa< zOsTjWvZrreEV4^G!>#U-JM^0&^F4Y|UwH|?|L)yHMqNkyRi7N8{MS}v^jFMt=+5zs zgc=zy?KWe9z6-)D^*rV9Os~Vja?!(8JN}miI$s*JR*e@V-NIoNPEvU15KRMOwaPj|jod18fMMNSgdk@P>WDnj> zEpF*Oc$6j-2ZMgTs^loEY%>hn;d#Ko4=tx~G8f*Z;#eZ_mtPS<|KY7_UzUt%5q*Rj zjZyblZ7t*~gt!W@@P-Hv1{4gbwdTCtj-l7kU=2+b`n_b88RXHR+aE#ZLaA7IdB6^~4QNh|cS z8MJMuvDk2Mg!Dd1rKAr3?`{Pj^HMDQ^k(hpBD2+5pY=aL(3_&)suwcTjTt)CLP@4% ztU7Yt$wH7s)o1(?=^*Ol;6$=&AV<73N14oHH`yV*WYy`j7R+PNQ36io( zXnkX4@eiP_c4tSH+&=qLib=^yLS7}DbKW`L49Bn1A4a7!S{rv@IAWQGq_S>4&7^&A zdUMHbcp%n)aq}8q0fjDar@xJVIUUrSr4x&2Bww1f{Y`LLfZvE<(6So?TqzDdeogrm z)Sb#CxoJr40uY$Mu2%}s{(2@v=WTvY6y9`Wj&IRhmj9l=zD;Ma^c&?fs3e=xwCMb= ztv_bFcQl}yX05o3`&+;BO8=!No|B-AuPQs%H!W3oSsC~baH|pOE4qAUi+?R;2?rZ( zcX1_0{{Rw^b?an)AY8-H@kmMtVR5NIkPqOvW;Jr8Mb6<6haTEtdCEFk?7PbMDUT-x z1YRuGviFS`z{B?xDpQ&h=tZ9k+Zs-VB(latPhAW!|JWOgsx1R74c_kx^_I~42j~r* zb+lsL@d`%zE0AKJ`_uIyBGCPoU%~B$HLfXDcMm_R3=YR7RD0gN z2@Smxm1NeOUR}1)Sn*w2=-Z_b*IE{}N0YbOmSL6UWN4#w@_tGwRu9Fg4lfq6S`xD;R{I_sZ*$|FW*H;n9?FsuC=j;y&QXta# zV==61rLNUX5gRD0Kjq^8gP;fevQTS1EdYMQ%g0aCHb?KYdttN(M!khawPi>%^AnAVdUHWrwy)RCpQqP0~A2!t!kv z!SaE7?6|`nYY`@A^}N#S7s#yg#Rua)x2}!Phzz#rW|BeMl_y?o`3k0Vm<-+R*v3lS zMD4iS;Y_~cgYtE$suk6x#tG*mRwI@j-AewfLv2Gz&_mN5ETHrxluBWam(Cwcg9%An zE)iHjIX4Fe4V>3$H%0sAVivrWmi?3#d>X(qO*W7XiI(7&EM<2cQ0DQSw* zFLfqg3o|z2M+5c+a@zKrgm`6x zxa+^S$Y%}wwTZhnl5G9;ak)*;eftMSB`!w`Ul?g|l2IwEL}qdtWbNC)MG_P5uy3vH zuY6&wLW)i}x%c8OX+RT0L@eE|DtSB4q2@kNdxoTx^zhSEMA5){fSU)7^o8AfA^G!# z_HT~GveGZJo(1Z-@W-~L`^$$qw_m?Fm#4cZHw_4hRf{1SMFpUc+|bIX2x!SkTE7*; zrkzGhTQSX~ywl+TOZj=uw%Vj;5g!JOC|js@OwCYVK}m)xYyMpoK)JbG) zovD^X0UFD;Md#ui@!U{onSuGHPGi-=l%&}s-X3ax>W`D#WVMja=Eaopx=ML?%9Lo& zLZ@cc28kLzU&fJ6xzH;HR`C)HC61350VkGi6Z|y|c4E9-I9K%+WBA>Q_Hh>vQC6+O zmI}Kx3Ts#J7yvmfzaiS0oJ#0e=VmO+_@c6Kot9?9M-19!iW3#)5{&x3(snjL(l(C* zsXQ}p;%yx>O13gQW5(Ygrebl+mQl~k)M;Al=j4|>E-xQ*)9Mfyr>9*)ZOpLGHR?0l zG?sqhlln)fZ&bcDR6k{&^jQMEgjRWOVqvw|wvk;iZ!HgSe_zg^{eAqVV(RufuTAZQ z6*Sr^!x;fI)rkoXo1iIj#J)e9{M`LZE0z6|fvNrrRp^^exd$NP>5lld&*Ml(Q-jQ^ zRPKfV8WMMAX#QTJpXp^SYne=}(MRmHtrlO+reerCdaXT&Prgzic{t+%S1rcjxWM zM1L?nY_29S0s^7%}@N(=5G(89qwlS z0XQT`<|(@`cCiXi0tz*_=e`Y#me7Js*T#XVwC3&%Y7976(0{tIrlaoq6-nj6?CK6n z`%@dY3bpGs>)B=KC(yC(p<}7$!7r$4=^L?F* z>#OnzSDd8yu31r2c|7eLLlc6jd|)fG3=}^2SziKMV-dg$p@rq6(k;M0mf~_!TQ{HP z|E(`;+>x6Qmht?Un?U4bTM}R7raInr{^60O;ESJ2q>_`Pr#>)5BQFk`(GmhB-6J)N zs#>5BR}mef&6u7S3@T@CWAfH_`V%a9zT8o~>q_E3w_@?dn}fTv;${w@;!LKl92f?+~fWp<7YP{Jocebn7-(7k}yBZqckq8 z+`tJR0I%|Zd*zF~kDWzo$g5qwd0hleE&ymIxr(ZI<=X;Jaxkik<@-j#|GnAB#1M~607>pN=;)!>R7LI zyM+Tu4kdDW**JxKU}_53RwH17%M&U1*N_q|f4cJd#431MJN zpRIt)w`5Ya&Kd78>v53k&i#AHP2ePlD1C{xr$S5{ulz!8cv17yu*7kBmZa+IKZl>Itx|!EWg;At6>y*tzuM6F zpGx#H+5j$$cRK+{l;vIc;|)Ef@+OnhmEA{C=SI9wBJ#OIlCCQ`+<1s*eg;Us5-ZKw zwyVzD`2_BODTq2ataM0m7s2>g3Vk)Kg{|DK^C}ndo#eL(_b*0oQ6{6N`c)GM-O^0C zV{RyF{oFL#s9K1Q)l~l15QN$mxTiOl%Aa_9v(Z8pf!~*Z}N_*-~mXqeZ@3O9F zI3d#1=xK_eD?K&+%s{&R>KS)<{b#AvnrodKEjD1ehx?aP=5h@+Em`ybn7;~ZZ)oQ; z@PwqwpdU0TkEog{X+AFE7Z7zzE4OvIv?uzaBHE6cps!C z(>|1;rGwegG+;l#wcWgBU#On-yF$kYCpsQn`6FS9q2&8bkz6zMXeRht5T&BT>oOIl zs#5Q*dP?%&Y&%{QOAltc&i}qPUvEDe+{+nO_&T6fZ6hl2g*`dZk56f89^uAI@o0*^ z%NV0%D`#`Tor&ehN@#k(df$z{bze7%6@M)%?{!>jPP1;G8lyt?Qa+^$Yuv;aiH><+ ze!IGc*`)SbMgOYQMsfkZ0_6(c?Wef0e}EK;?{|l5H+WI>#2%0C!2P8bZjo{!HW|5; zVG96gjx9Wv0;AV%3Q9vOrZ5*$v|NSe!R*uC<&VBbnG>|ZOgw${cU-~W8YkaDbf#Ss zlVI0Vj68Cf{c~mWtqWXjsC9)8J(c`eyd##nT0!XA%%a-b+b-A<(tMUReQzoDpx zUGf2>uHz^f$>Q7UeeBI?VHFoxm^pB3L3sbEos^Z5#$LdVyGX1nvN10pAHPv?ZP&`+3B6qJ~F`fTG z)s#uROU0Fa0#@3~TADVfb}z`vOw6(HX^|o@5Yh>43qpLIBh1rfgCnoIBpSbYAH9cnlMZ2q_T}s0F{|WVXT>Cwa(s+b&u*FHl?eUi03lkhWYf2V8G6> zAaFd<-u3E_{LuZsgqbmHf(_S;<1AzEf)gUU zUrMCGhoJB-Ve?{?@=Qm{D16W0h_B1NA^udm$&bH;`WGctiz+WkaR1ZKPqo_#)|Vq2 zK0O&akeqciVkIc!Cd3L^>g8(F2n*=0TNTh?T*-a6!ty)-t5Kfu+Cq~7&8MW6QSLfM zDnA>)kGI1now>GHsFg{bc?Tnc8_fH^AOd~oZM96n!N@4|BN|p1EZVhA$?zd6ZqW;) zW|kdbh<6A7Cp9T&UH~u+E#!2*Pkn5<&4lBB`#i^=4{x{{b z{cjsj4nA>M`GSi^qsGxRwMja4)ooh03+I8%maMh|qsAQXMUATa-I86rEW;S<;DPB- z)eBIanx^1ObvE9gM0~F`Ka$aT({X33hTEM}BpV=YN*_l~K5N36NlU$dzwMrDP{>&z z5;veeSDQ|pTZWzRjV#`-eQuzD5MCJ{{A}Osr{Lcb8r9FBF}y)SksF#X=IfU;>|m7J zw~1x~*=AUR2c%(C;83obhpf`>Yl zjyZ#8;?`=WgjLWbS+Ave0pvRRK=jtVy8idXD_89attD?UC$4(52& zbgYG{ee`5g^z2K2jv~fcT*(#Ln3oVucSAGCbsURrqfq6}Ni+PT%!VfjgU-vA{s70O z58(}*tgwV)F7w$WS;7={1&!Hz9)Z77y5QYYMq?)K5#b&~boAxaX!mjIoKd8tii2w^ zU%lqhn#f0qtd}V6e0C|)vn`6V%D{Ck^MDADS9H1EZP#|ognu44R3FU1EhI9xIzOpz z?>d1diR*e^;1_J4%mRvX$l$%$S@do;x5P zOK0ugs$X)DTLTn-=n>-kIh7w|HH8!VOtmLql3@AqAl$i()aF7^PFL-9K}L&96tbbx z;B?*2O2y)=QbAK|wQyOVrZS`#6GB}amJ976$`^b!XB61yjs!D}HB5@AJd+?TM1+_ej`)oiK3P zvkDrK&mNltq;@=c-uf%7WC$@P?1QANL`a=W!@eV8xwD^VqMX~gUJdFCmsnPo0a(G`0Dain>mdqV#E7v|C#bjts5D*b^Osef{II_pqs zYEir^M+uV5EH1xaQ^=iE5y2?{L~@pCilI$N%^LQGhg)qW6{ELWMiEE6kHi?x8})1^ zvK0>W9u}KBQeE_3Q4T69iGNDhqyE*7{Zf|!Q}lntFHrZ_H!=N*fBIv59K$p=HNPhr zkCJ>qG67e;B9?ZV&!qOmS+KK>a5o@M%iUCkaL3%k zD>jRQAcS@|gN6&$n~ZG6_cBmyVNaPd9aeMn1g}W$dyrh`q=({W?=GJR-&z*`1Dw4? zR-_C!dNbubZc@EOH8te3Di%HBb{x2+lZ3m5=P<-oS7fO>TanKnx?VJn`~x&I!f(au z?@qqC`%@(rx{ermDv&Pnw-ocaHsvzyC3$-ICcEEuC!D8%LNUj;-zooZhojWbF>^rB zJ^x72*0?45#j3JK%0?(e+oAuG0FOK>o(^3yo-0h*p;G0*{T@v0_y<_$P;(y>tDqoY zq{2_-*st5pSzn}Hgp{#Sw3PT7879JHTR^HRTyvBi3y^r-ul#|{ECnmT?&>C9-s6>1 zmsCU{K2$5-ys)u+QLum!4riqlEs=|JqxPYCUhkG$3KpAm%X+e6a zb~|?O?+&5CX@fK91*%HK6DJuvM#mkeHu{RQU3&uUu&E_cSH)`$PuWN&Lalc3JFU_J zXV3mXUtK>}EYcV3&z*cbxI(5JtyoSmRRY4AQR|Yc0>i-xNz7U;vbrW0 zQ!kw7&jD%|ua_{U54UxyXL zv^(|X%ed<_fyG}#2Exhua@akfNQ}XRizM%)B@~uRHlZ&-j!^of2xqxoH}pu{w; zHLS{s5gX9KO`U)y2qDRzGeTq*BoOMI;H1yJA=S4Xs!d5Dabpg6fZpsTn|YD`rwOX9 zY!#jXj_nTYB3bGE`Lo#^MGopX#eCJF#dyVhq=k|p%e++9(v10a6ldgj@3r_;yt{K! zZ}|A64Z>Tmvx{gI=tnjG7}S7#sU4@E0-lJL_-#9cD7%bdw@+}UfrkYdG0iS?rKOn& zV_v;D%5pNPR!h;Au~&OxuPaAq;^^)6HzVH_qvl#{g!~~c0K-h zP@{Mp_Hc;5x$VlEz4ZsW{o2hZsI&~YN5WH@C!ysad$iy?f2GAxx6Z|w;#tp^ui*$` z{cfsf#0|Rgv)vyN z5$1xwO_X9eNb4Y2Y<%Ce%%_w19uE+Iaw>xa5=20g6lw@+$Y-I?PpUR@a6EqtHtl|P zED`C=TOP1*P%u@!aKF94gX`}gqnN!fz|ge&h^5{#=7P-`QL~T=kh(wp-jX+L)tQ;U zWwANc)`E3=R{% z+q?u}hmKvF*~P6}7i!jgTT4)H^1_TyyN8XR94tW1L}t|>(1r=u+Vqp+9&Ov};X#Az zh4UjBW{w}0_SvrQSSuPP=%$v7U(hr3_(;H#jvjG34roH$0HULnM#V&CYFJ~R;&(f` zngfr>dsSKXmBiJe1}-$-x}IBJXBAb+Hsu|qzvDlhA_*+sVQifdCs+JH&F8p-W(8}A z<&F%vK2XK2FiTnBptj1NLGa*!CdlFQI5RE6jHytPXH45JZ{Yx_ce zA$~1#)bmbHr3LlPw<}cFKjdi^iDRCl`UJzZN#^I#5++Y$ZS%Z$0M5WOB6x4S7q1vb zLC`KL9ycGwp!s*LCTHRJwxjGHpyC{U0pFdA;?CaS3{xf3d=P-oI@BtAV30sn1~h0L zAn}n76bk)1c4H`#{~5<7#vDO>%dULIOV=FbN#uX0VEfDFZMqFm3f8Cmj;dgC;DWF4|K?nG0CTbvYE%y z^z-kWHO0=N=BR#Q*rsTkQnNk6bs%TreVW6zQIS*0ts2FJOt`1358-~29jK|IcY%aq zHtUj!fMd?GhM5qju04@*Fl7@y@9Xoc0b^5ns!w>8 zqA-*hLJqkK%IOaJ&P@Cd@bt|0MTj=k^6l4tb(4)G`tb(Zrpz<0DvbPkstNNtpxLnw zk_=tl7%S~}=S}zrp!xINnF6UDpe|uMm#-;FI~2RwV)u?^VvUBqmBk}Bsw6;<{b3gO z^Y2c|T+>O4s14S4VLRLYK2j#$_NL7g0wN}!ZwizLK<+LLCq<|SU}9D)*)3--J0y@( z)n6zF+2f9;b}f;&8CW7^Gi{(va(?6K5^m_t=v#KZs5&?ma*w|YLFQ^5EW5O(gw8wk zeSK@4aJO}b;Z@IIZA~XrZYV(B>mj;%7L}I8C%bH0)`V4xAGZ8vzRA52?dLEn4N0kp zJ9p(&!vB&swJjdiv}``{lxl*H&vt*6Aw5d2{Lb3nbHBa0rD!v4#D+063AD&}gU^;|O?*47eIrT4p@D%UC@0DyMAe3MW< zGYN;M*W;IyGp(3IeemocIsDuJ_vLPn?k-~Z>A|qYlVq>R^7$u2Q(dl@;)h2j%6Xxo z0C6x|X0b^?NK-*gR>B;KRGFfrl=3Ki$MouYlHcBbB(+u1l=f}KY;2=tdhfzYJ!t<%cy^ei*M+hAV(eIS|$P@rAI?B>Iq`EqW;Yro!UsqS(%F}vj{)Xz&f zWvqF*rCv~);xTIAAbH3 zsOjanGWsTkd3PUVA)u|Y&mVki?Lw(^LS#rL*r7lFTe5urmtuMFe>A`51NThz+rPJtE8p=!14^QIn?@~1@!$XSfW)lQ8l0TnOx+t*Jz-jvx_V+Wh?hoFfZ*`h*(?+IYsauRU)k)AGTt)|toVV4c7kz2<$_!gYV$1tO9xxXg>dQ8( zu7h6T6a%SH*y7E;uL-QL+ZYeuEDti3tZhc)C2aia>+S&u&;lgfOLtQJpLu3MZtWff z^>$C0d0YooXqv(V4tKN`A9oAD*w>|8S9n74Ksp zueCqXRNBwH4*2uBth5^0!Ovl6u70&gBJ*?O#4^AJZFdzs5+n0Mw7(q*x31aOJK9acP#tslK44eKf^_6Vx z0&C{HE%C{!2vxUeCE2~xD(PFh))rF9_45i2NYGlF7i>#Vk0z1)y6IQ39Q=|enUMe& za|#Q^x?PyNFFU6~{Esxh8c;g!zwf~&P@J3gz^B~b@13p#a|~;~EN-dPCrHLj=Yr2o z7Y>`5xHIjC3sx-?-!p$xckQKfyH{e9Ka@2~4&wG@rg&>mJVG|1H^Qx)QYx`)3uZ8K z>sXbU$FZ_zBOS>g(W#sYIy&Hw_`m1g33hufzjc9>=)kRjEOM;5&$bzdRe!>Pm0)PT zBW7=QivAH#Ceu&a9=rc0X3@&~`C=+cAZ8FHF@3Lsj4ie^(zcQQO(~FfAJP(*d{6s+ zvK;YBZ0s8=iKdFXepOW4(N+mF)wv1BLWAvMpGwx5AmG-hIqP8ir{{gwxz4kZr64ci zsaFhQ*Q+szkg<~*y|(T^@i)X0a)Y?sHp7IcsPAWk8OMiWN4f0RWf>Lt$MWHKl%6eo zf?jTR&@h!SQ9nYIlY_>2g})KmlV=mfsdnT}n2<2B6Fi+kd?C<`An)F+loexk(QIBh z9iB>O2jtji&j3FIVz;sCb$T|-K2;33z?FS}*@5mJg2GqO91!?Q7-&D%<;Hc{o4rmV z;I4D%`EX&fe_99g>cX<`O0vFP1>|(SL}YSv*cd%}zbY^&SISHH#T?hgM4wfa+r@ld z#880BCtFLxY?c&>CfIobs&t$xm__e=-H@%m^ShhQtpWeaDRXsp5zBMcv?=QU_@>&a zr{4KP0z9jGPGFUd2?qJik6*GD>K7O>;Avc&*Rp1ii(l36) zdZTM(xPf4%g9VWsdKDwR;-gQA&4?QQNfmv9Xx(u+2#^$ z>6qUE!jo)@eY4hf+c7z|`(y`BsUQH@(>~_U-{W0O`Oa>9=d~3q5K22T<68 z?kIeC_@i{9>OR_SDU0RVLI2F(uTvcOsR!{3wki7aozHh<*g#k^^$VzB)t`*|$Y@;r z_yWWJGcw&8nTJ_^T0}b;HHn}Uop4NdXk*@Z!hRaQ%~X}U!vFKv)!A?MD*kl8rl8(d zZ*0!}1Ca{!yQ)DkS1@uWF#hJ%kK-YG7G+wYyzDVM<#xaNr{u)ro$dDO6J28kIh8jD zwoW9v2V3rRFK<@RGsH-r`ymd=xKY@7AXO6y11FKxJA?} zGb_f_%<+qNnt5@CHcFB6g=~O=@Y3trK7(*+ns}Y39OOuv3^>CwG@U*htk*MGBmE&b zuF_u6peK9N*zch?zeaxFgmzs^yn(yxAllw7ZsBjJXj?Qc_k~schq7u!WkgS!aE?g5 z5R&4HxngFUn_gLKocOEdyHYlnFS8%l1x8$JnA)f37nJio@`QiJ>?soKenAX~40cns z2xxBXFXiYoZN?9M>4aLTk56~HWc7@-h^Z(zBHKrl`5;=ms4D+P_%c%5e7N^@(tP_0 zggMC|luLgTwg^T35d48r?&bbg62BJ`jr}8uM0FB>PJgHrFVk;Ul@uIToChOdEKi~FEg*=)zLYBi#9F1Kv z%z0w?5731zd%-&m4gEGfj~drGg6Z^MQX*bYl?&d`KZO03`m*cv>w{1Sxq}WNRT*yt z)J0Ybd=I|>lR7MHZokceU_ zJALjTWAH**ZaIi1-xY>o+Jn^hr9%z$@d+a;*%njFfOPoP%-F*q5Fm_I?$W}JFh(K% z^yZl|7d8DxxM!{avf8xMaE!rqg4chwyG3Ou2pYvS@~FXG z36!ObVPU?ls34s_X3(w_E!uLH%?xb|A9912XWNZNv%YM9#zS0XlwxV(1D>GrSN8{oqd@Bok>%3-98osu9h&<1m&jb^bASUPpdK`k@;a&$yyOWx zn-<_wP7B3!bY5s^R5uC=Gpb}{=z<$+5%x67>8k9h=t18}f<@)^R%>O&BmYQ$YtMX; z+=^1|yr2c`4B6A#zga{C3Vi3~?icRb%brOOBqyj;6CYwVeP83pX1F!5P^-`h{YCaZ z2@t5qpIg9Oz6LK3%_8U2c(B~)w72t$pnFCM4}HyG^B=S*)z)$F4Qk$bCGK1$Kk?qd zN1Oieo`>wm>w;$R>c!VT3=%y;Rj)0fdI}PMN%j&pcF81qOjmX90(|+O?h2e{2-SLe zs?&@@kt|a+R&wsW43iys_aY*H1lDtx!k6rXbtGHMXT*`|UYI$*e;4OF`E4cEa6ZN4 zn<~xJd2MXsDy(&PEvmx7m^PdEv+Zo{RI``}-es7bSa^xUW05xDkE{1~fmPc@_sh}; z&O_dO(Q&u?r?xH7IXX*_faQw(^~-Lf!6&Q!eA#&krs0jDhB0yChiQf#3ITX&6LNp~ z#D4&s4txt852&o}dE3m#>$3B0FnOsHAs>1&B}i+kYsY2bMvWOqEvRn0o6^5N*m2xA zhofTTMex4fIr?q<8C*$My5`l;D=Dge@b-QFoqE2*dn z(R|f2`ccMQFJGehivqp2+68p#M!;W?d!uM8tBTdyq85N`vwTdW2|``js_ME10`&>8 zFIA|`6x=FRVPp_yr!jgvDt|eqe*hgVjMj{B36mwD=1To$TfOCF)hEN>9Sa67)}$34 zMj0C{slSqHO|$k4Pveh&w!2wv(s`bD!ly4DJsi$yt3LG83^_i+SVkn0mVf+ z<)l0P++JMxgUii>dtKGDpS#=1^z5pKn8}8>$;;V9UV4|e;u!k#a|JFLyzmPd!I0wp zk>>%2xrBSUgu!B5G?llG`9dPyAAq!@Yi9Gp{L^A)?cOiNt@Qd|W%jHzquHEBLn+tq zMwiY%myT_UUS#^%a__S-d0*&zP1Mecs^mH=hWjn93@fvwGf|ggg25if?jhw&p0c_2 zu%vgUKVuNnsl7%-4?K}8Ih4PMKH=bpe4ujc_}1HT_9=}_;90&(JTAgE0Q!0UkUf9@ zTvxSg$6}0Mmh-&<^U3GJQM^$~wO??$@6{-yTgu!&5Fkjtdiq0sNh4&#q=?#M5H++FL2rPi0Y zX?J|GP2pL7TSayMqU6C^Es7jNb&WO+U>6m3Sp6`|Ndesh6@h3Lmer}I>=iz)eOjC( z1yJ~RNN!?`7+Ik4x9?qhpj|tiFH)qSvz@kOIyOr6^X@C65%2cAQAXtlCx?|WhyJHu zzL*BeliJ^wmj+Y9TljBLqCQ6-LJ*Y3A8Gc4Aw!?;1+>1$n-(FgI z$W7NJJ9zjefb<_=;^LY&QV~pem}E|b9xHUu4q z8r9`L<5k0i_t{bmF}FXU`G)Qji$^b?e1)~SzIr&K>ab|H<8@XyoG6~>{?Jjl9r~aS zGMXf;#kbn}^6*F=?8cpUmhMx1pD8NR!_%|Xq_|yh%40T|D}(n5-Ur25T;*U0VX$;8 z1bpeI!v%XarJu>iEr;txzi*$8-{igjq^L%L8^HDJFh7mw1eBv~Udg*c>SP{JZI9&5 zVz)7&6qAU(t>0<~mtFx*j`{7hW@K2ImzV?P_W4%pNvbaBX6;gH)26GR=x^}2A=2nZ z;omslO5paB&56*^b~9+}exUYA$9evI&v~Ab( zZn+4&y*A1EnDK z^V_nmw%veBkU+;nne#SBSm=!R&;>d&yL;)h0%$M*o%h^nYeq3_hj!xPRJ2`-7D%-{ z?TsWQfOd8I9E4T2<=QgeYMzeGs(AnDNk&p}bS;I2!J2r?&w4ERqU(=t*4yOZ0V*=s zWx+l-$K#qR8LJ_yP$3kDt~My4XL-=S6DC}mQFd3!#qY}5^2&f>mpXy{)T8%;;trT~ zJ0(k1BzpDU-@S4vmx&DR1)jsSCRoB+HJT}d9`|TAc1PYMRyvdy>$fTHkoqB?3z_3v za;=AUW5ILp-&jMOe)D?M9Inev35H27SoK~T!hM@gk-wh_Blk(YdztG_z3x_9S*-3> zAJ11P7JCk~1>PPx2iIWo$!*{NyVBvDT4CBTBEP8=cP=1(aMZ87T)lECmB)k4b~l$; zMxXbz>F4Wv4W+H3ssBQbz)!LymDHg?h!lQ*GPQ$S@Jj~VnY$5es1WSCW45}}NAdJw zgPia>*q~@}`EHl`&UxsAwsWUN(1TKG>D6l2s|AOyf3w1-I$s^^e;i;mLjN8SB?Sfx=&akiUe?Eebw*M-TY28F{k$3WzG)bK z-DqzY380JehJJ_HD+tFBk~X%q+==1+13((&ytZsn!u74Y_MN~?OKKck>f2yVPe`R~ z-fFKaX{yNyyOmAS?;Jh`COxpaO753B=R-|_T%gFKy?UN=dqHN+BXYB%CC)krVFZOX zXg41$avS)O)M{)NZ+T&dgIlwH@yK;FWqJ9xq0^Nkr~FE3T=!sL-I}&M)(4aK;Y2Tx zkos*R{<`8HU)$gED98&Jv1(21zEU2HY}u*kzxKdP0qo@&yKVP;K1XzX@c+53{OCsZ z7xt(4X}scnc<%b&3mmfNu7!b5-2II~5qur#z1N!yy}peWTS>QpnJ^LttU3E_@(~Wa zx1XZ<;Vsyu6zzi=4qmO-vUn3p|I1(r*U9MT*dcIF{y)l zRvS;9w=ms($*E8Moc|^=veU=sd=z0@V`KZ$Q(RL|Zy-*V)>$O1Jk+UFb>Hc&`%82= zPnS#t%l(8nrakbYJ$yq0mG%{t*PrACbYcJ30simP|gkMWA&%)?JB zEE#aO=PllG5|;S1YD%YBlbTo{pd&wniYu6XUvJI+_|RtA zuD`oAa5MNIsAt4KAdQ(g5tCWQ(tx+{5u>XT>5nQtuaS|Y7KC8&SJ>k=@=r}a;8{xd z=UwPN;I1XQYXC)CZ|;T+OEg>jLgc-y@*;2AF=Not(f}IWu^w*5W~}!1{HM!n?6MtZ z>1F&eRiO4y0qkODvZe~lpI&l`(;a0~GeX0as`$xe5wwdPQ#}f*UAw98o!Pl52%4`o zpudb$%v@Gkz&c6wlV2S1a|lghD`s-t+D>M=L}ZxCrOaiOSIZStfxxr%IGoSaD8&oq z^*T$FD|4Een7z2;vRF0S{&cQ;u%XUwzKS^*<)j$)8&4)(%qtgs3x_z5Zu&T0_NBUq zDlL`KyE8%0{Ze`KyM(CxKY&taV1riF9abErX0`rNCA?!R$y2IMwl!)OZF+3IWvm@l ztGX!^^i*MrW)tI+p9Lt^HJ(|@tuC%2xBd9+jm$b{$J^AyDPHW;G%Gm!v#}~ZVhOct zcW4f&V!^eV&~j-OU*$}9Pv85Bd5Z;3#5^*0#;%h-)45G%4#`iE%$;tL^<3DOT(5iv zY+c{Fg;u88#bf)_Hz>CjtC78ky(pG^6WC5MN1AJl9PtyWYW66DSdx~&H~3ah2T1Pp zca%|!Pnl+I_Xdmt&N}kiYXsl?5c@Mj^Ajh zDHsP$sxj6Be z!3_Qw6U{*LYX^eoJ^v@|Klh+nA-(o$ zYJGb5tQmreV|%cczTBaYy#QIK%ZSwMhMGvsEqPh7&R~Z+3p;w8D;>oXIH=ZkF8$7( zJ6lfR2U6NoZUd>KQuS6WjqJkY2X&RQL^PH;8OU3|O63G!sq0n+T2dj1&pao_avC0S$660O0f=H-fGfQv`KwfW3m zaAQ#2F&5#qBf4*wNh=)ZxtvC6a+TiN*aqc0zX+?WB81)j zlbLX$6)9CzdjyLzNyZV$JBvR>g>T_C!S|eidM(4jD^Jpx&P)x^b%O_JQuHw+oIXV$Uhx9Y3GCj@bfi?lO-z2AB8CU zIy&tP(wPHT1QZ4;mZDN~SyTzVbO21yv?3O(>Av)oK)BhJW&O^Z6^+c@<=$viqyFY2 z$dwSU)qrrvMz_meMBCXHxBIQY+nPrTBZhwfeapI@Nu{^!T=mS|$MaAAoG%t$+q;+v zIm$0|0-$M}fsGm?Gceh0a03s*`JnZ^>yPyajy2+4oSvdiJ!Kk)Qd7B!Po)oSgD)8S1VgOPbBdbs;Y!WA{j35YRV$96t^;AcTeEmD~`VX3%@9|p3 zJ#@;$&Tz(aea7!t^ssZq){VAYMR2)B>r{ipu{wQMNv&CZBQZ)VBe#rq9}QHmxj*Uw z+FOo|vQ)JC*xtErH{@H1%3Zr5M=`aM#!&ULBw)P7Y#hP-ZQD>mq$l8!vB2iyBhhMO zt{MY)d2O-OL71@Lh(bTyA4Fx}zPjh9BCY&H%aDoGS2M@va?}eN>7E3-^p2`b0{O?g zE(ZFh8MPi=mn%CSCm+WP-|8n}I^O+XdH(=fex%Cb_)IC^8V<+mXCOryPLh?9bkOAH zvWVKe?-)xz8+bEF%O(Kc7g#dsRZl4DP9u}3-?DhljZ>;B$}^KwVLAw@nM)?bJCOd2 zF9F^lk(PtFFx#q;cG$bjeyfbtU~!2Ky{%Uc(0}MQZyPo)_x+6j8Em)7hZ!B*!$>$0 z4rzIGyK7t8W|;g(&Mxv6Nn0l4i6o`3{Cj_p1+A0rw}P*TVMm|;-{K%gVi{JIZh}dZ zN&kCgimy12GhSbwGX{_K*8CmcW;JMT2K9%@hb__Dx6HEOoj=YnsA3?jx4D$<^LFv~ z?K2Zku7`)iZ#16;o8&@o$Z{6T&b}MjO@LEK)$>gitHg+H@-b{)AVlVDbPAuGXjeM& ziXc%F_cB)Gcejwj-~dVa+#8#qPBD2cbx1x^YP6PpuyPZx{pqTFhrS@S0y};pz;y&q z<)nD5$Pk+MC9kBIS$wr)ks9q?4D*7^z)lyk084$J0Y6wPyA?erbjM@z zDTS~j3PBI6<%ejn(vlaw!D~jDNvJ{-fR<;uY)9rTzo@HtG$tr7Rqc@2wfw>}H$c-e z;_|i8{!1`L6Lt-SxZ19FtOM=kRg;J?#MAle*5@c-Khqt9$eRx7>g)#{5oV7J%H!N2V=c$55p@43MC zT)q3U1(T5D_cMbi^vr5M`@a2N3SNWtMs98-`svjCp8bz+8tA#HEPas8#-!G7?$;*7)P2fh8>UMu>kVe}d$7zFYX z3iC+l2;lGGwu*w38hr%>xNZXbAUYX`D+%oEl-8+HsYMNOY{m(>a&tdcQzc|7 z;BPWg6A(&=py0YE`uc!hTXx9jNI3@9PLVI`4})x&tFDH{B&}7Flk)>-ji`A+9Z0UmPl3||?LdHS_qknXZFOxHK3T&poxC=P#)d`|Rf58fh#~g5* zxo+G*&aM?r=IHrisEyX?cE%WV`5QJHC{@9~*P`J`qEh9|-$I~a$x?3CKX!Ajn^IKk zFymm`-gY*9;r_OzT{k~pFi$iXM*+J)vsKt%ty^l9Dt7XbPTzekv^#7X@!q)U=oCxM zEtj-Ie9G0hsTS!9yGXblMBTKW-L7O?QWtwC4ep~xtLQ2cU+F6Sy-ubyT8KYrS*F?Y z%Z_m@Ji`e1lZfDC7_IhurL%8Cy$qsnAr|H5PIO(v(azR*(zTYutAxn&`rE2@@ba&Jfc*d2S*q(+ z^-Wr(nAI98J;9i_BkOXO+&K`Ldn>oB9qSv-LV3beBzj3Pd2#QP|IQlh<``U7`{DWt z^(CS**Skg;1pZYu*ZpfhG?{5;@G8|>tGBn{&$Nw+Z%-=l zQH&eb=er!Az)^Wj$)6!Ou#+G3A7EhtR*8fi8aH@e4a$OBEEJAm;@ov#_jXJZ(xTMQ z-_cH=X_>ehHampuH`A;1WP3LDA#50WY}#x6T0K3z0%2j zLgByhGSr?Mr}CjXF^y-#I8OHX#sC?_jiVD{ZR#()cJcMnYWqU0}= z`xFkad!&K~atfeXQP(hYnZj1=(?(6(Q7 z4EAMg#=WTel+9FtD?0jNoAtwslgaBr0&q$*9er;=NNo9WUP-;aH{$vZc2F;{O87lc z`^I*|`%v!?X%!_9KM1WNH^9h2l{;<_pCmBZW|Qv-F*J6^!OH3W8CB8 zgBM-UXZ?Dqq2m{?uAnQRLdLfjpx$5j-FsG1=85l#3V#}2uBeiZ7|p%cltHGar5zcC zh7^;XSQnaAeGB^zf6YM=(Vl=L;ZK480NPuS);)i*LzCM*g|xge5I(uhZU6q<`s>%q zpeQzf*psi|A7J{gX8+>{i2{<}IOx+doCJ}KARF6(`Y&PU7M@?RcP2GIs@oHn-#$){ z7O3Uya`s}zTD?r1?J@Z;iQ+X;^$)u03o4Uh;)rSku66VMhR%Ngo9YN+ z!4DeVG6x>#kyr?t4_Uurm9x#?FhTQ!l+dyJtvYWk%jN9&Wj8t9rt*HtbhK;71l4FI z>m_MT=!)0a0yIvEf6p%OJa0s96R7-B!EUV*EvI#ajz0|{rmxPeM=q~iII2OytZtU7 zYI?@WIn4H=ur!RHZ#QI7)yu*P1KN;}rt8$0*ST;fCh%tXcnOBTi^OJT^h5etjb)$E z-5qq7aie`oE#>kdSFq&lRFl>5EzLqbd;n69=0xd!)O z60F0?k^Wgz-_TAWEGqF#I#mW;sc+EeAwkG^F7qc47PI!5<)1q;OgKlHW1x zxj3YV1iEv)Qh$ZVeHPJV40CB|(NCj0^*{VX(Q|^i~X9B`vb^PLx|UCP>PW z7%~`h(I;vn&>5&2;y9oUSPp-c<1W*lK)Ss$`|Z6Nf>QTN<|#S#F^G-6Rx0p*y#ZuL zP;I2+rl*oN*gek-zy$ z38ha~bX{GToOFW0P~pPBcyuMfZXHAGkYWc2$f^9UA9wonrbd-RL>remccA>7`BsE7 zEw!z(h5JlRtg4AcT6IH~-LGv}F!GYh&zg=Ws9Ir3BUiGTUICr6E(c_H?j4>^XGabv z$-%>x9HLoNL`bDhGkxRYC~+bB+qii}E$LWAp(t;PtDYEs?Z~k41J6kWzjm*;>B4o9 zHbkRH8b}ZK>r&N~uknzG&RLOERT;h>``W65p+-UvuVNS_RTAiMo=C8+vE^5E;H<+W z+7wFRrdP=BO8v?T{!Km9&_fl9|J)As`$WSw29#iqJIvy3RpLlnI&$adnkc(HQX>K& zqCn?`(U%4N!xIU77h9`CppdY)LgM;f=*qJ5y=@;xiT=u!dVq1p=NQ)O`Qi@v%_7B? z;s7}#zG+ihdz6biBoswrT*@Iq+^Wa|`8X~J{btfz)rZ42!ErjNdi!JJWx0e3%(01oZbepq z2sW2b(Z+MfMhEe8^>e_7)!^_N%qHXjHprq#R|U447yki(+L)v1HPi{^6g5Hzl0R%B zXTD=-THw#57SNfuleB0XYE(jN{5=zqrkbbBVbZgpf)Q^H@>Ho7$r_Z4py7V0e-L8lD(k}M(IGR z(jC7;UvCI~A+aPT=cD(f=NXwlCu;y=4hbAX3U5(bX}Fylo?j$_UfOlsC;3b4CaG|a z-fUVVg*?4FG%>zO0$bh#i;5u~Z8=iCgdqmBcjjV*i!oqbmQUX25YK?00Oc&k)M|Zy z&sWb}xw3q&zgmxR0TevbTEv8qvbOVf7;y7b!HWWqT-Z3pGn^~R4BH6W%ukSz?8f66$+z!9CO-$ko_lZ^+2nm?PRq-u?K^$KV>9RBM=(Q^2CbB-(8$stP z%2{TLh8IWkO}Zl*=gSX**0B0WW7xbfg)_xa+kN4sMV{}jg|%mfUBt+~ZQ53H7&$%9 zGi<~KUmmC4Pie~CACV7WDw}FN$|5KcejSSE#1w5Yov6+xKCx2zcSHhocG3Kt=2k9R&Mm@W zHMypGM#fpKFFkQ80QmDvrmSg}dMv~=t}rQHVjgvd;V21rr=DmnI7UQGMU4HJ;~uyP zWj@OJHhC&C3L0ru#Gu|uW|F;K84RiMJ5Z@xxq>5q7!wc+XS+=tDi@wCDos^9tv5vz z+V2V=G|V8UiN--k&K9Ni#tI>KO;dVXx=gL7c--qZb13^Xof~a9Dl?*NTVE6GU)~#O z!e|ZPe)$+eLluLPCJb3|VZe2gz6)JOP7AF6sPF+do(ot@R3oc*fX}G{44%OQnrha1 z^y`C&ESt+$EC#=R-d=KOJQ|$8mPMr!^!_0^2wsk$8^V{b!dZrMzKz!)qOp-l+cG*b z_*G^cin5-nfwVGOG9r$N-PP+QFC!V&j5HRK$A4g&g`xS z$Pyz6FG|w@bMK4`=WdCZAu-S+GX*#veuejtu@r7mELvTiPCdyGQPr^{mJlj^N!w7G zu1D(s=+rJycNI&0LO@2GEQw^vB;(5K$sG}0WlMzuAUxO$Mtxg(db2D7SuAT$eth>6 z&F`^jeKClQu9i6LZa-;??)h&l`5Bj=G9(h9PvrUZB3xE$pzU=cl)4fHrAQ?fx!t)~ zdgpfNC|VRJw-ONcq-q3i5AYL!e3Lly;Yfu-<|( zE$BdZR$drt;cWF~Q(#}WFU-$PQH3!b!nfG;&pnIGA4yY|S{h~P)Q{!l00&38QDOs* z5FaQR=-us`_4??q|F;TZv__JEmNOQ08BTl8o3uG#x4uTa= z#_ogxK@-_`s2II-1Qq3F!5HF+x&S-EM9S}%BB{~`w$&Tv5v8aiw#k>@0uLjdKO09O zcMZFF@d=Qfm`z)M}c8r9?bsxR^j&W|3kmI0? z_?Kt8jPk|sh}vMxGdOJNBSu>+ng6S70B$gV1{{;T94FFJi#p}G`wvj^;}p+22hnza zyP8sg*%UW4@y^aj+s?RXPLT3l44(GI5-J|`Y|)CR0XAV8gMz@FRtj^=#7G!Znowpq zxrsG5Zkr*-P#ayg0pNp_IYv|5?^5X@C z^!^`kp_y6qJvdSLC~z7c5?W;XK(`!i#FT0!t}8j6ce*7?X;D!NJQSo~#b#1YfYu5; zVO3r(Do80hB&Zk{VE`Ol8B2MT3n2=RkLZTsrV(AygaikZl)JumDDESP$ZdMpc$P35 z=zaY7vQX#hD*h1^A8B5q`*rD*D5WpOJnsZAC9Avlhxb~BY~}HVMw#{cj<6UeaL;Nt z`^NgU3|h3=`$d73IuVv~beYX^4Lfbmc6}oU4hvG;y1`_qeW)Vf)cW$hNN+g8l4N{u zZjTk!Z=(833NxRV_(-JO%`nTo5Ks%Tuhc$-^CCXkU4ESGm~d^3NsjJrbo6NY+W?+(24nUZ^9@Jd3`BKk zl@Y!eXULV-&zC;?-fj4=mzjZwp}*R(H{szCX%Q7p^W2E(4KgO)!(%k18t$LKTg7tf zSr$)5@ey1L>fy=-Cuec$Ml`Ho&ywZJzpr-UH}eWzy73D9>hTf?%nKS}b9Tc7F;!5J z=aMFrOPQr4J4qFDyN}V_eG@Ke_*p5_2@D{^)U%T%;6V->uFLBoZZrz)rMmQ((}M% zI(KFC$Cb&zi51q;D?`LKLq?!fJG|G&5Qm*e&*S$YEk>Hn)2iv`Or>-@sHx5#*~TAY2gKJOUV3I07Ty6?)8@$}*_moRQ>%+B{~@RP;Gy#`+E(onDLJwG^5S zR?fBy<2mLb<-w2Jub#hgwc9sm;bKO1tM?@oBW;oA&-&H6P8J3NiBYk{Ifzv7r)00az^rb5hJg z?QDrgJ7jf=22+K6YJ6I2#J)JTNJayn1Py8(q6GtCLJf#@Hzgp-Xw)Va}8d^P+>5jsC2?-%x=xtcMca=jyzmFp; zlaEP6H&GOV1 zG-}`ZM?*TQYd&uD{qAD0gj{k*FUYBWl$e~y^@WJ5-As*^j}V=E?2}K1*$h3&S{sM8 zDe5go1$ZXgwr6+#%$$Q0^XGzKqXNWzjSv4MUe6gKk7mjlVf|*ciju{xT-?*&L+bcY z*yn#Ov3giv@PnMk{f3Vk9$ysFG<@b)T!L$nWH+3%o^>+Q*0=Od$)iE1ruJ_Yx-dU!_g;F^+ zoq3t50-*DUBn$kT%Th^WFYplJl|7`g9#K^uD}qR%gB4$qg^_OOq&X&A4BumCuNfXD z6FNix5hH#sLh6!*y$W7^jLMLzi4$G($B+^(FP94SJ6&v}L>Xi2ieL5KdhvV2A#K{d zu?lMmr1!}2?-voXrl_2-5y>=8i54y0*szHzR0U~%bT|<|kok6u%W&&%s;YV5QJcCL zGtE~=co=QCYiH_%;~|1~wyIQW^C_|koYdVmMsvL99mq?uU(^}QM`E3R6c(E1^zcd1 zDY4V87LN;X@D>%}d|)Hhk8kk>d~OW6A%q7);UmQa)747d14N-M&Q>an zMU|-5D^v~?`fMJbWQL&T{i&vW%s1HQF}NQww3TBcs2323sgS3(`Aa3^PrfMI{KW(C zs`le?W^0Z-W|LRimBv@T$WIX#8llCE{sokoukwCz)iwBQRx?e?mG7qVg%2l$IC;6M zbO^9PsX&rF6e5fc4^>#q!^bL$y^tSiOSp4t zCJ6=JSG&3~;F%#)cS+_DM#L_Q!c(PYmEEzf?1uW6cB!f{a=S0^q6w#UO9E$82+f6j zUgqy@79!gC1VAl>Z1&B5L&Z?lj6iNS&a4~sT_oJRqNcNSa=-+LVS2Yg@S{GVrXqzd zDl`^7;}30JdCY8X*2V7E>x2oTCS8prhGa-lMk;E%G|8t{su=Fvsz~oLM?_Uv&9H?a zhMEERHSk*MgUU3SqR%*dY7Pf=)l~=pi36oy95FM)6OXDzEx{(@k78FgmN|%)rycGU zle!{&Mlz>$(8qpH(kq!PgMpB0y;eqsi>bv}atJ;xi5^w?K|BUh6w(NnK#kbz@8i_Be=w2{sT0$|I+nL2_|vw+mCZl9?w(+LqFcpN-1 zcdB3njTl;i9FuFlZ|H7W3j@}=-zM~y7?F$PY92bZdgw;`#`odswi;=J1N~a$`K;@VUReoVU|S6`C!pbrm~=jL;}d2h1ybNP{YI z99f55Np*_V8dCr^^je{Wml7B>JXI%-p)E`zv_C6n8sI>F@|e>48WXisX0i~=83Lpb z7m|61*fdmv`=hlugCZlFU-->_Zs0N>#N?SG2-5;LKNR~~^s(?u(57fI`v6SS8^ zv|vE|P>b6$(cr0&WkN*W2Kvucu+?8FirA^~*jH>PoEk9d%|Z~FRczC~|#ciB@{MD7~X)03?Q5wxGsU;aEmcA$}Djf}?|) zV3KG;2+@fMfCnwsNrXB)VXVmzy$nQp^zY3neaaZwwUsEW@aE%>+RY=LNIL38LO%HZ zRx#UL*>)o+(m>mqUZHS-ZB=4?_)zE=uJ$oiTOOs>*4R`kJ8p6BS!ozKaZOz$JQQSQ z$(!V(**$`)9;!hn1y_H`04Eurtbnn@%^Si!EPFWXru@NFxY|g!-Dgi|?WwHfyIFBO z8zEV0HL}?WcA05~rGe69wmOz}N-qjo$P>ZDfmP3B0pu`z9i!xp1=>?el$D!6hn=e& z#=xx@Iu#enx<vmPrZQyX%hoX+dmB5_`RHZeb2cq3}jK^ zTarhhr)t)w%YVEz=$XTjrJ_PaiGLUPNX`LSolcX&OiqLPq_YjcgXIWfr;@6CZXUlx zIM667l#Iti$bP)TXRokUWnD)}Bg%s?;#bR%Y;nDGAW>SfVoEyo>$sedFev z;*5{xM};cX=`)|fT+dEEIsxI&P;gMCKrjZ1ZI%Y2>F^4%6p_GJ6PM~|rUO)xNG81c zbDiK1D_Qv4=n;sqQY1DnCuF#YmDq^X$0Zl&h%kgmXd<`h{X4rP{z)di>C#fGJIIjT#knw(D>7QRh>7j>5{=2H?0!Bk2R#BZa;zUZq^P3#|Kd?67{I) z_+ge1n@NHTZ#+Iskjc9p*%`sPut?pLwBw3iflQQFt%ykW%EPouu{L=B9=V<80CGU# zg)M4eT!N?~&CS9K8Y(6uFN)T-Mgvkc>7wc`VDxHWrn^iZ&)uCYn<7_Oh;gbUSkS^D zI5pbnmNkt_#}H0C%1i6MqhpE>4a1AEm!6E3LPiPIb!NrKSz;!L>;QlsrKWw#ogs&M zU(V>>8MY;z%6`8GPa51w>Hy60=~H3=%9(t7t2iyLda42ft~T&A_D#%Vv~y(R41)6C zkesUSA8PjCC~YS9kH0rp2JgsEuAZyspkYg6ipEl>BHK=q?c(@mpbqTdpd1-08LH%< zF)R(ooo1~SngUApiwq%xLvZ11MW9{(vWi|fU5PXllp}H_4b+a$mL$A-e(2$KMQJ`^g zaLENmPOjMAXeq^WQtC#Q$&Y@=ZNDL67Kj+~SgRZnR6S_s2jI3-h<5BPfjz|4wjYw= zH_Yo1ZWbC8`ia%)^Elo^oriRTbj`fEK;V$Yl*_0HWO(A{kz_%qb7%2&h)|o)rp0riW#n+EK z!eh%42X06-N438&0Ns<#kbk^!vf>CXlFf$FumxAH7peYH(>Hkv#fxjJFSERPqOGV8V$81?%%77%e4V`P^c zgA_gh6yj@(xrS1CY4ZW|kgfG2S~>l7=E>@;fFngMW05soa@#k4HQ`~Vcv=1k<44cE z^B$S)Qq^r4G;D{BP4tl3R&?hz<*)=VXq?<$EP9q5G8UG)ih0c{ud1VauWCiOj)7Ky zBd1ISFmkiKPJ8W>;^Im&`_lfb91s#h%g?HLXQ-oK{3?5$})z!)L0kSt%Ojd3{9JKU$&b#BwJnA8SolBKj?StKuleC znm$O&RHelL9M}$o>f$5o9m`e;+s_MI1UyRe7_CpBFs~ev^D;esE&iPnmULZ?yU$AH z8SiE+X{vtyx^uZt&rd+3@zmlhoOU;3_;)YJz`oly=spx<*w+vPu2l0r`Opq49Y#pCEAE%s_npH4- zRx{G-GbEUvdw~^iQ%yM=2NgTNg!qhmL2gF!#CjlE*+Bv!zNC`?y?49mk5L%876joT znzieTrj|JYB9*Qk1%OTsza4E>scnuL%S&FbZ4G0j#)f9MWXc`?)>^Ab|O1N6G^p#Rt)29&RS2&0rGb|hC zgaM0a5HTX(0!z{6fl&q+-)XED!P45T8~jI;lB514e?7i0ia3^2GGTF@~Ift;Zw!62MJbY)zRG>bU85JYEa&^ZB59hM=O`7!9Gwcg;#5eZ@dg!L>F9V-> z&=xJ{$2QP$L>Ng-1lExNHR5va1@CQW8u9$>=RhDs_)){M^VT$?94_UT)r>m&27$Xd z0wnL#rxu=$gHl`MXl<GafL0i9mU{eEK{8L05ulHY7Oz2z1qcl?0rhDk7X)J}q)n16Gig}h z6e}y$?X>(NDuPO4JQdMg;G~cMDe7R&>5*ha;QIyi-!@2uw(Fn8vfwgQka6`Z7>_>_ zGB8TB*09M9Rw_BJ!~|r-ODhQVp{Sv-gfp(W9Fwk4-dSJ2yr0OD_tX7AeL7{E9x z#d79U(WZL1xOT&ak-jN+Q=G(j5g_0DmUKjiVogX`8j_Ys=#QuIZ3xN@dZ0O`{8!wl zP(G_^v?W(PYP{}a)i`dUH@FUaUpT};Vfd@012U;A#S@{U#tun+7V|gMf#FvtR+nyrEfnGFZrISa2fF}Pv$&G`fl{*py3Wlt_ zloga{eGL?wtHE&GnZ53*QN>J*j*(MQ58Y*Z>le<8aJi{C7**U?DVmOkvNAzvCxuYj z-;0dIm>7c&8`)SI4%_e4<)q38@cHnoltL<*+Tj>z_%5;$V>y-eJX0%g=(M#ORM&vPmdhZ{WP9YzBqwpVg&>_>DctyBcDCw}H%MOkW{ zcn<2Itk}{>w91NtIM~P^<%2I&G^r@%kRohGa3VN|?Lm-~c){~rD)CJVvwRz-iu2zl z>c}iq=D0{ud(t00$?cx{15`+OPhH-VJIS(0Tmr6W*J5BMsMQQwcp6<@%N;sAaD)?` z3IK-$@=t$({1eq&UQ+BeKShajB_ZHI4P&cAtFF#6=pF>6?l1imWo1)57LL zD!{IJ5Cqshm($BbRi*LOe&DMt9BBj|;SO&SaQwy{HZDS5)93v^0I)z$zhw1DQ9e_v z=b?ty&0IxhWbVr@d@p$X_dKX0=+IsU`_SyK;9}I*fn1X$8U0&ki_8cXVG!RF0kbPx zUHF-}HFGz`wVJY&T&KlvEWa@Fvtpu+i)3u^#KBw|4Bh2Af*V4t=qN7PnEQOW)KGE` z9Eh-#b}b4ll-5w$BnBn6@HqqC)ck^|)tMo5ELyvj>?gkT`+~FSstS)=LvJeJ^{KTP zgv}C+2%Ui-Ni$;-&*Ss1wcNH-e=-9FQo|y^jYu`j8vvUvhMaGu@{@+W_oq#3Uj{-5 znDt4CzF(G!C>ytYd&Jt!n8ma#az#tQUkD0p!1ASJBqRx4m6#-z2eL*q`_T3Nf}@o0 z-rTGl3k8sTb`!md3R1z@IQdlK! z2Jy|rkjx?usYHOPmCDjLEP3c)i4ck~1CKr5xS6zs=Tw!k(tc9&&?=B6WI+}-S6j-@ zNT*76fqO(OB1;frDYFGLP?yrX`OJc1!?c4mssfVTma$E%V-c)Ll}FZ=h*_`Un--M|Qb|C|(E%^p%v8bCr^c1{ zkAluJ0R-sSfw%yuVv&Pyg+TQoWcsow(m}m;4b>*!0q-i|mwE*JJ)?izPPBS~Z?rcF z6Ws`K8rMcct%o@F)Ak^{9x1nhRH<34qVRj>Di7|#?#?yhz_K;ocaF1azYFCqp(o!~ zuy~wIIi!MS3vi!d%TIg9WcpZ|nGQI~FmUe~%&&1><8?430dW8cteOhS6LHa@36|kN z&B1dhE~PQlBI^YRAUihd_^+))WKJp&8;S`sGE;=zl=V?r6DIeF@4vt5z7tSx(nzv5 z9TwwugQph5tpjD37;b#0-0f#x#$B*u7j1{(4lyX9$EFXd z{<*1szI)}=FHmm*7<9f_M!Ljc>JiAQoyF5u&PcY>Qs1|yO?NGHqOIGk-J#+0 z%G7nIMUk%KVRdDqaMrMH{#%X?JPd1|IiFuRYMvC5UF0BKSScAplt3p<69%+nzWdgP z&5OQVSDJdwqzV7TJ7^Z?Bia0(kXx@Y8aLX z>t%_aF--!FSTaF`7q1n=obpvzSx0BHY*XL$&Y+&#amoSCjAqo2OF8J)On9Wp@t#_= z)25W7f88$y*L-?7Ve%3KV}+~PCPJ-Zlx79X1lK*gXM1f+&+9Rb`MF+VmwAwD4-ho& zrI#`|{TEr~BEG@&xmpvhmW7x^RQLC!#bzzX zxFEH*f3DnS-j#R`yq{3;G?fsmRXPp=0Qyhxk_*>OE$_SQwV>2apnyjTBVe@tB^(oo z978&ktjc@asX$SAv(ehpa97TLb?eNK&6A3^d2=pv2XfIeduOieF)$?Iad-ttAr);D z!KOY`PX0{FQNn&`!!lQ33Ub6f9yA$2{{Ts1G38cN04c#+h!CW>F%Sda0PEUUX_wCX`=A0ms~%u_xEpl6y;J*+=9n55-8q4QF~NGg+!}lS!mqfT8#+1 z&RSw05wd^;iIlyMwViIkfuO~ZG7k<#EYQo@R$yc(RniLkD>szw0`c8{gR&}B#P`hK zf7M3#37~=o783y1y=GIkysJaY&fmK@(kN6_Hj6bIm$q~zmBS9U;!X8uBw1k(DxmiaNaqiV58&s+4HCh`5NAH7O-WoS3MqS@(40J|z)@9FmSvHKB5#^x7?i zM&jT!I#eIeKehs$8lcnu(E|Ib%H<@yq1ds2NDxF8q#H?lM&%Y+aCvUR%ngAhp+J(T zQdv~ww^uFb`Y7JXE*)u;OoIL7LI5FDEV)I(Nx;}7Ln>5mtsLo?R)l5ezw3d~3ZOg# zyu%UN?6%du-hFd?(-b((ZH@5ZEw9Luc>TjE&h`hK*OOzhesyKo9^VmI#`ZErdvd zfKrLDnWk{l+R@Qc7;!OeL>6o^AfE)vKh=+4wa(VKBl${n+HLis_}nn{38 z=rn|fqi(x-Mg_!{E8*nCWWx?8kf(K;iy=dkhD^$aY~7N8V6W&0UHtR$@Y^HLe_sG$Zbf>RvMMX?<03mfI+aDs zD}p)P`s$1rrd&M;CI$3R=pqn<(2$DCa9}~ioWfYxCKzap%QE|&d+ATI%mUDcjPc0K zX;(Egln7{Ih^{`nqM0x^W!+i5pWXAn-RXNX>_iU}YHJg*RAb157+kjKlYJf9N{}fi zfdFDwVbR`SO&_W%ngF(72IQ~GoLaPpUj_G46nH2c94r6|7c8SyN|_GulyDNsf?SLh zj+w|weq)Dn)W7W~oR0($q#&4J2-j88b%q-x3rmM;7g@72M~xOIy zL)3_v&OHNhjz%0NkTq<^&Q47TqM!mm zDM*C85MBnn`mNI*Z$4&PI?4Walvlw93 zdU7zqvPs9V3LC)yKt~=?n?=%sC=e(OJj`)Mtp$ZAw-?NAa%T=@AdPP@eO{2yOOx@X z?S^e^E)Gs-c!gMLfksSaX$7^+2)IPGExAS=(|3IsN+Y}LwsWNDQXqV?gN6(d>7EcH z00dwbGofo+ZXLajQ4E$Hsx^-L&cZs*2 zCpNunXN1Hyp*R>D zr%aYqEr5_uED}5(rzj}ZIgz&~GX|m>(S3NvnM19HMUe=SAdOM8n$4PgMrfPz*9)R>+}0ZHRuLjx-jJb) z$bTR)A?IWyohpVt38IBVO%3EIIg9a?Qc9Z4r3_IQScKLHk^;(QGSW{hfI`LaS0PWt z6gN0k!5#QBg6u%GkJ)g!8$B0OQiVP_%?tJOxJV?E63_(+NZFAl7`d$k{?O@KUjmfM zvQZ;}RhmJ3D5J+Iv_~0M`h`Za4hyv}=fMwP?R60hSRi3#GD@i?)cOMWUOofgbBLubC=%uSV>I#xkWL%Y!ecR(VK zR8PD$EK;(}vg*r0q@payDY3^LSMjEVy;2i+4(Z&RSI z3=wW)ao-MgpcT1B5Taff`8F0f$jt4f({x)oRrRMOa+ZFW{N`36Xn7O3_`USTzwWeW zOpn0{=<3H^9VN&saNixOqR>U;ktGV~!R+7NcQ5XRPy(~f9!GN{C8)2UOPhy4ou(wk z8+iSCGBR!iOaNDW?dPs)JMTH8on*Q0#L|W+PECj&t*48dB5Vu>8!gs9l6=?`L>4Cg zE7FCSAQyqih#`W-g4Wuy_0biv#{yXFj5?IrOL`z+gv@{vlo5^@1Da{Qy4Y>QS4xkR z6-j`k?oNY5B1GR73;+NCAOIu2mD6uyaL2JBBCjI2w3Wr(E67v34UnMWfRRW7kL{|u z&f~8s)5M-MJFhHtSgIKBIYbe*&_TpUaYAVFi2#8_yFudY#2p{OV6wCh%LTe}#9I{y z4~pE)_4A?ZaD(^Hlgjw0qwPME^V>(T(xR-m!EBy-$^y|8oCDvgv=BC4{@^`sTiW-NGt6*WSKI z+fm2n?fVzyP*fEZeJ`<4ckT6VKM%ovn)`;;2M*JgkaNNc?;E%*R2b90tv0UBy1pu? zKfQhPQBYUf;e)=Bef@gozH{y1;(K36TE2f4;xx;md31nFSWwPmdTEF#09T?kL~y|% zI~jta>k=LqK=^rEgq>CkSLj)O4D)a7Mfg^PwR+s)EdEsEG5J4N7Cod%W2J z5VWufl`<-yGspN3)o0)CGSN z1SQKD%mYz#A@*9LBt+BQH{3_bN&rxTI4jmwJg2jfW~?-n>ZRF*7;!#XYWFzj(gJz= z)VBMl^??xu3<%;nRiL&l~s5?O5Pb6&TT)i${mo57C)llgYE?}EV<@S2j; z&bdC`TIK0-^ovC(U4@CsNCX53j@n~oa`d@+LMDaNV)w{9ek+&#{2g-C2Z{h+1<|)E zfI|q5G-8~+E?$v&)yoe@#C^CbBNAC#Cy7e>T0HOtcF=?jIh zzUby{I#WOmgmDXEoV_kykb4lgNj%EQmV@v+b*@){sgxCwJ<()ThSEcMdk`-*%hKiP za`c<-6wjEZ65JTBUY9RRm!P0WH2ZH8hxJ^)Z#8oCxq4IB7mZAqY@L0G@oUY9RRI%74BStyKv z5pV0KFH4uDtYxJFNV^*H_^w;q{6BTe(&gz0R3J0A6@}mzOWrL9JeAAR<>^X6p)`f4 z+MsBVvAi+B>zAd=))0(LmpiWmT)i${k^^uBZ(2E@iuoKjL1X)AT!k)Plp$D>^8DlK zfXNsvFB=HViJ=CL{$$`Tsd64seY$%ZUUvkj{n zp%hR8lS^xp~Qm8`UJ6XdX((eb1!R-y05+ zgcG0{Ng8~`XX@i%^;CO%<>TJB*LBWuO}xVEh`nsNXn{}gc7C`k~3b?`h{v`gvkVwiEA}A4boY5 zGe9%pWu=UF{l`r2eo-cMZ6S>iucoHaPbkmGPgq9^0C`#?C(+pvP|ceeODM(W3p?z^Z*L-g={u0GMbz~3wDubbdx8;bY= zA}mHoYeB4^#~?*vB+LM$n5=mrVyH#Yi9+f~j!Gs|6;y(TU{bpnixET8V8^o;2P<|@1`l=H2&&W!c@Dom&81ww%V!^s_yH%rE8%{)nd*HC z_>ZnVmt}l+?Z>+2{MUHd$KifTFivhJW6Yri-h2Z-eh1rg_&#rfeiwo#q41x8O6wm7 z{P+yLGHxsjL(T>&*J^ui;_qhIR>8!Z_0G;;m7U&3wu%hS@l>jQh zv`h@h4>@ijVA_^ijxD5x^JM1epgu)Jpxu#Owr%TI`$Ear0RjQYjp^DT_)eZBh$=J% z;0ZNA52Ak`_pRUl0{K5)ahG3%Q9rte> zR#Ev=P{N54P7Wx_Ic^y?8!{GwO{r-~5a2W$KY8P?R5@U~dwnDF*1}}AMmKhg8k9n* zL@E$95=JRGsN8SLyPv9^m1kq$%C687sPzJ0YUG{!I6vOL3fFeYG!zpV_B1R(@l94E(`>cRrk5BEpNfqO{&P+I)F zNoo0|K~r3<89(U5njjYq&og5H;S+@gr?H{b;C# zU^X?D363tm8`pdF)3x9rY9ZhJ>QiAi{W{UvKNZ|x)pNdD6Daj*+4gd!w9WIS0 zM77YLVM;DP2+J<2qU(woK;IHky&XaWJ^z-;;e)Bh;Rosn$RT zo->=05o@SGDYAGi7{v%m8A)X~xxTJz=QxhN9|**F3@hGz5Kn>!tMOPm9DM=#^9-|} z+Jt)l0B;c^tynytTyuA=W8_9%;P6IWe!LPdd-(=OdiWB@r{93jr|_c(LyAv^&msrw z_s2I+vW@uv0GV6n@qV6r7wpd~=~IhAi7py6GZ`TE^xuA8P%T2s1yTrNA_&SvdS`xI zv1@NEn9b|feP0&FICf7}O!8*4J@n=RCWCM(j$;p2)u5zph_R7kV6m1@0}+S?7D6FT zN|#fc5=e{)=6rGb1+Yifxn_5>6pxv8285_pRaW)$oJU@dlEHrjcns0RN_m&Qr`=dw zOq5{gadAdGjeHT{CBB|UUO<@jqxb?Bj!uu$LLN28fZ4-EW|I9-xSA?ZQ+|OUS&CW1 zU>PK@jAx!b@f+ivjOg&!0yG+vHPB`mh@gwM2`fz<3DF_h#kIDauL2{$LLyX|Cob}= z`p;p+J#gXRl-14FFAKyAs7Iwp|XPqq%f{ow6y>`W4UoGC$%QQ@J zco(o#_X_5t!p(NKi06rVj&*%}Zg?-^NzD`|UpD+%(w)DGabssfvAI~l=*;U*lJDhC zmv_pR#<;=O*f%$!BzGREx^q{2{wuzJ6d?x0X5J2a)UyKHzutX0SM~RL3hj8i{IsL1 z1sy1vKr)~Niog(EcI}x$0D5Hvwv?E>6T|c#%`R6ueT1T7c_Q7F^WX ztHiCN5QArAqoIJ_w0R(W=j!7+^nSnK%Zf4lO?=HyBS-NaLWTLzVhtzr$K`!>^Z2rC zPNkAmXdLtC&@@Atf|BIp{NQUnEL*}lL57ugK1w@mbn(JKbTC+MLjYj}5}PHt8lR}< zwQXkKiG`0?k6JMGUpkSjSxgu*lKxbiADrS~{{Z5FPvT(o zeyd5TElwXR>#v*OVy&@-m1SMu_^Z*%BjAw&AIMiEX2KAR4FYeaxhT=Dz zjb6(Z#Us`D%9}yZT|h3=FrrJU%KFx2ZxN9!I-bKbK%vDP$N^H&K&O#@?t{(@;1!cHM`g>h<4HWZT;U62+8&PWIuY)o(}5^E)X zKz{>ys14?A%8x zpYZ)Ef5Y^rR?S%aPF1WrFWtC|Bb?CcJ(OC;lNJnX{%HlT?On0|04Dzc^O@4ET7bU7 zV;eD-T2_&DYwuI1;rddV4aNgfJ#KW#Pn6!#+|Q+|f5Y^t{{Rotk0o<1uZthF6$?Sz z*ZbicK>7?AEeZm`ijxAzvO*({3naw_31HzfjgXvgvhXf2poR%xlv`M!@?o$(BG5J| z6$K#)J5s9u07^%v=-iC3#5hPDtNY%%`b=||3TmwtiaA)yBcL=&F$N<>q)_WWL|%oiY6|A3A}q->Z=L&H3UGMi?tqt%bj%n z#!E(7jJ;q)R^y^5`kaGH*gyL}epLCoHsfBCRCbOCwEQct-)h%mT z6@hjOLt2N+%Z354=ae5N1@;L^rC=rJHD%IV-Hk+t zoe<@8M!Q1|q@>2%j*fxugz~8cdvn}f6l)l~(<4}PoWK_t+?q5r;aLzR(#5VXJ~Jk9 zSFsol%G3#*NI;MlM7Wku=HT>c%f)=}uD*YT_BX!lrHC0s5HfA4j3uinA7~6F*_v$B zWho4}VHlwZXK|fYaR5o8IB1bk(41)K50uAfNj8gwTIiNhgh&uZAHeFYSbGwR%9kZM zx~y!2P6CSGKxSAE#=!nF!!!hgkr@%$rI8SfGMTch$mb(jB1K)ueDnb$bx$#t z$pZM5;|6E~XyFivG_OoCP$rqiMBC6CzEAS-_xgMV`F~w}-vjR13Z=KGUIl{m0$fns zktt^9M)j2OAvrj0EW1t0xzhdVMncn16&0DU?bc+-WgIN^Vv;w}CkviX(cgFbrVve* zn9ORYq3}~E&@?AEVSUabj|^Phi^5sPPb0bR_x{ignL)nAD?=t0@ekR+pXpRLW!IDW zt4!=moRMyH{{T+E(x5RAgzD9cP|KJeRDWYqW89%|D%E?>@ycwfA(4JIONJp*GrQX| z6F1P9u0psd5whXdO#_s@2o_n(5a?0Q)q$Gs4BspK=XKy4TV)OBTDmaSh; z6e37TLxil1c~bX*ZM70nFJmkJ03u3?*@xbeyEVICr!v3Ruk@*{lVI%44S9ICy8T!B zTrlbwR&@T_^t>T6^oiJA3=&cU$!OvWQAH6-q*$^5wL6*w#_ycj+`i(J^o@|*y&pGa zpdbT;QxPb%T#pDLbVZ{eN;$TVB7gyOohpnnZie;Pf5&eoErcuUFW9{|HJo51Ilndi zbc+7~Zol^FM0C$!U!8J{By)0$!|}pT`*e<^8eE02p&Ky>OP9>h82czOpNHy=V?+3{ zi8x*hLQvjeRJ76ie(}9r6bWT@%=92#aZDTAD z7DS>#z|4c^LT zN`t^bDnS;E9Do=I9*6qp%1X!QIG8UBX zX^29skr|1h%?Y-h5g`RkU1zJe_Mz!Y~5gqBEC>?+0QwTCY2dt#gxFynIkqu zC8Q9D?&LI)1WG?OxJMsAQo$(`=z~u(RN_-1W)w(y1))vZ?M9pmkncjE!vc;090Ayn zVuLlPyKoX)(qxm&!RY-pmml)Js`PQ<9aQAR|eK*|#nH@ksZ zCDp!J7Bx7eK!U1^P!%g=Na-Y!TA_@vB?H6Z$GcZDF990a*J|0{KPd|zoZ?{k2JG84 z6Vv(gkKNO%rN$t(#*UcF^Royoa^K;_Iq`OZs-6Qtgj6vjsRK^0LY}(q4svs~HIZ%f zS$uAjS!&BqByt7xA7<#Nf;ebV5)lJQhdo?vm77A=Wo-#iqQtRmq08iiK7&7w;kO2s zOC~f9ysDsZkT?JU@D1ZY0_f~&fm3Z@`;qhk(f3IR^QjDUpG`+MAibYu5E5m2=#})S z^&G3t&I5RjX;{#d3yn)+`Vj;~ZY9LreD;@_DGPDTh=jwvW*1*XOIU;DFj{L6CaEQbfKq1PnSVjx0$3h zycP(Vc`3m#PTIvP^v3v2K{WErz*9h>NYT9!1IdvtvM~52KtzoYVJisa5@~!9Spfry zt2L$AKZTK+K@@ysmt%?si9@4kd74;;M4aW3m**LLCPHdzqWm4p!{z4a{WX_Y7v+6* z^LV|J$R+(YyFof}wo~?9J8?i0CW09hm9|kOj|*^tu_?01Ku8KGK(;9p3n66dnu+Ef zK>$eQf(QvTK&fiXkkxLsqXG9zGb0h|2R4U)+4wdp)a~+0or`pMwjzK9fdQ~s%(&NF z`2`@Bq(C4uDfA&1tE!GIB_&1)W((e!l0+j2bcRagX@7xJ7a`vHjp^oAtfCDI)wN43Vy3b*{ZGq{)m%vm%j-T+aK#^r1xu+xY?7Q4laj3Rkyb=aI` z4J!au0+~!r)J>!zk_C(|!+<7sVvhVt|gIIy4U>7Qt2=fbN#68W^~kU&aq003wK*CW@%8`a-nn{rykxXmG%o(hp$jsv+w90%Mpm+_%w1 zp+_La%3-)JE?j_~Nz=Qigi4N$I=`NvL)OplrE}`}wGG?i_FY#^(UHuXa(i`_@u|nL69S=AFJ_lKe0#I0;$~p_%#`Jdk0oA2tn>OZ1V`1W^`7O_N?K%C@WIt$HEP6~}$4 zQu9b3N(hVaWX70|Lj{R;d`7_|$-aqXJxo$Vf}Tkmrn&+wL{ykvg5|)uXd?3}uwJx) z+GR0MiJ^c;3^NlyjTKc`53nS{3iBrnftNgbE)mIKt`Jd>ea>!P)v5{0RG>*Xj~Zdb z*u1rYHpd>#282lwH!gT@Wp)5FVd59vs-sS2;yeYn4Vm6T8p(W*)kIwa#KRP9tp=ws zay_{9(|chPsMC|&!C+@#XOCSQ;sn4JV%ALsQF3IRm`PV5hjKTjq{@e?ugwv?A>3F* zN>c!pCK!&A*P9A>Ze32aEU6DXlP~~e0jXtltq=f!hd>1}(2zt;Wd=}10;VKPDNLzC z@mP+e%Wjz{+!LD6!uRYw#b`S{gVFFiN0tDAaygdU{0fxm#-kK`<^#SF-ZzAzTci{jfGAZB47ZjO&oCfRIS6SM z5J>U{)?>ye#)J+K23_0&p+{D*xHQm3`LHNE;t3gfT`2;eJjQPug)rvIh+!c&0|nC{ zAwX4Pt>VhEn#&rjmU+jHWkH)B{v<@oRjy8OhnEfvN)+>ukO@pk${L{%(F&v`OtFek z6S!z12*}(^i0XI-SR`7mqEnE}u@@~kx`HLbD>Q<93nemQ&E{s4U}SmLjEv!eTCyt$ zn7pJQl*K$219S(UX=L!Bm8FGH)O7`&LLGdsiS|+AzE{^@H;ZD)vL;3kGkZ#!_qPSN zS8I!|D3B7_BG_mqA=V{bzMG0qM(%{Tz?TP1G$Bte&n95fxnRhK0*eRNt|Hv_&e&_# z7DU0r!Fn6jaDv@R<%c&OfV9Tkih~OQ6N{wN3N8Z432IB&D}tyP@44Tfk=$Z8=YLO{ zV~vjP#K?IfYvnkYK6#-TH9L`H?O__0JxPIN7Wug(-9QKA5ktX%000)^0%XREa7huG z1PYH3QsPM^5isN>sGEQzHIc(>Obs4hl;^ZX3C#^QC_|jQ%9=DalpJpmqAnna&RisM ze;c4{Ap}&pXQ{iWjHnTt9Os^jBXKwRLoJz&5*(&up4O<)V%iBvf0XO zr5cx<-bG#v6f`nKAgMTqd0;sRc_zc8l;V?J=?K)p z!cYN#5K_2ZZr?uj4bOA;P~7)Fbc}{tn>^`s-zfa58~mTTlC-1BnQQTtks)hvhJq{s zqasd8UC`o)08oGlRcrxur&A;<*-1zwCmdI2W|>SC#tp`YG*I5CtFSIB@J_Qya{?G! zXquv%34}(<+6mDm^V;kc*rQgbgGp)B?~I1dU;q~2c&2n385bj@C9SrJMq{yJ4aI;T zz#*x49`;E;txjr6Ej&k4BopF{OF#&OAVMvdJPD?g%F(lXv5jl7ASdU*AuhxMuO()s zQg=ODG?0_yYsUwp^;0`7N$%AS)Av{P`L*jzF8w_p?xDHvR5v}(-Cvbz*S;%HEg7DC zC0Xxj)NOU#sXOn#SgBrg1cjeqnXI6?0gA=p1Ub{OSl(QWt+b}NRPXgPR^%pv$3mCH zx~nPLBR5Uj-&{`3NL12sA`~Jwj9eR4#fpN2)Jse=9#7I9;^4O-mV5^{Va!OlJ$3h_ zCMm-GNt1J8r2hK%U2`fkjF-?iIqeFhzw3<#_%Ky1j^`M0qA#%oQAh_%*b$MDw@qhu&~-u3FE9qk z8LJ|~Z!%Xk8ml}7T}|+hixgz9$8j)sqvEd&ndEZ>YL1AwqLDzvVRZ4w2Uo>)ckfqnrgSBtq9j^Iy;Te&++q=!?KrOMuXWbgtHdmXxI+Z` znx#wMeBJ_H`uF;)h;I7P3|Iw`Wjy|WKYu+!(F1f76$!!w;V_^;O3|=;z{3>dAAf>= zD3{VEco3?V2?<0PHdt(^$c5=F6!{&7c|Gp!S-I7jol(4wPElF~O+%E9DqwQVY9>P+MxV$QUnYbELPUp#Y-WYI!QRcf26Qcw zV~ILa7zrtPw88QQWUca(4TLy2Z|AMaREHu|E0M7DJ_b!nIeJ-l%b;PQ+yb1Q!17TJ z1re2c4&;ys8&P@RG9yZea-{D8b%>Xw!d<&4bH3-`jOc=i{WS@*X$ltzA*^BFa(&! zvB5;}Fd5Eb$gwGMtKlB4WsYwX5MN}V5S9{I33kdU0l$`xJ=Ze6R~Z!Ja+eMgM3RKa zj}iKO}Z4;tNa0*7u35&sPDd&Z^sdUNcRNPS z3S2gmlpX=qYv8pcR*6OA&N4_iXC9=4AwdX|Hfm=Q^(-jHX?lWy0000409XS+FnA$( z7{iBimZGi(Y=Jt2?00xBJK1zlxyuLVIJ$-(F`!JNkU^kifF$7xx#S32^;d;Qp^75H$vcBA zd0;5X*%GGAPK!ys+4jeY&NX12i5a3P95pOL#b{6xCE;-2Ll04PF_K6$5m9g)OSu?q z%LkqEzKZ$0U_TaEK(~ZFCawPW+;b_x?WCPahX}qM*@j1E^@%Nrvcs_3A&{-PH2@ZB&e~L zWsV3K@B8mGvA3;q9y=urm~v?;nn0xs*Gzl)DjWNXhV($(H7P@QXq#c4U814Cu~6QE z$aRgHwq2d(r^(sj$ec+?LNsev&ob+SB~zW8UEy8GbK#kDWQeq4Vj-9R06-qen?u7p zqEDD<>qN{iIRyhV(;vC#pIC0B&R6HK3$qQYH}_k1?gaou9oa^{Ez(@v%TTfSO?- z=vC&7IQV3YX7)p>ciw6NofO+BTlnCUS{NvR08opThRlah2~H?Xbk7G>)@>ba42v*~ zNo55j5s9gVacgafLtKP25xq|0xf@8(_q84Odawp2-Ubk>AV+9{QEsjpGYM!Qi2(yD z)27VJWtrKj_J1`#&*r3F7QMM%bkG>yX@>l&ec#Op?tRs@g_7A@tzNSc8dN&aN0WM> zxhfxTS8Qs=b-Pcqk&$|{gWx~w>`%``9TbW?0hA9;iO<70V^d@UqjKk`7~gYwqeZn!vM1s;%a2-V0E%28G{8=aKpnYxWim^#U>w_j#Yg%{ z7y$FO@JLZkU4eG=F;LBeV#ct0uPa)%vXW-sxkVi6K+6HVUJY2bc(zg=!EhBW_0jCT z5ygu)3OP||c1Smz$~2dj1tG%pkr6DUVuUH3Xr6zyPmcM~owd$}+{aZa;`;2}Q#ZC{ z!6Ahj)OrBkAwjvHkdiF1L#V;@JKzP5zy;Y(rKOjX7bF1F4%}QArYJ+#1bP$SSTjmsFk! zmcRteQb7$Nj{V==PMQ4+55b;w-+xs0#|V~Z(ym5I7%N3{3tcr70Rpc702IR_vB8++ z_!MC2-t|3*S$Cth)LkS&1?N4_gS~pS=Ugvto>YU9^3J;+Trr9b zuiU~c*%@WCG|mN}5+5*WEj^5GCSDZo)_~mhE)Bpa>#9mFDYK@0M7FyMWW}4>bBdSR zt%egRs8|uZ!e55W95ky?;BD~DqeWM5AtUsZ2M7nvd2NYejAJ>H9t1y#^7f_hWDL1Q zBVtl$IZzsdb<^Mq4E~S;*s|GgDXk+?N)kEHnVj0Ww4Rxb0M zC<4JA4(;E1Ed^QtKpO>o=Mx9OH^_ZfFPIO| zT%GpUVGaj6B7CwW3M>IDVvzw-L;yTqnp)bf?}~nAupV5n>k?Ji)sSr3iPj>+4n;b6 zPc{i)$PQS8CR82XVfGo^B4LD13;HT0&CC+J3^g*|OtfI(8int&hnqZrL`*Rg6b#0t z;{ec;00)*NAO|N3%gSFb5x4pS*Fs>@vE-9!Vu{STJ#5otfRzfN87N6uoJXE($K?H0 z^0=2Zkn6a=bv>f!fxGg=`|_)~`H1SQb6CS&gG^*%`}un?aB{secF_W8 zLe^;NAxo~u(d}A++WhWE2sc>33ch7u#RrWR%uDZaX0}@O!)*&~|0ES{n z;@+T6VYVWIz1MX6HuUiJZgBqb^Ih`(oLA0k_&DJ7YqNi+93G8h=S_UHL4;65TdcBz zDs^)@>+V01LOf^yhBnsgbzdE$)WG44$|zY=5L8ONP+|sHpoYo7r0tVzcW$BLIG%}0^!3u-X8(y(EPrKk@s zfmZp@8=&h4st!;~1s-+cM-Ky;>Lv%g>>`XHS(aDd$r25sDyGL+%vp+pD2m`ucN!@3 z_4~V+Qv1shThm(#zAGJwh+bmSom7jGJ=HbYHVhPS=wD6DI?!anL_i^+EVVKqaYxYUA9~mM57mE={Zp>2 zb8kGc%AT1GpJ&^p8mrq{m+bve1>Jvu&T?F_{CEMP+~>$O@Zq{ELyVI2-Bie2hA0fE zFGpk#4!M941rd|ZOhumvfz3b*Sed_QZES>)8kTLt1(J8pzOv%f8z((L`J~3|B#z3I z*ZPc}4+v!B=ZJ6ll1(fmSb7^a3_&HRne%bNgiX8$Rl5=(VSXdfvZPyF6!)KLHIwEU zQrvk{A3KxmjMFXJlJ;?yxqwM}VUIbQzGoi2YgT-J6{7aPs#vR~%(gkw^a^0uLvK}o zko{Nr57ji))a2wdoqQcUl4t=wyRwuZi277&{N@XqE1qU^B|8bUS!Xl)?Sa#AC>jj&f@dzYBmeG_7Cx<8M3jsuoMY`<`KuqC%D@I>PSLB zGKaTIv&Oldb1rBiqP9W?Xpsq~XpzTvgLH(V2$KksMQF%mv%L}1kQ`9&dV#;mF{%kW z+v19qdyCQ0g6Zc+l^}=CaWH%Xe8<&0KAr)U@M`f+Sm5Bo%(%J@MyUt&2h>E1PVXuy zB@<$>mOx&_#878shEI^xn%fG?$6!LAn=+2W>L%yJn+b+3dN<3seJ+mumO756Bo|3 zlFF=tnbf6~2KLmTrWsc`eQg1SlNM#gEZ_<#gALgv!)E0Ok|J(g@IIgk;7fN~L0S>a z;W~A;$*hzjGIJ0{elb;X%{CAi#Hsr?SrSc@N0J`^BpDD%b=~Fy;-zsE9!SM6nH=OC zDZE0A`ORhM{PFo;U3}gzmDYJnzLU;}Y*_>wppeliT#pgS4npKS3s|;5#qHO4b~Oq! z;Oi+p-4WnrijM*!%ts}s9t>RE$}v4{%a?gdDRdrU_TR~+7Ur4Lf1lp;>U0niNir|< zbDbX71Y=V6#hqDM7Pe{3ki(=y47z|$G-=*V5p zff5TSyC^yVAjpK5607j|r!lu(@BmmW8a#}`r{T6>mhU5i2#6zOZYIfB15AX!R0dW? zw51Tub1*5#I=w{V59|RwH5=3gr}7e9!!oQ(McN#=y|l>YlQb?NWb%}UCrMHQ#9nq` z-t*+tc?BXzQb22s=7j2mXo4g$s8+9^25(49@6Cy8=jG`9@%i28uIusf?%ednU8{Cx zS9#UnRc|#gZt)~Dp(hMs%*x1QdoWva;N1+y(kDv6=0Wk20N6{aQzPJ1=hjo-S0%6)Za>tBUlN-?c=7Q0P$8YH#7 zYnbqwInSUc$tSp^nRGUrPwL=JQA-HRBcPQ>&+}+(N?(XjHP~5$Ei@O&q z4niMUJ~o{yU88xNfrz8luM!^oWmTy@_uPQXWJ>*a zfUYDNCLaTT4)W7;Wi4CEYHH)*Y|VW5kBIhl^}H5DKrYj6cTue-BfrZ@pmk^wafDh! z<-`<9IQ1Ob9qd8jwq`PG9~!Cr3=Ji=*_%-2ZXvjq7S9e0211br#G zGCqMNGeO*M05}=)wZ>@4>h0Gbmh1tnn;IHhP*M~Lq421y9|3am0!&^VmcCCbO8fqM zlRN&=sa#O%aLI`EuS;=IyB@$DuG`3ba1-})ZGV7iLUg1r!ak!hi@|SziySY8I7~Fb zlz0gc!Yjiq-CBXRvnn}V%?xk<1F!;BB&5c4>{S%zay0x*TF%Sk(A_ZYcTP}PaCx_{ zG4G2pQB+6@!w%&rYmwp5msV#YLEmoKx;)jx#QUv(MdB!s@?~tEX0HNK_5EUXXp&OW z!SQw7CbQvkB~(UPVu`NRBnxDE4|S>!e%XHOS9^i$ZTD}!FSoVL1ruMMi2<=7DtIXc zg^LMQuAWh8M{c87Y1Q%y6CFSTB>+JAg}20g+#eMwxg5H zVb6yHIKciPL_mPrFi_hI_+59VP&&^|;ad8uWXaDYghfa<6!#M#j+08|(}n#M8Ohj)nX*;u9O>II6lUA5zL8F8C5K&J{t|5XN}$#Hty;6qfN z@QuR^pSoCQKP!y}e~`|q$FpkceP4^_iNKuM-w?F-huql6{JxGazLqju(B34$rA&kT z*sg#8HsOmz=tdbrMw?W+rh%UH^HZF8YzXn(JwAn^D`RCx#oST7s;%elnPM?A?`jf+Jk;*=HfV8h5+9^!BvTY~jkKA?jME&95Ky|B|V3-GnDgOh{ z$Yc#?>J@gXz7oFDfTMV8Rn!MQP&0+Q;@HTC&P~edVw=Pcw(W8b)b1&gJ7*PxsIaG_ z!HYZVSzWIVs&hbQI0RbaO)4gFj_{h-s|nB`ATr%Gjw zA;jQ#M)iRoJ@Ki92kt}VFp#$ui~ox3A0VkvUU@S>a#`%%*o+EPcsFK3VlGK&iK8S4 z)pF=WUw-t6JGZ=y0FIxOzc{z)dZ>#LiV&var*iN-QOAsd;$Gy>7w=-n!IudzZf|LT z+kD6W!}6k|-D=eGr^mL?XunU;CEeE<-1AQM@=2DFfj9+1%8D$`QQ9y_t4+`bI9gGP z8kr2hqz9>T#^!&xb64q+M*!t`F$|Nr^j}({?6kw<{ffb^p}BZ^Bj9=%8of_BN-tOg z-$B__2*mpwmnf+@S<~si?67Acj0fG0zaH`c%M#ECG;x@K78Vlz{B#9jR|PF7@6u`H zv7m7EZCL4h4s0R7<5hsCtU3nCEu(y*o~IdI5-9>8)j8NpO%ws1_IP-Tg{>JNEzKc; zzW!q7^2QrK;v?%nFSyd&4ogFU1Up72^*k14{jwiu*Yw@sS$V%?KQzaWq&!L!>YZM# zI2zBW7-yahKnGC5M{_8SmoJ7MSGiyubu{edZu@)kb@j(UBg@2(`1nm2pS{ zw($N166cM9t#}N02N)*BkHede`hN~(b^fIeP4ECwSfF(1PP+*-_9kp_Z|=BqjA+ z{k^v)smdV!MLkrNwJNJ{PCh+qvsKZh#n>szWl}8-m1Dt-2z}9}`n)~Nl5po7xcYty z2!gg||9%J(MwU18cVb;-q8H%EMn3S)n(%|cc$&loInLiWKg#FzTu9r;H11nwBCX81 zEhP)$m#cisr={c|tg~eds>X^Bx7EXv4DrH=$}`iO+=}L}F_Ug+oY*+%CMSFgdF`+p zRbyHvQ@;exah%WL$k9Zd%~&uDQeJ@jR`5YS*$C-InPMi9-4;!DbVhF5+0&(sac0b& zcchAOI9pG$+_NG%Ta8_1Dg!9&O~=*=;^4qD?6IY)7h2i{37G`bnV0Md20{|bxb@tr zziX+|$xiUR=1++#5-eONE$YhvpyesP);dq2Yd;7}tcT!xX6`iF#m= zhNMSzLMWnbme0aIX8x5UN4*4hSpw%T9)}l(z{=Hrt$xupwzXiwTqC{`t`)<1=a))@ zwms-Z1y7Vx0v3ZnZmsSq^ky;jM)aG9p9*#}b|AbG3W2nPQVCbxsr18}Y3p}+Dil6w zP3B_zblaGVgV8Ly0dbEo_CY#&BYeHGt{0r$G0Vkg#YpzF^#@@;S^m@FKCS(s0{tOX zVa`?#c{)D_U;AIh;)^(FtNC2WU8Jvytg3IdP8E(dC5Y7zvmv%`t^N ze&m%s)A@Or3dlK-N&G0GLryvF1X^Di_T5Z(X5_ZAGW3BeEQ7GC={8bg zNqUoH+C9Q^#2o5dnr(@wmC6wItoH+HqC z7+1EwL<>^dpA!}yp*L5Wz+9^#u1?ykhaUvP;9{K_#?aa$ZH!9kR}%{RkLU<(NN~?S zN34kP<&3~vKpMEBB~s9+6Q*U4*%s0xZDjeQc*yjXxjf^b49UB&e!r%MP8In4K=po*wqDAub7QOfLyE>SiR!q5_fA8TQRn-*xy z=UX$X9R)uLSwXesmQ?w|GmyK&u4}d z<@jddXXh&uygx+IKYP?eZ^wS7^m;N9ClF&(WA_^z=_GK6wqD0J7SH41>UI7ZLpD{R z2UjKzlBmFEIfXNaHA@kjuNmT9@U2*{x$sady5&ANFz%?4&=f)u_3QZ6RKJWLa8Ggj z1f|nROWR5A3S>cmi0?yXOk$4wfl;)qA$qaVG+gJQ{e3~7xdUIb z(D)SQEHN(~=9DEWYpXL+OxqAgSPw&2Y^TDNJnvY}PR9coe4%^Od#8#9jw=b^zbnA$ zKFtqb@cFSx)#eYc`_S`gC5tM=WaCKXHW~WOq8*;fOz6&;p31aZi`O7}Y&br}ODQ{F zDNS9nEit>VB8yG+Gg4(gae+arwf6k_I2(UadHMU}G{+yUehiP6@@B=*ff&wwN_a}_ z9T(9($-%iydTWinH2K^Sg0Yumk#WYB%X>_3`1reg7P9 znj!yS7#RTGESd22z4g4%$pxZE1kE0191|6Td2YI@%Bc(5CgtN1hk3s_S{Jtz3UXMa zVfqN(bRzcP`U+@xCo4U|o0g+!fHkX6g=?bim%G<({#8L>?5715v{USHR1Hb^V%>;I z#GT*U`5mn0OO9-&pP4_sGO&GFqgZ|Sx8f>3_Qw}E{}ejJMKi| zZ#a709}&&Tbg7q%z&-9OuvbwBA1 zoxbitckb|6)r3mI_sh&g&6sg=!A7bZ5}LW&(mO8tIpOa;AD&6qoo=b}R2-&l&c?_~ zjl38NlVX8il|*E`$Tem}U!vY;{)*5+U++R48uH}c98Uh$`!r9}EL(W*UMRw-{D;^7 zNyZ2M=J4;@OcuEseJknE%@)?*xkKThj0fH6!{=lzLADQ4Xns4Z4yKU<9<1atll2vL zHqa{IA{%bH#dbI`$VJ!V`ql(^d^j>~@eVy%w&S-K7x@#&12=e#JKxGn5rbI9@#oJ= z?$+Ixf_6inZ`fZv<~eG}I#gW!DB1ZCmmmqWzyv3WKS_-0bteGtEvFzL=9s zz1QMRSHNdnFyJ%zp`l5dwKsPDnnC;eivi{_nKj4l9F!VF){Hu5sG!!gn{#EUl2lY?; zUiGACsO%9#G{j_6<+oMS%ze|>`^u=LKT4hY@HV6)f4!Fbe?1sK{jCHJ_c=>ib$NbTsGwcPKz zT+=Wfjh=YO%%R_RMo;LwrR%CFIW-HQjaokc2N>=S35amvf;Mp6BOV@)ctwpt8KPy~ zFZLKdLozI|v=H`^8f7>@pJFbf%@O9!K)>$rBKVXb=A0iGd+`;l97=`gajxSjnJ7m3 zov$yxVAe$Re_o}8owDCh5VB6kbWFlbtUX-eH{LEX^5T>UcErD*Iou!J1%G@pGPPf? z;8g99dHE_oQ%e?8KqbmzxgnqJY%FaV6dB%g#VV1Qt-@G1E5Wpjl!F5K#{JxHX>;-d zM1Dc@Kgk!{fvJBfltgT1MjI z`Il0j>e&X+rB);ws0?01k^Zy|Y;2;v6@ryE9V}e9mEz;V>Aiq1l!X&(_v^3Plig81 zrY|g|9D6E@yGbP9uZcMAP*g5lcia10Me7Acmr6k)Wh9O82u7>qETw`Q8W0zb7T}?6 z)%6GJ)7z(z^>L;^!>LQUQ9DnTypxM#_&t$cRW@IQz$U+$b&<$aRKB)yFPu@ht)fL3 zJ`QqEVUchQ6jd!8o>Dw@7AL;=Lb;NxCgXj$46<7Wh`D8m6jh>wU~p);_ueCKCA47S zQG6=Mf%GLGyE)@S*y2Ft#DF0wZk z8K}ES`3M=oKb`OTQ^sheV@`-XHTZ$xupj=X`lT7@IMG&gHJw+p!ZLBdGh-e?NCH<{ z3j>@~(%}Ox`@nR_z}C)uK?Kork@p4}wkB@HLtEn11@c$1EV*PlB#7ZN1oj5J#4oSssom9U7^A6SsqbxgEUoBnRi|=Fy@q$Bus#fDa+IM6-DLg+ zw~XD$d)Q-ob^lSl)YQN_xAgVI!; z5f%<9O(=Zi1&au*HvKCZ?WV@MUMaw8cBYe(H4-G{E4puf2% z%J6_9NXU)lflZfGEPEpVP{AFA3UWa1KLFldp{PxTZMf)4mT25KG(}PPZj&Jvb2QFc zT>8_^&T;3347>z3?I;@@jfx`~VS2CxHI7*#wQgyd+l<|!xoM@|21E}zj}xU5gc1s} z^8I+JtxD^slR-d#io+W{A6 z1iDgKXy|5b!d$}FuI3r;^{jsYZ6Y+ot1olxyH8D0-3HO2DV{~O47@o8Jfu_qO&q`T zZWxmw>8mT%XBlbP*B@AA$HU|AGYVWRMg0<(*i1q_5Y6d;XL;U_B3S5)?5g8sa#M(e z)|iCZT759zN@s)<#HE_JuSBveBc{Z?8`6BcXwtE^a7&!GW=DAi6U)4;uAvYuH(%O zYA)*@nnFq_=A@pebq*pUk|0Cqc#o&dS}7P{1`uTc07t#U67F>0Zofo?-9{iymscw! z-Ixr(rG2c^Vc^>kUloAkDWio$gh!QU%$Vhzu=+yZAXW+n%eOOdWE=yj?qSO0Kfr(0 zw$0C}bbn8sKXgR5eAL0>haUilqiWs@C2rC^5R<1r%XT*<-z+yX4Z5ozpC1uhpkO`2$OR5jrQS z;_!dNYbmBkq14PnV1%>u2*^984wM2E?jy>4Iq0R9{_mkaXV5V4>`~6x1fuxO7H^v( z{}yXbmU!F|n;A<;md#T%)f{YS8BX;BT{dmU&#w+g9;75wy6HzP{5}8aooB0*)ZX&W zL&*Z6W70Vlm%a^#6KIF_0D?8k92nYbC$GAp1XiSqgI{q$(^jY@lc!rEs+48HryG(B ztqddRT^Ln=<#J2-_(s0^5H5oQo@0J321O!_v6o#ofW+k&SD3{wDs{O+F@nx6OF1?L zRr=Jc?rViT-m&w+qjzBh;j;hqy4;40A`2Vur%hd+BrW6UEVDMrb3BLaboqDfmtZ*z z@GF%}(ns(}QAK4@!nscKQ%&=m`it`yz9)dj)cJWnB6EeCnH>qlVx+zFlRg`dE*t z(4gIx0mucSii4NZ-JLpt;WRl-jG!%<%v8tXB*&9)@jjnC3+3J;qLVi_BLpH{w%qZ4 zPhJz_MJUfAPqdBH5sdDT9QngPTC0L4^-XBPPOo;npV@}F-}BSZja1~6F$^Btn{kP_ zh$Vl>@EJw8jRY!-EZg)xwz_>zZ_}POxl5cq>T6f3#miecW(+TCX4xU{|6Q2gOI&f= zS^OyVBUaYiv@>U>ri&1E=vgxu%*7)6+ z6&;Y`-Tl{$xc{Gk9Gz@c&o&D%RHr^mPb1`|X+1NNU+q<@Kqj3UmuF1n;24oL-~rz9 z>8o^6o1I}W2TUXEuizWyijfavJ!fmU7QMeOjnS!3Nxq$b)Z$(+@J6-Ae?!tdAZ>0? zspSEEAmM~Ar(?&2i6V(EEKvOKkHaak5ag=Q1c?=Q9GlBZI9x&k3!7UljKqU`e?%KP zgy!A3LISf_$CUO=DmWL&D)Tp&kQTA_@Gw%-P0qBV$!FoO|01SqwvOBqx#=7c#%0m; z>nw?Kpmk=xW)4yI4QO)zl>V%hMTrH77KagO<8?q9w&)^|exC>9{=Ze|(4wccPY1S2 zz2BI7L$v5bUDp^m40+T)RQ{M#(3!m}!&67^n1Pdbmo4o2(jz|aCb$xo3mlD{HUvp} zWZB$R_UE#J##NYEiNd1Pr6{Gd3{E^bJi@Aya%G=d2FSl-HNS4YD2mmJ#%bIx7=8*L zu8${G{r&Jw5S|=&ai(0T>-teP&0I-6RK}T>m#SY^!vyaiOtek#WFnZab+G?Y`Lc&2 zpy$bSu7UBBc1{*d3z%b?74(^*9j=t?KZFq+f=W%`n|G zT`Qw$@IvGD@F|2q5hXN74e{J@{OYy7?}gPT<*WV0ASGBHmrxiOfw38_r71@gTXapl zlL|>U+n%su(UBIc^e~*HO3h5nQHX-ZjkjiJde}#k)w%W)W>L~vm&Lj#2if#`d0dL? zbr{}t7UfD(g?Saig{VR>GsiXIT;`Ji!XL>AnNY)H2d1hmsU-iHRng1Ej0lmqV2Pf4 zaa5AD%+e+i<9@_JC0W<-b0T#S2HIfm!5sPhF4pi38&wY<=XLagu+~Pf+@;#MlB8v` ziXB#zW(?a@JA{+rnJp`efv6F@Buy=fGc7KVj{+I59esdX zgpD+eK|YR8w#Z5bf|8ah&pBE3VeWvkKA{Vy)B z;QWQS|C8U9(c@ZLB|NQ_trF5wJ7gDm@F&%lI&nCd!+=*3D4Moe>yJS;w)**`YPha5 zQ_L&FAM7(?kH6}O)Kvb`D4n6}z)z3OBf#yXr+cd2F;6bm>>!(I|9!I}&}xyH=y$F7 z`RG5t2;3*j%S5c2RL7%ues6@p6PW7KZ*Q|TSg;;n(eoff9v(PLp0Y;h+x)+~?*1wj zs7sd?+PmC?zttC^z}Jyzy})NGu5slm--ZN|skG6Qr}5S|e_b6GCa}rH*fvVCZ?#a1 z)Y6xkgByw#ETW!W?Mh80nVlTh$p;aZZhzayu<}zzHNQpT?ffY})mY3d;P8)SQ< zlD@){PqAR9a<<(;w28W4@B!jqn_<(T6?HkxXFSlLKZlzpI-r+1M@t~IWrjYM>Wa)u zJi;C+ayIh*ic8edvF0Bj;{+Y$gT+-bE@$cIY|;#RsRE0lalJ0WNsq;4$9x_Ljs%Yn z&mHK>RGm&oKYNjWYz`Akw)}d0NNjXE>Km-xXN>f6Zs&Sbt{f)g-rAcvv2bEsA%1l} z<;}4f2=-Zpm8D+kYs!iPOjQ&ouKGU zRaaUwN;F3*~1f2OMQPa z;o$$-xHv}thpC*049mXQwP9e-o{Ob)_vO7A*6n;Br3;uMebV}sq6la& zEl|R*#2KMh6AxQ0O)`+d)})oz3%`os!xnET*OtPT0DJ7I887I1~U~A;+_N}a<=``%AE!P zz8Nl!!F2loBz%M3OD#g3Pe<#07 zpjPdU8cVM*zFgZ`nDvH@T_InH+y?~71!n9iplxID_>&P-(V`{LS$Yi;DynvGPK1UN zhV2NLW%HsRctq27B4>rts7K%VRK-yan^&4!^{2C_Y3Im9(<~>j0Sxi@hn)oN%+NH1 z%4#U>(-7nEBjh_QCq4PJFm6<-wNBRRxn#a>G*R*+qU|1;ew}#XO|cmo-S03C=&rtg zthYv&EjEEjjiDDKRn?$%Q9B0TJFCWHlwT_{d zeEmnX{!Ad{Tf;lvH@u%S!MOI?JqaT1%*n2AOh@{Uj{n0K`407cs%_Y07n*gWa{K;S z>isyl2@a8cfAICfWkyMEw%QFm*-h-Cd1&B+9qR;T14L;!F)SmUsvJ|xs6Yr!S#fD1 zBil6T#-pbu1svFx)U2$?t9S^wI>1Pq44Yto zxm4lEWos&%qt!KrB{rA(5ZZ0)PS}op(d_;(G%8VmEco$Zce$f)xBK-Foh4orPya)) zrT*U#Q4|;)6?^kZ7(F+ujy56R2EYb`K;dMQ?Z+IR2K6b&pD{Fb0DbuCpGbMA1f6g!B6~q*a^o9+ zn8fO}{*qU>%efWsZrZ6(_`{Eg`cRb`E_Q|}-t62qKX1p zGgGb^0I?=2{{Yiw-085``jGVIJMAn0Zi3#y=rC)wkd?zF^74vr1}xun<4B;sR)iyr zfYKh@j&uJ(x2)GZ)Hr^WDzhHtdPd8lOu%M-+CGkQb6rS?7|O ze)hF3kmyTp3G)rcG>44y&W&$+Gdi=?D12s5B-XVKX6_oo zP5n$jQJypjE1&)YP}cH^)P?%T%O+`S;c%bx}MT zqO}^p(+Id=(9w72uVZ)5{`@~|P0)VxmY6o2vT_RP>2E@70`eiv=keC+a!Kb(GD~*cy60Q zsx46q9w#Yrvt`RFsw{aSg%Th59l46}K)f!zcYJXzBM6C?wySAvYr%w#JW25A-RYbq z?0UGht@$WY@~9uj*(SGGPTtoQKXfJh1xsPKdE3s4Z2JG|++0UxdgSr_)&BrP z)TU##cvpO(>`|e6I1Mj+MeM&)0>?qaF>PJEEoQ(?pB*hNZ8i#}Ox$mh?`u4{YiiYM zg1v`ae2C*5ziHvEjH{0Fcqqg%P%wjd8``Fj;o2l4k%34tdkHq_mo$^@bJH|!rtJDY z+Hskokl~%UC-Y2hza}$Eactj_X7VpW8n1+`nmVl$lH#Og4p|%eZwwj z!`Nc0P~K;+V$|l1Wj6sE>C8YXu@9M@wnc%-N$p%-jav!aiY8dcgBSn9NZBPWa|M%` z0s2B@j~rh7ZeRHEb?KJlA*9i0RJ(sDBwu54D8)ywP_0$(!n>z7$AU`%lD|m`Uu7>S zW0YLGv**YQ)ZJIJ{PfokBT!}!9TU72rd(RcSvY?1G*F<2*A_d9ET-Kp$P@Y%^+yb>FS_guw3 zrNZc_F(Z!n($@TQ|08wie1@9luB?mX(617h=qjjTW$y%-uE*bZ_)U82`m$Z4#|l9G zyhJ*R;fZ--5isTHgj-QDPBj^%q5aD_xbyfkof;kWZnKLj!e^4j6hPPMSt#3r*UCj@5`{V1*^WZ8c*QE93HVRh)7)DhFY zn$_pCFG$1mvoPaGP2o69+|K?Bi?oE?2EmHnk>wQ{`-8&uU^8&<-*%i#nSn1@a+mEt zoMF|uuRNZ|Odp=bY=@YbJT$Dz(up~wpaiOEsq1uGgChe>QK`IPCXvM)Jxsg|+7{Kubh(3z`S^IZQTEJI=Pmf0ta+Wm&|1F{j z{rs$CuS2Js{4M}OUh?Sv8KrN!z~GlQuhMxmnTU+v+zV_s5&W=+{epB#noO}P2w(2# zi6EauU2xtZ=_=~?Jfb{(8eU_1&pp?i=wi-I#phay#OChiB;O5}sg~NV&46PiZF z7JHT(GgCsjw^JV#X?DCESQ6nSKO?ztN)O-Q)brd|ezg1{42Pl?3T2kF^{qhkuJvnq zr;t3z7u6Jqn5#nYcG;ouC!O!6SvHd`^ca9$3KkxYPW_-#oGB+pj->gl4x($Xbk+lN<$kJp;u-UY2UaFX1 z6{+~V-M~U+f0XG@|1f8448%r32D(g6@Qw2-R`656tso&FNi7y`u}|id2*Hm!o2Pw6 zsGRQ6Mr^JL0Vw+o$os+31JYX;6)bwV5uhJ5OD$Ar=taE)kTa|Cx6U?-KEN_#{(Er> zcZdvA5pj};^lf4%)dtUD*WnyE=)Uo|vzZQQ)2&W`S4>z8EATlZ4!R1Gg@(I3**Ptlh2Q7eH7BF$tW zG3jdDEY=?*<6JogKPvmcE`==clKCEFvy{s>*wo`(Z8EsJbb{Ocf6zi`6BTz+oKmKi$21v*C(p#3HnTKEY zgsaJl6Q85ZPRGxBdaP(4zGUcTa z`8Lr&MHv;1gMqDr{}J^5+bA}>ru_5qG>7u-#Gz2d%qFezvc;A9w}WIXmQ(Ps-sK!~ z!yoDeTB0)xi4rt}0eE2;L{{VH|DetjsSP{Uh2|Z3SE+lsve;x9g5$-XI+-RFgp+$) zvK3>rYtg?ON8*!KFjwGLyRfq2%c=2ol8X}|KsmtjRxY$1dA8v0BxFXOB7Qs%d8miN zh+}MQI0>M;EWg5eSW2!vsn+yZQy|eM89d!6la<4OK5Id86y8SUz<^P97ZBroVQHn; z6?kutxGIS8$lUu{-}-vt&K>zc=19l})Jfa0YT9^g`tn#`C+p4Toh}RQKhtCUT}HvD z%<4SdVC{l2_IAj&huV|AE8Nz}DrE|mAora%&Sc$3U5t_|@(!x6zm{a#Fx;-#-!9{K zyO=KCvFU;8Cq8#!)=9iWJD^pWAGx<|71WX+ zN(4_=EZC7w@0i6JLBk?|!^zL#?k6GdG~Pk~88`wI^ddX@^j56Cnx^Q|dH5Jg=@PVV zrmD+IqQSkPctf%K0qdr48_RL6?~+(tAPK%YYbSVZQ>;%OB3HC?@gtGeV-6`y{d7Vm z4z74PKPxG^^Sn|hW@}vRngJJpX9zIXwMf6cfvZYmXrej_?Jmg8%Co`8K)f68{~A6I%?A@bNcTXEj)exyg^i01|c?u?dM{!Q>mX4BCA zK;`TC@VQ&C6b=wkV$KO@0jU(b`Eu`_r$Y*|r47|$t z1sfkK1f4VP6nzjy>H||>2-VW23a1*e0Vf5@2UEIRJx@sDV@esp2AZ@J!2dWiYX_=x z?Xn_R3&m~D>1wJ8@TU_Kq^mUd7?gGp*zfi*n~B`p9&0} z0yL^Qu*`Nr_6VxG; zjgPfWq{fD$g(bs{UOXLb^ZSzg575>58y-|KZ@Iadg~F8?#-9{tH9^hEXySse6reqR z6FOp{H&dXmaHCfiN}^l9jYiD7Uo-veIB4LvmF8S34x+6q;yB1FZ~x%is!%4I*1-fOVGy_a7(&MMK5;p_?Y**GxCh9MZ`UYG`p?l54jd|fTT%l86Ov$M_2BZzD@-GK_62x(Az1T6$ zzha-mui}FnfjDx=MK<1*Ui4Y6g<#!Qqsil^7 z>tC6M7R#ut=WQ$29&}h*6ffW-%H$sRqj=$0U)5u`-USb22Sxxts;7>Mf(^3Os2kOK zd#KDq{{dP}uc>+KoKy*st*w&e8_mLe>%32;mknMxDL%&bD6Bm2en1q!2{@IrJ>s40 z#h^G>i*+drmSLCC*`(29%X-U#&8R(8(NeOYYhA0SAEz5Wt!8}U9~s^kYV>#}`P!1^ zaCv*w{VnI@#FP=00W%b5#T2E5WR{gn#;9=ORNZTPmVxUN$CIjs|6 zDp$W$LR0)p_$sB|?2HoC%$c-y1XBI?;W=`N=ClHVQtM!jA2Gx{wD@qgiA1qg^F(Pz zA>Y|%gsDbNs*i70N89=JqHb(9=@@7R#V zr4Pe_WoZF}4KAzih`qV!SbTw8bt(ZgcJ5S8K)q-I7FHzi{74vNH!I&lgw!M|R{$G< zc`qQ@P^X9w4Lpn=!MD@)PGIc7ygPzE@AXn*xA51zf~4-0HhLf%S8gOeh!hsvt* zbKjru6o{c5{5Bm3kDx=GV#Vv*xsZ}d%$e#c=`MLXu};KSR05RmYHmx%S{31IoG^1&Eqam-I?+O~spUnZz z=}RCUi{hib;whCwKKQ=xpOw^s7~e2uvKJks%>hBwl}L*mlA$LFECa-!ska{{{5R#H z*#Mtli&WJ#@3Ub!|#gh%=Fs(zHhh6wH$m1v<)rQMPdNjjIeRuHEAfiqeUPpj86 zV@>!EP}#W$<}K<84dZ%i>i5$qu$0i3w$nE4Y}u-|6Bu9hi}U&Oswq?GBc|=73}NR# zxK?@;6UEOWA2t~2ji-NZHB;`w`1N_MoRg*>T|r!Cms1fp{+>x;VHI9+Y4}z5AHa&t z*Z^cm`~GjmBHxno#s0z?SRE6x9!*7~r-v(Mi%^c+3`JjW`puh(RgH9`fkQwP2Kg;V zE3I{$S0Twbn!_gI3jm>Z`_yoRqg(M2D7h6>%kAM$5#HD_WK9LV&#l9Nh1?*iwjavL z{f8Vi!L)lLd|Q&Z(bG>g30>Fh3UC>*YRiJFMhZdk)QhDSy9aNX79D@}Oj=aS($zlq zzc->4Qftyc24I>vQ4hc2w!t){!J}ZG4O99A*Wt>-0>2gFONmm)h%&l;@!|+e5u;k`@*QIr-rtzsHq)AbYa*Y-vxM2BtFUXkpzb{gL={A zj0d^;JG6ytzF;HP8bz+@(J{l8C<>P^7DqDtEtgSQEzL;QK>>Q4GP|V@x$YF?rBaTn z6_FK34w6>$Qew^gGvq%4`b37C zUU4&oyQi@(TTWc@v^J4d83>nXk&Bt5T52XMK?$AlCm6)Ftvw5sg|?j48UE2MxqA1; z4_fIZ1UauZ$tUF)5ShQHBU}SAf>P}(jX-koCelummwud^hkdx=J$QE0RA`+kXYs^! zRQ)n0M~#&Fv!su|e>_iry}fubC7^k)cw_2Hk^1th;rY$TKr9Y>N1B7<1?e)kX1O_A5`_e1A3(=8MA4tcmw-FieR z#`78z#iE)SJjM{t55=#d1|@+Ld8{-*@V|QCmbdWqfP>haz64O2)AxJWsAMnul=q_D^R=Dp+?4yN^w{S@dh&XzH>OACpRQ!_*UY!bp}3N~R&BgA9XK zNgOwD#0Kw*lXT0}zPU7ljFv_K5sfKKvin`+b#<2<)pA*%93foll_b{A2Q#Hsd1@* z(=44M;y=L8cwS|#vcyavk$0_x{#%dtHuM}9;)`K0oZFpjHU6XB77zIFl66mpFU+I| zeWu27LScJ)LEGVTJb+bzg2luxVVkTE0TCq@OtswSNEx`D;6jy0`!&2F?Z$<{5J^-J z>ONK+SIA=upQFq7or(@=vIE`*n}5kf<89%N>p)w43mTBs$#%FEJbbI{rca@5XZQQx4$pTR^d0 z9irYMT~s*JoFF|SW-6OT!CZeCKRh`46DtT`O`C0`mOMOn*&i!2#VA~Hu4a6cT%Ays z<%l)|U&=}Ogvdn#wIH)bWUsca-;sL<5GE%FZkee-TDy|MQ4AHVpVV37+9d3!`frD? zkv2$4;dXW^n^8@Si_ym`c^hEO-Xlz#uva5jJM4A4>^vqkhA^2yiEhxh5HB+nJ^U{1 zT8T4Egz_>#_=*W5p#bEfh(l&6nJbf2EyxiMvN+kZEAx)V48vKu)wf(6hY39_SChkA z-@3gor=%Emany#fg71%heOfVoJQDDERK8Y$ugj?9U0*#$9k-=MWr&v=7LTs)I6Mtk zrAc$ZQP4$t8#N?aH&{98OLnZ3U4w|{zWZGlh1Km|k@!;8mg5uHoN@9>^eJG|6~FJD z-nvYOfR0$76-Q({?JM)khoOBf{x1Pk>)8NpKcL#x(OoJu-b|Q= z0e@Y{61EJWcST+*+Tj{-;)xoZVAfO6VkL2mwjb)VS*L~JAMlpQpag(pt~NT1Lbowg z90G}rksn{cX~)rFi~Xtwlc&Y;0mH;d0G4rWd?E(y2I4f)j!MEXYHW)!brakWUjro} zVXq*C(yEj`Tl>V-`#&v2GK_c3tqPnhiWeeCaW<=znKY4BLGKSq4rTH(16`I6@1>T6 z>l*19^=}!U-5|Vam_%A!mlA}L03yj{QZ2qQLJdwR^h&MWOM1k!NW<;W?o8RvjH4ca zh7<{~vm|WOAj+Rs4|}}W_K+vyrR?y_2<_^$ScQ{Iz$D#(43mK&e>G^2{kPY6-7SW-a1N@#Rtd4g8i-&n%UNBtw?=+ zyuCiD;i|pw_4yr+??*gnMJsnMjhT_m!E`e|NnlC8jb-K&W3m(LI=+=%s8RKZvTvg` zs?gIsAC|VyV2CShgZQL37-`de{FPZ|2dMNcVhYdRBO@WHlKC)8QpeB$wg9b097yR) zE7R89Adg3@(E`>S6jvgvT3 zkxmoab7dfWB^6=FpJ1;<)4BJ+w65?J;1V7dY~A**GxRIIj}b6b=tP-w^q{QJ+4Is^ zAs|Q#vLnp=R(#MhUp9MVrw2ABnKfy- zBLko0iX`Ok1iarOyJ4igVe@?hWBHdb8+l+25fB~Fb$;kQ@*n3)3XRQ zi%eAT7}6s=-Gr(=e)c}jp%OZtzkQmQ`R$J2qm?(D^Pejhu%Vsw_4k~!j0Z_Vovz|~ z-C-v$$Lzkxy2h8Y&qDbn=oVoyvKY0L&Ac=^WsF30(BL-#99sHr5aZUPAr`ngkih{6 z=JmP!^EvVH(Y)X3-|*z@MseImfaw@e7P#oCH~J1$hpR&wPJyuzy@(N-i|#}!rLo>56@$T{%!jG6&UnwU*@qigLln`a zfo>X=W1jDP#x{nK_jk8`b$&K3@g=fCHiY9|#99ts7eyOu;w8gn zEsmL3(x3o;j(zVxwhSu-#7v1mEi~1pEGC)I08AK2&IG;5ZX&*_jgDIIgYpEK0VKLW zZz&hOxSv?WK*-tfiz>qX*@pPf^@DSz|3W@O&Ffb_pvUA8N&JhsPsuPi>^!=#+N zi^1p(<#)Y@w?npV=_L$gRK(v45VO1vut@D2g6GCxhU5Ojy5XO-l?ykTilX=?uIBtR zB*_@td8|#1J`h(iXyhBU-as?jilm|D${J6pRO`2;R>!5(Bp$H9C-;xTCD6USUsCseae9y8 z4-@?SAAuU)6ME}*7Os_~ZQjs_+kx(HD+M#%=Kbu>-v>y7O;6^TbFh|GO6a>MdivVt?pwFv!=>H}V8xkWSVUGLK2-)W z>RsXCN7S;vToO$S8wcULK=-yA#y`5Es#u!?YH4x!8HjMj4#jTL^HW?!y&!IHhxc8A zvRrj{Jo)giQ9UXR7fSR|B2O}bQa{-- z{I1fMrxMMpfKn=+t33FtHD1E{U0;AuIWvN?kSNJ21TB!6(hS?SHT$6JCQ)a9fpgRS z7ba#>bTfB>#ohe`chXdlg83Vi=ohY#!gr@iCYj3GzGo76JqWZn`eeH4FX;3Ja>5=& zb~$6I9-k)m24%qwZQDP9@U6JJSh^Uo|C>%IQb1_3)v&D^>YZeHSqNsl=E|TW>LMv%kQj!_yUsHfhFL%g#>E=COqC;Zvx|qICFXX zjgQdBrUG5GQ_ekfL+&b#lUF&tp5J~~Z~yr;B40V{Bj^-`cek5es2d)Qcc=2P!Ndn8eNJG2SbamJ}urV`Q6? zI@cXy2o6jfQLNrx6GTt(S4FAPZVKmDbLqU*V#=Y)U}+Stoc*iq^Tvs{Qus4)(vG+~u3aQo$$W$CqcfdiCJhf%l}1Jd^bd zrq&d*q|DyG43BP#l9|ry?9_iT?FiBod4Ag}=(ipEO4Q>~-%R8D$5H>I@oUfKIYkQu`VBQEG8x{UQgIel^vKg=`JTiB-ni~yZU!++MsUxSA1%?6Sn^_6I3smmcwm& zzcAI_Dd>JdBk%LcH13_jnh=Sz>L<(9rvs>Cx_{2Mjcl?0-|k-Vyb=-cpE+ofW|H^U zWAQ4iG{z4(oPe`J0CPmD$Mfa?2idQDD=Z3V7Ta|aaDgJ_obH$hf{(nyk`Kz zgS?r9VSdy~_F8}T3#lr9aJ-aE&hRQjcDFhiqjf;DgVzZ-S}rQqLxnL}p=o)9AFm>&AhwoqsOMMLI*wH0C~d;#w)+ zYVgDLS`rOw$RHBdI5saDfU$HVI%*~;Qgm9a20Ks^YEBrwmN+>4*z$~6qVc*^Dz_Aw zbw4GR@q_Ogd2sr8RJBj@wk3h0peya6=r_MQd|+7XuD@47ri7`wL=p3&JC*C1n&5qI zyeAt@m?(bIXVFiM?s1Wa@4pzIlm!sByfLz;J1%w<@bIX7+p1=LI-&E~9U>Va9wVP4 z4=$l;CMmvDzqf5VRAx?D>{|2qQ~Be^wc%S|_qJJdYJtPt#%mkQh(T2+Suv3rQp^Ml zNuBeZB0llU2Fq17vcSE(xmYra!2N+#Ig^!X8_uRz>j#|xI$TOoOb*+6tXO3}jGzR= zyxUy0o^e+RTtJR+?z!9j``2qkG!#x0=wAmba+HCWSZBUu$KnUn)rZCEeFRolo|B3F%k|3`;vvu-%=NM)|xZ+5cr zH*Tv+lt#nN7_i~~EuvRGsP6b%&>!bx6{@!P1yP~fzO2fv3~}}g+P(KL@w-3!8_=Qc zcro^WPC#AWpMQwkil);KD-xk=$6$~1THSc@1d1QrSo?E!R}kwX4dSn5WJP+PuFcA}OJQrr>ycY#=f_WtQ#twsFOHlR=(@h`k+bXnkS9ymP|j;O z)4QKONwDR0J_r)Xhqc7K*)dj5@Q`@;#P7cHx4w}FuQ_VLc{BFfajx!2>bRT3hPWgs zl!ERjsyAj7&IMc{Fi@pghX@mzo1D9Kphrj`sg2@m&SN)>3CGF3$qu=y2JD!ptbn3# zc&wOo;e;mJ&jqO82YR)t@{I4cK8ZJXhMOcQfi#vTxNeAJSz=SSAhLosNxQWiYOe>F zYx_f)0QpkgqM2b;yl=|}31~d;{Z`nt--!_uexglT{QDB(adoI+(dt5hxpD5&O{DkT zBtoTVx#NgNi7ZTtJJ#;E-9-9VvZ$={$8vT7Mrj}U7u|Pd1B8<~wU zfFsS(+1pTM<-yF8M>;SQXs} zZTYy>vqzGMzyv*#v=)-D? zC4Z>=_#?;F@b6J}#Ts`d!ol25Tj;-A-N&zg=WP?E%oDcs7pgDXgt$-XxxV^)l=bzw zKf8OA5Kj(!*4duH{72Ef``al9HLrb+n({2Pfol)nwQc1n`)p4pkCMxc$;d5Ov-617 zHsf^9;OwKQ3q4{mq4iA+SVw?LVDx{cGXuS)Xi3Fc9loS9N-dx+|8?idqysVkAf_bk z96B=s)O6ziHOsA6VwFjMCsO8+vbuEgzi-YqA9m_ZyW)J~OPOoFTb;hG^r+R84dA3x z7x~Y=e?5MB9I1t!jBb^>%?^6nuk-5t)uAr6^MvpO|(k-SA3C@jDbgrS35W7n+K_YhdM0wS|V?;N#GQBlyTT zy5b`lK}`@C@21eyw;ExDH470Bj49^Bcp?#Qf1;M7wJxNdSD38>P>e=46Fl^!dij0q z{a@$K!*d~@r~h^buE)R3eEat|!dIFrf1Gc=1>UTGIi_}2o4Hf3wR1idWB>WX;nlT( zXH2#qDc4@Y#`MpJPf|Z#pPqkMukDQcw!RTA^sF&J^5Xns@sIGkpX32Fuc)$0B9Y${T=&v`G>V!d5F$`>bBf5mC6%+s#&z0wzj@L9DN;Q~JvNi}rT@Yee@}+*UPXE}kLRov{ z7Ty5cj#=xGEoHRX#RkV)qKGaG9g~mOU6q|X&+*q9=ST0HJ+C)KKFcq6_E%Q!)yDOH zAn$w7MlHt;{Le{h_MZ>g?;UK;sD=O97>;wXi9NOaaHPt4&>la3{`%zH^k^g5O?(}* z|NQO0UT*ztiwk-RWtY5^H(xi#zdHA=6rXJE_z&IH*?v=dJ6;r(9OkzG-N?bfr_{zu zr3ZZv0I*w4hl&kf)1oms+Y4n9BycMmH0ZI#Q_++vh!gPg&B%IMZ%TJi3UafU{WKK4 z9vx+kxn(^vcrGiQ39_!iXax`grDeu3dC{>Vur1mx2Ps2>prQdn3~**2i(qN*+yRDp zf_Wbvu8`XMOF__zo?zmFpM$$K(G0dyf1$J0q9j`{nx|m3KLxIFl-&B(Yqxy=nldUH zJ;9T=!^#H!EkrvTc8m4tU?-8-I$)0>V9PF(R!InLCW60m>fWotUI1)v+&{edN3D%#&IG9Eoyb<#(IY)V+HeSLjO@jA5kj13tCjymfq3Ki_k4a7+@k zGr2>GYP`tfdM`?52=Hf}O3!nw%ijzVBTBw!c>(IzO%-;7OzR^_brav`iRG{Jp2WParqON$rugQ%C|f z)wldc7W28Oy6U&BC@zYLE6$H8CQ{y_L)e=W7&9PoxrR?VyOU+d^}WQV_2K6BN~smQ zkPk}`>Vf?92`j}E?v-$BR)&753}HvJi*X^_A)B%Ry+Gpha^he>8#x?&9?rTLQEiAi zE#2>E7FATH4sN=ttQMTI=;$~gpodod(}b14xZuF!8_XzuOJ+hmk)O2$i7m&9(pS0B|AC0bVY(qkx17E*<0i!B7rsD<;lrlh-~eL1|a9 z$-+D78a?r8Dgwf7+sP<22>;ud3mx0uy!)RM&?eVniNkrm z<>FRQ)hePu3>Uw#EP|cG@zH(cz4Zbqc9P@lv-*AYMH6rQ{~qLi*?_0BnaQoT^!_)L zCbUJN>s+wR&MZn$ynVM7+!mn5M>O}S!7(1lA!o6ld5Y8j@!;$Eh%eMe4iFPQ&7@pZ z>JI~}3QFqx2Vx`HuNNJ4>v@U*O5=TE5CqlBVZJ6B^d{z7wzF&;tk^t&L9_d07k&6k zAFK#w7yhGSRt5a|rlDV1x0XE-jgjtN7+!%;4zggWNj9i`nN-+9Zr`)Hnl65`_6Pp{ zr&@YU&#zaj9$RN^2OjMQg-LZOuRe-Ts;}?8Z8nidT+Eh6?6`4NI3K&q<>Wwp#pn7g^3%Q8y7!s!msTH&{iTnTC1v*vWOt)) zeYZ;5cdL$WmUCYC7#q%9#p$Ijw?$k&mY0!P?Zo_S@!;*81e4m}4Jjjs0=lZvd%h;W zaoOqkXnS^KANb&`7+8v>5`ECj4wahyP?>Le%*fd-;M*0A+hC^-wrUn?W~<`W2v$JU zV*Susc%S~a$JTh>CGK8@WXTK z)r}iJs@G4e&w|U1_{W1vhwpwTE$w1Q8~4V3uYP(`e!Ab&)-&KNp7s@YZdJp&=Ze^n zfOlarrGyqr``}N-_W)?&h^i+>zTsv{Z%SXejSdzWz=6#>>qwXj)}I&!srNB1dJmpW z1BG^%OIj9hnnz&?*w=D%cvE#F?D|-ZEiz5nJu23AA-Zhrc6rT ze*&Qq8wnvgXfkjC7IP&{dK?e6vXQc{`)+_5H4X%;3^_0WjT_MdNVLmSjZY#XCWgde zd&k#5)9H(U6V;=vmkFD~DFCt>faDH7CVY~Uxg5g^W_G1l7P}kX#1>>pJ9ob<@EAj-1kocm&>H|ctjgc?i1x@3*1Q%ulK9H#_sC&_SyaA^l%k?i zhq*65^~NC0(!heKBDYKKrNs+Cs3nXLssNPQ@aJs)N~>G>Wmt)* zjEHgMfmW;lw_`eWb6O`4$!C!iYs4-oI~=j*i;9b%BmQ6#E~AIlc(#}OOrcJO23Jz? zm~lQ6S{x^PjiP$E3qvLX`C3l7t#yczfLrdst&1W9w+@X4ennX(U^=`wjcHOQvJfMb zbBWifj-R-oPfr7jLD;zmEEqMa6~!{WFH#k#8Y2BJcw#U9v^WRJX0plQJJK2~MaogS zAHdD`9nFx$_li)O-`!d@mzYZ@GEFCYHRhKU+5V0kB%V{69njdaOp@-6=9o2yK{G)R zBtpCjr1~PAH=7B?!@q{=w6JSgHEM<==&t#*DF(8uIC`02QlYR9*~HR&WEVyjxA%zT zO4^sYeqSzMxsD#@aPHi%BRz&W4pO}yBLr3UCQOM7hfek+So744UN ziDX$dT=YF+o=jO(N=s8bDm{jWUXy|bdLL3Gu+3tb)|gfLO8ZJ97Q6E9}NrOIT=Bq$GeTC zxYESj)Hzc9#k&HAFj`bnTkzp@R%^9zxZ}7X;a=No4$oa*a%|WUW&eV1Pl+tBsPV|M zhZ7CEPWs$FhsX8zD%ZKwV9g*?6<_iT*eSAIn(8EZ=W(cV*s^IZ6a2d|OJnUau+{tU zbc8*-FQBAnjSZ-xbSs5Jcnd7qhZG;@TW?2sc+>w3lOg*q!qZcW=$`__dF+4r5HAF| zo>F)G*&}o)wA?yH)en2=`c{P57RY(jPnqfOKc}jsTO_99m5@zYh@@hmJmp@HMyS>{ zZ%1$@D`}*TMsdh_N+61?*A+Ag3&#!$mH~h|2+4ZoQ)n;GJNpO-H-p+gZuSv8JRXXr z7UN_6W=&)0#Li|jZ@a)InvqEa=_4a+$e3Z?D8d+5A620CHZK&sgl#%g@B~b$LUU$W zHfN{*b%>GS(E%k_gRCj@I)LT#cv)mL{P8+;WL|O=9q3SJ!>A=(6?hn(M~F*Vn6q&R zN0ErEe8cur+4Nmtv(=&#b$-$fqmLGSAsnOu+_bcsS?LzgJd{X`xqyh6>{Il{>{WS- zQ*vag!bMgk30PPIu!NA%P9P>O3X`dHZU%?4Rjo2xYlG#Us5%tm`HWPemZ~~MaCE8- zIzuXpo83ULwJAr_Ik(-5?{+Q}iH#`X;7p3r!@u3N+zuOhlI+r=HS$)I!O^`8MP#RF z86HlTky)_;O23q?*$S=2OwR`X7^!&9f7CM?O9y1dufP{30HzG&d)Iy8)FP(SZ{Ai^ zp7+0~TZ$)Ok|UT?GFL_zzB!sMy6TQ~duS%lLctN$xuMNn@ABw$2`N}}alxFtPqA~T zL%6JYyjak?GnNRR<^m3|IU#5VUC{%?OC1a6Ki4o5L}KyAOa_V~P0Updz0MS(2MkcT z(HhOHd|WQw&LErZbij?G-Esj&8BOeVGC4AHSbhsh{&yMmK-$W&BOyycB<0O=nMg;3 zrbtJD)RfKU4sn4c&u~nlClLJxXhT-7qP|Td1bGcfqFR66t0=J|+Nk zYs*pGb(V){es3qJTI(_Wel$+apsAO|v*|b4@}NaPluo3G-bSIPPTxpp;H5;?$YIJb z$8yi+7VZnYVA4(?r7)lWEi*-D^h^_`eLfkPt&xot+-cQ4z-HFI=ZEoVImFQZOSvlQ z0($p4DU`tmphOyVph8_!lF$gXZwP3#$hWNsIgZpsEvL%lB4w)zdEZkCcd%&m8Fb_) z*-V9ufezmc^JNEo9^^2Jr|{D8Kjj@a5GdE##7ka0iy1T3VkjNGDU^^_Fu{)8eek_# z^lBq~;Ym*^0#BM^vVvbG&twpZ7vxrWm+LvO*G^Cr(9orc(z%7RsNg(-bQz3xu`5i1O(_*)V1(NzQWC4pZWoRSt8 zJAloS3{Ru4eE8d5*8Q=yl(!V7Dafk);IAzDH}JAofjbL3*=T?A>&aNqYitBuGTaac z4$BrGzw1oq=PbfE>Xo}7)5_go5R>q`$pi4 zu4;rGBFgIB-WiuVABY#eu_*N(=Q200r|i_alSRs3DU^|qxXuHk02)au(?2K@*yW#+Uyzm=t}kqC4+;YI07hd2)*RzNR|PH-d*Izdv)U zk|Kp~Lqoe+EXc1TO~AU&b8YlrY` zq-vb$?#yNhu~OY!F(<&YZ@f|I_bK8`?3S-`-ErvjefL9Ea5fO7L(oSUJ#z%U@G6YSwl^e~ny^ZwU0mtIAgMpxK3}V0k9khC zRg)Ob!NRAiE*X3{uTUq50c(+kurzAcX!_H!7Ef=1k%zMJL>79bHbnCGcxR8*t1i;e?E=S!J7&6S+kiaKZkQ9xi% zRss)m?R|{9`4k&C)?!oQ00fx@;E8?jbEAm0$6_M7pu(Hv1=|(B*ry=2=8F#i8vU3) z^Blb@rJvB?Ko=Vd;#Vyr91}ON$LVbWCb1=c#BzM6uA8F+TVI$fyNc%4QJ!I7*1wD# zODMZL1)YB#Bn^BaTZb8plF*_bEcWGL+h{U;Dl8d2ui30)GiBiPP@H3kdFMk=jBtAx z@RqB4Cab{cQW4Vz)H4aoU;PJQI!TnxQI2ifYl&Yp@keX4@G2S+j!4~%SCGlGVKPUE zWC5eIwgM9-X-hOB#`vIRu;2&njt+i9O4FNcE35Ba`rkbyu&f5`fo?3IWOjVK{CYwm zthRjFA=jpLewMrttTos>5;>F6JRAL|-O%0I1G9&X@%8tIzpB^Y-kuRV@a@R^KFnx% zJ86(&=(V1;9S%-lw-dCYTbPLGNRC8$+f-{6~JG5ATML~;5;|Pmb@?dz58o~B`UUTMqJWVJWDcbw5j9z~flJ^qr z%VoX((SJQWRq~@%-mjZy<-@(?5B7{9-khlB_ZZi0fZV5q?-L2W#cp`bzVDmj4M(^7 ze4F>{(?ugye6G<>aXedN3wK{XR>>cKqfGk59Pkw=Y89{{!H^Dm!abryS_B zF}nY}yqD~u-nFVzbyQ@z8mw+bb{b5m5Pu^P(G`M$K~NRDubhwsOP=DNB4m-o#>yKN zhUD?`IMptZC!nhq4HQdM8iX?j<-`-U={$*L7ign{Hojwgj~src9#|-uk&bS088vl) z<9|9+H{)e*j;?C7)J~ z4u9cvfS`oxfI`dp4$E3y?HMv)y-bsLF7y#C^#gSFdZ=THHcVLD^;E=sUDHe zOlMAe?|CE*dFCuQ%dkdN{OhbqmYjt&_;QI}4v{$_Db9*jNe`ufB)y$5dqoEJ(`p>} z$tVf^+1Vw7%-`xx4H~i{S&-WR2QG4y7I11;mk^22e-ojr z0w$-XSjw3~rqFWDa4W0(NIob3tjlJZ17Enl<@aBN4K>VnnoGpnMKQi za;*@CJPQ#^;?!1;l$2^>d-62~p9g@cXc)&<>Oh7h7}i#xDwHPip)j7i%OEmr-ha`r z7wv`vhZVAfb^zf#C`5h92RAtD?G$6}m$buSyR?;M^?l zE=3y~70MER{(Po>7EF6>`N;;q_4L6}RrOr1gKm_90E;S62olL)Zg}u(q>ep#_M>Bd zU_@0TXiY2FtKzlT%-W1IHx* zL$>LJ(JCPfZU_!-wU>mSvYiQ{uP*p6IJ&So)j9kW!b5fosrr>P^f5c@Bp2k!OH*Q! z#Ih#5pEwFgJ`vHd?={s-V1$de8itCAe+? z02tH^VzQIzA?IQomw<^tP}}rR)ov*(*R-yDK4`YdoFfhe4(b0Fkqk|r~jlRzq@M`K$c3pRq{yKOw*ov|5sLk^1uY9~)LEAXvE zglndEz(M@g9FbG>ay?{|RG6&yUpW{%OJs!NY6j~_LTU`55DXQQU};`XopdGXueJu! z_W;<&AiV$-po}SwEqA9=JoqjLFxJTF-SZTCq*1hvieR6#r4fP%CCu5=9=ZB+UyR91o#ALH*useexhaLH2@TCZgi>V=bzi=) zvkmg`jWoN@C2R9GfbM~4D8NL%qO%NVh2GMaU;Iz#Ptor4bAdo=46MJHM4=~4tlEB0 z4E8Sxa;U)l7Nqn7-uyLW-z09tJV^Ml;O-oag325iUrd&hJ3&$$c?~%GXcSnD^a|he zS~3&zp4iqm+}*4V?N&$K$Q1Y^d7kC{zLl@8M?=NFY;vv9SR=Uzn}hpV z>clTYCfO1qscZNWWKYrU#@{@0-(%RwBC zJEemsD5P-J0DT!MT`3XJco7k#z_yjDXk4EAm-d-rSh`}VB^!&s2xHN?b*R4#iavL- zk-JuhwI^5?v{fT$aLP!wBk`8N;+0jE(YAx>uA%p8u zlhuh3OZp1(ooVETnCC1Tz5k3JxpV0rLlRkrw(b(v?gV0vZ;{==C>NN;zT}y?0ByA~*0)Mn{I* z9P6wthoGd~0TD^^i?TwD8i@c?tWh+Y#zM|oMj)1xQBaWNBVeowKo&{ORFnZWSKiIn zQjkm03hw|iulVmSjLalrm(c~s|F8h&Gn+)ns>97uvTPso4 zM!k26EpM;uN@qksY6VfS2^|jQ6tKtk-ET|<BNF}3m9D1OC%P{qG1P<%hJYaT+$pnwQ7Va zRSSWMR1Ivcnz7iD6*kM}YQLsfx~H0oat*<$@s3k=j`2A0SeSTqTk}b=O&JGGNv%C2 z@B`1-&vMwDSg5uyGk(kANXaa@+3tujh~89;Mv>)?nYxM0o>v`o%4}puJw<6jy0V=! zaGFt2*}N#w9Jbxf$mOVmBStWP{S)bMK!VIRHRoCk?&K})b@j`t*>C0g8vOxM{$e~Z z@jQ17a$6mRlBG{hdCnS{Ov0M_lNvJ3?KW-|%=jxC`wL5WhU5@P&q$c-SlN1=B)(m9 zC7g%mmeJ%pO@7Y;sADKfir0LO#xmuynWdVRDmX%o@JhMacIU|UQFx{c=W zSr%2=t9kz_YH60ck8Y~%nmX;83wIT{T+Tv?0>!nW420dT&+l-)eQ3ZBJ2~n8Mv~a+fSvmD@ylMoahNX(b%!RZNi{e2J5yNB!R#X z#%iMBJuUmi3=;zPF~(ADQwa@!D~+l-7%4YiLOaq$)+7o*@RTp{Sc(PdgVrASy=TgOI$M9#>^hfr@HFfepx$;JDWa+n1VyxU{ zUO^yfnEexGl_{vCc>R>3n|inP%;Boy`WMxm!1_DMb-!igB4$$D@j_<~E7%QCo}4EU zshM05D3M8ou0ul4T};-x{NXUd)cFnWcDh|EV-G_vIQO{X=$SG?2qi9stKp`mbv!y{ z9T}V$Y*WkPgkgGZz;W9Vm1><0FtMRDwI*yg$uQIm0J8=`o2z9QCX18#NNkCFUQ+de zNYw0HT{zAt$`<0raxm)NC`oL*H@ctLxE6Jtr>aUi!i4A1e%(u!T=a3ue2*_(UNcGi z4kf#9iW?rRs(=DI5kDt7ko1-jV6zDpq8%W3TJL2QLelT)k(pSQS!~JG#rD#T$bcmc z=BtE_#-2U$56$xU^&xuPJ+6`XpXx%5(1)+%yLtPc#k_Ce1g#gnGN(%Vo{PVlE$9h51R)Og(nlW%>^}3v$K@|*vuq7(Hl0YmIfrZ z(4Z|~#?%RN(uc<3=ep3^ffQv3T7(0KOMn+8^|Q2R&n_2jbLggvrJLbi2oH^ePZTuC zl4CnAB)k-l?|K=aTHWHXt`W{iZNORMnZbl8Ne}(LBS{pGs%XzLx(b+r0?LD&#zUm+ z2#t-mVZ>^3o#XUQTaO6gBF@-k z07axesHrf2^NX`l&B<81vKlKuTK8((Jx4xcWYID6`6c0YB3e2gI_VwFOBkXG0Apd) zNY(QXM{8@%v@g{5dVjPhGS|A^zHGkP*!E-n<-F}bfOhXq`Gz*k=jF3E(yYtF`sn16 zoU%MKnAvUySPcAODry^P7&;jkZkQb=Hi75pKy}O~l@5=)SswNEKMDt#IQg9P7S7hD z130RXEP9iQ0tBGdDlmTcW+T8tE);F+a)Fn7z#nR5jfqjf8Z}L}nS{aO5|m(9jZJ)Yx+f6 z)4v4zn@d_2St1o&xY2FweQ|Kq8FX5o6*oz{B)Q~vP0Ywd{`8fL4nPA+a+C4U6OoF+ z89!xcp%siuGTACfy~QGu;4p+Rcui0?SA0=Nf=qpGn(*GFQK6suyKQb#Q~Hwf@@#~s zQB6t(7nZz2Q?(b4aOz};=M{6(#>HqI^V07c$0?0R38}$@shGIQdf$K*%U;-*(v&&i z;S5FayIT>Z6VnGP%r(dY0gMOHgx^_fF`ij+GD)g7v$8bJ6gCNm zrU`6!?8!`HSO;FMi)ELsvXumtvHFMH={c32@5;xs^Y$oiZ;-r33D)K`FIy;a8@R8U zk!AKmGO>BKCWd_nSVa?QeSh)Bs3bD7l8kWOV!aL&PVQ)%l`Txtm)eJA6(vhan`q<{ zMwluT;oT;}u`~q+FaoWZS~MWLSW*Mdio+sbfX}+gJA(A0IS<_hS=X=<$26M}9D2$_ z1&nQ`!FUlthz%BG(L27qvxS7Ih>Ms>B(|Rl`bHvQ;`T95k+41b&oEfHxNWl=o^x%DE zvvot{Z>dSMQ^~J8S{sdK`KIPtuoW44PBTGAp|sR=&K|f|B>+f2k?P%R!Nt<>waOIg z^QPU*5KdYY{T|$r8COD5YV*TdXQCg4qhMd$L)1Zv4ThCbuDQu@%i>^^{K6>H72%#R zncya=nbADanu@| zzPu<8<}_OP+vLn^b=-=nDcc;sDP3|s5MhdGN$n~xY$SHPZuOz{QE__noTc%Xc*0ZUEL#Xw z9Zod($pG@5ov%&wyEx#`k>)@tV)4@8ii2VmE?j(DRXvsKOD-blK9;UVdW4j2+8nJb;B8#2e$u288Gsh0_|v zMDfpKW=)0y`cpf!Q|>wxq?BZ6kS(C+nUcF=E=!>@lSQhEBsAEi=r!0=!Elk;{6$OQ zefL_x#x1M)oCb!fhMRWzbqU@IjlgrAghHlwa{61OFek=pMB3W>h%X%yHU2S#5pY7b zPmd}u7t`fwHZoD-y3uk+>4{9kl8r$BEC+L0Idk~yqC=yromlG(^8vOklG<3OC>+Ry z6H*gtB_plnkkC;M$-xcP(lD^igjPo@Cvxacq;D~xPhfLb0lRj#eUkE7nNi54$rsL|1% z04yCLzlAV;k1)!k)G7y_WS0_avWEH?NST4fx?5-zMty^z3S`~$FBu&Vl`(G~<_bfP zzE)^hJ@hmhC(D3v(+v%;iK=4o!g7?1ZMKH+@7T1myMjcsYQOcbW(~?la-fGGcTBoyjK`Uu&L^&4^;q|bLWG}$wXQJ$JE|_F zA_gE#ws>Nx%nOTzLE=DHjzWoU7fD228T$%xBB#;A(C6;LYBPj&)`Zip>iPo4GuuFB zDF#)2ZKr2}xKirgaBCo0;x~WRQV899S*3l-ik0q_egBBm8ElR>$>nP=ye^d3Q*$?* zyhj3XY;yiG=CsswrY|t11T=tJCBqO?y#iS_5({?@WI6~Fk>u`?yU3d!Jaiq}{N3Ah zUhaH3h4Il?4lKp38JmrZop1_EX!EKSN{z``wJ02~4PtUhAEU>KI{WrVi9AZDV~?^* z(RY5~*6%tmr^mnq{&dD!G%*^!M}0e6`+0fbfQ}wHhcxE+)SGf*tSw{tT5~DUv!CQw z$>~S1vxV*VuNUQo3D!dfRl9oIn<3r}{AW{YXVLSXAI^I9j=kl?vr+`3aeXKY&z6x`(t5fwU>lmoTP>@9Vg(DJ&BMDlHrieBJT^P;EzAM?6vLu@jl}t>&s0%6x?gE*8d1dy&)170VHBZzHLI zsfoYYr8uzx-b34U3T5tdJ}RzCPJ!Bka8+hv8I7n)QOm|qY-M9|tig6hbKa;e0UJdj zsonxgqjtXMe<-&|axn4SWHDv&s!}S3fNpA%UqxCk&uQ;yhU3*zcPh=!X>p;bm~NYj z`m))krgoudQ4iZn+vZ9uUQeQ)pYc%F6dDsmun|(Fvs8zV(upxKpy>0$MqV*7cb>01 zbpp19ZP_1>zD%|7UChe5zf&_)!Go3g`vGl2Nd#jlalCdjOz>16E=Ui$7`iCoA7ga3bFg6ad9`#HLqTI-=EQRETx;IB=BN@rGn&4 zdC1qsN)Af&u4IM?r6Ora5eUbiev}rh=7R7i!wC*i+=6jak^HtYbs5Im2M#5EqQpQ! zhlE2hYBY~^Sp>TmVz6;C{@!iB56{(6E+P6}!4-R3PAe6|zq}-SzmZ!4Us;plQ3KrJ*;N-6q=mI4@0N7EcmRSgYl*Q?Uf(oH%nHeva|*LPzs4X+{_5+gb?A`7|ujE z$s_)w4?;eNEx?%qoXy9X7{SJnh>u7H4kKp6uR`*1QUKo;@~3~q0eztWzLg#^={S>1 z(4aR4N5sX2T%6?MOg_P+BN6&TJTQZUxHyfDn9wtZm^@0E&A`Dzl81w)2!U0&R-Hl4_(u)+bT-~D4a;vo^8BjQp1f*N=#qT(2B$65(uMEBKbHt%cf!j(BOa&QK)j55HQd= zgFti~c$!3+ji5+C5rzO|8Z{l1K8YYOaBz)DM}Rii$%KoG*x)ZhFfI%ydE7YV>w3N$c@#Be|Z)Da(SqwJ&!KpzL7vN3|03`C=IfQJ|m@)45{NP?Xl8is?{FbizTPDH~1d_ss3*%&7qgGitnQqAd51q`JF z7Z8n0P$|3+4k-=cU@DCZ7Y@om(25#PGWw9&-~|Y&<`jU`A_5-zgdV_hk_#2TT_B;Y znDADMu^AD@7;Zik!5d}Vj1O0$s5TfK?74(s}e?UnpM*JU{1bl+VMH0fP z`T9e`kzaqaw1+W&gy1HLacF!31VRXaA(WtisUH4I2hsk+gFb9W5`EYWgbb=7MZQDX z@AN?pXJ{6fJX{DfJETU(|H5C5{G*S}pBjtguNK92NF*45$q^1!a)+|f`U0CExgAZC zBK8~?)^qU~`0i6lE!YD)2E`I0h!#L;0x8wNRpjBDpF>G@GD!Gbni$bmL6Jg32>UP> zB8LMZ4Wx>YGLu2UI}N<p64n{PPmfaMgS3Q5K@$1UA)GHD6JodsS|M&F1F=XD zAes-7p>hdvsissU^Ef1f1Fet%^l{P|k*g3i1j3qSoF!eMGV~G2)K^+`d0E2;82*pb#hT3*`I3#E zi+uiQU^O&k{HK6O;CLJwkD8#NNT#a(*iP|M@T#F036WH!A?i%w5@0`*OGzOGkA9O6 zBDsI~A;B;- zQ41RgSOO~-q#SC>pvmtg^dG(79BhIT*Wlb?Qfkx?68gKte`Js|CHfGS7!E9e|JzLl z`8TEiur%_wkFYHZLChr}p&G)e@b83!c*qh^qrpHDlxS3&e<6~R!5+eadf+MW;esh5 zsq}w{nmGhv2A2d(@{h)@Kg_@66pRF{S;(?^)D#18CFy@Bl9fUe;BfOPf+lcLZNc%s zR?0tH(4a_=5b!*zbA%C)Na+9YHb!DRwI@LTl8L|wN`GiOrMQ2P#9N3xoJq$i@G*{% zOZ9*hAo~}hjDS55?phH+Spdf_wdEq@_b&oaO{E(n9UXt)ckTe)ImudfB!~WQg=WMw>k_0b~X~W9Y7LEb<8gLH*JJ{ zks|3-|1`uQG3XzWu)cVs*TM1kZ-kp&lWYhaAr(B(3KvnWz^Z@KMyP`l6GASv%$XGO zzcpdS{TsS4e&_#|!R*rswg4xo z$^A|LU)v5Cj{%I7ChUO{!a9cX|4u1%AYc#!CwT-lSuk-F4c#_L*uN(j7fLiPLE|E! z1bh*fKom(PQNsNrk(evwaiD)87itLDA0R{0HB|cV1mMH&O$eb@FmwPRH2dFG)k%=! zpeYpK*3;~;IcS3Yq<}+p3*ZmY{}K6RuvED?>``!_(?F9C z+Z6G;$-iW9kP(Q7Xt28Z9H@u&B9aX8e;l}h2qTz0PPTv$VPF{b$r6$fMh@lwOeF^s zWj`ND4rrW-4S|oe{;Bx8WC=MqOYQlvIRKwcr$%8TB)P5st@T%?F5!d>4hcG-kKrQ9 z3y3}ZFP*h7LLLVum&vErFAXCk3PwSa?4QZdZ7>864lya@Qc=WYKo6ib5?=pJ zlpKgd0|PKBW@vl}j3FVl!TdLkrCdW80UgrdO)(F_v7XIEG%g6K_bC5G+BF17AX=Ch zhh%VsU<`HON(hr1%Kw&1Gk+JTnH6#g2nLuk(U1`PU-*AWYH%8WFM$53%^dC=$RT}{ z^E>}5(<_s(gpkh>4cUx1LIG!}o)-DvJI@lX76k@+&TAW@%)v3YUkdVVlu+QFUr)&dWZ)m=$$wk!4 z0)0fsNyveAh#?tjOBE?1Bq;(7Qm$c2A{$TA?EK%q4>Xu$s-^>VKKt`LKyHs zL#?Pz0EB-ML=M=GNRV>>fInm~6^H*zI1PgZ#esgHmgGuCfq^9SPy2rhX&CH;5`6&y z2E*p|XT8956Tg-IWDxe$HZ`;%NZ!h^p$V)<3DNk(Z|+Z)4Yw|I=oY8Ir#376w}arq zZ!iAd1gF7ijuAo%TMmH#2N_9sl7$0k|BVQ0!^a2_fQdM;^TXY&2ytM)%4Trj%^(SK zj35CAszZv;<`HlJv4NMwKPiBP21T%qL!;ouA+EqeN{jNmLE;(@XjwjJ0H!2l)( z5`xnBGX*p*usDJ+1Mm?ACIu1yH&7&f1w{-2r~#F%|~o5F62=l zh@b}s0k(+%d@vqS3Y0Gr7~!1)WeMdA^a=J8a3(@?kdSm7f`^1w42dsbJOZexbf_)p zK;*#1r1atBrR<04V8aq-aM*w0mmlL2TDB$y2|LWgm| zFUo#kvO$3XV?jfl&BK8a@+hGQ5!rkKByjsj155-2=+k%*q6FZ>hEWiNB^4@6I#f{; ziWo2`fC)2&!zc(La5)=B2M%l&fMF6C5dr%o^bFmy!4Wz&q1m8AslmeG0LUPrF;F(2 zLvoP_JmuoqJSu?Mu!le-0D~xeM3g%?O+fjc%_W3z@dze(1n>%Ql8b{oOvIr-yA|V|Y3P2t7K@Pq{cyL5uB%dSXQuq%|6UoB? zPb2_GIBW)}BQ^rSInbL3d}Kh8lTFP9qVb7r1|R^-3NbOjiZU1oye1hqq}kvIKn-dF z0y@ctK>=rQ0j7oyHWQRKs0la_u5baWFij*#7~mI21Pq@8;DC1^{Qn=x{;Ef2EDS@K z6ir$h(WHQdd0^=wE1qvK;S;npiD}8rDlD&U>Fw*Rfrs^U40N2BzfkWaQ@JL5xu5R& zc?W!g$5rYc(cic;!_gp7ZC3M#k6stOmd+_J^vQgY^j`XBWYpU9b;aLGc4qh7%evw8 zW^%2=+0Wr$rt*%-y*li1{NVQUMGnQs7Wc=9IC? z;*W1@D%I51>sTZaXy zMMOQ%LGKm_%MQq-UUu2tAWYUb?(2S)-dQsY{?)ETW{y+FHPJIm3!46kk?@C+^g9M0 zr%!i2n5UJ$raK%y7DRraNo zW^F3L&hA}yB2c|Og5}b(*KF}>!q;kpMQ{5D1Jl~Qbz`S-{iT){SZj8xr41Z+L@Sz| zij?J^<38!>2lh3#AC=Q*&OCZ+#GH9nCrfGx1vkGQ_%fcDRTGZZH22cFG+OH#xmFV% zYraZ5Uu62-+;ZaKuVb7(B`@}iLpm+%oc0$G+nIe!z3T@n6Yi09xAL#p@i*uju=E{R z4PQg<-Q4xI&vQo79VstGwzTKV(0y4m_R&b`07NT2g_=$&T9k4*FK@&WH)c9d&Z?qM zyhHzBWA5?Q&gs$leqPz8%XVk&(z_Iy$wz9hYn>_SzG_!-XZhTc%?e$kYShIYBqJqX zRwvoGq};b=&KL_t!(@T#RMo=cm$&)M=pk>Eq{WO*V1{d4IxAHXU3GG+KzfApDW9X$ z#vX1)r&bzogM)EYp76!XBc+pOIUjKy>upiXnPToIcSn4=yTyMCk=M@kSXL7~fuVS?tYodJ*l61ouBpMY zvb|?QMfYN(I^|4f%h!uyCmao|jGCoo?ctN3hR#{%vlkey{&wJ^;FiId5}Sjz?HBnq z!5d0AElt8InXbhR7D20A!|{xw8m;v7o~{iO$LM9bkP2t}$8^e`d+4Eu%;Zi+pKyu7 zlcq~gIml&B+nFP+-?C~ZYj^6vD1NlrZv3HMhewjBpy|ccr(A+a7aE+}%z7SIX7=pG z2$?&@voi`U1J^H-6V+%`XzVBRoZOtd`P)@J-X8c${7~{i!+fOUrf*2uq;~Oq(ld{b z^~SV9HCo<$t-*@8^qAZ(>y6|#p?6){-JH!u^P56z@)n=5lkGMY`EeF}_polrE;UAR z`;I;hbUid0Uv)!$d-;AZ`4xWj{Z${OO-9Ww9yW&cvCDB$^rW*)Q_@GTiL;2%NFpcT?DmLym?1CscUDI;zLrNGN??CCobBL6&qGq%T&^B7;2kMR z&T%@YN^bOgYEo}gmekrcBJ`X=`if1ZXyBBrbJ2(ktP&polq~(ZO=el8%xT3QPQdBY z<9x&Xv}VP4G-T>qvBqf`T}iWR6^o3wmaf=nhh?RzmTI3FZZYx8;W4}X(gJx{{#=`v zTQ?l$cgU4QG9s3f=54}M^&8&Ht_i8xxO?e} z*9<;0@+B)aj~I68V9~{rNVW`KpX2f%e0&r?B`Vmz2}zT9O#i+G+jX>_VWWuIg;J{d z9~;&Nwk3#tN}}Y8+o#@cg1_o5Ej==j7j=NGE+Zc@kvJ0=<<2L8PBguliJOK5)G()G7>@opM2j?)*7W zF-<;ext5cLhq`b>psO^iPt)a{`h!ZX@$GCyS~xsKkr4g^rOnK)u%ds@#I>NICh3oIG9dUVTtHqEQgMGVhDyM1$0Ay*9_q0xl`*ta^M`m_@g; ze3%|zQo#;kya&Z=D2z}PZ1Iaz)kJ>Pp+%x#|}GNG5FmXtSzoo~G; z=DO?U)3C)p8d?3G zvR_BYwSc04R+~cK> z*ep06HfM3wEl2a96HSX(&@8V^D*9Pe`YyXK-=!wu?o{h-#wjai{@~2C@vJPcUBWxQ z*N?uzAjMrjX0xvJ`Ek-_^-o8i3VOvAAv%qEGCJOg{zQv8sUT&)Mv9%xs5>2M_mt(n zMr6ycKgzZ9_KRSnSE*72S@j<9JjK#NdK$!%xTd{I8sZC57bM#HD_t?=>^=wLf(L|H7K-I1q!z$Ggg|9aJLL>BK1Jx3IuLu{n zH%j*?fVW);aeaK{^z{u?Mi!}e2-2%+TvqOg3;>!|`XZp|Xuy*iKbJ{(7DYL`2ElO%3rf ze$v6gv**Y6PF_mWddG}9Qdo!;zLaNJd7=ZaW$QVzUrc;os%W%Ugb#~5HtlUyYR$%z zsxM!5X#4+gle-)zNW5}0dA!f&CYfaqS^Yn3vDw&k@uG9-W0pTqtL*EjJ)$wuZd`Wx zE|*lArAKPcf*M`tuo`wzL`hxOWzHNelxZY?Z3ga?}TNnI+xxU=zw%B;fC zg-H66mwL>sF2ma5Rn?&*6k3l?u&$qxw9x%f`_u={#CG-;-yfEm-ZqnqTSh(ps%@xa zIb+y;4F#XRz3t^#ow3-}m*pf^GLN~oFZfbKek&?;39y}>H}k^S6O7)Q^Ofg|zaEPo z*HUJDq{SjeV}kT9JjztldI^nh92z9mOpgjTWM9f$IE{DX_#B$a)}^yXa@<;{f9;d5 z|3Jr85RT3%`&U22#cQDb0TX_glBz0yZo{)7vpmwmB&`{JEy%kXx+x_ zKz;SYq}W)L{x%!sI&;>j7m4jra@!|Pk&O;k=o+qZ{Fqf*pu$#Ga?20tzE8A^E0*do z<)-bhG7oTb$+c8>yb&;bwqZs4BE=6+9Fx~*`KC`}70+4UW9@#T>!Pi@`?E-UZPbg! z8efr;?a*&~raq$Rl)v7Fc8#~krF!4iI-Z2>y!Y5g7e*>mr6k?k_MS&If514AaVj)x zY*LeH!t>1@n`F%~hv}&B%%_1}2g+$gcGdl`{^v-lb6 z|HZ#CRP{#lBt?hSOg~qA&`RaK>4ZuW)qHQ)7~jtY;bucv*I zuF|(JhZ(i}@Wh%&<%Rc}%eL4zEKlt&!Zxp)AN;k-{qE}Z_wKDb?(QCV^OVBXqq25m zr%qa*k{}$sK5R0#_te1^@_XYhHqMbgl6FpEyyM``(-$IdWKZ4OuX9PE>OhB3`@-uZ zB{wV@ZW?z-tm?v_=8c)L;2Ku?^rY$9Gb`7h%#^#TxWfCf)3*Y-&Qo857Fz37eCmon zpLtxYYdmn7IbqHA*d?VxpOOO$qUur)j-QosSa?@vG)-3aPTTNfoM|dC3hM6N<;G7= z`%k*8KCU5B@7g>0cs+4W-m<5z4anaTH62Aw-SJ+w-Xwl#t5jNCf3`>GXGrZgRU*ln0OLzG`-UCp}l_bkTF5^v#*d^LP8MEL1$?wkqg3zB}?~A9|@Y zX=FW#$(pgx9%;*+zRm5@!3hgqE`4CMRI9s}5xSOf`?XI*?;^RRu5_bY9}h`;luhRs z3+6s+7`0aKVQZ?|~ciD9|Vt+@yo)@h%&A&L%$T;uK`b}4p z6|k?@(zNgJ9Fmvxb(t(+>ZEU}KQr^t*=>DETvH?+5F~5bVKYviYa~?gwZx}oX52=k zEEj$cgv>3j{w5QbIq%XB)T*C#e6`)w{V6?`s~#Y$PHl}#8GYxJTZ5a!cMmg2J1DLF zQjMoyQrmdj&G?=1mS=t)ilI^y+_mMq%+8Pdyi#-Bye$j1&KQ29VdupXoV~wwJ#WPs zZO7h)DZ3Qkr<8YW>M|EKE^VvSdY|{TIbZeK38Pt7cP6fpACTH3evBjqR{Qv5hfk!Sr2DncJVfyjJv$)iwJ2&nbNm zloXP`H?Lpj;XOsVN>sB2EnY1CurF1bWts75!SI8=k9Y@b9omZH-WTTHeERu@=I0|b z%i()vVh6uhHWn^zoO>{=C9t7j zxzD9?SM$}+bT{s*7$<)9ZHc%du5slrl$-NG4{LLUsX<=EV=LUKqFR7kct8ZJBWL<=T6S z!zVuOcwJ{xS~PZkTuuDVOwI<3DV9we7A>QBe+?G$ASuw3JL5;VZTc}+wQq$^dP{<) zeC$%6WYjzFhOSfg(j$HzzWCbB<%~nDt;@#97%izda87dvHYQ1CskW@T%kz^rUPnih z`2p7-Z&I>4^&>@|zQvVsa@Diho!j2L8(cFWoiR!;v+=QRE=MUi?r`GI8^f-8bzl1C zly~y@r;1NLpI*G_(wepOMu}ATfhkSyo6pWYFVgIrTs^<>p5n>kjkOgktGC@adHQtD z?$|Z53bRMg4!?fqNzOd;TNX#gpHRKF?DLH7F|mhrt`Gh~7RLet{R5c9V@0~JMoSa?Ja%pRH`^?f3 zM^q-LbY&WTs5*A_!c~oxHwQwYFXQDZpS=z0FaDff^aZ&tilH4EwqCzSb@9rauIJ7^ z%j`7oqYT=TQ%yZqrS~T8S=Bp2VZ0*C%zU{?RG512jK6&pmvbL1+vFY- z`|M}}($`;sP4Bo9Q}BAqJv+B^^{H|)Ny}^@=taNK+|^#;qq#ljXKjCf@HUycVa~;$ z+5@z-jAs%&K|k%rDd# zv_?hR?%f;qZH{}c_}TU5r$JE`HBtK&E5v0i=7^O6*cJMyE8_DlkF-=Ae7kpzc(||= z{QQN!cc`Ts%h-(LH3rpqD}M=oJi1BIz+Jnxgyx@nMy%qCGrYD}IVY`5h`(j?+%rq%)X1t!{v$V)(1Rc9 zdq$QkFcg;e%4vOixIf>`BatN zQ*9pzP9XB-T)Cdk{aV$5OydV)g``HE&B-S@f=DeIdi(N;?(Fa>;omHhu4@c5v?`4; zGbpeVp7xBJ{?&%{NQm95s*s&C!DLuc3oiz}nLTKoyXziv%j?zedXx8PIr=z#?|-nE zQCr09e#;6K>~x%FRAwB1{6gBQ1H_DgUbWB>-(JpcfBaPHY{sk8j?-4^_f?DYwi>*g zRs1eL_NGIl%JR0a@#m$pp1l*k`o6lSaQn~gqhF>8qmsY(D_G?!9cXZ?K0onOa^13r z?+Wa?Tq8!^Dje)r$ZLNTdBN#G_3lcS7^72d?$O-cg;TCyNNU=|f4cd{z20x1XIHkB z9)0v)yiCoq>t~}>$Hed3#~hE9s(gM^yx_V~+_WuE-o1HsZ{+*EZ!aY2FBW~?*_-js zG5+Q#-IRGX{Yp#9&UNN=$ku=QrtmR%!hQE|?VmnLOLvX#x?BD1uIqbJMPRXZ+N`Dop^X2qfxC+l9FED!`_Ryr2%#pkH1))9gto!cxC#{*>!~lzEkp=lgfWS>2^Rq;~4L< zelCYEkGTEnRKh;mQS`;`!4mGe&KRf1r>0hY_PT!N+Z&HUlUSpIeehH5Nvd|mpCfk} zjM^{z?N#Xuxz15Nm)FP-50Y8o`f7sI$5&^~tafT_QJNm!Jj-TEx?xAxp__h7N6crQ zOS``HW0#4m|Mj|`H6J&;e|6BXE-PhoildIu=j51&kJfZ*D^CpMqQjf*7ksu^gOwxI z@tA}3o~h+CJ3DyqC-&WaFy_F5;iK9{tWl=vDU{EBRULeD_grjbG#(j}-*jaOFLgmw z5gz9gCt`W5yvN!ma*UHB1GtK}YvQ|Y$qdi!lGCB!85@lo0l@OZaAhHHc4wG zA48#u%iPwy4j_4T9$^_NAA`DD&6!uD3A0*p@JOueU_fP2#~Qt|q8%ERboRTMCLhB# z>c4)@*B`OTe@c<}n6mMv2122zv6$gk_k?1P^#7tWkuihC~&Dh{IS^Qxjc zxR2ykPxk2Nb!dr6_zbtL=+K=O#;dvJ7g_dVZ23cnZV0tV)TQ-l=FxyzpI8K~ z=Arjy=h*90+-TtlS_K42&(WcIT^T>VZ0Bxg$%k`HDfkodv5p5cno}$@T)pde$oS#v zSt2tx&!DbG{b|emz2nZiPCCTlv2raQ>Se1E?PV*>gZC_ z91}8u_Z@#1adL66g}j&B;k*i(g5F&+lX%vU_mXMteL0y|P|$gKL70~NDNlzd8&@K8sLCQHi3)3(YqR4O2|~jW_jfz3Hm{$Vbr%+b8_YT)VYX(^sY} z@~P_?{8fB+S?y}eJq~5hraQ1sdwCU~a( zf6g;{67(#K`|^>KE6Em}Qc6*ixqr>uSR7^Ov7dDNaPg8cw#i`sidOyfj1>MB*A+ip zJ-A|fIr$pR6*N7&`TFCQEx1@J;F&F-zKc5!zr%Z2?%EJDx4x-sc8nek>Bvs{thgXG zpv185=@oV+UdL2bb*&reT9*)Jko@dUnrp=q2RoUpD{Y*Tt^H<ezU^)pC_yt!*QN-ea=%K-{x{q{DJck2@Tjc&3Vf zw(1mXmG#?wQ*)e#d-tC4RvS0+`?JV~DvxUC?k8$zoEl5|*TIKhgLeBHzs4P&Ut_X{ z7isC%zVCZ~ehf}qUTc5v5LYBO;l*C1rE4QST}u`&*$}&=%`;v73z9qFVYJxB@6m() zn;|!%m#;tWzA*OT=Zhydk3jck1uQvp?2&Y~={w7t205vl%;`dXBE3Z`9X<#ckR3lK zbAwt~z!Ob5eOq4hgo!fKj*!KP``#T3+U20EHN{p(o6J*pYp%F7%R0~UVZps+pSZ{r zDU_DM<2xG}-ZS&EjuF!qHnXlI`RzOy@C)6n<2}@k?MioYb`l)>dgw^i+DN&arp=CN z+GXwqmBu~1jN8MHk9(6B;XWdCzOm3lNd2MfB%kM|sw4q1c9b04B zoj1wXa&2;xt*6{5*4LgQI%spgYTe_wq%r-5KW%oyd+k@6gSDfd9h%Z%)3NR6o#U@& znQ>oNAHVx4;cHw5e+xtBsO7%oFJHgiT4d94W!jnQ_dX?Nd?QYV(uU=?{8IU>xAbp| z%$_(26B|p;JT#tX{KmR4=&00J*>0khQK$UA^z{38j(IcQ_57TcQ+h*R=jz*$xuecv zU*g|e+~4XxW6`(W*uv;xzmQo+o5m--aeL|SdGj)tihXVbeO{A($JjRi;RU zm?qB8X^+TSfS*OWx=})B`tzuS%0*Uey~&>yU)VkLmv*>40xwdEldH(yAtZ_@O(KU!=HdH}Z`Z%#Zfi#`+ZZl4e)Ew^nWDGrTHCTm#~pa!%)NTn zBhGFk%T;y%#{D}sCZq(H9Bv%B*PCT2Yap1Mi^tAfyqD8*`at&2Q7zmN+`drFRTi^K zqv^+AjJ#1`$`sr`wyc(MUdbRyRF1ortH$HU0!8Zn4mBMq0-M~4mBaO{5h%~Nymk$et@Ue1rM;RgH|7G@tj{+shgYIH znpw1Py6>zDs$BR&h%61(Lw<`Ta}p<8&+VMddesfQvFv@R$qR&=GsHGFw;DKQ(!*~j zznKs*FDh(8mwl$gYO>xeX{X_V1nV{LT*TtpTvlM8+!*70&nXEO<1|eC$K>lb9zXDk zKXOub5~Z1oDwCEhoQ~L1r`UF8Desk)^FpuYacNQ~lZ~o5n!NQ)pTsu`Vdw$yd zMceu|_UZ4+Gak&*cOGkS_-)8ZHDS^Ls~3*(y6;xUA>C1A9(RsXx&=*b(+bxEmnbG~P^Q(irjd;4{MM@`Cb_2_ zhgl|8lmz8YDz}t=F-MJCv8rBkoR4;sM@`7Wh&bbQ40@fu($;D6TkmV#S;S>tG~}-5 zyM@YKOqU7brRb>YruHctdc{pyo&T_=`_t~z0ZPFm;q!ZAk0^nDdrVnP(-xJlE~KFg zS9%(GYhup1J#rQrbCZY#3dI=VoVrXp|FwL0SI=aoO<|2p-eOU}<~Gh5K~~VnxCB5E~n@q$+KGGQPQ%IUZ$lKVni~!o5G?{E`7nM6$*pIH}EE&VACcM@; zTFN|M#)Ids%bV{`((qT9=_$Z35;MoEG};lEEW~ zFKKZ}ZPA-rr;wMX?zJg%%Lc8c%e?iG!MBr+nC8Mm@6w9W`$rBf`aEi_>*3l-Jy)yO z7m$_>^4>L~9)?nC#wA9{1lCVS(dwWHyvIu?D*iAynbqXC`PjQH6V+)k7Ooy8r;jR^ zl83N`9TVb23YgXIbIhF6dtKS0N5-2Cw_ba{ z*VU&mZ(6{tfD^HU8z+BgfCqlQr1Z!u8PEO6lQp}p+KV3a>^QG5Gc~$Px2k@rmB_g* z?H=>?_IbRq4Z+**yzy4SUyiOOGdx|gT6*6Mo=pDwv3yiwiMa3flYkv)J4+kxiXYSE z^lWZ>mAOBvoL{_PDYrujN!4UF@-M0dZt&i#8&*-1@#xuV+2*mJReDffuTqj=xknWx!nGdk55b&j#(bn1Ty-$0EHJmSc&rV78{aJ70ZY<=tKJM*}-7Es^@i%d~Iz^3t9W&*!KV;sb>$ zR^yWD7r4AJ57!Uk4KB9lA5rSCrm@;(Q_-wVJC;?_Zc2ULuq62HkM$isevQ4S9f*~a z6I*r@!}YbjMzqbfmzg1}H3;AQdB;VgqRsrszWBjmXY`mAGWjFIRc9EC7HQ>}&XjGc zypS-xKIK*71|IP4&I&CwaxCK1^(|3lIg*?^e@qMvkm+AX%TH6`V=xwiY@&)#xc5fiBQ?2t>qkK-{)PAFI zXIoP2!`)Oo(CaUQdZf?P-j=aYa!oT^owab5AZSqioom6BwbPxt`n3l9j*hH0{xYaB zevIh+bh!aJ{bawegJQ+>pOwQ%xgOTy4y6)yb%xcnGm1%- zK5+^;mNps5quv7Y>Z-ZR*%A{j!*uEA;CE3h| z8uKyEr!2O(-mdW@^rJaH#jafXzC}7%MKgDddoBIojpv6qMg?wZRoCFI3t3R!HG#{y zYypqKAFmoD{01%cCaaICn07@trepOPkDx>P(B2iLUe%H3lx7rA?QfEchqo8n5ED2l z`ePc2@y>zn1^8TxJguL#2lc4PMmfSD}N4eOs8pYUt zEe)QmzR{)zy|lUIdz$SwT(rLxVQtDQ@e52EKTF)0VSn7kzIpYo+Pp`ei>H5Lx(ZmV zI-4yCrZ_K4bq()g^yB0VS5tql!uLC4t@pImD2Qg9Fh99rj=WuDPVR!xQv^exT`8nn z3iZR>uM`j9zJcLkkHiC6B|d?htVfvTXH}evi0;>l^3n)AF>3ihB_5?GCzY{MMOIhL zy*8ul*z(Wex8qahPY9Yf5SNq7O{%s3vQ-qRKHp*I16PA;-M-P6bICKAACf&qZx*jx z**kAhs}y&)m?m|%J+3!7{swREwXWJ*SV&pQr;L?@t9rRt4(B|)dU!x-dxk;Ax~xH; zJk=Kb{Wt%(wh!|9j@cTIDlanYuJ;%eTRmZYh_GgTQF-M~SBhNgRJ-?XtofO=Lb*7FMBxhNA-H~nFC*)GCz0KPy8BMz}*4z(wLG-llivrz%~ZK`Iu%EoaPIX!l+IWP&vNO-O9a=kLp= zxhNdbUGwP{KU5Sn%goa_-0ARYlk}|%_5>Xvr&Y!_I`?dMsM&L``hKgm|Lfpy{b~b> z7arMM%0b+IH|>ByF*(X>a@_;DX8*u|E}43M;!%Y{Wn1TJ&Bvj|7e)KK&Q#*k=1QF= zWAo2mzE5i$*YxEVN)}cYo%NKzjkPMz!SucQS?e7mAKSzw3co&P7%>cvcZiOd-0DQm0zcMtl)e z{$+u`9$6SrU-qis+0xij;2q|zX>*VEaP2CCGFfjG_Ffa&;4f+qIT;PxHoltoBF1S8 z_uAN`o>99KyNcW_C)V#NN_+Cq@qK|tc!<*2e#P&saJKHvN5=Zw-Jcy`=e<0%t|elG zNkZ}9&-eS*4}_k4ob(I%r2a@~b5oA4cYS=Ie^B!*{1)ribt_w=9A_yTC9cVMvB*MeWA_=A zi&JHs^9{<$_bcI_>w?G^E4}Ns&(XWafUo#Z^D)fW+c#s}0VP_|jp?J*dXE)c{7ipg zD=RJIaJ{2!r~Iv-pQ${!B*KWe+_8o++^X3rJz zN%yJuZ`S`pS8jTZ9`)hCm1|(ke&xQy-<~VJSP-)(D)h-Zo^hgDhn?S#ss{TfyLmqs zIv|ClCfTO6ZChjRcDBac2^(3hVt*I}gPG~5i*wX++!S;ZKQ^H*fE7aBZI)!did71y<@3~5;(jy@I?l|nNI2+9Wr-G4?y0<vzc!{+fvSgxMY(m6DQcH$h4R55Gk6*nSh)#xp(X z2RMw(qGujO$~6-|9C$cU_kz0^{+{D~-uDFV&gRsxUeB(s4FAeq?Y;ia3-}`sPxgEm zmWRT=l^t5Pk-bnXDlBRFZbRIYn;htPkRHevg)A04+S+lVB-Luh_Mp3|>^`+3o!+ae z*uv67#-)df$Y(c=s^3(n{-jy~L zS2EOnX&X*d@6=;S3tJf@r0$PvWk={}#yF3}_qJ$!XF2&M6)G85s-z{EXw)oMn^reB zs>*cFlD+0J7s7t5e*c+e&|B>ae`uT%<)I&KSLQoi-O{bf-@LzI8(+!$MFO59j2v%p zu$A8;*3LeD)3h=5)*X*24(np%n>{sDPTYw3ap~Lp&qYRkU84u>+J5X_`!hKF+Z_j~ z=2`D_@2&2+_X`QMS3h%iF-XYj(g+TE{5sM4?W@zbp6p3qcSRih`l!Q${f{psv`t$f z{_G&-mH1d*A8G9+Su&MrBSc9db_6TSKaN4=}@#rblmJ@*|_t(#0 zn+LR(I!gES6z17(rH^qv{PC5E>y&;pcGan6Qt!I@3Rqwv$$08}YunEwBoZD{O~)(0 zpyy~hOcR;uCHC{c5@G{|i8%!5IrJMR54;IIkaUEIc*V)=sP#PVEwOuS9Ru%Ap)E1# zxbk*_`PMCv^IWG=(Qx&g`VivAios@0(790K&aBQVa4OkNhTes)YOLfT*b3;nJ<73? z0u#zr)K549Nd*fCCZ-T>gMB{AoOc!UF^Yur-L@p`wQ6wPjMvKru^9ZzgrB!%0O;|eNDKAc{j|^olLv>ASumhmQkygL<)zS zI|G0hCg5VLr1~VfM}3lE|CEQ?T+aKXkYT|>I6 zzKXG}lbKP>6RO!RM^6aFk)%$$BWOesJjkQdDKi<%(ZMQ*R_16{BE)tUvWm~63{yH) zr3JG@P#BUr4=Q{CA{2>Yd4u)_S$58K1+Pg*GAx9cxP==+A{Xe`P@$y@+>P>@WYAL4 z3t$Nm{{Y7PxPKN~S5R#Sb^%GLRK=YTz>5G#0bfTvxxl8{cZhBQscC^swn$*w*vV2( zfmW8f&YY0RQeT!JGg1Y%W0If-($<0DMD>_?DvL}vO2dk<88ZCFNzzgP(LsWs0~p0E z2$C{3CKI1V0UQdE&R05Fn29Ev^RT{tidP=Ekb02Zpi0cz2p*cJ$eO@Y~DVV4badH_(5DMJa$4J@9yX_Z%Q z0s%k(eN+l9X4C0g3rdHDdMW&f@X0{{1yumINL#kTw6c~$H-c4Cij`GWR#jV7wQYW{ zL`B9}fP-QpX~?o|ID`@ik~gzT@W4P2B9z3&gj%#NFcW0exN<_sTrZOzI917RGLVrf z+|cHnRN-L39ogx`YE>bLWX<5J36E!q&Iq)FXlHUtd0#{n1y~DL0n4Up`pCTjFbLt` z1L6TQk+6u!1w|y>Xn>j+KDm)%LEAy6gnX#fURGM5cX>wFMs+YlaW)%|K1}m3D z!JQEXF@hznoG?wvJ}XX>X!m01hNIHJsUf^_c~?4}BT8rT!?}(5(E`J@+H&EBk@l#M zZ2~z^4|h-s*;zb6C%D#dM`29tcVF>xJy^~snm6S^rOd@pRhCtA*YqDC&;UU^Y1&^X zLr+1+C=d;Zh>eYXWQAmSL;;ZlYM$0(IDizu|7BFs9}xN?|I)I+S_lB%rC3{wFf?SOW_}le{HXm zLr5H`=Oe}HPEVf#c`o4n-ECK&=Z2+dvom}N)a2o}@h+$4i~%2Xbs%xbGuSWNQve$% zJ>gIF#-~NCHoNtYBCMO46Vhq~+vNh)4`m^+e17puhoD zXaQD@FbhPmi%7L?C?H5^3rMAS004CE-`SXh*uQ5%V7mr^P-h3w-BT;Qz4Nc-2>$Ms za<6uN)<%e;GbD*jB<@M0ID&*J+=x3&Jcg~llAMX7g*K(p?oVPopa4u1z)6YpNG4bT z0RYk>h|)0WOUZzefNdxUuwWV#Picaki77F_o#JZDwI1;i^_MsQ0K#?u!~iT10RaF4 z0RjXD0s{d70RR910TBQpF+oufVR4ZlFoB`5@WIhQ;qg#lfdAS62mt{A0Y4D`0Pvcl z*N!0&|C@y{I-LLHG;7_0?M6`bsL8XK)8UB`z?#lSG- zptJ~Df|8?1F|mvSN3-ISv_x^$m=T#alUtYb$=gUSCt4h zQ%4|{x&Tn?xv*S}f)J~4WF;sdhzbe`K}fruL!k7sSf#N|_%F8_6&`&0d19>C=mA)o zS+O)W0y@B%QFS?X3>KSV1I4EXl_xr7H`Xca{{ZDEy6Og(lhl^gB6i+vKy_xjO>|bS zfDhtJjLP^apA{2JffE}kG9JqXitmv@jFO_XZloy}hS?O8DdH(<< z0TMv+?ks_p?9tk{0}ZAIp`<=et02xP{G+t^gr5lc){RlcYX>5W)2~UUjc9TahN8Fv zbV$&ZP*;FNPPa=(Dhi=+T;KyHWdINXZZ;r}MrIc1L9~IbG(sl~Cb;31KAl%%Fg45S zvQsW$lCb6Ez^?UA4}zY1zB;bwwdPf`?8i)rf)ImR3mJ~{cvVeRZ(f{3XHZQ;$M{DP z?(4JAVBRW|R=-3xe@e}Tcr$l^ z3>YN|rlu`VH-a0UW+C|Untam-j`s;WIL}Zi;3;}N?U!)6eHK9lC#Q>$i`EbrsLeZ&+5yvTC{rnpbu<3nrC7J`3Q( zi@20dwIBiOd_AW=Ymn(VM$_|0yc_bcd2fS(q^#xid7*KI z7)p()XxeE)gzQM{W2xAF>9jvaHD+}#O-ILn-t93FQz%yYfzpS9Lv9CplI7vBpPi%! z(6wEZf-na=1ZpO^?=Bl%PRbUCH{PPmXnjmy%e1?uoIb*dez1ewkX zS)`q}?+8mWo48y!d5K$6Cu`D7hH8d*=6*gW-c0EEVcdsI6g9-rjaapVS-C+~aeUMu z<1kuS#+;aO#oG8d?}(fS{iHYi0K=7_(tW3ppm6=T!A~f|Ymf-db5%nK!PWX~m^*sm zjGUih4}wJ%K6oBEUGB{gU-wlrA}9_qB(BkL%7eY{WKHm$6Nv2L-Twd~jGLlo6JwG1 z8Ad9&sArSQL2=(9ePg+v31YDT>oK7bx#^|k&ZWdAWXR9ROe-T!ZTwp|w*n6>qX5{Z z+;v;{2`p3i1T4NcynOr+q|IDR5SA(<7q*A|w2X#$Mm1kMCWhfR&Q!)Eqjb7P*<@@w zOz&+ZA;5xX*O$wy?sob;us9b%N{@Ya0i^;|qsrh0vSTqNEHk=8Hyy@oBK5uk`6ga; zA|)LnsFFt7CnKkJ*99+44V^y=M}aU~X2lW00qjj1cjwnm_d2u5+&hn4$u$Ony8dEf zH{lLfa9~^=$?VRqOYUFJM+30a2OXy^_q^TSYPPLnEH)Ho5-cNKwRrB~wj+$dVw7hn zQ;Izbxx!x|Inpws|^JBIF_(@_BrO%7fyF6lpl zqilUTS*QT2={OnV?;#8E5#g1WnKj2#eHP}p9DPO6i&Minp=<()VZp(`<_EsD4aE&# zooA3;@3M$02!IXN)Epp&Pv9>DG@ATK4<;;RJ`!Q^O?Nc3WjNfeoiOU4uUwK1z_fv% zM4X%%Tt@S;pmo_`r^PmcWV5HpCClYy_j>P}u94JWH;y zdukmuTi5OZLQrBV20Z7{ZUSrigzFIndf9yXs+sA(?2mr(?zjtAEI-JG&Cm7HJl1`ZN%J+N7W zMuc649sn@l`Xt#?-Xihj$Y$}FwK!<; z+eS}QmL@i3j+Q6E$8L1)R?nwnM+UqsO&_djsT>)6PJ2G%QjQoIn5O>$T zZ_(++*Io0x1qnLCNM}__gP1Mc=D3iztTD<51m*gzU#qvz5b|FqjuVbHDC>QAGDOvu zl8CphGH#YwWfv**kV%-}ZuyozdspuIyyG|JN6`xT^xrbiHd!EwU9w?BF(8?ywPPvW zga#^33G45?Llm=TlO;PdRM}a}VZg*fQXHCgerUzakS z?Ym13R{|1Apto0FZk;&D=56cOTzhhMcg_>Elabby6$_sjI4L6#rY-Jt1g)vKr(T=r zntarDU6^Cq-ljT;^0r`djI0$Q)DWOIYy@OURHP7g?(3}8*jc{($-NjF6mYc=;~^CW zm9GmQ&O4Q>TC)EDxH2?C3am<)@ed&EcfE}hvLzlzWO49*UdeM|02Xni$=^`W`^f6t zUU$(h-M}U0H8^6b=AEtHfQAS6Z`? zc00DXP@n{MDO$NAE|7+_n%j~_agTs$54AUgGUt5vn2juo7yb&GK~6B^YMAt}lNOdA z#3mSw!xqUGIdhY{SU|Xt4IF;`yBr)E#5|ksD4LW_jMXDGU}GLiQPO;mknK7JAw4iWOho_7sV8AMbEXebLS2JaRU@=aFmvv+rpX_HAjUVlz$ zB1FV7{=S}EwkoWy6U40UaO6(LA()Ku2||N#KmvaL`*h&eC0+Jf&`EUIfdtuUQY-1C z1<d_;sW4CQ zJJN4NkOH|ZixdHRkF4e$0(n75a7`YfR$B}90R4eBXc77QHsvL8KEhvKGD&m!i7&w@ zSyJf}eUe_}6qk1aI)SISW8j*jC$_Q*5M7&Ki3bUhfv`>gQ zc_7+tb!khG+zZ!oB(0GLRx}rs8h9h9c?3#QA1VgQm5lkJs7&27whD^XD#=%D6+^JB zAz9!fS7-?OP$6OnK*lPN2!YFRl4_w7Lq?C7o(u*j#9>XPhQj)a^ZHSTl5V{$SBIl! z@(Wf~1mP*CPMUUlI6>CzOlwRQm&XXtXCRk>;;4w4D54m|L6)lnQ;z=M#=X2FUMkUA zq7~}^;9uoqUns3ywu8^R`Dfe0dy;4ZLs49CP_&)p@wLwt$~fOUyRo|l6df8gWWSs} zd1;~3M`QVbz+cS}2n59iOCx9R`}g7G)+=4>PVrgWPWfGKb9IRZl@{2oh*^YlMS*-H z2}e2Vhu4ObV%_rZd+rS}R_$S}3;~^hCbAJr)E!v5AvpEKHyJQ#>`=hiU~NCVzwg+x zsAG+i98^YiGKEEtT>y1o35gU1%^4m;ZdfT;G=cq_EhE|zw_z}-c)Q{?+fGNg>~yQV zGfLva3Wx|Rf)T|-r8eP!i*VX$IIvGRh=Q1KI6T4k{o|$zZFT0G<3{M3O^VK3(sK}Q zprdz`v$!+KXc1C6E2s-M&tG3JF5X@m2ux);aCRYsK$6u(L-CQh@U=kz1Qr3IUY~ob z%q+&6^w(|e_WWeS(jxQ&{DvU7x&?B?>Sn}M?gyvS>E+w3=McB`kpS0Hmd4Ip=$#u0 z(xjk*(qsVMfzJ|2B|&k~s0Wsz^#t?wzyb)^pgWwJ^_(=W8zSLb+zbSkC3feS<>lMKOf?bYp(RN^Nl<)E5Q3Nlr7nkDbyRdlQ1T%+s%^u2 zltLI+iNL<9nEKilU?4l|8Gw28I7GNXXAl}va7@8Q$dpuC zVxc%{J;kH-Hk~-|gZ}_uE_?8Em*q5FDHktB7}XvI9Ur_XPx0-}GtIzT^uwExg5YxM zZC72?8{U@q4^^g7NHYqwc0dy-0X;>Om6q>yA2)Ui>u3pQmKl zUho!Uq{4b=Ayf%l6i=h^Ff}%`T=Xu}@0_h-F2#oSDs6 zP_$*uG)Pn$H*{(AVXxZrg$4B?mvMMCfEs0BSAnMy2(SoxE03&sicm|3za2NnlGA!o9QoC>z8DWz3W zK+`zj(rc_Atkv|!?j7LiiCmML!FJ84QRa=1DE{Z1W57v^#eN7DutnC%6d=X~&h?dm zj>{aa&|Ig@v=fjeG~pgoCaVcEC_@e)3SfaPnE;!~c=(X1^3bFh)sF*9ucJiUyqKU$% zgM$_DQc0?z7*Y|`#+QK?OA!aEA}I(87~pW|h``hiK&P7E^$SgsLpX;b9vGeJ?i6M$%*~CW89_1@=f4_eKKR}3f(LJj~+`6EEEMvr{jJu?)HA;~u zkP#q04UAZ`V=S9p4BU9vs19xJ zT8QJs`!v%bo3woVrq4a!QH;@{#6303Y5d zN!F(1?G8jiP`vg1=YD(dyWnWe%`y}qW8lh)CN&KXf)ogq4HHqQa1vJw;7qk(cS6k8 z0>O;rrbwN@?n+{ z3x;X#HgPd6#0c{ zCx-*fzPEMkyr)hv=h8!uSq!AggMXj6Sn%HBoRSi9m;|>m{NQ{R4A>Anfd)9xq;RN! z)|2ocD%MA=gS}0t%6biq8O;ID!uMoBmBL3nUID1#Ai$uAw&4K$R1QRxYLE&7ry6Vm zWgMj77aR&K%ETatX9J$w<(+R^&FjxxSi92=N+x~j&WXnIWSG2*q76UpGRTsi$6(?e zb3H=y)z;pwwYPme4l|m0)|5p7(n}x!z#5XQQDsPiDS=lEl&Kk!6lSS!E2;j9`kCo* z!8y7C+Qk8QbT!vcTY4~(tJ@343zO2AWZKp9LJCwbGocTm(Cv3Q-NBu8B;{}cY$4$S zpx}jCfF)EIo{T!)iP{w&VK0_`t0hln6do{{#idfO9#+aOMM9}#OscNXh&s@;4->=a z24Vw5H^Dl)<>#AsYrNJ}m_yMoLm8>6J3l&sUO>W4{z8SgKuQSiPA4C2?~cD-aZWFE z6A4KKql@e?)Y-`(aNq^M3j^zf87wPaSu+ydBoFkZq5-JA7QH3tpR z(|DWKJS&efvQ{f5ha7(kB!VrO03x@jnhFS{MoX0b`cL0p9!+Q4yz7&WIveEN<)$N& z3u>hMfw^wF6HCPa6#xoBY+4c#TVV#0&Gn%}y<@MUwSl>(a}q)hhTsDd<$o<_*j{Jt zwI1TA=~r)phfUNP(xLC+3s&`z7rk>XxC6VkaCW(#I*$ArRm z+~X((z{gzd9d*gW=2g?lw_R~mi7DD3X@gd1CGGb*e(IU+Q4ZPtNkq67s(<4?L#lmK?FJ$FYgQ0m$dXbF&OzCZ&u zY=tTdg8u-PiIQXlv^q+lGCHei!?3EM7l$8%cJye6B%J#4`h`?Ech`&%+2vL=1 zii3Rclv^$zSuUO6TX=6Y)6l-NeB#-36;KlCS=<-wOi5SONCYV8=n!Ke3|gjVf+dCP zgX;ULNvIkk>(o(4Og{LI0TiMw!^02?6+j4xsrZy9z)6UXGSa}pgoq4;u3Q6Lq3H<-&k73>Fy=1Ib^z$0E?*oUeJ1+p+4Wbt^OUh<01TzIC@Y<0Cu_od z6a`aYCLZHLs)0_zEY?P&c~sQ=60Cz0Nl z#WN1dQ}fe#fE62>@YC?!y_Ti~F{^=K=q(GF1%N1#AwA1ZmfA-L*e8O(G$3=OIQ{R( z1rChaz4M4XgAp#`aF>V7z&hCrF~|T90}U{zEM=j*q>y+R+bU2iPz1EZHQdkT|5^!heoQIY{m{urQseGQqb;RyI#F zgrpx%Jeg<*P#YQRf>9D6LW5I6V=2OfCbSw>z^Bmu!Q*^5d1@w75eJeRr$DSZC z^qRW+d-I3rzc-3-XU}rKzblV%E`){#h`JL{^#w?qID$u-)>f-^rrUXWcDdB(MR|uZ z5eh4_O#xg|L%Gs;l8|TUAE{=6xUlF-Vf^n1RBaYXbyi6U#|NRu)3=w0hd*4MJqVOF zN;Y9mWB}lB9-(dp+iW*V&ZKGNHKrl3^i)k*YD2A>D^3ELbP2;NiTO?k@xmND9P_Pq zQ+^-?8cOV@kWEohOO(BBDi_Q_egY>O=gw;M*0sm?{xjdqJ<|UBV~m8QC`-BOO*sIE zQ*Se>y*c&e<=yZfKJ4O16Bernco!JZ6y9D^V~0237Om)`gj%QLjSwIv+IR;I`sFNz zP~xp+Im>?`{2G|P=Pu$#hSbkYgOiBem$hucQvl$PLyDnms34@(r5REzQV2y&o~K4; zcciq(GB}rg(=s+;9@M)M5EtR!bej**05vuvcu7dOTQ-sO9SB zo&hy-Z*^p#6+!E}yAeda$4u4ZS)e>1<{>&>GD7M>L9-wl3Ir5|AQV@{Y)ai3&Uhcm z9ryEjeDG+diL}I3F$UiQ93Ddl#%^kFq!JZwhD+4*`dAYJ`A)#sn#)otCO(elTief zJdqif0~`Z-*6r4|wS8;VTU`VV;Fo$3QUPs|V&Vqu*P zk^@BmjY<@5JyGmvx;mmrkR7_w?WFXLkW>qZx;O50B9d5Ljba}d5@bYACW>r^fYuXe ztaZdwp}JkmtV77QhZP$FBBviYl(=C4_@k1bLovzp5paQ@iSbIH)N;+Ftm5Ka4&sm^ zIx12PU@4Cte5)cfSwLZm>vT-E!16NJ2tqnR?wY~?#mO37P^MRiE^cQK+9gEtPASC6 zeDH*Dr)H@!!bx0y8N(W3qH%s~l+(+(y9}x%7E!jRifbzeAHUo0*D75$8wQCO5m}gF z$b?bX$|le9;hNE4;kGPM0NFIm05M#4$J_o-)%eRwm_dReHNh!-S``v&8SC=!hs$VR z1ppz5Gq8bN0dmA4G^STtdTwNRphtnru!NcbZbQJM&0+;ST5=fq8I|sD*348bZ)VPi zP>Ku?Np2@pz+ik{yXhD(!+Qd|ZOrk7nW>XN15y9?hH2FI{H9H()X#{9>KH#iG zaP5YG+%5~ey9(EdraLZ$=?xjjX->N=+2n%yf~bT@THC;ehOBvxukzjtS8LuCPc=+! zFbFmxO;nZ&&CT_2%yrew35n;JI=eg#-gj-={mAvK~_ee z2QN{q;HaTz19zRg^Vg;B5FG#$<{2SP5cF7sb#`6{j8GuN5d>Fmn(yBZI{jt)YhE9} z*TmkN+0Re-@AhLSE#9)>G6k6TT1_?3*9Vc)tmnXuvFL}OQ>7xR3n|4u(F`)wa3@4? zpYkodcknXQ;V}z+y24W4Lo5f2gsgOELV|=VD)=uY!XU31qP%d0zRby6B6L7WB?C#h z86d5C`xRgQmFc<=b3d zzIZ6j5f^0S5qm@4XvQdjb_NsxM+*T#$`Cx%92ac#`#gF>(BmrT!?ns$8T4hB(l3&g z3El?kLVZA1XVnFVK!*j{6?eI~~7OQ62( z*t0j8(t%@v6ahm7UCaSO?4#Ur+~s$-iN@=hW8XsUfHgsLZKO(j7KRAB2Wje>s7K)v zd^DG2fK7D_9ZE=8Ra8yMl1>c4q)Jh6Ip~=lo^%e2s;RppcmZ9ZoGm}91Jx-y@jL~l z06lGo3)K*2fT~|`Ybdgu=K6{Tt5Ok)n*@-S_A+E+Fgj}sK-$y*Do7+SSsJJ^251ad z4hLPVw`V*Zc!rddskd^I6zU#LcG}dyNSH&TIRi`y79-N&TMj!0P~w0l$AqMaA`o%$jiwo!QB%LoT?`s>MN(fab|90rU4YChP9)6ez>16qR+~^rDD7ZVUUN=| z$+0=131-SyR3Md`vv4DpINEB$T| ze)Z-YWKc;#Rda2=LrK92I_}B@@09+|;SP?3>$GPe9y`}0iWtlQ%O4@-=_J)rYiWS5 z8ON2K2qH!T3xqdd1g=_4Md46gDQ9cb>Bb`?cBhq9?<7++AoiE4FnKlD;>ffs1y~Wc z(Lqa#Y#E?5#7_>5bgI6j;#(btM}Lga7Gh*_tw;hLD(_Gun2n6GOTa`(Co2d9@Hubr1b>!P!DYe_` z$GAE?$3`5kudf>3`^-)v;JTqoZT2!mX)igJ3zkb~g7R2R@G9Cx0)<+1mWLPwTLCE0 z0~7O;5jpRgR$g{;Iztr>_|@e)FB?t0pA?UR?_>;)R5?vEQgEB2dJVlajn3PA!JCWDXT&#(9S#c&9w_^7u?bnh?4 zvDD?`Sd~+$$;$1RttkyGD~*msQPPSQl6|NEge22Je9TSPQgm*o?iF!x4k17gLr@e@ zgO&7Ogb|?@>_CKoF$^N7eX<-EWndC~Fb%&s-y%Q>1ND$GYL||!1a}M<1 zMvB#f^%qFL_9NT#ViHzSMFNV{dCV0U6$o$H_9*yViLEm6&`?q1NuokKKnE-uO>YiPHN{zb z4?128ZQ-J70Ax@}taL3=D}W9}2e3V+GQ~C$)LEZ3E~(1BVbLxU%l5q>bLnEKkp_t5 zY(fu|^F4TNwYC$zZLk5pL>>=B$PN~dyNI{zblSDW39&Ynl?+s&lrXeV35^JiICSbf z!dBx5=+6p`wG%i=0SrSm7(he^Lee;4sq7j`sC0N{(z7zx^m1x`q zpOhr^2ElB{Y79=sCet>wCLEM>S+Yz3csS8K@To#-(pHaNh0u$8<7f4|emhGV;Pv*u z#FBOukA_v<{{UA_F~x?hKw|R9_NWN}FoA=x9BNdPfMam#V4Id#v2F^Pu4MZzMkQQ( z7|G|J=Z9Pn&Q$~>kmj{$*|R-Kd0h1bS7Ml@Gw*nnH`0FQ%9>Bt|$Zh4?IbM}c`VF|}| zIGeN;L0v{P9O+cs!DQtj+DbWt^xxh>0(Re}$ zskBCoDh!lOt@MJz5w}>DTL6LyrXH~kFzUoQiI%3ux`l8=t_*OdMF2PqivIxOozP?8 zACDNUI^y7T0CM7hc{5ETbj|qy^4Xf0i(?hiNCE@usQfaO zo$-cZaNru3lprF4BsSQ9e<(g?bq*df3538av2QmB;N_Xs+FH9s;@?j z9Bv%BIHzRkkHp_>rw+`D8fe)0iJe=vaQ18#hN@5D&Q zCYS~RQ&b)`t+=EGWKA43x{D{5KaAoq+t|JQ87dXFB5~{bA)s!Y=4axBcZG5Rv%h3! z{OuI%v(?c{h_r~}MK~CVT2DB{p)RW}*3D7?g2NPjTPPvm;`K1@6?`CdPN~qrZ8s72 zaX_EageDgwJ6m`Jr}|jERm{ser7x9cD1(4|r)>1EB05V)tof##E6;=aq!VW5sRDmi^CO{}TjA>-hLMvNmCccDuan~bCclMLzf zM9OnwW5=TC1OP;#VuLD5i+**AGmt1bC6BLkKWVpTk+B3#7xy@+;v$-79BHs*sVVAV z44ahjR#Y`I3XfGmje7M0JmoJ~lC=jvb{HCa?PpXgk3q*1I?%!;R3Jgr75sFFqy`2z z7>(840@bQTu**m)C3MQghy^ozH99*KDMhhEZ6=j>YBO645M|7Qqdw=aoH=|xtvbt*N7+(22ucV z8B{oQEDdIaVM(ossg|+foM8HPc-15jic>-c89AcAxlO<&Ib!YIAB41$2x;cT^ginK z+y>_F9SJgvqdpGvIFu6|BuN;KS~N#gEC|3YoX~A+FhxgZF-m#C16a2hJXUmO`TJi{nd1;T~B z>l9fkiK2FOT2L&oG%r1QH`kD7ZExjsfbb9@T`@}FzSvUX6i6mpRZ=Pv8V`j#3QpTJ zXJ*|Ufp*BKom_lS9A_F<+7iqh1kC6d@*a4-W>}Y^Zv5O#2_m3y(jT9R$xe|li6+zbC_=#>;XMxg_1Awmj zwYtcvL^}b-S7){AO`G5+XJ9$WqjdT^Pes~wcIO1%4@9;CXd4LX!dub@q5zoSs1pir%U5O(MPd-mESG7#W3>cUcY9+g zh|}=|MZ*)fLzxN&1ws=fD7H4HO4pDGLwix^6S9JFq;!Vf388ioQKF{Zo%p4c~?B9#WAfYb+Zuc zhBttiQU0>s1(7LIYOVSZP7raSb`FrmOiCSsf(;Dy3yTaXTl!UwrDxe-@UO>Vg2MCH zru{4Ve3zX4Ph9lmGPHKSOHdhBNP6}Z5-{^Vz|sQF^r<(Mq>+WuB=@~ifeE}-rS4HU zKtN6MzdcJ}8XyeWVM_#Xwll2Y&Yx1FSbVB)}rDtbwgTb`FG9I}aT1 zS@o2=I}>zIv%Yb03EBf2ppjLJf#m90cWEOx=YY-!$zfyhZg;xdyNj=0UAd;~YfTl9 zs>@Sv8{><-N(Ht!PXZk@+~)rPKgUWsX`xsG6h#ZPXiiC9&{!uB2*M)z4W30;T~+5b zu0Vkfh=f5jYPV)NXbw?>^@5xYl>l0yK}Z_bfX(+*87_p-a5O*wnldDsfjUEtasBnp zQ}^f+wgo7jFuMoSib#gc28UBMH`Q98yz}jMkpBRRemxJSxX3_|I1Laa^Cw4G>k?E@ zAtPd$XdI#d5`d-EN(G{~dvoQ>-C?+_qj@-_>dk0OjO|F~=)cx-F;H~U>y7ckIPAYF ze%I66%a4TUN0xd}T;K|zQwdab<6bVac@hOi<)slqQ-WIGLmhA8}JyT7$V zOWybI<{IqHn<>1iS4~7HP$AwRNh8x{lI)hadzq6k{v(4qux}ED=l$xCjO5&PVx_m5 z+jloO1`4kJ1PA-zKlpkx48@EU$2c9BJ3urL5P$+W01XXfj1=Ov4DXPgdJpjm77U|$@`b6ULG z6G#`$)`W=wQDmhk!H;~=S5Le5a?@Q5pn%7U=BjkL6C<=LzLv4?YQD4 z5+$x8&<$4F8YB^<9a6nPL_~;E*bJdT>}S1Enk#U`5Rkzu6Q-xy$v7r3Ahf@@&Vgrs;` zNii-r`=nbJD8TLn71=OJxv=58&n8onaHiC9cLB`5@=FCCrFULLGeI^bVG<_6<$+27 zOlz=cRm)Wkhy(;C#IRX_OGS`TRCrPthK7p|LAl`!j!XT+rdenBP4Hj=l87~nlmX1D zLe&KZ5P`>zyjH`A!uz>p)GRBMmPQ1ru2gZRzV;MQo2tcj{77DC4r=ZEhBJF0F&cxRNBpL`b86;VsXdif* z0BV#5m~pv@((y$ag%~GM;4U3f&NwU}>Ir14ZkH7?MJn~3Yt15wi?6>OIu}iT>^R5> zfmJO-h={BKbS`}RG_k078*&yw$V{b>ha^Bk=&VgR&;%RP&;5 zP+U=%p25~uvqet5-Sd4~fNfSQ(Bm}r2KIU#aChjc6?ql3FMzm!83Qpa_T3xcu@}St z0H3^I1tg@~;QTzM<0DWG3 z2e2K3vWCVs9)c)}3r(iuUP25thYf$(D=)%?2RR+0b{4)YgIBe`@}oa(hjla(9lB}g z4#w>$FFP5<6nP61m|kIL&R|V?oF^Df#4;KM@YF{yPB|d2x>&@4*m4VS1TcB04{hgFX z^0RsX!zxD7PjC%7XV!ECbnO$niTY`4P7vP;mv37kKAZsH0tSd=HPTl^1dyG;Toiyv znpAdd+IgIn&fQfnVt6}zK{l}yxJV$_$dhU$LP<{c7ArWHmuO-dP7qP9!Bb}K4eW-e zFPNG>mJhh8O2jCKmYa2Ks*3824yM^lB069Su#C8_KG+On**Gi&)FpaQ>4%KA7Pm_n z@!Vss8fry^Z~;{;(L(3Qhl7fIAS_XFgJ#sQ#&2oIuKO|yAg$ZZi0;84pu~0< zgZ!ZI;s&P&;z(($h@0>g2yeV37c@F)Wn!r=s>pJZ`*GWnJ{GK}bKSvRC@VsmH3~N` z*_$~Rppv9ozyQXK=!1G}Q-k9vLqMTQ?%q2s2F&zMsVGp@A|{t$T_so`JDh0bhBbqw zQQCZp)(W@&X*kj0#A{qDr~|`X)?^6E5}Ui?0tzZ3j?mWE3iDJ0z`(%PHc0xck_>H0 zlGO%Hm?*)L5w6V+AgpUn1Y2XYX$Fv@2#BtgZ+OZGxFXZE8`^8nj66kGc92Js5_FS* z=xe45L!j7#bmUF&Y1iKnLEiwh35J2dycr}>u7M&$K>(G>R>40!6!|vb7)Z}gE}y&W z&s-(X+eV$Q8i=@Nph`Mum4r;S22{f?*-vI38)G?A+Hz>6gh?s04w()&Uf_G(s63Ez zsGJ(YPHdAM$nsBXs>Sx$%Hpsib{nAfYsQ-MaDNIbB!QeraToChA~jBk1)^={lxKRx zcMVPy42?}MJzqC_JiSZYC!mt7)zUcJ7tSmQ0EavfJk+}Q491m)WS~Hyuz={W<{U36 z$mv$NnhsnMxB@hC9Fh)HMY+kP)KGTn7~>`v?NhvEgwzTl%X3*6`?=2r<0W=$p2wdW z{nuh^S};?g?I9qnMlPT%kziIAfn!V=gNFwfPVw?qvV8-N$2#1XjXKsPDHery1uF$6 z=vSmEFvcnDMrv2fiuBO{6KI4GWUOEcHX|preBNZ3*DigU}2`jE52p=$~uC<;|jT2@JVNvr!9ydAsfv=Ikx6rB%Yjsa0c9w^(& zJrPhHN0U@6(dO<6QuR+d){w@Z4mMz4OkJA-47e-~^+Du#brYgRB5d+{I{B~%RnYc@MbteIM|Cu#gI%? zZT7fVo=ACn#P2v(^iWu3EK(o$5a7VLXlm66#6Vi5u~ce28(xt&p0PVv*%Di2X$?+}=xr4M{7{i%L6aW;+kP1f!WQ#LkF1T4-l1VKa z2H_!~WEz3a)GCXc?(%>A@i)s7DvFLER*t|tgK$+O0HG8UQATzgh%=&JjG+?d-TXrU zoU=Ln+{JJXM$pqD=aq6`3P{-+OddieQ>RzJlKdNS2*rzcG<{`QThY>W2*E8lMT1Kz zQna`hDei6++}(q_7HM&J_u}qOvEo+T2@d^o?|r}gJjvN3Pfjv>&ziLcG!0P9-A==a zYtsVrdR5Wa&X>63VGD9^N;Qc{xrqZOCWh5|1uX(1#XS6Qf@BD-RtbTSMH`#tx0N@~$WrvWWEJ183tT3ru_(Q}CDxjj3KHsKNtFMFcc2BaF4K+Qh(Tj$R8#C6 zZs>cWke-(#(bp|ATL!g)i)U5#QTmL#|BlzB2~sx)gi@W~AzK~lrM|~w^hFT?L9Uvl z-}hFT#mOy6Ny-QsDS@UD=iizV#%{Mx-ipo4zr`{OGI@8|6w;J}1CjP4B2FCGp+X0b ze*~^X5q$*t*o3xjby^yF$)ZaWt$%?ubo?o`1Agv{{0SkbEgYw2POD?Bfsg4#>twQ& z(Vkj|WYw*lvhzkF(f(b)FU(oi#eoXSTwH9brK^c*237s-=jy)%O^?2{HTC(+Dh^z6 ztS1nz9>fVE8;<-@^pKv`_TiTrHiKVIn^_W^63hYZ*{G>-E5KFja&Td2P5EykUuu{$ z8MDKXO$57p<%){z--tE1cnY05Sm_-h0$u7t}?C!lLs{2H9fq zkRU%|O9{Ggy#SmZKO6_u)0q1R#8}E!ezC#w-FvBb31oMihy+lp29fHJs_>3<=~^$( z3fGd~mdokP!kmIFRp$3rTXZqEnamJeZl&{P36O`7q|`)PDleh_Gu59=?J@@_BV`cd z^IIL1iL?dr4ddX190WnBmDO)Q+~)Ts_o5;}$|RZr9n{pd30OiBANtF36a-G36%?2( zHTYeZRAS<%+kRX-Ev+As4zN}#*8Iu&Hf{0|?PH1q$(=Hmlmk{!zhfKws8~7l2yCEX zLUC)D0o?ndAUh95Mf}zq8gMZKuJeBj;=U1Blxx(+nPw*p3w~FGQu}R;S}xl0omqU^ zufCmw79L7*Jx5twAF>ec(Vd-*QPQ`zG!dn)!58;Fc@oc4PMcxu4EN;cv6LAUJlU5u z{1LHHB{;&{Zq=zSrZ%x#)P=PbDn$$094bo;4pjgkQ8;*!EwMf(*q9iLCF>aislp_>9x z92?Ld&XhngL&KNwffPQJGK<*3!_1f}v|!eZBRGi@PrhRkte(~LjygDY4e%DdfS>I5 zTMSb|&I}Bd`)`;nv~+n6lXcc=NUpE!FQ+rrw~S2;&%!UIY{yP-F^U^w|Y3PR2mc329t z1$XkavHG{)E0w>9V9iOZN^xHwn=`i=i0Df)wsy_pJi;9IVGYu7BeEf(2q+<8fpY7B!2ke|RLLzbCUKUQ=VNG$37mQfYDEEbpuomb!lZ#% z&;8D<^a)`aGTbwt(Dkc=TtAIG?{dRft=*?)W;0YgF?CJ`^A4g}PpBOZ-{eq>(`lpz zMj^58*k%2FI2|USXjD>qJgl?XT4!AIjv%3N-|>n8P)QL0(@;79DzbFF z@3Cj;6b5rILJm?|YOHqQk`7ZI-!ORi`mww}qdi_Gp|r7JmQue2@$}5-n?&@o`QljA zaHj86~2s zMgDF&ab~bgvQ*U9VE~sdGE`V4YSFUUmwbj==&sG$)9$#nvOHc22)^PEOHCyq&G|?X zjxf!?NP1YITEhO*ofK9mluz+RRLk3O@2~3YuE^Zsv%kQJnXGG9hyd(jZ};E=HKSSC+`xxV|>n$LHd`hP9$8g%=KpBsq0{mvF z_3yzO*tNFw({@YhSstqE1C$2Tc(#vaUE20p_#P@Df2?D6swvhVNPj27dmz@usc15v z0s!3c2XfTi;vg`c0z`(Yd2eZx+Zr(E*jKold1IeQ5#8{u8!Jb^SElON(@D_p=8;$i zMJ~x^edl+>=aI4g&Q<>NQO)pGg@H%P(vUo ztgcn6CTYaRdr(t9Yc%{@gcovs$m238|51=%lkh?QEct%o_uU9!b>b4{MhxuMzhd`7wy90W|689iaBLp|MZP2ALYo_`{fE)_ z`hJS%?{!}`W!XT~f^!*|Fn`@B7Gv_U2T6!B3-h_lut+_GfT*J#VJ! znkR#X%6FPxH-?mU;6InQir?8=H=gv373hL z56g?khfhyWUD%D&>g(nkh(yfXj3U0RSJ|yu!sEK(gD&;08?dm&)NJD+do~|mqALt{ z!t@WyHli-s<^xtm+cMtA$|>!Cjg8Ikh1`GyNg>qrhQ`Lw_1M^f_BrMAgsDSsA@=I} zm(NtH!{2L%)}KtD%rC1c9>qI7?N=7(1UQqXzpIehB^*x)w+p=MPGA`n_RBWlXw9;2 z?$65dUX1b=s`Jh6+K4uzre3{e2s^xUSbqI}a(;X7Ppe}iC|Z>tCr23wXCDzSxLK9aB0{(^- zXo&~?jb5_dJxQO&wPjmU;SZFysU+-?)KKdAjn~|a|EXX_=`A)=`v_jBlV*TnJ5A%o zbd*b$n46-=nLEZ$@Ssmwha8IVa(1kE%%%@nLg- z`~mH_Nz~W7cq!U@7^ipOm}j5WXsSfofMwazSXwh<2!2pc=zpbv;nTi4AI~hp_WLL& zc?y^;o-lkpRb?+!Y* zwJ!LaW&ouH_482ZkG1W@kf^X0P0dt;B9VNFHqu(E^{$*FJWmGu!5#hv@eM(_ z>}2-=X8Jm=_$QK8+`QR!!z!wEoG_AbS-G^RuG$wAUIIrkc&(b&-qy)~d2_V{zWACu z?aFHqPb1U{42%yQY;UjcQ0ka$-w-|4-Jl%0>K$;Dnm62(KaXYL@ph^`L!eMC>uWo5tzJ zA@`z zW%dQJyt#b1Vt6Ev=TDRwZEG?lj4CHUc}tOvS(C8AoA?KL#U>UN9`&*yH$}+yQSo~PJ-GT!>ec$`wG-63HL}j+> zRhB+xKClEMUzt&S9ccl=nv^mtQgOY_ehf}tGd@xt9b)tx?x`Hp?8%&VF;)GMxw#gqS z=mB5ziy-A7+PjYoP3dR&m+fJnSEyI0mu|;+V-xPZt~U8Hh;9$k4WHn~2H_w6%9_rq zHs`S;BeHfu&Y0ewyL9^>pV4||7Fu!k?j~lMGxtf{grnj1Crpakxt6*eDZgF)*Bjwz zQY`C5alVtT!Hd4d7`N`Ab-u&+6Yn?h7?QvTa*6?qSj5-ECddv{N@1kKZo=?5KKK1N zv|CAKxF2>CX@g&ihQ{+72`Zo7O#td+>lL@}*!~y5P?+fOBjP=*Isxwbe;n#bI&fvA zH?KZ$kN<1m3EDv{>VM-Usx1Ekzv1-%jAj^yB>b+`hDpz%PTq~z8zRpg&k_GypF~1x{%p!o zVLg536!ZVmwm`aA-7~b9L5L{!dtR;$@ab*|m4J3EILs zg|OLoPA`uhsj@@j5}y3KHeY1yp}G0w&v>{YHlC3412$Bu0*^~U?#E~3%Ij0ff!Co6 zrVx>bS>@atkH?NDs`acQPZA$A_WXMs%HsTo9{ZW+srYLtG9>RLffFOw#q??-^|9y9 z4S-hb#?9-{=H6p-+`_HL^4`);Y~kT+CmxMh+PC(uxqj6%%6o}B`#GZxlx07AXdM0T z>;nJn_$G){wHxIRU=32hlop9VU-0*B1QQ>8sMq5Rq+5|xvK)@rNz9{XVP1*{;*taC zGSKdxUj-?!OiaK_KC;|}eAbeRF_JzZz&?`iKiNWSE0OIMXlPShI4d=feKjcT>y`6= zpY*1OQPD;dPdA)k)PpzZIiA&soWUzW8u(4*V%4;0Zj0U?hG`BG?hQCBlT|P4Mndbw z=K78>ffs?Fk_U%!G;*tQ$JL^g1p8;8^DYJGnTO&8#`unm;yuhutkZle#b<-Q9AQ@c z$@Xyb;nVCUsARpbjc&%MbNZ$JelhYHf6-n>eQHz3VnVu@p8LA0#lgtyzScFjxoB0& z4X!e2dQ0(u2Na5{YU#m9 zLix>jzHQmgcoLkxOYzE2LZNw3Li*^u-$iB+*FAU6HH`3_4c(gmfs)X4lX|_gcyPXQ zcNm;YR2MPKUOuPhvQ9O2>m#j1`+K2r!?wA4*7W82_(`Z;6UKK%I~8;L_>BH@`okL0 zB*=XBA#`lR@0E)UB+R>^a-#TP3ftRXyj&T}CRp0_Sa`Tu@2r1oFW6x|nA-4Y^$$=Q zcA7od?v;h=)$=?78>k;?&G8bbo?da^wpf?hU_NYEPt_E#9>uBhWxU?3-s2BP(I)c} zspePvQ*g*skox1l!$ta_mZwa|1QdUY2iR`$UnfhT8m?2`@E*R z(;b>4T~H3$8wi3>SMaKI5waPRqnsqh2ueo7^jic=nqmu!Y+PJQF7KHevvj7~BBDVC z^hi{mQo?E!l-yt?A<=-Gm*tl+=NxK$yS$oXlhbHDc)nY7FhFF;Al*5<;ab<_^-zTA zIdTaUl`UB#cTa(i2|?@FYWDuH#OwL_47bf~nQxcJ;Tqa%Q9X#@r@zi(e?SUAX+)g9 z)>iogOsnDW!ohRbG*cbt%`lNpvS#ow`DazV4JT{e{NXbPertq|we^4in4y1B-&pnz z+JX`doV2uk{Vf3X95~XmM;*t)(j_p^Ignpwl|-{<8oK@A3Kk!KdL5@ z>a3P{K}YUk=>}Ue(a)bryDRRec>2V>$8#u}tH^FX+C*p}rLm7O{N;joV_?OlqGyR_ z?osWWAskdV=cB}a>t8cA_c-zFT!}y_)-3OYuv+T43u)j%C5m^Ry*jqr*%h@%SveIC zv|fl>rm;>5nsPQdw-tO&^sP^^FFz^gmV2@FM7?|7+$2MFwCh%4u5aIA$w!6)W<-Nq zP`d6PsMbDD!-=*Ls%<#!suI+Fz8B*jH*F(8#6i@kmM@-HLrYY0*KMEgX9iwb-yM8+ z$&dJR?(1^kH7-St&acKpvyZ|3Vm}34ao+tr8m+Dm|GJS(7A8?cBv6bhwCvW)ht{Vc z!cZ<1-FZ(fR(}1ZiuJte$+Vw;Hv8^)MNGt-CC}J2 zE+_V)B)qYHIgdDjGsJg&=k>N4`!!*(dclP(!L)*9R}0KXTS32Z?YH@|)3eRIoT=%v zQ~b2gSf6UE$^0c0TC;;o0HsXzqPXsvGEjdsg(V+uoiU1O6ovzm4jL?(cROX~-J%ZH zwhuCXEqVHSJ-WbJeIb{q*kA-`PHLsrXyze*$~{saH4>((v~TLX zkEOYR1EHosV6@?xa$+&nw$YGfU{Ml1lP-@fqncNSODy&sp2(0>|FFp(gPc7VOJ#!VI_UMYiP&8i^1%QODL1gW4eI37OLn zJrXxv)ka#Pq82k9$US2NpU_j|x)I7T@^J3B;B6L|Y`l~?3ul=XO}*Mb^)_1v2jKlK z4m2?2>8x(*wE`JanHgMoyv2OEyWoBbYxzmC zozJtsvWZhA(jfc~u**ov@#;@ClOjB{CaRKs?vGq%v&>iHPMKjEveb6DaM^m|>Mqh+ z^Jrh)1300we!A^LtPxq~Krwvz>l<)?Nf;^ct99;3{d^MDw>`*m2zi5oe~Ih{dkq#e z6139K-4<|beLN^8w0!$O=;ZWp&^b4MdhwCc@WGpJsw=nfp6NAwuA?$j{(8Jw9f-2A zczL=r_UJ0=ixZflBj9%U4`BF;g)meqbM7yS#GZ09*PI+6YQG{%$=wmL7*o~Z2N22W zQsByMKDqXUU0q$uGdg{V&Fg&iZ-WCY>f=g9-xOkz_Fg%Ql6!IWud{?)y*>*K9(TIb zU&D@fZi(AOM!(&hIP-^5vUz6N|B6USHboO-{Bh#NRq`b-Ua{`{SlJYlfDn5`j0I|9 zBqi^d6X<}}K<72ks30Hlhr`0zLM<0Kaott*aLmqC`18qViMa!S^jS`bwu}^`F+x?4 zPmwFRRwnX0JzX1;TZJBr4uj(;0Xwh}U6sTcd#dE5mLvM8LL}Go7}V)l>KR##K6W{^ zCX&d3C*#a;Et;#VftOCU>anx)cw-6_dYT>#=gGj zL4(7HsA$v2-45>6#64g{zi0CS!^yfRFk0Ng5dX=yw(=$Kv7?HG^3;3PWw1HROOFLp9W z@B7z;tw>vn;R*x=w4w8J1Fr?N%bs!a_Mn$5S!7ZfxwTk>X#l4Z|2u@9{B~a2V3I}% zKd^N)Vzft4St569uU~#lyKXM9F{A#08^vDW#pvbve6T@*4pT$mTMU!K%?8GwGTH$7 z=FOoY*ujMP=!@I~D%+g$@26(~>#@iNAn?Xm#HaITju%xNStge%j8eGMG^%SE=Q3y* z^wcRpCAzhkLgL$nu+!RU{9OcI35rOqoxUhTqdGR6?_i4&tQjold0l;1fH>v9uadjE zd!nHZ!Z<_20LIe?V)b;-qovoods=Zn*wj>4TuIiDm*>u5w*R(Dv7SIYqU&$~V4AMr z7`dnB$QTY1q(@#M^u!Kd3EAL9q_SuvCWAzg4xqSxpn~>(=W8{VO5g~p(fK<#?2$8r zO=xNuf2)6-Ht_zutpBbmvDc@ zF?8nJ58>r9xbVexQ0Y5`t#XKodOx$=a216;4P1Nk?VV1g@BZ``^K-b~`|CrXI^OQf z1sn8h>Fdba7-U`_87w|;BJaSDW;YfM?}BS)8@xD%KD~;@g~&Wp4Wcr(Sh*RmdmhGB z$EJzC_j`huUCKLu`HG*fuO}YEnqg0V0bb3A9Kgx;*B9rON9(I?3IjLe&g^wDBwnRA zhsT4L9W)Dj2(6@5z_p5>Zv8jwJjP~{i+Ix%ExTtFjeXjUH3w&CXlFCEKg5s4*zRi1 zznX)vJid+Rlxom+(CuO2R?GUx5lG>b9UHCi??>-s_ZPByRn&erf&T=oqa|5Avc{*_p=cje~aQw4-cQtukp`(n|$JSUq$;1 zPI%jPT|gBZTppJvTIKx*=)~g#|<%FeKhLT*o?Tb`}EYbq!j`JVi~iF3dkAM4#S<$m-+^#Yuhb5db?MG5pcJ?!TNBQjc^c<=D z_KpW$B;v}PgvsQmPi1ATTiI~zbyB*mEUYYgq|sxu6x$-Mu0LA0gwslqZCu_9ixAc# zuXpvn@*FC)cm<(M_tTeLk$NKXO=(Pbs9WJER?LM=Afzv2B?6{|OWe-mPk7V4G$U=d z+C{zo0pgGk^~KfbRUZTb+7Sqd)b283P-OvFb15NT%Kic5Eoz-;(zM5`lQTIAr=eUW z@15eq5PJK6$I_y+({%%|fs|o`Y^{Q(HST zLfM0|lm7r+L;nEpH4#Ifytm|lGNd7j_z8jZ8zlf`G#2%v@!3jup)-5<&p$s`*rR{_ zR=5_EJS0i5z{p)28%Ox*+|S-vFzO54Hws+zs9Rhb4yO4S854)_?MxPud2)aKI6nBv z`sB5lJBb4#n1Z{s8`AUsR{H7{4bNc&gZboyOtt_t=aoMQLGAf5O%x62vy6{cQ8SXM z^*Wpx#mWeHkLMGFSFJjvRg;wS_MHJiP_8(LV?Ap;GD2DfnNm;~qp6#`F<8s3T=?g% z89-K22Kctjq3ZF8@DCp_fi9OD`_nX+UYv1tx7A!{z4ChY(8g44NFYM#pv}>u^L;A8g2+Y2A|O6^iFomoIp5{+pflO<7;ZYD*a3q%%^)a!}-tq++CXG07+;M0o8 z5tpW?3D!~-b_1g&%i>~j?{bvemZ~vVDn;4~=w2c3{kf?`?WMPK`18)wwPB;ccf;WJ zaw7pYw|Kpi2dfqig>M~KYLOp~$UM+KT)U4BEGeT1(x3MEzoE9ggWPP2Uh0Tq&Vcg2 zy7CRO(5&+1HkK(CR}n1L$TN|FoJuI)bLyxMv+;rap1ztg$p#dj|ns7Q8C(+&-AcDwCQo5n-#qvXn~)oUT;FDIKJC zL)f_J-^>gJQX*4Jt2FjfqVfwsx(PCOTM_OvfpZoD`(q)Fg4AmA$)DLf(cW=y2}MnbM^1nbKjoz{^6 zdX(AqefN!+JMCPGQb_cVR@R8@V;iw>Bt)H{f}~HZ9vTFZ8mC@f8SL6#BWqgNw#`eW zv)r`pPO^1R4_s_0K7b!_&X`_+ zBg*2C0BBi+ycAH$?CZVq+wt1LfQ&n#C2o$~M=w16HCzI$U_LJ#y?!8Fi!1owvGxs@u8D~Fhwj||g$UzBgu6yKELdL{@~R`72qCzxzp@C?0XK24Euho%r5fU z2InW2R{%0IJ(V z&H8M$Gg-7~T%I}O83zrjG#w+aBm3E|)cJnU z`v%N$eWBsl(U2(KVB#_&lz25v%|29~1cu+`=tnO5qO*N-s3;~o(aD3Jq=7NvhTsIJ z6x&OH1;jSj%~C|>6AK1<08(3;rE3vrF?Otf z_s-ulXqy=Sk;v-J;4}&mwd*j3efx*56Z7oco2&Cl|L)BV47&sF_b-Z`dlUx_0sV^Q zFt~!FR8Hpa_L0B?vQ{+~W~BMZ!bWc+suM@=TJIn{b8*u8vPcUx5iV((N-9uQfUt`*_@ zyqWc{Cc6pX9nCHj>)tyi1tbND_O~ z&1iwkXkOMb}7%lgmjeO4ek-fQUjsRcsteRjM-aHd6$>G)v?&= zb=KARM1d55VDxElNCjoSS%;f?Gnf&*^4H7q$wg+j==V86S;xlxSkBaRkT{dre&a$F zE-3&@k5PFqdtBscdY`a3GP~Q;{;8*=Oi94+yr3H!?Ug1NES=i)4^RQMvwQNhrX#T{ z7`t#n!WLWqKrV~6XSXmnnlA%af@^W z)BfBwKrs3ZVll)rDS}+VjVt9!@Q;1YNXpT=pj``5{fD+)v8u^w9i+7+tWFVQ_gOI*K} zU;3#45lbb4ckYF_3eamTwO>_>@wgx`0x?3<_@#?0rZ*_^s0E|r7Tc*`BXPgDVR7zR z#+j=jXQWbSX9z$+8)eW;h|sNBN54gms*-I)?{J?zGiUzCL!`dEtv(izq#08>RVb{w zlAwi(`Y^taE_e7Nl;ahoxamYCspExX+g~7!yKXAH+slfN-A%Ij6)Pa)GDkhY;&Ge;~&6trgp7K31X7!Ml9@Am85g3-uo9f;A@(gU z9@!EQ*#i+*L`asBMU_@VI6w}IPb$)5D@y&r1xL<_27sphz1q!|d0(Tv*BKK!eW*g&)xi#`^y z_iNJ{u1wMGDs!wQODYj>K1>$ZRmdBKo_Oc!1^HoB;AG!hCQoH@?Z$TkuGONQHyJilANI6?aYl)eTlv138%e}Nn6^BkrTi_m|zVYtT_oVXz zSqfmgA_Y)C1foJ9wG_!PmDS%+`%Z2P`3fQWdig36YXeK|D~@X|Nk6t12kHN2!eA_W_AeWrOB7)__$S;6>@r_)NJG zwK~d3s#vE|t3aB!5u?^dRxAYpoaj|LpM64-S&lHG6+&6+V$Nh;PrB_KMdbKUWTZXa z*g{t%h_=BWku+r`))}q|Sfl`jno6%y?|Hn49UcwASZp4Jf-Drvfq!)1BbuWuPIQLi z@3;>B+;F{KP}%(Q0{sr)4eg6}E#hNGL>dtHBUmpVK{ePSv!_^a{RikAdee>b+`5}V z4ft4cMAdPTB<^9K^LlgBLn)%?P}#9uuyP^0dTt8ULs5>CRQAFRdH*hYGvt9Q35lhQ zQ$>5r_M+nb*ARUg%>E!$R*?D+dM1*&{|ouw{QmK z?+6`ol2pmTdjJm0u6BY(UJ59&lN8vO7r^Uctr+ic`<8a%ijw|IxY~3eH=4VlapZTB zxTH+Tc>wyuOyGwz>PTA$R|{%ksEWBZ@-LO1=F9P|QphcdC>(N$3Jp)don=Uv{k*zm z!wvc&ixv9Bk8QX8og@~+@J1-zUX>0}IWUjP+N1&ekt;vMjF9OKyOfRxECt=^z#iq3 zw7!q|CaQN569CtaCTO!!;}}syVD13aXvv&9GJbXZ&~1TIdaom9%Yo3mdh8YEmkRzh zNQ76|y8U=+@DHHWT-N(uQ#2%T6 zqj|Y?vdLBOI8FifqLAb}9gWzlE>@u^nUqFcY7gGyK1M+f4IepmtkJ9++!*CvTiE($ zNPtYMnJ@eE=Vw_Z%=a_pZ%R|l@qmx$3?02jNHwcM>Sh53zx-K(tW+buCUFR$P&$Mh zmrXo$Ru4P*+Bo*7F9<$Ti1&JNG6rXUtkf$Ti(z^TK!}&tY%6O<$b@-yD79eZuBdq{ z?;v~V^amOjM&Rr}qCp&*74?DpuNpa43X@OVGPpfG8 zds+U%*p-G8JgwNhXLTSvz(e)%Nc&9P*Dt&(0O>U|5h-A;-{h!)vZ5flYfK^>E5jU?(4a?1s zOo5~U-91+_1cbviTVPibdaLLqB;tYj7SnC8ExJLx{xz>{i;1ijr$!M9Q`k?*KfT1f z?`GDQ!`sJp5$=g~LY6F@Xu_^oyJHzzLU?i!mZ;yilP9I^N_9RY2ffv&le465b?=s! z28(auN_ofi)dg$JI)2>5(V+TzX7$lDIXY}aqrB-*V1r#q?&y}P>Vf30(@eabfZQqZ z?OCs3nKf0 z4PaC@aH^N%dV0BRR22_B;T?dK9M4H(X;W3>yNXm@31SWeJdISA+w-VoODC%#hsuo`NNBFE!4hA> z-bRUs{5azON&F5AJ(e*}Wl5Lb_8Uuq6OO)m8D}+0^iM{|?KdAIqdUK;mj45+qioVu z%x>K|$bkjWK{07^5G#!C$jUnZ2fC!BLPA~BcLzimqVu-ei>5|rCZa7=T5*n-_TQCRh zA_WSHr{O8>;)Eu0O4;3tx{(G3EQi`1vBfK*if9+L8yDM%7gr;l9-PB_MKi>w>3QX& zjgMJx9dI z62lufz!)VF8Nhh-_!-9t#bBUe6O?pF4>9DZzBBK;4w}L+7e>zG!2&9!saOiGvI(dI zf&XZfQGFJ)<4;_y>$+||y)a7!spN$#GJSAb1~Au^a(ox@GL^$Vp)VJZwSITm<+(H| z(lxZN?~RRhui2dw5bEj&lI@0pg~;#^nKu=R0Vq*M?rjSQxy4-EiFS+9iirHb%^dKQ z0y8tMo%F0+st_W>AzpcWaU|g^W9fMLxVu{{fdu>54)+YN9c8O6B~JeUrt_p|4l&YV z?2{QKYDiYsBMGm*A6N~3jI!xi}e_hQ^i69^0&;zc%*A(gVyg#cuD)4eud z@H13qtZ=HIR^a>%luFZw(K)P=ie*N5kT-;oO%ab?5ulUS-f?O|o-9j+(SG0hd;~(@ zSrFO^5L2a1uvb-%w!UIq?dmk5iE|$95yKBP-@-16 zSkk1zqwHy0P?g>^Yb{7WY9wW9;C>0y0TtRjRpHs?ep=n~19)jR{M11YXXwu%twugd z*sEzP*0xd__o<2;D6DxPkQ^c=Aa<~on*jty0^dWU3X?vv*mU4U^d`&&r|oQaCc&wO z0!;M#GeeS#s1Dx6jK*$gzwbob-HOc#g?X+(9_K>1b(%Da--8H_5S$c39BbfI)#crY zt0?r{?}GuFh={%%GT3Wg-R1$7Eh|`aP$nQY^_DMR)_n4XiwO@BE#@df0;cTg+}3q2 zM-K5n0JPm^MJx7EjSRmp#L+Fe+vJfwKui3k5BtYr;;# zb|8CH0yu41rU7Ai(@aTd00D9L+g>_n4b5{T;l3%|%zprr=lnD8>#d*dJ;*U%f6wMH z0cj@i%j*>uy&^h-_67#tDRA0ryR5F%8z2d_Oi#qI4W>j?)1dl&y%`K+v?@_>s;kh< z`GINTlCPDBgy&Xz{Z{*v?$(X%@!wV-an9QL)=N+Esu;VM>_OVoUaivTGw!5+w3r4;$@d;)#IN3(9;xkh?}RC z{o3=_@;4h{AYtt^|Mplf=$XEv=x|#%R9P0rW5hNxdf)acK=Ik0v0*rnr40U>H!N$@ z+`IHhA99IlkScNDTwX)CD*dezc^{65ThKnKpo9gqVE7;p;N#R=d?xZMJmjg*35LYs zd-S4U&IWu;z~A(}Pm$AYke%sfB)SceiPnOmm;R`BN>O$XiI#Y8)9zuxVifbH>lynU zfux;OendzO{B%S70PrDL00jYhqZ3W|kiwvdAb}vtTGY^c*s#587nT-&eUV0&sFg?0 zGcAcXa#*QR_K%6%SfTT-{%Vp?8)dF4+e(~ zZgA;@jqDpwiWFta`5P_SFXI=sD(wtqZv|btm54Bh0 z7O#&lP&=c}vP1__Pnw(#_T$#GD82@_#qrv(wzE3E0d*^FPRAn$4U{I@>;mx%sj7sn zN*WY&61!r?WvjD!MBkYnEQ_ z2$o}3$ST|-DrKmjP}Xn>iG+D;QR{#D2BG8%_((G5{KVe&QicSxBq4}a`_!*LgQmXJ zY^(wxirj+e9%S7n4lQC2Vyws8?5;A3v(L=1$#CqE$LnnMG;aDCD)ymW2?Y(C# z0hFiEg?YIgpjE{pD{&w(k*``FBYR!k5h^7dKS|CCv1?lgFO`qmnKv-MX= znoCR!2$*I&QQX!qpdgdbce1yZXCWHAf}Gv@Jf5ya zRi}J@k^qiZ!aMFe?qeOL(-p50fXU`P=j(NCMu%}+#K)7@B`+yJ+5hgc`eqhpo$pEqWva=z0^?^G%AfDBB35?w=6JL_=~ z>%zkRBbo{TFn0gZhH5Uw4oy2tRGCy3NFli-wzK^%?#)YK5Bk7_c^Ecf&f8q)e6BCc zee`|Wr!Ki^nlh^JySRE3pSxF*$#4r`vAYWK^KU}UuUlk&v;%FVSs`+B(H)4`1P!?K zGX(e^iO&)e=rSJD0G#0dZ_|cO3;W{*f>#_q{ z+YB`F5&VuA^PfZR^;3|S{eh9sgV^W<3tZ)b{LqKI$Nf5!u*bto-9!_ne2IIp4H8nv z?*8P^B#5m!L$Qj8HpPxw=T>-ePY%i&fp zMtOzBc@Pp<3^krWXY(JmA5Np)8(cEe9#B$ z?XOZ~n5|#O7ZL^&meM09Qh}#ru2KjE8$r<5Ke2x)o(hjiJvw}@U%4KKD>KIu4rOvS z4G4p^`tzcWeyexl)W*Dq@C=ExP2Eo&<4G?E8mhe09^V^6k1C{R{4}E;0PE&5SIWO% zY!;>Ct0z`tWKFOyVWqEK-D-Jw3>n2 zST?AmMB`)R`DQw@FhSCUKwJf1^aL-MfJv3$W29MYGA0O_9IIHF3gOl_TD5WVn(w_uhCi@U+k*f!Ax`i=@i?Hc!eb zWJ-8&Eq(q(0Z3`YS{LeuUSF`jrktoEy2Ne&GQ6&co?oag&U%e<;a zxZIBg8-I#pUT{denG34$3Wl??bhdEr4R)Q6xDw^%N~oiLV*1l^w0?+rkJif>O)w?r z!qTK#gfF>E1V*z*C;aowj5`gIknJ8JXu`(#B~3RgV?9VAbp)BIFW29!pvj_uF!LjA z(F%N&u#&g&jekJDG~>=sZ`;zxD?wGp!L1>BSjx$NjWqxggORmGOMlV7hz+8mx~XD| zfM%~FPlHIyz_1_LGiUf;RUEak9X50O)E*I1RldkinNZdCALF7#P>yCykH&vPsQsJ~ zwYgK{#4@9^M#?$n!TMmouraJ)by$hsz&y-F8i?H+xx9AY|H|=`kk$aen$+YqksP3Z z{Z`_hUS#k(QY^uyd3<+FFV;#=0fXiBW+@ijJW*HO_)BSBz0)P)#;5(cmTg{It62YT zrxP25fgYJ|xG#?77&~{)`48Y2WK~?qN6}p@!K!-3uDN&AsCPAQ+tyw4ntUBJj2tL? zU9OZUCe95gMO3p0QLYKs4VX_r{f^varou>|)j*7t2(0>l002S%zM4MQWXzU>eve01 zjat>wU8eCCNu7Gj+$TU26|;_dmyIP8YQlM(Y&(yRrvOw9?L>jHici6#=?032Up3-% z{ap_xu#i_u%xN_O#_%ynr3vH%>TAE`;)hL3ih{_FP`YK;0w@!Wg%~F~`Vl$!IufqF z1=CKMu5~%%A)Hf3ROmnf00JN;cIKl1O6%bX|n)UEC54KWy-H9o9tY!3+Vd!^a@$z{P+u zqC07eU56otCW6NyABcADtRMid8Q&CgF?PY)tpp=a9|h|rlsWV$294r&e;W``?5t|) zU_)NbmHR(5P4#ket}B2hsrgbve2+klDJd$$G?8_d&>>r4jQ}1x+vR{L13GJhLaNXg z1CcU62IQxag<$MMq0&T)zl4V4~Ef23Y-%pZ^>d>jA(0002_WC=IF{J3cr zngB~wL1Nkl13&@s%_J;#UKl!TV2p6AQ!Q-`TcnaQ)iM=Vu^rj~LHd&30Ss61RHd6O zftO`bTF1{(dp(>e=UWu|>wf?}(!hnA!W9S>q8tvKT!il+4egazG)=0MOIwk;>OyRk zdX@DJ&fZv40=g<*rDF%aHVR{J!U(4x7z2qz*Bp+Wrt(OGBq{?61>U+9I*_Wj1bH$7 z;K*m|-Pz6S zkmeWrgYOH7pn)RvKxBTeeCMeuVqvUW6s^w)EI{ZG$@XLy(hbpD71S39V_vK@C9m;!NT;sk{p= z(&NN2LGq6vG#e;)CG|Ko7e)gZC=NjEKOzni9^eLL6jLblnK3G7(j~KJ&sAQN(|#&1 z>HYb#__4JTR1_h-K2OFo_6t(MHwxh(a>ytY3L=~Zst_uc%~aBIt6=&WbwM$gzQUjujRx zE`_ivY?P{sTp)_1o2CNjb!2Qw17D%_L03?sbB7=F{QmaWfUPzn2>{m|80n@|L@5-Z zrnEKc-++yy(6G`WdWeHgHi&Xf>nYU{DCl%g!w@F8YtTR-cDZ6BZB>K(8U?SEbHVVHg18S~LGX8esxVv1;`zN%B_e<-;lHOM2d;oR36KB) z0Duq$}^yFVbC46o@ejwva`j^?D>cT1tthNUAr=mEJS9!j-aHjh#*z!(!xO z9a7;dW2QDn^oZ4TdQYA4QOAVpI7n<^~BjHuHjbA*Igp+qA@e2=LHx-&m2bb=|+ zB7oBzOKeskp|&e3=vQ*A9MA~F2!Q0Ek<|Aa;Ts@8iGdxkvwZI9H+o&p-d`XZfaF2j z0xGl`Xw3;oUyH^PAcz`-%635L>1cWcsPt5=**eL`eDA~f1&?JfmDs2bgN|y?D4Dg0 zs@5gTbZmq2dDsU$#8UUKJWMiM^*>(!0DU~GrXke*{9LK72YOifn^#vcM&~CJ7NQ;Ac*QEI+!VJ5zu%^2d4Ma!aarx$clX9u_J+KAy0VpeW6S1 zuBgJDjZk625XbKk3wEVR$pGEh&ZSw-%gOSlNPMU-K}Bo96ex+Pp}A~;piKkk1iSm| z+wI0|*c|ZUi|qC8Z=;9NLaEZVJNNY7EuuRH{=DDxPvTJY9buptPJ~QC-fIhNQkSMS znoR!yTu0Dv!~A?{08|zLh(QvF%u0_wk84jJoj5gsX}{b3>mEZqq0j&h*Z>`X1AxTA z2Y@=Fh{rq11IU3hQUFz`Q);ps-vX488tAUERGL*N2nx|zMA;Z}LkmM7EykwSpGO=3 zod`5qMbXRCj)p4Iadq~UU{uUZ7D^EJkc3 zLZDo`1|}%32V@+{w3>|AuOz8Jo&j5fBW|~yF?xf)f` zN@-I==Wu-=#vYHqpQqRF-0|dhH_VUW&VN-^Z(s7ijy!bY8@^FgR<#C{cm*U<56E?h zn*sQx<6!3G$wsw-wB*sfKx<;dVu1wcn-v@Fo2ku_$h7k8v+_su_OD)rm+j?Lnj3+L zDG++gySSS=gEVW)byorU?u%#>!(N~uV5Ce^O*SfS0rFHH_s@4{P8xiMk?7nKptFTQ zE4T*%ILi6edWySWHLAAYf!oCY0D0KY$@uucTiulM-?(-3_$DjD&BK4kz?YH1XBYl_ zPeC%|1WFesh=YX0Dv(foCKM2m{HOH=tH7j@7!E!ys#6klts@Yf{xR&X$KqeEMf>}g)#cLOB%fU0-$Af;EK}d@jx7yVXLHt6IgU?XLfJ7q& zH3r-&U;MT4S5^m*YXMdTrFVqGPRJuAMb-dqsH5L&5N<*ylr9sR(9oOKI^`|}G~ zpazK%NeGC zy+WokD5SusLUNE3oV7MUXd$Fv2_}T#E|(A3M`^WKq>noT8AOQL&_#ie04#tGJNeuD z{BiOwvSrZ05(0MB6`3&cK_qAk0Mf^)h+^H3UNle#hk)(TnSFhq>o#93UbGL6Z z0z5X+bVm~LIFkpx`XAFN=j{IgSo_?3Cn)Wj-oH`fpg(^;DDS6o@%KCB_4a?Pr=PR^ zW#^N#6Q^23_v&ZRUsd~gd2}bmzDjZmgn63~8e=f_{ye2uEgPVGxz=5;Bt!rV3qom0 zHE5h=__KPk@3b=hQ?3tH5(eXw^z4 za3o48b{GzlFc4m^f-LfEipx^8=0bF&4dYWv^TMQ21xSKQDWtlmJJw5DiRxR)1PDlc zZ_~fWC(ymphRtvjG5~=T2#KUbO*w7AJ0b$-!C@(y^xyQAW1}1uQygfd1Om2!^>VIn z*iNJq&^WNsL~l)CknKd}PmG-4Yh{86WD#2w@-m|l{b__xBQ@A8FhS868x(SDu7j|C zvg?r@kfN{8U7@ZtMWGRG8g`#G;q-ItKW^D)e`Wj`Pd{h+&Gaztp7QVi0D5SK_PJhz zuwC{w!^U4sKq3diaemfGB+2(tY*Zn| z07_}79K4zlMABo2VZkWWr)EO8DFbD$)}*K)3T;tA`5-E`Au%jYj8HN$YFnwy;9{Uc z3#=V4T3AH@aMALw^AZO5@Dkk zP&lO<*usXPjPQl+0;IveWo_whL6ahNsfC3_);me4NpK5FC+kW`l7PL!! zI(lJna5I7_}Dr`kvQaybeBA^Ytu37Y{hzli9Zs5CdES;wEfFVUd_#{vVrv^j1 zPe(ieQGLY0f{{)F#RyOk=m$-xNefhj2OA-ptF(})q7VvA{M$K$P!#v%ff75P(`n{j zPfo@XTbg#+-?sU!&E4euC)ZE&&xoVid!+nam(SD2zW!V5&u7PA@_!gXoo4+H-%o-G zyBp=d-*1%clr;fop_)}E69`k41hb$38UR1XRnXmSQyKVI6O{{KXSO+ERRSe>bc%|k z6%#HbplMq= zpd@Nj+vf0nAI48{=jq4CR5|?4`zfB&#bk{Qs5(Wk+EBMl2I4m_PT*|{j?P{>>PG50 zgVe*YTCTmn)fIx`Of;&YCfOpa^e7;qx+@vf>8NcwIui+P^xq)3SeRmimT@seTSYL1 zI31C(wShTh3{XJCLSU}yGPO1 zw#mI4>svv%C zgm9CEB@o6O!=7k6(xNzvEM=q$w0>sHEaG;n2{A-RG z)d5dSYs%}9Lt75t3aucjZ+|y~=>9R@-1ln!J_Wyj;#P-{T?WN@kq)dd!#v*EP~{>O zGCD~?BA8R;x&Yy;1>}L~01>F*1OOhY6j!^&--F+%I4W+aRtBpM(d+4i2oXLg(LEAg zjK?RVlk15of+6Al7P*U13ah*y@u5*l(%K!tJtf7xVFV>khVjZhzGA~gdSC`5 zjoInXT^^rq5=Offv!{?bSJ$0ksvO`yMumQx-YgUrM!vEAncFG>A`ub0)eEjk>eB^O zPAM464TV(BR9$F;*|Zun<&ytS{8!MXn0E3;w-S`3j> zFgZD-hN3V?e?XD`C%FknrRC3OIYipMNr0FVR48PUC93o;DY3IWOg02JNS zb67myjC%m*BMBPQ>)NT_ynNoHi2gDSO|kViAHVwXBVLT{IX8}Urts|R{Ri(}aWT_` zuCFQUEBd5zaMP?*AF3zOz%o6528O)$3D2JKUWvdC_TES#S%`!j)&C);!MX#j%7Vv5WpQi)j+ zi)dC<)nmpo=rCN+5F2otjX6g|+JFQDfCK;z13~op3)nu5{{SvIg`$8%%E|-as#DZo z-&qmlA5-`Hf5H+Lq)pCgu;_K7h5rB`L4YXm0@45zB?Hl`iZQuMFlG}g0c-<8NO?>Q zYj{Dr8GeGe8i<>5Sa<7U&af*)a2d(i0Fm}rRb$(BH~s)=Uptj8l%XSe88j*Hk#)jy z27*8_D6|wz-A;s%ZW*j<6b_>i?N6HkDI!|j=K?)95KhDwK4CCIJ|S-QWe5;Js~ zDGowhr$$S2GmF*!J5%N>ppLX;^T&Nnp(nd75Oo({H(>IA7$78oPZ!}*;?e^2DZC30 zIDuDQs;_l&HZbONQvIXrD*Dah5rC0uTd8?sAEVG?VQNKNCC!;w5%h7Y!g7) zk)ah|7h!*jGvrGE;Z#gJWe2EB(-Y3=;@Xqxc*Y{Y!M?m@Ltrdf;}wWYQwBKMRM4RC z@h};tuuAknBv{;T{{WCf)6Hx5WeBr-;w}$oi{q@2Y^vE5~ zXFBNfFO~oR00aYo@s=1Engc_tf#?)kH;n)SGzVfRs9;^;A$Xh+H6WK7va8Oj=ncEk zqp_n{DOu)A*pLR9Op5Tfp?_$Sbn5UF)YOX_E+D*}k&Q4c7l1)27?2udeYv%V3wJlg z;KJx%apkfCK#PM=yu8hp?r3Lf5g?=F2mq~=0ZG)FMj9|8-hhoqLP1S%2J3RDpc+P@ zfKDY9MSGnW9Xh`_SAOLFah3^697eXiwXS)wrEof0phnrQ!Du&?{KuDHeg6O*{JH84 z-X_0(xLLk`eBYBD1(Sol{L$m>i19@c>BT_0pmoPdCL)J*V`pNICy5t21zv|p zksMWG2?6lDDeG4M0LnoT;Suz8jQgxTwgl3kVpf{@NjNL}`~LtjC`65GudVxU>4*m+ zQE%IyRqX!EUStox`~sklLO!Yn^}XWI2U~VFsKkS^y5-!RE$Qj~{X7>U zfTFgFIO1i(G*LPfh9WMN*Ia2LYXwOmTS+0%fgpIOs6LF05D@Cr9qk4f?5#$Pk6?3# zIL9E0HWfh2Qw$-8aY0 z!8XB!pxbDxsMQ_b1#8vme7T2VXldWbEwr*%R9#)5GS}n!V3M*-6Wn!vtv;;%*QM5e z`}lGH0Bc6K&a0eo8^>kb3NbC(5JEeUf zCMFi!g9e;FxB41sj;?gAZQL49AhM;2#zSRA4yYN_xf%qiMHO zvXOo?jjn;;x)3lZ3SobRvl$p7fjXUQ60_oBiQK;#>kb{E^1Ss;`E=J?`#k7Rzu$Rl zw$R^gzXw07`0!APR*GDR*Xp_@5S zC5~2J!$=NLMiH4fJfsH6z7C~-22W@%5dc>e@=Krw0IdxhLt6g;DYYQ<4ZXzSu#kt! zpy|$3XQb?D5A}>%Kz>F#|`f zeO9WwR=dh1aIzc3ss;o&qpY1=d9v)6a@lt!-gPd!c6A_rV|cx&81y5-Id`kN3hor#Tj)$hJh^g$0i!|>J@j1i?%1oi+~OkZ3smM z3*^bGY$~3Hx-w4$F_HX~J0JzY7yLp%sNY4nsYfJ9-yj;G7yO~q00<-Fp(cU0yXWN~ zMATMpcQxS+9NVat?buxFGN^@Q}l3OB;`2#+|k617!zcB@5vc=HHAl?fgK%f^&6 zU4+4!6G$sVO|x=X0@MpUD-408CL}D0V++Cr0nS9bIMufGwyRvT-62?rA`8>aQHpTL z5eYzWImkOs$qE-|4!yxvwVWiqmcGNh2H>K`vbmZta^psXM5S67vil(gQH{XBc_>S` z?|&g@i0Ioi4WML1P*i9U;0mD{+qAmM?1_Al1hMLQ@k}4B6nmo{BL(5T6A~h+psn7y z^w&RZV6-b5Z|HZV$~-sXr*quJvclfJXI!Uq+|Fk8`{Qt6^<<-(CLzm7=#?5U9f@h`^2%YxJag5fnh#;()k5T{mKk&_a<+Al|GWu@H;Q z_K+MYizwZ!lD%X==s{{lo)ILutA?T%3zOB}+9L2Z?Jj^mCKP7ZXcz(hQY8_p?zNx? z1|W&?(B+t)A?gq33Mib!XSM+m8sJ!?&pkf>01|^Zq3hx-Tpn={6ul?Y`^%63paWAvob8WyArn~ur3Xb_GT;CJ45`zl08*`3X(HF? z3gBNi!ABGg(j`EuDii%_a3H$kI)(6L}im-JO4W_)& z6O5HH1;rn==ZNInb@WjKpmJ6&lSdD4khNOw2pU?jCj!i>@rj?hYfW;Xtd!^gl2=ef zYV?T!5$3j=wO7{f@tk^kpTzddanQRr(r-szf<1X8YL*Gtn!b8F?%*n2_xMunU$^y< z-8bdOQw=4O{&?q}ueUcR&+Ywuov_R)A}K{+VMtu9OKWJ0UCQsD{n6O!v!L-9T$n*q z<3}a>O?|SZ`cq$LZ@=3kzPGCHeYw704Cl|E0D#;|Z+#PuXIdf}yXYO7{CCQh_#&8J zVw$_NP|x|;f6l{SM#_epvEN<{DQa7M)jD>Z^(DJ}S=2~Efqk5wHOnD+6I3oaoGC<9xXcgL!a}8I&V0`G6 zYpQL;olXrK4#Ma=ocxCfCU|oMOAv*80=0k$uml`3w29E|n)=gx^-Ir;O5wMm{{UR( zJUaHiJ}?zJd=XjaeQENHB~A-#7{>aQ2JSMv_Fm!HHTqbBf9{~78h5Rr9;$)eXT@#u zXNfv`dwhv57++K5-(2fHuYVAoBj4YlZ2Do7_;sC3Y7Ruc5>Locq@fjq1F>tkP6(ZS z?W|kEEiy!%)H58Tkn1u>w+{Vf10Yrnz-CH8JgQbA7L9H?b%`E}n3@{-2LmdyTGF7w z66~yTfU3ID0U*dAacDeEeY|czuSQS#9naP4;^KBsu;wXtP_RcS_@9&?>NgTg={{U4V zfI?VY<10`K+#)T(fz%JFeyuwulV-dsG1D!e14s*$&jn^61jlqanB7J;6`VDj+MF*z zH0D~PsK+)EeS{2Fx-B)td+dIXq zDmJB}k>rmP-id;qf90 z$ALsZ6MYZH1+s841g9v9ojk7nH_V@F{{V8_HVJ{2QEI|P>NstL1PiT5^}7Bt+MZJER>;d{NZZ%{KC+l;KG#SxywqBnMyv%;*JOuPIWh z_`q(!xbjFyC`V)}IMtQNu8=|nUegM71=O&$4c3O;TZCCaQi}~kwa2e^#8vKy`q{*WQDF3ewk+_uz;ZO0L)ADt7{0f73r}Y;+NBz% zKx>71ORI8jn3HCsMpL3_=&cXeon5#s$Uo)%;*WA1j05G>m{(jFhoC#AV-HJ)T0nW4HeR2{a~;jVhN- z6Mgc9JKA~o9{I@yws+s;<4OV*i`e~d5bM~n#=`8Tx?MwA{{S!h@D<=mC*_S?cHn{7 zR)d>5CBZm{`l>iW4To;|%sQVn?Z;gKy8v1*5q%r(#^{C6HQoGt z;M#5=u87gnN7EdF(I_#xC7M|Bf9|wNc0ozD2m=)asq>XbZ_4=Ur##-E{glUjH`hns z$CdqI*K9o&c9ItIslvbpDLp4e7*kx7>@%MVnxUn;>9fh>X7q1FYRa!wx(E)yKn(x@ z0C>P|qVKzfiDPJmCtfZrF!i@(MLw2DWGw95;vP??6W9B+4#PGayXWMU{S@6P!@=d1Sg*BZv!M|GhJ2T6b( z*m3Wts+BJjK&YYvH+x1t0HB(^HIKw=NMh6o7&IU^cmk_H2k80zR^sIX18FV20PCRB z6mCwEiXnSKw2EtrEH@@f>Y(W&=M;&zLQFw!GlPOdDQH@z0cAo>@yV1L)D`ZAyhE*! zj;6juprLDN4Zv_B29lR!jM)^Wui{r-ICq^(&5}z>bHYSPM^jlH&vPl<_cLiF)3R{? z07ZY^1c#|dK@tPPN%hKiJ^VO6kK+tJzhm|J@zbSUU1%u8+PuH_ZP)6-AQkSwlgOUVD{`V5cnz0@ zs$vC_>8q)uO=8f0s>oJ?E3$lsnmA`j3y#2O7=>{N5)gnX)HSCaXZrdsx}Mq;?dTBf513CA6~_0E%x9-bXWOb&?%g@xQ& z1{C*J2BQiwS|*)G0Y%xAMrneYfkP_py6%e$fn%+j-yrDNQWGf%OK}KJjjAqocq^o;2~sxiu#fr^x$P>HOgRJ1%<>`d{+%&mD+6 z+vQi2e#_(c{{YubcGB_P!XtLkRb83SWqZyij~^wklU(%Y{rqXmA?l&&qCJl6{{Y=0 zwVjbGWL?>i+uww|z&pe*5@q=w0-)?5Et`A7R#yLyxaM zB$ud%sSnS=`JF}q?dm-Qc0!C56~;rNH9^=>$VBHiM4g8M9f>@tlAx|(BsmH=4C}wl z!&HJA6NPAmk1_Jkl}2#>qN#Yro{7T~Dj8 zvbT}_?tFiF*u}%M_Z~hEqxi>9Ps7LWr@&G*4n7SZHbxPa zd;b9L2th5|J;DnutfIdt0@l-h=fDQy^mXH><U zJp&DRY8!qXFfwO=dTzqJ8~HtOdW!Vu{`cqPkvG5!Su9wWNHSo9Xrpgn%BSSDZ$o0; zqe6+$0)T?$@?UT7E7|*hc=qw$oqW$D_R2ad0tF4?tE3lFcW_?I`t!>6e&60G?*n@d zR(4NLyngfWH7iKZqJMt@hS!de>%qsje~x`r!9Z;wO7t3QKFfn4_J8*gIsjdkAVdl% z=zdTFz5KtPz7_2Kzr5UDp&4o%k5S@zo7OqDU1(YttI^>-@L9wCj(YdX_I}^qAt$>a zk@Rl&pT;w0t#WnR@2{aU`Cl?m&R4Vc{_&dF)iprqZ~6RUd3Z?RyA|P+Wa-;BuRGgo zvA%Bpz7-tBSR*Yo%Bw<_LcB~AlJzPKa80UX1F%X8q^iQK+#oJN3qS^y06pq*MEyTC z1%yGJ=^t=jRSOY1Ik^aS1;HV58mmT-NR@#rvd3w7)cGV#mjhc!N0LKm!^$7joCVMU zq1Z5V;piG94$bAdd+}ej&s{gmS^oeVB&i}HEDmfpzufRI3feBkzR^SxSC8Cy5RK3dg zZ~o%bwbsQH^jAc%dM!|n2->YfccuuGM0ib)*W|T#2eJO~xKF?EpS(=nZz`9u^Yqtn z<=#2Sszn;KoeJ@4a7yJb|_#`j71FOP%2amGUVKwV{wi`|zXE#6MW&Z#h zE}6%mp$H_uPwO}zlFRczy@(-bm{be}rlBa9Mc`Dau$`J5=4qy=+(p8~l~r(pDF6{i zfP^*NYVS96@0cZuIQ10x;j~Sv5eW$$j(m*k0uOieW!T_UR&6zrOe|^)h^W~>(ac?YXfVtm3T2Bk_Cx{| z6a~{_Yyi;&eruIzKY7^BUa!aCECD{W@5kzN^}hfI1o&55?eO2YFmp&Mroyv6*crpw z12iPzywvdODT|>9Pr*%|u?s*T6D$Nm3j9=eh5>*W4gdfLKqeRhVF83j;sIc)ZE-3p ztE$yhRd%b({{Xm8qem!UL3xA}e87RBacEDjyqB%;XFA&{9c&2@0D|r+CRdQrAdES( zY}EO2VL%~9fEZpE06-rd4#&~XBg^*sx^d^?X#5)zy*(sqB>)GMCr2zB4L=5jI!O#M zU*04}VLlNLn46(4FoEtEG8+&?On4;(l7uv(OKeSyDrssnpwRFJ4sD|nlJu$&umk|b zVO7!m5Rb%!Hf<*kyV4t%Rh>ajGgs~#Qlep}t5->p+ezdc6jyneoBy`}j`>CQs&;pcHF>n-Sy6XZ{AO8RZ?0dk{ z=m^*EK7jKw=1FGIH>(5E@vnhw4B!ZSDwrP_uDlPMY#y7l?8%S+0F;et?m_XiN)$Om zi+S>y_aHCJj{r{Nhu%>zfixYOD}6PNh8zY<3ZXO!6G`KV6^7PNBmlKetU$D;2ue(m zMFT4sa}2A>B0!ZyR=kl(On@qzNf6*7(qm=ZFdhg)Ph}&KC_Mz}v-CHiFqf6C79P~-!ZCYL+_ zKolo|Qv0N@69%F+)*)uajweD6m|!y#E_xL$!X|+c;$(mUAV$fy zn^jTTuQ<7xsF4P|I2TVk!Sfos(XtObk@D%SVZqbjb4VXZiA^OSQk03X#aD{RbXp%q zkB=X^{vU_-Wv#B6+cq~`a`^s>y9|F%@A>%!#UR8S@k}z{^H(U^Sb!~?Ppnld2tA+xh)(FX-J+fu4pJI zPK^XY3zHzAl}vz$TpMO1aZqHVPfWo&KIPb6_{9|dFXzXb3o8$Uq$yH{yonG}25BnA z6*aKb_|@a&wh>7P026=!1ONmHtmW_%Aa%1_Wqk2Gp%+!NSL>EE>rx2=F*`H(avQo@=K}*<$Z= zdxO6)3xXY5DMD>+E{w*9K}NH*YgHxbU1kVss`HDj8UTP0fopyjJBwh!SS`@tKqFxU z1IG97I~mK>`1rp?-JHKq$H+*GOe-=NqHIEcVR95K$wtf^AVz_7r70#fD)AqEdVD-k zpOCD)&_>w=e{!Ds*U-mll zaW%R{kx6hs#S)5`%xVb83XLj31ucXCfGsvC?Fg%N)RVtC%JROS>o9+_%wr^ttRqs+ z^ob;s5Z%HXIN9D-&>Xi0kEepcgV!P4C9~vZp(&y8Z847|S7Q7;^wGPg52+fGA`ZK0 z+hRpkHvYKb7+$l2fv^aw6oor8A*2&X?mq9&hC*p10G6CIbq;6VmP6g7CG?2qUsDe< z^gm|5ZgS7A0rmh3%zKB|w_K_Ku{`;+lb^TPP80F@_)v2H06&aNukY8_EnA@L&EC3x z>!uNb9py31@px+m#n^+TqK5N5;F;=XuK}P{bAc=9h^UbZzf&RRZ6Dvck#Zeo*ct7l z^EFnyUue@{s|-!kif9hs`;(}xEcB}J>^R$e241j*h$(>{rJ9+DrXdU}Icy+}KBW+5 z18*TpO8X6usdA^DQW*!aRu^(9TB2udGWZqZWE{A`Yt#Av0AFlNkYu?hzx9A!hI83} zjDiErX1CW)onHK7#vJurdLI3_aUMsm4Mh#33(S(v+)gWs5!;np6dpj5>D+IQc@@Cw zE{xnDNJnVr1PIXrE|T3`EfnN!nu6hA+Y*NzGnW-md1U7L6vo0h5W8^k#l^J5X}Do z)^I6gwj%JVsdaI(PbCWCDDj_fr|+l2J|cw(8#LHZP*Y#x_M=9C5fKEA!J0^HVg!m5 zinfzGJ9nfT-hzHJ{-gWD7$7R_lA(3XydAZU5+eDHsZn}i5*7S>p!VxdY^CW00?{@N8SGO%KN|Gc^IPSBvuqG(Lu(LJPb#U%xa{7@JQ$1L7Bh^xCLF`{n%{TmK>PzRnlIWQK9x( zdu#xqQY`Q~P<{ABRR$VF#*Z{|XvV-jR+UkbV$M(?0)=c3JMrf{kGuWgin`Z6Z|_b0 zm82eY{_g!TT_?~_!evt^gT1JA<{k86g=>-x_5ntDQ<=-0vFj1+YwNA^igUNlejKl< zDVUq5$U5`UnLfzXsNpq1YZrLe@FV)q`j77raW@~rx==Cw9$EV?`AIL)za}1)&}}g%J7@rn zDO@5*0$2!CnkAP{G95=?lVyu=!+$Lh7%Z5O4g^9FBSw!y#`m`{eHTAHQP5*uFpPRGEx_sdGqhTPM+HN<72an1quTVfOK{L z0K3T8q!ch3Ei}`Y{vHpj5DG*vN03wmG#GALgJ2g+Hr1LY*7g-63IJSPxpt~#j*oU7%fNHU zUG2zR>b~pw`5K|5QR*a70M!*`9EKIJuo#FjtXtRp_ulP!-;eJ*8Ozo9_`h4- zo}+YpukV-0{x9d_H`^99MN$W_0+0UawH06Lf%VC)dT0%Jb-~;YC(IZ2DnFbkJN`QN z*Pi}0u^Pqp`_mh*B1k}SmfPr^q_8B3S7y{XZkb~gsuVb7Y*xU_Jr*b;Y>jA(tu)iE zFK`~Fdtvq+d3N&8*>~{pA<|Mi(8v)0#DAbH7m{pb1cwJ!zAoxF(EwLKZKWq0$#*Fo z2J&?ftamHRweNF$~|gU@IcZTm%`hInjd7q+jgLOUs0D|Karuv>wo_c{d-=B~H>#Fzj_`b`7 zV=fivrd~e2fOL2L6nXFe0CbV^Qa!`S&L2lP-WHW}rz6-)Az||P9mMx0Q?AcFP~Vqa z=bSzJoqgQ+W>W=J0*=!{=`OoOmjp<>Du<#UUsGN=vj;4qC=n3YuO4qpUkw_7w^|Sj zRR+-NzIOO%ZVHMaj8w(DI*Pn7aRM`}6w}$*i+~_XWda6lZX!t9CnFA9rtL~+rAyZq z9XH2EJC<;UqTpxtnnS@*u@#8I(dD*qjV#j&2(V&k*up_7jN~z9(rkFqCTJiXKn~F; zcB8a9PS6!?`7T`OCNDBUMxCGDA95DDnV{V>QcnA1(0X&jLDzN7_v?yqf4}I&ZGtcx z1vZV|$F4{TEgs>>7n9x`IHtz$Q_Gjr`r{fXXPfoEU(KI&2Z0_q=hf}ylH0Dw6Zf|h z=MaHj!3f@zTdCZ~dqMV~y-Q)$z4ZS8+%hOvbfa6?;wfT@V~!2lyuAtX(vjyRXta1(54DSfo@pI)Dj|j zCEdh?0Eq&4_9q0J=!&2s^CFvw5Yky%1%8JI0|vAOA&*?Z^=LN&Od;Qq9pGR90018# zl!b-r4Z-9d$)Ri@U~$4pQ7906Df2#jy{2nic=7#uGl+Wo^ZtL1pWzHs<+G@z(VIkN z+ESf=Ne4XN{o|FWPRyl%0d)XjK4%Bf{9_*{f3x`b*2JkyG6)rOc`*;VmYykelLLksf1XM9lLkYwv6o{&G0S$D83a(U@81JN%@=7Ky0R&=G6o4X7 z23zV3jdii#;sk1>Gbp(TrCB#{?C^j?w9?h4y}Nb(p__b*7{fk9c#9i^NasL=DnN)} z4J$^J8vD|%rPg?Ao`G}6r9;a+50n(xO zzLz_->)iLm`43<2#h4Tfu#FAmy6uKZ6cD`yrlM1hu70)r=j&h2FbTq?$X0RM)r6ZO z!-IAcB@nQ*3)n#l5ZcoS2nwVyR6W7y^U+e1g%rFq44REPNMTe2$zJ8G&_MPGHnb5i z$vdXU$8G;`HO;BQ#PQth5YT zinEA{9l!#Ep>!5n86Oh#y68oX;qjr=Ez^?(c6gNC(B|_X%m{V@6ipyz>fr#}b#28H zKr1dowJ%sX>w%4!PM(uH4Y@+_5LN4M_t+a~njEMuo|yVyJR>&xf4m4or}zlH(=_6p zVOXk2sTx1LJJm*~{__zWA-I7>$cP$2^3?e|Pxrj2zP+4H_v4%vS|n&xoCl{#=di#^ zZdXM%`Z)Hu9Zzmz*6!ghq8@Y=}2K88^{$f z9bkZ}bw$3SOB7|<)i#r4LIDDI#D)g7Wf?|B$N(n@>Zpd38#Ft!*eq$+(Bl*r3z`5a zp=XYZL7)bK@-`PL7w}V3jWr1cdz&;gw+}=Fn2LZ42DBtSK??2VZ;w~0^(4>Q^8Ww` z$H90K6q-jp1FsAaZh)Lp-#u>B_5T3g^Afx*RXL?z?>{r_AI1%jr}gXKjX>x3zvsXd zg_WDzKIG4|f49FrE`G!YnX;NTbVbd#GtleJbRN+1IK_Y{b}FLd%HSp(DccQ4 z0iYTslE`i0O5T2%7+psInNfjzy;ObLS+z`>#4;EtVJvA$2$g_GLC&g~F(Oe1Yp!JA zBan+?fCx~Q{W_C_2MSKB-r7!hmJFT{eUZW#0RRAC00E!?0swr9#$0`Kbew(L?aais zH8C2tv2C+SajhicaRj#U)2x&W9pqf)|%JEy>iS1Nk{33?)(%#u6yp_MvtnYE_wf&=v4 z#Qg@Hoo83!dJEjTs*XB}-2{Twh~;{5bmTV#GHTC;(+CSgC5O0@*wgXdhUu$XmSAST z+pB46Mk|CPMh1gQIO>s>#T#jmo6)bkfw||@Qt)Dgv3!Ua`kF9sF(VB(k>OzDsxnLv z57VJovtdKIGGmTsPgfw}qQk5)Z`v>k;rFYA#4W6D z5V2DdnQk!rfgogt zPa|o{ASsHFe2GTIE0jcmm;o{j7@t?G5`h^uSF^Z0(*h{dJqMoJ*pEt1VW z$$4VeZBOje&3w zCsmV@zH5<(;N$R&HJ}(4IqXvcwt#RtaWX!%4Re1xU|!4{-CLS;jB=k-J6k0=l~)C2 zlc~Axo{(!VW5dYF;>=G?2gbZ1JPx*f9^n@oySTr+ABRKQbUIR{O+p8X#v*b7oWrAV zr+H74h=f>B6V(eBCuVbSWz`uGrvVf1s$hHZ-?&Gz4#GD1wjf zT{vCkVGI_xI-c24Vu0%hJ|@5`nz;G~WC^;dcW*R3^7bI(6`TIL zLiv-oCM8r>Vj%f2cr|7wA6@~LXvy^tXq%7jEFF+;K;3yb-x1 z{{X&R?n2Gljvh_7=fY2L{D}nYbxh#&%~d~SL%5SZlPd*>ef29m<`M%f%aVEuCfW9u zeZteN(}Q0Rn%LLwt!J!J)afgS4KXVtB@Gp`D!|0eD*Kv`RAOp6LwKLRuctcU`x$yN z08DKT4Fp2n)F&IEf>~ba!J^X0A|gTZob>A-a)VV*z#n?CblLEOc!Qz?cyL@5#?~pH z)J`$bduOc$(9kkfu!U1@m3F|lukk0BHg46iJu1*NS&xcEmYGt|p-{tq!@!4RAeUvh z$|%aw_h;EPh$nEDpme+oaJD!$^X@#uAIK&n(UN*^+Dr-dO0MqoIGGsINHCzM-C76s zNIt)!%F0^{al>L5PExslbJ6&cA%g{{%Dp2)Nz`8WHJ_8cO3EX~Es`@zld+o7SX#BQ z1q>08zzv$UsoR24E75QwOcKK;sWt5rgZOE|_g`omG}1F;v5I!GXB7sO{nSt<6S z3>3(RK`N?4QHnC98ivp8#G?c(h`3SPOc>q6{x&x277^0j5}A#Xn+hm|r3r#j>%j;) z^`Xi8{UpGk5HLXWa7Pc5QBT8cOMxvzseR=9-VBqK8q@}b{o_K!jpqs!b)<4w?3Qa< z;etKV47+Mf@*ASZ*k%Hj$2ggLu~ZpLT>0Z<;)oOo8W_ndZq1x9agyINpJ3`dV#%^E^Tf;}ak5 zhcZSW?OJv#>of)nIQUG+$dw<_j?lxLxGHeUd&%)5^w&IFY3W*BQ99ZXI%axxEMwcb z(=bD(>C=;TwiDwsum^=4`gN*pP#6q%oVZGM1KnO$}1HhUJTxGDg zK^l^*x2#DFLNUueND)1`3D1gkwmIrSEA)D&Z>+1&-R`G=iE7b29^tj^hwjnpBIfUO zE;%!Hp`)Tp82CT{@o11JsNaczL&`gM+&wnJ=+p0rr!F7%Qa46IXjpKV*3q+B{vQh? z?HM^HLty{)b+RnBnZ>UyYq#3)+O@zKVm#D4S@JVB{z1geU!+Ykxm_ci^xtfWfoK;0P)3Ms+$Bdsz=RUu#*~F+kjU{qRdu*gk3Cc^aQ^G3rc_jD7g^ zZ#xqo9Az{K)%Y=JSo9DTSsVJ|##FXKR^ippf*KR|Isw}-l4j_1%I$hAajzRz7tEMZ z`RYN)A!cX_6`7RCIv7hc2iR!HbySOH)cy~E5dKdqek;;nc$_p`bhKEz(7ICfGA$Bq zKDR42J(lp)v$oS{4 zqh%5DY0m_Rzm6(q|0bApnBxb}{cwn$4sH^4m4SeIwdczqWTfy^7o2gs=Y5!Ep50X& zxdq)`fub`bsOG?W4C-BfapVVqmBj$)NE0-QdTZy+(SvBc z$2gBK8A5}d)FD<9d1`?RN^*j8m_2jkf*x3ewZ1SHl7DKQ&3d(qtn)-!zSN4{@Eo~# z?hXI3+;Q}B?pZX#@}=r-7s(5ztFUhFsDgUz9!^^KFkvgW69dYTwTVc3tm}R)M{xY{ zKm)9$h{BPiCSiNex5^HovCA@+lY)dcl^6%PX#l~^uBz7(?!=79lo4uJHk@LTzP~Dc zfNSE*^vvpqE{L3%R(P<17Nx6|2K9!Y8F|Ek`IbS+p)k#rV+VH!yYwrqphkH_Ou)Aq zlO-)w4F*B@?q;OVqTSxYN4Ba-b>W1u9ST{A?E=)q zd(vREn>AQ-(f=+k-9 zoMo6NBpGQOTy^{G;Sz-;n*BxX=~JxU3RlXp{?*HKEnlC1O}(*k(D=3Z3xyxLT2x8C zk8-WydpaA&@_U_(<#>ceaatK6Vi^O8h5DiP_h)+<`9Aa{sGF!=IpVQ%omqwUPd<^I zD1aacppsh90*^A1?XDCM$h%Tdjh}3QXw8*Z5?I^((wdtc?c+BNlbpbZPB(00y$DcP zMUTUGI#s-R!kpb`aqQ$^IXy#0WZ)+QpgO~B1b<5g>*MQ6TZ`JrQp(fwFtIaH9MUZg z%CSmwm0>xW!-WU;_95{VX;4>MBIZbDW~P5d603w^l}NPXur7bhOftXn<0D`b81H|BhF+SQz#|o&c6%n1ka19i+L%F?#<6n>TvkCV#7uJfcddC zdhW>I?!(}NBkJVrxg~-$H=LDL)+TKxXeOkH+_khbUlZ?ar0R`S?Bm^foJ6~QiEqY) z0Wz6!B!w)?C|Rs#vmdo4gw^}R&QizP&BuODC;7z!8sS2Q%tW%xvab`kL1o7$_XgQ5 zty&)eW`&kwR0tle1el2tRJp>u%~yKO=PM}Ev(*R`H;;=Wiz686J*MR+(KXHOfDJ@Z zK?r&taBAiLKLK4fYe~zW+Ng7m1#a@X0^B|=kFfs&0xdYW=HZ85@YoYN0w0hKARnc` zbiPYut_s%GANMpx0jd;1(_M9vrNf2ZA~BvL2OD>pTRtk%!X4abh;l@*HmRNZ9>P5Qb-|Ep6DbG@Y06i zv5Ut1Xi%0E>Tba4QQvbQ1Iy9A#5oa}Hw`==>s z08|{-r*G@Y9*ZbskN>tr#3^N0w;O%xwniNrA{WCCWZAbU4T^9U_NVe@+6 z=7Z=gQYPRJ)5z(9$zT1~*xOhVoP1*7Gu;weq8inonDC(t#gUglr0mS?Xw#RK?S4HK zdzKqb)p7NYte+Y+2t(B5_<$&s$rkg-mC@`~83`a3t>(fC`215^Y%{j_1UMh4u|?re zTC~$8p_d77+ZGC?i(MA~zjqjy@j5fV$njBBK9f^;)<{$Q82vroM9ZyG;(X9A1ppI6)v1n(z)sHM#HlR4*dG zpM7`bJoj$&rV~kz`w8t%jox}WY9=Np04JT{2%Jc*AOS{mf=$HSQVhqZixm46w=R)@ z$2<{}x4#kkf`3V}Nw~Tl15Y-vI~Hp(CIyF~9fSYdN9GE#`F8i4i}xf<8q(hKnn>a7 zyFuLc-Q3!SM5OYc5@lQHxk{`IP2;D2XjWbDNjid4Uxh8}6WNuU;cdhfiVFr%uE_Fo zkwfZwV}Y8q!G{LZjQuGreVaj_L}M;pm3biM`p)e=%=2DL9qZr3Iro$k6b$53ePOHC zDd`AE9m&LDtW`0o0n5xDBlf@1MB(?ri1*m|!>x}&FkixM?zrdgF`A8gJGpDILjK-^jls9R zQNvPfnjPQs5VL6JUAxyi4v#i3{XNifG4P(wZC&l{?M)9T9qf`kRX3Gh_n`4R*$Du zr9tdQ7j%{Cvau~JR8unk(h$c9mk)7fc|ZvcK|wCJzaij5|1Pf#D|7vpw(HvC8z4bB zw6^Xv!K*+meu|K9S-IxXp>-v9(xdtZ>J3QFA=A2dJT)9KH+2wgUieW4hVk{`^XsOTd9kA9Z=os4iS;87NIwvqY~uK=V@106HQ(%0}IY>^Bx|^hE+JuFbF@? z*9=pb&n=zO;wIV`#Tb^^Q$j+@aY2*%o#SigG9oi|=t!qy^j0{Q;XY?<3u0&;GcKWP zu}3{2GOB}=qX2TgRXBW6{6SBiviF}3zl>tJ9po14tHA$FLbQV}0BRwV$AI|Kso;7C zM|UmjVs1kG57h*Svy^530M3wT%rIlwD&@ag!BacPN|GTXA3nLe=AAx2zfnLUBYodR zi0s6O3R(f$0qXrhaAjaDbuoJN1k^1tS!C(xG8W~z7&<)D(Q^nPkpyo=R3U>jpkkd` zJ6;uC_KQYi0H2ie08i3mQo(EYr+NI2rfzP@un zeLThnCkqy%AygGNg0@+Y_X$r>HBLT1SbP*Rcmsg>FhYt33=AMsoYk${%h6X*3Jj3h zyd=+jreB{bM}ZqtOQ}iF`z9pg9BvPB)rUd`25t(>Ka4m;caIeL;bZxAO(V2@AhSd++T?)@)k%Jeo5wleor%$YkXmm@T?L0 z^oU{52Zsv(i!d!W@g(w)#o9hnp2}*LE)Q#G^tg`c;Lx?III0(r$u*C`*)?=sLZk2_ zf$rX9)~eolfI79sUMY3b)Bree+eDYF_dX)ggxUL{BWv%hjYQ zriV#&SoXW{E1s+tqOgW#Zs?;ApH%jzymKTy2_0waG?ZEwICYtd;+cGbuxtAB)|A35 zf!rNnCSMmnBR#f3ELS95oj0gtQG4c^;&{N{4aa`-GSAIeIyeSBhm3e85$D%e39)F9 zTeL#`)x_fRtZl62E&*!N!(+c5B|!>KeviS`tTFfv!*N|$hNg<1%wRo(WEE<;+X?*L zJ=_hzd=#6oDnhWfZa#)UV2>S8hPaMY-rN?Ky}Gl z1W6!vbnKO;pV%4!8zH&5zX=;ewPouOtYbb}sLG?`a7C-bhuC2=d;8^fBqh&f0m!zR z6+<=T@_AiWF60--_w+n*N*s&1TI^~oYClZs^4n1o%CmFHTft+ocYcD2?$6aC`6)SD zo&5u-NK9Jw`=@{@Jqyk(A<7T>q(nd1PvmW4s&+K1qD5l=0BX%=TA(q>)PH+l#%4v7 zw&Pr1(oXJngohrA&&GzMgxr02l)bky#?piw&3B;AFhsxZ-Z2v1#{_P!F%glmFePOp zk8osmb2}d< zE^Ad2S=BbJcRL7XXlvt=kP3QuRMp>P?gfBmaJ@(=E{-N2kI(kdg+VjEeW|NNR8*E?Zh%PAjW>Lf)H! z=rs9I!m>1b!QwA+mmUlZBME!q@#N1O|RDv{kG9?pcT(x%&l{~MaJ&2F-LdGRZ?f$Lq~0Z6*oMbnE)(8iEL zQJ1kT$%etky*tDqLF#CIr$tC4`vpkwG?LCK&coZ?vpDQ?|NbfSDd1gLt$7z&NFsTS zhzM2pw#g2S;Jv^W53W%V8?McZIT>Y4jagHgsV6#u!Dmk(_h4Kl;ZBh;zZeNG(&ga~ zx3)NpJ+T{kPE+HP$VPX-&g%|d)%Sv3w3*qflbBd+)?Gx8X80sm@0Y2YysCcyynP=) zFuFoYh(XIPQGuaq6F;tS;bsW_kj;FRS87r^nLxRTj0M$Ne}N#ug@JUJQ zb7Qz@C<}H%Bj{w>HkG_!XN=t9dn)XF~oOP-EvW~Ho}$@KTRmL=0-T#Na;AR~#F znD%A|?b&O#TMdeiJ8bZD=ntl=@{`+E>2|4iq(u7qykEnP`bgC>wo4ZhJ*hX}PF^WU zh#DHhm7Zt3j zmbJ}UX1xLsYF=G78wukSHAZHS{%#vYC9W$=PAc@cwL!NgnB}j(9~(xbKt@Bgu6kO5 z&XQiNlR{;j{w*dpNqjtUY4Cw+isZdtewxFIj74DF=O^FyzB>64Ju+FERW9XY*m89s zc#uK-aMAVr;wG3_PKf~~BcGpY0e2{(j|queHntd$O;|{2h}-n{Kxgtr5wqS3V52)+ zt8~``pKv^tDIS-re`C(XF!()d%lZ6x;lkec`q^#s3aa>t=n>LildnFx_H&+!hf>;> z1dER%12~r?azA~YbjKHZ9KuEfaQlFqy8%3nB%<-}LC&$Ns#oaj`*zMge3cwhQ84 z^4GM#qgTk1a4GfaNas@j)YGSid&_#{nb*1G5F-(}1+7?2C3eB0P|b7K8oMrUo)YuJ z2fUb0>;blak1%rrZJBDa)p4c8T|0OtpY)euVPV7Vf2SVH#B@o5VUdbI*kV^|b0S1) z7Rs{9ql5tq;uX=U=Jgg2WYKfk0{$oR;$H^v)4z*yn^nCoQwV!=cgwjb|FYn2;wvwC z+8&Z)5#c|8o8W%v*7*uZ2ZYex!HO+9k`dC%{sYMT@uOO#S4MSlm;UcTAWXDI)&udY zt*QEOpJYJ?>EUK&>PK`Meg^>U7uB$0b#Xj3Y?B-ro`s>5XrfXJs3kan_s~PYTbZ&b z7#@|f*Pu!Kmnz<|nLJ0KqYYwfruQm@-iIpOrErXe{tv9MxYn38!#NgbI}tf}%U=$D zQe=9$5s?EvguA5RgzE||bJGs)!!q`Vh;RenjJd55d~$J z{L*Fvz5S9_ANBw5Me+zqAg}LA!9MzfaDo$m(7c}&s-PXD`GNDi{TnrAovi{8J1X%X zz<5J_0z4_9$n<=a3CZk$y(^I4811+p4(}`VW(4Qt{4|bqPK0m!XJbz)!bV}Iyi%68 z=g0qOjV^8{zK~yaVX)Q`3z_D#IWG*SVtjvA`5(2^VAWD;BrMN7;R|&fs<%Gt>vx}D zaX-7#R-fWmH?sfzA6wWMbJ$Rx5?-2!5GlxQzmciccy3y_>@W$|&87wbVc0Pjo8|_K zd;D1lsBBqSr@mAQg_Ml^fGH*j{yt6|ObVvd54wg!L+GPNlhH}&lS&ewOkWd|4J%bv z5nakWCI~430K#)+ekUF$sqJRwvhO=~t8AGBJUep_dgaXj;9u|D%l zFuS1@=wk-zrwVn)p0jwMz_0vO7-y#dK!;y=yxoLgun z3;i^#UMiGZ5@=rHkyPL)tfhD=cT(0igv%01R8~{s72WjKIiJte*hgcBNhc74xR>_p z-td*zOwK@mmwBpqqoSS*zf#afc~{u`b4C?Aw;?Z(N~2U%|xhQ@RwlSJ|=WtG~b_QMm1C^bU<+JD76j0V-niENE4IZ z@d2AD+jv2u-?x8%Mc=gfoMJHm7ePuoSO{Y98l^hqAU6=`HN%Ob3e&wj7ei~*Crw&_ zuN5#?DAil;j(4*1^DxjODsku}h??N=4brz;8%jm=PF}%>G9d;W9Gn)hJcU**Fh(<9! zBVuI#hzf6_32cJ;Wy5XQ#XuEOtx<=IW~!31zJ??`Jx#F|e&XOPJnk@uR>X&tzc3Oh z&2F+ZgBXY)qE5Ikli))*vr*P&g`%(xV#fi)vgl}VJ?;O=1YsAgSb z7aj((Zbb`YJ}qZemb_NaTxBwh8G3sq^1mJRzvj`-{(&K{WNAb{X)rR8m5mi8hlL;I z_+*B*wm@M(htHqH^p}mAb6cjXL7(J39X3l`2;iIA6a-`Yd(#0L;hP|{Mrhd|@aDh#k{u&b|+*hB`E0V?WXY-%8U zPB`odP+Q-qdR%38RjCFbSE`G^pscavWKM{S73tL_zmM(F^)K>+#GEq`!;Xt9mdN$6 z=W+6BdRQVS88CtH(`Q*wPI*)C_8t%v*i@_6q*c-6aK*ed!snhJ%SaIPGWYNh6Wd+Kh;T^aIuS{o_TbMMF|BWobZ9a*W#&YT$+*q_B+x{zi&ZD#94=v4lr-@YsJqYA zbffcaP^76hRJE+6mqPT?@VQlUWxX9OPbSyf#k;oUlIXvU(j}I#kZvYQ$~Z}D?Ffv@ z1%CtB4mxrN3nNMjoMtCRr7H{m5@{N;puZL+HGoom*^hqDE6)dXDkC}=A7}S0IwYax zOydJ(Of*onS%)IF!%lr~A{7Kl=^JBX>cC@(-#Ewy)#FVwj7S05WMy#8Eli$ZHiEh5lkw5%&pARmFrUxL(h2AtJ9v0 z{nyfR3zn`6bobwSs_apIBSy2KE6z>t z9{?5WSK*_Bk*C1irt`I?MWV4oGWdZU*&yATeTuQCz(5hOK_;QSI97AwP^=|TfY7SK z8t#Mky7n2Vj5ceqD<uM{@f{To05S#uVCW(OfM74x2{0OVO8|w4k&mN1kW-jJfZW4?OYLUNAS})azQZ(C z3w#KewL2*vm;=y+mn$3vfk#YT5*2y1u^^X`k+;%;kz)OZnx1fy@Qa8t1`5q~#=#}? zL5#(YGP}&=;zIV?N-{C)VOSJpng@S4>E{7-&;72tL~4+Hl5CS2p~B-B*@3kDXG_&P$qCkO zNjg*?PB2a%Y@AQ`#>GQ7o{YvA2)MdSOT9>yd>8QCE16#{5aIp0&8Oez5Ql%*#gBo* zJFxP+>L%fE1Fh2!&;e&5KGi}3t=SD$rG}hq*sh)QuNUj@Puo86A17>8C28ybws{fr z=$f&Q5OTuei*X}4dQTgevTt2W1tbj2u<23aw$98NQ)$$ebYw1&30qkG2H+^5OYU0_ zHo2kLiA%sJAof*tS{-VCYryKA_sJeE_tXeGzTn)tb7hBTky+_8JSFEtOEghJE-0Zg zHGnzcI$frz+a)npqM){&J)_-mGJwD(tv5_5D0FAFH)9iZxCa~taP7_goA1MWy(V-g zk{0_`w;(vP8p?Y^&=pJhe?gW@F5UNJ+7cPEpqwHkNsD9V zJ96|tUw8KR4)Itc5pUS3&Y0LdoAj9x43s?p9^0 zk(4b+%+lkyEH+UNtl1=FUCGgc1z{Eyg(GtrMo$R1jVZJWbw5%V!`yB@!fox&y^0v6)xFR3_vi#<36NVq zPjY(w*ScXNM)Ht$TKg~-D>m*MQ3=lvj(e}$HDY-K8arQsv6S+Z0^_4c@o^O8&$*GlC%$BEPt{(B22MWw$!|%+W6G2 zk{KB~diV<}3wl9WIw&^N_m1-B2)E0!()pokvrT2YDz+}4JANUtt%-L#hHU6OZ+~WF zohii*^=Xq5lF>-&&wMIqBs0QIo=dISmn{Z_Rl~xH`w8BTUqFw$$oz=deL_a2Bk?)h zI3DyN9=>Mgj9XtfHLg}QazSB~AH*hJ<-DM^^_ic{S>E0HX_dfL1 z*=)Z+l|u=e&3x-px|*uGUlVQjZWw?NIbo%0$@yc{*%nikdX9W{jN6^$h#+ys>=bhR z$=Y9H_pnS5mh;90*S@1tZZWim@DDFo<}aK>Y-QPA_%wVtB-siU&F}UcCv)9!AH|s2 za2AgDEjT}hodM0G5p&79QX<7VAS9dM{D>{!>3-7R^4^><^)Vi$Pn+izVd4m)qH`tE zcf}H=lvIywU4X7>0LkDG^q^%VYyPC(bf_Xw*&B=sK%)agjpwdpk&u3vMCtO190<|N z4KbzbFInuZ!vPhMOBz;5{fY_95`%`g0Ed~+LXBDyqL@hrn%}T=r>({7HLmES7U0n3 zwCB`=Q5uw#ZnbzluN$pqua1PXp6Ae=D=nI(xat_kgCRg+)WH8AZG1#W@Kq^veXqyi zH3osf&;V>TIwtYC9k-zd!5!)zW%Uo$h1A<0f{*7W^tfboLoWkDna2<-r9Oqt<61GP z!j$fI3dcDKVGQ?*MVvrmgK2;GqlU}6MlvKXQqrJO3H7Nd0}&IT`M@7yen>O&hQbxK zifl&spJ9vy@(TDKoe4v4J?y2Rs!rSQ`A3!?Mms#Gg;|X0mJ;^y$|{Bqq(i1%3+d_3 zABAQFOYE~6gK)860f1>M0kS%HEta^g@~NZ=@T)s+g>lpiOy&|M_n+j>E!e@Lji4=C zLM(z{dgY}%K|X`;#!i6280%=U!n{zB987LVqJ174;cy^>*npno;PWn4TuFqI|bhA;)Wi?HmB_BY|V zwUds$TEgEtcKN|f`xPAu zTnUG}SSn&<(xREY-i6da3iQqugV)AFPdc&sX=fpU?JtI2Il`@1FNv=$&$s0xV$ADr zzFUCvp1ddkn?A|QUSQtqAgTjCqa@8Sz2=+qFJnC}fR;J=MDmBm83!+@Q_%U%J2|(P zQ|C-tFM$D1<+q^2MoHCn>S`(n$9D%VH7d%jy+q^7pl$6K3QdG4#E#@*^ ze&wj~&h3ymcaa6`4BT=paEpLL!Kp0Zw^ncag?LTmZ&O*cie!l7p%zL_~jg!F+kv ztJ!LJpaP$2!V-8nx^G&jt!V9Fu7GVzuk$`G4AYbreVu-XKFkF<8b~PAdIY(8sG%2N zK0Z6i2H(E@HJd`bM1T7q#QYJPI%KXo;(%dcL+0+G_mNHP%?ussCcztFoV=H}QX^ZT#n(sv z)Lft{9gv}vmmCuabw2>L12!*@bAzzKGHJYsb4syE_%x`8lqDK9T-Y;XNcn)x+6WyC zPzJvSV)m)myevAuKc{QwtR4I3?Nb_TF+G+@N`;CQL>~f1gnt0sjl?EDeMvp8ZGLfn zq;NHrP`;Xhn>fPCX$Ql5(FUcip*cLToJ>CTQ(cBUAFVd{IZD1kt!k{vo6k1TVF8hl zWZ(l9!HfZJIRxMe;%&o zXbrEIk*~k_gUc$KbiDrjejr&osE1l0_hL9djW=@Vx=P5pWK&!`ZFIkE!jK^*lyFGx zmF1(p9HRGr&Swz64w{?()7C<^R{KH67Q#tZ2#G%I)xsh#fbk!#`07+RZj2+`;&#z6 zl?&AgOQu7Sx&Lv?7%cQqS;Zq?@rTw`BkqQI$^kMmrOp2U2IcAfFwqyGI){IMZFEcC zT(zG#l{=e?#P281qojh;VBzwH{AEI=OW`;7oSuyb2wvQ_ke}*Di6!{nGLw7&BDx7% zAb-WWP32f8(`@Ucjo6yAx)Q65S=pXhr*fDy8n4ORA|Va2?I_*{23cDtZJ0zPcX6Bf zoKJ9H+B8DS&qvk!9h*T!JtcJ;8#jA%EomcrKSkHiRy4HGZPwe@O(ymt&I_Zi_AU75fmNLyvDU+$&P|O9Z~C4K!A--sQil@6tIIOH z$$mM%i=(K5G5$N<$H_3~-|l(KA=6noB9@QLHV(Qk{_b9nntX$4`pTt78+N%Du7Fe# zCFpFylRSwt@axNwYlh*zeP+-;S=-5b`&YU>QVy<}I-D+_ZGX8b3X+X9QsV{5=e)cf zJmvlX^gfG$$$|XV7Cb0p@&yo|-l+n`M?T=6k%3(AM#myDUH$VR(*OXGgzmOI$4uB| zoy$CoYSuIhb!-Hw+x7gR&`4YXM?7URY!Kb%7W)#zEF)7ZF#`yqr?!w!D`?NP`W4S0 zIghCXBAHnMZjqEoPTtS|h~4(d==pr{_<~Q+MpA*_bEI05owDX)Z?T})4e1(l*oHQ^ z;+tqtS(vuv)XiNckAp*by%nt_)k!=-iv;F|n3Y(8Pum287|015zt-P_jv6N97GsFQ zm^=Af{mT#~r;XbkR3g)|b4?C47dIIpFKYQJ7*U_V3$y**ig9jq>Tgd>9`MDZmlq+Q zg4XiF?_ihw1M+P@P^FY_S19HmK>B;bh){fz0{<9PeAq`!aig%Y=+8Grd1{(nTM?jG zRoIPo{P+NqGZBX$ENt;@+-)VSedj!Uy0P zBOrvWg(B4hal&);!JE*VjIvmW{~~8c+oSOk@#IL@+|pPK8Ev%T;o-sH6J(pooYTi+ z)L586>}*$PfgsCvBQ%q{~i_D4ijf7?)5Lj7aJR!jLK^PZL1FtrQIwJh9eZ^ zRc_p8Y+ms@EFJ@nRaZx~ch`IY&%&m$x33wkf!>en6f(RNMkTLy-Pu=@`~n+em*~Sq z_aXs3V9G_Kyx_|t;n#PO2^oaLi;Z8nqNF8%BzJ7=&S{3HQ;62xqGjaB$~GhEF-R!d zRKo0(p=<1s3lm`}}%Jd*Ecs<@O@N@7+x7)_uJ6Qf!e zul$~gjlAJ<70N0RQDl(Ql%@#_+DF>pt$Egmb%?Z*li3WcJI&Y8OcWs;h0|75kTN=S z+(Y2d53*ViSlciB-}p;ff(BocgK56&x2IRkhq$6?V&N_*={Kq&VMFHV`+mR+p<*QC zu^x3qFtP)MHe+q|boh@S3g+xs>S_tHZ_f1$tq+%p_s ziqR?(NVM<#%yWspK2-CeXwF4=v`11jG{wjbVm97U?1fH=ia z3zy-6%G-cy5qP>-JeO+1h|t)rHXtIR*gO+rxsJP*hoY$BJTjotD{9s;TNMoulj&hy z3yl(Mrib!Ie#DVhL*J2#OHMarn%g&_Ejz>t2Eq%NCPpKgMbOhTVL8+~E zFcHj@q+2K>-0X&NnU?7RdCTanWA0n(vVI2SedF&nxS}78k;G}qNL++m zrKdn0U#@u1_`Lkq-%A-<#b$T}G&=lP11fS$TQy zkU%qx$0TVM3dlj?e6(D%i$;47e*&WY>l{8DLe24&dxj4N#$R`S)6cx4hBR_eX_MUy zBM5(uB2#Wi*xmJZ4RPucks+BZ3CK}Ywv+kk=9|}@&Pfqy6eQswSoSRP$3>)Qj*CWC zBAzGIv+llPG`PZIibggrZIXvS@in)E)bvfH#1m#CS0v^J`rgq?53X`Op~Jvd(V2NY z7tKf>QLHjw;Px!e0(Do~8t#yuB`66>m*V+Xdrq#pte=;=NOz#pKnfFP}Iu zbp!ngQ4PUCT8K0Yr6gph0sKjGy&WQ!B>_{1W7yR^IL5?c`+4n~-HXqC#r8XSQDPsa zF6JJN_5)lep{Zcr841mY%4{ZbfM;c&D` z0Jh%Dj1uJ~y%b`hG+1pUR?~M`1WPge4*}E0THIlbAoMgj6Zdu~c@}A4B$8n-+QkG14;3 zGf`T7j8E7l1Vq16pjdtP5=-=0>gm0>P*n(2fGM;&GZgfx27*lz~a(mvGw zFmx4rKz_RkeTiRO1m74M&Q%7(x04xN;9eZ^jgffB>>wScSwz~A%xJqbH4vudpLbkn z4CmoA1EvW|UmQ2Ms5eCN^ci(kR~nytN=vX2T~J!e{j}`|$pcx{TLK){-1;r+;!ASb zb6}C%aZ;m{rwq2d{?;RdgMnf``dd@Ae=eSS-Gy5MUN>RBm{#7Lge@cF*u6a;%tFgb zPyB=PclH7+TGjmbK>bWDiF9Zp!$Gak0N$<;r@nK4z@776K#%@MWHh7T0)i?-@C+{iYL7vH@{|C@N4?;eR@PF8dLefX(6vJeQ%f#`NcZvv6 zj#Kj3dAhiDItvwJvwe@-NFj89#E`UVUiZ>Enn-$lDCa>)r^w$v%*uL;N$yE zJ*3_J)z7HpC~jT+P3>w=#*AW8K=~ji<#jUq{z_uhzEt{wH=u;-7M=_S!XMZJ33K=N z3us?YuY7Q<-B-jSXC~a^(4)vr9?{#Td5ttkkFmOAvMwU| zYk%~df`Wlv$JgZ<G!sIO$3XR&;*zx?uw@QN$YGj$;>WLdis=&kZmfZtK+*mZBw z2oz!ZWZTk10rLzi-258xW6SME?c`EzUwCokVX97qg6)DLf;cX(_iV1E4`yB@x4Wl1 zfcTCbQMln2am4qH!gU~V5Bl0wBITJF=^D!&p*6FaO>`Xg^mm9^F97iA;^Ax4Qf6A* zPlF9o|A3j>stfnir_G-TOVyF9a=jHVzlY=P`d^b$DrSgUGLu zb$(8YpZ_!&m#dHm%rpbsLNT4S&sPAqO61|)a`oi+xyEp4aU5obDCcbXkjt|5BjNw} zBtu0-J6APP$Ildb--q}S)?S5-;+85N99xFO7M{tBf|Ex4d;Gml;wSP>uL`%{=}$Iz z0-zYnm0F-%H?n8yriEG|&$nOr8^?ZOoc9WodDVCCoj$qo2k7s?8yhVm z;BD_OZ&UlPQEO8(KOY`h@Y!8wPR|0K8XjI{z9D)ZoV@u(sF=U}3}3>ie_K7dw3|f8 zTYs)+(GdCk?6-s|6F$b+DWETrJKt&yGFAkzXSL2Ogzw0EbZIxEp(N<&j+Ed z%dV5=E5x2;zVz~Xr>@<6y5Ns`sn5RP^FP^`B<`ah7DHVRa$Om+X`c-rn_0ku^)G+6%6`tcO$MJx<`}B2!PA{w0af4tR-|N&1}k;o-Sqa?33)bezOZ zc}M6@5ql6r%&B;3OPNR-rJmjy$^xCfIOn>4;AO7D)Iu4}C!4tW-i}~}S>_@r{MY=^ zF+^9vHdoxc_1e~_F|Q1kWcAiC!eAP=Q28Ig{M3IQ*IGWM4RVnzUCW@NMH+52%MVGn zhH%a)j^v6@d_4XG_of(U_eR-ZzWEKS=dmr#=()=bvOJ4itCupwssK&!_E!u`yjc=Li4*G z1WnPl7n`+R>0JBbn#_lvtms`%TgH!>afN99Q{}o_oTw(@w8-ZGY6{qs7&~$dubB z^Y@_c@f{W}z>V$_ z5CL(F?hvGrmhMud1f>N*3 zzs2NX$;a`}PGWp4BR}gq;gnYhEP~QyR95xNc9%OW)070{@Miv_h$hq6ID8Yi8x0Az z_RY!qptKE#@elG~-0Kp%QpYXU$R@ZJRJu#j7uZN$BjsZfdA@LxJw%&GFX^TBqW@s- z-BW8~>A`p|${3WXxZe6Cs0wJ+PkBHYx+{@mBwz%R+_CW&$7|cybD|Bny|0o3Qq1*( zV`*tgrCH%sQ#NKaISb%zS)$cp*ZJ@Xj3%}wzW=tBPc^kEJ_SRBXZgV*1yKqVwuU68 zt$b^q45su&QFvL=dxg#}_A2!eX~sMSl~YyM7wjFU6)kf`&lQoV%uX`kKE!m>IOdYk z+uAqA1|75j@fLIJ3k1a{reH3fl$@bnGVuz9|cFOshR9-h$o zit%gYNV&B!)LdOJM7FJucmO$xx5|ywsoQs5C@`w_}Qg(&Bsi1B=OBc6ZI;tc!KY0_eld$}!4rw4oziwx=)u>C3yM9#k@^RNcn~T1)>qM$9r6*_d zuOdk!GD`2{)_WvB55DAXU>(@Zk}2$=ZWRPQ#}Duqf^`0QwX>dpH=W1l8TaHk1{%3V zE4LVSw#E59b){Msy+&@%AGO2~%)k)zT+b%EL(z&B>00jrNWJ0=J6{jYOIkuLWpV7O zFkKEj)rWLZOLzCn{(Zifc(5lq>vsj%NXY?W^INzcswkTR!Hbm{jyKL%$V?~o>c zfAR%GYw^9y+@8Ups@qeU_*s$*y#dq)%v*P=K6sQ1XS5fN9>iWziCW;xcjERrWrN$? zw+F`uoo@NuH5g?0+r2}y{X;r~rwtr0T4xTxDW8Gm{2+1utSRrJCu?n!S$%1g%x?AU zScZPo`Cm~-IamMC!-vF6t(#kQ&pDKys9c^m$HZ*ESqZ)&rv0$!)BWhl$6aT+KUDvU zpOE@&x&Qa?=bMmiwW%?KQ2fEhJ=Nmgr>jpWCG66E>K8vUp8qHAe)j4^#>T&`_CNp8 z9kCuh9(z6;6A}LAesW~ke{eUJzZy|3_eezS-mct%E_|M*iUviN+&o|DBVo*PXSD196y7)H^-;I{*#dIh z5uCpWC-uU}fn{?`y{(3EY4mAh!HU6QW7vzI0~YRFoCq*VYP*BWhsiruIFJoA%fuB6 z$B`8&5|(nd8BFy*=N=i1;AC41cGu^Tea_ncYqnd6qkqfMsGZwqmpjNqn!K)Up!w{&z#ul7Xz-_bNTat> zS)}pQ!<`*I?T;7FlxU`R{MVucQh?@_c9G%#CU2Oh|aZuQ(B3dS&4@QglH-QRAjse*C`D6 zFf&c&(YY(FCB|EoNR9}*w>RL9B8K@3{Ce2aN9#0~!^{k;0*UmVWs&(3NE@;kmlU1G zX(b1*$UL`S=AU0C=?RP|$4kk{W)$x5YDttB?nw4;P+#jx<3P%TAnvlqXQR5=!L$x> zk{O)KZ!4xm8?qHiFjC7PpTzxw@W&UwZ+`8vMp^wG`X%m5TH~^T;PE0(rI*bRaTo^E-H&))2K_-dMTMcw5EwHxWUsx1ayMytvoA%c~O-ZK!5gQnP%$3ldO%kts*q zd$=pD$qnK!utqa=&;1;J`MB!6)&CCF#(Xc)13_)CBOjO$!-`V8PXAsfNS!iV5uT@> zg;~ANQ%KI_KZsTSu|;fSK#$sZP=Ed4^xcwIX3jCFAiVy<#55d(5tt* zKDTc!9+AXmDRij`W{~i)wb(j9z4Qzgj>!WWrH0>(iTqVLY*4t|;b|+Qchh^2d9>9e zV1y-$L-QwnPVySv%6sqoH+3#NmH}@ksa^AdO8am}P2A4kW;~lZD8bg`j?)lQ86UN3a zQ|wExS77VyT@g0Lt@gBv3VR#!L?nM8JaZ!0=<2Hs{xCMJLn(vvcB|+z-|14%*3PGa zWO0=uJH{~wRAIt!1$i~yX<9`8Heq{KE>`$EtKPcC+r z(t*;40n|lIj2O&Zr_n5O`sq3uQZg8d0*^iN*q*(Pc8eh-<~$bCu<|$@b#q) z{9(_2(a^qFVuv6I;3u4+@N@2m&QUa3_@?eMxb|91|nnCf@#cfnNOJBh`c3SGtNuL=M}Xo~+0 zM~^9Y82a2JFs!6oDgeh}f_W!fiX?5U^4N1Cj#f`*#pAF9>;cuWbF3W|lY`VmSz?#n z>48M&|AK!QK*|H4v8ogCy{Hbt02uVMBMWEc;=2|Sz}>b{?T4{RLn_vdV4-h{uRAo? zu&U>Lr2iKVorEdPJbSrsx4b+61e09Mxb}Uv8uq^tkuoMhqI_DgfR?L#pimA@{#W>o z9iz(&fr&e9tkk23%lsf~$vRk*vfXjes^tfZ!JN;V|0+o?|L^{}r>QCeHQcPt)1`{l zHW#iUK14vS>i+MU&DGmLOj57`-$qLiakP1MxhKCb{ue(bs9hToQ{E6XV`*vX0H;^3 z8uSuv6fGKhNPaM;mxWk5TKgfV)red&s!9WzdiS3tO?A$km|iXK+8EccJ;&RJB%{Rj z_@dEw{s-zL9m#g=1{ZXSJEb=Fyu+rHbPVjtCucUhcVRn1K)gR?pZg{J!OX>+@!`Gb zyO1d_Kg*NBez@C3oQoX`V5~jdP9#iz&6zR8t=t@iU2ld>2?uW+M@~Fv|LyoqyVt~` zPCK@#B=hLe<0#%~{XBJ-f*9qrcx?3v9nsrg(#7N&r?k11bO$Hf#7kU9$MMnLu>1Wu zvV1|vHK7d5#wbgw-p>SdOXBEfDL<*^zLMp=VkohmIqi1n7xV%^;$!;vTk9Rvk)d44 zMun+>DvqAEKDSEJK#u>Ap6ZF`=`S=>3QMOW-l&k?!-I(DIY{Ql1xug*Vf0uCVKg~3 z6rRnFdpU7^a`LR!?3K;#^`A#)!bY{>TaUgz-~OMw1nyz|)uXcEi>s)rz9Ke{k&y9m z`5*x+|IiD$BprR{T0=_)z&lcatU(V^pgq}ZGam9TNHgj?!ph($8+#$GQBm!9c#%K} z8{G3@8ZVO{peYFz2#r6^qH(J)Vk`fBr|kMBz`|AQB)6GmKrekR8_BF%>DLP9$?LGu zv_Q-tm+$j6cXpjp4;(Z)bJ4_5 zgN?Z$k&(h~W!WB8CFQz;T=$SrYEEK}7hc?B=s*-h9eLe%)}@}`iTYy%PeV54Qee=~ zgy$zvLrfx`(=>+`Dk8UFK^9CUmkDo$GC^M}Yyd0**jnyeux9Ck-cc3_@@Xd$7EL5i zOTMjT{wURpmZT&Ye56_07CKn9HZC|E^wSSY4LWV=X=*a+sRsPA34$>P)aRJ=&qLQh zPOQTivt)|`Qzk=LT11FS%e?#~K+<(U+-@eNVq8GpzG=JGez{#{rz*+ zxHpq}|86jp%SOuwufxLh{(x@xU%u=uA2(`N_-Y?IU4Q3+HcO;(EV`Vutk;v#)W{MMlKqy*j zDt0IObrYtm9aUzt)Aa1u?%{}nQrNk~zw=Xrw^MjBk~_y z{zqN-Rt6XC{QM@=<<)gueHgLTXm?W4Q}1X!hDDo))HVEZi7|%#iMfuPS%lNbG&G@ZbiL@TeUnV8CsMH}rb740 zcDgb&{1AI-xb-M5n75Z3d{#kzmt1|K@C4kKV61;3l5fPkgAQWGX#wrcSiyVLL779D zS6yld5VR%mH#I>zTm@i2!3W@FgKfD(g*$`VnRYA=A5OMNoSlm(Fh%R3aptK4v+2Xl6vNvC(jL_WV-*xjLtgALGWv7kje(2UI=E8qxZz9Vh`g*CYJe1UI+#Vs#LJNDf;Y@>=rc<1UyHA%$ zDY-!uQ;ByWNu;(;Z<5lIR-{SX`O`4^R-a@|TD|iVL9L#pcw4N|sz_@)9rHHhCrAmw z2v}WHL+oeE6JF9lQ{a(|0~Uqvyump1?*Nj}hU(06bc`250cq;Q9Ti;IVwLGJbggQa zStJNQMvKLsX-;Np6C_jKxe=7;+L;#|q)qy&+T$3O8Z+zdVlA~D7k52Oz z7WSB&#^EZ0Nn%$2HM}z+n`#2Xk{s6qPQocyA(NKh3h>S6 zx&=Y>P`68Bncc7$1S@jjBx_AGkcv!unuv)$phU1@t4lsoOPd0CDZS8!4HpaE3qFxvhT9w)5=wlP6EI zZeJd4KC=F}do3D$jrhxUyZbad!}5J{sCgJwMe(!W9x$}X9*ik4(7mR5fNoJm2g7zLqFPR}hI+z_i1@GD&8@9fJc*wo; z3;-m~+|gcg(5ZIHUrdfsg>#Y9=1-iw-N^>y`Pu9%Q*~GnSvn4V!V0>Y0v+@y7Sp$1 zEFNOfdR`eItdu%jDz$cxpA47omwKP+YPPF9p60#!u<_7qf`LYxgkkNImw*3&TKeL^ zwImNe6=>pZ6@Oll2>59^?FhLEx7>pfn6VCSrg|)46X|oL8A*n|t+KbCMecvY6k95! zFA3(6z+0^ zk%XR2(QvEP&jgabXT@LG)HHdbD!~-rC8-07H115i38%) zNmbe8&FY4c!0eM?B$8ATITs@zpEBX5!_g}ps{tm}&#ypotWkV(kB~|u1#^0vKZbrE zLsBSaLx`GO6?3xZS^|ym(qM(sS_V_HHC0{DJHtAX6W@*VQf*e$2^A9!K{PNQBUL%^ z&~Q9YxX@h737(D}8NbtZ3)}nU=0wkQ^YfCBf^>oG72n(5Km5bCfA;{K=TJs& zHR^*y)b*b|1=g4b<)K5%qdhHw%4eTweE4H*7a9Pt?aRns1vW@DN$NDMJMXnxeb1^_ zd+;hJAK&ZHtNq(8IVwJHso|9_SGw56dJG%z@aTPRq)rBr#D<(Uy+9un}n z`)rkS?RY@WR{9==k1^C327h9N;I4m?Fw~WQJLNN_us|t7Q*-O)rUW4eF4?v zn?5gIDw3>5>{<89pnHEZrBxjUCsWA;n~rCVQ6$&M&dWrs&A|#Ws-|x=*_bE**>TkY zv8V$Jas9yUj(o~-!R31|9hB26;mbjwRM!uSgF0RPxO4=sT8StnBR(kK8&>ho*f!(o z=$#;=Cb0`T%t;vw(#4j-=&2+nGts&XHsP8;4pn-_elir(puCvL3I#g&t2dL~Q#>2= z3wu1LTs3X};6^&R{phy;G;u3DmeiPV$dH)H22HIxl!#qWd&&mbh2k{*6I-eEV>`#J zpS3z;u?fNHHu~{SU@{LiVX@$CQ5*|HzYrZ&;-@lsbhQ&|v_+HF;*mwNFk)%~)+wG1 zZs;lD+ zCw=1>lv(B*Wm4q$m`C2nzwHmCs|>MiT1%)ec2Sh#T-b@&4(d|hCOfidY9~8)Er*UE zTgkDwQMYgNE99y2eyDr?u_DpTM@|iop%iH8|CEKNk-sEy9M!jN&T9tp&~PLWuPCW%#9+ zCu6hvrQrpUWX)-7|8T0Wd*2tD@5xQ7Af5M2{Wl?xNZBfvBok2*%1HhS!=X|wrjHAx zwaoZnZ`17cX|BL@6cNZ!+0fV67>RHwlhJaSa4a{vFvZj;sClDL6sRcJ;Sm3tf)6Aj z)f&#?t@0VaEMAt1miSp32>g+#2K31_$7n2=v2@t9cQ_|`=xMflLqcEE-7aCx)cSYR zM>f#J^=LDZi5e->4r5>PE~Z`yw<{GN?MXduNia$?iAs$6O0>>%pZ@7rZH9`yHvA-q z8*vu?0>;t&um%RzdaY_c(2)c~p@eA1?^E<_lUGjo89g7+OEjTZmzc!4BKr~<3F0i3 z6k=isoUF_qk25Gpa@Q4KRhYQGysc|PVG#uSEJSEsNipMuu?;=Q7JLJujZb6|7UA@d z)eaym>Z_5-j~Fv&^laOu*gC7E`00S=e7Pv8I0H8hk7$jI3Fh+@9v@NImX>56HtzAj z26o~(+Aj@l8}~4S|7D&iNDgPrB%@KgD8JVr%6H|s>$XuM$8vrlsQK^FBI;0M!%n zTEQbv#Gp?udObMCc)Kn(`7)VeQlH8|Ho%rj{0L9Ap>HJ2#ie*sZ0QDo(# z-64IQ)XQg)Jsp|b6bWZ`g=Y;n5QC@i_qJD;W2dur?=@a5?H)M&ZLB_QaxD9-FN{bX2nktH5rps~Oria08EesVXhbrZd&plQfzdtfBI)ET)$^n^1^19ls z)miuCV||^`Sx3HFhfjEh=}Sc8>=8{#Z0(3|6=qs{s2KgnVZlH)N%>Zz+bxQ@mDh%CRLA9Buw;y_zzj>r4 zcz<^L6emxuFI^;}a(TVKvDI*?jD<`QYnKCSgu8p8qq~*C@n4J4mfBz{sEJUhijavk zmX=*fdt&5>r$~RoH**qghehD9mf;Qg{QYbBN&Yn~fjCBf>r19(`^tNG%GXQ>pGKrBN8_y&+CcBqo>%8{sZ)X(Lecm}-5}@AGTV|ivlb-LV%+&jR{ieNsCoFiI+fgSdXFLQ z+%J)XE~@Ebu?QAWlP@GD&GATmPkpDOMuS>*Ub+QFgi?3q{uUI*rlBgE#?o`MZ^Dv( zs-`|6^(^2)&sM8oLRMXVcQ>(Wti7}{E!B_Y-wk8qQN(U+ z_>*gGqX-G_p!e}e4bP(DpinjPDZU5Ocd`)Ua4QYX8F0o$W9m)SP>xm?8TJrSWko*Vf z#<}Ilsslk=d~q*&AMLJWaTMoN&IL3;PhrN^ij4J%!6R%_2ePqUXFy8g9HV}iDJ59Dy9O^Bs^L-J2BQuhN zj{g1o-Fv}y*A(368Gcq&i8u+iO-%otC{sYqStzu5z0~s|^MYAw)U&Dg+fWV%I=D#5 zFCpBx;G-vTV?S#)+(H2_ znIDUTh$PH%NFCYAUZ@UFy2L)CRo_zx=<}N0-T-aGJ}ueBN_cp8O;d-maoNM9@=cDO z-BVMtu=f7-4Rm3U?AaS;#0vw(=7b)g5*sC zxhLF|T8en^7wF2Xbl#A49fXoP{Q#(GG;`fLF@}v&v~XV5xKV$Wv{^OEs3@j6eM0pq zTv;)x&a0xW&)2E=8_^FxoVe4J;5{pK8xHEB`P_2NMJx}>q&AqFT%U3RX6(6R1xM+z zgqqmn?7U{OI!>mmysGMD;aLaOncWsFNtD_n#ByL0PIwtoOj?jLVyv7W$_ei;sjF{7 z*1R*#9ArYtbK_5dAPSf7d;eCco?A?qRhO&QX+-#84RMwb}V$GS6RW^Uo+=zxN#cIgEJ- z{^f9{R*qjVrQ}v0}`d+)bVcy$4Wz7JnFVul_`5y7z-mo@naYw=PX}xm~ zjm+ht-p`)ZM1a+6P2No) zeLK2%wGvSbRaOCkyX<3>9jR0tn(!Av0Kuxc_!xey^@yM> zou>3}>UX$;Y=|H6@t$d{3CM~nsmjy(bh(V9Ql@xc&MS$kE2`q^N@qHN--!*N6G?bY)AusO>y7zyg z^c5*l{x^WlvXOJsqP-D1HOrJ6|obUZ&z zrLqd&%6^H5a8Ld#Gf{eY!zf?@4S10!kHAVAdBLSo%7MsV7Pi1ckm@vOnUu$#_CdcT zd_k;zaUuBK26r0KF-N5Xbjd0>7oA<*TNJ86KfTHpZ6mKbc#a8{1l4(>X~O6=5oPIL zp0X8|xt5Y?j^IA@UU<(?arF8g<-i9nGKW1~Aw-Wcw0xJ=rVH$MS^6K6`pf^8T3NRu z*+p55=!(C6iSSXP7|v?$Czd|<&RTFQcw0|8cJY%Txn9T&AoLZJo0H|DTciEXynKj+ zTay%rVv0Y#YlgBYi-WuT(dE~+#tB(GMJCehNk$h3WvXAj+8D@OukO*{{!|3evlUvZ zNp8jqxrLKy0z&#R*r^sC_0gr|fq~XPA1BS^9I{^=8!k0wGORcmtcdKpQWYtYIy#*yK{eMel69u_bG*d8T zw@=7n1zZ-Orf6X@u`yy;0G5ZyPflHsMiXVHy&)I)NfXnnwDBsq2L(BcGsQ}MxvEHO|E0Fav`jo3zn~!9o%sc^ z*5q=#)f|2JHVI-bUKBL6DDj1|D;W46ZjHss-#QH}#-Cp>C!mST9+V0|JjU>8fV$|I zJu2$C%uVvUKHn=3Acr@;s6sKjlo(i`6(*ETHn7*6l@%laMlx)ye2#(dyR@`H*I4jP z9j6N2yOD0OiXgw7ivwURYoLJ*s~3*J@3FXiri#jCFjS7gl83m&0q{058*gG{Le5WP z0-T!3dICY!G)!uyYi)uW z9UaRUQJcuJYzI$+2h|rydQi%I8b;gogSa?;g+tGFQ(C7DIXhHzd4LQtuj1}ALm^?h z82dz6;Q=exeM^b9?7esr6||7>(^d{zl&H2($4m=_nQ*+TT6wgeMDGu*5@6xpH$Eys z#*)1iP}e!$NwyyKXs6M8R-jBcdVu+@fK*d=c?e8iqfjlb*Rh;z8P%Q4enO+!K$KtUyG@;R{sp6# zuj#s*4Dc4Ev7lCV$4FT($kjtZK4`VXsvX5CjpEQEVCDl2FW4Hb9;-XV!DoR#mN8 z=AfVEwYC?X$%QmQo!GIbPo;)Ek%ZMBF#l#Sk<@$gLT}N_)@(rc)f84P)Y8GfacD#E zXPabrd&#=PMd1TGjzyWpm^-`E(Pwu(?3g?;r7eE|lbEYuOD+P2U>Spf>(xt>qTGpfx}p z2#RAeQ7^&QX1ujy~Ht@V0sdq^6*GgLb%+d?Q5dn5DJ1G zkv;lu7t&k)uHKy~ra`j6xgZX^9lh3izwX9yTLabQ)2VFg788e z*(MGYonZQ+Z9MUw)dO|K)-q7uNsms2$=k+tx^P>n-54cwp?(Z$y^Rz}8+p+YBp zCrE(=hT+_vM4+G_V++YQPSf|Y>K#BFiQwZ@9*PT^0qkeK-ZB>Exak%i=Ku)dxY{f=b39L5t5+uab?8>4PMfUV@0@A%l!5GNzO6)B4 zaA!D_vEE>p(2YASBD=iMd8dI{Kg)FB?9Elb z_3MX3lDFk**WfaAg?)=v8Y;BRl8U{&BQEtn6)FZ+#GkIq06#1$PJ){UfF(GK(OUiI zN1}UM?IRf0(JwYx_dMpEeQuGF-(Py#eJ3$;iIcfOJ+jYnU`>?fNbDR}lBs%!Kn1o= z_O8bAkzpI3=g69o+66@$u-S}LV%!jMahmbd4h^J2ra9_aDC1@g|LZOuS3@E*HGj0R zsi9q;pbs+wsey|Ap2Q1*5BxvCIEoMOl*9}c49Vd~D`zrUQ*@1)kxPhjmT;Yurt(`8 zB^eSwIPUqZq^pYXCSoXkgVDea$%=#EyQr6mS5mn0v$ylRC5y*fq4Y17orZZF7$z(^ zf_R&fv;?@I7I)ov?^i3EL@HzOO$>PxFl{m?KT%Ty_F@8SL!K{`9s7&V;15TBEKia4 z+Hu5LO_0WnftYq$E*fTerhSi08^-7H^rn&yd`S`z z+*Ehc}f<2xdjiO!;8Re?oY6g3KCbYaH_(~GILa!=OV%R zjyP^KDsfH4?rg-rq-C44vKXl#GcHblA0$69iur{c>4aS=mZ~VS>0XE* z1RNRy6bu_4xGpZHdEW8kwB@Od*W(6Vab)*5&LRf|mI1c01H{E`wT`BV=~%X9$$C-q zak*c9y%rLlyFAh}tfa^osNMX#T4U+l`qAb_Aysx%;-G2`8BsF?i(xWQZR$-|1fjcC zgmZlZzBpcWF7z?yIr`j~i!Nl*oRgi41)FPp>`?glZ)7XTxClQ4E8Z zXJ+}gLadyBg9R*XZ)mhjE3^!;z>1#Q@}2ZzO-_23!PJtgT_bpE>fW$yYU*2LTdWfS zL;xZx24*UqS|PkHEDvOHIMYmaYiSZruC!ssgut6DaO<8$Nc^d$iV1QeVPTZ&@%4)e zCK61d42?_bj~<$GWiWbql*la!v@G=k1z!}+Ac^iGaf~9S;~e0&9PeA|M=k1r^-Y3d z^b`O%4o5+R&MT|4%awC~B?NLf5iz*0x~IkK^n?9beN6_WYr^LxROHD;Ym=g?PqtX8 zT!1)#W}4?G14zkHE0c)Ys+4|eQEMg%gCNn^hnytg^gVkPJ|%58F{$3oFv!iziqgV( zmMrj+B4KcZ_v}CNge4BJOOq2^SAjHQ1k-Yq{K9I$&nT@cc zBGN?W_0!^>pu5vzL!M4pbjy!|&WzMUXW~fi$(Z1eXvUB`T8f^<8G&q{nAs0y6o&Xs zu)Q#FFv0gwc+?AgWO(ScH21=N4!xX3@OK3OEToxyB<9^q%g5lF7;OXjfrNwx12*6f z)`zb*_VWoshY)(nAG*RDcT)}q{1HpW!x9M1w&XFWXPp+qnb69bJ4puBgEWk*v^3zQ zKrtHDDl)_$Ec*VKL)MK`6WbhCny=;^yX4vp_m{!9!P z(x`kO2T+F(d@R?@)W`lwxc4LR+NeGr;)@h6N(Qr%-H&GC8cC{-XQxG_W!t%)6a7>2 z88TGLF^OMb41g1Rl@S*;@M!6WzKq^n(UV8@KUyuv_621_$uWhJT|d^?QT&sR_sFrY zj{(LuCgGmt1YqnZN0{XexX0u(iv!~~A?ekGb2XxxVtQiiewtv!6csqGp4A~;6QU4cXo$~q=H zui_cIr5VoVXlTF(=+-dDpPYs17?A3)Gfugl!WSaS?kX)yni+obk~=x#o;~NS7e6me zib-ZUjb})jCEUKacl%n=j#1O!ZGRhok!3Q1r6f=e zUU6rq@xDe1aY!UOKs8<4)bc{Dx(EH9P^Oug#^{)lH7swglWltL?~gA$rI5ROIr8gMzu(@(=(sGZ<7!~)F+0S9FfQx09_$){ zEWdjs=>_#TzjAgBSd)`#F62MHB`VQ*{r(&TpEmip{e5sVDXuct!VIf(KrGx$nq>=hZw8l_)h*u$ILn6aUi{ zEM&#(0M%8~M#)Mr$1P&0T9-BiF|XsQOx1Z()~?nUrn^PT<#(h4KbP_NU^FK0*Dz=( zBnK^5EuBFMIV_e6-1S@&<2jRkW~F_O!+gIHBpK)(X+y={plIdOXN-NY6kO_~q#g2# z)@ErG2cMEXd>NCc-PpOv1w|BeQP_Wjk5sEgCg}swq(pj&W0cBVWUt!pg@YC5B)ZC^ z9QkAI`PLq-(5^xuEmg?6Am0{V&wZvhL9)y7#qqvxr8#(W6@!i~Uv)}RG9i>ZabLS0 zP%9p-l)Yi@?JlO(3gEw2#8}+d8xHRg>zTzd>wCMuW-?Qyp@j7d4v|Z<=*Cf)4GO@K ztN;K%u2yZn^PO(JeZ!~mP}H;5i)AjWdvwm&`>nA4Ce`Ft3R3kKTtW~1;haxZHd zl}(RH>S6fD=+(G$curugdLo__?2D8HV1o3s1lpY%7k96z;hA(#Bo36L`MeS027atF zjG*OF#uz%q&^WE{_$p=+dLePzMMdCzKmMO3eRp9?d7ReRr=cU1W0EHu2%6B;XL^iP zm)VAz%-C|~F`UQMAcC|t>vW|Sf$g6oYJ0ut>$$ERHdA0Vw`9>&g*x0i(8mTIa3nBO z_a5K=+!cWCG1OMNAK@CVjH@!y>a+)YwkLvkHd;V9+r7tmqSZs|zprGHfAutvVElIT z+EnaMr?QoRe>R?&5*)%>{eisJt_n6zLw?lVld;^WM88t=ST(4%jS0-E1?#}6Va`U7 z8c281qxgQeYkzWQk+^_Elge%Bsw20o5(qc_+>-GT>VH0x(AxC~gxYP0kJ zph-3@og9%srfJ=VK^U40vuj)FejUy_%`^aAN+txJ8S;jfGva_VGzs+=wdU*$} zNPWz{dK#OMK%pY$COJUq^JtkUdFi$= z@KP(d=o6}7xJXjPHF5dtz&C43jwDx364GWd-%zHMYdk3B^(4)ClIzzPG-iR@yI}ZO z{il-;;!oM*ZcaH;yw@nmKNM0ICqhYDyj%|<19tfL1X7#}@e{kDzLABA1}d;bzjYV# z2F($(b^kW(~(MpvbjbkgitYm=`xojJXul=$^(lrE-k+Ss>f$?FMUq> zGR86iiy-%~giXL6kGM5Sm@I-z5~+b+>iwDNtaatY2x56xL4Mv=iH&rCFfu--d>2_M z#;H0L(JMJBR$w1z-0+MT6lK;IJP^<5XUCAbuZcSu#rEYR%M`od~WnGvK5oQ+#qaGdHx3 zoF-U*oMV#Q9SC|#`b9SmJqJ}WKXSNWl&hZ#h z*jq7qvdr6|0Z-?Iq=3_HwsyHfQnt@B#CSMBHrCa}94&8_s4Lbj@$-I_-#mRoVQAO> ze>q<~8zxx?mTo1BlZ@+q>j>dNgcB&HL zTnkdo)DLBS*Pb;Nur+hrYPnJnG5T(~>7K~`1Z&7lb}w#i>5b({GIx$`9!|3Os~L(h zi_2^o8h1C=ntTvrfj2$UXoZ_AdsxdeZsDz_t^!3o=O52rL5+Jany%SAozRHb}b8GboutEU{Df!y#FlasaHk=+v_;jQDQZA?YLi<12>; zg_tbUfG~;$hUc1fdApSUjsqDK<;)nz8uW_Q%KvRP*hB@*s^Mc;6Rj1d0wXi1pks*-SYtCfk7)|>2k5-6@aQ~6v+CH?&2Rj1O?Ms6t zGGZrY>UJisQ|!ie{X#fBcsN1hnQ~wfQVZQ00q*=zH;V7oRH6Cja4I?#^3NaKXzAt) z(RYY;$6TWA0XtW}meVA4uq`cGbu`1U5kmD;|w z{oCOal|be>!2p-PhGi>?!@cZx)V?RG>tnmzsS%d7ujBiHGmo3P(OH2dGn=GHjBPTrgdk|F+#{CEEP~u z1rN=k3Q4FAPV_t{2eJfxg)H36&GZJE+pp5hcIV^rT| z)q^WEy>z^5aLivE)lhc=<4}Qg{()v^j7nw1Tk?YRgf_G3eDVvgazyto(3seVJ*ALr z$S_5gbkAJ(A?*f=O8{L(0+N}K5vBQPL9+||)cE7^A^kSRE3D=dzQB4W+XHdF=X@%U ze3R7F#$JJYN%@RQCBgZRL)$A-LTu>_2YL2fZ|U62r9$_J2P@5D0auv#2W7;VpYp4- zN%sT&b}BQlhm~)nW<-A}OZXi0UnOrjN{VnouYJEtFV-uPT`5cS(uR5JC9ixH#_~Y>F2nDkm7} zTCkKRc$b7%+ejfWKSd5QuqyokBF^>t-^V_Iu|3MqW2m=w-{}l?_mc5LVnAF5VI)BO z<6p~{=I*D#wVC1f+HWH_zpJ$0^(2Vz{Z^v-Nd3D}i{<1ZC}idw(o-q&pG_ibBAsH)aj*yaHwVygGpR1jk3k{v_b9zw4jWw$F~T zu1frs{d>H+r}j3|S)^j0biP96ETs1)`1fM~jbX*Y&*3k1!=&mJJyO$= z3+{;$(HgixPY&G#uWQNcy)EIZv8Xd?AwizP^o3uxmF5w9QhSTuucX#(Wshgjdp!Yt zO5rz`nOOoKH?DeqtfnTMoqg|SrqWlo>wcDK48=&xWM}e21q2b8guG-dp*?S#U zbI}0s4SG^LDZBMVD$JTASjSpwWiw$lqBd)N>_V#KuqlX(bRfyHS%x2~qWi3K@F1#W zjSZv1NYjb__4PjlSIVqj;xml~S66%N1cM0H4GM@2!fx=o;Te81_fz;K=QJ{jzK$c% zae^TI3TUgE5j}gEltrOy3*JwcaSbm#U4MRcJsg zlNhX_7)cEcI679qJ>01YWhS3%c}e~~1GB3G=&@`}?*+acHO_}5q}1?hug=j+5l6@t zIdxBbC(aIp(57$mo_?n|k2MXJ|M3%qXCXoZ02J8f&nogFMM`oBpST!IA&@S*B^No- zlQF!KAk0{=DbrlAZ**ua#$xqG=4AL)@%U0F00c>De6Pg)c@bx!BQPKP@dMBp*H2Vv zb2%Lne31$cjCHF^^B?rG^(lC_u^Hsam$P3=I9v6;8RP9ZIz8|TKKHUC$sAi0)T|-6 zX9PN26u8x4u_WFFFFt`!NSLX257%K?;1`R=k9k|7eq`SDE!g=y8dZr344$5Bka?uE zuCFsmuYTs7{);LhDQo70%8p$AvbU$JmXvzdyzxQ%!v7ah0IvUJTO!JuSx{4uRgS8% zu0lv7$d>x|<>$VB{{HKxAoKpW+~NATCJA~jajazVcr?Eh=;O_2j!8N$MJHg!v1WTqlIp4i=pJ#r| z{G6hD?^U(lw^nVhuC@8I{O1P%T~<;?5&!`K0gwj&0sj03V2L@K8M&I7l6zRWT9Ql2 zC@B9~1Bd~jAR*sAV1WjIVBle3prK(9;oxB5kr9!Rkr0uPP*5?^QBW~Zk&w`F(J`>F zad2>u(eUtbvGFmnaj@Tx&@c!vFbLQvNGRC<&+?}ifB_G|1@#>Y0s{bv0Re>p z@uwd^0)PO3Lj!Nae+euc6bu9;G&};hn+V+TKYIa?Fi_C25O9B10mx9`PIM@A0082t z@W1H)w+&gPMt=-LZ;AEl<8^B{h!c+KWrBvom~)@&7wFP=N{K>H;`*oxeT2 z>(z6X{Q)Nr1H@^s(Fq!hR{Ha@*S7uaCl^L_e9#Qig^}2u1P--_hn}>b$hAzMh~A>QnR-&K#Mmzv4a- z+$HoO)*jpoBs!AV=+fC|^bvQBMo(@p)&HNzh0ntmAe_^%i;-ELhw|}6mK-0H81ZDs zITm0_V11)NMs6NHExWkgHx|aQ6rZ1GDXfilq+)zD)px~0 zA=CHiR0vdDl2Ef2f^@mv-jOAx5m>#3ZzLF;_K#=v`}wIJ=B=ksK#wi>?TshwXC}zP z)si8HL6Buv@YQdjobss>|94fZOpBQ@Qnd=+@3KS1+^pC9-#h>ydJcp{{%L4o*U!`o z7kR!ZU|CAvb$15v@xqb+AkI=${MgeoA{8&{YS#_!gNuE9Ft1j3>fZzHR-F2*YR=}5 z!U4b5?|bO3->0`1*V#O2W7NSW?F+f|J8(0?rq@(=an^`{nP9=*))4B-Rsz6&hwT?G zz7WbYt5{s?K~6i2v8pel*s4m^1)g!7f=0D35}P*V|8fAZl!7v--9Lykp%VO26(NRs z`7^P#Kd@sdzx6XHq<44_i!AkV&lWT_vN{}cPBHk7%Jvzz1y&z>q;dVuS+2^o+VCz& zkx5bHGMRATE(gq78EmQh8vb<;nZgLy+&%^%tkQ4$o_R{)`p_wO2LN1NCdh>|iWTg0 zx9j|i1P8(|J?;;HUuwB~Z0Km^3h}g9H`+{;q6fI~Ct7iF_gB8TMAUT;U9cK~m^u6W zX{dw4Y@%pMauH(czL8~;uc^!Cvwe=!>{Xf>atr{Ht;XVxhR137ZzNEGdbR<8f}@jY zlbSvRfAH~1cWivJ7yax#`4<2HbW0&n#GYBdMw+mskSZd5pZqyd)Hsosu*EObQ(@Qd zyc_wTv)Eb`-Z$6&v-8LiNPCwWFY-oyNAlZc%WTXaKzJc=>{9N%fvaU}^xo9BvfUw5 zhUxJK0OL&8!;Wm4+wcty7R2`SQ$|JaGN|S*+j}ne44v%p7IsEDWe@bsC>U}E3iEINf$>b`f@y$con0f8gD~$N&CqIG&*FT zjAb%@%yy>Jrn#t5w8&8=9*^lNE%L@MwB`Hm8^a0!SpBT@P1HZ+GogxUTwD^OX*m!g z-335YMBA_j9({9s!-9pejWoGr{~5VHXmBy!%1Mf@uKeeIF8}~yGml)-={Yywv+SQ(>=bq|0oH ztBVykU)x)luY*1>ax!6bZ*<6nt;5bHy;1-`NX_?m3h6@1UU~avw!K9)0O0vD!gu&P zirwq)IN($4a=Jrlx@5`cJYm{}^z7*exC3IluTJ-NLl811zsuVp`;y1?U-UI0rlKh{ zq9^6jccES2iIn=%a*!Bp6^z-KH0R}eJ6)ekMkG>;2vi5$n2*jHZYF_ww~zER;=^xr zL<{E_p&D`k07Y1++Bf<;?tG4M0{}q!nT`z{5V!Q-As|$oJ2Rhdv$ifZ{~9bgZ4F(s zP@3njbN?DVClKfaAaPO@nL*uXxJYD@LRt3Fugpq|Q~0K@?~%?|rk9lfS2imf^Bdhi zj+FOuSCZl1m^io#Qo4Rjf1Mzc%IZ(Ok~+rzRY`3@j$*WZ!nJ=@!WSapu$?>8!N00t zkYOrG0L(-lVf&A6!u06$k4j5-4+h#ZSJ@M7(_FmG?`4Jm01^W8#4&e7<^JK6yDU9c zw}|}Zvp&8vgPS=N{&y4q8a+R$-bQV_T|NH@6a+p^2^};YOX8>70077&PJ6*(s$k1I z2Vl*1wy9%LFqxA;I@zYm=Ih^YLhYA?HR|0PfXb-FkO9;1tclD}D>d=Nk z4bsR`{Fi5vge{M+K^>vbhf({72tz_{Af6i)1D^%Kkg-vqa%Y}EI!E6tbpvn+wLmeeMBaw0+zkB$DqftkRXbL?7O@_jt+9QN;U+PXyiu58|oh}i9j9Lre1g|ez=T% zZ*u3u?z1B3a!EsVyOsIP1yk z;C~J^*9QmNQysAR@9BsvHMHX7YZ5`ba0C$Zy@|~f&Krt_0Lrp%ncUg3|HJ=h!Al`N zeFkr?pp|twh=d)XcNh#l7{G1^F)c*dua^cFscHHpmWe$3oLM4Bw3vmj{hp8-s&#;ZW%Mq zU74x=|JVeVZx%BzRjuwiVub%%;DE$(k-5QU^WmF5FJKHBv9nGhndDmMi7P#%s1gG2 z8xOnsCtUSZ!dnw8rlse0ow|nqv;okf7Py(dyN0purKM>K3X|EtS#Kb9P+U@72cb7gZJ2OUp9%Vo59ST7YY%u4fC7n8w!S_T_Srf?k@pgd*l~tE@t?z z#wO|-L$WDRVHfJ)vvFbR&}?)6KXVDYPTZ)F7^TlO*5cnSDBniFPgxY)sEsY{rRPu4p}=6F;B1+HkY(J~b?g6$*E%nIGVh5v?dV@8$gEi( zM%`=Ey{F#{8G0&uBnCL?j{oU3RZb!hVJLs?AOyK?I3VS?r)&uV+`Mc0+D~eZ+=*kX z+S{tKZMX3!gT)P*zDT~&U>pPqZ7#FjJ^%WkYD+N?QM(uP|EoewU%)E}ooi3HtxnkG zfArR2OiXc8{a?kq7)$c5J#F#GiG3j?atf7Q)I`2{PKl-lJ z4b%KMF=T|&(%OrCqoEOquV2jyh5xe=0Eoq$rWUsyI=u#E8w%%GyKb zH-=o98h>#+4QkVng!o$FzS<71#+%s5#H;)zfKT$wD9i+ko{^qmIKUoQ6&u$GX{Zas zf9r=#Un!q(>i2(Z11!1DF2e1%Z14Wj01*C<5|<*nHO#dDwn2R=mYZl9@xMLbCBz{W zbm1B5p=#aynJXV3FCQQH=fe?bwBtw#;UCXXqbl5b4WXa2{-JQD-kUdUOhm-|a|(e? zyuv2lg)lcaZ#TjJ7S`CCPtFkFK;g*upaN_80|}Hfb`+(%-w=eo`Bm#Pt1iw07atbh zo}&PaEXJrInmgonmDY!!d~X)8Kmj$1f7SZ`)BewbOgJN<-#aSo>m7cKb}dJ0bct%- z^xl~VXQ59ZUfFk^A8$ZJ<7O8Z?eBFljWj<=f1jofH7j(El??-+dWhRPZDdfB?it2f zxo|3NSopYJ<$pW<$NB$UL*$W%sG1sc!5*!|xlDp$RATS4UAir}hGKuLVz_*{p*DQO zqviapmwtCvzqX|FtR+C`OeFLf*6suKmFvAw$HNS9SBI{%pe}H}9kOVCIr7Jt%kr_k z@BbX}iT9GQ!;CZ!py2+ExFz#{Wn10bFh2 z17Ab15CAwhNLWa4Q3f161SGg#1Pg#e$H1gu6#>_UaLL)Y@i-~jIk-M5Q`1n1(n=UQ z`h#mR@ZdrX1PtUKz>x$FCA9}A+}@0ZorQHanGWC7Ok)bwDVz8ZqA-B9+G4u@9Luh* z>Vi*<@|!)@AHY758?SSMxc<7{a9G~+@$5%Vq!Tv(yd4w~aZKkl;~3IHg(2(NCj4K9 zL^on_OY|!+-@9D*x$VZRZQ5|%hu+yvEQ;7Ee1u_Em|?5z)nu+L7gk`jMxxHDYpu0I zpx(P5gr=~wZB}jM(N}KZ;!R)g;Z&`y7x>J{jfIi~Rl0c+e;LIvW@jia@MzO-r8IV^kW&$|2oxA@2q2E{ebwTD#b-I*|{JTG1X^7 zNnVFP9JHpg!LJrKS}yEtS3fq3hI6yWE+OjIlGomP(UE)Y9dC6VWZ7X zW%2b3yY0@i#*pg@Pt+j_oleS^xNEJlyP)g1$@W{cqj5tD(~IYFDt8~Tegz8F7&*%v z6^+|bnGU@$dD0&INo}p0GA2tdK}k03FouNTAqNyX)a_ZfG9E?($l(qr^5!s-z%4BO z0&eF`4or5K#882|Tw2OvNQ%RV_l6>~*5l=yIuiH`MPxJNRaMDKSug`aG)?*%oT(r1 zlI};t0T;#-MR)mIz=ojJWjmLz4+8e8sFK$%tIDZyz6El(5s+u1=yQ%PrXmALl&7M|Xl5B4Wq6Vr53OeJ9`Ob~EBWjkV*q^ybvUH#2|vml zz09hYG~yvC)K~FZnOR6UPF8l3Jh$yExJ6mW#@8CB^V;s9H;Be>5s6t5vD*YHKnE`CI419-DdKy>0E=atBq>+ajfu1JUsg;7+j;j!k{T7l2nWq{eT>zhaAf!G zcr!@bjr4|G+=?B?^zJ3B-N^44Iu0PMI2K-v|H&5nFOx@Q@dcBiCCjxy^3?C zT9_Gu3kj#ht+$z-w8pz)1iIMC7s@e{83BamMg}UvSZg-_BB~m~^!`te?$(keD1z>6 z=LJM3Daj6qqg-5x!lmYRU(RRsiWcAilqzMiWt3CX$ItE}2R{PXbiE6ht5;y?GoB{qcnz-oPXj z1r$jC-V+aBL$1TEsyA!VrLaw+6t(jv2fqMUCr73^nmV|wFOw~3_w-#*Aeoip8vaOg z9GzkfbcMGhv{0vFrBfBMx3fv0r6=D(Xh3k&*>H+uBV6!I=Ue>zTgL5<=o1q<9iBczy9+u# zMT#IpM_H%+lwS#7!_hj;NsccOxoR?QJzjc6oEp0KBT?F0lcYJgf7aL4MIhtj2%u`J z`kEfB*5Z=Ho^OE$G3Oz!5SX-_GKtj5?k+VETv3?a-1D$9*d`EF2xn)H-i|a8zw7#Q zNgVMRFDu5@eM;F=FKpwIv;x6nn+p59pv?v*)bbR7g{We`*sGC~g9P;A+lNcFPMGdn z%t^qBaF2#Zkka?-r6En4T3Zl@ZPCwQJ%k>vxJlzZ4YNh$GA1u{<}$w>Fut&Fi)$_$6jgXkY_k?$K<6L3R&Jh+f8|~6ulP9pt@DkZTX?E(@z#N zpdi6vXHl=27GxrB@IA(UJxb-LES?{Ct>0|>>`HMv)tEsSq zPajo=RXK&jzY;NjA%*$Ml&D)i1|!S=Jy8Rb>knXABm-2!ZE&>#!sZbP$0bM(+c;Ci z5{1RimyXfxUY$)Bu->5V_$pbCp)xwt$Wa!hl{=idBp>S~!;qFR^+?2wMu{o^#Pi)k za}{U$e!(HewoujeV;hVf)n?!953Tl*m0a_Tib6G7jjFgBQP#)=>+@T8gzvGOYnhhN zihVWF^9UW^0_)DzUJD(#`-xIW#g>yVqZ8%C)8jkli}!e+y_5#{WfWI?81ayUwD}37 zO=%GD)w9&`G;Z%`U!Gv+z{}_>K7Jtej z`X=0&sT(qMA@_SR+U`ivuBAO0HR|(Bp^s{TqiPncJkT&y@-Z9;&jXc28n%U-gaJ_* z((bYHgr{%WH`*9$n;9Nsw2_U<1jA`HX)UjTLd9W$w<`?BKQ}CktL^ml= zz+beoAL3G~$DOD4!qvTGkM=V=RNA9>YHyEP#q+1O$7a~))w!4S=9W}ytwcyX=Lz` z)f+0AvU0Lk)D_H(c0gf?jtX6guQqn&i$Q0@X7RrKXKp&P+_v>w@DpAgN1BD(cabty zOtl-!-Nde?r*_WwlOXwqHPLStJQ|U?Cl5uo>@T;!b;2G_1J27=i3~x`e*ld|PdY8< zxf-V?2Hau9c)xb9}Lcr#SST01p1q z&wMnCnJ>|{Rc*G0M)X|y3RN5E>)*RE5k>16ca^=gP;m$!tE^e8ha@VF8mtici~j&l z)o6XKgQlvK(|(p?2{($Gq9#(F0XGA^RsA>(>@>pW-tCmKKgMlu0X2Y0*FDf2*F(HeaY+Mji|7uF^fr&wgJy zTH56yi?nRWXI4bgtLoXHvCkV8Z>fxa2u6c}IuF$HJa zF_YH0kiZnhj1>SOY(8aFN4;#nyWOm` zrZvK5pqW9Mryxycl*e-91c)Ne5i%RH!sU-GnJHkx=i$1+>W4ZTW@P4bqaG>)L3zMb zAAj~qYJL}u0PSd2C`2V{Y9ax2Fw!BTnp=}Wdka?b-?b7j(iO;VwW@Y;6uQD#FNWt} z@DLQe6Hjp}Fo<0DV=Fio-=({ecv7*gP>2z-nV=N+jKr3RX;W>`$6Ee2^5s(eX!?gP ziCa>3NO*vQOQ-Rjhf3G6CdK853h;C*ln!b^)SQ>7R zI(NU$^Fy@7ymP+H?IEE0*dvwB&S7u2<8OGam`V2IW`j%S1cdo zygjwIBazoMIuB)Lwky8Xm{>NZv6*MsB$F%~vY&|>lh$Ga<@9Snrwf;+LuWykVXtl- zr)&XO#WjG%P}UN)#zWX2SIN2ugYaH6v1(+&mg5F^N-2e)FikeVuef1hPDl#TTti!OlLHKo!_=c5Gp>{1yuj$nh#BP6 zd|t{wc9Es&in1A0v9I+l>tC-9X?OesC^}I4{h`7Fhd7NF4)$zHm1WO?d)e-pPDW+h zaBr!>$=Kw>Nt5cnd2t0cHu=K9BJ45xk36?2R>49c_RNcRit6qKi`s=(B3{RG`nWc| zz|68Zn2)Y){9QdkXm%QxYkWz{E1!C%_WHUO<$K{Z#oS7``vsOr<4bN7BgH)7Uv<_4 zJrLUD@*KCh%Lty5`Ovp#GFFSOr&sFLTRzM?Z!#`(hB|B**Sdr(_H`Ae+6C93F6ymx z@qCKUC9?36qqg{LJ}Be4KxJFCdH7vmjk>aG#pID@FR@C}12+r*SzTD@4?tgocIN~I z=c6e|G5%6=>18OxrWNXQjFM(^(7}Xb+g+mLmfP%#(R2Rtpxqj>g}r?>`8C|f5&a#M zkNd4{T2FRsuj-}tziOnxlcB$^yloWFP~AqWc`oDmL${)rf%h@`ja#DmIc6{ub+G$G zg}GR-JhJ5y+I%fygN&ucnBiD4x;q*V61{p?EDE=iD310DR}X?3n@7tXyNCED2t#Vr z@Ah$IDD!i`1E`_BxOT0cVNm|0eLov37rT9|?l@5{pMFB-n`!gzTm=M$PcGNim*M>0 zgl%TD^&+k@*^dljjv)?D(Y&RA#g)rRYB`?zqi~YaT!rn;wYwKh4s_tL2D3N!F12`^ z--gqo34}<^oYsZm{(6)6x$4)7wpGGV^GyOhX-KvL(ehciv)1N$=xI|{;!f;z(buhJ zdAfIQqZ$~X7!y6IocK|`{(zlR`1%vvSHk8Yx$~-55O7qgCk$`MX~F=aT%{me#U?<- zB1}Dh7JH6CVyG6fAXQ78e9f9zc@4qfH5z@V03PkzL5HfMJ!cNNvWQ#S?wdfDMT*wQh;%9Wj)=>5Atgce=}_xO z6^bl8cuZM13qt^otr_VbfN-|wdL656j4Y|OO9Qi_dvM%!?YB7wsIs(gh_jbT{WLG+ zgRV$|LC-8Mfyw4QI8-}Tc-q`Y=_KQ8!K&$DjG#e9WT@uF{bzH-%<`D=&DZC||BT44xxW?e3cYMF*` zD$_V1phFHf{PVN!TV(|UTuOn4hJt~IfQEp1D+_@uD*$L1a9M>-1RaZ=oRamU3N{WE zhp3^E6OdCmAg_*E%rW-rpUMjO?U)Y`e*oPTPAET#L{ET6w;c?%IYq427mu_;r);D@ zQ(r_XIuD>}>t5pE%WJEgLpJR;gAFcL!tRT1=KB_SGLJ_Q!|R1QO%lILUy}FX@aT+y zz8YJ#2Dsu=Baah|I3@FneRbg^dL7|Vhv(IvM3FSjE=??L+o`SmM8_cEJLnohqn{=; zgEEUQY!u@z=OvaHGWD@RUY3u^`!!5QTWj!+yHCND?#qhZjM>-B;+sM4h9G8z3QT$a zlM)q27g9YUCp%(kHX2@9)g0yL@CtV2Y@p9}vc^*_C60_QZ#efrnV5aX}La;9+gRT+`w zC?W?(vH`n64v(N-GONiXN$RJ*`bw_yeEZzi=o4p>aM814#gk9!D+%WPazFwb9`B)7 z5dabzz+WO#ewM(4`?=&*yuaYv;3V1^gA@G;cd!~w!q1Ntaxq#D4c`y2fXSK*@NTHC zL>CN)+u&&;KwN6b2^Pw$%BA*KXRAZ61?*9W#!Q>z7!x^}-g#%uV}z6sYDzP)=ZlMy zxWSzHNj7*w<<7O^B`#F5EH6?wq_IIXb-|Q<{W_RGdh-&MfDr~5kweATvIux;-mZ=3 z(WL2CK|3nJQ}W{(>`Wif%VY{Rf%51;TTg(ZC{a;Y$E0$(UZ3wCzIpyBV)yUQw`gkV zmXMj3DC#=e-v$cwi%g10Vekt_BODo}Z~Z^c1v|hsJa{{YOcgw|6wldNWRvAB)2{X& zEK33V8Oj)P%2AB9yoS1pUXc;|>wX3;&?qgyXBhc1qNCiMsg*UikH;);ObWI(KT6M% z#IhF|PPV%peR!IF+Yrcg+9C}0oN;>W4E*9z*qI59k|;$j-X&IRO8x#|Lyuy* z{TY@Y`$xu!$4;4aV^&%-q|k-8-$J*$K{nEK{?t}znxqPAkhqP!m9k4sBlTfxvxQFC z-svDmV0?fZzF%!0h^iBH;ehyf6!$jTywRXrY?5cXLQEYL@>Czfh|CxNT$@y6e9W`0 z9=o6I?FG8Xk=;9R5`XFOH6)`igczZ_UCype)6Z)+#NA~xoUJ+T&T}ZD;me|w)LlvM zbz9YdbE4}>bmSjZqe6#Wr$yONdHIF%GpZr6F5Q)CY!VhX;Rsqm12g-S;J49nr~!}T z)}Yk`K9B7xjSYgP+sk*h4L9N3{X<^U^` zC6BdXo32MmIiPq^HAOM`KmdG7gGTDJvoqew9Gao(c!_VZ6flq5s9ji~61e3I;aY5& zY7ytDYfdJI+lH0K-}MZCOs10d%M44t;x#suALbh!K=NJUU-08xFiKNgEPc=79yTvB zXE`IQfp`~sfXCipvnn^vqU||@ik%c6#e=mq_r6}b^qFrD!@DO{WtOxwOl`+e{AD}K zJI%g7t)cgWxAry2%nqxPPU*~l%a`{(%l9R-#^gm@!8~4glM3i>j86rGC6ml)P@dxl*uq$9-yUPX?GGO&6XOSO6GDC|5LVd|~Bu0kl?hY2gi?CBq4cs1k+4H-% zl+msY`j*)L15#gCn+oJAx+0q!L1c>qC9OvHC6E8(EY{Fez;@YAmL~&8H@^GH*z6J3xYuyg zm89Pt8eKY{b!GD!x)xJjS(oDgj&{TY(C|Q6g&4zb+%tTHtN8eWVAdTzYkFbbu&Lvv zr)ynY5hB^vUsMl`MSlQF4X`V{MKfxKf|)6(oK5Nh#zUrSav&{q7DKuG)EO_{JTjp76gXa(SgNk{b6vh3`}XRZfvxzR?3 zOy;lU3N9PnS+M&u{qd>Fy|zC5Ek1wOx)Ka6!fsNRbb07WtA2VxJaJqfN-q%YICI53-I--Ho6W6{^b z`!TFK{|C^obupNs6YnIKRX~5hn|OiV$XzMJ*B_;T_CPXXaJ#FdHuHYnflG9;1Y4~> z`#QPjl7Y4;ElnZ|gH0N!u)>4hq-RsbeP#om9lHn%)6unyEvXOMhQByQEu_)5`y|EI zNDJSj%de`nIdt5XSl%+^Hr~(1K0n-U(d%bcX5@jau%PGNwkhVb)USBT}?_%U1V@V35$ZN&UgwOuw`VGdb+%Yo)0ue=ZGWE6wD zFN+Z!8#OdQnJ`sv4do}3SYrsrT&9qw?|9rsFn#HUfuR~r>$#paHxP4k`oIhA3__L= z|KR;1Vxrpz<9TXZ(8L*jieB$kKE4tAQFl)3T1uBqcrf1YUG#=`^}%8T3B{e9uC-y> zv_&exl%y7@CKpz&s09cb6rOzIYx44@s%SveDtu>^gSLbp6h*DG6y>^OC!_c!?2}%p zR+9!N5M9RaU4nXpqq_D*&sbAgC@6_tYigSa4S+^!D`vi|R!n{-8^}+o4|2lAFf4i? zQPX9~ul|6!+PN0?P*S*(KLDvMaH`1;PBo#xxh5KgV_%Z?b?-as@sf>iDkT$+3goZzU5GcN z&MU!B;}R1$5#8l}+_JlK_ps|WA&{rilSEP5?-3HNTj!hW*LQ}Nc!&(%=6jDsq-6_I z&!V@Ov>48_`LY?N^M|dg*&i?LgC$fV=qRCr!)?Ur;w;@I6!1bmAD*ertna*= zM8>06t1U*BB1)X~v=fg9&&4KZ1Y^BOZY9YlACs1nMYZO$FsY^PxR>*oSTdOJ7`=w) zT$krcBf?*|Cy7=60jR$_X?~}$>8n;!zFuO^T?`;(D&*BtI#avZKBhlT4{oyi{iyJW zR-SR=9IL(ORVJnWSl9Dq@|UW@jw$DBRJ`DwOPN_##DeS?vR=8#@9UEC)-H$>|cf-iolh!CVL&8YEz+)z*HQNH?aC?M-rYAhA~G8&8z2ih!=Tb{p)K?KC^1(VW#2( z;ZC1>xgsU?QHuT#ycth+Us}n-3}}jI;X9fb5si)wV0W;*{cy=#I?;rJ8NR$+!u=8Lxb7kXZWku zneCrY+x+R~)(bXX^fu=&z>6Kju+(tdOmYO6YGtb0S}@3CE*pC6;3P+|l8H#bM->{O%M3ZT7U6l6$P$MlmFsNJZ9)VcWy zBQY&K*vzjdrrC~E*)$dqMF{XG5C>m^HpxwVSFshti&DEkM%f2uiF8=lC_Hk9+K@Y0 zp)80Yk=x_i(FWHyBPBouinzCb{Y-whq!RXYnQupJqQ>i)xDu?Y8g6-oCf*rp1Gh&c z8uLq(xhtZ>OOFkSLUtdT#i$)TSw&K*ziaKb0^ujdDbWhy>bxh~TYCd}6yXg1l4DF5 z?ZGT!OOdlwer;MvHbabaWZafsi*V9zTg z-50EXwptm!CUU}lO6de*TG%hvzgy2Qb@e(5=x53Y;QrFCIC^|Pon^ccc85=o`aETb{ z+XojNhTRpUK54eqYD%D}aBJhlif=7>=fg2pz@*R?G}(6@FIjyZt{GP&@$22T(RJxTuO%{`1Vz5PQ79QBC(Jimg|dl{i64N zizPR9T%sP1kCBQKW%1k^J4P$QlKtyS^phu#L3Zcs1DiraL`dgW-qCMJ&tRS?QrZ)2 zE=<*o+HyY%;uQg^+R`12z62Kr>o5kCO-;0tE0g|n#XTaTyqsp`Gp5zq2a?J^fY|ev zV7j17j5bo`MFlvk5s3j4cOVk29C232@45YG;aju!*io&LEX9@Se!D3wWHLML{eFQS ziZAlbOU=L+#a`})&S%YxmaO`8Qr1=tm2?X|_gm;FEJnH*DcWo8kUZ4)_Y1E&AATAv z7(X#SHGDpa!F#gyz)3v9I;Hcg7Eh?*=jQ;PX3sB%ATw_a-V(IPd&cT{bIdmh`@5{E zX2>*vdS^XQEj@epHTyQu^gzvk-8 z1Bv;U$tO$ka(Z3#vDCOe(GDx&rSLz120g`&z2Nv0f0SXnTz6XA6SA=9Z{X)qN{Hyo zT6{u?{O0;xS+RMQM4`E5~( z{s`f`+t!~>LT*>0OriV_z;s3H9IaLlwrqikkZ$s!Y#TG?=_@lg!=k0PDk^Q@GgF)~ z?_j9})nqt6w88ToTx%OP12q}rgb=92_dVyGwW*|LPEt+2C3I_)n%Y1!+T0&N=v!K# zhyGS_f`mmtK}1A=dMiQwQ-Q*O!Nj6q`>0}sjt#Csi2$8?sMt9~jh$Tr;_~Xg&A?J~ za;dt0$*-Tq5mPpaPblc!-r*KkGYt$%EW9$DyT+ApboLbumAiIZN^5A%aV+9 zDpBV@q*TY--AtB5b}r5;NtNVFlTmqW3h!iFU>>Qt`l5n=?k)WXkj56i)DZd@NHpf` z>Cw-a&!1Jgwwhz;D%C|zbC6K1KUOkqNNFix!Iy7_O{y1*J3G6BDnUK}dBNK45OdCI zP_00OyxBzV=ZEtI$gn3WK_ljODRwYNjx$h41B=tib9s~*Z3!Q%-!&1|_)&(OmI|}s z+prh`S)5_H7ba8Xi^`W1(s|>5oGH5C6ImP4YY#6E7VJcqm`$}rYapYhA}5ur-^P_C zuG8H-$Fx;cHD!$Q7nF0cjt!>Z>*}ja-dO}2uB5qHo>dhUfU19q9%$PQ?ZsAS%z}`<+ac^vFA79U6uI?AdK4*m`admm5Lznz`Oc0cKt?4`kX;w)4uILIa5gM5_ zJJ8b@iP1v|+9i(3`=R|_2C}%!F>}qLVtz8p*zji-%8?jeosw0cv`(p|Xg|1Q#I@{Q zSdc@OO+(2fM6JimLX(4hPlY_Ah}AiV$~|AX7GbHr_rp@>utuDzVeL|`d4-lpLiuao zd*n0|@UIdc;!C4LH9ZSRh6ceE*`aXEO-LKt3jCDrj0ce3bh6p9pScA?sw{mW>PbVP z;do*ndy5|U-)2-OHf8*`y3|IaOMb?b_T1b(0VPdos|<# zT9&7Fui zWmw}bP>DJ#lIT1XtA>+uG|RDLECB#>^wU9Y-%(dTE)A*dZI5Ysb{;V4f)Tcs2(&D?mT!4f%#`U6 zOewH0a+B_no#R>vCR12$fZ#30Z9d*G!cI7n7aZv?;x!BA$Er%)XbF_ zt9nqW8-D_zmltff#gw{8jZf}en0~h1y!043ihy;K#?w!;B{hSZlNKM?6`92^wq|&| zD-`crI8mgQozns0Jr4>kH53{5GMH5#gj3CaRbWQ|d?#7$#VLg9Ye|S!oZ2>; zwYuAvxffmY<)Ka0K$$;XmPq{q?3Ki{GD%1i<`q*Q=U#=ujLUF5t3U3V`w}ERki+UA zMBkngW1BtSyW+-^p_PZ>sL%mqYs#-I3j^iT7nP6+^6s$l4{6vQQ4!0H`&1bDsXU^W zNrn-~dZmLcM7wHDNz$PAmK)mvt+U>93v6`UIsIlwT5 zWu=h5LujqPi1L8`uB#*SiBhvvj(vW9bWB!nz?%V^1I4k>h#Gi`N^4sD6m`<s8kwIBB91#soGj=j)pKczK(M~?M z-@uC%s!}!J(K#;+-BITh7W*_y%l>6yU3a+&-*}>JZaj^dd2A~|Jd&Y+EK}izI@$*`UZqdwS)Ef}G?^j{W{pI56A+4swS$j3cPJ5x zAcL^NdawFay~?24bmsJT1La}WrK*SyHj31ma5}*#xFsJ>I!6Bs25(fCj)8w;BK9Npubr4sdvikYMT8_hGk zNIMo?6Oe`4iVi)D8)u1o7U+``M`T2ssv47FmI8E{5tH62*B*}3G6(9oSTR2do|G+Z z4t~5D2r0JHjn=;Fl0N-;+u!+Zp(xOZM>K8fV@5i2%4S3O{$Y)t9Z8YmC(nk;k}3~k zbMsVw)Ozr|g~duv&^l70`WYLEtJdwgj;w=K6QOefQNgc)5@EW|Q{HexSTkkB{`2Sz z?a_|%qP0%T8BA{PrnOWn3&&K`5|)6SFkOA_h%l7KFHY(1(#^VF^KP~}THR1YpKqzP z?`;z1pk>~}r$~OX#67XdBGjG>Pji*X6DD&qcEv7Bi2XE%l`PmWR+VowPV@7!I`h+T zedXaf-0PuYIeRrtRpL|&6a^KugiLO+mU?Hix@bfTAWLlwYcbpoE=znv#z;GC3M&B1 zULJ1AFXG(jydky;v-L;YQ7?5*J*}p%mBKv(M+_#vBKzn_EfGPSc)<-Svor2lI-5zzLS0m;7P~1tCrvpIwX^sAIphjzK zu28b*v<>TtEc-2lkfa=T^uQcPJTh#uAXn^mPOI2F$)_ZigU(Fi0DUJrr6ZVLBV1-D zU!f739I-lWCwKZJm|_<+Sodj`hYK`cpy64-TsC2W?SLKx+O1bjmFmSIN$=R4SSl6}YKIHU}nxQh#p~n}`)0dks>sCipxbE?DTi+bHP@Ay=hm<9=R~hnUW<3!L zV_m-@eBOdzT9VM#S9HxRhuFQ#4!Ip7B9 zm-HE>M>ZZiA$8yY>09V?doYHCj_QeGBwr+@HloWu@fPE#iIq%j((G+?_O!R5{Kz;# zXqiN4G{*#<`df7%5p`EYvaVnvQy?_36FF=>_El6jyn%u0G#I!FM$r-|yl|%W3 zLnHhZQS{5KOJJ>9BXpq|Eh8iK?a`yWw9HM4GOeQ^%R1nXWm1_#*b@7NZ%@}6982W}?J!so;Ly&&_a&eLTE_~t9lYm*V z&zW$rbCR5-!4%P^l!aD>^(FCy9;}T+Gib6zRbJg=kbKL2IvllqPq_7p0<;2)0$-vk8fmUx zymg7Dms6keGBgI}smpYrA&-&iK5-CTl_YK87uZn{_xTq@QTXie1jtvkvdW1IXK6+1 z>&W8do*_t0sgW2*`|7D*Ts={a54`G=R+=t5b)?LyqOR17o=j&Vl}&Qp^;O7pebUY! z9*v77g}UOb4<4|W%WU!heyPU2mMw*|+q&*x z_7%j*bbBAJ-X*n<%c_kn6h8Ww=aE>p($mq`)Sjs8%BQhYipjW~*~WUnkm%I3FA=RO;3Y*qdD`*bu{5*)p$X~a&GFyy37 zKcb-pOTLtTE`y{+g{$E5;_LUZX^l*cP2^@uAi|dYVhzFYSOm>5^clY^~uJRv+%lY zoma-2p(CRgBHf7FUYie5mD8=s^832sWM7e?;>%hA{e)-BZ@GRu_Srx0ME=+ zZ7V6=`qk3;2Lji<$PR_?M60=}%E)zH{R~*PXT(mm8@H4Tfq{Eb&bKJe-kVFYl17)0 ziug#l=1$p1kr+96!(74d;MF0Z=LR;<5ew=1{2Gg9T9Y4VdE6K#SWvbVL2SzB(jRxV zq_bo!T@714u|yB-4H>4=M9jCRP*Lm3MyjkKw10zGl2dadT4;6A$)p`|<3IK|>5gTozidGsEgOmNbYtf#DYP?Ira3rYlHDjnt}j&4xLMrahNs z`-iMn(KXbKEsh3-VbN_xn?vR7Ly5C!p=+ZJgVsQ23AGCXHFs#Z;eiacDoY3qwO|UW z9Nt<+Eu1~oI=&Vc&a-kz|#1^N{w?wx~}lUUwnp44_RIbLc4 zd^gjYG_~-la6Y#V7(KSp8!~4lx@1~bTTox=?FJHsjHb=)TK+5r1{R$`IM#$!UEf!T z7ivkc*L>#Z=#spV9ODU4*k%>8Z?0J%{mywa4U zLFn{Ud!E_GaEsS!Q(WawnKWsJ2PK^_t7utKUSSD0YJ1i)16LXsgK`mf6p2noMLz6;K}kiHQH zj^n%v552x;MdamDekU>RR#+(t`Eng@!J}>gWfE~n;4aH1jMSdn5s8(Sn&Dtw(@>m3 z-K={W>)t2BA2w40QwwJ7eVM0YkD>?lWHfc5m|F^sY7jG>%Jt;||(9v8SuSS7Lbf4YRy zJ(^M?T`#oj3JW`cdT4*9AoH5c87vfFDmo0#(ZSma)F{L~7axst)|v82vcG(LS;~p$ zF&wm@5@?Ws8qZD?Nev$U;6;L(BhIuKxL_gcn8z-8C@*?8E2Onn>$4|w7^Z(-Hkk(q_a9}w2iI?KYS=zxDR@R zkJtjO74-|OiQ>bqrF$Z#Zq(LFsVI;J8O9IUT7VL9a{Sbqj1#ksR9c#;LfcOjTqOps zwWUx9GO4TntzxS0z49J$RXXnDXsr(0@UY*RUoQXqp8%_u%ge22{iC?ppMce$0A6pm zx24Bj?U@(q7ADU2+@%if;^@!KKV&8M&UjqyW7R~n%7vLLBm{x|d`7w%6R(BDX64L! z5#8hM!?44Y<4_$g?8Q%DF4VoX6xKsX&lKhA*+uHT!vx2OlkdJ~h4oHx)1G{WITC!$ zuLrUX|+j!v@l%hI-UhC8&K(p@JG;j=PEw zZ2#{&J$=t-^OX!`9Z<(xRTK1f2IO zmDUIA^2f(cmU}Fen&>yQZO(d)RezvwiWQBE15q~$)jzE zjP`DF$J&IM>ZvWRp@*i5S^mKG4Al+cP0%ojxtz$Qr>32EE{A+fNhQqF+~Tn%O}CZ@ zxstvSeD_`&%rGN4^33JDE$#*BAh!f?h3-Qtx&Eu}kay7AWt$7Qn>Ur20=U?#FqqRV znJ@Fc<3HE`59hk|?Cd)nld%nPXrm_dNp@RV$@{MNEY~O{?&|2#93Y(X+8Vs_$xJ3# zGO(Td!#WP83N5%eC|sPVB^2Z;{%ceY!RxMCJt1&fr|@jMwO`zRR7p?j21U}ld06FK zgCm4%Op)`citJq%%_~5)=-V(fbxI32U?FglY+T0I`Y6z8)m)V!A6D$P%(BU8j3r?C zluzQO1)*iq! zJ`lT*>S%O!y3DqiK};{p)}qr#wV_$C!OBT>Q)N@A!zMDO$lh6$K`HA^Gxcipw*P;+ zNUfqWj@G2wZNk%wX--Q}>g^AtG2h1SdbNvfF)(0=s0do8w@@IEv$f4XDqMsho+o~( zB%T}7)ByI2j5r@}8AozyZ7Dl!^fdy1ziT*6Y^jLBXp+rIH*=J*GOc4*$xGhk>T(u< z?;5in=a{dFiJu@Qt5v)ny7yq3_2qBhFIr_E@p>v+^4G6ZIp&!AIP{G<5o&(VcCc$; z(aYplo27V;SbVD@8f53ZliaBecKqPt8!%{-u-@c79N1{8*Z6~F{Hra!rs)Jgk+Nl@ zW(b3$(*JaQfLD>i6mN}Hq-L;7zAu~4(jik&S#Cc&*p{N?0}=haE`%2G(w0L>iOt5Q z(+`T(H0Ah5@r(TFMU>ledpVO{urC_?;W9SG#7&Xpq@19tMJ}Y&Olg38b!I)Pp_uz> zH+b)Z+7BTKiyP+*qr(`xY~#VcNr&_yKLPF@BFA56@y>gmBJkMC_eaZLZE39@INIGy z5SU?8bv3BuRLU*=_hev&Cb<$E7J`Y)m?E6jQ2ZA}B$o!^B$pC&do;-J;+F78Cmj`K zr5bbKO89M(FbbVl=@IW?qC}6Vvjw!{cV4b@O;n0P4-*MKqqn3Kf#-3ee+gL79%2vg z9IGgyB=%3^32H}>CsN+ha1$KG%vEzH`-mK@dGcxR5KnO+mT~Y0WOnsDZT$g*T^r=hZR^atB|Acj#NKn7qves@2 z${Vq}W>_$}lV_ z#zRNwI8>=X<~9zV?sr$*K_leaiGTXZLEf;fJ(4Ec^BZI zfiuah&QSWeOmrSrtpr+zS7M-%P|y;2fu1je;;wMKV-Un5 z%^rdCMeowd8i9-O2ODB2c|op*w!*0k>Kj|tuVW-~2-{%PFOJtsivCY&P3wY%dg6MP zW`}`oQQW(WW*_8P*w)8L!d*DqD3PyhY2+YV+ZZr8j>v;IulJ+LQTiZR=|Wu8VxNfu zD_j|6f-{>S`HXW3l41KAre&h5TGfSiOSgyH4vtiQ(2nmbbgk(R-lTSSA$aecH)+7P zs4PkIguMvvT?;CXI9$HxpH#RF3($AZHjCOLvQBB7*S*Fnnn=Faii2=T9c!v$^8ftQ z_{DGtbKGe10@zJ=eMuRtQ0x3URw%@_1*e@aCtoeV!ZT1-ZI`9j6)7vj_7mXiZ|uGn z{Xm(Vn?A_OB`_3o-Dq``t|6*nQP5wqT04iS7$1Brx%}ZO30G|^No?6V?I+G$V^BX=4P`cZNpxGlV)FJ%XB*3{X}OXEfqqw zN48{Y^J&SmW|1vuH+CowI6+0gz;gtgUl|6@4TOKKPYZ`~BeWtod>k%s#W~b`M(e$p zd@XEs!}1`u;bN$u01pO^9rb%l<$d>0cd<0&StF<>i(r~4#&q)1vFk(UM)9=6$hgKr z@0x{XIaE&rqx|sMOT!uTww*`rt#EDnI=gYVa z`c#h|_*_XsD z!Y(unEVFiB3(^_Qp@Rs@nw7xXk7%_UYKaRDNMAYI4LjhS;3vK|&3#SHlBZn|{#*fLFcE=5Y~tH$jMoGg*DhwHPy1@UEX0PCBWn1X8ZX` zoYrz;Tl;N-I%=$3^(-;4g0~SR!#5E)NmzAOt%{85s(NbCzRSoaVH^F%1>b6yVTLhy zMofu$@Pe&mF`sqD8{5`=NP;gqSh?Ob-)$m44^uu~5JwyrW3sVW#n(HB`z?dqFL2km zVbr&#AFW?1?#d3UbA3F3kX1uEKc|h3Is+wd0{1)hd==B{aaE$ZUb7a>-4L}^*M4=s zUig+Fu!z~7_(-VM*ZfbK!ek*hnay?QuW1P!Kp3^jOR@t^;GMAstyY4RV@N7ns;6@g z_Tx6nH&@+!RG}W&lE!BDK6O1OsLDtc^{g;dO+_*@81n50;@(DMm~LitCi%d= z*F;OWDg2u1W1#Sk0&RO-YIF{>sr{GkX1dgWpm3OH_*nMIE@hW#6MmmNGNx(hQTh-m zqeB;q+j-AYqQrLu00WX`l%!lEuvJP+w?Cfn(m#|df-k&kf8tYI$=P@%?>3$=ho3w3 ziZ0IGhUUakgs;9V%?sDv!gp;UKW^ElLtx&y9%bVFnR9pw4K&DPw2HZ=k?dRN_e{s) zZxRjUaLGk?o+}hL^J5It$k8gi>@*9~N+}XFu}(h$f~3AChq$MNfGTR80Q1I1{r|<~)GSE2cYR}I`Tx~|X76mDG z-|zYH?{@4A3~1ccGWrHn11(r=ms>Ap+^GxumJ^o2M*kD^~%DvvaBVA1-eMh=DdQ=_8&*M>733q@ABVVRjAd(ie%wGq@{- zrCQ|&p`)!32ZgTECUiPuyO`82&{R0|=q}x6(^4N0(uBjMrhWocK!yz&-g7A~o4|0j zcEfo0c&gHiPBH;rw!dnLv4GBq5Dh`1WEovAinXg#p3HWIIq4TLb#5l*lF7?fZt6({ zXYqEQ2bJN*=MP*`g9V~KnV}`vdt@^0xE9t>Vlj)3jEBl6Pioe2O%t!mDWYB^pU{Saa1;S4!v-J5op+hoHt~z@tZXK;~TJ*D3dhK_{xI zvHI&?PiKqpV3oXkDz;DW9Y;22Lcz$x+yyH>{-9j0sFng>XD;(3O=joJ5{ied(#S>5 z8glbRo5?OeMnZ?0FA?F`%Vjrqw4n=nP^S+nQ2Ls3U{a*Qwu35mA4ZcmF*aa&c>EKv zNz^Byh!Xz;a<2fIW)ry6s}6fCLD5p2c$=mCs>P@;dqK%n&U^2WYA!v)d9hfIQXZ^j zy6j#M)CY%U(pkO>X`Wdzi0n~YEmlQsChwxht4iz2A=DBDGNC7M{ z54w<;1X;kk+*m%g$B$3#gx3L>`B!Dp#_1*R5qUs*!+<^vJ}l)Jo^~uxP$h3S8Rx)GV_P9bY$L4d5$87nRddJk3SMW+*ac5=Ag)X#CEb98A;g{=x zT@W2N?r%wftnz$6iz#sVu2zLki%&Ug2Izi_d z*DsOFxYR)PYe{hsE1|Jwgs4(B!DGe7p3lg-hM8l-pHXtPA=BG#sSCR$qOja-hL_hp z5W;pYdTMWzY#pGIHm{7A<>Izd?~kbmGZNDy(?jt_;6~G+=?Mt`Q7@;zUP|2V{f%b3 z&k$yKlZH4yNBMOZ92sn4wPB1MQUZCJfpR(;|44 zbO4M_K}}@azZW+RMp>LM6+#w^x&GGIqHF3vd>OL9r0{d4H#z`{PEms;BcA-QOj=6o zGb9;vwQ8FsgfFtC5`|q{C@w1fp!%>2KmGv3NcCzoDKoMWMRzEe+$Egra<m9EJoSw#JR$o$!)O)XVwcvbhx8C6=;zkm-vUnYDIQLR!a)f@rUSC^S5%zP9;8 zLql5>&BMt|RMbeR!!j5~2@8q@a_ZM{wCkb9iR1&0F0st&kcITkOv(5i*I|a6lgO3{ zRP5f#$LTA5h|(uFj2NXA14@3nxsfVY1P0C~d$ifWa%w%nuhN>Pbg~yecEhW{t{qie z{Zzrnjs5eZv_pbRYz?BOEXPQ0;N#xCw~~lQ8M68ccTuXWDWpPShlNqic`i7(`7kfF zjXg|ri=t;1i%7ZXn|PT$KZF6z$+o0AfI2 z(2=o}Dd&VoUmb9Oi<>;BmySc~^?(lCaw-|HQKuVPFkWIP_mrNoQf_KzOymJ6(WFRT z{~>8Q&j6>=&Fo>7dBg*|3CT;W7w)9`hyV?6VqXn^M%yqOl_w4ACoPI`CYM)2*pp8) zFPl?Qe^YoqTR^KSbW=Jt8>mnMakd)I-m3BfBM=~5yQ(H{EZG)*g2HPa5$u5cR196P zFC8Ve3HHTWbfs_>>O)L09`(h@gQ3zvf>su`s&e#acu4VSSqpU#4Q8LVQ33(@ghUB2 zkl~FaF?kRRURf*n4+9*1;=T60nbTH#6g_JwQD>seqdZ>92-J0-8PIHm0t;xIs*}+A z{0OKmI#MXgwkt{*gR4&VSNt^S*~BhVgvz!nHQz!fHNVrV^z+2swr+y?K$-)$&J9S0 z_A6L!iM&^~7wCV`nid~Fh2c2*%vWPXrN3P6S7ZsD1a?=h4~^Hyh=$4dK}2W&{h5g; zBSH<&nwpi^Y#!78G_}|I+3a-6iiGx^{}0I zkuv^EI#&k@+CPeG^PNBK3Tp_+zvF$JH~N7|y3UOw5ScK^joVD(^hl>%7j1SM1T|Vx zH(&7-e{E0%P@f`yROITh7q~MU{}xU#^;!pVlUv3FV#8vzD8oxOpYG(@=uJO#=z;vL z_k<)XmD3DYg?matD;KI9I3~M!HyfheBG#OzNkItXG{_RE#6A; zNAsBDu5x{|&(7|j)+(nK><0s49Z)~C>GPR-;w-9ybHI&Zu$0J)UL&^0>L=ayZgjKD z9Dj%raxgv~N`|&pzvE>6Fu^?2cWcwvyiT{_b_Bx=J$9SbHQ?oPO2tVSyloC)@U5mf z$(?7wJ@Y3Z|5cG=+X@)!h^V>c!hwE}N4ABZYEj%&l7jOin7;f<5g@OV>2++gFJC23 zyC3Vbg%589CY(XYXOFwFV5eQeZXP7$U1v`x(I~Et{h6KWKpH8+)sDE&V&?@kdm=~z z3uWGOVs%u68HEL(?%sR`ISA=PX$d6=yh~U#Lk9>ts-Y%9jeB{lrMF62ZH=oPYIi}D zJ|e70g#@|^u@V_2OvEkrfRzw;*dC}cj+n|7cwb3*JYnwHu#4IK^s|}&l(SC@vR;o# z#oZf9IKBz;bbgT>>$ExhoTb>jdOMru8e@>G0yCDYj;fn{%~7*2gJrYKV+Csq>~|#R zL~4WDA*3E#19+J&#mJ=lBNhCCh(W&(R~64lOITQ^)*NYebo?V_I=r@|X`H$^eF!Dv zn!C&$hUm8?%PRMCf~KR30fE^O!RyM#p)2ht7}!Pw#pEww^FEbix78l`h@#X@>FtoG zC8kJykO;!fMGb~2Xgora7oND250<*EXJ!*5oEG) zxYzxPkAx{GFdNWK!eG55f))fp1rp1OEa@%rKu}SXCp7)T0FgOPW^yA()H!2$pPoJ* zs>7!r3nF_GZ)TH{Gf}WqcmiLP=bg4D#uRXi0`5=+=09X}appCVu!$OAdt<#YSiz+; z#M6GP&JR{y*TY`d@F-b7jdr~z&Z%IQ#8&?+W8rNsdwqU%X-EkVm z>NUp;62?kJJ~Z@wHd83jYs3P!=3BM&Ij&m0VJnRNpv_r@Yuq?p3YM|URj2vm%zNJ_jNFKc-|e(Hf3S33!jnbSg!@=oEVkv;>3=3TCj-CQ`+4jm|5ikq zOH_NJS8#kR!r-iunJ6b-~nlYCY%^_PVftrAqkRBLQVWkA&Mvey~IFEU3 zIJ8hd)vH-L1t^6<(W=jx*8(n~bS(I&6se7v_7NDX@b9THCMXe1)fG(Uz)hlxS$ka_hZT$WG%K%lEfYX^dA0EACsF<}^ z|D^R<5m{%9r{ev!-R&)cvhW4n&wIuqf#=FXrrHN8In&*$q~c3e?9gMeHy^_Tg|hkb z<2Q7{>L8fK@vr(luFFr1$c6E$5ctah)GNgLUS%c=`7w1Fm)@Bo;w)Z zz%I3s!tY>m4pE54A+!vyGe^x$u+)qdqZMn;RqJ?{SFavsTKld@4^u9VzOeI0^E$t@ zD@vP16Z41oWpcF4fV*xUZ#c05LNrS^PDNRMyi=HKo~ntRx_4S-UTArT0eDNx)!NSq z1ZwbmIxNqo9Ve1vGoHRW2kc_k1<~C!mB4KjZeEM5hG}~%%4oK!UJG#ddrBe&@yhNH znzAup-M|);b9@=)nFbL~Ky(g8;FQaxO@c2h`a9zO-G_(4){Px34%Ti2Pn4Sxv&~52z27*D?xCrXiR>CuKbFloJU*wdK6`c3A>B*w3Z z*uE!D<1q|J6fm+G!lQL6`drouvRXC>m!BTgV95xhbB&sjwov96-BgRJWC#tXKWTK>u`JR~-AF7tP_RMTWf?q&tQFemkh@=9z;9djIt-7u`x zlz^Mc?^*Xv5y!d-QA_rZRA~;;31%+Gvqc>12Qux|4xduE5{c-aI6#l^(|1+wz6rC* z-v(tZ86Yyi&&QffK#E|oJ$T}2&%xLlQjA8(d}q!XzLcP|JY7O}tmwZ+=YWou9bizD zUA%N0Eo!;I`h0+MC9ceZ7`u0P^5Gb@%rr~_}_;W zM=M#Wh@x1VJO=X06-P~X8V_(DetPwn4$WsZ7YMb7elU^W#lOXA5FhUy-+15yE*7}w zJg5qls&LA@Dk>;3fsxLz?<8wd>mn*)^UoS_74?Nw*<$JkozS7P{sb8M-uVx>6b^bx zKUHG|ZsKW2f1CC}{P6lI?sWCh2l!?oBgR49!LZ7Uu6k$hMT%)KZG1wd3IO{d2?)sozSX$^H1mMWrNttIb#4ne%GeOP>ktvE&O(|y)me4nUE?m--@%eow64c1iDHVC0q9qu|B)yb5+d62Sk_Xp5!CXs4R%pnmc>jCdV*0PLN&*GBSFi#>!9HFt`X zUA8VumN(84Y(JPX@73#y1zM&cry$>`c-~><=M%MEk#-N1d`IGd3yV}zEH2otHjcw^cZPqdg zoy_Pq1}@6`zwid7>G8T$Q7AVrJH=) zjCL&Llq{G#{K>@Fse5dRft{3AJWzb?Ay<(~#xG4xz9{L`J4EFLhU@{1qV_-Df4x{i zkbpkbMeaKm&d#5;8`aGX+E;SV^}KK5b%F}02m8qSFkpvuBxUyKVV6HbXQM$Qf*=sd zyKt&qq|p0}sJBB5<3(GcFh!?|k8&;U7dnnW868Pl{<3t|kflFXZ9{!O`Gc|(!jXEwk7oyW1TZtjzu*zJ6 zUEOUGj24|fTC0c#x6jiq`0aopAfz!bG#HeH`x%49+$pD5WFz=mtLF4f2RvY3C9ph= z({kuzkNLVULSC9DjbGNMA-&s!rV7R$OKfFPy@CVv6Q+!cW>(ml9F`W#ofxi#1E0{+ zXVZBdXRe*);uyL@l-yFE2^H?!Q%#htp0^}8%P<}6=N z30}W}0OR$5(V`P47G3ft4|Cb)Vk)sU^O}b4HuFl*0p>BHi2AHWq>&?VOVX?s)kr&+ z5F*H<7(oVoYTjK*}0e(O2J48tappCX-z&8#%7^jD)e2N zh;XNf4;5reqi_j!sT#@-Ol6vk=(B9SCxo*!vN=Q*xIR*s9deg4aBL&>&KhH-=c_Pv z1oqRnCePYqbG^Fqxe706&`F0IR5{-i4bdoo!=oJ`a{Z$9ruF?>yl)~fC&NaSiw_C9T zOrR?sE09}hJO+zk<7Si&WDh^oZ>sTQJ5fzsCP{O$#d!MkF@d$t`k=dIU;?)lb|WnI zriG7Jz-4RzAVW`xi8pgoqUOICP2caopk!b?KMj&046Qm>PAYNbs^t)`W$h2~ZNmi-=7Lb@Mc$12)~ZcHz4PT8Nmjt;a_m+E(Y z_6Dj3!9sFP%dUX0cnsVPMG=8rj#BZ@>U86v=Kk~atsp8oOINl_<~AV!I_q85$lJ0S zNWcktpsDVNm|^dZ7}5BaLh$I9x*y|+&D1>WQX|P|`lQ`7Ohi3U9AwGmio&edRynv! z(@;GF6(YzECdr%K4-gRZ@v-LCnQSmFr51ewVAJ{bjOglKZaXraKLNdB;GmD{6)32c zZxCd`<|?}_{W`e|+hYM!a;(m=bp|D(K8dd#Md}y1YdNS1I@wn?Jb`o z#>zRp`N{3VnL>+T;75zs#v58UZhPwspmBs#;9$GgOCN4HUZ@Z{S`y;6OcS-rs@a8{RN;% zb^ihYeeXm6jR};3?BX|9()=S25b+c6T=%=&EB;a>3OuV!0T;#okuebj{mq%|C!n6} zcNWNhL0;H^Yo9*>EB`>QzoSTjr(XUOgnCZ`E&BRE6#q*qAoSP4g!t<`^$*GI?;F4U z-?c*)F9;UMD4{n3_|1ak4}uk#5ujJLzliKVd6NA22jMS-c}JuBHUj=T=f8#egZg#8 z|BLxUnkb3)7bA)J6EFvqeuNC=mt?Fd>Uw0!w7Q zyW9wp@;U;TIUsYgKtZ5x{WyQvVbFbG`l}CE!A;)mM5SNeKK3C?yDx9oRo~ zkAQzG#XoUCjrxOomnapSNC~|E`-_)i{DNfv~@cQ^qln^q90Nu6 z`_UoN|2GD>NB?iip#dygK6kVKKoSLs0;K@J^KV9E3jc<@{Hmv4Ka4rD#EQT7z+k*2 zAYKaGAL=gx_TPxR(Z5tEYyT$yg@7hYga!b$8Rd6+1i#DV7Yr2m$M2}Xng0R^1dstg zV*)I)-zrGv`T6`8b*t3qf1&yV1)c*1$r6RY<3WCFx)d3U6n25?J{b4^Knw+r1O*O& zBKzGS{N?bkr2hZE`L)Q6{Cklb67u&VH*k&nUyIy=zgD@4m%R0r zBQ6@a-&yvVjRl%uerCS@Tyx#jRIx!wa>Om4C>HUF9aP&unbrQAaug35S`jA{yJOj6 zj8x?rOYRfXD)QH|(x6aMYcfo7DYVH0{_xF*|F4K%>Hyu8;_x%o08V=P8kI%(uQ zft_D2P>~(=Gt%QvfGG4%+re`_F|7)qc)G<#mm4j6_bHzgWZT}6?TF`yK0H(e!Sm)~ z&k{;!Za+T;T3p*2g~^hz$7akQK9xXWr?BYSc2Bt4HOfcz=BWr%%wxjxOb)|+hO^{z1F7mnV-Qz}yiArG&-L}>nn2gc{tr;#^q zD#km$xKRubYSY{dOS2(XZ&o_w7H=||soI8*7I+U4CWl4+^C|9xSIu2 z^C&S%Vk%8G3Jk+Yij~~SYn6vxkalXI$!?1yBs?)@k97+OGdv!+hP-S`hix|D)?=GN zUg23!S3}?+b43ag7K=U2`WbSnz_PP*y8{>$G9rh}#W4bkJod&6fA z6+}8NO#X3x#`2Kc(lcw<)PJI&0Cj0IW;`48bSzK6Kdnlm@79v3zaEL)ycKM)+o;-5 z4$YD~f5_fv#($7Z^IUv|_mWD8;`qCRcR;7j{NEh#c{Gg5WeH^WaHiVaHjb8CX5muo1ge&?C#wPaxnH>0N7O& zLZQx@DFgM^pfr%@5G7{gnKgXdZF6LwJ!pm$uc?tg+j9VxWwu5XJEfU695vf_p8EoX zAx2WHyO^4CDMnCi#IN}?>ud)Kmlz9CXE^uf(_aQx~lUM zGUv?G)Ap1;nvmzBCOTAG2+_(bOJMe1H`tHoZr!^i$z6D7^dWzxL2BLprk=v3<(;Rg zj&Xu8Aa`!(ze%>Yo3S)cZQV^Es-0! zE}ko%>}Zj9?6V1;t3{%m`)Va^%|B)a@B`2&QlSehX2dJ8`+LBlmx-IHG|Gc%}hmK4gsSQN+pH16BBtU3?oeS zRZ%&xv_nZ8n_7xJu@ManeqP$X0LH`Bk>EK!Gq#OhltTWLV_S&@X_jSRomm~ipc-Ku zvLB`1#ubi@MGp5JA^=Ofw7R|s;*{KALn-hUSF(ybF15toYhgN5)NtL9yQX2AV0x?c zG&mZw3bKUN=zSnpgs*7@?T<=a&KdHemlFZ&0UP`sKcQT_Ol<1c7yQEL<3$#)wRaw;w=<8El$ zD9`AFYj{^YJ5rOVs6AwnYTGE<&Aj7{8 zp%ipVI;&8wJ6lAPI+9Y&=FCWPF=W?ktC?(ar{7&8RZrjM2Xcy8J=)9bwkd z$Jl#!uqAhf*64Y3f6y2=_q_3O&YM#Y41NVHz@Zv7Th2X8C{VgJ`Qmf4j*oEC8I`-| z!fOm8p?11v(6S&{izWZ`(;f0-IV~L&{Kg~ z{F#smDnO7M2$n%I^(9^=?|Y9v0W7D59pz%pPY+5JATsbchmNJ|cq>nLWd%IEfN~hU z3(Mu(l0#1e-xCxrCR#b%ADt#RqSc?d(KMerCefjKuEnrDna+A7?ShM2*^4z^3^n;lo@$7&)nSxJ+HQU7#9}Mq zntNv6WqEdG4_W{N8sA(E$oH*w%NwhRZ<49r79yRIaYpWYtNAlSz7?v9&;c5hv3QjV z5>L83+6i(M%RLtcjk8Vf$V&`jyDQ&Ff`(gt)H!l(3^lsDU_p6dJr9Ii$Fxj-0(Q>- z_H{ske%B#>Il}zw3KN-`SP%*5?}~^C*xNDq+u5;?zxSv$PbDf4S>uor%z>KRZm-qaMy}9HUfQevP)Kn-3w@R#v8|w&W?) z>?PJp>2(JFtyR3s(;fQAbI|q&oUZb{Ky@{Sbfo#tD=$>($Y*RHQMs{!FP>u5D2zS$ zh~IIeTVoTqK!O*coSe4HvX2IC_C>7W)NEGW)IkW#tE6Map{rZDbaQy+8NR?wzR~0< z_1GK=!WkCKosj6X5XmFapr?W8)rN011~M-VL>+UHCl6Aq*Y3BC_(*7Z;S(uIK!Sx0 zls{g$Jn|CNppvJ>Fe-J@jK92?npd678Y#5<6{2?KNPU-;x|2iq!Rf2sni}%;uRa@` zq$+LCaX)0TNI1>A#Au38UYSXLWTY-5Lj@n4TXb^j=_q#7y7)Gcy4C)8aCVK{utkhZ zo$?dV{&;kL&AKy}@%9ebrhpz6t>g%??R^NcS?dW@VGqrXXXwNzKT%q{&eWhFYT+_I zg|mb!@`J7MbxU~lomtg>4AV|jwYcKV(~Dbkj|{0NIZPIz|FHQ^2pq#+kv?Lkws;!n zHdVeG`Jyl>CgiUFV;GN>S4|kDq{f zzj&;&O_!g5LfIiNF&YIhV(0z0oGqSPYmP)F^NF8;PuwP*458fd0PX?x>D`{XVe$gZ zYdD_ly9^JU0yK@DN=`bjW;lp<(aWx`$LI@bB4yn$>~x7_!iGwJ1#x)C)KHLWl-m={TnxmJYRZkl~wqbWh#1t4?5gsNA|t!>BoD=@RbEk zy|KE5tTHm+wpM}Ps>!@{jZ>I84TdF30l?S!0si=DoNt?swhFvhyYf7VB9RMeR-itSYRf3PSmfX!Qf2UI!8b zM%7#&BGM(&0aH7<*0RQpcdF5~vdgAop?SrS)t-gx;{}tL*dViPzsaCnzZpo$u(e#U zvy4Ggm9S20DU79)yfF3Tf-=+m)!WKSb(A)nYg)gT3Q5l=IOg|o6t<8OaJi7wVW@iV zK1y5i!o^au$ym`y?=m}Q&(T+f<)^*l7}wLP`~DSYV>@u%+J@7yQ0E1iV5xLLXQ_Ce z%E@n;6uGX?bQ{6@9X}+M^)|*5(zlo(jOLyxWEDj#Uj&5Z{o-l+ZGt5?NF->%xud)P)%Ld3 z`?DzGtHWW{6xLn{G8cGEVhl#_XM(S3wOf<3)B1* zW_+bk*-T;?F?X4j@5U>d?}rDtoblrF*{bmqEPzc9-~jyW4a)G{bSdOg>Ts1nMYWLk zTb+~KDSX2ed*azQ_NyS&H=eiB(xVCWH6)N~2~R%a?H3OcE6dWPicBKli?5B;e?Idl z`p%?i{3)#%q(ZCtKIlWOMi4J*IT1GWnnXM@-l6WG3#0!yatW-XKLp_u-#_N-U_cj- zz_t$LcXRjGd>uHhM`98L`g0`ey-)<&um7j{I1aTu7B`%uSE-RhOMrEEkB@_It%Z%BPog0v(uv`uy?LAkBcfy(IU zZ!9R`U-T0&rU(vO_&^R53Z`bhtU7XsM~jBAx`E#0=#t6r0v6l*Scx|RvQc#?nVsiM zOao3isxsGTb*K8yolT~Jc>3Mc;)*4TtC_Q!-a@$xwD|THv_MVJo5EE0Z7%62Mvbt31N&m$7O-lhRb^*?9 zJw;v6csiSCO?TKrF&GEf6<>Re1Pi6d(i=r&q?kZ_M){d*b9krj~wZ z!BuLCkXz~q2BC5z`0@(h6B?v`_MqYwVcaaX*?fP<4RoqI8VEM7IO&Aa$+g&JcKZ6D z%n%ZIj2Nn*{Rac8t^@;LgMhXxX8fZ?r>Dk~0{uuKh-T+P-5_?xX04!1) zTAYxFL3Vedn*Rjpc`gl&9oxsv#)S6Wb9Q8WtbnG^Suy3DD3xu{ufnn5;rB(j&Vips z!eJ96P-c){&A+)#z&i*=RY-(Vx$zFyL_0z6`icnySZbJyIpUiG5MQa0y)x3sbVM}K zNHBpWa`Z04=Okg!ivFBYw_XwyA+J5A91@~4jEdta$@!@iQIIhJsPHq*sZdllDI4S5PDN~Y+c4X%UDds0Q@Mrhr<8{^7SIz(EIX5 z`hM192IraR4HE-;vWWtve9MCHE2Q1HV|KW4=iK=xUninQ%#5yMIkhx3oIs9QZ7W`o zKA!aKPtDFZ2`2w5-W(z0PoBi1R+|$54&zan-ZyVoW`0mVzdmGk_dp8_fZ1BK zd;u?m)oSP;#3YGHq-@}loGqQ#Le#?W9GsDD-|O8c-ZHCm`}8qeFN?jUfHM!a3bF03}yKk?5GJEzT{=or)nhWjNtq zb5J-z#Eu?I!0!#cDLT*=h*A(JK#)vm&;~K_w$z(q&I)W1pd$=hI9ziy9LuO~!Im&d zBr;7xc|RcL1j#mKn5niqE4`2cW>HS%1|B0C?1X`9If*G;>i9^eMfo&Pp(mnBgEW&` z1RG@+9E?6XrIs~I= z*Z}DhjVP(@Lly}Nw78~hOM#|PL2$_vJ_Uc(7$?ka)ReY6_9)k4I*16`Stm)RZ3zjN zbE-?hMgRf;z*NL4uq4|dG(u`|k^mMAlZsl+xGA9v8i_xF7F&o09ZVgb0|hR-EZhP| zGzoAJjmT6l7^g6>ZXi{oBPL1w1oVA1BYBkYb6OTq$L>x-uhxn(-UoJNs8bPnEE81< zv=BzaKO_DT{{YV_6h-b?c*Tg3vq8T4gQX0TW6~+`$n1;tNi?Nty#f+*c#Wu;LYbKj z&>Aw$0hm-N1f8zG8JW&&ZT0MbHCrW@c(SX5^+}Fosg6 zG=n8u7_2}NGF{aGm#H|zBGMX+(G`OTjm02I1Rg2^o-zdhD5=ep1**ui-2}KyiE+7l zSx!nsfp&Qeb)PxE1*+hNzzb=Tgc))SmPW}H8cK$0BS4S8ft?1b@YXhYspQc0D3Uv9>N3uiW-pTcR72r< zNpTQ;s5uPZN?`I5hhn`zt&Bwzer>2+z!#&)Ydy5`k!w|}yyHtZ-4Q^cBuVN9+F1$< zpDq9icNe&hzH2K8*SP)GpN6~?paUY*MGp-E1LMJQ1Tabo(ZRb}fU4)h(N0)niiE1D zYe{BvtG|k76R-kRbSe?SvB5xftGSA2_+UV=pcI zKz3MD&MLrEZgot;K|ML;d`~RTido@rvp|E=J1T^@1ey&g=6tA)#Kk$uk&&+CLQfxz z*l8rN;L7_@Nf=??muR7WFAnQXvd-VCtMm1Ls)L4h{Z$kT&FS1}CQeW{;j1QzV}~vW zw}Oa(_6;L!BSE@g>XMMVZ|$jHVzH4gYKud6FQo;rmvuohV0qZ;Xp%EYF~vpZq7%J9 zii(LUVxdYCG$5p%DK0b@F`97DNfef`ii^-h(2^q6F~Vb-?d2C%eKaCH%_xFQ>?8WA zHu6dZV-jiOx14OV(LS$p#X^;qnL1)ZH8@!5~WQjr(>5$i*bkPfn4N18ZiD8VFdacp-B%!Zfqr z0G&+LhL^dw;)|Y**?al!x_$|4aJ~ZedQbp!oDjPS7o#pj0V>gnGoWl5Dz8ZKcEV4x zU$aNN_7(>}^m9n@Wk}sz`3Ui4NZd?P;YJCdc>e&inu`KYxL>hvQOc*~Oj#w~n|cUN zlrf*g0;mPm(ybX#f!PA?6q*sD-C|My0GhadY3}IH<-Hm=;0I~Fsb$bC+ejVM07OR# z_>}>P;;n%;p&Ktozj$cf6a5CztK5g!MtRfi;SG^LAAqAoG#ewDQcWts-}RNCen%$D z2j+tT-t2E8J5aRN8^OpRdej$?G7JDLTkTgOOi26a2Ap(!jGN0s%HyHPoeMn7<}i z4M&Z$7KY>5;j^Dj{jJpMgP}^8)U~NdmDS-A1TBT-_zee(#0}I(-^DyG!^K1T~-2#$`K$QLSmjA<{8!-R3&6

xDulQr1 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 ZoSdK_4n%TP=|WS^Wbe=a0JZ-B|Jgq*n8pAA From 53a8e59522627661dfbeef189b6158a6d39f5c75 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Tue, 19 Sep 2017 17:54:48 -0400 Subject: [PATCH 22/32] new screencasts --- README.md | 8 ++++---- files/jupyter.gif | Bin 0 -> 757342 bytes files/nteract.gif | Bin 0 -> 254307 bytes files/screencast.gif | Bin 193606 -> 0 bytes 4 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 files/jupyter.gif create mode 100644 files/nteract.gif delete mode 100644 files/screencast.gif diff --git a/README.md b/README.md index 0541282..b0edb6f 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,11 @@ This project utilizes a Go interpreter called [gomacro](https://github.com/cosmos72/gomacro) under the hood to evaluate Go code interactively. -## Screenshots/Examples +## Examples -### Simple interactive use: - -![alt tag](https://raw.githubusercontent.com/gopherds/gophernotes/master/files/screencast.gif) +Jupyter Notebook | nteract +:-------------------------:|:-------------------------: +![](files/jupyter.gif) | ![](files/nteract.gif) ### Example Notebooks (dowload and run them locally, follow the links to view in Github, or use the [Jupyter Notebook Viewer](http://nbviewer.jupyter.org/)): - [Simple Printing and Channels](https://github.com/gopherds/gophernotes/blob/master/examples/Simple-Example.ipynb) diff --git a/files/jupyter.gif b/files/jupyter.gif new file mode 100644 index 0000000000000000000000000000000000000000..4ecbe9aaec7805433ec1d17bded43d87c824ad78 GIT binary patch literal 757342 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%0D{mv+q*B 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

b;-5_OF0CxHJRaKrmG|t7J3ViVr4TudT#t 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ⅇvPv`? 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%0D9`)F_7r9C75cyf)jlN^t|Cwq4@WKrz;2d0 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

    ;u1SlfI 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

    Sea)bEXGu`Qft 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 A*J+i~EhRAqW%>HJtP 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

    d>9m892%Y+=3gAn=21H==APSpP7jtvRUkFg!Rp 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�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�P7kX>t?$x2@P@ugY^o=Kf_>Mb7G}EwPj5} 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 o|JV3}b2tl9KmY(C`2+3s#Q*>R literal 0 HcmV?d00001 diff --git a/files/screencast.gif b/files/screencast.gif deleted file mode 100644 index bbc3848bb65b8d7d46721a080550186f466890c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193606 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 Date: Tue, 19 Sep 2017 17:56:24 -0400 Subject: [PATCH 23/32] update README gif format --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b0edb6f..525e25a 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,11 @@ This project utilizes a Go interpreter called [gomacro](https://github.com/cosmo ## Examples -Jupyter Notebook | nteract -:-------------------------:|:-------------------------: -![](files/jupyter.gif) | ![](files/nteract.gif) +Jupyter Notebook: +![](files/jupyter.gif) + +nteract: +![](files/nteract.gif) ### Example Notebooks (dowload and run them locally, follow the links to view in Github, or use the [Jupyter Notebook Viewer](http://nbviewer.jupyter.org/)): - [Simple Printing and Channels](https://github.com/gopherds/gophernotes/blob/master/examples/Simple-Example.ipynb) From 5ebd7b0c9d3ad953bf515d6e226df17e0177817e Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 20 Sep 2017 10:56:44 -0400 Subject: [PATCH 24/32] new example and new install docs --- README.md | 256 +++-------- examples/Elman_srnn.png | Bin 94102 -> 0 bytes examples/Facial_Recognition_MachineBox.ipynb | 420 ++++++++++++++++++ examples/Feed-Forward-Recurrent-NN.ipynb | 250 ----------- examples/Feed_forward_neural_net.gif | Bin 13677 -> 0 bytes examples/Matrix_Operations.ipynb | 164 +++++++ examples/Pattern-Recognition.ipynb | 244 ---------- examples/Simple-Example.ipynb | 154 ------- examples/Stateful-Goroutines.ipynb | 286 ------------ examples/Time-Formatting-Parsing.ipynb | 324 -------------- ...{Worker-Pools.ipynb => Worker_Pools.ipynb} | 100 ++--- examples/iris.csv | 150 ------- examples/iris.jpg | Bin 7734 -> 0 bytes 13 files changed, 687 insertions(+), 1661 deletions(-) delete mode 100644 examples/Elman_srnn.png create mode 100644 examples/Facial_Recognition_MachineBox.ipynb delete mode 100644 examples/Feed-Forward-Recurrent-NN.ipynb delete mode 100644 examples/Feed_forward_neural_net.gif create mode 100644 examples/Matrix_Operations.ipynb delete mode 100644 examples/Pattern-Recognition.ipynb delete mode 100644 examples/Simple-Example.ipynb delete mode 100644 examples/Stateful-Goroutines.ipynb delete mode 100644 examples/Time-Formatting-Parsing.ipynb rename examples/{Worker-Pools.ipynb => Worker_Pools.ipynb} (64%) delete mode 100644 examples/iris.csv delete mode 100644 examples/iris.jpg diff --git a/README.md b/README.md index 525e25a..95b06cf 100644 --- a/README.md +++ b/README.md @@ -4,195 +4,69 @@ `gophernotes` is a Go kernel for [Jupyter](http://jupyter.org/) notebooks and [nteract](https://nteract.io/). It lets you use Go interactively in a browser-based notebook or desktop app. Use `gophernotes` to create and share documents that contain live Go code, equations, visualizations and explanatory text. These notebooks, with the live Go code, can then be shared with others via email, Dropbox, GitHub and the [Jupyter Notebook Viewer](http://nbviewer.jupyter.org/). Go forth and do data science, or anything else interesting, with Go notebooks! -This project utilizes a Go interpreter called [gomacro](https://github.com/cosmos72/gomacro) under the hood to evaluate Go code interactively. +**Acknowledgements** - This project utilizes a Go interpreter called [gomacro](https://github.com/cosmos72/gomacro) under the hood to evaluate Go code interactively. The gophernotes logo was designed by the brilliant [Marcus Olsson](https://github.com/marcusolsson) and was inspired by Renee French's original Go Gopher design. ## Examples -Jupyter Notebook: +### Jupyter Notebook: + ![](files/jupyter.gif) -nteract: +### nteract: + ![](files/nteract.gif) ### Example Notebooks (dowload and run them locally, follow the links to view in Github, or use the [Jupyter Notebook Viewer](http://nbviewer.jupyter.org/)): -- [Simple Printing and Channels](https://github.com/gopherds/gophernotes/blob/master/examples/Simple-Example.ipynb) -- [Pattern Recognition with Golearn](https://github.com/gopherds/gophernotes/blob/master/examples/Pattern-Recognition.ipynb) -- [Feed Forward, Recurrent Neural Nets](https://github.com/gopherds/gophernotes/blob/master/examples/Feed-Forward-Recurrent-NN.ipynb) -- [Time Parsing, Formatting](https://github.com/gopherds/gophernotes/blob/master/examples/Time-Formatting-Parsing.ipynb) -- [Stateful Goroutines](https://github.com/gopherds/gophernotes/blob/master/examples/Stateful-Goroutines.ipynb) -- [Worker Pools](https://github.com/gopherds/gophernotes/blob/master/examples/Worker-Pools.ipynb) +- [Worker Pools](examples/Worker_Pools.ipynb) +- [Matrix Operations](examples/Matrix_Operations.ipynb) +- [Facial Recognition](examples/Facial_Recognition_MachineBox.ipynb) ## Installation -### Docker - -- Pull down and run the [latest image](https://hub.docker.com/r/dwhitena/gophernotes/): - - ``` - docker pull dwhitena/gophernotes:latest - docker run --name gophernotes --net host -d dwhitena/gophernotes:latest - ``` - -*Possible issues* - For OSX Docker Machine / Dlite users, you may need to set the IP to `0.0.0.0` instead of the default `localhost` with: - - ``` - docker run -p 8888:8888 -d dwhitena/gophernotes jupyter notebook --no-browser --ip=0.0.0.0 - ``` - -*Note* - this is a pretty large image, because it contains a full distribution of [Anaconda](http://docs.continuum.io/anaconda/index) plus the add ons of gophernotes. However, with this image, you can create Go notebooks, Python notebooks, text files, run ipython in the shell, etc. - -### Local, Linux - -Make sure you have the following dependencies: - - - [Go](https://golang.org/) 1.5+ - - Jupyter (see [here](http://jupyter.readthedocs.org/en/latest/install.html) for more details on installing jupyter) - - [ZeroMQ](http://zeromq.org/) (2.2.X or 4.x) +### Prerequisites -Then: - -1. Create a workspace and setup your `GOPATH`, see https://golang.org/doc/code.html#GOPATH - -2. Install `goimports` if you haven't already: - - ``` - go get golang.org/x/tools/cmd/goimports - ``` +- [Go 1.9+](https://golang.org/doc/install) - including GOPATH/bin added to your PATH (i.e., you can run Go binaries that you `go install`). +- [Jupyter Notebook](http://jupyter.readthedocs.io/en/latest/install.html) or [nteract](https://nteract.io/desktop) +- [ZeroMQ 4.X.X](http://zeromq.org/intro:get-the-software) - for convenience, pre-built Windows binaries (v4.2.1) are included in the zmq-win directory. -3. Get the kernel: - - with ZeroMQ 2.2.x: +### Linux - ``` - go get github.com/gopherds/gophernotes - ``` - - - with ZeroMQ 4.x: - - ``` - go get -tags zmq_4_x github.com/gopherds/gophernotes - ``` - -4. Create a directory for the new kernel config: - - ``` - mkdir -p ~/.local/share/jupyter/kernels/gophernotes - ``` - - Note, depending on which version of jupyter you are using and if you are using Anaconda, you may need to copy to `~/.ipython` rather than `~/.local/share`: - - ``` - mkdir ~/.ipython/kernels/gophernotes - cp -r $GOPATH/src/github.com/gopherds/gophernotes/kernel/* ~/.ipython/kernels/gophernotes/ - ``` -5. Copy the kernel config into the `~/.local/jupyter` directory: - - ``` - cp -r $GOPATH/src/github.com/gopherds/gophernotes/kernel/* ~/.local/share/jupyter/kernels/gophernotes - ``` - - Note, if you have the `JUPYTER_PATH` environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing: - - ``` - jupyter --data-dir - ``` - -### Local, OSX - -Make sure you have the following dependencies: - - - [Go](https://golang.org/) 1.5+ - - Jupyter (see [here](http://jupyter.readthedocs.org/en/latest/install.html) for more details on installing jupyter) - - [ZeroMQ](http://zeromq.org/) (2.2.X or 4.x) - -Then: - -1. Install goimports, if not already installed: - - ``` - go get golang.org/x/tools/cmd/goimports - ``` - -2. Install gophernotes: - - with ZeroMQ 2.2.x: - - ``` - go get github.com/gopherds/gophernotes - ``` - - - with ZeroMQ 4.x: +```sh +$ go install github.com/gopherdata/gophernotes +$ mkdir -p ~/.local/share/jupyter/kernels/gophernotes +$ cp $GOPATH/src/github.com/gopherdata/gophernotes/kernel/* ~/.local/share/jupyter/kernels/gophernotes +``` - ``` - go get -tags zmq_4_x github.com/gopherds/gophernotes - ``` - - - if you get this error: - - ``` - # pkg-config --cflags libzmq libzmq libzmq libzmq - Package libzmq was not found in the pkg-config search path. - Perhaps you should add the directory containing `libzmq.pc' - to the PKG_CONFIG_PATH environment variable - No package 'libzmq' found - ``` - - then: - - ``` - export PKG_CONFIG_PATH=/usr/local/Cellar/zeromq22/lib/pkgconfig/ - ``` +To confirm that the `gophernotes` binary is installed and in your PATH, you should see the following when running `gophernotes` directly: -3. Copy the kernel config: +```sh +$ gophernotes +2017/09/20 10:33:12 Need a command line argument specifying the connection file. +``` - ``` - mkdir -p ~/Library/Jupyter/kernels/gophernotes - cp -r $GOPATH/src/github.com/gopherds/gophernotes/kernel/* ~/Library/Jupyter/kernels/gophernotes - ``` - - Note, if you have the `JUPYTER_PATH` environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing: +**Note** - if you have the `JUPYTER_PATH` environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing: - ``` - jupyter --data-dir - ``` - -4. Update `~/Library/Jupyter/kernels/gophernotes/kernel.json` with the FULL PATH to your gophernotes binary (in $GOPATH/bin). For example: +```sh +$ jupyter --data-dir +``` - ``` - { - "argv": [ - "/Users//go/bin/gophernotes", - "{connection_file}" - ], - "display_name": "Go", - "language": "go", - "name": "go" - } - ``` +### OS X/macOS -### Local, Windows +### Windows -Make sure you have the following dependencies: +Make sure you have the MinGW toolchain: - - [Go](https://golang.org/) 1.5+ with cgo enabled - - MinGW toolchain, such as: - [MinGW-w64](https://sourceforge.net/projects/mingw-w64/), for 32 and 64 bit Windows - [MinGW Distro](https://nuwen.net/mingw.html), for 64 bit Windows only - - Jupyter (see [here](http://jupyter.readthedocs.org/en/latest/install.html) for more details on installing jupyter) - - [ZeroMQ](http://zeromq.org/) (2.2.X or 4.x); for convenience, pre-built binaries (v4.2.1) are included in the zmq-win directory -Then: - -1. Install goimports, if not already installed: - - ``` - go get golang.org/x/tools/cmd/goimports - ``` +Then: -2. Build and install gophernotes (using the pre-built binaries and `zmq-win\build.bat`): +1. build and install gophernotes (using the pre-built binaries and `zmq-win\build.bat`): ``` REM Download w/o building. - go get -d github.com/gopherds/gophernotes - cd %GOPATH%\src\github.com\gopherds\gophernotes\zmq-win + go get -d github.com/gopherdata/gophernotes + cd %GOPATH%\src\github.com\gopherdata\gophernotes\zmq-win REM Build x64 version. build.bat amd64 @@ -209,7 +83,7 @@ Then: ``` mkdir %APPDATA%\jupyter\kernels\gophernotes - xcopy %GOPATH%\src\github.com\gopherds\gophernotes\kernel %APPDATA%\jupyter\kernels\gophernotes /s + xcopy %GOPATH%\src\github.com\gopherdata\gophernotes\kernel %APPDATA%\jupyter\kernels\gophernotes /s ``` Note, if you have the `JUPYTER_PATH` environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing: @@ -232,27 +106,60 @@ Then: } ``` +### Docker + +You can try out or run Jupyter + gophernotes without installing anything using Docker. To run a Go notebook that only needs things from the standard library, run: + +``` +$ docker run -it -p 8888:8888 gopherdata/gophernotes +``` + +Or to run a Go notebook with access to common Go data science packages (gonum, gota, golearn, etc.), run: + +``` +$ docker run -it -p 8888:8888 gopherdata/gophernotes-ds +``` + +In either case, running this command should output a link that you can follow to access Jupyter in a browser. ## Getting Started -- If you completed one of the local installs above (i.e., not the Docker install), start the jupyter notebook: +### Jupyter + +- If you completed one of the local installs above (i.e., not the Docker install), start the jupyter notebook server: ``` jupyter notebook ``` -- If you have a docker install, point a browser at `http://localhost:8888/`. +- Select `Go` from the `New` drop down menu. + +- Have fun! + +### nteract + +- Launch nteract. -- Select `Golang` from the `New` drop down menu. +- From the nteract menu select Language -> Go. -- Have Fun! +- Have fun! +## Limitations + +gophernotes uses [gomacro](https://github.com/cosmos72/gomacro) under the hood to evaluate Go code interactively. You can evaluate most any Go code with gomacro, but there are some limitation, which are discussed in further detail [here](https://github.com/cosmos72/gomacro#current-status). Most noteably, gophernotes does NOT support: + +- unexported struct fields +- interfaces - They can be declared, but nothing more: there is no way to implement them or call their methods +- extracting methods from types - For example time.Duration.String should return a func(time.Duration) string but currently gives an error. Instead extracting methods from objects is supported: time.Duration(1s).String correctly returns a func() string +- goto +- named return values +- named imports ## Troubleshooting ### gophernotes not found -- Depending on your environment, you may need to manually change the path to the `gophernotes` executable in `kernel/kernel.json` before copying it to `~/.local/share/jupyter/kernels/gophernotes`. You can put the **full path** to the `gophernotes` executable here, and you shouldn't have any further issues. +Depending on your environment, you may need to manually change the path to the `gophernotes` executable in `kernel/kernel.json` before copying it to `~/.local/share/jupyter/kernels/gophernotes`. You can put the **full path** to the `gophernotes` executable here, and you shouldn't have any further issues. ### "Kernel error" in a running notebook @@ -277,20 +184,3 @@ sudo ln -s $HOME/go/bin/gophernotes /go/bin/gophernotes ``` Restart jupyter, and you should now be up and running. - - -## Custom Commands -Some of the custom commands from the [gore](https://github.com/motemen/gore) REPL have carried over to `gophernotes`. Note, in particular, the syntax for importing packages: - -``` -:print Show current source (currently prints to the terminal where the notebook server is running) -:write [] Write out current source to file -:help List commands -:containerize Build a Docker image that executes the compiled Go code (must have Docker installed) -``` - -## Licenses - -`gophernotes` was created by [Daniel Whitenack](http://www.datadan.io/), and is licensed under an [MIT-style License](LICENSE.md). - -The Golang Gopher image adapted for the gophernotes logo was created by [Takuya Ueda](http://u.hinoichi.net) and is licensed under the Creative Commons 3.0 Attributions license. diff --git a/examples/Elman_srnn.png b/examples/Elman_srnn.png deleted file mode 100644 index 723a964c9128c061beec719382ea263c5a114872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94102 zcmY&=2RPPm`}b{+B%^`M6e?ttjLJ+_QdA__*?TnXO?E>RA%&6(MJ3sU5)~PlMU>e< zGTzViJpcE7kN@vEp5u9b#eILrb)DyDomY&3{-L$ZJj@gdWv#ZB#xV+oIvf8TXQaoU zgxy;;$Nx}y9Xq5(dDzN3j(?%I(mkX>Stb9;s>r*7KVfp$GV!8N)^L*lQc-TCbKwse zytNM>Way?6*dVxbddHqa6pA24TSL|8e9uJ2g?-0+S69uoJjJ%(J^IVt?aSf2+E>J` z-H9u^UFV`QT9mZa`p#|kgRhf>hWT&kjvMY!52NRKbLX|tm%q#HkAA(~z}-5;+xcsD z%;S;QT({rk(@%bn=6U)b?cJ22pBGmD_1ib~!-v&;0x; z^Qr(}q^HNy`Oqx3zrv4(GSyce6|}m%Nls2~tfOGlJr(MZuB{;|gOr88f7>107=6#F zCgA3uJq>gr0J4KOz5@}1}kdGcg;9JeezW$^3Q z@XdQ&E&hD(NZsqkf3MC}^WZ_cse#JGO}owv{`v7qOiWDW`0)+REiLVpK|uy$>sdC- zv2cp$RXuU|Ace2`J^mreh_^_aI`-cE`)a4WulpC~^GzdGKiN zTxP7id&p0J&z?Qead8^<_G0(%-xu7rjn3BAwyU>SmiOH#zN#vWVIAAXjr7*m)^9SE z1#a$jYj~3;t6kv8;H}7KX=&;1?M=IB(Awcj*!{ z7RHy3f|Jp)v0;UU6123mkMX?7Z5tb>8j0b~u1x&=-cj((=f_4FS=s8w#wd?34VG2G zRD<8XF|1p+ZpY4@M^Bx)bZ)vo`}S?>9L@Ne%iDAXB_#UtH76U>gqJEeJ|)vo;=xRzdJQ8&9XX_?vBsXkdGgY^fC|doj!f~ z{NJD3aFyAQ9u4HHzx4XXiWN~^UthoAKU^1+svLBnAyHsp)aitgQB_kD6INc_-MYD| z2fu!M^D76koI7{Ue`Sf=(b17{%^Gz)q8s~P1+A`(4OA*?#&Lxxc#TRO*d-~ciMJ=` z`Z>DkifCIumm*DhfhsA1>!^z>vI zi0M^Kzj>pFbrlvB#gLGYz$NF*&jz5hdL;ukE^YRINN|6U+H(Gvr zXvU@BX%p3ZB{6ZGr1>kB!-o$$_r190Z2ez~y>4!n>oN46 zpE9G^%gFY(wNZqGvgOR2+HW6xTvj&y_%v5Z>xU~!FFxcQvHmssw(GfZ=K@$qXHQNHuTn%}*1dlJ4XyJ5qIt}-`)Q?jxDhH4qew_}gb{P|O#B&2S9rs&wQ zW7yd08XC0X5)$ogZ7QcscWNCu(ipW);PKhFH$+N!N%;t8;^Yaqm68%^QgU|B;)4ed z;)(Hs1M#g}w?4M%ef!S2>oL{p%D-JTwY8R3 zRyCd`idI)jjIDH0Y=AOYW0^Y(50ww(-EgI(q4cD3Hx zzh>vooxJ-muFnuWsXwNzKQ=Q|E3|9ZItofWB|^<|X)VRNA+Eal+Dr-yhVQwl8Rf_okdnO?%FvB8LyT`h}lg1^lZS z7!aVLXQ{$-Yv(>@oZea+wT_CiW|O4z@4q>R5(R~X+U=*gDYz>YO-=f$`4N64C8g6Z zyqQp|NL9?p;7iZQuyl0n$@NU%cY$MNWhLqARp&b{1?Yzh3+I1kDXMsQNXt2QQSdh8 z6%>4Kd^JJw7(@|}wr)^4d^p~IiPMZhnAL>N?_mtd~y?w6*bDc z-~3el+namY1q24RQ?}0>WY7KW z+jNk#^Xe|_QOaZgzdtoI%WRvr?cBLWQBe^OuU2Q+iP`nbn4h` zi^!d0jU*=}1$T8B@AI2u;o;$lA7){k%*oECLVu@^P^-RYm}gvkxKQEZpYL>jetzPo zo-hI&>@7Mp94>Rc;N+v*`T30KhbtrV_wL;j+qv`KT}~c8zO^16v%cpR=;-L$+S-Cq zPE57baSK*+6WuPil7BcXMSHe3H(UA7O;@g}85ppkN5&`Y_ZX%{Rb{5+KYSPoBw&4F z^6#&2N!PB?p`DQ;6}xFy=?fO~%D@N|WJ$9Z;mRuuVeNrfZ45#}LTIEB`|^F!K3UhU zU5oCzC++wTXEX#xJY#zYhvX2USm(>#rC%o}-^w3yaM&Ii78bK{8|Okce-XN*9Y_sv&NqKj?@-exfVCRWPXWpjN%=-HJq9r-+E>N+LOH1Qc zQ&W?&ZxbYtiJqRGYp*Nsdw>mOy{>ne*{rh8)C!B0;x1rsC z&Xoa-*mr&=tKBzgv^0S&F!9l&UFfS}fI}t6pRfG=CVy9uVyrR>CfGjp>2PMj$+)9XptL;v?T>Dwp*z1^km!;_T9VnDI5CB z&$;m``LdiiapKOOrz$8b1a)feP@#}Mm>IOfgdHGqkNeA)FVemf#=yD3I(MzUzD|xa zDpFNdjla4na7K8`uan7XsLEL%#^ZdiXJo{qf6AOSHTC1C2CRz0rZhfvs@V1~is%qt z#$1kcw@8|U?zySYAvrn1b#-+H#>UYo{A1t0ugLK2E@~VwG&H2yym|Ba3m5h?iGb2RsyibQ4M!}nOay7p@f=Kx(j z^ZzT;kiZuk98BTj;@Yj9lZH#e8>_{dIXV~7SAMRxsVSz=s{@5dz-{2wLDZT8*&}SH zL{RC_B!LmA_wL;b+7P&dW? zqEc2?eigXf%$0HS`0=5yO;_&R?yb5adSvj+m#{C5i6sFhXj2|b3m&CDDGJvTdX8Z` zpz7AAI=_DRE-ER>AWzfdoam+4*zCf>w{tN@Po6%tw6}k)WuZQHi^eGBqH@K>KQ(x= zLEF!_)YnI#aLbjimpVUV@#e;!g6=10Do=UN{{9_~D%5E7DlU$tX|P5kJR$;XyxHCy z{J``_kn-s6pGP;x*NsoyGBw*0!=_K+vk!ucL*VLG@bLTV?XvkDA^#5Q{%i z9?8n5!`sG++C*n&W>&f@FFBbV9N{&MH5J}#IH~{v%ABJ5-VP@6uFR5q_H3A&n{)T@ zpo&ln0YI3ToJ>wnXJL*A9jcA;dQ;)tTe|kut5r0ED z_ez?q9V`7>o^ajkl6!atedsFW3xA${lNtg{xBKts{(gRN3tpdH_zt%9>+68RZbTp8 ze363X{souCwg2L7{MGA}7+*FH4(j8_JA9YrBqY{;dSuRkCGI=f)3G&RIz#Ckm{BCQ zll0R!o}Ql1JV%(-`4d!}?EYp_ccfzb&YimNx0XbsC|Cj_AEvHVx_PEATjtlVU()#a zv-63i8W%4rT3K0HSXfZd!ycS^%8WW*4cuno>Y9Mn<=pdxX=!Q6_^IQD4=u0G&st6N zS8N98uiL@c7dbp^g+}!F?S-LnZ$(_j;Mf?Wq@?86(a~YBwD<(l`@aA9akC?4l2KSQ zP6ZqX|5{yJtIoeQyVn5q1Q17a{A91J%IS)Wd&Jf=qs+{L$e}X{2@BHzis)t9PJYN+ z2eyGC`MPWRhy|j%IJwLnJ9co% zy9#i6i0)fTUmK&u-D!2pjGJfS)!_qoEaELr@7llI}m^$;wou-_m|2%@34q)0gZ z{0Z{j_`syZ_}Coa?$G#$ysttWFE$*xwQt2QH3qbGd)>h3ECpL=crBYC~C;G~- z+v<)2;xu3(y{56*LV6HZV%L_xI%V!^s4D%E6>n!|+{Je6kmF&pv9(n-GP>Gct)QSF zgo=xcvora7D1ld7&Ybhb2Ia4xdYb+|1|oZ_ee-&ApG>BNrhuke&yvm?A8eFgK6=iEXyD04|B2*N5R^Dg{)6(GU*Ea!Qi?4A{ld)yS4>jQe z%Ut`YDdMM}u_Y%bV?&3Omn*&U|EreXHaD~Q$0^eC2_0Gj@U+y5tG&I7r>6`!bd9?n zFhx7$A@h}6CVT_WJig3)@7QU@O`EVyUY-lR#BOPM^zBXG$vunNKXm@f03V#GxRFi6 z;{PcfGJt|LZ4kJiv8gFK5$&y8xAF@MCub`3Ql&z=gtL3w&)i%}%cQZd^#2=5n9awJ zzppo0rgkW!;v+X({Xu!WaZ`kwlim5o~H^53Idg1`sx2>N&vV|>y3u2yu5r> zXJ_eQzpj#!67q?V#8~+ErOqlq{}NlTle3|)HF%_bb~n%3;^JcQ3i=YBF+c@r*U!&1 z+ryqdeTuqgJz;1~2W&ipZd6t_zpF%-ozYAiA`*%)*D5;9QFHUe#l?%eckhOfk@Mok zjoH=fl4jp$iU&a9+dxc2l3!x+ITj0C?Pg?R8iHa1b#CQWZ))rs^q&7g9?&?s9JU6n z9Qqo?I6P}wX7knWaLNy8kC=><#QF(QV6BQQ{%~n7^qG96RL%^-TGmm5* zI0%t*s=s0lKR-Xj6rX%?KnqO>$dFyQOC*MdhKL4dWMpJ~Y8|A#RC$jrct8Xm$SW!i zW8G_ja*}6%;zT6Sxc|Zom4I>}X@xT@%YH^DPJ}|T!bdistO-g=CZMkQT+rlDdnYU; zM0ND&(fs`UszTGUs@mGH0|AR!FJ8Rp`v&g24Ojdam|Bz79+(IZ%Khh8?UX)TZ-DXC zA@?m%wA(&>sKw2i?w_dyrvYrb$(sqy1Iki^$}rY#*0FnH5ce!B1fi8Ed|;Ynf!<|+ zCY-zNFVV#h9bzEb!pjT4um~cHtQ+Ot^DO@!=LG(@aC3Y2{^v;}Bb8I9cz~{;4}@R7 z%s~(dNZyt14b&|JDuOyBL+XTF`LVOp>ifrgsr&upyuH1p9Nym%NxKwSe`Al6`|_gC z%Yc6yu`w4G|Lla+d(_0FdurQX$ZKloPmm8mFsf18lT%XYga2?JKo^m+dCf*B1|GP( zk57H7wDn^k>j6jc&W;WtGz)ZV2m&gOjyuS^ux?-hR9l1V=Ihz1EBJ(-iHQj`F;p`L zjDZS|tRCw}C8r&nDoZZ&5!yOfm2s&vH`s-g_n3jW`72(0lYGG9Zg8YbR+mZ#rrX`U z`$k7cA?vu^JSMDs@i!w8SZ=Soh})r50m)MN51c3hjM(SDz!nk`B3>TlIus7{4GHY= z;lI(1i2{i+oT66U#kQp6V1W?+3Oz(vMur2_g)Az(7Lzk8pv9yYOifK;y{bT~`26|v z%+GhjMyvC0l-odHtalM0klpO z$EQ#C0Du}87_?2joW;&2mvF#;As9M`y^~XIPY(~kgLvOMX8$9B(#~B{V?TbV<4uDD zYU%4Y+&^9by1=BM@O;!fzv7~0^VRLC=w8?zRFr{N0put7_g@T0dCGx8j>cV!-;nYe zeIvOkR>XT(pw<)@H@790L)*uXb&yxwK`sDMO7CSZRRa}ztSnssEVvEW`J=Ni3>)#{ z{M1^oFX!&!h`Y{f^Ha1&vu@<(r5uieHE@?nL>qc8MTC~DpypZjazTa;nkXfpNmk5M1 z1}uJ=FY5Mt0bua!q0!Nd0Cj>}w}xXos$)~5K61&}Frqg1Kb&-ecE&=-gE9zZ@6O%3 zmcPf^2}aYM{(&DiyLIX^-``*Fly6Q9IIl(9cOBM+!yvSOKOYL;Wb?jm_GjfSwF_>J zm7Tt<_!<_5^$QQzEPgT%dg}C~>kL@J>!jAUjt;tOI`uz3J(3Ps^j?A!0JI+pAqqw4 zka%L-j-S7N4NXlYK!Xw9y?Z_UsXDA*_t7`pP+YV7SnbWs_&)dbW#7BUmgJ&g`MSq;o)#6>@;*W{AgECkJU)?wTv^jP$wi$KTFCM=;|)fD5@3Qwc9zMgJ9GaYI)R57=6c5D0xvXs3>^%@5L z%}+<=<%vR2WucH#%E8G=P>qR+36Rr+zE4;yq0gSl^YZaQA6~1Mp}3);p~1K^aKD#oe!-s9X{jn#b zQc^nIXg001pnu)u>OwP?vTa_Ut{lXVR!BEvX1x0Tt}ej^kcGhNOm=KOILHg7j~-Yq zUFjSv2ylG}4TF@&utsi1re;nxxGz?lyx*KSvEau1goTCWm6Z0L64|t2Lp|=}sG;G9 z(P$k=@975ucxGp37tmS>V8QZVl9_RbE{CU2|6yv6s3-$;1Bb7V*Dx_vfBd)}urmzR zfkHfC2!pR*zYa#-!L}rly-qLKk*~5nqNd-p5Yn1l+K0Y2}SsSUUt$nZQ92DfXPoElZAB^P*fUOk_7A7Pn z2KSIvFXJf|wkjYGyqMVI1t$Pe^ts>Urmm(&q`>`t zbMAE&aLR|UI;7;}MAp5EC1P62F7t%YQ0m;RN(U#(aYFnAu@r`1ho|`;4l{BT3KUer1nl2u&z>!LiVU}0 z-$iJCzR?b_?Hm59ki6hQ3W|wETYokSA4A40WvZ<)FNfveZ9se(5b6%|$T zJ^(NU`pVXp+va-^023lY{IDEjM$78TyfU%xl$A5bukd22jLDs8S(yETRwTcp@d1`3 zI%(&`JOp74)TxqPacH1J@Y9LB1T{MzRhKPxya8lE5M>sa3@ULWupWACqY=YZ{k$(V z5o?G_iz=#~GIDb1^}6Mq=qj%w!m;R4KX{K;f}_-cyxlB3A}uXVfacq`lh+3lxumIK zSCB{6`M@MBDTyujTH(n@XS$v^aJu%tjDc1~9Am5-xOH11+i9Sdhr(!p<_&S`Hry@mV>tkn8@Gw5-EI_wI0uFa@1mbSKZ=snP$WdclS?ZwM&U>^(v+=9HhX!DV6*J@;d{^83~40#~YoXMnO+a6i{|O-ngEN zOY3X8JTI^xwyZi<5Zt+jySmqnw{$J3``&}47ZVf1(tS5Y-t#Nt`t|Ei?Ju{pvts~Y z{rKrqiLKcO``yIR$j!|yR18GNC1t%eQ+c)58f_pEA0|V+Hgn&Fnvcb?(b41$mzI{2 zP{Q0)pKi*SLb`yQ37#X;K5sIV=F2KQyu89LUp{t)@@W*nDgrwW^{#7b1^3}GSVaZ> z=1M~w&De>SS!H)mPXhk{ExR5%gH&`q^AN@}?Y(+<6i*KU3kEo7rzG--_{rBPW7ax2q(K{f5IczEa$m`bsG6YKiExmW^4^p?G)eymJ^1G?7 z?i%7^3fp-){Wt;`(ca!(*jm2~C5kM=#oy!b>&{-3;?B^I!iA$x14f2at}MoKaWbHU zSU?^_fdJXf>5%*Tb3_;J8`(;SPgMccLJO+~M(p0DA*B6__z{-Vp|8dki649k#sHW<9kN1E{3(CoDM5{G0H2jjERd`Fs$Y}lg4I2pZ zVPIfLkMWjVAFw>5CfN*K6x@b9ttg873 zhdMhuLF?@QxDibP_LAO>-Av#QdWi<3z&W|OBG}TFpiIzma$TteA1458Yw7A*_dIcc z9pqWyQjApu(up$Q<|V@nu~_`fOD>OQ?|+|!oarsm@;cIE>=u{02IZ?3mDjq>A*n%gGw_#jzc5VNw09}^2!`sEgg3$~?EZNXv zv8SIji2(OX+qI_qiaNKox2rHB5>ftk_B$IJ>3_$#C7rF zMR1`S$n9r`qnyx$J$jHqzszX>z{y41F%z8KDnHQ=!uf=L=`k!V#96wgE-YYu2gBio6I2r zLoiVjpFaH)=)0C{Oboe>V4#!Td-nVXY;m6Rh5P|?0AAMzv8R@PT+&vwU{z7%U4xdp zEJ^^>5txGYT3b~`0V2d@Yh2Hr_&$F6<#~2AFbE|UF@`DEu0=p*y8ZAWEAZoFg4`ZZ z$H+*{C_|fLV(TFk^Z3n8kQANNg`Z#bA9>+pA(jcs%Rj5-JA=N0tPR2rU2?m|X$Jnp zA3uH^w3r?>1vTsXJ?`X47H(?jM4(h8n*m8cSX<&nDw;FkI3FZSd60&3mqGZu@UFC@ z41Yrhg5Jw|^5JP!7~{Bu{-MD8Pf4lo?A(a3<;?v2A!r?1G~=ppb#C`o#*;)BUhCNS zxR8|8W5Y+we}0_IFDS@?oP#@ZY0d8AWnks4g5_p#>Qv9e0lcP+(g)$OCLB4-p$4Gz+J#KXaMlXRnb&I;w?tMuZKs8+m!PBss&CPA|ZU+j~WG8-g}G< zE*BlD4+P*RYtzfrmZ)jGQATK=cV|2KMULExgVzo*oeLXf zDoMQnc{s#)u~1YsH16o8X!$Y24sV1x0s__i8=fT3S`>7oNh45cfesa)ta4FEk_3d^ zchbb^?LxlJq3hN+~+1tXc-u+`(F3}9~(x+!SW{(2R0%LA?=7pK~_l`nNPlX za}9Pb?7(Z={TyJ{0L4b&x_A%xKkHtq3!j^2=cnE0-P-~C?>5+7}Tu}uDPUX~wz3Kr0 z`vDY5FqJ^(mKJMBpM|A)z;wf)jOe;D$T%bN!;Ecs`NR#%;J*{u{Nv#(P}q6c+1W{! z7`*4sojZctx5uD*u6Dw$&`C;9k3%?B7)1=wi7<=0`g)~5{OGkY5Kpm4vDaQhKP95y z`}bQySoBDrM2=YlniVwoG~a$O1kgBA^uen1l=i|wfsi#cI2a6u;_GOJ6rvDhFyItC ztOl^5*+zjN3nW2FsudDF5}YJ*L!!*1qr*_?&d*J7BLIW|HsJ$k!Qg%89J|p25|Ba$ z9f@}Mwgk3^pd)r%>&I$KJRGc3X=vN1*=)kL9RFV{sH z44~q8_OmEWc+b}06C@pn@_>#wgF=fHIS5G;4J|A+l?y?uI6w?5Sm<{=*rGXmE*oC> z*2)J3bj|qqcs>|78VOM(0WnFM9qVfWDSL?ELXdUf=~yD}4X?mA?;z*OePI(Yx&&T@ znvZw)0HW?g3Fb=BUR_yE8{O(_2GJO<=1_;14q>n;k1*HJS zgi|@~JEm2V$R@8E>k{=^%IwFd>S`+J2KB(BUBiKZ;K@iE;RPcqMeHze9Fhwr8LPnM z#bixYL4Er}V!L)V!fzw*5Cu^k0u3;cv#2oKUMjeL4R6?GwRLsFkoO=}0v2|0+J6_yc8dN&=q`qlT%0TpARS845CkBL&z+DUcKhk1OAlkwYV0Y zAMszio;Mt_w%1P$qXt86-^yyw@E0m{a#~spOzD*LAb1fdTU@BrP}U!a`^L1U_^mCN<6Az3-@aVQ2IB;tlgxmnaH`3*^!d;otm?kwpV>TgAKSK?1RozFN zJUk>`UiJAiFS7i1hF3|76^$CUc-zojS;#*$46K95sSwTxf$&|iXUUcq<)RRBHWN-R zEuDPVqzUN~3uk8*Fj=%nUwO6$WUmk=4@37iSzM+A{s~3K0#`{2#WB;SmX$5>4}MnXd0cdQgU_jI_BlR68T1sc^abdJvi~;g+28t zsI2aYYXP4Ysb^?{a6@oKR`t*t5HK1h@t|$vS z0mKC*`#cg;*yqNtHvOyg_I1>!&Mpv?&F+I<(qK^=xfWYREALF1Xp=$*ejkV%<1CY& zDu&07VfyB+Cj=O&y?diT{XJAn^w1tGv2~oBe&|=ufhHp<7K`AGDxihYj;C+sCV%`` z1JwQU{OoO0<-Gq*$Mcl3AZvrrk3A_gqE$Poepanq8f!Z#C8Ys3t+;Hv7&ayT%?5-U zfYl1C)@9Mmu37S_1}qgQ*X~oF6|BTF!qEqSieETKWMS+9)s0Mjp>QD^FnD5h4($^D zrv`92VBCuiFT#(3?MNOR?16=6cfM}32N)Pfw4|_TB3@NicHAA#aZDefP`OX{?*{^X+|n!^xO5(v;Xj&o0xubR zqi5l2yFbqaeS%QO0|lKB(X#%_T+!3$Azn=#voprdLx15?^cIs|ua=0U)pha4d0Iq} zz`xn~`1)*fmIRi>zkNkdEH*m#fJ|#ajAvZ8&h2=x_Q@u^&WjfnVJD*Re#-GND`)oY z68R+y9SSZ}HSxgh?Yr))XnJ{hE&cgqj^M<|v&BdE?uFpxKscs{%u4>;>`X4U;8dJn*`+;=jxq{OR$w=L85I;vH7 z4Hbg$QGf&}J25mp2ba1;tZi)SHgd-ReJ4mgOx02!V}eFMnU z?>zA!7!??u!BjpAGK>7VDPEw#Xb-lFyfz|F7=X4z4&Rhh)zpl1Nmtar?B(gtF0Q47_$g7Gc#jXCyp16pms;5q-+GQ*N+Qr%fU9^&+=c+9HN<1bnrr8 zikIiPb5Y3D_BJc@frGl+!|R-5oB1Z5>B8i8+#w=8Sd`q-?S$VUKw>FA4lY{#vnZ{A6nC)VOPl%j1dMjtXT|3m5L8wb}tD_6@eBA2*UtB@vpu?&V)^jGTGMQ83b}*{M>UJ z;aT`O^xqQO3=vV$FW5Z1_as#Wr8-1~T4wii!rH=QYH916_6|>dP?xT!PMg35+Y3(a zYWN1ozDe?Q73hDLCY~BvvoxGsC_z^u-{q2dCcIE*0jU(AZ5kRHqO+nj!-TT)|AyN4 zUoQPvw|~R`2cBK077M{rpbV3ojAkPLVIJk|MzxeLeo~s6nh;&9P++@Wg!o=d=Y+70 zSB=KaqmZR+a~+A!ZgLg3_FV|Idw0tcW%W*bi8Rs*&k)7Er5x1SIf6H~1CWPIbU+g( z3D&r2lB5E1(yxp{TP21)NvC1RrTdIu7gpG2IcGsuu@H(3XHU-abJP4-CE#P#bGDPt z3Zjsjun?uU1VLc%fN@iL)y(l;D}e3bzoz8>nl?YxW5$kMb{a{~TA4Xl? zcE!HY!^|Cq0HRUSkfUM+#T!Xg{5d2%=dGrw#>Wfvi>J@ZF7`Llq?I z2-eUb&?nace|f|2!+>e22LcpUUiAjoox(<}D4{1x&7c)r^B}hq3 zLc(ReO%>Bpl2;F=HVwa~qw6838v<+((FcwnGbrwmJi~7MKakHlsu2T_8!9Mjz-(Tp zyNNO7^yy&;>H%)X=90Lvjt(=SKiJ`z8+1>nVWvQ?fu|^pWjG`7T2G9sYE@zYK@cK; z^PXHu(0PK43YnM$2adpaXYZkky^RR=bDJ2WeXH=uMIFPa5Ns$ur@E>Cn*{*xVaKo} z?}c@{&b+L`7-W&h7fqs!c2niF+vDp9t;hUI_0e9-KoM9BSZ2;?8)8+)bnrf^tzBFy zDhuc$naqx$dCj2e;9@N>v&DNd5cei-TFQcY9geb!up5PmDdq$ng=7!mU5bf|YXGP8 z>b`su4i^z}z`NvseUlZ^n2H`AG zmZ9`~?RuaFh)nD?u=XZ#JfPUXo8pa}T#!w|gr6{*5)uKvN#?A9MLeeaE6yes78XVT zIl!x{!q6!CLPCZQbubFcFhYS?x5DwyH&?Z8_cd)nAXCb+h8D_=pp+CF3>*a49p@Gh zL_m=vkpesv-sgOycF+d0^YRWI^WtE9tCDU&O@j#Qv-0xV*RS(+4Q*w<8~~;x7RuR? z^uX7WRAgXONK~|uU1rx?v;YQR6a2K7ci!Oz8n4MaKt^7W^oE@7Fp)Z2z@t);> z@?#CaL`=GMi*?(!ZT}lGqNn_CggCnJ?Sz>bI^|l@69C3V*QTi~&;d$pm5OP*3Qr%! z7;&_#Id%*|xiAsH0ng)r1w!@m@)#i9fzOfYJ;K2n`+I?bvVfxg8~wYvd(c%ACrFUD zJ5)ml%gy8KewY`kknhp|<0_H?)JXi8fW+lx;(@vTdIPjx_3qs|m}2jPnZh^H=i4aU znrVq7u5M~-s(0+a?K^gafUfR0RQrjFY1PN!z&LSIM9ZL_e?J{LK&%FloDf%|>y-_|nZK_zQGK z64SDtwgh)1gK?Ow@<7oh5CUc=E{>or97#b71^4Rp>t4T=8sSmlZExKp8q&u6`j&xO ziMa7&3Z88wB{gu?|h*YD$V4rb+=EiK5onmxJ|1_7cR?6m8Yu$fAd(Cw!odEKkZY8lPs_|)haF^WVv^jT zBlv`4IGp2@26`cM45EZ#2FtGdE{Ox&+F#!N1=cVkrysRin`&#nT=&$U(DL+@LGF?f zSn$1;9~-oO67W0JWex4}Wkm&v%R`ia`$;-KxN9v^v8KFBw}2aALIxKXdq#bj_1%b4 zPP|I?yP^;%8o8YegvarG@P8AC=7CbFHz~SLpBHC*CVka z$S@y73xtfE|LNfu5pZI~SjKx5KfwvtL<+WQ0)X`GJ9lW2p)h`VUiwQpvWjGWA9kAa zEHChq^~3sCFQx+eYfsUuCDIVNV|DgHOKWs#kgGHcOA~;?AJ*KH;hio*gZ@- zcGmXUHtoo`ZQO}TALH|*n~mF5k}u@``j;axaC%3ASAzP#zvn+Uei@yp=ySc5yQ$lTH=livZKM`p0i2=&c{$zdye4>ns^iOG{>CT%;0e*J!gt zuOL=Be22(qw_t3jf$`!ap5Z4mKm1crRK$9nk7^_bzhIn)c#V+hNt#aTjjshJ_+1BH zt%WRm+i+$0%PfjNrUA~TI_c=?)xk*v)d)t_ndZr&Ncns>(t|;RA`!5|5B5uRY-}yg zP#{xzXo``~r^)2i>tx|@DjgLSs&IClHc_lzOWgea{S~g`b7ODIigm&1QI)Ep#r*T0 z!Y_cgM6A0XzCwY4xF*dcFCYI4jBF*WYruK}q&ASM8K5rSY&J-iJIM@ME?*Qo=U?^;@7 zVTh9GeP(9myKk62C;3by8Xy7Dq6uu2JgqhV&&|c99@0Vd$8=g+nuSyme>JAXgV?t4 zjbKTIz_w_++X`a>oktMJ4YI-dktgq3TO&cCAPj7Oh3d}=M+UY$7g|a+u=H5x6iFfC zHCb6(lR-ak4Qh%C##hjPJutFHhU#7ayt?>@8EYV>0cGF)9$?u>2~hKt|1JEJ+vRbSzJ-UhYKcAClcBo8`CPHVx}Nt#emlf{JmW< z6H+r6fRvO}FydpF)okzY*Z<{TAL95g)M>YI-`!*1T$I% z>deunpCS5_TSVh)L>R>0Dww(o-GSljqh$%SeBuC-AT6pnXoBISqLQK4jkGlOjD+A| zW;RVRs(K(|22=@>ISOw6`)J}liu->a1sVB-8U6mHguT!=BLf2pM@)F->dMVAXW9Un zuNbe2g;>S<>;bww!ENAzSnx)F1((=?1PScw@PCk&no17A0rIW|O2P+sJVD_xF>$F0tv6`hRiH zVq&0D08*xr1UcOYbk@Mgs16xeGI)HcR|MM>Bj8)eawShFXQtP!(h?MHxnBqLJPb-5 z=ItpUj%0`f0MMwS6g(OWbWU6T=8dJ5f77JcLINkn7J;z&au#e!0*ZoG{))CYF)qHr z$yl>6=8oCC0qYQ5`()Hlqi=4z*qg@dkK$@5TQmLM+3P9`{^7&k??fW)=c~1gndB*RJU! z@9yR2lY||_2^>6i&|4}ru$@~d5Rr%j&z}-D1BaA6aNH@zRAuZxO+jbEkQ>aJgtI<2 zXV2CE@?i_Z(x=+Ix%bGsc8sk-DT;ohMN4ZG&ZxH~iP*%tz^J1q@zdYipk2N4AD=W-mKz#||vJNwFmNquOKUfRwJ5Ryd zMXp9jQqt96tpUa0BTiDmC_aX+$3#5m!~4M2#JG-i-EFg_a4yB~j^q5LBb zs($R)c;U-J#b+&g>r@8L7t>cDVnGiGum1U~GKA zSuzoWr=N{i*60DgDDOMLg>;MqPwGJx6|QXbj5?4dlvFgM?~9uyY_12A)7=o~(34f* z*7+`LJE7>=E}Ez8c53TRdH{yj&0e0<*uC?YH3heXH+QDG5XeTppy zu=wHbL(KFKA|zw{%3lG^17q{uljo4$!CE~g(N2f)Ov`YNwrFf5lzKMI#_hglw#bd) zW*FU;UB0J4ldwkoUMpl^r2~~3ZF(uXu;=fi6u18-k;rj5aLEv!mip?mia9$%$q`iO z`;IKSCWfF0TtTHGXQ<&Y3$iU>#zwblsHg}>S8b)fUxHB}GG_=DE+4ogZ?-JcWFtdb zCuCauq>R5Qa{Mf4bH-2X+0kEAwT0i1(|BfF)>RR>|LxGfM6w#}QBwxUl$yM}8#ll8G8aQPz2ADO`-lPu8V+JW}$ zY4KnUh%ZZ22psJI?nutS>M&%SqrajcdV7puWsYcB%d6TTXp zyl}#I9FsC;#kv{WY0Y1rS1oh8hmkcbEDWJ3+4K;jZ0ia9I} z;&Eb12S;2mLLL}6Zfl_dGB&<3>$gP4v@8OiWQrTh4Y?(1SkyQdPt9A3ni_50f;Mn# zd0kBnH2??vBHvg_-Zq5rA*wVcIjRc_=kN!X1Y9Fumjdws#|Kokw5)-JiRh8a$I0bb9`NS^TyyvGs)gWKzC9TJya8)$ zL`1!|&aXhur5pY*GDz+hGv(loMKI^i*j~r@5gAZGb!e}DK7eaP+&-W=xP}p3Q5Z)C zAeym1kWBgmb-~+DM5EgbsJDP2Gp0hdQ2wMQ8(MmLLMB1K!tUMMj?)$Vc=uvVHA!nL z#r(r0D;;PdRz)bnr5U3>sMM-JfmnC&55{Jd;CrFMv~_mU?5pPtZVBKs}>!(kf5W5ISF_V#&CUedGl|e^7IPJvoi#UlTQZFUDp+OU+ zkHk}z_u;@nAM^=S2^>i_2(bp|L>)v+Anij!V!8GU^u2hfXh1fuTAwqKV#SghJN5~% z$m8p4c7z00q8gjfb&&nQtPSavu=WY;q-M^JWnV<@b5xHRCC{j0S&8;9}W!Fr(&w}51c?g&O6bWt4hQb4GLTHuMoP0o4#JZJ;eLyc!nDzCO6kmrtzg2Lme^;r~qCHPUb+LNuI1L%p@a@Dl4{VWifw)NwR*b4P?YZ1! zvsF~o8f{Pg_F*qiPr_^gc;V>)c;t7@-J}?j5^P;`X!j|8{;$94m-`00`LhW4`Nre0*f0 z4on71DiNy)oiiAiie$)OYQR^+WY$N^Nm)~K^L6mY;I>nPE7R!cnqsO737BAwEz%mT z3z-$yQP|53V9uAsW{PfsSaf zNOVJaB`4+qG=}5EN)-sUI74szMi;u=?B8E@SY@{nPe5jv68wV3d3(3!&JU-9# ze38%XyWP*AhF=2-KnhQ#;|DezB95MwC&TH(AUG5A7Wv>iIu}Uf$=f>|4i6BXoO6RM zSTu0}aN1LIvknTT1;h|CJ^(mf-P)RfM*_8K5V+Y)ARc3A5%5;Xe3a}cMbs^f{ITLQ?lG+j=jER+cv^I zk#4L76s~^rhD9cgg<^rT34x}ia6A^G{ba%%5@p|Go>*G-*Nks5!GM$oS{X^VKQ1oz zUGD7fX9eT(U;NDkA$(!7Y@n^bKLKNpLr|X4j>zFQFyHk`v|GU&uv>v}!?Eviz>3OI z6Tp2&7M42HxL7A&>!q5XYOHF=>uX z5BK`@j0-u4vHV_7_$9Z))UX#Qchsy>6|G5S|!1=dW z`EdBi83(9}mY|cwhQ6bHh4Dvh@SLVSHaZa|q0U<4n&Hreym}S*X&Txw4os*6X9O-t zK$A$vm?`4*INfy(0-FDsgNCw?dFi|!pAJk~;7lt*Wr2S|`*ofcgDjHMhOoa>L3H5C ztLMr>KZUT*h%QV9M&6#efka>z4xQB6daNvwLnj8OVj|9foE+Dyczh;iwWeHo!ar_R zP~gTJfx+-2m%V9>v?f~GDp-u%5xTp?o=K-K}Qxz<A{*$ia`edC4bB%^ncy!qVzm${ z8GFNUiQNcC50MoIps|3N2`KE1GXe)_e@m-5$mn9>;N_D;R>{%^2`aa3b#QZQge6U! zeqj9^(Az_a{PlqP<)xFrK9b7?ZECzR9V!t9ZCADM`8xu1w6nfYt@^-o*j#mSwBS}x- zRZPgFJ1)C{@uD(lV6qeok{rhxDFAsB6VF&)z#btQTiV}H=z>WhhWQhgl2`Ev0V4}k zHo|U?H={b%Vy4XE>{-nZKQ4 zF&4VgL}oLOpJ;&}iJuKcSRSWiy!Vf|OzMrkK4xj7;1y#If$Qgx;g0g%1}O6gNxI;G z+I0)hK`(ewB+rhic0!d0sYO`y{YZ;v{%eK5|NcP;|36fncRB3l_(_NJ_i zQW9Aqdn9QXA%zrL8cK>}Z!)rli=t>K*_0KMmJ*euw8!sta^KJIdG5dN%gFcp`Mlrf zIF92y&U*AKf6k=GC35&$Y>=g8=JY?rkV*B%Xov{AiehV-l_9lIoHaG|Frf%YL+|%< z!4|0S$+u>QQdFTWwTjxO+uI#6D|dS<+DDq_Eg%!_Gcq-irZZdO3s6K>WlrMwckR9? zE~T_!K9!Dd+6whnhP{7_(Gowiv4W_Y;1d(a^+j$?-d#p42;o>9r<+6@Xn!&hJxP`DkF%`h;c@0JFvC zo(3Ij3Fvfv+4J_^>Q>}6n2VDa^-^Chu^QQnU=5Tb%BNAI+PhU1HZ=X7a?QM+%&KB0 zl7@6s`R#;%{&&;bY|8%rK_)4X9)gL1#Tx{4qfMirYIgf5hmq%(XutK&aD>Ajv%I_i z>1Bs{uS})+l+vG`UHXSP)$eMb66GWVi0>;eVCcTIu4N5&BmgmPp%bN=BB*=$`x}KB zX{FY<(!wtG3>cL)0@K%o`~vh93Nj$jzrPIZq31wwURu#6_0uP1LcKINcr6-Nt(D@J z(<*tI1npT9J!J4;0WPV$cTGHVwT<=Wf0=%(DoM5_b)LNK&sAHaKHUEi7+_)Xw^>+* z9r>~0-)q;#(2vkR0G8jUkt0?O$x+PV|3!meFk=+{^u1_P5ur%^H2vQ>iJqJSDGR7x z_;55*yuI@yzVuzL0CYqxHRCkE##F~5ppP{1=7B+uiMe5j$Q-YLUr$^O~9 z3b%%b)Q~iozQ`v4x7-qb*I{IW!R_IsZQrhzJt^yiD|sLD790g#3xeThE62!P#!vxO zeO*G{MH}mx!XF~t@#Vv+EIdMj&S2&$hM0<<<**etNLv3_`%gEd`ljYPCUS6wTzbvC zgCEgD(;^Hz>9`XX!_=|IW{NE}D2JYCx#X|HQ8fE_ON0uv9pWD<2}iTej_ ze~NQBkvaO|Lm#NgHA{tNU|x!}Yq8CHnWd!|BOrzeZ(yA$3SR*;@yHParSrj+BaQj1 zL|E+RGhI&{2@G^6;tsa2U#3@ERgWu-b~&KS)d?hZG8n9!kcMDP6Ot-Mj~-2RWmMGq zs*89l0|l%W=I8p`WM+=y5z zj>IQ~AWgyRTQ&S}nn0i>TjK}67tEiZh8+r33O#Z2{c7f3&5okE=a~YWcajuA@1v5L z%V(2WBJr2VFQ81}cf6^~wuG285PE~CS13xh(VK7PzQ>al>#3k4W*-Q;;yguRsX5zn zy`5b&*6SQ}8i_NTTtwPCZ=N^?5rrP_YT1RT54b)av?A&SDyylR<&^xc4fPNsR2s9eD9y)Of`RZdq{wfrb_{O&(TUot# zjE9RC%#3&O%Gs#y7POKi&CUJmHZ9r6-`k43(o}hEUB&szJp2(Kn6Lfqf%H>k^B%+( z^w|e>T{aJ|y$7Eqq9S;k=B-=jIs9PMel7mKVwokw20M373klo|rh|BswrO0_m{F(= z`Jc#Oylw1h|0uYYfI*1=>zt51XZloYI{`!Mm3?2e6eSsveu#7CfxUa9 zQE7mR&Ni`G=ip$7LX#FpalrRuGap$E7V(UUN%Dzl&fu^}UcMD|A2%KC*MG?0nbq|? z_rp=imF2O^tlrx*A&5`C7!l}7cM|mP1H$wY8WE130@To)Co}}Y%>lbz7srJ?F^$W@ zPj`nB;7{nQWPFoJY_WXiUn~FSG#;H70`J+=pHEsPDt@vnP}TkTc<+^$zH)@c42c5w zTi@qNsilD=IuuS3*^VCR4FP8I=Z>u-5_TLazHex=hd_xeuIfiz9E=ttjf>4bap>Sc zW4AVG7p|B{sU41cipc2Tp_#w z-EqA(ZT6{8doN`rdLVctzr9VrYbeJsoRAiou}!sW+Hx4s z4Ku{q-#fAv#o@_2chngCESPiTwjQTMY!7H-WW0p|!Qo%lC83}-N8p1rd+9{Ao3i<3 z&YWudtO~kNnX~4!cz@BRp3M@N6VVbvZ3?}^b#fgSGrm4#*|TW=q*{eb9F!;K1B*>d zloW-k^aJ7*Y6E+6fi+QaCwaJC$ zqI4KKR5WU_l$u^LEC*tTG^6&%AZk-gJC{yWPa>blcb#2q;}#TrbQW|qVB3j3r{OnI&nau%uN@*o z)(pRqS4GNNZ?f~)o_o?WGl%pJe^8Cl%K-Y2Q&XB3gv1l<2O(19=*_VC>XV_eGw6*S zu!#yBKsm0Wq|0Gl@)f2tx$3e;0egMHeaz?H*A)JHO&jBbcyPRv+fpLAxcRE z48;{r98v?t4L8HW{**$)^e;3R_T?xz3?sS2tbS~IbAATA(0%CtN|zsKD?9h==LdQY zX));LIs-S65uy%O9r&_^7jM2)^z31Q#?>r%WOyM@w;jn7L(94 z_1`Wtn$QEI3{#odZvRO~sk3j@(|+IYxxo{qPUw&bP)O&JGNS-sX08?_mKw3CjD<0D zwIxJ%22nx&ecIy{ZTs|vW8+}xs+-aE(+_tWG2)>4(gTY3(Ne6XC4%hvUE#zF0WOTQ zOUfshQejbxE`P7%=l*0QQOx*g@2=X~GG)#&9dBY{5|CPet6D3y1E5^RPtU;;|6h__ z2|xMEFZ5rXwbfI^Uy2LD=(WRtR`law!md$#J_1X9DjZvZr{`2;28yW%^T|H7h z#Y??#Z=tCH8>Ed7yXs7}bkf1u7cDroW}{1iicBymaP{+As7_N2YMt=@{kC`S=58Na z3OcI@X)1*-*+zOou7dbtAlHL4sY@fGmr@b5H*&j%Tfc~#bkQ(RLvH518dH`V5`{J{ zHTUUPVybexrKX_c=!-xHn?3!i?|XFCx#api^ap@O@p3%TNH7i$YH?sqlp7mvIQ*k` zn;Codn6h66pj;wfFzpaTBw@%_xkI&{aY;dH09wmty-j-#Xx^?}!S8#EfGlZdy@wvX z@PKP9nU)%iga7-^OB(B@y)$%%3~5D8A(MSbp2Q&?^hA78h;p-2KW1fS8X(BI-eY>b zQL}pjararNh8w^7R+pd6(zw2l^?;loHxx zqlRkNoK^ExgHXS<{`O(3w>MZuWby&oKtkCO{zV5J-i$?yJ`L#BYM5+gL6<~-o|qZN z8K4O_2Q>n_jbqxtXNTMCmm(Hqcrc!f6| z8|o*8_+mEzBzK^D*V<}F=Ac*2zhhRFcPC`wt?fbUoZt&Q$eWCqnYuX@=d=LP^R~BJ z;&zAuWt4NNOF9C+ZyG$fbe_y`uaF?#SEv4pQw>))=-(|V#2F$m5+GmL6T^hUyxe*Nmh2WOb~AF5&y__~x!4~o8oQGnQ2y8%6e z3N$bUZ8Ra*s{%@fb zW=xh7nnmA9r-W0=LjdF$%1$0C;9Lfxdun;r1Q)=XI%VJgk+~4MQNiwimX!Qcl6*H+ zlrf-KpiD~+u3AU|j)g-*1@V(2ks6%iNmAr_fSS?=Ect7+wS=cFls*03+mG2~Ghs^Z z+}RW`Zs^T}>b{G9jXnetfQYNIld@sYJ*eJCqtilo8?x$vBVnzqs(c7Rak6Sq^;zh0 zy104+dl4q0lg9WL===EwppK_97;SYx)imwMV(*>g8|H>IS*_rG=PG?EdQU~-MO4+0 znM|kh0R}C5rV6BlfkPwyV!bE!yMb(Jmt?pxrN*_k#zn!*aS-(Gt`jFx2V4uF-9u$j zZ{bLk4$AoAi(%#ez_*W^9&;2>xMOdtp1dB0Vm*a(=sUDhf)T zxCqL)g&8=RFk98$?gKLo7`NDl{F=uDA)fh0pIIz(J$#FkSFWUJG`a<)oDN$6;#$!5 z(=*-}p5t@HM^+P0r&X30&bN_U zNt*;NX>>%ZshCW1W{3xZ){zQGO0qtY)DiV*qm{XN3@ih$=yCIip)x8$C(L6lG_?*h z+dutQSY=PAe$!320lf( zMNN;GPPnVx5h6gKkOuc6EG;a4<|KAQPhtV7AyZ>-GiR=-Q8dS7oZ4i?!U<+seQH*{ zUqoRfdN+nV6Fz?2zIShHpa4hhfqna4Om>JRoL|r_ycHH^3AIZ3hO1S@uI4R+#c=lz ziemP?38*8yd8geM6e`E!VI#>RBg2C03*@6robSBnv8tY{j>z?x$TEj>VuariBA0Q! zCZZ<87u?s^I$C!V&y_*Z+!B2y=MCoziW@dah&4;5T?Yh+Lz3S6Y6RRgLM`S{hY*-# zc!cr+yjnCTlx;+|v2dRU>b$@skDn~oWEj(kt+)5@(0c%c)U52@8J3eY6H*pr1N@?; z#uMA@D|Ey(3XXlEh~4I$`-G!j_I>ndB91g0I;29X0bp*WodH8%@ylGMv%NQ#4(Uoy z?L(9nQTn+|YSD(ex{?1>oaDTlhARDhd&PpvjF>(KZzLhKi0Q0BGJe}&N48<_CQY7h zv431)--_<+-o1NfW?3T0q1UHjxVG}G_+UzyNqNG2^ElWw_|u4EQ}TU7_^$BvVlD$I z05Yg}bKl5MJY=yI;f%}N8uv=&=`%=pD=oA3w zWZZ$nA_OMc*L8lgVLc-`AJ2|yx1;lvsZ(GCUYYk5RTnof`WPBAjF=ij*wIav%f$*HKP*dfyg$l`6&13bo(^!SyzE%2O8c8MjT8?#&58dt*qKmV} zl^d|Q0F;n~1P;Xnr^9z>lf{yZZAsDUcIc$z0jmYpDyyilz(j_YimG)OL^^;^TMEA) z`)?GHDaF%>{DNe88^pA1WC2ACK9tvCwD4!JQ@CSpqdL`3-aj1IIjB!0BMUOdm#d47 z3o6HbKiM_Zl=;e2y|;;l3~^tST)578Dta2(%wvNnkJ zm~y3h+7s%X*SQlmFexGXcBGwQpF__zZDQXkwQ1dY90xGUKLLA!jGF37kuRaUk5KIS zmsJF@FM55l)yk>Plwqc8M1F~~XbYtc%6X<`_nNt0W1ZAk3JAiqSh`U3BV3+Pnv09B z_m(YVhA#*S8bflC&9S@>9Zc@YM&97PjPISlk%9NIFBBb(OH&#_oM7uMdwE=paklR; zMlFS#R2zCeal#>nNdW;fU#zJJ3@E3D(VnX|739rXcjqj^q`t?}AuIudn3h3gK=jciSVm1qR$QDD_YFGUe+jZ1pW8+<2bDaSuIIq@W8V1x> z{TJM*4@Oj$ekXOB^Raq)9Q)QCf>N6ehKXQoRg6aIkSekonsEH*O^)LgoAU!iZj?I= zBr1l<5Ppn7a0-RI*ramNJ;!y`r!Ez}E!Jh!X6G%oC^l>uOXvqUFx|74Y6aOwLbum5 z%r?W01>E zs=vO*js6QcR{(|D)lE|U!*PsO6M)#o+$2EP(n<NE( zvyLO|6li5g5E~gN`SwYL?w^bC63$$Hs{YZw8T6uDsM?EhNJoPNn0e_ zQ_O(RUFbUURnopK;5g9qJA;xhGL-`3;Ds`ph$6X{({=dFsNc*C(@`BbUlk_mCt;3= zq)|^zk;8&6b5{PndQ8YvD0f-PVY*??ym^_-=)|FJ*t}O<6bXdee@p=d;+c=Gm`gc< zpg=bM8jMWf~+r4$%5sp6Dc-RQ~)w zHI-5A>5}AEac&5xF<}&v@>0mVL**?LBz{p-)V$F+a?*CFmX-yr0rqos$YPY}+rjOS zzNANdweQ;%a@P|3q}dT|q4(0ScZ#x0A4^6%I#9ld0q>J22jsUdz&9jHO4-zu&!)_I zQD~zelv%LtuR1r|fEmr8wHa}1%&Z_LeMtBs@>{-qLeVPGY4E#h9~E4{0|4>GCW}f- zG|6vl-*K|Z8A>RS5a?{K(xn?99n6?r0!jvi^>OKz#l#w}HdJKJvOKnawx_$AJv`&F z)w&S%;le2K4o{vr2xnr<@L6{*`CP7KP!hY84)X3r9TU$JN_RJqRwA=9E2eLI*t(@-6DbRCXi#o2I z6j-#r7_L|5@6mcQiS@Ritxi=gL`Ew6`@Fc#)yEcs7z@?Fo3ngWB9o)=NmA-DygFgR zgv00h+uPZVfsJ9{s3gTXk=zVuI+g-GYSs&~cLwYlp;MpZ#w?o{W`vg+G4oxr%et~H z>;%Xz+W0%G#=C!%0W&d7VpOE?XS#uSgK@=0ogQnbbb`4;NJJS8p4vuX)U5TJotzwV zzjB9HfJBB(eqtw%o=lm0MMc%BtiSE&=T~e0!u(8mArDt1vu<~WUcSl7+Y8eNHhWVN zR`7eFcdUbs0s<~@8S{x*g==hWeF)E#l|`@hOVE)?k|%`oPiATinJ*9mx@uV^@zC}^ zqNu4^yMc{R=piO)r`MGYydW1cCP_ftY@@zVn0AQS*p!s&b0$>;gK?xn)47)}Y$b)! zTDi7w{vNRdH%2_oe42GSRlZ^LreF0XHx0h8I%vc|Cb0McJ~TSdzti#5Ytm#&$f;tI z5M9T-D80?zgJF+|uQD!p=~C|WhhHF%%rQ{`NK^5x9D=;#)G3R3MhbPRPllR|x8-N3 z1VndFTh%O`W{xoxl|!r8X6}KR>xsx;qN`zz0)=S8r*l4mQlCJTY_7JUSe9ku*lAESDMBy>(RQbeQ&11bkAF4S4--HS*!jSdGX4X2gE`VxtX5`yUWy9 zROI;7S16{5%0v!Jp3CfE;o`DEd7>HjWHJg9vCN^pfsXk-@s8mXp}#;vK}w=OehfD= zu_XLTjUIcYd#N`A8KmIK-*>g~Is@mT-{aVOtVudd=gR=F+`~_wsv>4QDgI-%jUm#+ z?ypqBw)RmA5GLm4&8ig9o2lsb19ro$!5%WASOC;S^yJ?WgDG zofJ7+DDes17ZzRxGGf-TEcPq?Ye(`}(@Nh65HC0>qR;oRI*px8=hz}eFwxZLfuu1L z`Dp(BGWR7L2VeF#2EU@c8SK2*ir2-!BkherVmT!$j~j(T-M3~X{&9ee6|L=W0)dhO z8dBQKzQ9OBOR5xm(+?HL&2M5R`zg|;1L7d&ZceRA7*8GRQ1E#NtJ-HA4Yr|dLs4kC z(Pa)1^KtFt(*4Nb94jUh$RKGFh-6OSc6+a@-HAx376*PUEV717SS*; zf!=5b@Mx-B_0WPiz!d_M&}PC~KFAUb|NecCt1h?n*ir&czguZySO0{dhpg)mnIGl< zkYcZM7cP7-FuATLf^I@Np2#nDHIDxt(&A%Mp7^37|Hn%0!IoTJgeh)a(jVkkZ1_R%h0rtZ0PCR$3N7>dL42h!JN87~i$)|Qn4(JYu4l~B*ZRR!H z-dNaGCfT`9;WiCk`O(mpE>Pbos*GjJTAv+MxgTSIQw8lqDbl|xHUU}ls<=p;rR5+uWn3X>YOi~`m|JfSLg&WD89ItRRHeLG&CbV=0Ao| zHIS**i%oko&(f(mafY1KONt)D#^F!cA!$;4Q(bw{v(>O%R5%*r1QITRI zd|>g`geV^}FQ`^;*9%(1hsS>U4SL?a zROW`(APF?!@$;(|N>$d_R>;sUd6t==e2K5bwKb`PWj+{b)!=?w6`BB0UkFu0m6PHftxjj)!AO{%jlFi zKUi{eU3A$qxaG&DJnPZ6e3)1|E|`Pa8Yd9lN&_@>C>C)QCsUTwnIOGwLf@)8=}e2} zhB>?B=!wx7!$~Rgx<~dvpC?`m2+mduEu!TmElxr zGjFtKsa=kK?V}(?Qi$xiTnlb=_@cc?Eu{oyZV9e(d}*aK6*~N>3Nr+pMxSd>l)Bk( zM2=R685UY9ZifhFs(lB^=iY^SXMMqfw|OZ{&?0nD=*JzhJCT! z&n7PP#j-*G|D!~mHp3Kn_* zBAxP^@yeGTLM{VUUHH37Gb!9bj=9!E?!#+-4`fym;ixb_sDPjA9Yj55_cKkO0WxHQ zD!p4qMhWi0UKfYI|5~M^iKLtQD*vcaBH6McvwPU zL*mnfAu}u)pJW6H^xP5)7@(5xdu}S-l1U|S=1|+zos3O1y|DZ@Pn6+UXaT>B!Hk47 z1OkzjYHyD8{=GYrFN` zwHPFvdR(RV@ZZLZ8wsxqtPBk@2-mXkq?d7VZ*I-9V**1O#$jz%GN_3ggb%GNt3uk4 zxX)cG8B`~8(B)SSCHpAXnLld@{)!>m=_d{o0KR3P9NJyk?u_|d^$YKDP3Vy%@=2;u z^Cs)UVe$vXeX8S} z5=b0^bm${*SRfVct77L5awUuVAmzE-Q<6;E)s5eJ>{xZu(6QQ^2qDySvLn?dIaJ@s z=(1TW2;U*R7r8#HlxYX!R=qR(OhdvH&k-99bzt?!KVPzOpc#lS*;CbS0RxA^dO=YK zqylQ^?}PhQXORYFc@C!Zv!L~qMN`|d)oEXA;T!{V(6tIYdkR$PdGab zZNF$J=|S=fk5KpWg(~mb)OM2{jV*nLTAgu~2^u;ME|zj{-$qx2s-e$BR?G@iU&>K^ z9v4;+F`&{S7p3a?k4BX%fB;sycgUA(@QnOd!cffvcp&)n=T^(3o;kB6z#!5FAA#io zE-BISHusr5Z{BGx3{q`R4#1l@#Yu@2nLg|Z_-0M$fVe4;%A!UawQ@mv(gwK#6|8}`Pcrh=NSRwecI5q<* zL=%qCbMl6Q@HpiNudub1J?}IGN^;|IOO+kL2C2z3!D7wdtJgXGNfQ$upR0ZN`Ow3+ zM$e2~+>;)+WlV7jTt^~2tqs(8o*&#q<$vQpe$}6 zi^<3Y=+>GD(L{yKv%^wpFs6|^sQzRJu0?6fiMv|$EztolsI4ke5eS`n`JKrz0Z5ZV z)JZlzBrLzI4y%?+6y#`+p|B2H?EP)~hTM1NxJSrzrKN@%YqW;Z=DurR7cW2+emxc( zaBGDL+U-WD8RYV_H_xQ3&XMs!J_W#tUcY(+7#3#{-LWBot#!@3GRp zE2aj4N00V@WpXv2nc~2AmW?tZCzo}RnGmTWkrXip^DWdtrv1q);^R+4;Kn-P zYapz2<8_(hqJUakJdA_zR1bbhScA(D!>i}vuhCjB%rthlP zcNsUhD{Cq_%qcB<-)(>p?7yTRWy;pYX54NV7Wp3BdChgrildB<>!?vpwR<|qcIC?Z zq+E8+`!UJ0Zj7%=`x`YXySf;7cLtv#IPu`l&%br$%$ad3mbam8C(?)#K4{Gj5<>?O zV69wvabjj{=mc;O8A}9;0JItGI%pjHU&m$*>Hh$D4a08XLeY}{h~sE?DSo<{(?>n- zPD&Qr!?MC%GCfaZvl#vk-Gr#8cr`6rw~m{q>FUwB*WR2$LaBTxI0c}l)<+yt?rxg3 z;y@!Q!iWrn=%8Cs$h?ZtcRN>tQic+e1DRx#FM?Q}BI9M9Zywv-*7^n35kjr^TRLR%AC+Eey?=7~6R@WhkBQYx;PVUh5om_-bO7I?v4I z!M+=6dPWB|_4^-9K%xvrApreR08a4!yUyh;nLKA;wR`3dcUfzU{6au^5PVga1sT5^ z48zNtZb-)IEVDkt#DUq2rgl|O;4QIz;UVI5RhwFhimg3gJ{y3Nj?r^1psnkW>4VqE ziCUpTBgVK|28A-)>+?bzia~Pb@Y^ilyoRJ&>wr2S1)sr-;;Knr*#~T0(M6}U|8)`Y z4N?V=Q|dU=jXCM?LS3l|s7#61DO&3L_U@H7Q-E68WcFqJW7@dYS`l-ePh?ntN5UWT z4|RdchC%rrI!OHd5hgUJ+av`C&S+JCWYD;IDv?0U{OJ2JG5Wo~-W+wBUVrVOdlbCD z4hryaHo6#$%UXKsmxcYd``wVnO`0I-mBkv@=LUD<2sXO@05pofDO(Q~E}gP2$o7PmXQ*v=V&p?9OPI4qQ`+W( zv-1(|aeL52_yaw&ax8q=NSGX?<&5x?Y5s(uJx^4KG+j4*BH2!dprP-r2N=^mwugK+ z*R_n|fR$tB-utIk$Kjfr`g{XxU@!1iAD;>5zKPc+Pz2%H&a{N@Aii>Bi8X#v3!u#S z)X+k#k@NQdU2h3ODqMTdKFYRq8iD8$h8f{TW}j5FnqEOgLn?m?d^eBx@-rc!qnj8 z)0+c!JFV6_vUXp)HR8hrEDha(1IA>-iaJ>Q>=aGMym<$%+pJpb>+dgy_DR8r13ti!%vZ1RNLIsVj9dnQ6vgX#vNL_@DO3Z&CKWTL3 zI4GOp(FA&RG5ZzS!$rP(v^2zND72*Xy6)Z@B!u2R|2@45)Rm zu>_1IhixOv6_GQE(;iLj)|nHmtuI6`%oR~Ff^3leC$l2qL^hPCRc0M9vtzOZPoq$i z_>(9oc(e!|Wk%s~Z@ndvH5IGi1Pqu9r$6c%;s*3cOfWq@ejpYpWDn-*;%Ai;WyD*M z(d&N3+7ouP-%4@Q{Ns*;eafoMUn77<(eHZ{JoQFeCV(ncaoL(wiWgPKu}6*^5tS?j zhpbFHvsOOV*uA(2cH$dQU5o=W@3vHTbFmT?Y^Jsw!z!pm%NK6gR2efI?G4Jsumy#( z8x32^p1&g3e0T!H`c=D5WTUzYG(@s?76e`Jimq2oC~Zhre->%#7E^VhOWPJ56pOM0 zyCs2;i>fUiTkWcq4x2|eh(m-dp5Y&bE5^dJ?>$k#^<6nyzjO|K_}h=4<8m?x%j39WfH15=PN6kbOWG0ElIveeLULExqk;H-obbMb%7Vr?t z9mXO*YXm1K9pjTH+x`9ie274tK0RX7A?HMjpu-fR#Z2&NQX>k0XF0YPaQ3GC2MlQj zqr}tMc19(j<474_VPBQQk@l?$T{Vdcb|X5%UC=+w>%QSQ?TdT^DC~txM;(eo=&Dy; z-0J0wk!4L^7t=pT+F`7Y&u2CJPYLh>IHDVs7zNUV)vNnY-*jTMQ~bY~S*#D`fAMoB z(?SY1!4qRTwLSemOCz@%R}Mt^$c5o=d(x+>wTgMtS`4|v@}0VP@TGVZP&RrPw>tx z{{GXO)^(*e5o$=6cz z#8<8)U5ToJ;5Ko?*5-{lDJ1w<#<5UeKi^o+K`TSyl00!eai<-b=sqQYTF6Vd6>8>1 z+WT2VEsme_tZ5+MwLeh$db(bZ%s*NG_%kJ?xztM&3Q~Me*tO1{jQsG!=;1PksTlsGVbF4Ij`5YFmgaVJ=|KRMGWWl z*4~q?%(in%B&x^Q99w~4aRP%IygeD*K7hJwZI%%qt1TV=Rupw=O(pdgThZG#=U(c2 zDhl3B>d6o8r=jt6VQw`)d;}Y9DD+irR&m~i0&sGwbci~DVVIrWwdjTK25@lFfV*Vm z;&Dxju1;}l`N!Iy znwaumEr3WVf#2ySkF|(t;_>GS)@Q0r5()@eetfwT%z4s*-8fcL#K+&xY}>J;vZG_^ zv^I;umXkK;9yDVP3iRBaf^~PEdg1^LZ#Y4^i@bF{r~2W61eBUS?d(V%$`0Y!nD6kf z-OqJ}y9^6#lK-qxe((4kAR3d{Q#(42-0klrAL8?H9>q1J5NIkQixSctdJJVSk3sHe zG+t^p$?$oC3yH}X@+b3%cKeX02|Ytw z;=|OLTAeOhl>bs4(c5OPH0hwgDB?BCht23k3cvhhzty01&2BxfmsdOX{GHpk?Kj^{ z%io7Idp-s|9qGvZFKM^<6DZ@Ii=Gb`H!biEac81wR_-|BT5Pe*Gw=(_bo7SFP;}ei z_$`3Ab-wP{xig;HBmB(`Zlp9L*BFPG_VPuGagOW@Y06)~LC$W2AIV&NJ91v1Q%TyO ztg5Mi7s5zNvu7JC^(u0@32;Fm=oAceYQ14BGf#N?Y~x{(1b5eIPM;a)<4xrV$0+V2 z~Nx~Xm$YOf3`WXp5!T>sYjmw(3}dEhjIxzv?_mp-Gh=Xl?3n9;ns<7#z9ctEMPyj~OYpxQkSNn$ z-e@V0tnj#qHOR}taCK7L^O+%V888SAj$e^N{ebLtD=bv%Qd##wN3&+$({Q*)AQ-AU zFL=VHT3t#2Cfpxbh$l`;IjgyL;K>dlRWv7(2+kArYI$Q4?KosRqHCK{Co+K4eeoK> z=UdBX&=T*(^-E0y;j1 z_DAth&Y=F(I?yR_2Tl`gM>EMvnbjtz?Hvl-$l4kwaM3}Z9can`LmMJowJF+!QWXwC z*38pehqs<6X>FVd!5@im(q_+4WGmn}&|l3T%~%~Emx%RypfXl*zIb1ZBEcvq&`|J_ zVu(A}5u~)Af9m0&zso~p88<9-!=E9C6VNKx|2R^i=HA3FG_2nSwbd6570N@Cm!Xji zih|)%I>vtZ0Fw_?>;|x3;@MDDzP<|AR{tc>=2jxemcwtklxQCd z{sH_i*#gdHlIP^&joc=0AT`-+REGUe^1kdZ?I2z_bari49G}O55KlcR_BfyXU9@58 zQuJ6d@a8t-d~i%qQ>WO7v7w>o`#7z z+E$zu>CM#oMV(#Uvk#IC3_ISh))KrLcup(Ir?cP@r}h!n-l+xwUx{D_@J?hc%qfV^ z*!6~UDD5QUuBsIE2(oDe-GF~}DAnS^H{=TKS#L`5MtHM@XGg;FyF;zZSzrR);!G8U zRyqtpC-3E%`-pZjge~K)?aZ7-FoJGYP~V{kIc6(f3Pm=;rDEv4Nln}-0V&1ml$GA! z1r%V2cpxqHy&GYpHI!^CYo(#5HR^$V(sF2Lnz1!N6sx8Gb>v}n`P)^Wq@gAaiGit(ue#-lj4hJ`L3 zi*3>w_p>7>ZTm1{cdI82uxmoYHI@^&K{1vyA*T8?c5&17s_ScOM`)$82pd^j3!(`P zf40*)JOJ*^(uxv7mO#xINc=VP*pJS=m>2+b2jPEZ5Rh#d@E|t!w5jzA&|yysd&YlB zAa#>YU$`LtOQ$iBDi}ZTKGIc@6*gE>pL@zP$!N z^k&P+_8OcYw2gxqrMWY?fYDV9o>VFPutClp>;iaz#(TSMRQ24G4#CX*U=_T7)WhbjTZ?i2)iWb;8Ied+TUuMA&dVq>YZSO^3n`0g_T`4-aQEWi4IF05 zE?h~06-aZ* ze1iZc*nLL^4~mrQ4An(|}O)0eO5cI0_H zapSsMtt%hr=TSXSH(KYqrgu9lnZJJjUa76$g9Ag)(TXtPfTXM*|DBYjPbVfm&2&Gx zLrp>1U2DphGuZm8c&w5v`KD4-LGo>k z)Or8Q;tnCESyU-jG7{_gI+59@0aGH&vpWd!2Mv2l{}212vX60BK~w1ovy)@$ZNX_F zntlu+HniT_BL!?tbO(hmTC@zg0qqbw;e2V)9c=T8?!$}=5r4w9!dLNlb8RtQ1ZqSD zwjk{Wc#>RZp0qFl=kD?x*fg4>J;*`eE{57jn{r_a%6n5lP|U-;{kmr{MXJ1UDqm4t z#B)X!IfSA=yX2>P>^g(HBC4m2mcl^cuR_E9t8pvtwg`PlV&sdLCVM)GISe4o_E{6R zwHfg0C`b_ilEoP#v4bP&&1YXayLL7`S!HXR+VkcDXaLmivY;5flzTRQF8!H|8^jp8 z5nEj#1*{bQlzBm;i=}4*#zhe(1<}kOtW#~SuC4;>CQP(6%tZN3eNO{ZQ4R2odo%WM z{~+t&s02K5LyCSfy?#u0ex@X5-Rk05hEH$dLIKo@wER<6R!r?+l*K}hgTjapI=Vg4 z8q+Cimee*Zb6lmzL_UhMZrvmw`l@WjyU_X9<6iUu%kSnvS7k;NM0(z!q?aN&Kf2DRz2#s4^WkX=}~ zk$^{tDZHimiyEgqDp*~zMca>ydMOE1`3xIqoMv|$YkU*77On?H?*t@&^ETo0BdS4J z#{fKh|H$flo4dgLAaZav{nS~hXJK)%S3tl^?N>*QES4;h!Etb#Os?RftV7%yJhg#{ zm9QC!|A;a*dD&+ddJ{$hg8%*a=Z$m`Z3n}Mk?T7kr`VskS-v#pa(Kn1vs^cSsLlVW z{DVqkCaAl30gf_*8mR1%qa}ZyFW2ns$U|1tS}3qQXnUydUs-?Tu^{uZ#PdSdRAt&+ zz|p&C__4P=|2+3EL8Z8GQ8gDIE2w{`Q>_*m!IOVlDmM^6T46_3r)&Sa%)juc0?bRg z384qo6uYb=`u~S$2z+~o=0Me8!OiuCq*pqV*AbNtSfnheBs0_esv(RRJh? z(!@BB()`f~IRzOmV&Oag-sTMvDx-T^{vL*{Gu@Dwf8{QRaINPPE2W_n{Z&p{a}d!( zPIUdSb9DgejzJkUy1DN4x{QmLc#j3@@iV*;h*zXaVwoj^Foi!7!>LnILpP&JzclO$ zO%-}HwM!h@_H1V;(5>(ETWC%Shj}-G>hqlX&XoOD@KUqvEOi0&8p|voU`%oNPIbMV z^!lggg@i7<^0$Qi(=PE$5G=Q7-@ftGsn6HsANlLgiJZVgd29CRgcjot@0mm;fc}Ez z*{fut9JCOio-H&BkJyXi#I-EFp<$=ko%hFIxO6F#w39#ky6?%6lQJhxTM;G`2B60P zn=_aH!z#M+Q8FM5KQF}m#mMrNk`%^%Zc!cMYE6=&r)`+(RD5+YL=M#cj zAqwHMTUM17rhMKno}>>fAZqI{b_AAvU)vgq;tp}$psH*)>4=!A6D=M0CMg}>Gj!({ zFNc1@T9Oc6e%DqXMKCMN@YDF2I6=M9y{n8#i_0Gs)#}npmaEFwqu(1(;Q%H5Amd63 zof#)o9ETn)S)to_hlrRsn0&yNekGD#NSVU#zhCX(GowHCJCku;c5C4!Pl!h+(8|vAEy_2q0g%c>HHynHc_ka(3-4G)d+}0Ztkz6A!1g;yj z5MrE#OvMtXLF~NReCTVl{8NNu$gt>0l-6o0F})#_D0@AS?CDnK{kz6?It4HfbgPtM z{rZVt7k3^aV8!sw@u$Z7*|Ai_-QW&&Q#x0{R51!~9J-IiVaM9_+NRO~Vqqbil_x_& zh*PvTjH#oUt*~xHM>_Udo{}$OV zS2KjkZ=u;KIh)zO*zQ3yh0X++-gnKxmj3DAzWJg)ZZhZao(@P!15ca?plh?gt^MlU zbalQC6vE9Jtvl#Ck05u$FAX&AurV=&uPUpijpxswX!!TDYz6DS%+fUe@|RHoCztPz z0=__3a`|_Gv29v#k2{R0GF9liaU7T3$zs1rfsYcIwm=p4ZU!_@9n-&{>ov zfK1->NRPhXB?gK0!)9w%i?m{);EMIx{vEg^fF=zI4DRz5)sOiLh?}ll-D=!&^oVk8 zs9{px3HSxbcM44h>f5g?`*kcEe!hy6Bo#8rqn-kiYSFm{hPq|M`4W7)P`~Lbj+d8| zVe~(8hfR&W2CPWPLvsEhS+pl4(NAr9DW(-SGEjqgQO{c4iUUR~)2&@O}7_|OleW(}aUMtmurFQE-z zGQOUOPKYq$q3oA-h@Wv1{a^B#kp$!GIA9=CkwqYNNBYx;p&|1A_unCMn{Wef^hRs( z%XlVBI^*lrzpbD0f9NSP5B3&&3f$hH40X_63eOg344MXo2?> zo*%kdWNLNm_BK+EX~p&7A4=)^yc{c8QH39|jg*A|4F*pCJCQ84gG4oiB}OMh3u8fk zM7r6`$3W5W&udYH@Pp?zi#fwxFN-`V8UqwD88p1;X~ebMGHMcCK4Ds$e<0S6TwjpEBovvFw+ zaSuQvnwb~n9e-E~cX|RU{9B)wWHkhaI({sH^DdKEbiZR$9Wd%0ifk{&;`*pJVQt&i zHf{Af<>EB2jjz|O8LXpo_o?PYqgluVK${6gxB5jq?mnQU~?M%{}u&CE0s)a*rI zf;AMcz{*bQ$HWxMG)rO=9d&wyGJzh@-tJiB-|Af)IY6w(ulpf0Z(MKpsHmth%U_k5 zlXvGwI*)|0oTfOzej=(7mhSp3_;;D_&Cj^>i^UcdSS-+2pW+G{1$p6=Qs_G}NZX6P zGDFs;?9ntT6*{Vo6(`0^*Hb?h8t%qy=4MYJ{Xr zOrC*ZL_x#&cn~Oj*Xor2RCzSh9Nk_wHglGM6y6P3UcEwhyB@WPKurC#21b4P`qdIJ zT6Uu{WzqFjY6RG?&=4~71M7ym?DqEDWHgP}S~XUn28pAN2>@XktoyfqX{^qdApQC} zH!xaceaBs!=?%kQ8}p{->CD{YA14szhoqmxB0G)np%KUH(v4HrF&D-B5ux zz@Fq?!vX|~Z*5$JCn8;Sru!$-b-gqk+=2BVA`5>$;cx)pu56T}c^E%e>>Z_NpvCZ4 z9ds($wURHoP($fCcn3MbhZn=t(OdK5d{*}dgBA*NG>FF|a7w-1+1+=XR+uP2R#As@ zfn`5sQh;$m-P)@4hEF08_EF-Ybf|dYh;yCnH2@V8-}1CnlW2nBL#W*Fdm1R+#XVL; zu9}+0-4C3RaUjtUM>ynnwXBLR{PpWT5nSr*-4&pmCTG`mn06d4SmvJmS3j;-YuHdW&QXtaO~^9xC^JT?dwQR-hZ7K&rq!e7@g0rR zQilZPn;P{UFkmYU8$j5?PR0sYN3_(fDYLwuqe8T#r#%hU0TK2i4#D_M$Y>VwutrUr?r?l{5BCqMOMlaWOWFgr3uHi%?mQ{**L@)QLb~~MpcSi= z>di^HywkB)&OtDtpp{#K8uEGAr?Z-WPK~INH7KN1oJ*QPa|FDhc_Ok zjLXv0?s9J_L3a-kU+kh+YniOrK(k3T(Hw*4iIXN-m(Hy7({{x{3Vgo}ZXe#izj^VF zT?eldA->6%+VSORGPwwkjP(?xI?TxEYH$5Q@|9WCKj4rELE0WJ>e*ZPZFEK2I(1(o z&XeApbj^0U6UJtXiBg4hQ5lpAR_7%j#kA(l2;VaZNn_AkI9AbC0?kUs=@hK(RC0O# zng>xk;H+i9n3=0Lc9Yp>@&FiW*TI7my({YMI_{R%|N4Km0LR5)n~M5hARvaJiDu#? zHEvz@?B?Q%#Bp&byT@B0p#&a3{$fvDuMnv@o-dn~_g6-^ov14W^!wXuPbYjALv3;Z z0^Kc0;5QsDA-ICv8wTV=P=kxW3gsYZP@9FLF*-maD$>KpOHwT{kMm~sN~??SL9&iW zejbg{#t1( z$lI&~g5%2{nh(Dq%E#+EN8SmN?T`L&GhXUbgd3Y!) zksichygqzDFiH-(mh*8CPJ9^n`YkgP_&SVm{BhJcpe^?<9XzeocfVeLP?u5~eq6Vw zt}t=K#E1PA^?7uIz;gz^oX(eQD{9?<+=qgt5Wt!IzYnL@ZSN>qt3{ojfq22{c0m_0 zJhrj9l5l3^Q`Db$@AH}gvrErM0=?){7#(PVBS~NJfTlJU$vf2SSnB`^V&>!o^cuWK zBn)Xj2==;ZY0c&H&|YwU6?|gF2ZC_)6Q;KGRig%C`$g)PSw{fB7L!Gb&U|3I?@N1+ zEvC?o2KQSrJOqDsWez0eyCq+L^o;-kC&|=~-&R~Ye}2qg*&y>99^kjeFKl6;T7$dC zQ0+b5BEYuCJc2M5+qi60WJF+9R^<@|9ku*uT*y44|vr_56^a?MGN z(u1i>%gvplSoIG|Fn@;VEg$Xb;(x#e=Se74F-pKQ;rn%$q5Mk&!@i){QlvzuSouzBr*5z#DMfI}aK4HZc1Q2g7>VK8SkG@|j&sr%=mDqf__`_zC~{F7|JGj=hcD z(0w$myT$6k)s(P2=b4pVmI`#~QEBAceb zl&v{d34e;;HZthXGFg(Y+JGc_Ohz#b0q7!z=kt`cN4MJiPF~!rD4MN!XsvgJ|3|vT8o+QY5;k|Dm6bz!njxE6Ds4=$m4pGVI z5mrk+s9U%a?#VvT17+86?_Pxq0W4MWw6%4VcDX?MMMCZ zqV$Pv@ubJOAIrdBN1%A{NnL-slP#6&e;{y*A^%%EfTl9jLN0rB`ww|!L&g_2;MviU zdjfx9hbIMua;H&ySAC1xdGsv7Z}7W;Yh`#y{vHB@$17C-;r`1Kc7$s^>J^x;5Byek zm){)&Uq;v+W!g0FF_mOpiVB@tw@pVRkR#I}kehn%$ZSgh$; zw%C;TKru+Ib-b=1-yOIYo4yvYkI=c|+qr_@stEtOjU1^aPHR;3mX{7dc|ng@<(W@b zI=~rSof_E*y`=v>!1!sT#V*>~CM#A>$q;cg^zi5MyYx)3hgsoAQ8|diGZ@sdQK5H{ z7S$C4BTlVV&YyGaf&2+pECHCv{ptU2PB7$nH0v{R&d?6Q-{?Tg^8S7KxpM7_MyE{i z(s-{G{ukOn=ce!dxgJwBf_hlKupp+pGR;QTz17IKB=XmX)4mtPd!&sK1rWfHQM4Hl~xk5iMf`%O?i22W>Zm4nakWSY= zks9T8qAzIy`BRE&xULEBepvQ_qZbid!Kj*{D zwb@)W+oVP=a0K4X&?ap<;ry$SP<6~Rq*F=O4VzAkXh<GxWLj)ZssX$7qmO zJ4|DKR=>Qnm6IT#MPlNN&il?Xxp{BB(@;IVTF>{}ZB^i+akIIPHYe@<*1t1&`lNQX zNLAuNUGN@v+bdy+pM$x5NXoWMM_!eZ!o~>~t6?e7>AE!MPyA^Opx! zL?R+X|Mhd^U<7~I8fQ=d4XqQmjWx-{R;B*W7tEW-c<&IncGf$Udgi}mlea8k@gEhW zpveFwIOcu8FzgvxoWG2xqX>MM{y*Jl3?Iq#r+FenWlT;IXx&4<(>#jf6$~xUq4B4y zC83!J(5m#cgQBC79SQf~Eb+8uxHBmZBrw&d(wf>+jeXL)A$x>}E!7EkAOvzdO zSVCCXmj)kpx>dT(W-z+j?g-42MRNpjH=&g~)kK+{cpp$0cGjlWls`G^i$S_uZKc_&Jj|?SMm|-8#3Yz|;1GFO$zqJ(&~u%C9TJfoJsDFIJ$|nI zUMUC$gWR98nUx<*0Wo-{*qc%|agEl3bwxf!ifhQgSLVg}a)r8t>iqRE7Puh7pFR;+ zmyTRE+5tsN8{tQ&Q*u)YSgL@*O+VI(NP-|`05i-ii1UHWygX&_wSJl@Mtq`w{~uFt z0@h=@c5!FU6lF+>sK^+JkhxM6nWrKuQ7ROP5~Wm>$Ph)yJVqpQMF`PgCK-xHh7?jM z)%QEI-|zeOalFTV_w(@Y-+f=#IjnQ7b)G*z@)thh?Fs(kYh%?wCLLl~;Wj+qtoH_0 z(2xkgZU8U%;W0%X;>5}N6Yzr2hT%Mxl{J_~VN5Mv-sShvsD^Nt#h@P{rrn!%KED?= zw_J|d0R-EahJ_ed(2Sn18|N*n z!8(02e!O7y&FM8%E!qb+Q+wn+Sk_XPm*;PGe)onhw4OXdHa8DZ?R#nc^m$iyLf!yb zu%qf-{V|z!U38%-3(gDw?n~Ci@`8h#mlnPnpir}S4u(d76Tjg0Z4S~UO*~S+r27Rq z7yF(qzVei0c(f|Y*gsq~&|LUzeO^Gcd(zVdzYt4tzck@Zugl4Ay=L%8Pre;6O$TK0xaAq(ICNB#C((1`xz^nkN} zf!>7V5c}-;Rj(yb@7wd)HwnLgw!U^e|B_Z?(J-@-Quh@#kgi#%CEmXm?foS-ECBlO zLLI-Ya9$XO=^|b*OwEI_!)b1-n&5i8vb?;wO+PbOg}9=pAmOu!>0Vc!J-0e(z6S(= zrgX{Fv`q^KJ*d3NBb6C|LQPyC{jPO^CvBRRp<&{HZ*9+n7mzDyb<#o>wUx*h(tu=L zC-ipR-4Fl!vqF}zN)!HX5EYT&1)=AXS5ZgVvdF`Gtl%LqzijG+K@aM*_ZQSFCKOl4 z&#${~mGz;)FX3FQ0=36#eFW8^h*q9N%>mMSz9^I5$~ZT?Mi38*9(D%zV{T;AXO>4O zlRSQ#hh>LNYU_%gl;N_I6u-M2M^_^gp~4zT8G{~h^s_hbQ-cp8~yf7T#Km_D0tB{RtV%{Xsp}P$^h@Yi>x{`dE|TJm!1SpH}D} zxCp>{8^>zliDNw$_v`n+QVnb5|6DBh)dJE%h(#Qjyi*)}=suST8QX>ZDQX;oA{HU+?36Smotu{H1_^ci=cS-67f=5*{6FETvStWR4RJg zXZs89*L@lKW3I41G5?P|GPoteqvU+u@Ei^dhTn~>FXNrZhR@#u(}pHz@8Q9qAntTU zB&44mo|l<;8UJG4g;Uo4#V!G-Pxlr;xSg7sur$A}rgRhE9@-qIPU2gzHw|t--VW=j zQkTV~{lA@q3S9jwrwgePL|AhAZ}A3ZWV|I27cvL*h*<*4B$hcz=-I!RHk8Hz7tK{h zwkouL2eOb#1-#?$hDs)g7OPQT9 zv_xAxdyYN18ftPqVFoNXfA!kh zcqds(bjn(52*!K!k0`%>OvBVRbUj6$o~Hf3kwyygg)o}n4Nr@h#%n)q8N{df1D(NY zzGOX(ha|8a46Nh7%J-8Lcp9_EF2hmu@xZ!yPufsct%gB(B?yAV_0~80Kb-d zmxr^aO>4lvXF?&Qd;32&QvYawvZI_QpxHS3-3Ie)E(rr&`JAB9U!VRTqBuIP(;G|g z&=UvtF3kZ#QIqMNxZud{XFyl-wJiOn*UZ9~gkMd7L6I*G|MQ`hs5EkNs&JSU(k&qD z_x`ykT<|Aq#$~7C4*A$_DC><0Pj`R?@hg{sv-nEgw!d)XUPeX`7hk?R4(J|h z4OC{>?AO!+wG*cn&Og1afE`MY)z#Ewge}&aj3AEvy7b}bzBM=bf$RXdZ}oT>{@4&W zM1H_f`qs~j0zObKFI~R;oBOX~KK%wQ)olPOzs1chZGdRl0<*NF!!)Sm%x>SWAiMqArZojkh3Xd*)4DJ_0T{TzyX!U1Q{tbeD!jKdTsd{vQq%ko>hJ~GZH0MFf?-O z2!x)ts)Dw$^_8A_&hSgjp5A@@xSsAdq_F8K$yF?|)czz(<@KQlfaoiR@<=ogG!7 zOwGkjRu*KjM}5qX(3aO*c~d|Md@nU7^!QhS8qWN6ueZKppxmzA-?gO~L-(HeTa$mr z*VDnsJZ`BbI)5n8T?hKYjij$g?eDds!&SZjyQ&ZSX!96Yu~;WWJPWz+PDtPQt)P(->?1t$Dgr^2O~d%n_s*8Yq6EjZuwSKQxbn=Let##ElQt zVVefG2~+HS=?Q)+Y@`0_&4JzVObG%`=MV_XeDTB6NgPFF;RnV?2-$|SDXye674Kgy z`~Zy9Zos0}-CA4hEHPP8wvS?6Hj_v!%vEK;#3p$q8cmFd#k#8ZcU>(lSrso9j9j2O zM%`uSBDx%!RAYquL`X!2nO-I#*-rgQv$EDnh#vHoZF^hShl8xLCM?Cz!7!HEOGW@> zFy@HsIqwE;OPb_?Vm4>yD)k))Nct|IR|OCY-~-%5!cYG`aq849Mn>cXe}aoPpHIwk z9K3fAbR3}e+7mirZLQpz2`NTkcYfRfSWW>oM~o6@csns7LRoAHp4M%xfb+XPo*%OF zj`t*`BfhMhl&Il(7`HERUy7^gv-i!q(``r(jB0CUoEO|iBsu!bq1YZ3t!pGJ5TH+D zEiGnKC!SXE^@5ouC!}v!Hz&)fKLc-Bxg)$22G&A05gEBWmEhn;LKg!_w8vHeH0QR2 zHBfiaP*Rws@mQ|*uMxis;Q_K5aC+G)*aAGtK>pRT3knVV&~E5Is6QyT#o+9?&9I8EMJm11n$M$Lsw`>~Cn82fid?2w`91E+a;~G607slhZ{D zQL;>ipo`}dpav~3XepmeuwWdrty{PH85^>W9M%9C;U}#wFZOrtP61hms#H)l4(CMZ z5zxP68v$9qz5;cuLqS$7V7k4{b=0-ROry}*caYJAp__^DAJ_c@eF+Erd1NGxkh?^z(w(<1K-04aZh|EX-8rI%d|6) zE2s%O4F81w4(UktaWyY04@99-`W=0=iNyr^8amd$lG-4y0+JKYCHF})Ae!@?Wh;(! zfn+N21!MLlyhn*?ga*-CQ&E_ZW|2e*`^h1w8$t3`F>M}_vfa#% zNS!L|AYSA}=bE(MB}H#FStv(H&?pMtQ!s+VmIh!eo)q#tzZQAnrlicx=Phe%X&rc4 z72UN%v}@nN!fpL8BS!oa0N7Lz=A%d}SbkZ=vN#a4?7`vi`OkxK&A(qds}2Js-VmiX zx~FYp>x(lwUsxe2a7o>y59w7#N7~0&L9q4{J5(Gbsh)Z*pKwN&|NoRpfZugj^3^R%jH3pm2OwiEgJX%dHFgfN02 z&b=Em0)Va?cUZU>J*SMUzI*U0WMBpw zI!^tqL*4tdLOZFen|9XDg^Dt9uA}2euMWMVzvZt~X4oQ9Ndk>IGquo4xv!jt@{-T3 zY%=FihC#a0qKTB^koiG9zINjF-pDA#r-2d+04DhG;g4RaQ#?@{Yv3E8ziQLk@o33K zzR&K18{qVMUeR2USVILQZQc(ruFb(SYjXDjE5XzgdoQz1>bJ|E6>r?othmdP z)r?=M4x6oAThq2o2JOruiXr?Z#$2Sz5LFZ6GKuRmBR=Q=KM2Kv+Y-;di@4Cw7Vqqo zUnOjRoR#HAh0cAVwlxl5K5etg`28B&V}3vymv4YW8s*^bGZ=o;U=NwP6ElM6}C zmg?T%>dfiVv!h3_NpKiHcC0^wLI}A(Qd^8Dev-Ni)A8a2x1WbJcxjKvR8jIg+%o}& zJ>F;vq)mmnb>H}4ddBS}S_zeW=&)h$DZo(3Bo3-)5<9V&%318_09M)iQAYvc^m~Ap zbyNmZ_Ir^dnwT1Cxk6D(QX&7?GKONPbj*~HxEZg3>^SM|4qH`NT zjl@#})W?D0h_K0W?l0~+;1d%T(Pi^mJa?NL47t_#WYv}qRk{Q!KyFDkoE6xw;ulOp zkYS9--g&Yj5)`K^p}ABVu=}1N>KCmSB5F=qndyhS9<7Enze3-bgX3*G zXkFG}!K;{xLgsA7^mNXZikpi8lG8j!%r~#ufX6hS;tmcclno*@+(-LcT2+Kdk#W$6 zh%GV%O@(%zQzlPdG<|}t>^A}0m4y`4AiLcFBhxtGV$pT{SAWNEvRaa=;)&bylXyho z;sC3U(mte{ftK-06YP^Pn7LVgclFo#+qY~{P&mf1Yb@D(w|( z1kLjG>ph(pTxl8 zBMSa15OzlL14%9N8_FPqR)*1E0OL0p&9`>_fsB8f3v>U{2*E66P)1@9&NW`K?%~i( zcr5zoBKtR=&c44o%$`=WdYB#&2N?*K+U?FKp#EpXW&fc6uM@+ZEWrSUtIGPh`41Yd z-Net~%8H%Z&%qQcvSI@Yn%?FPOsB%d&71%oW3hhb?Ac+Y=ZoE1inxb=&Sz|OIDd7{ zZ6Yy{^t1PC6#aTveFFXsbFj3qSjzik1S5{Qveh2=1(+quUQ@MA8~yto`#ZHHtEO!$ z+snV_;ej5mKY7x{AT31zcNQMbSyf=O&gv+h@9HpYX8(wJ0uM`yTJV^ldky?UCPq4| z7wSP`CYJA?eEi|M4r%NuW(fE&Y#%j5N?MvM7*-fbYI&Sq=wo>d9>8ch#)}tc>^PW1 zQGXC-R%+Tn--P5gg+wxh3*u0msaH9`(W0WF!6`r++yW$2(z}R9CVbP4lG#M%ap}?^ zXcoIP&HxAfpl$7Idk(Xpd9VBM%N%Jjhrv-rSrLxUT|{OI-q}duj>i*DerKp`+-HQ1 zA$A!*3eC6eEF5J+w^NsDP!Jx*gl2y;h!PrcR%_p~}X7Tsy=Ymk-eizpy%(4S(uIUOLyI5sV!J`goBx zlH%HqcCxfQMhRoWhzdCQ&W?ezIU_vYg~4uLk4^0%y#sTKepQf&9HGxp|84C#Ipo}Z z2ts|GvN|1kOB!7-e9aC+BJUj+f-83-FfwxbZvWE;{rXLWSPBSSul!s|$p!tjpv-Ij zd{pJP=vVg~XD}87jO(OOeET>x(}sJ7f4*-1?|G>!RnfQ=ORj}cm{X!eK*{0)8@SoP zOBP@pIaq8z$VGCc-@SXccwc7?j~-PHLr zOln$C{B*6%plq3Ve5$CtUdGE7pc5x<^69d#L8eCWa!sKA$@-(qM%t+~OwdBND6QY* z?&THy4}5Kx97DUwA(!r^B1RSYk;|mO6;lgny6OQSji%2biV#c{LCh8AJ}^mAs#p3u zZHw8#Q5*~2ysT-=KWNQF*C-~VU46%e3$?+#^>dg&H33%_(gaf-I@2+mR}Jp}@O3gy zpghcRnzw0nZr;0h+$3BX;u##4Pti9X5#S^-F=V<>xrFQO3#>9~4F$?u}%g~(gjBiQVq@D9aA;Q4=EZ*dFc`WiWwniPE0+RlL_m&q#_ zH-0>O(=rq0kT`KryG01!-C+o7E7?cLB$LQ9Pi3ZC?^r^js=$bt16-=UbM?v<5r7p| zgy=#s=hTb~%4e^PY`7p!Z9ALis9bTnySQ{)Z<_P+*)ptE#T{DqWm5$R@sH7rF!+K} zg)jjRSA66t*cQ}aV8X``&Nche+$qd;)nWa)JjBjuIOyRdTMU}?mmw#7DcLj+R(GlN za7K^uE1YqN3IfAR)pG-c+%>>u`qd8FG)!Wp8fRcLlO=2Xq?`_S7Lvq-&YwT)aJCcN zEq^E(7~5v$ze+xT_SIT8tc2iwK$H>-TnJpU=ajAPa#9uMjvIobR>pjLZ89qDkYKuu z0ThxRcmt9qnZKSuzfH$84;5+HEC)^+7dz4CcOQtfq^1vxf-evEtw_nph%>2YT6c*t zUTBAx868v{LW~^6xRm;q8Kw9?L6B(=h=ec6D6(*7FU!h`3S%>~BTxN)rKkqS2xXmT z9(K4d!e`iNFp-bl&gy&ZE_zhHZ07tTi-XyH+0Upn#A8QfMy zdJRA?m(S1c85^hNJslZ78;=o`qDS5$q7#27xRG}jy#NXqcb(QJqn{7<`mTZIE&a(+ z#$s$sePo{y)Rkk!FTI%#%3$z1kDff~Thy?tjBeJCWh1C*%Chg*PWO)Oh(9C2XQ-p< zWt?_JG!musgIOsofrW|_DYob@6~PyVnfcY7tJR6QO~0x;xW9Jqeq5=Meq=<1-G{g% z6T9IAIwsUg>#g^Krs!10j@{sF=z{uc(3-!4NP;4m2R*W??|{3i1hPKsG+V&wj8ClSz)&BUmlumLT{4q2?JUt*n;RY#r8 z&Tk;b_WzoSRC-)8C(_?ImQRhjr{O{*9{RQOTXjYZ5|LpnJy*pddDI z?a{5@O@W=~D~y`8@mB*HkO?H5l&~Eiz6TyPb+WNMCXl1^{M@!Q&gGwv?gJ`*l2^(+ zeRk4nH5epeQOCf5@~IeRyZyS~1cZKEo%r3tG}d;p^y(|SVcQQ>LcD1|KgqetfXD6K z`F(@|0CSwzZ72TuXvJu0t%u!VlnC`a@5@(@<;z_Sq5>gZ2v1q&zobF>E8(a!&G~b} zeQeDiOaj_{-k-dHZe*xh&k`TlE_fd{hFwgC4+OymF{JQ*d_?gAyMv-!Xi5xuPGhVm z81_RFAq5kcYxet*_oiq~B~n3LnSZNM85v!W?{O z_d7<^I)FpHd{T*qH>m-IPRz{cd?B#QLzR|i#UOz{0P6kB)du}4PB+5l=LX%#%4&&2 z)oj(e;q5=)uST4rZML-P43>5Ce6Gw|jGwJ4L}zBmqv-|yhj~I~Ir%b)Izr6$C#+XG zII&wT%J}-SiBYTFNC)gswe|?uG(59++Qo!Gmb5+Ybvi}!GwXCY>K#A#-kZJWHk7bn!kzJhi(D z$0zS^xmQ);7Vtsh+X5_R-m$LU*AX?t#75EEx4@mLtL7;ey#PiCYMT1VdhgdGd--vyRDM))`G(Z=<`=DH4XP zRz4%gUfv-wL8e)xZ}gk5z72U9buStp34yoSYn8&Gp>C{e6caALGm%rn=2ey4{pe_m zj!TuCx-Q=JOY?}@4TgygQ6GA38GYf`d~})QHS;49e#0~yCKHH-CEbW`$t8+9QXG&D;~JnNcEVe_t=t*fuMD6_3u-2CX8lCOk$O{9=2(d zI{+qgpa8Rjonb}-4==nm({VkXe6?$&u}i{u8X8wPpi-Uy7AT%SnKseXq@MuNnb2{$ zVe@C8ua~>dw%yz^78O~qmzO0Wv1QD;e=)O0AbEq~u1rI3^GUnDjjyVz5?jE$pV~d~ zxqrtEP)HiL?GuDq{ElER&L7m}_k4(gyALm}iiVbvPpteNdKD6;dK-! z+G>|i(^q0X5}L21hwxInmGawWCuTPP@OJwxyZhU_OJ`Y)4>=R;{iA(WY8mH@0&+`# zxlVd=+u0NrvhAoZVNTw@I1k7ZM?eTYag7>S_xu7_p27s%gAEN>=_(=2D{?xHf~&4 zJbSbh`2+JxM*V-23T4HZHsmh>)p4cGqv{35kTs|XipFR!)93n*(+^4>jp83t;`KaR zk;|cIpwt#yEt<6-rG++TP28sc@g6ygT`d+Ld(qLHNybxvEaP%(^W6_YdIn2ZLB6#h|artXVJhE+3(kD~ldw>O=jWiY?g_yWrkDd&h}jy~7#LYpnN zG?5HM@{bpro|q!8x-3GZY-bzNa{a9#K;zrSKVfRF^z#e<)UPd2c?tEMrFK z&rII|W#eXe9w7_ZrC=A#oaJOC{Xr_5J|YHh%<^QGjakTvm&vbQS>GAXn4AB!R8g_N z72jdd(s@TK7a-BVEh@T8KcN(+c1-x3S_!;qwfinzojeY7X;gK+gBE;6HX&1<9zE`t zY@Sop**Hyh$?`~Z{$_|9lH5;_3-7;G+@pDed}z>G(xVd-3zi36M zO8}R`2rxw$$6O?#;Xs52_pK`lzkBylW5*sJJ;b)hjwYNXeratTokNce&FGoU@mAsO zv@--|Q3m6g*QD*fUAq+3)S|3j1{nILpb&c1KNt)z1!}N7jq(w=4MG(3hv196TOV#K z$or`A<4>ot)eoCsjkBof+Me$+00zV?K%tv=?i`u%<{*#G&*Jd8)vF>3bkOsF~ujoa$0dks&HBI`s4^57GxDOPv;fYv{7p;n@I&W&ObL zMYQ6MojaGb)#Tf>;W6j-yQiJ&(CHa$s$3|SNT{BXu?pJ0T2TgXoNRI z)b1|!$vTq6fqn7caJp@B=@R$<#0-E+Wi;PVmUz%S$^Jbyiuh6Dz~wO6+VN}@KXlE& zR@*q&M5Qd3q6jME^y8Mm)v~Kwd>x3^GM$ia0)N4qmvZ+$N78d3n8FBlf@WDum&ZW&stqm0Jn5rLr(8K$X;xw9x z&mUn~h^4jsI652d!)Txfq4pv6kmJsoN}>3U3b%w>$v{QugVecs6oO|jTqvBXSH`UV z_o7e1r6CjFg$7LKsvli=)!RUF7&nF4OgJTb3-OkMy~OtHr?ER{S#FPvls#Z!9;DYH z9p*;^yz|q+DMpiYP!)))D?j;cZpYT;_6AR*HXjB9l?g=ak;#V+)d!jrNQseDasK8J z_KbIMnEm`TV8RNyIy45p19!yp+BdhD`Bv7>EZ8_YS6Md75E!Vw4)S`Mw(XTd)eFWH z$aGJ?V$NfgBG|qh{(g6UK+EH&7i{-hLs!h`@-urY$(k$5W3bhIleaM+y|hR- zF@&HyjBr@cX4vGwCXE|k*fr(Ku$X>K3hC}8S3OuG(oXuq;IOc9p_gOx^YaCwM-HP5 z$xHktLF5F8r|^$-?LjKPq~$x^i#T+no%@CL3?}g*+@M(4i7gE>6ciauwx$U7p~xnN zFT%WWS7iKC%uGno9;<|%&NLDL|3=?BbRlAuMSY}JFZoR2CFbMC{siH{rB))lZ*EF5a!UD1cm_ zi@^yz9=ZlFCYOOCxnU$36%yb3U9(18mV|ghK<*Mbw3q}}4;tfSdu39(+}fksX@i=32Qh-tLcXgn+@& zHGs2RTJ@_dNb5vv>n3oH;XpK$7IoFqAt|U$a@vGWx3<1ABQwx&eI3`LtEDbU8Es#b zY+``4sOv~53NLx#&^A)frbyaxJM%xKqg>d>kTiv{C%)yOBOc)?#_ew(`!fiqBVtkjeXpP z5*vQ712S?!l222vCn^lFWfzw8{|u2|oO86?xqCI}g-n0lf-;<&@^>hncE&eTC9MiW z70&iJgBY<+!g3g{O*8&Pq+5_C7Ho6_UVp;wFr0EPdNZuotaJ6@GRlhMcHLDQyKRe( zeib)v`gPyI9n14R?2L%Gk-bdz|B)~js=wol%houO)Pj5ZrvQSeRiy7#sQT{_eycNPALZk$jtWl-~HD`3(AMJ4l*LXO6rWkGzTBRuK^~Z`0 z>-#=FaH+q5=&#(dV>mWvQq$mxbG!V&o_;5t+|M1*eXX%0=E(nX0bYo{2|)Sj)2A9E zo?o1jP0#+YUmwpvp%%f-xSlu#Abt7W!47os;zGJ=_utJBamBII?$8<*;BxAgu2*QF zfUOM_pACl{WQ`a&ksvCpUo!@WZxp`JhxQb9T)wF?1LkJ5gjf=YB0_0tb?Fw_c|7_#EPJ zTnH|xzuP;72s=HnZVD>TRsCAJ)9_n1yfX~B$+;D)?hMqzcR*U}2rv8-RjaYvxx z&L%ZG3)X$3DhDpBsV3e@=~g{P?k~lT2)1 z@l$1Lj|(QYu!C=+gI{|lrp+QJrxd1u{MgONS%k?YB6g!TT49fw7yu9kyL>f2`dICU z(q+&8j8VE_X%PrsG(B#1;|UWot#s?Yb0k7cnla;f?28DJ`E}dbjN9V3zdn2weBR;S z_Ta3+u%|Wy)#+EQKzBD2r%!C0XVulzGOlyyiGCl)4zl1ECP>yv%~DDSrJU3Zn9a(w zFAkK(Py7UFV&qvMEV%l!f!9DT3up8{>&zkq2`I&P>wY`8@L}|NY(~T(g}pY$D_5>O zv*$fm*EYDYKCwE0$7x%YR0U6L5`%i$%VoZE*v_+*s6dIRJnhBpr8iFdDAd5 zKQ&a$*RPoAc4RwV#EW00OTD)%7P5krq9+&}BrZ;OlUXVQU{Y%KSIrdgTBYDOz}com zB|tHslIzaaT_HQ@L&Kvlx_Lfv5{FVmdooF$R^~;j6j|Sl-3AFk6nnBG1d#GC`dM}% zeOCE2Zt*)##W=O|uL6!8b2?*a=Op?n0cD^RK7Xc9Pk?d5{6i5sFbfTMrFjyA>&&{` z9QKeb&0b`a)s=zk%#AgM@I?3ayI#ne@uOtA|RN6-%{YM4@EAMR9QXz;Ka{ z%S4s&`CipFct+e{cG;H=2SnsU=E(+>00#SMe{wk9&M2VS#s9T0$cW@rN^$l6vL1WQAR3! zPJDzGMK0L16C)u^KW1KR(TR(KaPr2pl4ZG#*Bjpeq7@<}FjERE`qEyFz=dkZ;j=6F zV*<1E$*pPp6I_AbYvakJZS&SdpmFngZP1#XT2vcnar6znZ0sWg6j@6OMK^BMW}_iPOl)j+_eyQ0e7_Q8 zxe+XF8P!}i4p}gN{yfeGY1og-f7Q<hMHcMD$Ge|#^5S=p-D;vtV6`9w zh@08J;ELIkd9d9}1L*KRrBI~~O;#SL)IYm-+iadWKnz?_@MJ!UrvjKiIH>{NO+sWv z+rk|GSbFAMhHY@i=E>~q{e=mgv=U5C&AzN66gBE4(33YGKb4i01v9(Un|;X-{CBJF z_x1(Ly@MaESo4sSR18aD@1|{30FWqK;7OfFZomHhj}%SJ5&jLxrBg_3dKgZ%2yMi) zj3LCHJ$t;T-BqR4=X_w{CR-_hc|Lyr%Fy1Qh?QPXQ{}*MM=`*pQD@Mw+}Z334XNyf zqT%qPq;yu)GWO{zMqBi=^ITk-!nM?kQofs+DLOg1Il{pv=6!H>@kc63U_W14{PTw_ zpMYxm-{r4*w6v(XNV@^#oE6<%rcU^_kI-g}zJx(_H~_9y&UbohvD(@-cv)AztUFup z_Li+%*aj4dbS(5*NLga5G{IJEoT(~??3lVgDQWMuW6n-gqBALRE)-ycjB>Yc+ zwKNnY*wK$g60o%)kAC4noWG?S!m&eEoY89y^4QB*OB@GzIAbsuh|MZJ19zT3qxSSvOUuCg6oRt|=5{XR)u296HeF zydnllcL)S;NS+0NrWd8Ll&zY7 z_IqvtPm~jYx{blmr-}+nZt+bZ>^fWygY~aJd9TW=2>_+=kK7^fiDdw3PR7pQ@B49U zrs}5t*7!%d6GL)t0J&E#I5b2M_6~ezvtRA%`iEpKF`7kvD*p9w#zC@VM+9Gz5t*3E zLne?RKGGdxNJC2IiBqPe_DTL*7p;<352Mb;pB_X7pa71aEu3j6R^mM$cRhoS$PV5Z zkGD(djrwtZW(P&9z!+qGaB!m;yVpzbpf~}c`LbQHfdV< zlO8)ZBH9&a3ov>rF0l|oX(pmKdk<5mX@O0)iQrsk5QvXuRlC>Ti}0ZwGDHr&%=0SR<|`i>VOP#K}K?nHiy@Yeb<{7hn3>Wlx>hw zl!BEy*uNaR<*_vKB*D)mze^8&Xq$@&UmfW8?xs#>8)zBZjIy!{|FEK{?u!9U&w$l) z<>xWbobBl=+CWCd^dwdd_3Fn37{|)E6ioFFbAoWX|D`c4eTg#y^tk;;joz@w4h!{| zk?*uZu6Bwwmt`0fmT@N@Gxp+(`g4F)>R7y6Br+ecNuh#$&HGMs9RDyXBxEA5lK(3N z6NNOl$7P-STLwEIr*bPdY#sToF-v--X_aEm<;xQ`Si$r`%D<_9OaGCk-TYIoQ-5e1 z8C}WwO2OL#3`J04wTX2n$TSp2j(839{IU%tB}Lh?)2Dm*kL;wieWZc{321rc*1wd; z@i5il86@V$CMnimOo3ewoD5ryB^RG}0mwOOAElyLU(2}h_0}Xo#47pVOt~J_v}}Wh z3<0{W&lx>5N^xi?0hZg5rs(pd1H3y~a&vlYhY;sx|GueT?%>C#Po1K$eev=6q^VN_ z#gd|L-z}!oIu#Fv7|Am>gW-oZJ-fH3VC`U%Ht9MWOlyC5{f6JdbB`WAyj})I{J``$ zq2f>y$Rav^+Sr3C-s9d5C44A#92$arQ*Xpt?k7O^%jvc-w4A5@d(>(xnwl|?B~7lF zRaID67!Ri-@>h>mimx{U$hr<6LH)b+P%2Un3W-U#Y9XT$T}VA@RChVAj|-`{&<%zfqVU@`ZxV3pvA z+*7dcZM&@svH@@GaF!J2MOwhiwQ%bo$=_zSWV(3hzo$3&Md7X|f$&JUtoP!*7h?R4 ze28pXZ@qEn=3@(fu!OFK?31L=zLot8>epU}o=u^S9O_*A^8@>EXO`Zw8%f>;E+0kI z&Pk8MrIQIZGk&vm*{!_W;894sYmCj3`Te743`0WZ*+ge7sqC$(`R9YOqG_OtVvPwS zSk8w=_Z+4KV7?1{E`u7$H~$f+TVh0)D{Oc=5rNKK`_w>;K;ha1Fzkix3PRY1Ru-LF zDqD2=JA(2J7~$iXm&E@|n0eTY{ti8%69R939X zha~U_Rt6R;n!K}Iyk8@shJA-{OZ5d4%oUH ze;e62a0$GoK*~4-2TzWBP*XSO?1ev*kKi2tzaIha<32P~cB_#SS?TplNfTe*1`{Ss z04)pd-_}2?F4<{4r%{wJkA5()xr8+`(y;VwZ!Xx@EsN^cRgSHHvqqa4#-!a@U4;dM zs#Hl6T-IOo|Ez|U&uK#CFbI8_+&EC_tYdmx%1wp@AFfv7v8iQb6z#Ao zuW{`IG2Ts-f<>5^p79Bj;w4Lp49ixL8lW~Hs5Vg#8Cjq}(a-oL;ONm$US-Xdlmrz0 zF;lnpd0c7HWc?$@PwIm`bg=Q2c}Ly~xV0@>Y+m7O+PJ>)GPoUnq)`}s$DaD~M+7G$ zHF?dt4!G^CQ5(-4(v(~=y*q40a{51Ms4>rZD!Vs9v| ze+7d7RGGFsT4Q#2GNAZq_4Tz`$w|-n_|!!^_f7$e5K24Mm4bpSl>yZTfgh(HIC5S+ zQUzQwD9Q`}PRH0t{7x7^&aqY{5ij63;?=LV9#-ymUaEJ zRzcZmK-UwrZ7V5@(bCmx9p?|;`|m5r>fZz8kMzu*Y!D+LiF%lEtT36Jo7MGy==v(5 zG1c=ZW)2iwePPk*oiULj*wJyULrcZk4fWS(FCRiH4+&+|#XUYE$DJ`lB#zFCb^Yr> z(6YmrcINp7&3QM^dV7j+4ei93+P@psxXaS@ioNypzDF*bOTS6aA*4+Cn8_fkO^;{ue0z(@Ge!!1&~e6HBZAu3Cu$D7}B7#iy~IS{gyo8zwnX#2?rg z=a_bz75?u8TDOh`;hnSQ4e?F(ZUoaL;;SP&NVneU)bhmxRME1gmW@c180y5dIkv&f zC;R;`g!eb6=mc4tcYu(@hzrHaD(~FUxDp^T@8eqw%3RU@+)eRaDMx7+FxCIfGDeL>S_l zL;OS{kgsPsQ5I|QwjXu-7Z}nRc`P5BQUP&M__&0()8EgtzK|V10@?O&=ATlRSSdym zP-LuMCn1K#Dn7yT%VbV8?AR?_I*FOq3$pf)qGii3U&Ubwq7zKKJb|gDKo^j2wgz!G z$1wZnO6F)3h@m!xIGw|%mA*m^LC_t+ANlu5j6gJ0V+o{Gac*lgcK7YucO-Oep|d?2 zRNr{WanLlL4D*vWhGmc~<$`W)W&!&}9@hWG8%M^6fy`o-mS_NzN!s6LzS@QpCtF8( zI*0rf16Q2&{5l=R4+#3ttCf7FDt)2?ss55;m-HY19??mxKeik+h$R{eJe!oX=IUlr z>kVe0@4kPxB6yZ7K~sfH{P2KPLPI2f)IMqFyG49l`7iK|moFk%?5V$Wrn2&=aBl-Q zF%BRVP!ecwGVPQgtC@wH1;_oWNm_3Vnqgasj3VtzDaTR*poELW(cO+NFc#k8&6}cO zdh`P|v=o-G#mAZ`EA}oq!=tz7_<{8lWyO7 zBbV8IUdgjYU&FS{M9Y9LtrV~MK@S!acZ%`z%l~4BArNbP1*?a)xQ_kzWO9}-KYs1H zOvgb0zf4t=Q8NlzsnQ=!Bnz+nTdpsf02xE1*SafaAEfrrEUmyNffTnb=wH5lb!2Yx z8rOZzA7cDT_y!g*n)8gG2v2=8WQj*J18pbpcx2NK$+QR5 zq}+vq_fqjQ9e3^hm_aJp&b4PIEWOIIqBJ1#F#*cnz2Sw3Op==kw;o0}srbe<%I`1sC0Od4NrOCuv&PIyM)g;(tpKtNX-{2k!VfSO$JK&xoTDvWlamIpih&gFg!WKBq> zob5OPV2UYHj*gJtl0T4WSBsG5Hy!8+>Uj!k_J=3FX;C zX}S$ekrxzN5A8o;k??%P$-KNB*Yk|H4_KcGS&CV4O*V}{*Y#Y$g`ar9p*&XxA@l>Bxp{X_S7mg%W|il`-9HM zxf=ah=e|jhT~ws~bz;p45K3GuhD<9yucB;rr**g5A+$!7y&L{z@evR;O|XeePpg5@ zDLYIDPguQBmJJId7hyD`(MP-L@4bWEh`feMsNm@A80-R9&^T9t&& zFjPV60zT$Ld}v`{aDMU08Wc5B9q!t_d)vIy`g?Dq1Nb+PCpinZ#L6meO6MFDNLOy@ z?fG|=I*aY?#}*Sv$l}>Wb?f$0U0Y_6B) zgmYc~-JlM}Bi~u3G*sX8>^&wj4*JmN7FR7b6k~7^q2u1eFLcPR@z7E8=5=C;qntOw zf|tu2^eEzM7I|(fks|AJ$>QXOb!%@ynqXL*RHN0%r#@Zr>|Sj{wMUYv#}CLmb;}F{ zl=Vd$qoWsj7`(X4sb9)G6{KP5XxH)Fbg4{8JROD;0xr&PyM5%lI%D=stouBBzUr%p z;vRe-Sek(tY|NMw3T00KK6`sKe)C{XZEd(%ci-?f@7||g9b>UkYVeVVBkL*9FLv(r zy3y08(=d>d@PEp6L^I85ZOXv##;p=Mcke!a@w_3ik3Wmw@~TyXXFTv*!<4T9E-;8F zZz**!|Mst85474aaoDiyD>Rp}V1)6~vX8&TQwW&oCO&sTOv}+C2K4vniO~V&eY2f< z>qnWIw&tG)M`WuUJGnXV(4na(({^lc-B~+-aL3`-8jVP_#IPTyx8S( zW-QbTTIryF>xRc_uQjoIZ~pD|=eh>xXYJ2cUz%q+$k=%Cyh7_4PR`>OP4TPi$J1bO zVFxR#?;&B=LVYW(I_Z9D&YU4k+q`uDfjooD_uc~e)uSOicDzc{$E)KEhgX;C{55)2 z)@^jR9>yV)XPs|l?BEg|<`|@A+1z2^EVEr*9MWH;%?uj5ASj}@ik4|$uPGK&?@vB% zwL5Xynzawomz+y1+p{dL=#xRwr)di>Xa3$ZWk%+&*JTbHpbj;O^GoUvF_kS{=Vq6^ z-#bw&a^is|@dOO`1W`-&!3v;+0;+0S?a2{oAx>6M>IU`~x-DK2Z5{43GtNm&gwoz* zc;$npK|y9aykDDb8pkp#cAYs5TE4tnNJ!=XaREx+eR+U%u(4^cSksS>PE6|w@#NyTix~3WqA{KS-vwuM zkH{XJUYzaB{$>A?<+po|zH!66__pf7clqbr8Z6WcijMZaFnnKJ-0-Bz#r5uN+Ff_x z#Wk1QwT(NEm_ZA2W8mA>0qBhhg!dm@;-f-=Ty}m=gs(kRb9+da?Z@(7U0foH^A>Nc zdbQQYDz3SD|1FoF4`Qw=!U;M@NAJ@=wK~nyOd6XH-tp= zU!x^(Z0a++i}HY&EOnyRoW|DfHVmE!FcOL0G?{uAKi}KtkA1M0>#Gk)Aum{W2u)fu?Ar@>#Sv8r z^(RgGdDU7xD`@Ffij5OBV81GBhGfX?FSmFT?qj@RrtyXzqOO42yRzux5d0^9K=eZ3 zcJJ@kX+Z2ue2B-rI20#dpZ8z?{e5aBd*7QUE*YWFrp>fbVPj{^XtCSykHh<$XAs49 zp0P@lR4}0^N^bFG!J2e`opFZd1UWma(GuOZp)8?F*E}F+sLeubKPkJCe^rXlHte*I zUj}%6eb$@+EV~N@E+EWAtsP&pck`geJ!dR#^ZMowy1qLclg*cxC2!wdmcj49rGxTz?soSCL_nq~r$Qrvkr$F67OhDhiML4<3!HwThz}6f*#6 z3t(1WEUV6Ib7k(DS-}z7X$NK**u~|%IKHjbgNHUuq)hr%C5^?Ki}8W*6`3C0&DC_$ zih%B@RCGOZH4rUUGUch;?=;Pf zdbv@MonL=ghMGZJD)S3W9JgH#lQ#l|Qb24XxTu#Vp0OQv`R_OxL-C-B{#Nttvy*&% zs*82(8+SRO!A@~6+q|F9Bbw;{5p40t_8Q=$(KLQ$uL6DW(RSUtk3D-~$EMNQ=qoqv-=92b zVzF_t!zNrisCeC3s3_!akwJrif2>}Hj7JIV6ozd1rlPSrDmY#oz!L56`>}E{S8*|y z%sJ7$fB)9_N;lb=2C+1d7IW?5zkimE3im8}<5pa}OUK|PeI;npX7=-G zuIrFbSQC=H_zFwNBfH^zb7&E8AMR~ivU(V!n;8~b@?echOG}rGGo=$ozjyAY zUg`lH9@zWYi62kR3G3}PU5#9y8)1`r?8ti%m0$4GW&b$G%53v}@3LZj*R_8Re@Dy! z$QTX?JjLnzRifL;Ek!k6F{4`pzOd+UR#7EPUeOLMxhBS!4}Oi3 zIB_DJ`2}28OW#7KiI|RQrmp(aIc`cL?!YZdd$Cq`W&Oi-@835$Zj0PvvKfReFSM>6 z(Hei4l&2?mLaoz)=NUMD_w>k$HC9%JuU}Vm?%Q|&t2=KFTTXz`ocJv96JSkWpHf%R ztTDA05)0r&7{~e7!|D-4<=doZ3*SPBV@|nO2BdbbeK)W+aGq(nzn!JQwC!Vb)}i?l z2L~DNDagoExaqtne)|E2k(N7+vkzNldgPk(ns_lxEc=;iDR+dE0}vj0W&FzW!T46* z%#N>E;P3VMQLCMLPhA_+cBXLsvc&xgJ_FoBA@U0Kfk3}y$@k}6=j11=V(sJGF=M6! zvL9sH&ooMTOV;2)gJk99CiMZv%auq3E&c!pSudWQ^JKEcS?_^l2NvU-5iJPA7(0T&~c#T+t)k#m2Hc=vr5|C;%#8gXmRS7Bm%kwjt1B)B|l5v^anGCGsgr|rV`rG;N%_&6W0 zWZBNfEn6JMOjsM_=ND66@%8qO9xMUamPD&B!)~{nX9v8Bem?w}2_u1+EDk+P<#1+H zVjct=LbkkNbQjz5tM~MyM6vf&Y0{_Y*ymWH@ z3^BFokQJ_e>qj?z@zPW8ch#Ofu7{55cH%2>DaFN^nHqEd&LnhJCo#?8z{t*2BoXV9 z7i~W!3UgUEhO>fvKW;>`^^y|3OTBp+%Sv4aKw<0YSx|kLJ|U@x4c*qIrSG*=R61%K z7}V=y`=MUB*W{^qZ=gb;X=_DEGGnC%^KS)(&B!m_hFQXw?>)GJQLGzlM?`~+H z=pE``uY)Y{Xx@Ch>ziv$Qj&d~4^Qq+lV~^pPz%;P_ji6&zk|_ok=)8tT0bW_@dztX z?Z|6Fr$Gf%ul7iFBB3<1Eq>m{Gg`p?%7XEqjB>CfOH4@DML%}#YWfobHRt=hm%5uG{RyD zZfVJvr=k8W?{(74Htl!g*|WCbm7}r4Pzy?d7-G^Z<3w?lO@h;=yu1UGw*~Mm{L0H` z?%I7(K|y0!g>FTernTFd&RnnY(YtV9FO+gnN9WeE)FvgHAM@#KMObgwGCojcnivd? z(b?K#_l@yS)9xOt^XT!Eo~vu>)C;n^yCoaqJ;F&v!^N{9Ss1g0yDKPT>vaJwn2~in zZ9VO+W6!zQ?gmpSF!RI1!k8u}vi)>F@E_E{jVTs_M(G5s9JF`7n8d&;_7{seX!*@d zQ%Zh+?X0bRee&9+ycV_swup$XXzh?@wPrx}y&JLZF=`6Cylm&RoN~I2{YOe`)_!|( za$!gp%QbmHZT7RyCTOHi>LuOn^JUMY_wO(3`DFcOY8XJX>;0R>Ff$yN>|DOiTy*4m zyt_$)n@gyX=ZPY7;JE(1dY`uNJ$=q{_@v*QuDYX+zwsn^5HTL)=G2Vj%F!r12CTWrLn53eN~ZeZ*S6e_v3;`>(8HFuZM<;yHN1x za8rWrt&t(~TV^)yaszzb4;(=rtu&oLrNpmhW+@sSuI2}8Cize8ak_N$tDJ<-eui#F zQ|~!^{4gK*ro;H?{vXX+Uy?IKwxm80Eoi;YTSvWaWwB0GS^3AJP4}5XXrZBrRonx~ z=ha0o^02DoqSvEFt#!!S|NgaKKbcQc0gT2aJ0d1V_A3V&OLg_T%aa@L-`>87F*f{x zy0Ubtoqu~$C9|+zQyktTuT`bXOWmZqRAobb>T0L#ytkeXtW|Y~tkuv&KH>sGw7Nb% zl{0F-^Hb@!Qs>o=8y)%#l!V2^WsdgO!0Vl!XSDVFs=hS8@oZ>U$J5h!K6&&V&4MIe zd>KR4hmCtyR`Jv4Q0h`me)bdRTdvgo5T z_bK>1EML{)-?>e=t&4l9$zJqk9fy{0I&;zGxe`60{YdGZris@LH`=5%_#bx3sEzRAYeWfHMLBfCufj#FZ2si?eh~HOK~P;3eV}% zr1^KDhcg)e`>Y6<5lKh%zYlwp)3r<04CaSuS03!2A2LSg=Fg97`Wh|{anBFxG;G)f zvwbx;0%orM>%NxfQg@qfW?sVxeSx#7VBS^?L)l9>W{vBtn`5!MR(5s}SX_lEUEsj{UcKGqBP1e>F?&^2D11#0FyAk_5wD0aB@Q{RWK6vmg z=Atu|Ce*a_v+^2ye44XuYjryN9B>V6X4&v}LAEA+zWKa)3SGx7g~s<=!{Yji-Wr_n zlx@z`{W$L?dX21J{+Igcr|reO6%5-dp!~SWcW+T=&kM=Gps4 zX~PjRnKi2c7$>?yK38k+hzYPN^^Cl}`;Q6;a`^mc!0gqw;b2{V=9Yj}-reb{e%v4+G-;C}Bnh+}vOrOxXz z#+suc2$)E7+G8Kr?Ep%yHdoFF4)X0~YRe7tXT$KT0J1akykFyTpLJ1UZW&Sw7GkB= zqG{96Cb`eKH2mGT5=YGq$5s@+zTApQ-RUgf-o1KpvE*(|H{Oj)SZpQwj{`JD;%5<{ zvvm@V=n8&>&lv^P^xCX%>m2a!n=of#rT6smYDP0@U|sEWBEn>Ea4{@@{wZy3{y*^c zCmL%%Jmn8}Ol6|LLE5w5R3|`3r7-|IJ=g5_X{vw2s?FV1IKhC0}&;QfZcfe!W zws8|#-DVORb|gg#sqDKFqJ)HGG*wDz+1o8EqVZ%zOJr3-RqIFOPd%*Lj`ias1a|y;?DO6%?Zs40B~~b)kAbs2&LRw5({UT=9n)KQ#sW zPV{Hc=C{HmlH%ULNn$wiQ`-zcb~r&rkD3g*!htTnX3n{t@i0Ow_4 z@gdRZdAZo=Hv0Z`DsZWx=(q26q%Q=jSw=l6j(Byj_6{nEn?crrrix+%le)Mn+g|3Z zNnLsz#RJqKBsX%4;hl$EBP19Br729V*@3ozgDU>9$cc$rnQHKnlAqwFKaQM!B2TUl@P>@@1REDq1<4p;)%X|G2h)`&N59i#fp;k~!b5k2D(5e(W_k zLL4rPQ`iwYMxipx&5sZPEQT(D#4O>nB#r_tbVCQx*!vndNevJ*X>Iy~BlZK2hniM_ zHbE|~TRn3EMF?Q*Bf86Vk6QK6CxBUG{KtM>VzxjqI=pMee?YybSZp=pv^klyxHL5j zz5D~fDII4M1frlP%-{~p``NQhQJi9g0NT#qneBuYOCRtb9@8^#GtQ#1g=li~Yx;&= zzahHtnv2PF(3^t*R>TvhBsph)dUXrA!H@LKNN6S%A z(?)8=R9q8p@C-B=!Hn9z*|JhF^`JYoA6X;%sX1mPN=drGt~jL8Pv#Z3e@E+$k{z>z z4@KG7nW6iII^va=^VI(RNM&3)ewuyN(A{AOJfQb-WKU~2m&UbBZaj+4;2!2_;y=?F zOw;i>B8n3_nE~K`eTj|jp$*U_t-0>K0W8uU9x?l?$e;WRCl090oQ8ILXapgm(&M7r z_wM|~i%k#pJqk}F;qIBRN-j5~8^|uW++%PI{&sU4n|3~`)ctNkCxGqY)leTMrBI{} zwB>Ef<#T6|4I9N6#x~uR4faOn7sO6JO4KIZz8UeV?f$v(|1bc6a-*@EhnV(d#gN}=A6@)too7h!D9p?rj5NAT869Gn_qSzl}NwK5L4i!l* zvV`EEZv}SsUYcot4s(>q6opYBUb`5u5+Q=P?E&Y5zg?`_e}^K?m&Hn%sHg4?7qjQa znxOd;NX;qH<;&pQmr4nz)BdL1G*O%iL1=uR3Y*%kM3Y_yi>u*q$62Qt{Osqy!M|~^ zW#|M}d$wA;}t$ny^1+)*ClwvM)}@hlm4#?W8t?l7iN+p2!+~ zGI?W=6;Mj?`-gBIA9`a=`{+S<4<%k6f||Yi!@*{E*j?W*Vs5?$%O6MsZm1N)hBZLD z>}zG;pVoNC6^C|L{{wJn8W*49a0oJMiTsECN%CbGf{MrnC(NXkJL{62dRbME<`c+v zNahBAfSzQ7zhRZ8Xcg-GzC;&-ci$XMPZx%$z$9T6tRDD~6uXaysH~Xv@g6K&IN$S1 zEcXSm>aBkh0VjcZllPqNI6WVs=Nh&M1SGz9WEPe~bOHPd$z&?8=L`9CY0whqg0p$j zmRUb<(ljfQ|3L$$C*3ekLJZ19#P%YOCTfYbLSj5Ulu|HanF6rrZgqjG&Y{pX9zkf{ z3vCbK35NBgiVRy|0ZbB+sdsc56+|6B@5pb;ih$07k__py2VY9M2l5~ssK(;`oytSS zogE!}qL$L*a~gHp=C5hg2hSF4ta8sk0PwDnnQiYmZRBu zYx%)2ed1G=kS=gG2}9STw6+zG^gSGKgupNKelHE==sioh3D=xGT^H(aEV|?6J$=JH z%n5&alEhcX$!WSmA-g?80=`2iD2oU{9Ye9WKhhLR^`p; zvYLJD%A_q7%4En#aAzl8va2&TpNHL=E;i|&(YS9KF6lO(NSD_cuubjX9oUZ|U;_hi zT_bFv-37ZOm~=|kv~sZuW0%cL2dTXAqhJAkNW{h zC|g6N!AI-ks;alWVX(*L)eaPyF}nb0bqh@)f=L0Jt=iPWm=iy!dht^|eDmB#sO=*_ zuX&+9(8YMcRa5Smd%S&TrS6}~jAy~deO-&Q9E8crmIvG`Nq_~nH=17VA?jKlv(Rv25 z;go=ffoftU-icOPF?PTA%RY4EleTVM$C&n&FL2b4(a(bsjf9_qAuzsBz`xNI4x{(% z6M1*?@5pnvZ{4CNjHW{3BBy@;ykQL(u&~VL-=O8HS>l-(E@<4*aVvOBX{bpcz{#`w z+GiG490#x!E!tIcG4sZm^$RQy9iD64_cdR-+xai7(qw`IB&yQXwbI&(F2A4ZGDq{b zVD^UdH6BF%PYWuIR6U4f^ghJZ)AJjL4`bVo?;am-ZQl0b?FHM!b$2S}ldK>! z@M|R43}7$5(z3Gd4cVz^lpo&ZHa~A0@cY9->N6;vs=Rs0v&hbvh#2hhUiC=(U~8c8 z=tF^J-=Tp=uE?)M^n#6C;`*x<)nA{CsBbXd*i^nx^vAn{5(NdnfLsbdh<>5Fs}jc{ zd`ZTNNp65Bml{N1A+PkQePlYYc{3!OuorqDToN$UZBy^QmoG04wM|A3pg4W8BxWQ} z&mH(PJUAon&bVRXX}!XGFZMC86G>|S#;J^%O%n;?29n=)!1j}K@SDb#!Xh~_rS~d=;A16ACq=^}a_P$f_YoYK*lB%UU#pdy>vXN4vDg(QKexSoX)ES=rDXs8$ERYEpmeBQV~n&Gm=uRlM7e;zCwf8$e+>lt zWckr&zHSS9^^kfIj>x1Nq5gFrK?>h5Gv&X z6*5gcAoTzM*C5syW}BW=VAmHj3b*whAQBUx8rtnpIQLpWPHXFoZMdlmMBB#b(4Qx7 zw|Ko}1fQg&%3_1y$cM^VQ&pOw{Bj_$>}~CAoJ$!TZ#{%2t+eW%UC&;4+uLN zg9$7?xk{Nk(~XM{Gd-Q?Mze15so!#+Z^s1aum9*1LK;bx>5f zEJ>xEbyOwA-!$(8w2KJlBJ~qJFi?XyBA*`qLo|33fCLcV39@bgoOO2}1S$gY(@v+3 z1VQM>NUY9}G}wGbxw^XGqE2hZW?REj6-5yrqpOq_I~@=duCgn0si zqepHhpiWOwFT+={@9;rdWC-xD7HsYSX7~X8HC$S&x@gG~Ph7!UwvNK7^|+k#1=w5m zi^j%kunsazVI(xufF6XeaB~5|pgj&f7}-?7oui&R3)Buibu*kqZWvF49wR5WVtloa zb%L~$)0E8HfxmyPf))PWyOC(yjft!>t{A3mXFxsBJYL=(_pvMRVJihV6fpAB%h7q7 z+sFZ<$NvrNihO{pE)3GMxcHzCU}}fULx0k*BdnGQk0@wj8jXP#hC*5)f!X%<+HB(B zkt|aM$`}|}KwqQQ%mkur{0hPFDd_4RH+hNQn+#JgRR*APl@QEE5ja4L-4r&;h_ys!rhC$$Bhu_Nn9b;>1iOlp@Bhr2{>AS3x+;T-_Ev( zva)Sy2L2M*#Cf<-T%8FT<%7%OQa4f;ONuttGL{BNi#j{6Kpiy!6{U&B(=f-hn9G-~ z+P)e__hBtR=vp zdKIcktfQwc2^BAz{N~MiY?Bd=f4l1VP+C*L8W-0uWQ0MAd|-&dJNG&X3NMQm5dqm9 z?U)vcPffJPb#H??`*#h4dtMs&UzqMLb-k;%R-G0xH)lnMo2^5|lx02R{JQhND&*p2 zXP+3kwJ!HCq~7g+O4*;OZ}KT9v1#bla(sLP%|jVLxG{3vsinrdAzKGsADk8Z ztDXcG3izTL1)qa$U79k}>_DlsxA$bw zI!Dl;A;f+F#ZX{=PJ4H}JP(cYSofd#nKDNMK`?F#0FfTZw}n&$VP~GQ@tfP-5OV<(~JiycWv8;LE`#Q|ToCO5xaL2dC{O&$WWeK?2Zx0_ltviF_ zQiSK69lJR<#@rD|8n2mpsy44ant1%dqwR93X8ZGVv%!E^{%lwX?y7XxF3Y)Dynk=j zk7fq{dVmt!bxQqQXNPqihapvR_jrEpWz)``i}zO5ojI}Nl|+)3kByoj>>%{uA1;yB zuP@D?>;2)#{+JGoxBH)2eNG z3dIHHY`lY$Q$lU#Mfpn1;$`A>!jJM;TaQ9IddVwzrortStRsF$QY61k8z1;(Q1m`g zHOYL>cL(LS*S_72S5u`el$utU38Y$WU+W%Z|B8tbMSLpHoH;wZm+Gr$L2TtA#$M}95cgtB!%O24#4LnOe}}*O zosuqu@@S|tZ+BS>J|?z(^f9l5WwfEfo7z28T=aVn1lSX~ns`$6fU+YD(Vg>Z>i|#^ zc4qQW96KSZO9Z7XtaOdTFzf)0jfPVvNd?ph&)Q0wAPmQlr%k|I9N1|Ugbup9oMu1l znY+GM2LJ?gjRmT+ZP0riDp96g{0b`Pnb0dqN2Hz7-mDAiJOmSoChCCH(1l-g1`mJG z{dncA8HRyE0G#D@w!^Z9iu8AYs1=YN(Fa#g_Srv$eFi z+MiDJ{QkLM^S8S6;vm!OKt_E(o>aID>xZ#xMA_}~xyD74m4!L3l5legt5cTm3? z_pe{0kQ2oVPaC`vqHZj>3%|jx-_-pDDSkWr=sqv6PRC*o1D6dS<_8?I!J%}yRE3lc z#qL#!L!V>UKupG;kGj~=@dAv#Z^gZ35 zy5LtWNUoWub|`el5?!}?`4yaol@E###s(AOfbZT7F%c7#hEl^sJch}|b;)kHbNpDq zi&w8IKUW(m%>5}->b)VHcB~yuuF|?cJg@E8x~?F`47FNWfIb5uOwhPbsER6Y`Bb?N z;}G2Ig$SdstNS~!TzRPZ4$-iH5>IPPauVAcD#78e!v0&J6NkQJ(GrXL9nwLZ5aUmd!Eqipff3oP*=k#)cw{fdYD&2Cm%CEs*cY8zjL=;%kyyEue z2+jbq^OXGn)m=og3&j?SG3^w9+?!&}%kZLQS)<>avcK~Tbo~Ui}0*dPJUa-s#BpH&;}!<=~xCEfH=2>J0yvg!h))Faj=IK6~$p zdVu)s@(RzUVy-?c2;1=S*vlzb`hQOYUKjBt1>$Tv&Iivj7x_P;OqiQ{d)uoYWy-O4 zVuiFcCi4q|6l<1svPsTD^mcF*%)%RKm*d|M0Y74YQ}v5b;=oHs-*gs5M!~Yj`D9-Z zhqcE>O+0lyM`8Z&Z!uy3w`HpBr4)Cu2L8<)c{C%8`p#b142h)SGhuc?qM(FQN{fA+ zb4e{eGg&oTluU|$&d{Z@zX)Y5{*C>W&W@|Z4%IoC>d&UFF{chmS@OtL1l`|p8>Bx~ zJ?y>MZa;2P0_uNy6OA+fchj|hgf@ic&4@Ak9grFWvcQeKf7)*}#e|o~@~n=0jyA}j z^ExHC1hFuh;uHGi!Ho#uKh%V+TAK?&2kIG94XFhTMfLNL6k~;w|4o|xxt}2+2OgHq zxL|d_i^~kz28scnJ$vp#-$gfgFNXSLh_b&{;Pe?Y)|W+?s0vMME|%}_K2+6tjBX9W*@e_gDEEgnaOq|5)m6rVsm zz>kq4&+voyXsYoD>2a>r0_^n<`fzBqhf4qpXw*P!P0Ab?n;GHeCXmTv25HFueh61B z?zOEOa9wCn@xgGHbsiyR0_Fimn7K)0M8p|nTyfUSmi-`H@L$po(h=qe7=&|*>R4hE z!fZu$guJ}17ER%@w~s^yQWdrLxrYISSD}rUiJ0KmtBmpIstTzVGEo!I(nyL{6R_Ke zgKPK`usDV(_u)f~u$v=XXr{Fo6D1`iC@6~aWWHT+cd^mX)iT3;KK2gie;8m@{=H-Q zjT^m3mnKbEgt4fcuO%1_yc*tIkr?JZEmqrWT!RKoQDeV_G6V2BRCyHPBF)^ZuCFfx z(C(H6aqLM&6nIYAPGZcxov=xe5}3WaNFYY-#wW;6Z^bDkrJ+xf<`bEYkB>?sVj1oN z>79|qB*T}Kb{Ks>+8XL$*_y_Pc5t}MjkyX{td)0@O+0S8elq(D39hY4m_g|yoF%9) zfhiX7Kyf~%3uJQ?_$SSql!ke%%Rw>0(pt-T$w!zo0Bu6sLlXAjbmIKVPN*=zVJ}0V zSJhEZn+#P?ueR-4T5>E=|p?r&4 zQk)RN9l`7T`w4Cr7;`efRLLjLCmk*{K8S;T#=aDr5=rdx>jSpxO^=DV!cacW)i@1d zDH`BvK?|m~GE8ZBf;!%pFJOPSm5uq4k{i{ELEA2zrOR@+{u3*PDZA*drR9e?NqLh)7j1{^&FOIZwa-8!HhgHz`E* zmNk)%NdbK@t6=Anj)?2)mgYV9n_Ga<_T2f(FUV)4k;#nD{_piVfx#0#MDv3cs?Zf7 z13`4vX(w%l%&b(4|1p2G)x`iwJBK6RDooN8nHWSV!5pF;CzNc?eE6i%c4)e<@7|#; zIc&fgM4TgHPOIc?jX71%k@ML12wcf93Vy1^@@haOqP4%%j?d)WT@*1bu8 z6{JcV;|T)FP{Upek~JaRJbPfkg(FFuk?mB3SQy}W>`hFux)o}b{bn&j?vY!oa^ zQPjGeI|R454+ifQOtY{HKW94|VQ8^f_W!wy;S$X*02SC$BNvP{tD}sNK*-SBT~`xR zRQK8Wye zn!-bIt`gRn3kb=;FhJQbtucH$QB6)16RTRH$ z0=SDN+5(5gI>LdIiiFLn2+WFvL<~RY2F)FYC~25zIKO|z7Gu64aX93dkuw1}U=*IE zY$#ceyY)Lr=HLAvDpz+1yr=+@X7;;sR$l)+XgD0NZ4;*;RV|hwQsYo1 zKhQYCwA+H~)=BLR^sABopR%+8Wgh8MacE?R(gl}?1b%^U2 zg=5}$-MSO(%bT>CzS{dTad@mK#f3-VR4RJ@XNDsTM7WrNHb2O@jt4Lpn{jH0!9m z0TeD2zls>wsb^KQWvj4!8_l8QrGRTtT#MGn@XkhE1T}m#9(z89^j%}xSj=5-y;t&s z*biBl^N*?n*{KrCy^F1)<=3wSgm_ie*2aX2t%;Yw05bE#oCF@j9nE5Ga^$u z6h@cYCI$AxX#ewB-{)n9ii-0-A-M|oU^42J@ewmi<**w!_*~&?0fYt#NPStc4B)E} zD4w$e{rRCHw;LJq_1$z+UGHZ{ zja1yMFi;Pl5{(WhDYO{g@ckC^G~FLt%KBSKh81ACNofFN)C6c_7X=0~VF*@i>)4L!E{p-fA8?!M4ViM)QAzU3%a@ov4$x1#G^VYAnMg<>%%)!+b-p3AO3!~6TUcK580zOZVp zWNCzyq@)|PT7-o{YNCA1zlEAbR_C&Z=xe*rUZFj!!fR{fJW)|J7 z!+j2ox?fqWNpL*!8IJ#*6F2?OrF*IMNC|br?-4JFzugzqO$&h)g2jZB6&MT`#Q9=> zXXfUrWx*fj31S}cv_!0|b|@HAiS6s%i-|gdt5(e&8oC?~UfDFIo~)J7GvQEKhHi8y zR7tTiWi@FviZ%n!i2l z(%KJe?39~>15W&-{ZUF#6*j?w8CE4>p)5waEOgvjh@PQ9H4Fv$<=T43-`MCu%Itj* z9%R0>ecD%lwVms6+MjZlEex)IVF2jC_rUiI1=LA7EqXe$5AJwzK^XcY*A3OP^!3*l zxHiYhOon(|y1(;_OJ3`qgX7bor0E{mpnR~4VhSjsm$)e$CL2Bd|BGSOSprE})(nAy zmY`xNO@0AAOFcV@b7>G41}E_@fa@V5Td{F(^X{4iVKmhD+B5wHKkr|($hS%^_y!Oq+f6jnvesRS?yY;A3lMAf@tAYLcA1qQp`Z zEZi>|8Y;n~7a^*RQb56}G94U_KfWy@m#Obq{JGuYnR%fXwA`4BBNO!3C(EkBh+NU+ zHH4%RdTny58ZD#+&a|%qH?tyPx(R}C$y*C@bc#d_bJl~P&X;Shd4CYuvgK>o^vtuK z2U*qYfeI=u=!yo%M8Y_j*yljp9U zFMqy2RV-!891T+yDGRPCc8vM<3K2i}*Ijt|D}|RO@T_Z^-tVt}Ys<^~9zQW?*NTv6 zsGlsrYi?!5MEi#bYakKbUruaH7}6T9Rb3CeSs$yw=fwrak9Q~ZKR*kFUZ2LZMQbtAs+D;|7s4dP*;B0R_5z3M_jd?hXhrG!Dw>LD7tE$2CF1SifkVbmCG4+AZv!>RHEo*fjhK$wn$1gM zmJ8-P#8Pd8T96#kK;b6J$z>|+-g@TI0a*s${hD#9>gx8nUhU7%$HFYUXy>k<-Onw9 z4{y?capcGXxcnJ%ncvKMgZCdi=>F|Fy8Be&ZR0IYrB~sn!I_JheNhg1%fM$~4uXQ1 zz@g;H4LOzc#z1z%;^G);sTRN`6fv$0fF{IVD{u%me!rBPd;jwKEU6j(Jsv6*e=bZf zyp=3+zE@gg`k}(+?|!2*lvPG&E?dSQec9FDUtBp^aNCZXgO0<6@W!4xb&94^;?|Lz z81SHmOW9HG6xMQ;dFM?Q)&Xn=ur7~*RI>4Wh|Z$(9Va!7YXd#Aesk`*-d>y&tob90 zj@3royXSK2&({$#0p79$`4a~QN=64Sh}5IP3uvi^7>vgLV(;mn#!|RkP=Z9yEwPRb(3O_#~Q?rZNSth&IJmKbEux8!w%%FEses`OI%pomgB0`Wb@b+41 z>1W7(tD#ItN=doTWx@31>xz(w=SDOeD<;Oo>T&pzV+iP_>9D{aF+MXE03mu@<9R2{ z6q6V$Pp?|l3?BJ!xru?nMYmz!V6MAaW^Yh&N0=7>*s9PkX=3ia%Di3FtB)MZ2FIhs9_R#g2%{xJ3x{yb+<$425R!f%jY0fVw z@aCF1rV%WL2@KMDPs_XZrx#4t(P{oX(A4bL_8OCW6qW{5RG+Q+@If`}_GsmTEWO>O zXN$C^`u`4Ee8w|=xf0A^M-a=NW2cTk*REfuYI<+^bhsRmlhCBZbD2etOq2u<}91R2QO@F?ho}$mX}J5cGURh z|H}98kYIR0UTLXNe!lF^=8wS=f9mSA`v(UNdzW@piQVw1wv@U)TT-au!-x1AH@pJ6 zE9Y(6bSwVm!C>aPb^N}I=lb5T?(lWGRgVt8 zzHrdE@D5M7`<}ITHk5U{<(_NL_--`Ye_6E*iz$MBjfYEeYJ2OS_HlvyQl63$djZiz zS-YDMWH}an((CR!hS)26t`L;&_dQl_e0^YF-(4^+XI85rlufwU@$uwn&Q2LiieT&h z5UauOeG&7Vl;!N4)6=gjNWQK55cvF=X~*`*8KW9ZMg9)obj-w9!X@gkHQC%nBWPy7 z0?ei_o4ywXj?CKmx_j}aD`z&o-(B`qP(@L8&Z5N`tf^+CSp?^JA~?j2lQZK0JK9Gz7N@c4A)m6ao*bKTBT% zaq(F``>V@eAU^#zH-`pyl_-~?4g*~jrh^x{>@iyRX=JA*}s18?05Kv?9f-T%!xc+iG-Vr2hl zzw6q4;!mHpwsgs{JZr`#^7F5VeVdy*%vV{t@AY9O)8Vd|1+xkh@zhd|XI!&zUa*DN z^E2~c+t;8YfG?eIy&8_3bpFnwfyv_H!UhQms@d)esZWi~%nag|w-y!JcYXeRBsn=2 z4*}n-RlQd_46eNudHqJP<;UZ1$62h)vO^uK56yMN(YJsYlMDO(b zpL>2RR8)*wttcyuAd}GB{^PnH-xr*+qMHQwU-4DWGkfi5ZJ4~26deCP3~eCM@%w=eu%Jzx3;5@DP+ZJDXHBt$~I;S&~6l0D2e zN@{AnHxG^v6gPP+lk;l4SPU4Tub8jCzhCm3?%WAcMRUtH zeVN+Y*!qt_AJl)kmiNv$J}*AXGzp2mrA10C*31RCcZydXwHJ?#&z`gPbN=;Gw+}a- zm|MB$*T>s?s zPx?sJ)qk{3SqV&vjj)o6`}X4e$%VC(tgWAl2}O4N`W5CH%#V9^CM#=ZVW{x%X20_csoWjrh6Te#^M+%73;&Agg}n)2AL* zr?jWMxUdqU%L(O6r(>zwdwB||us75-vZgDvvE;HVBUg)9Va}eSVjler|KM-&4|d)E z?_Zq1Q@r}-&Fj|~IgyabD=y5cRSsFbt*!c4(<(*9SV7(if2V#hTiNh-Fkl-O{#m)q Lnpt4#7WRJt(dN*7 diff --git a/examples/Facial_Recognition_MachineBox.ipynb b/examples/Facial_Recognition_MachineBox.ipynb new file mode 100644 index 0000000..77bbbe9 --- /dev/null +++ b/examples/Facial_Recognition_MachineBox.ipynb @@ -0,0 +1,420 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import (\n", + " \"flag\"\n", + " \"io/ioutil\"\n", + " \"log\"\n", + " \"os\"\n", + " \"path/filepath\"\n", + " \"strings\"\n", + " \"time\"\n", + " \"unicode\"\n", + " \"fmt\"\n", + " \"encoding/json\"\n", + "\n", + " \"github.com/machinebox/sdk-go/facebox\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Connect to MachineBox" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To perform facial recognition, we are going to use MachineBox's FaceBox. If you haven't heard of MachineBox, [check them out](https://machinebox.io/)! They provide state of the art machine learning technology inside a Docker container which you can run, deploy and scale.\n", + "\n", + "Here we will assume that we have MachineBox's facebox running locally." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "faceboxClient := facebox.New(\"http://localhost:8080\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Train FaceBox to recognize a face" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We are now going to walk over images of faces in a directory and provide these faces to facebox. FaceBox will learn how to recognize these faces in images. The faces that we are going to use here are of someone that is probably familiar to most:\n", + "\n", + "trump1.jpg | trump2.jpg | trump3.jpg \n", + ":-------------------------:|:-------------------------:|:-------------------------:\n", + "![](https://raw.githubusercontent.com/dwhitena/pach-machine-box/master/data/train/faces1/trump1.jpg) | ![](https://raw.githubusercontent.com/dwhitena/pach-machine-box/master/data/train/faces1/trump2.jpg) | ![](https://raw.githubusercontent.com/dwhitena/pach-machine-box/master/data/train/faces1/trump3.jpg)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "inDir := \"/home/dwhitena/go/src/github.com/dwhitena/pach-machine-box/data/train/faces1\"" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "ename": "ERROR", + "evalue": "// warning: redefined identifier: err\n// warning: call to deferred function f.Close() returned [] values, expecting zero: %!v(MISSING)\n// warning: redefined identifier: err\n// warning: call to deferred function f.Close() returned [] values, expecting zero: %!v(MISSING)\n// warning: redefined identifier: err\n// warning: call to deferred function f.Close() returned [] values, expecting zero: %!v(MISSING)\n", + "output_type": "error", + "traceback": [ + "// warning: redefined identifier: err\n// warning: call to deferred function f.Close() returned [] values, expecting zero: %!v(MISSING)\n// warning: redefined identifier: err\n// warning: call to deferred function f.Close() returned [] values, expecting zero: %!v(MISSING)\n// warning: redefined identifier: err\n// warning: call to deferred function f.Close() returned [] values, expecting zero: %!v(MISSING)\n" + ] + } + ], + "source": [ + "// Walk over images in the training directory.\n", + "if err := filepath.Walk(inDir, func(path string, info os.FileInfo, err error) error {\n", + "\n", + " // Skip any directories.\n", + " if info.IsDir() {\n", + " return nil\n", + " }\n", + "\n", + " // Open the training image file.\n", + " f, err := os.Open(filepath.Join(inDir, info.Name()))\n", + " if err != nil {\n", + " return err\n", + " }\n", + " defer f.Close()\n", + "\n", + " // Teach FaceBox the input image.\n", + " if err := faceboxClient.Teach(f, info.Name(), \"trump\"); err != nil {\n", + " return err\n", + " }\n", + "\n", + " return nil\n", + "}); err != nil {\n", + " log.Println(err)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Using the trained FaceBox to recognize a face" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now that we have trained FaceBox to recognize our face of interest, we can try to identify this face in an image. For example, let's try to recognize this face in the following image:\n", + "\n", + "![](https://raw.githubusercontent.com/dwhitena/pach-machine-box/master/data/unidentified/image1.jpg)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, let's create a struct that will allow us to unmarshal the JSON response from FaceBox. This JSON response should include an indication that faces where detected along with labels of recognized faces and their locations." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "// IdentifiedFaces includes information about the faces\n", + "// identified in an image.\n", + "type IdentifiedFaces struct {\n", + " Success bool `json:\"success\"`\n", + " FacesCount int `json:\"facesCount\"`\n", + " Faces []facebox.Face `json:\"faces\"`\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we can use the `Check()` method on the FaceBox client to check the image for recognized faces:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "ename": "ERROR", + "evalue": "// warning: redefined identifier: err\n", + "output_type": "error", + "traceback": [ + "// warning: redefined identifier: err\n" + ] + } + ], + "source": [ + "// Open the input image.\n", + "f, err := os.Open(\"/home/dwhitena/go/src/github.com/dwhitena/pach-machine-box/data/unidentified/image1.jpg\")\n", + "if err != nil {\n", + " log.Println(err)\n", + "}\n", + "defer f.Close()\n", + "\n", + "// Teach FaceBox the input image.\n", + "faces, err := faceboxClient.Check(f)\n", + "if err != nil {\n", + " log.Println(err)\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we can output the detected face information:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{\n", + " \"Success\": true,\n", + " \"FacesCount\": 13,\n", + " \"Faces\": [\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 199,\n", + " \"Left\": 677,\n", + " \"Width\": 107,\n", + " \"Height\": 108\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 96,\n", + " \"Left\": 1808,\n", + " \"Width\": 89,\n", + " \"Height\": 90\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 163,\n", + " \"Left\": 509,\n", + " \"Width\": 108,\n", + " \"Height\": 108\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 186,\n", + " \"Left\": 2186,\n", + " \"Width\": 89,\n", + " \"Height\": 89\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 166,\n", + " \"Left\": 1638,\n", + " \"Width\": 90,\n", + " \"Height\": 89\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 116,\n", + " \"Left\": 1453,\n", + " \"Width\": 107,\n", + " \"Height\": 107\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 405,\n", + " \"Left\": 1131,\n", + " \"Width\": 89,\n", + " \"Height\": 89\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 206,\n", + " \"Left\": 1300,\n", + " \"Width\": 90,\n", + " \"Height\": 89\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 176,\n", + " \"Left\": 1957,\n", + " \"Width\": 90,\n", + " \"Height\": 89\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 495,\n", + " \"Left\": 1462,\n", + " \"Width\": 62,\n", + " \"Height\": 62\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 1158,\n", + " \"Left\": 2181,\n", + " \"Width\": 62,\n", + " \"Height\": 63\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 175,\n", + " \"Left\": 963,\n", + " \"Width\": 108,\n", + " \"Height\": 108\n", + " },\n", + " \"ID\": \"trump3.jpg\",\n", + " \"Name\": \"trump\",\n", + " \"Matched\": true\n", + " },\n", + " {\n", + " \"Rect\": {\n", + " \"Top\": 544,\n", + " \"Left\": 1647,\n", + " \"Width\": 75,\n", + " \"Height\": 75\n", + " },\n", + " \"ID\": \"\",\n", + " \"Name\": \"\",\n", + " \"Matched\": false\n", + " }\n", + " ]\n", + "}\n" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + }, + { + "ename": "ERROR", + "evalue": "// warning: redefined identifier: err\n", + "output_type": "error", + "traceback": [ + "// warning: redefined identifier: err\n" + ] + } + ], + "source": [ + "// Prepare the output.\n", + "output := IdentifiedFaces{\n", + " Success: true,\n", + " FacesCount: len(faces),\n", + " Faces: faces,\n", + "}\n", + "\n", + "// Marshal the output.\n", + "outputData, err := json.MarshalIndent(output, \"\", \" \")\n", + "if err != nil {\n", + " return log.Println(err)\n", + "}\n", + "\n", + "fmt.Println(string(outputData))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Go", + "language": "go", + "name": "gophernotes" + }, + "language_info": { + "codemirror_mode": "", + "file_extension": ".go", + "mimetype": "", + "name": "go", + "nbconvert_exporter": "", + "pygments_lexer": "", + "version": "go1.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/Feed-Forward-Recurrent-NN.ipynb b/examples/Feed-Forward-Recurrent-NN.ipynb deleted file mode 100644 index e4b50aa..0000000 --- a/examples/Feed-Forward-Recurrent-NN.ipynb +++ /dev/null @@ -1,250 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import (\n", - " \"math/rand\"\n", - " \"github.com/goml/gobrain\"\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Feed Forward vs. Recurrent Neural Networks" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "(comments from [wikipedia](https://en.wikipedia.org), examples from the [gobrain](https://github.com/goml/gobrain) documentation)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Feed Forward Description:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A feedforward neural network is an artificial neural network where connections between the units do not form a cycle. This is different from recurrent neural networks.\n", - "\n", - "The feedforward neural network was the first and simplest type of artificial neural network devised. In this network, the information moves in only one direction, forward, from the input nodes, through the hidden nodes (if any) and to the output nodes. There are no cycles or loops in the network." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## [Gobrain](https://github.com/goml/gobrain) Example - Feed Forward Function" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "// set the random seed to 0\n", - "rand.Seed(0)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "&gobrain.\u001b[32mFeedForward\u001b[0m{\n", - " \u001b[33mNInputs\u001b[0m: \u001b[34m\u001b[1m0\u001b[0m,\n", - " \u001b[33mNHiddens\u001b[0m: \u001b[34m\u001b[1m0\u001b[0m,\n", - " \u001b[33mNOutputs\u001b[0m: \u001b[34m\u001b[1m0\u001b[0m,\n", - " \u001b[33mRegression\u001b[0m: \u001b[36m\u001b[1mfalse\u001b[0m,\n", - " \u001b[33mInputActivations\u001b[0m: []\u001b[32mfloat64\u001b[0m{},\n", - " \u001b[33mHiddenActivations\u001b[0m: []\u001b[32mfloat64\u001b[0m{},\n", - " \u001b[33mOutputActivations\u001b[0m: []\u001b[32mfloat64\u001b[0m{},\n", - " \u001b[33mContexts\u001b[0m: []\u001b[32m[]float64\u001b[0m{},\n", - " \u001b[33mInputWeights\u001b[0m: []\u001b[32m[]float64\u001b[0m{},\n", - " \u001b[33mOutputWeights\u001b[0m: []\u001b[32m[]float64\u001b[0m{},\n", - " \u001b[33mInputChanges\u001b[0m: []\u001b[32m[]float64\u001b[0m{},\n", - " \u001b[33mOutputChanges\u001b[0m: []\u001b[32m[]float64\u001b[0m{},\n", - "}\n" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "// create the XOR representation patter to train the network\n", - "patterns := [][][]float64{\n", - " {{0, 0}, {0}},\n", - " {{0, 1}, {1}},\n", - " {{1, 0}, {1}},\n", - " {{1, 1}, {0}},\n", - "}\n", - "\n", - "// instantiate the Feed Forward\n", - "ff := &gobrain.FeedForward{}" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "// initialize the Neural Network;\n", - "// the networks structure will contain:\n", - "// 2 inputs, 2 hidden nodes and 1 output.\n", - "ff.Init(2, 2, 1)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0.5524794213542835\n", - "[0 0] -> [0.05750394570844524] : [0]\n", - "[0 1] -> [0.9301006350712102] : [1]\n", - "[1 0] -> [0.927809966227284] : [1]\n", - "[1 1] -> [0.09740879532462095] : [0]\n" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "// train the network using the XOR patterns\n", - "// the training will run for 1000 epochs\n", - "// the learning rate is set to 0.6 and the momentum factor to 0.4\n", - "// use true in the last parameter to receive reports about the learning error\n", - "ff.Train(patterns, 1000, 0.6, 0.4, true)\n", - "ff.Test(patterns)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Where the first values are the inputs, the values after the arrow `->` are the output values from the network and the values after `:` are the expected outputs." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Recurrent Description:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "A recurrent neural network (RNN) is a class of artificial neural network where connections between units form a directed cycle. This creates an internal state of the network which allows it to exhibit dynamic temporal behavior. Unlike feedforward neural networks, RNNs can use their internal memory to process arbitrary sequences of inputs. This makes them applicable to tasks such as unsegmented connected handwriting recognition or speech recognition." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## [Gobrain](https://github.com/goml/gobrain) - Recurrent Example" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Gobrain implements Elman's Simple Recurrent Network. To take advantage of this, one can use the `SetContexts` function." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "0 0.5524794213542835\n", - "[0 0] -> [0.05750394570844524] : [0]\n", - "[0 1] -> [0.9301006350712102] : [1]\n", - "[1 0] -> [0.927809966227284] : [1]\n", - "[1 1] -> [0.09740879532462095] : [0]\n" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ff.SetContexts(1, nil)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In the example above, a single context will be created initilized with 0.5. " - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Golang", - "language": "go", - "name": "gophernotes" - }, - "language_info": { - "name": "go" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Feed_forward_neural_net.gif b/examples/Feed_forward_neural_net.gif deleted file mode 100644 index bd7ab30112425233d82e68ecf3ab604e9c083ecf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13677 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 diff --git a/examples/Matrix_Operations.ipynb b/examples/Matrix_Operations.ipynb new file mode 100644 index 0000000..23ad389 --- /dev/null +++ b/examples/Matrix_Operations.ipynb @@ -0,0 +1,164 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import (\n", + " \"fmt\"\n", + " \"math\"\n", + "\n", + " \"gonum.org/v1/gonum/mat\"\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Create some matrices" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "// Create two matrices of the same size, a and b.\n", + "a := mat.NewDense(3, 3, []float64{1, 2, 3, 0, 4, 5, 0, 0, 6})\n", + "b := mat.NewDense(3, 3, []float64{8, 9, 10, 1, 4, 2, 9, 0, 2})\n", + "c := mat.NewDense(3, 2, []float64{3, 2, 1, 4, 0, 8})" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "\n", + "a = ⎡1 2 3⎤\n", + " ⎢0 4 5⎥\n", + " ⎣0 0 6⎦\n", + "\n", + "b = ⎡ 8 9 10⎤\n", + " ⎢ 1 4 2⎥\n", + " ⎣ 9 0 2⎦\n", + "\n" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "fa := mat.Formatted(a, mat.Prefix(\" \"))\n", + "fb := mat.Formatted(b, mat.Prefix(\" \"))\n", + "fmt.Printf(\"\\na = %0.4v\\n\\n\", fa)\n", + "fmt.Printf(\"b = %0.4v\\n\\n\", fb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Matrix addition, multiplication, powers, and apply" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "d = a + b = ⎡ 9 11 13⎤\n", + " ⎢ 1 8 7⎥\n", + " ⎣ 9 0 8⎦\n", + "\n", + "f = a c = ⎡ 5 34⎤\n", + " ⎢ 4 56⎥\n", + " ⎣ 0 48⎦\n", + "\n", + "g = a^5 = ⎡ 1 682 1.074e+04⎤\n", + " ⎢ 0 1024 1.688e+04⎥\n", + " ⎣ 0 0 7776⎦\n", + "\n", + "h = sqrt(a) = ⎡ 1 1.414 1.732⎤\n", + " ⎢ 0 2 2.236⎥\n", + " ⎣ 0 0 2.449⎦\n", + "\n" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "// Add a and b.\n", + "d := mat.NewDense(0, 0, nil)\n", + "d.Add(a, b)\n", + "fd := mat.Formatted(d, mat.Prefix(\" \"))\n", + "fmt.Printf(\"d = a + b = %0.4v\\n\\n\", fd)\n", + "\n", + "// Multiply a and c.\n", + "f := mat.NewDense(0, 0, nil)\n", + "f.Mul(a, c)\n", + "ff := mat.Formatted(f, mat.Prefix(\" \"))\n", + "fmt.Printf(\"f = a c = %0.4v\\n\\n\", ff)\n", + "\n", + "// Raising a matrix to a power.\n", + "g := mat.NewDense(0, 0, nil)\n", + "g.Pow(a, 5)\n", + "fg := mat.Formatted(g, mat.Prefix(\" \"))\n", + "fmt.Printf(\"g = a^5 = %0.4v\\n\\n\", fg)\n", + "\n", + "// Apply a function to each of the elements of a.\n", + "h := mat.NewDense(0, 0, nil)\n", + "sqrt := func(_, _ int, v float64) float64 { return math.Sqrt(v) }\n", + "h.Apply(sqrt, a)\n", + "fh := mat.Formatted(h, mat.Prefix(\" \"))\n", + "fmt.Printf(\"h = sqrt(a) = %0.4v\\n\\n\", fh)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Go", + "language": "go", + "name": "gophernotes" + }, + "language_info": { + "codemirror_mode": "", + "file_extension": ".go", + "mimetype": "", + "name": "go", + "nbconvert_exporter": "", + "pygments_lexer": "", + "version": "go1.9" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/examples/Pattern-Recognition.ipynb b/examples/Pattern-Recognition.ipynb deleted file mode 100644 index ae42ea4..0000000 --- a/examples/Pattern-Recognition.ipynb +++ /dev/null @@ -1,244 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import (\n", - " \"fmt\"\n", - " \"github.com/sjwhitworth/golearn/base\"\n", - " \"github.com/sjwhitworth/golearn/evaluation\"\n", - " \"github.com/sjwhitworth/golearn/knn\"\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Problem/Data Description" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Information about this dataset comes from [here](https://archive.ics.uci.edu/ml/datasets/Iris)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Data Set Information:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is perhaps the best known database to be found in the pattern recognition literature. Fisher's paper is a classic in the field and is referenced frequently to this day. (See Duda & Hart, for example.) The data set contains 3 classes of 50 instances each, where each class refers to a type of iris plant. One class is linearly separable from the other 2; the latter are NOT linearly separable from each other. \n", - "\n", - "Predicted attribute: class of iris plant. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Attribute Information:" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. sepal length in cm \n", - "2. sepal width in cm \n", - "3. petal length in cm \n", - "4. petal width in cm \n", - "5. class: \n", - "-- Iris Setosa \n", - "-- Iris Versicolour \n", - "-- Iris Virginica" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Building a Pattern Recognition Model" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This example model comes from the [golearn](https://github.com/sjwhitworth/golearn) documentation." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Optimisations are switched off\n", - "KNN: 1.14 % done\n", - "KNN: 2.27 % done\n", - "KNN: 3.41 % done\n", - "KNN: 4.55 % done\n", - "KNN: 5.68 % done\n", - "KNN: 6.82 % done\n", - "KNN: 7.95 % done\n", - "KNN: 9.09 % done\n", - "KNN: 10.23 % done\n", - "KNN: 11.36 % done\n", - "KNN: 12.50 % done\n", - "KNN: 13.64 % done\n", - "KNN: 14.77 % done\n", - "KNN: 15.91 % done\n", - "KNN: 17.05 % done\n", - "KNN: 18.18 % done\n", - "KNN: 19.32 % done\n", - "KNN: 20.45 % done\n", - "KNN: 21.59 % done\n", - "KNN: 22.73 % done\n", - "KNN: 23.86 % done\n", - "KNN: 25.00 % done\n", - "KNN: 26.14 % done\n", - "KNN: 27.27 % done\n", - "KNN: 28.41 % done\n", - "KNN: 29.55 % done\n", - "KNN: 30.68 % done\n", - "KNN: 31.82 % done\n", - "KNN: 32.95 % done\n", - "KNN: 34.09 % done\n", - "KNN: 35.23 % done\n", - "KNN: 36.36 % done\n", - "KNN: 37.50 % done\n", - "KNN: 38.64 % done\n", - "KNN: 39.77 % done\n", - "KNN: 40.91 % done\n", - "KNN: 42.05 % done\n", - "KNN: 43.18 % done\n", - "KNN: 44.32 % done\n", - "KNN: 45.45 % done\n", - "KNN: 46.59 % done\n", - "KNN: 47.73 % done\n", - "KNN: 48.86 % done\n", - "KNN: 50.00 % done\n", - "KNN: 51.14 % done\n", - "KNN: 52.27 % done\n", - "KNN: 53.41 % done\n", - "KNN: 54.55 % done\n", - "KNN: 55.68 % done\n", - "KNN: 56.82 % done\n", - "KNN: 57.95 % done\n", - "KNN: 59.09 % done\n", - "KNN: 60.23 % done\n", - "KNN: 61.36 % done\n", - "KNN: 62.50 % done\n", - "KNN: 63.64 % done\n", - "KNN: 64.77 % done\n", - "KNN: 65.91 % done\n", - "KNN: 67.05 % done\n", - "KNN: 68.18 % done\n", - "KNN: 69.32 % done\n", - "KNN: 70.45 % done\n", - "KNN: 71.59 % done\n", - "KNN: 72.73 % done\n", - "KNN: 73.86 % done\n", - "KNN: 75.00 % done\n", - "KNN: 76.14 % done\n", - "KNN: 77.27 % done\n", - "KNN: 78.41 % done\n", - "KNN: 79.55 % done\n", - "KNN: 80.68 % done\n", - "KNN: 81.82 % done\n", - "KNN: 82.95 % done\n", - "KNN: 84.09 % done\n", - "KNN: 85.23 % done\n", - "KNN: 86.36 % done\n", - "KNN: 87.50 % done\n", - "KNN: 88.64 % done\n", - "KNN: 89.77 % done\n", - "KNN: 90.91 % done\n", - "KNN: 92.05 % done\n", - "KNN: 93.18 % done\n", - "KNN: 94.32 % done\n", - "KNN: 95.45 % done\n", - "KNN: 96.59 % done\n", - "KNN: 97.73 % done\n", - "KNN: 98.86 % done\n", - "Reference Class\tTrue Positives\tFalse Positives\tTrue Negatives\tPrecision\tRecall\tF1 Score\n", - "---------------\t--------------\t---------------\t--------------\t---------\t------\t--------\n", - "Iris-setosa\t30\t\t0\t\t58\t\t1.0000\t\t1.0000\t1.0000\n", - "Iris-virginica\t28\t\t1\t\t58\t\t0.9655\t\t0.9655\t0.9655\n", - "Iris-versicolor\t28\t\t1\t\t58\t\t0.9655\t\t0.9655\t0.9655\n", - "Overall accuracy: 0.9773\n", - "\n" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "// Load in a dataset, with headers. Header attributes will be stored.\n", - "// Think of instances as a Data Frame structure in R or Pandas.\n", - "// You can also create instances from scratch.\n", - "rawData, err := base.ParseCSVToInstances(\"iris.csv\", false)\n", - "\n", - "//Initialises a new KNN classifier\n", - "cls := knn.NewKnnClassifier(\"euclidean\", 2)\n", - "\n", - "//Do a training-test split\n", - "trainData, testData := base.InstancesTrainTestSplit(rawData, 0.50)\n", - "cls.Fit(trainData)\n", - "\n", - "//Calculates the Euclidean distance and returns the most popular label\n", - "predictions := cls.Predict(testData)\n", - "\n", - "// Calculate precision/recall metrics, and summarize results\n", - "confusionMat, err := evaluation.GetConfusionMatrix(testData, predictions)\n", - "fmt.Println(evaluation.GetSummary(confusionMat))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Golang", - "language": "go", - "name": "gophernotes" - }, - "language_info": { - "name": "go" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Simple-Example.ipynb b/examples/Simple-Example.ipynb deleted file mode 100644 index d283f17..0000000 --- a/examples/Simple-Example.ipynb +++ /dev/null @@ -1,154 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import \"fmt\"" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Hello World" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[31m\u001b[1m\"\u001b[0m\u001b[31mworld\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m\n" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "world := \"world\"" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[31m\u001b[1m\"\u001b[0m\u001b[31mhello world\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m\n" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fmt.Sprintf(\"hello %s\", world)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Channels" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is a simple example of a channel. " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(\u001b[32mchan string\u001b[0m)(\u001b[34m\u001b[1m0xc4200180c0\u001b[0m)\n" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "messages := make(chan string)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "go func() { messages <- \"ping\" }()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[31m\u001b[1m\"\u001b[0m\u001b[31mping\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m\n" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "msg := <- messages" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Golang", - "language": "go", - "name": "gophernotes" - }, - "language_info": { - "name": "go" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Stateful-Goroutines.ipynb b/examples/Stateful-Goroutines.ipynb deleted file mode 100644 index b19ab20..0000000 --- a/examples/Stateful-Goroutines.ipynb +++ /dev/null @@ -1,286 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Stateful Goroutines" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To synchronize access to shared state across multiple goroutines, one option is to use the built-in synchronization features of goroutines and channels. This channel-based approach aligns with Go’s ideas of sharing memory by communicating and having each piece of data owned by exactly 1 goroutine.\n", - "\n", - "Comments from [Go by Example](https://gobyexample.com)." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import (\n", - " \"fmt\"\n", - " \"math/rand\"\n", - " \"sync/atomic\"\n", - " \"time\"\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## `structs` to Encapsulate Requests" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "In this example our state will be owned by a single goroutine. This will guarantee that the data is never corrupted with concurrent access. In order to read or write that state, other goroutines will send messages to the owning goroutine and receive corresponding replies. These readOp and writeOp structs encapsulate those requests and a way for the owning goroutine to respond." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "type readOp struct {\n", - " key int\n", - " resp chan int\n", - "}" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "type writeOp struct {\n", - " key int\n", - " val int\n", - " resp chan bool\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Definitions" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Count how many operations we perform." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "var ops int64 = 0" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The reads and writes channels will be used by other goroutines to issue read and write requests, respectively." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(chan *main.\u001b[32mwriteOp\u001b[0m)(\u001b[34m\u001b[1m0xc420018120\u001b[0m)\n" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "reads := make(chan *readOp)\n", - "writes := make(chan *writeOp)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Goroutines" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here is the goroutine that owns the state, which is a map as in the previous example but now private to the stateful goroutine. This goroutine repeatedly selects on the reads and writes channels, responding to requests as they arrive. A response is executed by first performing the requested operation and then sending a value on the response channel resp to indicate success (and the desired value in the case of reads)." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "go func() {\n", - " var state = make(map[int]int)\n", - " for {\n", - " select {\n", - " case read := <-reads:\n", - " read.resp <- state[read.key]\n", - " case write := <-writes:\n", - " state[write.key] = write.val\n", - " write.resp <- true\n", - " }\n", - " }\n", - "}()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This starts 100 goroutines to issue reads to the state-owning goroutine via the reads channel. Each read requires constructing a readOp, sending it over the reads channel, and the receiving the result over the provided resp channel." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "for r := 0; r < 100; r++ {\n", - " go func() {\n", - " for {\n", - " read := &readOp{\n", - " key: rand.Intn(5),\n", - " resp: make(chan int)}\n", - " reads <- read\n", - " <-read.resp\n", - " atomic.AddInt64(&ops, 1)\n", - " }\n", - " }()\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We start 10 writes as well, using a similar approach." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "for w := 0; w < 10; w++ {\n", - " go func() {\n", - " for {\n", - " write := &writeOp{\n", - " key: rand.Intn(5),\n", - " val: rand.Intn(100),\n", - " resp: make(chan bool)}\n", - " writes <- write\n", - " <-write.resp\n", - " atomic.AddInt64(&ops, 1)\n", - " }\n", - " }()\n", - "}\n", - "// let the goroutines work for a second\n", - "time.Sleep(time.Second)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Collect the Ops Count" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let the goroutines work for a second. Finally, capture and report the ops count." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[34m\u001b[1m918893\u001b[0m\n" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "opsFinal := atomic.LoadInt64(&ops)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Running our program shows that the goroutine-based state management example achieves about 800,000 operations per second." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Golang", - "language": "go", - "name": "gophernotes" - }, - "language_info": { - "name": "go" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Time-Formatting-Parsing.ipynb b/examples/Time-Formatting-Parsing.ipynb deleted file mode 100644 index e336b2d..0000000 --- a/examples/Time-Formatting-Parsing.ipynb +++ /dev/null @@ -1,324 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Time Formatting / Parsing" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Go supports time formatting and parsing via pattern-based layouts. Comments from [Go by Example](https://gobyexample.com)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Imports" - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "import (\n", - " \"fmt\"\n", - " \"time\"\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Basic Time Formatting" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here’s a basic example of formatting a time according to RFC3339, using the corresponding layout constant." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[34m\u001b[1m2016\u001b[0m-\u001b[34m\u001b[1m09\u001b[0m-\u001b[34m\u001b[1m08\u001b[0m \u001b[34m\u001b[1m07\u001b[0m:\u001b[34m\u001b[1m04\u001b[0m:\u001b[34m\u001b[1m48\u001b[0m \u001b[34m\u001b[1mLocal\u001b[0m\n" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t := time.Now()" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[31m\u001b[1m\"\u001b[0m\u001b[31m2016-09-08T07:04:49-05:00\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m\n" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t.Format(time.RFC3339)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Time Parsing" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Time parsing uses the same layout values as Format." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[34m\u001b[1m2012\u001b[0m-\u001b[34m\u001b[1m11\u001b[0m-\u001b[34m\u001b[1m01\u001b[0m \u001b[34m\u001b[1m22\u001b[0m:\u001b[34m\u001b[1m08\u001b[0m:\u001b[34m\u001b[1m41\u001b[0m \u001b[34m\u001b[1m\u001b[0m\n" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t1, _ := time.Parse(time.RFC3339, \"2012-11-01T22:08:41+00:00\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Parse will return an error on malformed input explaining the parsing problem." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "&time.\u001b[32mParseError\u001b[0m{\n", - " \u001b[33mLayout\u001b[0m: \u001b[31m\u001b[1m\"\u001b[0m\u001b[31mMon Jan _2 15:04:05 2006\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m,\n", - " \u001b[33mValue\u001b[0m: \u001b[31m\u001b[1m\"\u001b[0m\u001b[31m8:41PM\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m,\n", - " \u001b[33mLayoutElem\u001b[0m: \u001b[31m\u001b[1m\"\u001b[0m\u001b[31mMon\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m,\n", - " \u001b[33mValueElem\u001b[0m: \u001b[31m\u001b[1m\"\u001b[0m\u001b[31m8:41PM\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m,\n", - " \u001b[33mMessage\u001b[0m: \u001b[31m\u001b[1m\"\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m,\n", - "}\n" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ansic := \"Mon Jan _2 15:04:05 2006\"\n", - "_, e := time.Parse(ansic, \"8:41PM\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Custom Layouts" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Format and Parse use example-based layouts. Usually you’ll use a constant from time for these layouts, but you can also supply custom layouts. Layouts must use the reference time Mon Jan 2 15:04:05 MST 2006 to show the pattern with which to format/parse a given time/string. The example time must be exactly as shown: the year 2006, 15 for the hour, Monday for the day of the week, etc." - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[31m\u001b[1m\"\u001b[0m\u001b[31m7:05AM\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m\n" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t.Format(\"3:04PM\")" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[31m\u001b[1m\"\u001b[0m\u001b[31mThu Sep 8 07:05:16 2016\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m\n" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t.Format(\"Mon Jan _2 15:04:05 2006\")" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[31m\u001b[1m\"\u001b[0m\u001b[31m2016-09-08T07:05:17.689228-05:00\u001b[0m\u001b[31m\u001b[1m\"\u001b[0m\n" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "t.Format(\"2006-01-02T15:04:05.999999-07:00\")" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "\u001b[34m\u001b[1m0\u001b[0m-\u001b[34m\u001b[1m01\u001b[0m-\u001b[34m\u001b[1m01\u001b[0m \u001b[34m\u001b[1m20\u001b[0m:\u001b[34m\u001b[1m41\u001b[0m:\u001b[34m\u001b[1m00\u001b[0m \u001b[34m\u001b[1mUTC\u001b[0m\n" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "form := \"3 04 PM\"\n", - "t2, _ := time.Parse(form, \"8 41 PM\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## String Formatting" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For purely numeric representations you can also use standard string formatting with the extracted components of the time value." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "data": { - "text/plain": [ - "2016-09-08T07:05:21-00:00\n", - "\u001b[34m\u001b[1m26\u001b[0m\n", - "\u001b[36m\u001b[1mnil\u001b[0m\n" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "fmt.Printf(\"%d-%02d-%02dT%02d:%02d:%02d-00:00\\n\",\n", - " t.Year(), t.Month(), t.Day(),\n", - " t.Hour(), t.Minute(), t.Second())" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Golang", - "language": "go", - "name": "gophernotes" - }, - "language_info": { - "name": "go" - } - }, - "nbformat": 4, - "nbformat_minor": 0 -} diff --git a/examples/Worker-Pools.ipynb b/examples/Worker_Pools.ipynb similarity index 64% rename from examples/Worker-Pools.ipynb rename to examples/Worker_Pools.ipynb index ebd9331..701d552 100644 --- a/examples/Worker-Pools.ipynb +++ b/examples/Worker_Pools.ipynb @@ -13,7 +13,7 @@ "source": [ "In this example we’ll look at how to implement a worker pool using goroutines and channels.\n", "\n", - "Comments from [Go by Example](https://gobyexample.com)." + "Comments from [Go by Example](https://gobyexample.com/worker-pools)." ] }, { @@ -34,7 +34,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Worker Function" + "# Worker Function" ] }, { @@ -65,7 +65,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Utilize Workers" + "# Utilize Workers" ] }, { @@ -79,20 +79,9 @@ "cell_type": "code", "execution_count": 3, "metadata": { - "collapsed": false + "collapsed": true }, - "outputs": [ - { - "data": { - "text/plain": [ - "(\u001b[32mchan int\u001b[0m)(\u001b[34m\u001b[1m0xc42006f500\u001b[0m)\n" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "jobs := make(chan int, 100)\n", "results := make(chan int, 100)" @@ -109,7 +98,7 @@ "cell_type": "code", "execution_count": 4, "metadata": { - "collapsed": false + "collapsed": true }, "outputs": [], "source": [ @@ -128,81 +117,52 @@ { "cell_type": "code", "execution_count": 5, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "for j := 1; j <= 9; j++ {\n", - " jobs <- j\n", - "}\n", - "close(jobs)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Collect Results" - ] - }, - { - "cell_type": "markdown", "metadata": {}, - "source": [ - "Finally we collect all the results of the work:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false - }, "outputs": [ { "data": { "text/plain": [ - "worker 3 processing job 1\n", - "worker 1 processing job 2\n", - "worker 2 processing job 3\n", - "worker 3 processing job 5\n", - "worker 1 processing job 6\n", - "worker 2 processing job 4\n", - "worker 2 processing job 7\n", - "worker 1 processing job 8\n", - "worker 3 processing job 9\n" + "worker 4 processing job 1\n", + "worker 4 processing job 2\n", + "worker 4 processing job 3\n", + "worker 4 processing job 4\n", + "worker 4 processing job 5\n", + "worker 4 processing job 6\n", + "worker 4 processing job 7\n", + "worker 4 processing job 8\n", + "worker 4 processing job 9\n" ] }, - "execution_count": 6, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "for a := 1; a <= 9; a++ {\n", - " <-results\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Our running program shows the 9 jobs being executed by various workers. The program only takes about 3 seconds despite doing about 9 seconds of total work because there are 3 workers operating concurrently." + "for j := 1; j <= 9; j++ {\n", + " jobs <- j\n", + "}\n", + "time.Sleep(3*time.Second)\n", + "close(jobs)" ] } ], "metadata": { "kernelspec": { - "display_name": "Golang", + "display_name": "Go", "language": "go", "name": "gophernotes" }, "language_info": { - "name": "go" + "codemirror_mode": "", + "file_extension": ".go", + "mimetype": "", + "name": "go", + "nbconvert_exporter": "", + "pygments_lexer": "", + "version": "go1.9" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 2 } diff --git a/examples/iris.csv b/examples/iris.csv deleted file mode 100644 index a3490e0..0000000 --- a/examples/iris.csv +++ /dev/null @@ -1,150 +0,0 @@ -5.1,3.5,1.4,0.2,Iris-setosa -4.9,3.0,1.4,0.2,Iris-setosa -4.7,3.2,1.3,0.2,Iris-setosa -4.6,3.1,1.5,0.2,Iris-setosa -5.0,3.6,1.4,0.2,Iris-setosa -5.4,3.9,1.7,0.4,Iris-setosa -4.6,3.4,1.4,0.3,Iris-setosa -5.0,3.4,1.5,0.2,Iris-setosa -4.4,2.9,1.4,0.2,Iris-setosa -4.9,3.1,1.5,0.1,Iris-setosa -5.4,3.7,1.5,0.2,Iris-setosa -4.8,3.4,1.6,0.2,Iris-setosa -4.8,3.0,1.4,0.1,Iris-setosa -4.3,3.0,1.1,0.1,Iris-setosa -5.8,4.0,1.2,0.2,Iris-setosa -5.7,4.4,1.5,0.4,Iris-setosa -5.4,3.9,1.3,0.4,Iris-setosa -5.1,3.5,1.4,0.3,Iris-setosa -5.7,3.8,1.7,0.3,Iris-setosa -5.1,3.8,1.5,0.3,Iris-setosa -5.4,3.4,1.7,0.2,Iris-setosa -5.1,3.7,1.5,0.4,Iris-setosa -4.6,3.6,1.0,0.2,Iris-setosa -5.1,3.3,1.7,0.5,Iris-setosa -4.8,3.4,1.9,0.2,Iris-setosa -5.0,3.0,1.6,0.2,Iris-setosa -5.0,3.4,1.6,0.4,Iris-setosa -5.2,3.5,1.5,0.2,Iris-setosa -5.2,3.4,1.4,0.2,Iris-setosa -4.7,3.2,1.6,0.2,Iris-setosa -4.8,3.1,1.6,0.2,Iris-setosa -5.4,3.4,1.5,0.4,Iris-setosa -5.2,4.1,1.5,0.1,Iris-setosa -5.5,4.2,1.4,0.2,Iris-setosa -4.9,3.1,1.5,0.1,Iris-setosa -5.0,3.2,1.2,0.2,Iris-setosa -5.5,3.5,1.3,0.2,Iris-setosa -4.9,3.1,1.5,0.1,Iris-setosa -4.4,3.0,1.3,0.2,Iris-setosa -5.1,3.4,1.5,0.2,Iris-setosa -5.0,3.5,1.3,0.3,Iris-setosa -4.5,2.3,1.3,0.3,Iris-setosa -4.4,3.2,1.3,0.2,Iris-setosa -5.0,3.5,1.6,0.6,Iris-setosa -5.1,3.8,1.9,0.4,Iris-setosa -4.8,3.0,1.4,0.3,Iris-setosa -5.1,3.8,1.6,0.2,Iris-setosa -4.6,3.2,1.4,0.2,Iris-setosa -5.3,3.7,1.5,0.2,Iris-setosa -5.0,3.3,1.4,0.2,Iris-setosa -7.0,3.2,4.7,1.4,Iris-versicolor -6.4,3.2,4.5,1.5,Iris-versicolor -6.9,3.1,4.9,1.5,Iris-versicolor -5.5,2.3,4.0,1.3,Iris-versicolor -6.5,2.8,4.6,1.5,Iris-versicolor -5.7,2.8,4.5,1.3,Iris-versicolor -6.3,3.3,4.7,1.6,Iris-versicolor -4.9,2.4,3.3,1.0,Iris-versicolor -6.6,2.9,4.6,1.3,Iris-versicolor -5.2,2.7,3.9,1.4,Iris-versicolor -5.0,2.0,3.5,1.0,Iris-versicolor -5.9,3.0,4.2,1.5,Iris-versicolor -6.0,2.2,4.0,1.0,Iris-versicolor -6.1,2.9,4.7,1.4,Iris-versicolor -5.6,2.9,3.6,1.3,Iris-versicolor -6.7,3.1,4.4,1.4,Iris-versicolor -5.6,3.0,4.5,1.5,Iris-versicolor -5.8,2.7,4.1,1.0,Iris-versicolor -6.2,2.2,4.5,1.5,Iris-versicolor -5.6,2.5,3.9,1.1,Iris-versicolor -5.9,3.2,4.8,1.8,Iris-versicolor -6.1,2.8,4.0,1.3,Iris-versicolor -6.3,2.5,4.9,1.5,Iris-versicolor -6.1,2.8,4.7,1.2,Iris-versicolor -6.4,2.9,4.3,1.3,Iris-versicolor -6.6,3.0,4.4,1.4,Iris-versicolor -6.8,2.8,4.8,1.4,Iris-versicolor -6.7,3.0,5.0,1.7,Iris-versicolor -6.0,2.9,4.5,1.5,Iris-versicolor -5.7,2.6,3.5,1.0,Iris-versicolor -5.5,2.4,3.8,1.1,Iris-versicolor -5.5,2.4,3.7,1.0,Iris-versicolor -5.8,2.7,3.9,1.2,Iris-versicolor -6.0,2.7,5.1,1.6,Iris-versicolor -5.4,3.0,4.5,1.5,Iris-versicolor -6.0,3.4,4.5,1.6,Iris-versicolor -6.7,3.1,4.7,1.5,Iris-versicolor -6.3,2.3,4.4,1.3,Iris-versicolor -5.6,3.0,4.1,1.3,Iris-versicolor -5.5,2.5,4.0,1.3,Iris-versicolor -5.5,2.6,4.4,1.2,Iris-versicolor -6.1,3.0,4.6,1.4,Iris-versicolor -5.8,2.6,4.0,1.2,Iris-versicolor -5.0,2.3,3.3,1.0,Iris-versicolor -5.6,2.7,4.2,1.3,Iris-versicolor -5.7,3.0,4.2,1.2,Iris-versicolor -5.7,2.9,4.2,1.3,Iris-versicolor -6.2,2.9,4.3,1.3,Iris-versicolor -5.1,2.5,3.0,1.1,Iris-versicolor -5.7,2.8,4.1,1.3,Iris-versicolor -6.3,3.3,6.0,2.5,Iris-virginica -5.8,2.7,5.1,1.9,Iris-virginica -7.1,3.0,5.9,2.1,Iris-virginica -6.3,2.9,5.6,1.8,Iris-virginica -6.5,3.0,5.8,2.2,Iris-virginica -7.6,3.0,6.6,2.1,Iris-virginica -4.9,2.5,4.5,1.7,Iris-virginica -7.3,2.9,6.3,1.8,Iris-virginica -6.7,2.5,5.8,1.8,Iris-virginica -7.2,3.6,6.1,2.5,Iris-virginica -6.5,3.2,5.1,2.0,Iris-virginica -6.4,2.7,5.3,1.9,Iris-virginica -6.8,3.0,5.5,2.1,Iris-virginica -5.7,2.5,5.0,2.0,Iris-virginica -5.8,2.8,5.1,2.4,Iris-virginica -6.4,3.2,5.3,2.3,Iris-virginica -6.5,3.0,5.5,1.8,Iris-virginica -7.7,3.8,6.7,2.2,Iris-virginica -7.7,2.6,6.9,2.3,Iris-virginica -6.0,2.2,5.0,1.5,Iris-virginica -6.9,3.2,5.7,2.3,Iris-virginica -5.6,2.8,4.9,2.0,Iris-virginica -7.7,2.8,6.7,2.0,Iris-virginica -6.3,2.7,4.9,1.8,Iris-virginica -6.7,3.3,5.7,2.1,Iris-virginica -7.2,3.2,6.0,1.8,Iris-virginica -6.2,2.8,4.8,1.8,Iris-virginica -6.1,3.0,4.9,1.8,Iris-virginica -6.4,2.8,5.6,2.1,Iris-virginica -7.2,3.0,5.8,1.6,Iris-virginica -7.4,2.8,6.1,1.9,Iris-virginica -7.9,3.8,6.4,2.0,Iris-virginica -6.4,2.8,5.6,2.2,Iris-virginica -6.3,2.8,5.1,1.5,Iris-virginica -6.1,2.6,5.6,1.4,Iris-virginica -7.7,3.0,6.1,2.3,Iris-virginica -6.3,3.4,5.6,2.4,Iris-virginica -6.4,3.1,5.5,1.8,Iris-virginica -6.0,3.0,4.8,1.8,Iris-virginica -6.9,3.1,5.4,2.1,Iris-virginica -6.7,3.1,5.6,2.4,Iris-virginica -6.9,3.1,5.1,2.3,Iris-virginica -5.8,2.7,5.1,1.9,Iris-virginica -6.8,3.2,5.9,2.3,Iris-virginica -6.7,3.3,5.7,2.5,Iris-virginica -6.7,3.0,5.2,2.3,Iris-virginica -6.3,2.5,5.0,1.9,Iris-virginica -6.5,3.0,5.2,2.0,Iris-virginica -6.2,3.4,5.4,2.3,Iris-virginica -5.9,3.0,5.1,1.8,Iris-virginica diff --git a/examples/iris.jpg b/examples/iris.jpg deleted file mode 100644 index 85bb9b49393ba31907cefcc956822bc78ff729b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7734 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 Date: Wed, 20 Sep 2017 10:59:01 -0400 Subject: [PATCH 25/32] README formatting --- README.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 95b06cf..639ae71 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,8 @@ $ jupyter --data-dir Make sure you have the MinGW toolchain: - - [MinGW-w64](https://sourceforge.net/projects/mingw-w64/), for 32 and 64 bit Windows - - [MinGW Distro](https://nuwen.net/mingw.html), for 64 bit Windows only +- [MinGW-w64](https://sourceforge.net/projects/mingw-w64/), for 32 and 64 bit Windows +- [MinGW Distro](https://nuwen.net/mingw.html), for 64 bit Windows only Then: @@ -81,30 +81,30 @@ Then: 3. Copy the kernel config: - ``` - mkdir %APPDATA%\jupyter\kernels\gophernotes - xcopy %GOPATH%\src\github.com\gopherdata\gophernotes\kernel %APPDATA%\jupyter\kernels\gophernotes /s - ``` + ``` + mkdir %APPDATA%\jupyter\kernels\gophernotes + xcopy %GOPATH%\src\github.com\gopherdata\gophernotes\kernel %APPDATA%\jupyter\kernels\gophernotes /s + ``` Note, if you have the `JUPYTER_PATH` environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing: - ``` - jupyter --data-dir - ``` + ``` + jupyter --data-dir + ``` 4. Update `%APPDATA%\jupyter\kernels\gophernotes\kernel.json` with the FULL PATH to your gophernotes.exe (in %GOPATH%\bin), unless it's already on the PATH. For example: - ``` - { - "argv": [ - "C:\\gopath\\bin\\gophernotes.exe", - "{connection_file}" - ], - "display_name": "Go", - "language": "go", - "name": "go" - } - ``` + ``` + { + "argv": [ + "C:\\gopath\\bin\\gophernotes.exe", + "{connection_file}" + ], + "display_name": "Go", + "language": "go", + "name": "go" + } + ``` ### Docker From 52ea4cfe7ffc109417a354cee6473224e00a3d1d Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 20 Sep 2017 11:00:43 -0400 Subject: [PATCH 26/32] README formatting --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 639ae71..71da809 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ Then: xcopy %GOPATH%\src\github.com\gopherdata\gophernotes\kernel %APPDATA%\jupyter\kernels\gophernotes /s ``` - Note, if you have the `JUPYTER_PATH` environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing: + Note, if you have the `JUPYTER_PATH` environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing: ``` jupyter --data-dir From 6d457eb740445db1a88179a20f1decfca735df16 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 20 Sep 2017 11:13:18 -0400 Subject: [PATCH 27/32] add Mac install --- README.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.md b/README.md index 71da809..4660c3c 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,25 @@ $ jupyter --data-dir ### OS X/macOS +```sh +$ go install github.com/gopherdata/gophernotes +$ mkdir -p ~/Library/Jupyter/kernels/gophernotes +$ cp $GOPATH/src/github.com/gopherdata/gophernotes/kernel/* ~/Library/Jupyter/kernels/gophernotes +``` + +To confirm that the `gophernotes` binary is installed and in your PATH, you should see the following when running `gophernotes` directly: + +```sh +$ gophernotes +2017/09/20 10:33:12 Need a command line argument specifying the connection file. +``` + +**Note** - if you have the `JUPYTER_PATH` environmental variable set or if you are using an older version of Jupyter, you may need to copy this kernel config to another directory. You can check which directories will be searched by executing: + +```sh +$ jupyter --data-dir +``` + ### Windows Make sure you have the MinGW toolchain: From b8382a3b7c1e3609a67e9617b80a1e78da2d17ec Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 20 Sep 2017 11:17:22 -0400 Subject: [PATCH 28/32] add toc to readme --- README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4660c3c..cfe4439 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,17 @@ **Acknowledgements** - This project utilizes a Go interpreter called [gomacro](https://github.com/cosmos72/gomacro) under the hood to evaluate Go code interactively. The gophernotes logo was designed by the brilliant [Marcus Olsson](https://github.com/marcusolsson) and was inspired by Renee French's original Go Gopher design. +- [Examples](#examples) +- Install gophernotes: + - [Prerequisites](#prerequisites) + - [Linux](#linux) + - [Mac](#mac) + - [Windows](#windows) + - [Docker](#docker) +- [Getting Started](#getting-started) +- [Limitations](#limitations) +- [Troubleshooting](#troubleshooting) + ## Examples ### Jupyter Notebook: @@ -50,7 +61,7 @@ $ gophernotes $ jupyter --data-dir ``` -### OS X/macOS +### Mac ```sh $ go install github.com/gopherdata/gophernotes From df7cfc9cb6380bd8aafe2286a4c0acde74010ab1 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 20 Sep 2017 11:53:36 -0400 Subject: [PATCH 29/32] fix linting --- main.go | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index 9ae36e2..2095901 100644 --- a/main.go +++ b/main.go @@ -5,8 +5,14 @@ import ( "log" ) -const Version string = "1.0.0" -const ProtocolVersion string = "5.0" +const ( + + // Version defines the gophernotes version. + Version string = "1.0.0" + + // ProtocolVersion defines the Jupyter protocol version. + ProtocolVersion string = "5.0" +) func main() { From 5e0d9194582f91637e7f5a595a11b11ac01b973f Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 20 Sep 2017 12:35:22 -0400 Subject: [PATCH 30/32] update Mac/Windows info --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cfe4439..ea2531b 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,8 @@ $ jupyter --data-dir ### Mac +**Important Note** - gomacro relies on the `plugin` package when importing third party libraries. This package is only supported on Linux currently. Thus, if you need to utilize third party packages in your Go notebooks and you are running on Mac, you should use the [Docker](#docker) install and run gophernotes/Jupyter in Docker. + ```sh $ go install github.com/gopherdata/gophernotes $ mkdir -p ~/Library/Jupyter/kernels/gophernotes @@ -84,6 +86,8 @@ $ jupyter --data-dir ### Windows +**Important Note** - gomacro relies on the `plugin` package when importing third party libraries. This package is only supported on Linux currently. Thus, if you need to utilize third party packages in your Go notebooks and you are running on Windows, you should use the [Docker](#docker) install and run gophernotes/Jupyter in Docker. + Make sure you have the MinGW toolchain: - [MinGW-w64](https://sourceforge.net/projects/mingw-w64/), for 32 and 64 bit Windows @@ -150,7 +154,11 @@ Or to run a Go notebook with access to common Go data science packages (gonum, g $ docker run -it -p 8888:8888 gopherdata/gophernotes-ds ``` -In either case, running this command should output a link that you can follow to access Jupyter in a browser. +In either case, running this command should output a link that you can follow to access Jupyter in a browser. Also, to save notebooks to and/or load notebooks from a location outside of the Docker image, you should utilize a volume mount. For example: + +``` +$ docker run -it -p 8888:8888 -v /path/to/local/notebooks:/path/to/notebooks/in/docker gopherdata/gophernotes +``` ## Getting Started From 2040e263cebfeab3e9c2e0f4c0b3dea16ce8eed5 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 20 Sep 2017 12:46:16 -0400 Subject: [PATCH 31/32] clarify named imports --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index ea2531b..455a9dd 100644 --- a/README.md +++ b/README.md @@ -186,12 +186,17 @@ $ docker run -it -p 8888:8888 -v /path/to/local/notebooks:/path/to/notebooks/in/ gophernotes uses [gomacro](https://github.com/cosmos72/gomacro) under the hood to evaluate Go code interactively. You can evaluate most any Go code with gomacro, but there are some limitation, which are discussed in further detail [here](https://github.com/cosmos72/gomacro#current-status). Most noteably, gophernotes does NOT support: +- third party packages when running natively on Mac and Windows - This is a current limitation of the Go `plugin` package. - unexported struct fields - interfaces - They can be declared, but nothing more: there is no way to implement them or call their methods - extracting methods from types - For example time.Duration.String should return a func(time.Duration) string but currently gives an error. Instead extracting methods from objects is supported: time.Duration(1s).String correctly returns a func() string - goto - named return values -- named imports +- named imports like: + + ``` + import tf "github.com/tensorflow/tensorflow/tensorflow/go" + ``` ## Troubleshooting From 10819853fa5f94e5c0177d545ca725b7d55c35f1 Mon Sep 17 00:00:00 2001 From: Daniel Whitenack Date: Wed, 20 Sep 2017 12:54:36 -0400 Subject: [PATCH 32/32] update windows build for new org --- zmq-win/build.bat | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zmq-win/build.bat b/zmq-win/build.bat index abc1d36..46ace00 100644 --- a/zmq-win/build.bat +++ b/zmq-win/build.bat @@ -14,7 +14,7 @@ set mydir=%mydir:\=/% set CGO_CFLAGS=-I %mydir%include set CGO_LDFLAGS=-L %mydir%lib-%target% -l zmq -go build -tags zmq_4_x github.com/gopherds/gophernotes +go build -tags zmq_4_x github.com/gopherdata/gophernotes :QUIT endlocal

    Te2TMt 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� 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