From 9390d07c3d20fdc4bb4b40e11dda06da5399375d Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sat, 6 Mar 2021 18:18:37 +0800 Subject: [PATCH] gox.NewPkg --- README.md | 9 ++++---- dom/package.go | 11 ++++++++-- dom/package_test.go | 11 +++++----- gox.go | 51 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 13 deletions(-) create mode 100644 gox.go diff --git a/README.md b/README.md index 4d37263e..e536fbca 100644 --- a/README.md +++ b/README.md @@ -11,13 +11,12 @@ gox - Code generator for the Go language ```go import ( - "github.com/goplus/gox/dom" - "github.com/goplus/gox/conv" + "github.com/goplus/gox" ) -var a, b, c *dom.Var +var a, b, c *gox.Var -pkg := dom.NewPkg("main") +pkg := gox.NewPkg("main") fmt := pkg.Import("fmt") @@ -28,7 +27,7 @@ pkg.NewFunc("main").BodyStart(pkg). Val(fmt.Ref("Println")).Val(a).Val(b).Val(c).Call(3).EndStmt(). // fmt.Println(a, b, c) End() -conv.WriteFile("./foo.go", pkg) +gox.WriteFile("./foo.go", pkg) ``` This will generate a Go source file named `./foo.go`. The following is its content: diff --git a/dom/package.go b/dom/package.go index f9b36542..6154f3d6 100644 --- a/dom/package.go +++ b/dom/package.go @@ -73,7 +73,13 @@ func (p *Func) BodyStart(pkg *Package) *CodeBuilder { // Scope type type Scope struct { - Parent *Scope + parent *Scope + syms map[string]Ref +} + +func (p *Scope) initScope(parent *Scope) { + p.parent = parent + p.syms = make(map[string]Ref) } // ---------------------------------------------------------------------------- @@ -96,8 +102,9 @@ func (p *Package) allocIdx() int { } // NewPkg func -func NewPkg(name string, opts ...*Options) *Package { +func NewPkg(name string, opts *Options) *Package { pkg := &Package{} + pkg.initScope(nil) return pkg } diff --git a/dom/package_test.go b/dom/package_test.go index 0de4e180..07808741 100644 --- a/dom/package_test.go +++ b/dom/package_test.go @@ -4,13 +4,12 @@ import ( "bytes" "testing" - "github.com/goplus/gox/conv" - "github.com/goplus/gox/dom" + "github.com/goplus/gox" ) -func domTest(t *testing.T, pkg *dom.Package, expected string) { +func domTest(t *testing.T, pkg *gox.Package, expected string) { var b bytes.Buffer - err := conv.WriteTo(&b, pkg) + err := gox.WriteTo(&b, pkg) if err != nil { t.Fatal("conv.WriteTo failed:", err) } @@ -21,9 +20,9 @@ func domTest(t *testing.T, pkg *dom.Package, expected string) { } func TestBasic(t *testing.T) { - var a, b, c *dom.Var + var a, b, c *gox.Var - pkg := dom.NewPkg("main") + pkg := gox.NewPkg("main") fmt := pkg.Import("fmt") diff --git a/gox.go b/gox.go new file mode 100644 index 00000000..7f047439 --- /dev/null +++ b/gox.go @@ -0,0 +1,51 @@ +package gox + +import ( + "go/ast" + "go/token" + "io" + + "github.com/goplus/gox/conv" + "github.com/goplus/gox/dom" +) + +// ---------------------------------------------------------------------------- + +// Var type +type Var = dom.Var + +// Options type +type Options = dom.Options + +// Package type +type Package = dom.Package + +// NewPkg func +func NewPkg(name string, opts ...*Options) *Package { + var theOpts *Options + if opts != nil { + theOpts = opts[0] + } else { + theOpts = &Options{} + } + return dom.NewPkg(name, theOpts) +} + +// ---------------------------------------------------------------------------- + +// From func +func From(fset *token.FileSet, pkg *dom.Package) (file *ast.File, err error) { + return conv.From(fset, pkg) +} + +// WriteTo func +func WriteTo(dst io.Writer, pkg *dom.Package) (err error) { + return conv.WriteTo(dst, pkg) +} + +// WriteFile func +func WriteFile(file string, pkg *dom.Package) (err error) { + return conv.WriteFile(file, pkg) +} + +// ----------------------------------------------------------------------------