go-jsonnet/std.go
Stanisław Barzowski 5da57ac417 Interpreter & runtime - minimal usable version (#24)
* Interpreter & runtime - minimal usable version

Accomplishments in this commit:
* Majority of language features implemented:
	* Unary operators
	* Binary operators
	* Conditionals
	* Errors
	* Indexing arrays
	* Indexing objects
	* Object inheritance
	* Imports
	* Functions
	* Function calls
* There is a quite nice way for creating builtins
* Static analyzer is there with most of the functionality
* Standard library is included and parts unaffected by missing features
work
* Some bugs in existing parts fixed
* Most positive tests from C++ version pass, the rest is failing mostly
due to missing builtins and comprehensions.
* Some initial structure was created that should allow more incremental
  and focused changes in the future PRs.
* Some comments/explanations added
* Panics translated to a little bit more gentle internal errors (with a
  link to issues on github).

What still sucks:
* Stack traces & error messages (there's some stuff in place)
* Almost everything is in the same package
* Stuff is exported or unexporeted randomly (see above)
* Missing a few lexing/parsing features
* Missing builtins
* Missing support for extvars and top-level-args
* Checking function arguments is missing
* No clean Go API that commandline and compatibility layer to C can use
* No compatibility layer to C
* Assertions don't work (desugaring level, assertEquals works).
* Manifestation stack traces (and generally it could use some work).
* The way environments are constructed is sometimes suboptimal/clumsy.
2017-08-24 20:09:10 -04:00

343 lines
14 KiB
Go

// This file is automatically generated using github.com/mjibson/esc.
package jsonnet
import (
"bytes"
"compress/gzip"
"encoding/base64"
"io/ioutil"
"net/http"
"os"
"path"
"sync"
"time"
)
type _escLocalFS struct{}
var _escLocal _escLocalFS
type _escStaticFS struct{}
var _escStatic _escStaticFS
type _escDirectory struct {
fs http.FileSystem
name string
}
type _escFile struct {
compressed string
size int64
modtime int64
local string
isDir bool
once sync.Once
data []byte
name string
}
func (_escLocalFS) Open(name string) (http.File, error) {
f, present := _escData[path.Clean(name)]
if !present {
return nil, os.ErrNotExist
}
return os.Open(f.local)
}
func (_escStaticFS) prepare(name string) (*_escFile, error) {
f, present := _escData[path.Clean(name)]
if !present {
return nil, os.ErrNotExist
}
var err error
f.once.Do(func() {
f.name = path.Base(name)
if f.size == 0 {
return
}
var gr *gzip.Reader
b64 := base64.NewDecoder(base64.StdEncoding, bytes.NewBufferString(f.compressed))
gr, err = gzip.NewReader(b64)
if err != nil {
return
}
f.data, err = ioutil.ReadAll(gr)
})
if err != nil {
return nil, err
}
return f, nil
}
func (fs _escStaticFS) Open(name string) (http.File, error) {
f, err := fs.prepare(name)
if err != nil {
return nil, err
}
return f.File()
}
func (dir _escDirectory) Open(name string) (http.File, error) {
return dir.fs.Open(dir.name + name)
}
func (f *_escFile) File() (http.File, error) {
type httpFile struct {
*bytes.Reader
*_escFile
}
return &httpFile{
Reader: bytes.NewReader(f.data),
_escFile: f,
}, nil
}
func (f *_escFile) Close() error {
return nil
}
func (f *_escFile) Readdir(count int) ([]os.FileInfo, error) {
return nil, nil
}
func (f *_escFile) Stat() (os.FileInfo, error) {
return f, nil
}
func (f *_escFile) Name() string {
return f.name
}
func (f *_escFile) Size() int64 {
return f.size
}
func (f *_escFile) Mode() os.FileMode {
return 0
}
func (f *_escFile) ModTime() time.Time {
return time.Unix(f.modtime, 0)
}
func (f *_escFile) IsDir() bool {
return f.isDir
}
func (f *_escFile) Sys() interface{} {
return f
}
// FS returns a http.Filesystem for the embedded assets. If useLocal is true,
// the filesystem's contents are instead used.
func FS(useLocal bool) http.FileSystem {
if useLocal {
return _escLocal
}
return _escStatic
}
// Dir returns a http.Filesystem for the embedded assets on a given prefix dir.
// If useLocal is true, the filesystem's contents are instead used.
func Dir(useLocal bool, name string) http.FileSystem {
if useLocal {
return _escDirectory{fs: _escLocal, name: name}
}
return _escDirectory{fs: _escStatic, name: name}
}
// FSByte returns the named file from the embedded assets. If useLocal is
// true, the filesystem's contents are instead used.
func FSByte(useLocal bool, name string) ([]byte, error) {
if useLocal {
f, err := _escLocal.Open(name)
if err != nil {
return nil, err
}
b, err := ioutil.ReadAll(f)
_ = f.Close()
return b, err
}
f, err := _escStatic.prepare(name)
if err != nil {
return nil, err
}
return f.data, nil
}
// FSMustByte is the same as FSByte, but panics if name is not present.
func FSMustByte(useLocal bool, name string) []byte {
b, err := FSByte(useLocal, name)
if err != nil {
panic(err)
}
return b
}
// FSString is the string version of FSByte.
func FSString(useLocal bool, name string) (string, error) {
b, err := FSByte(useLocal, name)
return string(b), err
}
// FSMustString is the string version of FSMustByte.
func FSMustString(useLocal bool, name string) string {
return string(FSMustByte(useLocal, name))
}
var _escData = map[string]*_escFile{
"/std/std.jsonnet": {
local: "std/std.jsonnet",
size: 41755,
modtime: 1502146172,
compressed: `
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
`,
},
"/": {
isDir: true,
local: "",
},
"/std": {
isDir: true,
local: "std",
},
}