From db30d66f509441f215913c2adb8c829ecb326ecf Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Fri, 1 Jan 2021 21:13:08 +0200 Subject: [PATCH 1/5] Removed old embedded library, and update docs This prepares the way for using the embedding file. --- README.md | 28 +++-------------- static.go | 91 ------------------------------------------------------- 2 files changed, 5 insertions(+), 114 deletions(-) delete mode 100644 static.go diff --git a/README.md b/README.md index 48538c7..4fdfbcb 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,6 @@ * [Monkey](#monkey) * [My changes](#my-changes) * [1. Installation](#1-installation) - * [Source Installation go <= 1.11](#source-installation-go---111) - * [Source installation go >= 1.12](#source-installation-go--112) * [Binary Releases](#binary-releases) * [1.1 Usage](#11-usage) * [2 Syntax](#2-syntax) @@ -87,17 +85,9 @@ The interpreter in _this_ repository has been significantly extended from the st ## 1. Installation -There are two ways to install `monkey` from source, depending upon the version of go you're using: +Due to the embedded [standard-library implementation](data/stdlib.mon), which is implemented in monkey, you'll need to compile this project with go version 1.16beta1 or higher. -### Source Installation go <= 1.11 - -If you're using `go` before 1.11 then the following command should fetch/update `monkey`, and install it upon your system: - - $ go get -u github.com/skx/monkey - -### Source installation go >= 1.12 - -If you're using a more recent version of `go` (which is _highly_ recommended), you need to clone to a directory which is not present upon your `GOPATH`: +You can install from source like so: git clone https://github.com/skx/monkey cd monkey @@ -303,21 +293,13 @@ You can see the implementation of the go-based standard-library beneath [evaluat **NOTE**: Parts of our standard-library are implemented in 100% pure monkey, and these are embedded in our compiled interpreter. The source of the functions -can be viewed in [data/stdlib.mon](data/stdlib.mon), but to ease compilation -these are included in the compiled interpreter via [static.go](static.go). +can be viewed in [data/stdlib.mon](data/stdlib.mon). If you wish to make changes to the monkey-based standard-library you'll -need to rebuild `static.go` after editing `stdlib.mon`. To do this use the -`implant` tool. - -If you don't already have `implant` installed fetch it like so: - - go get -u github.com/skx/implant/ +need to rebuild the interpreter after making your changes, to ensure they are bundled into the executable. -Now regenerate the embedded version of the standard-library and rebuild the -binary to make your changes: +Nothing special is required, the following will suffice as you'd expect: - implant -input data/ -output static.go go build . diff --git a/static.go b/static.go deleted file mode 100644 index c667f93..0000000 --- a/static.go +++ /dev/null @@ -1,91 +0,0 @@ -// -// This file was generated via github.com/skx/implant/ -// -// Local edits will be lost. -// -package main - -import ( - "bytes" - "compress/gzip" - "encoding/base64" - "fmt" - "io/ioutil" -) - -// -// EmbeddedResource is the structure which is used to record details of -// each embedded resource in your binary. -// -// The resource contains the (original) filename, relative to the input -// directory `implant` was generated with, along with the original size -// and the compressed/encoded data. -// -type EmbeddedResource struct { - Filename string - Contents string - Length int -} - -// -// RESOURCES is a map containing all embedded resources. The map key is the -// file name. -// -// It is exposed to callers via the `getResources()` function. -// -var RESOURCES = map[string]EmbeddedResource{ - - "data/stdlib.mon": { - Filename: "data/stdlib.mon", - Contents: "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", - Length: 19636, - }, -} - -// -// Return the contents of a resource. -// -func getResource(path string) ([]byte, error) { - if entry, ok := RESOURCES[path]; ok { - var raw bytes.Buffer - var err error - - // Decode the data. - in, err := base64.StdEncoding.DecodeString(entry.Contents) - if err != nil { - return nil, err - } - - // Gunzip the data to the client - gr, err := gzip.NewReader(bytes.NewBuffer(in)) - if err != nil { - return nil, err - } - defer gr.Close() - data, err := ioutil.ReadAll(gr) - if err != nil { - return nil, err - } - _, err = raw.Write(data) - if err != nil { - return nil, err - } - - // Return it. - return raw.Bytes(), nil - } - return nil, fmt.Errorf("failed to find resource '%s'", path) -} - -// -// Return the available resources in a slice. -// -func getResources() []EmbeddedResource { - i := 0 - ret := make([]EmbeddedResource, len(RESOURCES)) - for _, v := range RESOURCES { - ret[i] = v - i++ - } - return ret -} From c50758e4b6efd40e10c60faae6b38976715f9dfa Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Fri, 1 Jan 2021 21:17:14 +0200 Subject: [PATCH 2/5] Embed our standard-library via go-embed --- monkey.go | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/monkey.go b/monkey.go index 631e56b..6269ea7 100644 --- a/monkey.go +++ b/monkey.go @@ -9,6 +9,7 @@ package main import ( + _ "embed" "flag" "fmt" "io/ioutil" @@ -20,9 +21,12 @@ import ( "github.com/skx/monkey/parser" ) -// This version-string will be updated via travis for generated binaries. +// This version-string will be updated via CI system for generated binaries. var version = "master/unreleased" +//go:embed data/stdlib.mon +var stdlib string + // // Implemention of "version()" function. // @@ -72,24 +76,10 @@ func Execute(input string) int { return (argsFun(args...)) }) - // - // Our standard-library is mostly written in C, - // and can be found implemented in evaluator/stdlib*.go - // - // However there is also data/stdlib.mon, and here we - // load that - // - tmpl, err := getResource("data/stdlib.mon") - if err != nil { - fmt.Printf("Failed to load our standard-library: %s", - err.Error()) - os.Exit(33) - } - // // Parse and evaluate our standard-library. // - initL := lexer.New(string(tmpl)) + initL := lexer.New(stdlib) initP := parser.New(initL) initProg := initP.ParseProgram() evaluator.Eval(initProg, env) From f5e3fd92294e77dffd011b2268daa032950294ff Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Fri, 1 Jan 2021 21:30:00 +0200 Subject: [PATCH 3/5] Updated header to relfect new go-embed setup --- data/stdlib.mon | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/data/stdlib.mon b/data/stdlib.mon index cfa0f1b..4251bb0 100644 --- a/data/stdlib.mon +++ b/data/stdlib.mon @@ -4,21 +4,12 @@ // // i.e. This is part of our standard-library. // -// If you wish to make changes to the standard-library functions defined -// here you'll need to rebuild `static.go` after editing this file, as -// that contains the embedded copy of this code which is included in -// the generated monkey-interpreter. +// If you wish to make changes to the standard-library functions in this +// file you'll need to rebuild the interpreter after making your changes. // -// To rebuild `static.go` use the `implant` tool. +// This file it is embedded in the generated-binary as part of the build +// process. // -// If you don't already have `implant` installed fetch it like so: -// -// go get -u github.com/skx/implant/ -// -// Now regenerate the embedded version of this file and rebuild the -// interpreter with your changes: -// -// implant -input data/ -output static.go // go build . // From 7cc55975ec4bee99f17c5bf3e05735caa9e238fc Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Fri, 1 Jan 2021 21:33:46 +0200 Subject: [PATCH 4/5] Minor updates to fix linter warnings/errors --- evaluator/evaluator.go | 4 ++-- object/environment.go | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/evaluator/evaluator.go b/evaluator/evaluator.go index 86845dd..afc2561 100644 --- a/evaluator/evaluator.go +++ b/evaluator/evaluator.go @@ -758,8 +758,8 @@ func evalSwitchStatement(se *ast.SwitchExpression, env *object.Environment) obje (obj.Inspect() == out.Inspect()) { // Evaluate the block and return the value - out := evalBlockStatement(opt.Block, env) - return out + blockOut := evalBlockStatement(opt.Block, env) + return blockOut } // Is it a regexp-match? diff --git a/object/environment.go b/object/environment.go index 8073832..1c454dd 100644 --- a/object/environment.go +++ b/object/environment.go @@ -120,10 +120,9 @@ func (e *Environment) Set(name string, val Object) Object { // ok we're not permitted, we must store in the parent if e.outer != nil { return e.outer.Set(name, val) - } else { - fmt.Printf("scoping weirdness; please report a bug\n") - os.Exit(5) } + fmt.Printf("scoping weirdness; please report a bug\n") + os.Exit(5) } e.store[name] = val return val From cb24f3e4dc6d2b48ce55b52eb2effa6ec1a42276 Mon Sep 17 00:00:00 2001 From: Steve Kemp Date: Fri, 11 Jun 2021 06:18:35 +0300 Subject: [PATCH 5/5] We require go 1.16 --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 2ee7803..cb52725 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ module github.com/skx/monkey -go 1.12 +go 1.16