From 91728bec4fecb324249ecb0e2221e87262a2770d Mon Sep 17 00:00:00 2001 From: Mihail Stoykov Date: Tue, 16 Mar 2021 12:30:11 +0200 Subject: [PATCH] update goja --- go.mod | 2 +- go.sum | 9 ++--- js/tc39/breaking_test_errors.json | 35 -------------------- vendor/github.com/dop251/goja/object_args.go | 24 ++++++-------- vendor/modules.txt | 2 +- 5 files changed, 14 insertions(+), 58 deletions(-) diff --git a/go.mod b/go.mod index 090d9c10b9f..2a6a2e4a29f 100644 --- a/go.mod +++ b/go.mod @@ -14,7 +14,7 @@ require ( github.com/andybalholm/cascadia v1.0.0 // indirect github.com/daaku/go.zipexe v0.0.0-20150329023125-a5fe2436ffcb // indirect github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 // indirect - github.com/dop251/goja v0.0.0-20210313120006-a9b721bfc503 + github.com/dop251/goja v0.0.0-20210315194146-7e3a2f190116 github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4 github.com/eapache/go-resiliency v1.1.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20160609142408-bb955e01b934 // indirect diff --git a/go.sum b/go.sum index acefb23e2a3..9cecd28d456 100644 --- a/go.sum +++ b/go.sum @@ -27,10 +27,8 @@ github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= -github.com/dop251/goja v0.0.0-20210216182323-60bc6ebb9fc1 h1:2Xfv4vHdBWlxJLq8BU4I28a+DsKsyi7Rqjrfo4qp9L4= -github.com/dop251/goja v0.0.0-20210216182323-60bc6ebb9fc1/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= -github.com/dop251/goja v0.0.0-20210313120006-a9b721bfc503 h1:mDBmeOY8lGubg98qtHIEpBEzDe0Fkhyl4MS1nI1tfuA= -github.com/dop251/goja v0.0.0-20210313120006-a9b721bfc503/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= +github.com/dop251/goja v0.0.0-20210315194146-7e3a2f190116 h1:zBiWB70OcQnUdnuJB2Hq64vHswdCa+HD1OLf+9m6pdc= +github.com/dop251/goja v0.0.0-20210315194146-7e3a2f190116/go.mod h1:Mw6PkjjMXWbTj+nnj4s3QPXq1jaT0s5pC0iFD4+BOAA= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4 h1:qk/FSDDxo05wdJH28W+p5yivv7LuLYLRXPPD8KQCtZs= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= @@ -45,7 +43,6 @@ github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1m github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.5.0 h1:vBh+kQp8lg9XPr56u1CPrWjFXtdphMoGWVHr9/1c+A0= github.com/fatih/color v1.5.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= @@ -91,7 +88,6 @@ github.com/gorilla/mux v1.6.1 h1:KOwqsTYZdeuMacU7CxjMNYEKeBvLbxW+psodrbcEa3A= github.com/gorilla/mux v1.6.1/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= @@ -229,7 +225,6 @@ golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/js/tc39/breaking_test_errors.json b/js/tc39/breaking_test_errors.json index 45d92e42e99..9e13a58a60a 100644 --- a/js/tc39/breaking_test_errors.json +++ b/js/tc39/breaking_test_errors.json @@ -413,41 +413,6 @@ "test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-single-args.js-strict:true": "test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-single-args.js: SyntaxError: test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-single-args.js: Unexpected character '#' (37:9)\n 35 | var callCount = 0;\n 36 | var C = class {\n\u003e 37 | static #method() {\n | ^\n 38 | assert.sameValue(arguments.length, 1);\n 39 | assert.sameValue(arguments[0], 42);\n 40 | callCount = callCount + 1; at \u003ceval\u003e:2:28542(106)", "test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-spread-operator.js-strict:true": "test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-spread-operator.js: SyntaxError: test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-spread-operator.js: Unexpected character '#' (39:9)\n 37 | var callCount = 0;\n 38 | var C = class {\n\u003e 39 | static #method() {\n | ^\n 40 | assert.sameValue(arguments.length, 4);\n 41 | assert.sameValue(arguments[0], 42);\n 42 | assert.sameValue(arguments[1], 1); at \u003ceval\u003e:2:28542(106)", "test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-undefined.js-strict:true": "test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-undefined.js: SyntaxError: test/language/arguments-object/cls-expr-private-meth-static-args-trailing-comma-undefined.js: Unexpected character '#' (37:9)\n 35 | var callCount = 0;\n 36 | var C = class {\n\u003e 37 | static #method() {\n | ^\n 38 | assert.sameValue(arguments.length, 2);\n 39 | assert.sameValue(arguments[0], 42);\n 40 | assert.sameValue(arguments[1], undefined); at \u003ceval\u003e:2:28542(106)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-1.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-1.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-1.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-1.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-2.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-2.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-3.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-3.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-4.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-delete-4.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-1.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-1.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-2.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-2.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-3.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-3.js: Test262Error: Expected SameValue(«undefined», «2») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-4.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-4.js: Test262Error: Expected SameValue(«undefined», «2») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-5.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-nonwritable-5.js: Test262Error: Expected SameValue(«undefined», «2») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-1.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-1.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-2.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-2.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-3.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-3.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-4.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonconfigurable-strict-delete-4.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-1.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-1.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-2.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-2.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-3.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-3.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-4.js-strict:false": "test/language/arguments-object/mapped/mapped-arguments-nonwritable-nonconfigurable-4.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-descriptors-basic.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-descriptors-basic.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-descriptors-set-value-by-arguments.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-descriptors-set-value-by-arguments.js: Test262Error: Expected obj[0] to have configurable:false. at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-descriptors-set-value-with-define-property.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-descriptors-set-value-with-define-property.js: Test262Error: Expected obj[0] to have configurable:false. at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-descriptors-with-param-assign.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-descriptors-with-param-assign.js: Test262Error: Expected obj[0] to have configurable:false. at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-nonenumerable-nonwritable-descriptors-basic.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-nonenumerable-nonwritable-descriptors-basic.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-nonenumerable-nonwritable-descriptors-set-by-arguments.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-nonenumerable-nonwritable-descriptors-set-by-arguments.js: Test262Error: Expected SameValue(«undefined», «2») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-nonenumerable-nonwritable-descriptors-set-by-param.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-nonenumerable-nonwritable-descriptors-set-by-param.js: Test262Error: Expected SameValue(«undefined», «2») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-basic.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-basic.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-define-property-consecutive.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-define-property-consecutive.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-set-by-arguments.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-set-by-arguments.js: Test262Error: Expected SameValue(«undefined», «2») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-set-by-param.js-strict:false": "test/language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-set-by-param.js: Test262Error: Expected SameValue(«undefined», «2») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonwritable-nonconfigurable-descriptors-basic.js-strict:false": "test/language/arguments-object/mapped/nonwritable-nonconfigurable-descriptors-basic.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonwritable-nonconfigurable-descriptors-set-by-arguments.js-strict:false": "test/language/arguments-object/mapped/nonwritable-nonconfigurable-descriptors-set-by-arguments.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonwritable-nonconfigurable-descriptors-set-by-param.js-strict:false": "test/language/arguments-object/mapped/nonwritable-nonconfigurable-descriptors-set-by-param.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonwritable-nonenumerable-nonconfigurable-descriptors-basic.js-strict:false": "test/language/arguments-object/mapped/nonwritable-nonenumerable-nonconfigurable-descriptors-basic.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonwritable-nonenumerable-nonconfigurable-descriptors-set-by-arguments.js-strict:false": "test/language/arguments-object/mapped/nonwritable-nonenumerable-nonconfigurable-descriptors-set-by-arguments.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", - "test/language/arguments-object/mapped/nonwritable-nonenumerable-nonconfigurable-descriptors-set-by-param.js-strict:false": "test/language/arguments-object/mapped/nonwritable-nonenumerable-nonconfigurable-descriptors-set-by-param.js: Test262Error: Expected SameValue(«undefined», «1») to be true at harness/sta.js:22:9(40)", "test/language/block-scope/syntax/redeclaration/async-function-name-redeclaration-attempt-with-class.js-strict:true": "test/language/block-scope/syntax/redeclaration/async-function-name-redeclaration-attempt-with-class.js: unexpected error type (TypeError), expected (SyntaxError)", "test/language/block-scope/syntax/redeclaration/async-function-name-redeclaration-attempt-with-let.js-strict:true": "test/language/block-scope/syntax/redeclaration/async-function-name-redeclaration-attempt-with-let.js: unexpected error type (TypeError), expected (SyntaxError)", "test/language/block-scope/syntax/redeclaration/class-name-redeclaration-attempt-with-async-function.js-strict:true": "test/language/block-scope/syntax/redeclaration/class-name-redeclaration-attempt-with-async-function.js: unexpected error type (TypeError), expected (SyntaxError)", diff --git a/vendor/github.com/dop251/goja/object_args.go b/vendor/github.com/dop251/goja/object_args.go index d77607bfe37..3cc705853cb 100644 --- a/vendor/github.com/dop251/goja/object_args.go +++ b/vendor/github.com/dop251/goja/object_args.go @@ -18,7 +18,15 @@ func (a *argumentsObject) getStr(name unistring.String, receiver Value) Value { func (a *argumentsObject) getOwnPropStr(name unistring.String) Value { if mapped, ok := a.values[name].(*mappedProperty); ok { - return *mapped.v + if mapped.writable && mapped.enumerable && mapped.configurable { + return *mapped.v + } + return &valueProperty{ + value: *mapped.v, + writable: mapped.writable, + configurable: mapped.configurable, + enumerable: mapped.enumerable, + } } return a.baseObject.getOwnPropStr(name) @@ -45,18 +53,6 @@ func (a *argumentsObject) setForeignStr(name unistring.String, val, receiver Val return a._setForeignStr(name, a.getOwnPropStr(name), val, receiver, throw) } -/*func (a *argumentsObject) putStr(name string, val Value, throw bool) { - if prop, ok := a.values[name].(*mappedProperty); ok { - if !prop.writable { - a.val.runtime.typeErrorResult(throw, "Property is not writable: %s", name) - return - } - *prop.v = val - return - } - a.baseObject.putStr(name, val, throw) -}*/ - func (a *argumentsObject) deleteStr(name unistring.String, throw bool) bool { if prop, ok := a.values[name].(*mappedProperty); ok { if !a.checkDeleteProp(name, &prop.valueProperty, throw) { @@ -97,7 +93,7 @@ func (a *argumentsObject) defineOwnPropertyStr(name unistring.String, descr Prop configurable: mapped.configurable, writable: true, enumerable: mapped.enumerable, - value: mapped.get(a.val), + value: *mapped.v, } val, ok := a.baseObject._defineOwnProperty(name, existing, descr, throw) diff --git a/vendor/modules.txt b/vendor/modules.txt index bac4f0980ff..63a83696533 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -34,7 +34,7 @@ github.com/davecgh/go-spew/spew ## explicit github.com/dlclark/regexp2 github.com/dlclark/regexp2/syntax -# github.com/dop251/goja v0.0.0-20210313120006-a9b721bfc503 +# github.com/dop251/goja v0.0.0-20210315194146-7e3a2f190116 ## explicit github.com/dop251/goja github.com/dop251/goja/ast