diff --git a/goobj2/file.go b/goobj2/file.go index 6709464..bc42ad1 100644 --- a/goobj2/file.go +++ b/goobj2/file.go @@ -694,6 +694,7 @@ func (r *objReader) parseObject(prefix []byte, returnReader bool) (*goobj2.Reade } // Resolve missing inlined function names + // TODO: will this work when inline functions are from user/third party imports? objReaders := make([]*goobj2.Reader, len(r.p.Packages)-1) for _, inl := range inlFuncsToResolve { if pkgIdx := inl.Func.PkgIdx; objReaders[pkgIdx-1] == nil { diff --git a/goobj2/testdata/format.go b/goobj2/testdata/format.go new file mode 100644 index 0000000..9d00462 --- /dev/null +++ b/goobj2/testdata/format.go @@ -0,0 +1,33 @@ +package main + +import ( + "bytes" + "fmt" + "go/format" + "go/parser" + "go/token" + "log" +) + +func main() { + const expr = "(6+2*3)/4" + + // parser.ParseExpr parses the argument and returns the + // corresponding ast.Node. + node, err := parser.ParseExpr(expr) + if err != nil { + log.Fatal(err) + } + + // Create a FileSet for node. Since the node does not come + // from a real source file, fset will be empty. + fset := token.NewFileSet() + + var buf bytes.Buffer + err = format.Node(&buf, fset, node) + if err != nil { + log.Fatal(err) + } + + fmt.Println(buf.String()) +} diff --git a/goobj2/testdata/reflect.go b/goobj2/testdata/reflect.go new file mode 100644 index 0000000..d96a054 --- /dev/null +++ b/goobj2/testdata/reflect.go @@ -0,0 +1,43 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "reflect" +) + +func main() { + typ := reflect.StructOf([]reflect.StructField{ + { + Name: "Height", + Type: reflect.TypeOf(float64(0)), + Tag: `json:"height"`, + }, + { + Name: "Age", + Type: reflect.TypeOf(int(0)), + Tag: `json:"age"`, + }, + }) + + v := reflect.New(typ).Elem() + v.Field(0).SetFloat(0.4) + v.Field(1).SetInt(2) + s := v.Addr().Interface() + + w := new(bytes.Buffer) + if err := json.NewEncoder(w).Encode(s); err != nil { + panic(err) + } + + fmt.Printf("value: %+v\n", s) + fmt.Printf("json: %s", w.Bytes()) + + r := bytes.NewReader([]byte(`{"height":1.5,"age":10}`)) + if err := json.NewDecoder(r).Decode(s); err != nil { + panic(err) + } + fmt.Printf("value: %+v\n", s) + +}