From ae8c44edaebf7b0c0355f179f424cf0cfc8f9fed Mon Sep 17 00:00:00 2001 From: jaekwon Date: Sat, 22 Jun 2024 17:31:00 -0700 Subject: [PATCH 01/45] ... --- gnovm/pkg/gnolang/nodes.go | 2 + gnovm/pkg/gnolang/preprocess.go | 337 ++++++++++++++++++++++++++++---- gnovm/pkg/gnolang/store.go | 4 +- gnovm/pkg/gnolang/values.go | 5 +- 4 files changed, 307 insertions(+), 41 deletions(-) diff --git a/gnovm/pkg/gnolang/nodes.go b/gnovm/pkg/gnolang/nodes.go index 2897fdd5306..caa49d92a4d 100644 --- a/gnovm/pkg/gnolang/nodes.go +++ b/gnovm/pkg/gnolang/nodes.go @@ -1765,12 +1765,14 @@ func (sb *StaticBlock) Define(n Name, tv TypedValue) { sb.Define2(false, n, tv.T, tv) } +// Set type to nil, only reserving the name. func (sb *StaticBlock) Predefine(isConst bool, n Name) { sb.Define2(isConst, n, nil, anyValue(nil)) } // The declared type st may not be the same as the static tv; // e.g. var x MyInterface = MyStruct{}. +// Setting st and tv to nil/zero reserves (predefines) name for definition later. func (sb *StaticBlock) Define2(isConst bool, n Name, st Type, tv TypedValue) { if debug { debug.Printf( diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 8eb2b37fcc2..ee0d23d6350 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -21,7 +21,7 @@ func PredefineFileSet(store Store, pn *PackageNode, fset *FileSet) { // First, initialize all file nodes and connect to package node. for _, fn := range fset.Files { SetNodeLocations(pn.PkgPath, string(fn.Name), fn) - fn.InitStaticBlock(fn, pn) + initStaticBlocks(store, pn, fn) } // NOTE: much of what follows is duplicated for a single *FileNode // in the main Preprocess translation function. Keep synced. @@ -99,6 +99,215 @@ func PredefineFileSet(store Store, pn *PackageNode, fset *FileSet) { } } +// Initialize static block info. +func initStaticBlocks(store Store, ctx BlockNode, bn BlockNode) { + + // create stack of BlockNodes. + var stack []BlockNode = make([]BlockNode, 0, 32) + var last BlockNode = ctx + stack = append(stack, last) + + // iterate over all nodes recursively. + _ = Transcribe(bn, func(ns []Node, ftype TransField, index int, n Node, stage TransStage) (Node, TransCtrl) { + // if already preprocessed, skip it. + if n.GetAttribute(ATTR_PREPROCESSED) == true { + return n, TRANS_SKIP + } + + if debug { + debug.Printf("initStaticBlocks %s (%v) stage:%v\n", n.String(), reflect.TypeOf(n), stage) + } + fmt.Printf("initStaticBlocks %s (%v) stage:%v\n", n.String(), reflect.TypeOf(n), stage) + + switch stage { + // ---------------------------------------- + case TRANS_ENTER: + switch n := n.(type) { + case *AssignStmt: + if n.Op == DEFINE { + var defined bool + for _, lx := range n.Lhs { + ln := lx.(*NameExpr).Name + if ln == blankIdentifier { + continue + } + last.Predefine(false, ln) + defined = true + } + if !defined { + panic(fmt.Sprintf("nothing defined in assignment %s", n.String())) + } + } + case *ImportDecl: + name := n.Name + if name == "." { + panic("dot imports not allowed in gno") + } + if name == "" { // use default + pv := store.GetPackage(n.PkgPath, true) + if pv == nil { + panic(fmt.Sprintf( + "unknown import path %s", + n.PkgPath)) + } + name = pv.PkgName + } + if name != blankIdentifier { + last.Predefine(false, name) + } + case *ValueDecl: + last2 := skipFile(last) + fmt.Printf("XXXXXX %#v\n", last2) + for i := 0; i < len(n.NameExprs); i++ { + nx := &n.NameExprs[i] + fmt.Println("XXXXX", nx) + if nx.Name == blankIdentifier { + continue + } + last2.Predefine(n.Const, nx.Name) + } + case *TypeDecl: + last2 := skipFile(last) + last2.Predefine(false, n.Name) + case *FuncDecl: + fmt.Println("HMMM") + fmt.Println("HMMM", last) + fmt.Println("HMMM", stack) + fmt.Println("HMMM", n.Name) + fmt.Println("HMMM") + if n.IsMethod { + if n.Recv.Name == "" || n.Recv.Name == blankIdentifier { + // create a hidden var with leading dot. + // NOTE: document somewhere. + n.Recv.Name = ".recv" + } + } else { + pkg := skipFile(last).(*PackageNode) + pkg.Predefine(false, n.Name) + } + case *FuncTypeExpr: + for i := range n.Params { + p := &n.Params[i] + if p.Name == "" || p.Name == blankIdentifier { + // create a hidden var with leading dot. + // NOTE: document somewhere. + pn := fmt.Sprintf(".arg_%d", i) + p.Name = Name(pn) + } + } + for i := range n.Results { + r := &n.Results[i] + if r.Name == blankIdentifier { + // create a hidden var with leading dot. + // NOTE: document somewhere. + rn := fmt.Sprintf(".res_%d", i) + r.Name = Name(rn) + } + } + } + return n, TRANS_CONTINUE + + // ---------------------------------------- + case TRANS_BLOCK: + switch n := n.(type) { + case *BlockStmt: + pushInitBlock(n, &last, &stack) + case *ForStmt: + pushInitBlock(n, &last, &stack) + case *IfStmt: + pushInitBlock(n, &last, &stack) + case *IfCaseStmt: + pushInitRealBlock(n, &last, &stack) + // parent if statement. + ifs := ns[len(ns)-1].(*IfStmt) + // anything declared in ifs are copied. + for _, n := range ifs.GetBlockNames() { + last.Predefine(false, n) + } + case *RangeStmt: + pushInitBlock(n, &last, &stack) + if n.Op == DEFINE { + if n.Key != nil { + last.Predefine(false, n.Key.(*NameExpr).Name) + } + if n.Value != nil { + last.Predefine(false, n.Value.(*NameExpr).Name) + } + } + case *FuncLitExpr: + pushInitBlock(n, &last, &stack) + for _, p := range n.Type.Params { + last.Predefine(false, p.Name) + } + for _, rf := range n.Type.Results { + if rf.Name != "" { + last.Predefine(false, rf.Name) + } + } + case *SelectCaseStmt: + pushInitBlock(n, &last, &stack) + case *SwitchStmt: + pushInitBlock(n, &last, &stack) + if n.VarName != "" { + // NOTE: this defines for default clauses too, + // see comment on block copying @ + // SwitchClauseStmt:TRANS_BLOCK. + last.Predefine(false, n.VarName) + } + case *SwitchClauseStmt: + pushInitRealBlock(n, &last, &stack) + // parent switch statement. + ss := ns[len(ns)-1].(*SwitchStmt) + // anything declared in ss are copied, + // namely ss.VarName if defined. + for _, n := range ss.GetBlockNames() { + last.Predefine(false, n) + } + if ss.IsTypeSwitch { + if ss.VarName != "" { + last.Predefine(false, ss.VarName) + } + } else { + if ss.VarName != "" { + panic("should not happen") + } + } + case *FuncDecl: + pushInitBlock(n, &last, &stack) + if n.IsMethod { + n.Predefine(false, n.Recv.Name) + } + for _, pte := range n.Type.Params { + if pte.Name == "" { + panic("should not happen") + } + n.Predefine(false, pte.Name) + } + for _, rte := range n.Type.Results { + if rte.Name != "" { + n.Predefine(false, rte.Name) + } + } + case *FileNode: + pushInitBlock(n, &last, &stack) + default: + panic("should not happen") + } + + // ---------------------------------------- + case TRANS_LEAVE: + // finalization. + if _, ok := n.(BlockNode); ok { + // Pop block. + stack = stack[:len(stack)-1] + last = stack[len(stack)-1] + } + return n, TRANS_CONTINUE + } + return n, TRANS_CONTINUE + }) +} + // This counter ensures (during testing) that certain functions // (like ConvertUntypedTo() for bigints and strings) // are only called during the preprocessing stage. @@ -128,6 +337,8 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { preprocessing.Add(1) defer preprocessing.Add(-1) + fmt.Println("PREPROCESSSSSSSS", n) + if ctx == nil { // Generally a ctx is required, but if not, it's ok to pass in nil. // panic("Preprocess requires context") @@ -146,8 +357,7 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { lastpn := packageOf(last) stack = append(stack, last) - // iterate over all nodes recursively and calculate - // BlockValuePath for each NameExpr. + // iterate over all nodes recursively nn := Transcribe(n, func(ns []Node, ftype TransField, index int, n Node, stage TransStage) (Node, TransCtrl) { // if already preprocessed, skip it. if n.GetAttribute(ATTR_PREPROCESSED) == true { @@ -190,25 +400,21 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { // TRANS_ENTER ----------------------- case *AssignStmt: if n.Op == DEFINE { - var defined bool + // XXX just remove? for _, lx := range n.Lhs { ln := lx.(*NameExpr).Name if ln == blankIdentifier { // ignore. } else { - _, ok := last.GetLocalIndex(ln) - if !ok { + if !isLocallyDefined(last, ln) { // initial declaration to be re-defined. - last.Define(ln, anyValue(nil)) - defined = true + // last.Define(ln, anyValue(nil)) + last.Predefine(false, ln) } else { - // do not redeclare. + // do not redeclare nor re-predefine. } } } - if !defined { - panic(fmt.Sprintf("nothing defined in assignment %s", n.String())) - } } else { // nothing defined. } @@ -240,8 +446,9 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { if p.Name == "" || p.Name == blankIdentifier { // create a hidden var with leading dot. // NOTE: document somewhere. - pn := fmt.Sprintf(".arg_%d", i) - p.Name = Name(pn) + // pn := fmt.Sprintf(".arg_%d", i) + // p.Name = Name(pn) + panic("arg name should have been set in initStaticBlocks") } } for i := range n.Results { @@ -249,8 +456,9 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { if r.Name == blankIdentifier { // create a hidden var with leading dot. // NOTE: document somewhere. - rn := fmt.Sprintf(".res_%d", i) - r.Name = Name(rn) + // rn := fmt.Sprintf(".res_%d", i) + // r.Name = Name(rn) + panic("result name should have been set in initStaticBlock") } } } @@ -280,7 +488,7 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { // TRANS_BLOCK ----------------------- case *IfCaseStmt: - pushRealBlock(n, &last, &stack) + pushInitRealBlockAndCopy(n, &last, &stack) // parent if statement. ifs := ns[len(ns)-1].(*IfStmt) // anything declared in ifs are copied. @@ -396,7 +604,7 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { // TRANS_BLOCK ----------------------- case *SwitchClauseStmt: - pushRealBlock(n, &last, &stack) + pushInitRealBlockAndCopy(n, &last, &stack) // parent switch statement. ss := ns[len(ns)-1].(*SwitchStmt) // anything declared in ss are copied, @@ -1953,6 +2161,12 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { // during *TypeDecl:ENTER. Then, copy over the // values, completing the recursion. tmp := evalStaticType(store, last, n.Type) + fmt.Println("!@#!@#!@#", last, n.Name) + fmt.Println("!@#!@#!@#", last.GetValueRef(store, n.Name)) + fmt.Printf("ASDASDASDASD %#v\n", last) + pkg := packageOf(last) + fmt.Printf("PKGPKGPKGPKG %#v\n", pkg) + fmt.Printf("PKGPKGPKGPKG %#v\n", pkg.GetValueRef(store, n.Name)) dst := last.GetValueRef(store, n.Name).GetType() switch dst := dst.(type) { case *FuncType: @@ -2001,17 +2215,15 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { n.Type = constType(n.Type, dst) } // end type switch statement + // END TRANS_LEAVE ----------------------- - // TRANS_LEAVE ----------------------- - // finalization. + // finalization (during leave). if _, ok := n.(BlockNode); ok { // Pop block. stack = stack[:len(stack)-1] last = stack[len(stack)-1] - return n, TRANS_CONTINUE - } else { - return n, TRANS_CONTINUE } + return n, TRANS_CONTINUE } panic(fmt.Sprintf( @@ -2038,14 +2250,10 @@ func isSwitchLabel(ns []Node, label Name) bool { return false } +// Idempotent. func pushInitBlock(bn BlockNode, last *BlockNode, stack *[]BlockNode) { if !bn.IsInitialized() { bn.InitStaticBlock(bn, *last) - } else { - // This may happen when PredefineFileSet() followed by Preprocess(). - if _, ok := bn.(*FileNode); !ok { - panic("unexpected initialized block node type") - } } if bn.GetStaticBlock().Source != bn { panic("expected the source of a block node to be itself") @@ -2056,13 +2264,29 @@ func pushInitBlock(bn BlockNode, last *BlockNode, stack *[]BlockNode) { // like pushInitBlock(), but when the last block is a faux block, // namely after SwitchStmt and IfStmt. -func pushRealBlock(bn BlockNode, last *BlockNode, stack *[]BlockNode) { - orig := *last - // skip the faux block for parent of bn. - bn.InitStaticBlock(bn, (*last).GetParentNode(nil)) +// Idempotent. +func pushInitRealBlock(bn BlockNode, last *BlockNode, stack *[]BlockNode) { + if !bn.IsInitialized() { + bn.InitStaticBlock(bn, (*last).GetParentNode(nil)) + } + if bn.GetStaticBlock().Source != bn { + panic("expected the source of a block node to be itself") + } *last = bn *stack = append(*stack, bn) - // anything declared in orig are copied. +} + +// like pushInitBlock(), but when the last block is a faux block, +// namely after SwitchStmt and IfStmt. +// Not idempotent, as it calls bn.Define with reference to last's TV value slot. +func pushInitRealBlockAndCopy(bn BlockNode, last *BlockNode, stack *[]BlockNode) { + orig := *last + pushInitRealBlock(bn, last, stack) + copyFromFauxBlock(bn, orig) +} + +// anything declared in orig are copied. +func copyFromFauxBlock(bn BlockNode, orig BlockNode) { for _, n := range orig.GetBlockNames() { tv := orig.GetValueRef(nil, n) bn.Define(n, *tv) @@ -2589,8 +2813,14 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { } switch cx := x.(type) { case *NameExpr: + fmt.Println("findUndefined2", cx.Name) if tv := last.GetValueRef(store, cx.Name); tv != nil { - return + if tv.T == nil { // only predefined + fmt.Println("findUndefined2 unknown", cx.Name) + return cx.Name + } else { + return + } } if _, ok := UverseNode().GetLocalIndex(cx.Name); ok { // XXX NOTE even if the name is shadowed by a file @@ -2598,6 +2828,7 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { // will be predefined later. return } + fmt.Println("findUndefined2 unknown2", cx.Name) return cx.Name case *BasicLitExpr: return @@ -2902,10 +3133,12 @@ func predefineNow2(store Store, last BlockNode, d Decl, m map[Name]struct{}) (De // NOTE: unlike the *ValueDecl case, this case doesn't // preprocess d itself (only d.Type). if cd.IsMethod { + // XXX probably remove. if cd.Recv.Name == "" || cd.Recv.Name == blankIdentifier { // create a hidden var with leading dot. // NOTE: document somewhere. - cd.Recv.Name = ".recv" + // cd.Recv.Name = ".recv" + panic("cd.Recv.Name should have been set in initStaticBlocks") } cd.Recv = *Preprocess(store, last, &cd.Recv).(*FieldTypeExpr) cd.Type = *Preprocess(store, last, &cd.Type).(*FuncTypeExpr) @@ -3046,12 +3279,12 @@ func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { return } } + last2 := skipFile(last) for i := 0; i < len(d.NameExprs); i++ { nx := &d.NameExprs[i] if nx.Name == blankIdentifier { nx.Path.Name = blankIdentifier } else { - last2 := skipFile(last) last2.Predefine(d.Const, nx.Name) nx.Path = last.GetPathForName(store, nx.Name) } @@ -3059,8 +3292,7 @@ func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { case *TypeDecl: // before looking for dependencies, predefine empty type. last2 := skipFile(last) - _, ok := last2.GetLocalIndex(d.Name) - if !ok { + if !isLocallyDefined(last2, d.Name) { // construct empty t type var t Type switch tx := d.Type.(type) { @@ -3082,7 +3314,19 @@ func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { t = &PointerType{} case *NameExpr: if tv := last.GetValueRef(store, tx.Name); tv != nil { + if tv.T == nil { + // only predefined + un = tx.Name + return + } + // fmt.Println("!!!!! d", d) + // fmt.Println("!!!!! tx tx.Name tv", tx, tx.Name, tv) + // fmt.Println("!!!!! last", last.GetValueRef(store, tx.Name)) + // fmt.Println("!!!!! last.p", + // last.GetParentNode(nil).GetValueRef(store, tx.Name)) + // fmt.Println("!!!!!") // (file) block name + // XXX t = tv.GetType() if dt, ok := t.(*DeclaredType); ok { if !dt.sealed { @@ -3553,6 +3797,23 @@ func findDependentNames(n Node, dst map[Name]struct{}) { } } +// A name is locally defined on a block node +// if the type is set to anything but nil. +// A predefined name will return false. +// NOTE: the value is not necessarily set statically, +// unless it refers to a type, package, or statically declared func value. +func isLocallyDefined(bn BlockNode, n Name) bool { + idx, ok := bn.GetLocalIndex(n) + if !ok { + return false + } + tv := bn.GetStaticBlock().Block.Values[idx] + if tv.T == nil { + return false + } + return true +} + // ---------------------------------------- // SetNodeLocations diff --git a/gnovm/pkg/gnolang/store.go b/gnovm/pkg/gnolang/store.go index 12666c3d7ad..940a1927514 100644 --- a/gnovm/pkg/gnolang/store.go +++ b/gnovm/pkg/gnolang/store.go @@ -204,7 +204,9 @@ func (ds *defaultStore) GetPackage(pkgPath string, isImport bool) *PackageValue // but packages gotten from the pkgGetter may skip this step, // so fill in store.CacheTypes here. for _, tv := range pv.GetBlock(nil).Values { - if tv.T.Kind() == TypeKind { + if tv.T == nil { + // only predefined. + } else if tv.T.Kind() == TypeKind { t := tv.GetType() ds.SetCacheType(t) } diff --git a/gnovm/pkg/gnolang/values.go b/gnovm/pkg/gnolang/values.go index d38c083428c..d6589c89227 100644 --- a/gnovm/pkg/gnolang/values.go +++ b/gnovm/pkg/gnolang/values.go @@ -2092,9 +2092,10 @@ func (tv *TypedValue) GetPointerAtIndex(alloc *Allocator, store Store, iv *Typed } default: panic(fmt.Sprintf( - "unexpected index base type %s (%v)", + "unexpected index base type %s (%v base %v)", tv.T.String(), - reflect.TypeOf(tv.T))) + reflect.TypeOf(tv.T), + reflect.TypeOf(baseOf(tv.T)))) } } From 3c46e270b224833cbf613148757046f62c24df77 Mon Sep 17 00:00:00 2001 From: jaekwon Date: Sun, 23 Jun 2024 12:46:01 -0700 Subject: [PATCH 02/45] fix more tests --- gnovm/pkg/gnolang/debugger.go | 2 +- gnovm/pkg/gnolang/nodes.go | 18 ++++--- gnovm/pkg/gnolang/preprocess.go | 92 +++++++++++---------------------- gnovm/pkg/gnolang/store.go | 3 +- 4 files changed, 43 insertions(+), 72 deletions(-) diff --git a/gnovm/pkg/gnolang/debugger.go b/gnovm/pkg/gnolang/debugger.go index f9e93974937..62f194dfee4 100644 --- a/gnovm/pkg/gnolang/debugger.go +++ b/gnovm/pkg/gnolang/debugger.go @@ -699,7 +699,7 @@ func debugLookup(m *Machine, name string) (tv TypedValue, ok bool) { } } // Fallback: search a global value. - if v := sblocks[0].Source.GetValueRef(m.Store, Name(name)); v != nil { + if v := sblocks[0].Source.GetValueRef(m.Store, Name(name), true); v != nil { return *v, true } return tv, false diff --git a/gnovm/pkg/gnolang/nodes.go b/gnovm/pkg/gnolang/nodes.go index caa49d92a4d..d5bb9b4f83e 100644 --- a/gnovm/pkg/gnolang/nodes.go +++ b/gnovm/pkg/gnolang/nodes.go @@ -1420,7 +1420,7 @@ func (x *PackageNode) DefineNative(n Name, ps, rs FieldTypeExprs, native func(*M panic("should not happen") } } - fv := x.GetValueRef(nil, n).V.(*FuncValue) + fv := x.GetValueRef(nil, n, true).V.(*FuncValue) fv.nativeBody = native } @@ -1434,7 +1434,7 @@ func (x *PackageNode) DefineNativeOverride(n Name, native func(*Machine)) { if native == nil { panic("DefineNative expects a function, but got nil") } - fv := x.GetValueRef(nil, n).V.(*FuncValue) + fv := x.GetValueRef(nil, n, true).V.(*FuncValue) fv.nativeBody = native } @@ -1471,7 +1471,7 @@ type BlockNode interface { GetPathForName(Store, Name) ValuePath GetIsConst(Store, Name) bool GetLocalIndex(Name) (uint16, bool) - GetValueRef(Store, Name) *TypedValue + GetValueRef(Store, Name, bool) *TypedValue GetStaticTypeOf(Store, Name) Type GetStaticTypeOfAt(Store, ValuePath) Type Predefine(bool, Name) @@ -1732,17 +1732,19 @@ func (sb *StaticBlock) GetLocalIndex(n Name) (uint16, bool) { // Implemented BlockNode. // This method is too slow for runtime, but it is used // during preprocessing to compute types. +// If skipPredefined, skips over names that are only predefined. // Returns nil if not defined. -func (sb *StaticBlock) GetValueRef(store Store, n Name) *TypedValue { +func (sb *StaticBlock) GetValueRef(store Store, n Name, skipPredefined bool) *TypedValue { idx, ok := sb.GetLocalIndex(n) bb := &sb.Block bp := sb.GetParentNode(store) for { - if ok { + if ok && (!skipPredefined || sb.Types[idx] != nil) { return bb.GetPointerToInt(store, int(idx)).TV } else if bp != nil { idx, ok = bp.GetLocalIndex(n) - bb = bp.GetStaticBlock().GetBlock() + sb = bp.GetStaticBlock() + bb = sb.GetBlock() bp = bp.GetParentNode(store) } else { return nil @@ -1752,8 +1754,8 @@ func (sb *StaticBlock) GetValueRef(store Store, n Name) *TypedValue { // Implements BlockNode // Statically declares a name definition. -// At runtime, use *Block.GetValueRef() etc which take path -// values, which are pre-computeed in the preprocessor. +// At runtime, use *Block.GetPointerTo() which takes a path +// value, which is pre-computeed in the preprocessor. // Once a typed value is defined, it cannot be changed. // // NOTE: Currently tv.V is only set when the value represents a Type(Value) or diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index ee0d23d6350..eaf127d81bc 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -117,7 +117,6 @@ func initStaticBlocks(store Store, ctx BlockNode, bn BlockNode) { if debug { debug.Printf("initStaticBlocks %s (%v) stage:%v\n", n.String(), reflect.TypeOf(n), stage) } - fmt.Printf("initStaticBlocks %s (%v) stage:%v\n", n.String(), reflect.TypeOf(n), stage) switch stage { // ---------------------------------------- @@ -157,10 +156,8 @@ func initStaticBlocks(store Store, ctx BlockNode, bn BlockNode) { } case *ValueDecl: last2 := skipFile(last) - fmt.Printf("XXXXXX %#v\n", last2) for i := 0; i < len(n.NameExprs); i++ { nx := &n.NameExprs[i] - fmt.Println("XXXXX", nx) if nx.Name == blankIdentifier { continue } @@ -170,11 +167,6 @@ func initStaticBlocks(store Store, ctx BlockNode, bn BlockNode) { last2 := skipFile(last) last2.Predefine(false, n.Name) case *FuncDecl: - fmt.Println("HMMM") - fmt.Println("HMMM", last) - fmt.Println("HMMM", stack) - fmt.Println("HMMM", n.Name) - fmt.Println("HMMM") if n.IsMethod { if n.Recv.Name == "" || n.Recv.Name == blankIdentifier { // create a hidden var with leading dot. @@ -337,8 +329,6 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { preprocessing.Add(1) defer preprocessing.Add(-1) - fmt.Println("PREPROCESSSSSSSS", n) - if ctx == nil { // Generally a ctx is required, but if not, it's ok to pass in nil. // panic("Preprocess requires context") @@ -493,7 +483,7 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { ifs := ns[len(ns)-1].(*IfStmt) // anything declared in ifs are copied. for _, n := range ifs.GetBlockNames() { - tv := ifs.GetValueRef(nil, n) + tv := ifs.GetValueRef(nil, n, false) last.Define(n, *tv) } @@ -610,7 +600,7 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { // anything declared in ss are copied, // namely ss.VarName if defined. for _, n := range ss.GetBlockNames() { - tv := ss.GetValueRef(nil, n) + tv := ss.GetValueRef(nil, n, false) last.Define(n, *tv) } if ss.IsTypeSwitch { @@ -2110,21 +2100,25 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { } } // evaluate typed value for static definition. - for i, vx := range n.Values { - if cx, ok := vx.(*ConstExpr); ok && - !cx.TypedValue.IsUndefined() { - if n.Const { - // const _ = : static block should contain value - tvs[i] = cx.TypedValue - } else { - // var _ = : static block should NOT contain value - tvs[i] = anyValue(cx.TypedValue.T) + for i, _ := range n.NameExprs { + // consider value if specified. + if len(n.Values) > 0 { + vx := n.Values[i] + if cx, ok := vx.(*ConstExpr); ok && + !cx.TypedValue.IsUndefined() { + if n.Const { + // const _ = : static block should contain value + tvs[i] = cx.TypedValue + } else { + // var _ = : static block should NOT contain value + tvs[i] = anyValue(cx.TypedValue.T) + } + continue } - } else { - // for var decls of non-const expr. - st := sts[i] - tvs[i] = anyValue(st) } + // for var decls of non-const expr. + st := sts[i] + tvs[i] = anyValue(st) } } // define. @@ -2161,13 +2155,7 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { // during *TypeDecl:ENTER. Then, copy over the // values, completing the recursion. tmp := evalStaticType(store, last, n.Type) - fmt.Println("!@#!@#!@#", last, n.Name) - fmt.Println("!@#!@#!@#", last.GetValueRef(store, n.Name)) - fmt.Printf("ASDASDASDASD %#v\n", last) - pkg := packageOf(last) - fmt.Printf("PKGPKGPKGPKG %#v\n", pkg) - fmt.Printf("PKGPKGPKGPKG %#v\n", pkg.GetValueRef(store, n.Name)) - dst := last.GetValueRef(store, n.Name).GetType() + dst := last.GetValueRef(store, n.Name, true).GetType() switch dst := dst.(type) { case *FuncType: *dst = *(tmp.(*FuncType)) @@ -2189,7 +2177,7 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { exists := false if dt := store.GetTypeSafe(tid); dt != nil { dst = dt.(*DeclaredType) - last.GetValueRef(store, n.Name).SetType(dst) + last.GetValueRef(store, n.Name, true).SetType(dst) exists = true } if !exists { @@ -2288,7 +2276,7 @@ func pushInitRealBlockAndCopy(bn BlockNode, last *BlockNode, stack *[]BlockNode) // anything declared in orig are copied. func copyFromFauxBlock(bn BlockNode, orig BlockNode) { for _, n := range orig.GetBlockNames() { - tv := orig.GetValueRef(nil, n) + tv := orig.GetValueRef(nil, n, false) bn.Define(n, *tv) } } @@ -2813,14 +2801,8 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { } switch cx := x.(type) { case *NameExpr: - fmt.Println("findUndefined2", cx.Name) - if tv := last.GetValueRef(store, cx.Name); tv != nil { - if tv.T == nil { // only predefined - fmt.Println("findUndefined2 unknown", cx.Name) - return cx.Name - } else { - return - } + if tv := last.GetValueRef(store, cx.Name, true); tv != nil { + return } if _, ok := UverseNode().GetLocalIndex(cx.Name); ok { // XXX NOTE even if the name is shadowed by a file @@ -2828,7 +2810,6 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { // will be predefined later. return } - fmt.Println("findUndefined2 unknown2", cx.Name) return cx.Name case *BasicLitExpr: return @@ -3191,7 +3172,7 @@ func predefineNow2(store Store, last BlockNode, d Decl, m map[Name]struct{}) (De dt.Name, cd.Name)) } } else { - ftv := pkg.GetValueRef(store, cd.Name) + ftv := pkg.GetValueRef(store, cd.Name, true) ft := ftv.T.(*FuncType) cd.Type = *Preprocess(store, last, &cd.Type).(*FuncTypeExpr) ft2 := evalStaticType(store, last, &cd.Type).(*FuncType) @@ -3232,7 +3213,7 @@ func predefineNow2(store Store, last BlockNode, d Decl, m map[Name]struct{}) (De // non-package) stmt bodies. func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { if d.GetAttribute(ATTR_PREDEFINED) == true { - panic("decl node already predefined!") + panic(fmt.Sprintf("decl node already predefined! %v", d)) } // If un is blank, it means the predefine succeeded. @@ -3313,20 +3294,7 @@ func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { case *StarExpr: t = &PointerType{} case *NameExpr: - if tv := last.GetValueRef(store, tx.Name); tv != nil { - if tv.T == nil { - // only predefined - un = tx.Name - return - } - // fmt.Println("!!!!! d", d) - // fmt.Println("!!!!! tx tx.Name tv", tx, tx.Name, tv) - // fmt.Println("!!!!! last", last.GetValueRef(store, tx.Name)) - // fmt.Println("!!!!! last.p", - // last.GetParentNode(nil).GetValueRef(store, tx.Name)) - // fmt.Println("!!!!!") - // (file) block name - // XXX + if tv := last.GetValueRef(store, tx.Name, true); tv != nil { t = tv.GetType() if dt, ok := t.(*DeclaredType); ok { if !dt.sealed { @@ -3354,7 +3322,7 @@ func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { return } pkgName := tx.X.(*NameExpr).Name - tv := last.GetValueRef(store, pkgName) + tv := last.GetValueRef(store, pkgName, true) pv, ok := tv.V.(*PackageValue) if !ok { panic(fmt.Sprintf( @@ -3807,8 +3775,8 @@ func isLocallyDefined(bn BlockNode, n Name) bool { if !ok { return false } - tv := bn.GetStaticBlock().Block.Values[idx] - if tv.T == nil { + t := bn.GetStaticBlock().Types[idx] + if t == nil { return false } return true diff --git a/gnovm/pkg/gnolang/store.go b/gnovm/pkg/gnolang/store.go index 940a1927514..432ff567d71 100644 --- a/gnovm/pkg/gnolang/store.go +++ b/gnovm/pkg/gnolang/store.go @@ -205,7 +205,8 @@ func (ds *defaultStore) GetPackage(pkgPath string, isImport bool) *PackageValue // so fill in store.CacheTypes here. for _, tv := range pv.GetBlock(nil).Values { if tv.T == nil { - // only predefined. + // tv.T is nil here only when only predefined. + // (for other types, .T == nil even after definition). } else if tv.T.Kind() == TypeKind { t := tv.GetType() ds.SetCacheType(t) From f4306edb603aa190680d6a85aae851dd7e1dc395 Mon Sep 17 00:00:00 2001 From: jaekwon Date: Sun, 23 Jun 2024 15:33:08 -0700 Subject: [PATCH 03/45] fix tests --- gnovm/pkg/gnolang/gonative_test.go | 2 +- gnovm/pkg/gnolang/preprocess.go | 26 ++++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/gnovm/pkg/gnolang/gonative_test.go b/gnovm/pkg/gnolang/gonative_test.go index 42729b43699..fa5415a8068 100644 --- a/gnovm/pkg/gnolang/gonative_test.go +++ b/gnovm/pkg/gnolang/gonative_test.go @@ -41,7 +41,7 @@ func TestGoNativeDefine(t *testing.T) { pkg := NewPackageNode("foo", "test.foo", nil) rt := reflect.TypeOf(Foo{}) pkg.DefineGoNativeType(rt) - nt := pkg.GetValueRef(nil, Name("Foo")).GetType().(*NativeType) + nt := pkg.GetValueRef(nil, Name("Foo"), true).GetType().(*NativeType) assert.Equal(t, rt, nt.Type) path := pkg.GetPathForName(nil, Name("Foo")) assert.Equal(t, uint8(1), path.Depth) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index eaf127d81bc..eebdf354771 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -114,6 +114,32 @@ func initStaticBlocks(store Store, ctx BlockNode, bn BlockNode) { return n, TRANS_SKIP } + defer func() { + if r := recover(); r != nil { + // before re-throwing the error, append location information to message. + loc := last.GetLocation() + if nline := n.GetLine(); nline > 0 { + loc.Line = nline + } + + var err error + rerr, ok := r.(error) + if ok { + // NOTE: gotuna/gorilla expects error exceptions. + err = errors.Wrap(rerr, loc.String()) + } else { + // NOTE: gotuna/gorilla expects error exceptions. + err = fmt.Errorf("%s: %v", loc.String(), r) + } + + // Re-throw the error after wrapping it with the preprocessing stack information. + panic(&PreprocessError{ + err: err, + stack: stack, + }) + } + }() + if debug { debug.Printf("initStaticBlocks %s (%v) stage:%v\n", n.String(), reflect.TypeOf(n), stage) } From 5cc24947adc8d27fa8d7f6f2b46188f8cc1ba94f Mon Sep 17 00:00:00 2001 From: jaekwon Date: Sun, 23 Jun 2024 17:06:36 -0700 Subject: [PATCH 04/45] ... --- gnovm/pkg/gnolang/preprocess.go | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index eebdf354771..37026ead4b7 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -201,6 +201,15 @@ func initStaticBlocks(store Store, ctx BlockNode, bn BlockNode) { } } else { pkg := skipFile(last).(*PackageNode) + // special case: if n.Name == "init", assign unique suffix. + if n.Name == "init" { + idx := pkg.GetNumNames() + // NOTE: use a dot for init func suffixing. + // this also makes them unreferenceable. + dname := Name(fmt.Sprintf("init.%d", idx)) + n.Name = dname + } + pkg.Predefine(false, n.Name) } case *FuncTypeExpr: @@ -3401,14 +3410,6 @@ func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { // define package-level function. ft := &FuncType{} pkg := skipFile(last).(*PackageNode) - // special case: if d.Name == "init", assign unique suffix. - if d.Name == "init" { - idx := pkg.GetNumNames() - // NOTE: use a dot for init func suffixing. - // this also makes them unreferenceable. - dname := Name(fmt.Sprintf("init.%d", idx)) - d.Name = dname - } // define a FuncValue w/ above type as d.Name. // fill in later during *FuncDecl:BLOCK. fv := &FuncValue{ From 31b22633c583ff2e71ea27c566bf8eb1e02afe70 Mon Sep 17 00:00:00 2001 From: jaekwon Date: Sun, 23 Jun 2024 17:17:36 -0700 Subject: [PATCH 05/45] update golden tests --- .../gno/testdata/gno_test/realm_correct.txtar | 14 +- .../gno/testdata/gno_test/realm_sync.txtar | 14 +- .../more/realm_compositelit_filetest.gno | 38 +- gnovm/tests/files/heap_item_value.gno | 72 +- gnovm/tests/files/heap_item_value_init.gno | 82 +- gnovm/tests/files/zrealm0.gno | 14 +- gnovm/tests/files/zrealm1.gno | 22 +- gnovm/tests/files/zrealm10.gno | 4 +- gnovm/tests/files/zrealm11.gno | 4 +- gnovm/tests/files/zrealm2.gno | 30 +- gnovm/tests/files/zrealm3.gno | 46 +- gnovm/tests/files/zrealm4.gno | 50 +- gnovm/tests/files/zrealm5.gno | 54 +- gnovm/tests/files/zrealm6.gno | 64 +- gnovm/tests/files/zrealm7.gno | 94 +-- gnovm/tests/files/zrealm8.gno | 4 +- gnovm/tests/files/zrealm9.gno | 4 +- gnovm/tests/files/zrealm_avl0.gno | 58 +- gnovm/tests/files/zrealm_avl1.gno | 60 +- gnovm/tests/files/zrealm_avl2.gno | 22 +- gnovm/tests/files/zrealm_example.gno | 20 +- gnovm/tests/files/zrealm_natbind0_stdlibs.gno | 88 +-- gnovm/tests/files/zrealm_std1_stdlibs.gno | 2 +- gnovm/tests/files/zrealm_std2_stdlibs.gno | 2 +- gnovm/tests/files/zrealm_tests0_stdlibs.gno | 734 +++++++++--------- 25 files changed, 798 insertions(+), 798 deletions(-) diff --git a/gnovm/cmd/gno/testdata/gno_test/realm_correct.txtar b/gnovm/cmd/gno/testdata/gno_test/realm_correct.txtar index 6845a5706c2..1e2a01c9bd4 100644 --- a/gnovm/cmd/gno/testdata/gno_test/realm_correct.txtar +++ b/gnovm/cmd/gno/testdata/gno_test/realm_correct.txtar @@ -40,6 +40,13 @@ func main() { // }, // "Values": [ // { +// "N": "AQAAAAAAAAA=", +// "T": { +// "@type": "/gno.PrimitiveType", +// "value": "32" +// } +// }, +// { // "T": { // "@type": "/gno.FuncType", // "Params": [], @@ -74,13 +81,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "N": "AQAAAAAAAAA=", -// "T": { -// "@type": "/gno.PrimitiveType", -// "value": "32" -// } // } // ] // } diff --git a/gnovm/cmd/gno/testdata/gno_test/realm_sync.txtar b/gnovm/cmd/gno/testdata/gno_test/realm_sync.txtar index 19c78a93870..0a5f4f98cef 100644 --- a/gnovm/cmd/gno/testdata/gno_test/realm_sync.txtar +++ b/gnovm/cmd/gno/testdata/gno_test/realm_sync.txtar @@ -55,6 +55,13 @@ func main() { // }, // "Values": [ // { +// "N": "AQAAAAAAAAA=", +// "T": { +// "@type": "/gno.PrimitiveType", +// "value": "32" +// } +// }, +// { // "T": { // "@type": "/gno.FuncType", // "Params": [], @@ -89,13 +96,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "N": "AQAAAAAAAAA=", -// "T": { -// "@type": "/gno.PrimitiveType", -// "value": "32" -// } // } // ] // } diff --git a/gnovm/tests/files/assign_unnamed_type/more/realm_compositelit_filetest.gno b/gnovm/tests/files/assign_unnamed_type/more/realm_compositelit_filetest.gno index 6ef12bd33d4..e3bcff26cfb 100644 --- a/gnovm/tests/files/assign_unnamed_type/more/realm_compositelit_filetest.gno +++ b/gnovm/tests/files/assign_unnamed_type/more/realm_compositelit_filetest.gno @@ -155,6 +155,25 @@ func main() { // }, // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/test.Int" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "3c89d875f7d6daa94113aa4c7e03432ba56202c2", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.TypeType" // }, // "V": { @@ -217,25 +236,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/test.Int" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "3c89d875f7d6daa94113aa4c7e03432ba56202c2", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } diff --git a/gnovm/tests/files/heap_item_value.gno b/gnovm/tests/files/heap_item_value.gno index fe2873f9b60..cea35fbdbe4 100644 --- a/gnovm/tests/files/heap_item_value.gno +++ b/gnovm/tests/files/heap_item_value.gno @@ -102,42 +102,6 @@ func main() { // }, // { // "T": { -// "@type": "/gno.FuncType", -// "Params": [], -// "Results": [] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" -// }, -// "FileName": "main.gno", -// "IsMethod": false, -// "Name": "main", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/test", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "File": "main.gno", -// "Line": "10", -// "Nonce": "0", -// "PkgPath": "gno.land/r/test" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [], -// "Results": [] -// } -// } -// }, -// { -// "T": { // "@type": "/gno.PointerType", // "Elt": { // "@type": "/gno.RefType", @@ -173,6 +137,42 @@ func main() { // "Index": "0", // "TV": null // } +// }, +// { +// "T": { +// "@type": "/gno.FuncType", +// "Params": [], +// "Results": [] +// }, +// "V": { +// "@type": "/gno.FuncValue", +// "Closure": { +// "@type": "/gno.RefValue", +// "Escaped": true, +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// }, +// "FileName": "main.gno", +// "IsMethod": false, +// "Name": "main", +// "NativeName": "", +// "NativePkg": "", +// "PkgPath": "gno.land/r/test", +// "Source": { +// "@type": "/gno.RefNode", +// "BlockNode": null, +// "Location": { +// "File": "main.gno", +// "Line": "10", +// "Nonce": "0", +// "PkgPath": "gno.land/r/test" +// } +// }, +// "Type": { +// "@type": "/gno.FuncType", +// "Params": [], +// "Results": [] +// } +// } // } // ] // } diff --git a/gnovm/tests/files/heap_item_value_init.gno b/gnovm/tests/files/heap_item_value_init.gno index 0d1db7bcb76..88a692ab715 100644 --- a/gnovm/tests/files/heap_item_value_init.gno +++ b/gnovm/tests/files/heap_item_value_init.gno @@ -73,6 +73,44 @@ func main() { // }, // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/test.S" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Escaped": true, +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/test.S" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Escaped": true, +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -82,11 +120,11 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.1", +// "Name": "init.3", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -118,7 +156,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -142,44 +180,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/test.S" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" -// }, -// "Index": "0", -// "TV": null -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/test.S" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } diff --git a/gnovm/tests/files/zrealm0.gno b/gnovm/tests/files/zrealm0.gno index 7578781e503..633852a14cf 100644 --- a/gnovm/tests/files/zrealm0.gno +++ b/gnovm/tests/files/zrealm0.gno @@ -41,6 +41,13 @@ func main() { // }, // "Values": [ // { +// "N": "AQAAAAAAAAA=", +// "T": { +// "@type": "/gno.PrimitiveType", +// "value": "32" +// } +// }, +// { // "T": { // "@type": "/gno.FuncType", // "Params": [], @@ -75,13 +82,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "N": "AQAAAAAAAAA=", -// "T": { -// "@type": "/gno.PrimitiveType", -// "value": "32" -// } // } // ] // } diff --git a/gnovm/tests/files/zrealm1.gno b/gnovm/tests/files/zrealm1.gno index d90c5e8621a..67967c488d8 100644 --- a/gnovm/tests/files/zrealm1.gno +++ b/gnovm/tests/files/zrealm1.gno @@ -69,6 +69,17 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/test.InnerNode" +// }, +// "V": { +// "@type": "/gno.RefValue", +// "Hash": "ae4e9e2d205cc0081d4ee249e1d188ebe270b220", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" +// } +// }, +// { +// "T": { // "@type": "/gno.TypeType" // }, // "V": { @@ -189,17 +200,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/test.InnerNode" -// }, -// "V": { -// "@type": "/gno.RefValue", -// "Hash": "ae4e9e2d205cc0081d4ee249e1d188ebe270b220", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" -// } // } // ] // } diff --git a/gnovm/tests/files/zrealm10.gno b/gnovm/tests/files/zrealm10.gno index 97bb9d439e2..110567bfb12 100644 --- a/gnovm/tests/files/zrealm10.gno +++ b/gnovm/tests/files/zrealm10.gno @@ -23,7 +23,7 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:3]={ // "Fields": [ // { // "N": "AwAAAAAAAAA=", @@ -34,7 +34,7 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "ModTime": "4", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:2", // "RefCount": "1" diff --git a/gnovm/tests/files/zrealm11.gno b/gnovm/tests/files/zrealm11.gno index 0f4d26a44c0..7c8805551c9 100644 --- a/gnovm/tests/files/zrealm11.gno +++ b/gnovm/tests/files/zrealm11.gno @@ -23,7 +23,7 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:3]={ // "Fields": [ // { // "N": "//////////8=", @@ -34,7 +34,7 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "ModTime": "4", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:2", // "RefCount": "1" diff --git a/gnovm/tests/files/zrealm2.gno b/gnovm/tests/files/zrealm2.gno index 67ba2f5a768..c2d18861ed8 100644 --- a/gnovm/tests/files/zrealm2.gno +++ b/gnovm/tests/files/zrealm2.gno @@ -72,6 +72,17 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/test.InnerNode" +// }, +// "V": { +// "@type": "/gno.RefValue", +// "Hash": "61d4aa77a87c01e07038c6030d6aca299d0fdc1b", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// } +// }, +// { +// "T": { // "@type": "/gno.TypeType" // }, // "V": { @@ -168,11 +179,11 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.3", +// "Name": "init.4", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -204,7 +215,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -228,18 +239,7 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/test.InnerNode" -// }, -// "V": { -// "@type": "/gno.RefValue", -// "Hash": "61d4aa77a87c01e07038c6030d6aca299d0fdc1b", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" -// } // } // ] // } -// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:4] +// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:3] diff --git a/gnovm/tests/files/zrealm3.gno b/gnovm/tests/files/zrealm3.gno index 8e2b9827322..216c0a359b8 100644 --- a/gnovm/tests/files/zrealm3.gno +++ b/gnovm/tests/files/zrealm3.gno @@ -104,6 +104,25 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/test.Node" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "8197b7c5b4f2c7bf9c12b1c614f6b4dc6e7ce8dd", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.TypeType" // }, // "V": { @@ -186,11 +205,11 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.2", +// "Name": "init.3", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -222,7 +241,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -246,27 +265,8 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/test.Node" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "8197b7c5b4f2c7bf9c12b1c614f6b4dc6e7ce8dd", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } +// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:3] // d[a8ada09dee16d791fd406d629fe29bb0ed084a30:4] -// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:5] diff --git a/gnovm/tests/files/zrealm4.gno b/gnovm/tests/files/zrealm4.gno index 8a4bac1fe32..cdcf118117f 100644 --- a/gnovm/tests/files/zrealm4.gno +++ b/gnovm/tests/files/zrealm4.gno @@ -23,7 +23,7 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ // "Fields": [ // { // "T": { @@ -72,9 +72,9 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "ModTime": "5", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "RefCount": "1" // } // } @@ -100,6 +100,25 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "github.com/gnolang/gno/_test/timtadh/data_structures/tree/avl.AvlNode" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "18333b4c83966474356a51accf9da424f905e893", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -109,11 +128,11 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.0", +// "Name": "init.1", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -145,7 +164,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -169,25 +188,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "github.com/gnolang/gno/_test/timtadh/data_structures/tree/avl.AvlNode" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "7b9d58f40430bbbcbafd47eefb7a6dd342477f71", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } diff --git a/gnovm/tests/files/zrealm5.gno b/gnovm/tests/files/zrealm5.gno index 108483a435c..ea57f753cd4 100644 --- a/gnovm/tests/files/zrealm5.gno +++ b/gnovm/tests/files/zrealm5.gno @@ -82,7 +82,7 @@ func main() { // "ObjectInfo": { // "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", // "ModTime": "0", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "RefCount": "1" // }, // "Value": { @@ -97,7 +97,7 @@ func main() { // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ // "Fields": [ // { // "T": { @@ -147,7 +147,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "7c63a8fd451cd7c470c1851f1ead037246422ded", +// "Hash": "9e865965a8bd0e7146511600be9ddca7cc77d7f4", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // }, // "Index": "0", @@ -156,9 +156,9 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "ModTime": "5", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "RefCount": "1" // } // } @@ -184,6 +184,25 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "github.com/gnolang/gno/_test/timtadh/data_structures/tree/avl.AvlNode" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "18333b4c83966474356a51accf9da424f905e893", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -193,11 +212,11 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.0", +// "Name": "init.1", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -229,7 +248,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -253,25 +272,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "github.com/gnolang/gno/_test/timtadh/data_structures/tree/avl.AvlNode" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "7b9d58f40430bbbcbafd47eefb7a6dd342477f71", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } diff --git a/gnovm/tests/files/zrealm6.gno b/gnovm/tests/files/zrealm6.gno index ff5e7e758a1..8b1ee13b3d2 100644 --- a/gnovm/tests/files/zrealm6.gno +++ b/gnovm/tests/files/zrealm6.gno @@ -83,7 +83,7 @@ func main() { // "ObjectInfo": { // "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", // "ModTime": "0", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", // "RefCount": "1" // }, // "Value": { @@ -98,7 +98,7 @@ func main() { // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:7]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:6]={ // "Fields": [ // { // "T": { @@ -148,7 +148,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "81074f5da453299a913435a2ddd05248ee012f8c", +// "Hash": "b03652fa05e2e6a7fae4ab81cb064ccd9c9a284b", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" // }, // "Index": "0", @@ -157,13 +157,13 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", // "ModTime": "7", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "RefCount": "1" // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ // "Fields": [ // { // "T": { @@ -213,8 +213,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "7c63a8fd451cd7c470c1851f1ead037246422ded", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" +// "Hash": "fe757e438a3eea30bab9cbb5c73175deb41089a6", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "Index": "0", // "TV": null @@ -222,9 +222,9 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "ModTime": "7", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "RefCount": "1" // } // } @@ -250,6 +250,25 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "github.com/gnolang/gno/_test/timtadh/data_structures/tree/avl.AvlNode" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "6f03b4417a083297598d2bc73302ea5a72494e75", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -259,11 +278,11 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.0", +// "Name": "init.1", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -295,7 +314,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -319,25 +338,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "github.com/gnolang/gno/_test/timtadh/data_structures/tree/avl.AvlNode" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "ade9fce2a987ef1924040a1d75c0172410c66952", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } diff --git a/gnovm/tests/files/zrealm7.gno b/gnovm/tests/files/zrealm7.gno index e6fd99503be..672c84c71f5 100644 --- a/gnovm/tests/files/zrealm7.gno +++ b/gnovm/tests/files/zrealm7.gno @@ -84,7 +84,7 @@ func main() { // "ObjectInfo": { // "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:10", // "ModTime": "0", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", // "RefCount": "1" // }, // "Value": { @@ -99,7 +99,7 @@ func main() { // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:9]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:8]={ // "Fields": [ // { // "T": { @@ -149,7 +149,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "4f88fcdc73a4a94905e8e4044aa50c2ec7bf2227", +// "Hash": "49982927d2be9af54af4f4e160f0b37ca3c3c4b5", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:10" // }, // "Index": "0", @@ -158,17 +158,17 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", // "RefCount": "1" // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:8]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:7]={ // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", // "RefCount": "1" // }, // "Value": { @@ -178,12 +178,12 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "2c172bbe0183ccc73c59d9acb196c45b0331c39e", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" +// "Hash": "0d5a30919169234b224ef6957311896cafa4498e", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:7]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:6]={ // "Fields": [ // { // "T": { @@ -224,8 +224,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "a4fa9bdf45caf8c6b5be7a3752704423817b3ef2", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" +// "Hash": "4660beda6905ef61bdd2efeb8ac177fd18d8d94e", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "Index": "0", // "TV": null @@ -243,8 +243,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "43f69f24b7827a331921b4af0f667346d186e0c3", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" +// "Hash": "6baba9a759aaab40286df16ac4952784b816aaa6", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" // }, // "Index": "0", // "TV": null @@ -252,13 +252,13 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "RefCount": "1" // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ // "Fields": [ // { // "T": { @@ -307,17 +307,17 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "RefCount": "1" // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:6]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "RefCount": "1" // }, // "Value": { @@ -327,8 +327,8 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "f56fbd9c8db299689cc0cf806fe741b6a6e641e6", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" +// "Hash": "ea6f76b0c3bb596434cc9294a741926ab189757b", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // } // } // } @@ -354,6 +354,25 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "github.com/gnolang/gno/_test/timtadh/data_structures/tree/avl.AvlNode" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "2e2decd306b0bd159f85f13698bbc8240e587f15", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -363,11 +382,11 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.0", +// "Name": "init.1", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -399,7 +418,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -423,25 +442,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "github.com/gnolang/gno/_test/timtadh/data_structures/tree/avl.AvlNode" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "450aef9858564ed4ec1c418f1e8dac828079016b", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } diff --git a/gnovm/tests/files/zrealm8.gno b/gnovm/tests/files/zrealm8.gno index 1452301dac6..2b8e946509c 100644 --- a/gnovm/tests/files/zrealm8.gno +++ b/gnovm/tests/files/zrealm8.gno @@ -23,7 +23,7 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:3]={ // "Fields": [ // { // "N": "AgAAAAAAAAA=", @@ -34,7 +34,7 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "ModTime": "4", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:2", // "RefCount": "1" diff --git a/gnovm/tests/files/zrealm9.gno b/gnovm/tests/files/zrealm9.gno index 306ca02a92a..4ddf67d018e 100644 --- a/gnovm/tests/files/zrealm9.gno +++ b/gnovm/tests/files/zrealm9.gno @@ -23,7 +23,7 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:3]={ // "Fields": [ // { // "T": { @@ -33,7 +33,7 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "ModTime": "4", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:2", // "RefCount": "1" diff --git a/gnovm/tests/files/zrealm_avl0.gno b/gnovm/tests/files/zrealm_avl0.gno index e3f1363e205..4e6e8fe090e 100644 --- a/gnovm/tests/files/zrealm_avl0.gno +++ b/gnovm/tests/files/zrealm_avl0.gno @@ -24,9 +24,9 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:3]={ // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "ModTime": "7", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", // "RefCount": "1" @@ -38,8 +38,8 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "627e8e517e7ae5db0f3b753e2a32b607989198b6", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "Hash": "54bef18ac963dd67ad0634eac6b75a2c4a733b97", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // } // } // } @@ -162,8 +162,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "6da365f0d6cacbcdf53cd5a4b125803cddce08c2", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" +// "Hash": "ce8be5b209e8f322bf1b15c854275064d5645741", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "Index": "0", // "TV": null @@ -210,7 +210,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "ff1a50d8489090af37a2c7766d659f0d717939b5", +// "Hash": "da7583511e84b52e256a57deabe5b390d875407d", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" // } // } @@ -237,6 +237,25 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/p/demo/avl.Node" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "e925bb6bf884ece9620dd27f831dc510b5bc0e55", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -246,11 +265,11 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.0", +// "Name": "init.1", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -282,7 +301,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -306,25 +325,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/p/demo/avl.Node" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "ae86874f9b47fa5e64c30b3e92e9d07f2ec967a4", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } diff --git a/gnovm/tests/files/zrealm_avl1.gno b/gnovm/tests/files/zrealm_avl1.gno index a6d2205e240..fe39965f8e1 100644 --- a/gnovm/tests/files/zrealm_avl1.gno +++ b/gnovm/tests/files/zrealm_avl1.gno @@ -143,8 +143,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "2f3adc5d0f2a3fe0331cfa93572a7abdde14c9aa", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" +// "Hash": "b4d88f4e396525f5dd9b2f6599531cc7a9910fc2", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" // }, // "Index": "0", // "TV": null @@ -191,7 +191,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "fe20a19f956511f274dc77854e9e5468387260f4", +// "Hash": "e64dc27f430466fcf8c0bf21aea298161687ca6d", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:13" // } // } @@ -235,8 +235,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "c89a71bdf045e8bde2059dc9d33839f916e02e5d", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" +// "Hash": "0798652a2645fc6cce744f50fc3b0c8b74644273", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "Index": "0", // "TV": null @@ -254,7 +254,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "90fa67f8c47db4b9b2a60425dff08d5a3385100f", +// "Hash": "45c144eab89443ba7649622f95f7b4afe4f1c2ed", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:12" // }, // "Index": "0", @@ -283,7 +283,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "83e42caaf53070dd95b5f859053eb51ed900bbda", +// "Hash": "f30d9cde2b4b6bb35e422712f4f2a60e3e0d6ebb", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:11" // } // } @@ -310,6 +310,25 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/p/demo/avl.Node" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "38137d7532c4cf5c5d1997db211f4144946d2c94", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:10" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -319,11 +338,11 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.0", +// "Name": "init.1", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -355,7 +374,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -379,27 +398,8 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/p/demo/avl.Node" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "1faa9fa4ba1935121a6d3f0a623772e9d4499b0a", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:10" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } +// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:3] // d[a8ada09dee16d791fd406d629fe29bb0ed084a30:4] -// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:5] diff --git a/gnovm/tests/files/zrealm_avl2.gno b/gnovm/tests/files/zrealm_avl2.gno index a89f0540f47..992d940621f 100644 --- a/gnovm/tests/files/zrealm_avl2.gno +++ b/gnovm/tests/files/zrealm_avl2.gno @@ -23,9 +23,9 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "ModTime": "8", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", // "RefCount": "1" @@ -37,8 +37,8 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "0b5493aa4ea42087780bdfcaebab2c3eec351c15", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" +// "Hash": "ded327e78e9997256c9ab85c465e2f510710448d", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // } // } // } @@ -161,8 +161,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "9fa04d8791e205a6de2eedce81bb4dbd0883cac7", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "Hash": "96b9d59506e2d85fa242e0ce40b6807fe8e2a81f", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "Index": "0", // "TV": null @@ -199,7 +199,7 @@ func main() { // "ObjectInfo": { // "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", // "ModTime": "0", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "RefCount": "1" // }, // "Value": { @@ -209,12 +209,12 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "03d901636a4e56d5bd32a75a7b923c7700c8859a", +// "Hash": "a88ab7fae377ff4435d2b3ac65d7240828eea5f1", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:3]={ // "Fields": [ // { // "T": { @@ -228,7 +228,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "2c8281b6c5a347a3d3aeedb74e61f081060ac050", +// "Hash": "60ef47d94ca065d457df7a505eb69cedb4dba6a3", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" // }, // "Index": "0", @@ -237,7 +237,7 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "ModTime": "6", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:2", // "RefCount": "1" diff --git a/gnovm/tests/files/zrealm_example.gno b/gnovm/tests/files/zrealm_example.gno index 45aeb7c5ddb..86bb4009f56 100644 --- a/gnovm/tests/files/zrealm_example.gno +++ b/gnovm/tests/files/zrealm_example.gno @@ -177,7 +177,7 @@ func main() { // "ObjectInfo": { // "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:7", // "ModTime": "0", -// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:6", +// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5", // "RefCount": "1" // }, // "Value": { @@ -192,7 +192,7 @@ func main() { // } // } // } -// u[1ffd45e074aa1b8df562907c95ad97526b7ca187:6]={ +// u[1ffd45e074aa1b8df562907c95ad97526b7ca187:5]={ // "Fields": [ // { // "T": { @@ -206,7 +206,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "a919087d0eba652876f9a8df18b30ec5ddc8c26e", +// "Hash": "11450bd55c5d9d2085545f469439779a9e97b5ba", // "ObjectID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:7" // }, // "Index": "0", @@ -215,13 +215,13 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:6", +// "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5", // "ModTime": "6", -// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5", +// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:4", // "RefCount": "1" // } // } -// u[1ffd45e074aa1b8df562907c95ad97526b7ca187:5]={ +// u[1ffd45e074aa1b8df562907c95ad97526b7ca187:4]={ // "Fields": [ // { // "T": { @@ -240,8 +240,8 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "dfdeb7ed80c5b030c3a5e9701d00c66203de6f57", -// "ObjectID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:6" +// "Hash": "bfc81d577533a36176c73970a9b2067d60f92dcd", +// "ObjectID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5" // } // }, // { @@ -253,9 +253,9 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5", +// "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:4", // "ModTime": "6", -// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:4", +// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:3", // "RefCount": "1" // } // } diff --git a/gnovm/tests/files/zrealm_natbind0_stdlibs.gno b/gnovm/tests/files/zrealm_natbind0_stdlibs.gno index dedc5b565c3..2118c882229 100644 --- a/gnovm/tests/files/zrealm_natbind0_stdlibs.gno +++ b/gnovm/tests/files/zrealm_natbind0_stdlibs.gno @@ -52,35 +52,55 @@ func main() { // "T": { // "@type": "/gno.FuncType", // "Params": [], -// "Results": [] +// "Results": [ +// { +// "Embedded": false, +// "Name": "", +// "Tag": "", +// "Type": { +// "@type": "/gno.PrimitiveType", +// "value": "16" +// } +// } +// ] // }, // "V": { // "@type": "/gno.FuncValue", // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a7f5397443359ea76c50be82c77f1f893a060925:8" // }, -// "FileName": "main.gno", +// "FileName": "native.gno", // "IsMethod": false, -// "Name": "init.0", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/test", +// "Name": "GetChainID", +// "NativeName": "GetChainID", +// "NativePkg": "std", +// "PkgPath": "std", // "Source": { // "@type": "/gno.RefNode", // "BlockNode": null, // "Location": { -// "File": "main.gno", -// "Line": "10", +// "File": "native.gno", +// "Line": "13", // "Nonce": "0", -// "PkgPath": "gno.land/r/test" +// "PkgPath": "std" // } // }, // "Type": { // "@type": "/gno.FuncType", // "Params": [], -// "Results": [] +// "Results": [ +// { +// "Embedded": false, +// "Name": "", +// "Tag": "", +// "Type": { +// "@type": "/gno.PrimitiveType", +// "value": "16" +// } +// } +// ] // } // } // }, @@ -99,7 +119,7 @@ func main() { // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "main", +// "Name": "init.1", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -108,7 +128,7 @@ func main() { // "BlockNode": null, // "Location": { // "File": "main.gno", -// "Line": "14", +// "Line": "10", // "Nonce": "0", // "PkgPath": "gno.land/r/test" // } @@ -124,55 +144,35 @@ func main() { // "T": { // "@type": "/gno.FuncType", // "Params": [], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ] +// "Results": [] // }, // "V": { // "@type": "/gno.FuncValue", // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a7f5397443359ea76c50be82c77f1f893a060925:8" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, -// "FileName": "native.gno", +// "FileName": "main.gno", // "IsMethod": false, -// "Name": "GetChainID", -// "NativeName": "GetChainID", -// "NativePkg": "std", -// "PkgPath": "std", +// "Name": "main", +// "NativeName": "", +// "NativePkg": "", +// "PkgPath": "gno.land/r/test", // "Source": { // "@type": "/gno.RefNode", // "BlockNode": null, // "Location": { -// "File": "native.gno", -// "Line": "13", +// "File": "main.gno", +// "Line": "14", // "Nonce": "0", -// "PkgPath": "std" +// "PkgPath": "gno.land/r/test" // } // }, // "Type": { // "@type": "/gno.FuncType", // "Params": [], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ] +// "Results": [] // } // } // } diff --git a/gnovm/tests/files/zrealm_std1_stdlibs.gno b/gnovm/tests/files/zrealm_std1_stdlibs.gno index d75a2c60b71..87f75bcb871 100644 --- a/gnovm/tests/files/zrealm_std1_stdlibs.gno +++ b/gnovm/tests/files/zrealm_std1_stdlibs.gno @@ -25,7 +25,7 @@ func main() { } // Output: -// (slice[ref(1ed29bd278d735e20e296bd4afe927501941392f:5)] std.AddressList) +// (slice[ref(1ed29bd278d735e20e296bd4afe927501941392f:4)] std.AddressList) // error: address already exists // has: true // has: false diff --git a/gnovm/tests/files/zrealm_std2_stdlibs.gno b/gnovm/tests/files/zrealm_std2_stdlibs.gno index 810210c6160..1ae1fb4a881 100644 --- a/gnovm/tests/files/zrealm_std2_stdlibs.gno +++ b/gnovm/tests/files/zrealm_std2_stdlibs.gno @@ -26,7 +26,7 @@ func main() { } // Output: -// (slice[ref(1ed29bd278d735e20e296bd4afe927501941392f:5)] std.AddressList) +// (slice[ref(1ed29bd278d735e20e296bd4afe927501941392f:4)] std.AddressList) // error: address already exists // has: true // has: false diff --git a/gnovm/tests/files/zrealm_tests0_stdlibs.gno b/gnovm/tests/files/zrealm_tests0_stdlibs.gno index bfd4ad30a1e..ddd8ad35206 100644 --- a/gnovm/tests/files/zrealm_tests0_stdlibs.gno +++ b/gnovm/tests/files/zrealm_tests0_stdlibs.gno @@ -193,6 +193,159 @@ func main() { // }, // { // "T": { +// "@type": "/gno.SliceType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.Stringer" +// }, +// "Vrd": false +// }, +// "V": { +// "@type": "/gno.SliceValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "ad25f70f66c8c53042afd1377e5ff5ab744bf1a5", +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:16" +// }, +// "Length": "3", +// "Maxcap": "3", +// "Offset": "0" +// } +// }, +// { +// "T": { +// "@type": "/gno.FuncType", +// "Params": [ +// { +// "Embedded": false, +// "Name": "str", +// "Tag": "", +// "Type": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.Stringer" +// } +// } +// ], +// "Results": [] +// }, +// "V": { +// "@type": "/gno.FuncValue", +// "Closure": { +// "@type": "/gno.RefValue", +// "Escaped": true, +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:3" +// }, +// "FileName": "interfaces.gno", +// "IsMethod": false, +// "Name": "AddStringer", +// "NativeName": "", +// "NativePkg": "", +// "PkgPath": "gno.land/r/demo/tests", +// "Source": { +// "@type": "/gno.RefNode", +// "BlockNode": null, +// "Location": { +// "File": "interfaces.gno", +// "Line": "13", +// "Nonce": "0", +// "PkgPath": "gno.land/r/demo/tests" +// } +// }, +// "Type": { +// "@type": "/gno.FuncType", +// "Params": [ +// { +// "Embedded": false, +// "Name": "str", +// "Tag": "", +// "Type": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.Stringer" +// } +// } +// ], +// "Results": [] +// } +// } +// }, +// { +// "T": { +// "@type": "/gno.FuncType", +// "Params": [ +// { +// "Embedded": false, +// "Name": "path", +// "Tag": "", +// "Type": { +// "@type": "/gno.PrimitiveType", +// "value": "16" +// } +// } +// ], +// "Results": [ +// { +// "Embedded": false, +// "Name": "", +// "Tag": "", +// "Type": { +// "@type": "/gno.PrimitiveType", +// "value": "16" +// } +// } +// ] +// }, +// "V": { +// "@type": "/gno.FuncValue", +// "Closure": { +// "@type": "/gno.RefValue", +// "Escaped": true, +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:3" +// }, +// "FileName": "interfaces.gno", +// "IsMethod": false, +// "Name": "Render", +// "NativeName": "", +// "NativePkg": "", +// "PkgPath": "gno.land/r/demo/tests", +// "Source": { +// "@type": "/gno.RefNode", +// "BlockNode": null, +// "Location": { +// "File": "interfaces.gno", +// "Line": "20", +// "Nonce": "0", +// "PkgPath": "gno.land/r/demo/tests" +// } +// }, +// "Type": { +// "@type": "/gno.FuncType", +// "Params": [ +// { +// "Embedded": false, +// "Name": "path", +// "Tag": "", +// "Type": { +// "@type": "/gno.PrimitiveType", +// "value": "16" +// } +// } +// ], +// "Results": [ +// { +// "Embedded": false, +// "Name": "", +// "Tag": "", +// "Type": { +// "@type": "/gno.PrimitiveType", +// "value": "16" +// } +// } +// ] +// } +// } +// }, +// { +// "T": { // "@type": "/gno.TypeType" // }, // "V": { @@ -306,128 +459,21 @@ func main() { // }, // { // "T": { -// "@type": "/gno.TypeType" -// }, -// "V": { -// "@type": "/gno.TypeValue", -// "Type": { -// "@type": "/gno.DeclaredType", -// "Base": { -// "@type": "/gno.StructType", -// "Fields": [ -// { -// "Embedded": false, -// "Name": "neg", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "4" -// } -// }, -// { -// "Embedded": false, -// "Name": "abs", -// "Tag": "", -// "Type": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.nat" -// } -// } -// ], -// "PkgPath": "gno.land/r/demo/tests" -// }, -// "Methods": [], -// "Name": "Int", -// "PkgPath": "gno.land/r/demo/tests" +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.Int" // } -// } -// }, -// { -// "T": { -// "@type": "/gno.TypeType" // }, // "V": { -// "@type": "/gno.TypeValue", -// "Type": { -// "@type": "/gno.DeclaredType", -// "Base": { -// "@type": "/gno.StructType", -// "Fields": [ -// { -// "Embedded": false, -// "Name": "Field", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ], -// "PkgPath": "gno.land/r/demo/tests" -// }, -// "Methods": [ -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "t", -// "Tag": "", -// "Type": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestRealmObject" -// } -// } -// } -// ], -// "Results": [] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": null, -// "FileName": "tests.gno", -// "IsMethod": true, -// "Name": "Modify", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "File": "tests.gno", -// "Line": "56", -// "Nonce": "0", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "t", -// "Tag": "", -// "Type": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestRealmObject" -// } -// } -// } -// ], -// "Results": [] -// } -// } -// } -// ], -// "Name": "TestRealmObject", -// "PkgPath": "gno.land/r/demo/tests" -// } +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "49283398258e135138cd8e234142d5daaa8c661d", +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:4" +// }, +// "Index": "0", +// "TV": null // } // }, // { @@ -443,30 +489,27 @@ func main() { // "Fields": [ // { // "Embedded": false, -// "Name": "Name", +// "Name": "neg", // "Tag": "", // "Type": { // "@type": "/gno.PrimitiveType", -// "value": "16" +// "value": "4" // } // }, // { // "Embedded": false, -// "Name": "Child", +// "Name": "abs", // "Tag": "", // "Type": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.nat" // } // } // ], // "PkgPath": "gno.land/r/demo/tests" // }, // "Methods": [], -// "Name": "TestNode", +// "Name": "Int", // "PkgPath": "gno.land/r/demo/tests" // } // } @@ -474,138 +517,6 @@ func main() { // { // "T": { // "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "str", -// "Tag": "", -// "Type": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Stringer" -// } -// } -// ], -// "Results": [] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:3" -// }, -// "FileName": "interfaces.gno", -// "IsMethod": false, -// "Name": "AddStringer", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "File": "interfaces.gno", -// "Line": "13", -// "Nonce": "0", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "str", -// "Tag": "", -// "Type": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Stringer" -// } -// } -// ], -// "Results": [] -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "path", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:3" -// }, -// "FileName": "interfaces.gno", -// "IsMethod": false, -// "Name": "Render", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "File": "interfaces.gno", -// "Line": "20", -// "Nonce": "0", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "path", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ] -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.FuncType", // "Params": [], // "Results": [ // { @@ -624,7 +535,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:4" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:7" // }, // "FileName": "realm_compositelit.gno", // "IsMethod": false, @@ -661,6 +572,12 @@ func main() { // }, // { // "T": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.nat" +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [ @@ -680,7 +597,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:5" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:8" // }, // "FileName": "realm_method38d.gno", // "IsMethod": false, @@ -736,7 +653,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:5" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:8" // }, // "FileName": "realm_method38d.gno", // "IsMethod": false, @@ -773,6 +690,12 @@ func main() { // }, // { // "T": { +// "@type": "/gno.PrimitiveType", +// "value": "32" +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -782,7 +705,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -828,7 +751,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -884,7 +807,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -921,6 +844,16 @@ func main() { // }, // { // "T": { +// "@type": "/gno.RefType", +// "ID": "std.Address" +// }, +// "V": { +// "@type": "/gno.StringValue", +// "value": "g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm" +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [ @@ -940,7 +873,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -986,7 +919,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1032,7 +965,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1078,7 +1011,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1124,7 +1057,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1161,6 +1094,94 @@ func main() { // }, // { // "T": { +// "@type": "/gno.TypeType" +// }, +// "V": { +// "@type": "/gno.TypeValue", +// "Type": { +// "@type": "/gno.DeclaredType", +// "Base": { +// "@type": "/gno.StructType", +// "Fields": [ +// { +// "Embedded": false, +// "Name": "Field", +// "Tag": "", +// "Type": { +// "@type": "/gno.PrimitiveType", +// "value": "16" +// } +// } +// ], +// "PkgPath": "gno.land/r/demo/tests" +// }, +// "Methods": [ +// { +// "T": { +// "@type": "/gno.FuncType", +// "Params": [ +// { +// "Embedded": false, +// "Name": "t", +// "Tag": "", +// "Type": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.TestRealmObject" +// } +// } +// } +// ], +// "Results": [] +// }, +// "V": { +// "@type": "/gno.FuncValue", +// "Closure": null, +// "FileName": "tests.gno", +// "IsMethod": true, +// "Name": "Modify", +// "NativeName": "", +// "NativePkg": "", +// "PkgPath": "gno.land/r/demo/tests", +// "Source": { +// "@type": "/gno.RefNode", +// "BlockNode": null, +// "Location": { +// "File": "tests.gno", +// "Line": "56", +// "Nonce": "0", +// "PkgPath": "gno.land/r/demo/tests" +// } +// }, +// "Type": { +// "@type": "/gno.FuncType", +// "Params": [ +// { +// "Embedded": false, +// "Name": "t", +// "Tag": "", +// "Type": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.TestRealmObject" +// } +// } +// } +// ], +// "Results": [] +// } +// } +// } +// ], +// "Name": "TestRealmObject", +// "PkgPath": "gno.land/r/demo/tests" +// } +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [ // { @@ -1183,7 +1204,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1223,6 +1244,74 @@ func main() { // }, // { // "T": { +// "@type": "/gno.TypeType" +// }, +// "V": { +// "@type": "/gno.TypeValue", +// "Type": { +// "@type": "/gno.DeclaredType", +// "Base": { +// "@type": "/gno.StructType", +// "Fields": [ +// { +// "Embedded": false, +// "Name": "Name", +// "Tag": "", +// "Type": { +// "@type": "/gno.PrimitiveType", +// "value": "16" +// } +// }, +// { +// "Embedded": false, +// "Name": "Child", +// "Tag": "", +// "Type": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.TestNode" +// } +// } +// } +// ], +// "PkgPath": "gno.land/r/demo/tests" +// }, +// "Methods": [], +// "Name": "TestNode", +// "PkgPath": "gno.land/r/demo/tests" +// } +// } +// }, +// { +// "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.TestNode" +// } +// } +// }, +// { +// "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.TestNode" +// } +// } +// }, +// { +// "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.TestNode" +// } +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -1232,7 +1321,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1268,7 +1357,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1304,7 +1393,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1350,7 +1439,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1406,7 +1495,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1463,7 +1552,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1498,95 +1587,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.SliceType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Stringer" -// }, -// "Vrd": false -// }, -// "V": { -// "@type": "/gno.SliceValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "ad25f70f66c8c53042afd1377e5ff5ab744bf1a5", -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:16" -// }, -// "Length": "3", -// "Maxcap": "3", -// "Offset": "0" -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Int" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "b662d2bfde61831128c908a3d1afff97e05e6227", -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:7" -// }, -// "Index": "0", -// "TV": null -// } -// }, -// { -// "T": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.nat" -// } -// }, -// { -// "T": { -// "@type": "/gno.PrimitiveType", -// "value": "32" -// } -// }, -// { -// "T": { -// "@type": "/gno.RefType", -// "ID": "std.Address" -// }, -// "V": { -// "@type": "/gno.StringValue", -// "value": "g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm" -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } // } // ] // } From f1d7c3eb5f08e077dd54d4b810a364d330332c5e Mon Sep 17 00:00:00 2001 From: jaekwon Date: Sun, 23 Jun 2024 17:44:45 -0700 Subject: [PATCH 06/45] ... --- gnovm/pkg/gnolang/preprocess.go | 29 ++++++----------------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 37026ead4b7..a59296ed7b5 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -424,25 +424,6 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { switch n := n.(type) { // TRANS_ENTER ----------------------- case *AssignStmt: - if n.Op == DEFINE { - // XXX just remove? - for _, lx := range n.Lhs { - ln := lx.(*NameExpr).Name - if ln == blankIdentifier { - // ignore. - } else { - if !isLocallyDefined(last, ln) { - // initial declaration to be re-defined. - // last.Define(ln, anyValue(nil)) - last.Predefine(false, ln) - } else { - // do not redeclare nor re-predefine. - } - } - } - } else { - // nothing defined. - } // TRANS_ENTER ----------------------- case *ImportDecl, *ValueDecl, *TypeDecl, *FuncDecl: @@ -3149,11 +3130,7 @@ func predefineNow2(store Store, last BlockNode, d Decl, m map[Name]struct{}) (De // NOTE: unlike the *ValueDecl case, this case doesn't // preprocess d itself (only d.Type). if cd.IsMethod { - // XXX probably remove. if cd.Recv.Name == "" || cd.Recv.Name == blankIdentifier { - // create a hidden var with leading dot. - // NOTE: document somewhere. - // cd.Recv.Name = ".recv" panic("cd.Recv.Name should have been set in initStaticBlocks") } cd.Recv = *Preprocess(store, last, &cd.Recv).(*FieldTypeExpr) @@ -3207,6 +3184,9 @@ func predefineNow2(store Store, last BlockNode, d Decl, m map[Name]struct{}) (De dt.Name, cd.Name)) } } else { + if cd.Name == "init" { + panic("cd.Name 'init' should have been appended with a number in initStaticBlocks") + } ftv := pkg.GetValueRef(store, cd.Name, true) ft := ftv.T.(*FuncType) cd.Type = *Preprocess(store, last, &cd.Type).(*FuncTypeExpr) @@ -3407,6 +3387,9 @@ func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { return } } else { + if d.Name == "init" { + panic("cd.Name 'init' should have been appended with a number in initStaticBlocks") + } // define package-level function. ft := &FuncType{} pkg := skipFile(last).(*PackageNode) From 492f103180caf747ae1c6709442ff64bcfac2e0d Mon Sep 17 00:00:00 2001 From: jaekwon Date: Sun, 23 Jun 2024 18:01:50 -0700 Subject: [PATCH 07/45] ... --- gnovm/pkg/gnolang/preprocess.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index a59296ed7b5..1665bf10b5a 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -450,20 +450,12 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { for i := range n.Params { p := &n.Params[i] if p.Name == "" || p.Name == blankIdentifier { - // create a hidden var with leading dot. - // NOTE: document somewhere. - // pn := fmt.Sprintf(".arg_%d", i) - // p.Name = Name(pn) panic("arg name should have been set in initStaticBlocks") } } for i := range n.Results { r := &n.Results[i] if r.Name == blankIdentifier { - // create a hidden var with leading dot. - // NOTE: document somewhere. - // rn := fmt.Sprintf(".res_%d", i) - // r.Name = Name(rn) panic("result name should have been set in initStaticBlock") } } From 31bbcb6d0ba79cd6d1478cde1219d71658595010 Mon Sep 17 00:00:00 2001 From: jaekwon Date: Tue, 25 Jun 2024 18:01:19 -0700 Subject: [PATCH 08/45] remove predefine call; update comments --- gnovm/pkg/gnolang/preprocess.go | 14 +++++++------- gnovm/pkg/gnolang/preprocess_test.go | 2 ++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 1665bf10b5a..edef039d137 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -19,10 +19,16 @@ const ( // phase. func PredefineFileSet(store Store, pn *PackageNode, fset *FileSet) { // First, initialize all file nodes and connect to package node. + // This will also reserve names on BlockNode.StaticBlock by + // calling StaticBlock.Predefine(). for _, fn := range fset.Files { SetNodeLocations(pn.PkgPath, string(fn.Name), fn) initStaticBlocks(store, pn, fn) } + // NOTE: The calls to .Predefine() above is more of a name reservation, + // and what comes later in PredefineFileset() below is a second type of + // pre-defining mixed with defining, where recursive types are defined + // first and then filled out later. // NOTE: much of what follows is duplicated for a single *FileNode // in the main Preprocess translation function. Keep synced. @@ -109,11 +115,6 @@ func initStaticBlocks(store Store, ctx BlockNode, bn BlockNode) { // iterate over all nodes recursively. _ = Transcribe(bn, func(ns []Node, ftype TransField, index int, n Node, stage TransStage) (Node, TransCtrl) { - // if already preprocessed, skip it. - if n.GetAttribute(ATTR_PREPROCESSED) == true { - return n, TRANS_SKIP - } - defer func() { if r := recover(); r != nil { // before re-throwing the error, append location information to message. @@ -320,6 +321,7 @@ func initStaticBlocks(store Store, ctx BlockNode, bn BlockNode) { default: panic("should not happen") } + return n, TRANS_CONTINUE // ---------------------------------------- case TRANS_LEAVE: @@ -3267,13 +3269,11 @@ func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { return } } - last2 := skipFile(last) for i := 0; i < len(d.NameExprs); i++ { nx := &d.NameExprs[i] if nx.Name == blankIdentifier { nx.Path.Name = blankIdentifier } else { - last2.Predefine(d.Const, nx.Name) nx.Path = last.GetPathForName(store, nx.Name) } } diff --git a/gnovm/pkg/gnolang/preprocess_test.go b/gnovm/pkg/gnolang/preprocess_test.go index 49e6d53fd3d..73e1318b062 100644 --- a/gnovm/pkg/gnolang/preprocess_test.go +++ b/gnovm/pkg/gnolang/preprocess_test.go @@ -31,6 +31,7 @@ func main() { err := recover() assert.Contains(t, fmt.Sprint(err), "incompatible operands in binary expression") }() + initStaticBlocks(store, pn, n) Preprocess(store, pn, n) } @@ -56,5 +57,6 @@ func main() { err := recover() assert.Contains(t, fmt.Sprint(err), "incompatible operands in binary expression") }() + initStaticBlocks(store, pn, n) Preprocess(store, pn, n) } From 86f03c460e0e77e7722409f34b363a86495cb810 Mon Sep 17 00:00:00 2001 From: jaekwon Date: Wed, 3 Jul 2024 13:36:09 -0700 Subject: [PATCH 09/45] fix linter --- gnovm/pkg/gnolang/preprocess.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index edef039d137..c24a56d0134 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -107,7 +107,6 @@ func PredefineFileSet(store Store, pn *PackageNode, fset *FileSet) { // Initialize static block info. func initStaticBlocks(store Store, ctx BlockNode, bn BlockNode) { - // create stack of BlockNodes. var stack []BlockNode = make([]BlockNode, 0, 32) var last BlockNode = ctx @@ -2110,7 +2109,7 @@ func Preprocess(store Store, ctx BlockNode, n Node) Node { } } // evaluate typed value for static definition. - for i, _ := range n.NameExprs { + for i := range n.NameExprs { // consider value if specified. if len(n.Values) > 0 { vx := n.Values[i] From b41627d6fcea858d7b3f9bad299585e0fc8ecfaf Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Sun, 7 Jul 2024 00:51:55 +0900 Subject: [PATCH 10/45] fix example --- examples/gno.land/p/demo/avl/z_0_filetest.gno | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/gno.land/p/demo/avl/z_0_filetest.gno b/examples/gno.land/p/demo/avl/z_0_filetest.gno index 46903be035c..993fe2f7d7b 100644 --- a/examples/gno.land/p/demo/avl/z_0_filetest.gno +++ b/examples/gno.land/p/demo/avl/z_0_filetest.gno @@ -250,7 +250,7 @@ func main() { // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.0", +// "Name": "init.1", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", From 32d7aa080b34498d1bf416a96fb7a6820b154e97 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Sun, 7 Jul 2024 01:07:28 +0900 Subject: [PATCH 11/45] golden --- gnovm/tests/files/heap_item_value_init.gno | 8 +- gnovm/tests/files/import6.gno | 2 +- gnovm/tests/files/zrealm2.gno | 6 +- gnovm/tests/files/zrealm3.gno | 6 +- gnovm/tests/files/zrealm4.gno | 14 +- gnovm/tests/files/zrealm5.gno | 18 +- gnovm/tests/files/zrealm6.gno | 28 +- gnovm/tests/files/zrealm7.gno | 58 ++-- gnovm/tests/files/zrealm_avl0.gno | 20 +- gnovm/tests/files/zrealm_avl1.gno | 22 +- gnovm/tests/files/zrealm_avl2.gno | 16 +- gnovm/tests/files/zrealm_example.gno | 20 +- gnovm/tests/files/zrealm_natbind0_stdlibs.gno | 14 +- gnovm/tests/files/zrealm_std1_stdlibs.gno | 2 +- gnovm/tests/files/zrealm_std2_stdlibs.gno | 2 +- gnovm/tests/files/zrealm_tests0_stdlibs.gno | 324 +----------------- 16 files changed, 133 insertions(+), 427 deletions(-) diff --git a/gnovm/tests/files/heap_item_value_init.gno b/gnovm/tests/files/heap_item_value_init.gno index 0cd323dcd97..72f065326f1 100644 --- a/gnovm/tests/files/heap_item_value_init.gno +++ b/gnovm/tests/files/heap_item_value_init.gno @@ -84,7 +84,7 @@ func main() { // "Base": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "Index": "0", // "TV": null @@ -103,7 +103,7 @@ func main() { // "Base": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "Index": "0", // "TV": null @@ -120,7 +120,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -156,7 +156,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, diff --git a/gnovm/tests/files/import6.gno b/gnovm/tests/files/import6.gno index f3cd9930eb5..6909e1ad923 100644 --- a/gnovm/tests/files/import6.gno +++ b/gnovm/tests/files/import6.gno @@ -7,4 +7,4 @@ func main() { } // Error: -// github.com/gnolang/gno/_test/c2/c2.gno:3:8: import cycle detected: "github.com/gnolang/gno/_test/c1" (through [github.com/gnolang/gno/_test/c1 github.com/gnolang/gno/_test/c2]) +// github.com/gnolang/gno/_test/c2/c2.gno:3:1: import cycle detected: "github.com/gnolang/gno/_test/c1" (through [github.com/gnolang/gno/_test/c1 github.com/gnolang/gno/_test/c2]) diff --git a/gnovm/tests/files/zrealm2.gno b/gnovm/tests/files/zrealm2.gno index 693ae20ccff..00757e46867 100644 --- a/gnovm/tests/files/zrealm2.gno +++ b/gnovm/tests/files/zrealm2.gno @@ -179,7 +179,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -215,7 +215,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -242,4 +242,4 @@ func main() { // } // ] // } -// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:3] +// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:4] diff --git a/gnovm/tests/files/zrealm3.gno b/gnovm/tests/files/zrealm3.gno index b36a6484b1a..a519c67c495 100644 --- a/gnovm/tests/files/zrealm3.gno +++ b/gnovm/tests/files/zrealm3.gno @@ -205,7 +205,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -241,7 +241,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -268,5 +268,5 @@ func main() { // } // ] // } -// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:3] // d[a8ada09dee16d791fd406d629fe29bb0ed084a30:4] +// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:5] diff --git a/gnovm/tests/files/zrealm4.gno b/gnovm/tests/files/zrealm4.gno index fc921bb889e..551b3dff095 100644 --- a/gnovm/tests/files/zrealm4.gno +++ b/gnovm/tests/files/zrealm4.gno @@ -23,7 +23,7 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ // "Fields": [ // { // "T": { @@ -72,9 +72,9 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "ModTime": "5", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "RefCount": "1" // } // } @@ -110,8 +110,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "18333b4c83966474356a51accf9da424f905e893", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "Hash": "7b9d58f40430bbbcbafd47eefb7a6dd342477f71", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "Index": "0", // "TV": null @@ -128,7 +128,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -164,7 +164,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, diff --git a/gnovm/tests/files/zrealm5.gno b/gnovm/tests/files/zrealm5.gno index a88a6fe06d6..8062d1bde6d 100644 --- a/gnovm/tests/files/zrealm5.gno +++ b/gnovm/tests/files/zrealm5.gno @@ -82,7 +82,7 @@ func main() { // "ObjectInfo": { // "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", // "ModTime": "0", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "RefCount": "1" // }, // "Value": { @@ -97,7 +97,7 @@ func main() { // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ // "Fields": [ // { // "T": { @@ -147,7 +147,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "9e865965a8bd0e7146511600be9ddca7cc77d7f4", +// "Hash": "7c63a8fd451cd7c470c1851f1ead037246422ded", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // }, // "Index": "0", @@ -156,9 +156,9 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "ModTime": "5", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "RefCount": "1" // } // } @@ -194,8 +194,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "18333b4c83966474356a51accf9da424f905e893", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "Hash": "7b9d58f40430bbbcbafd47eefb7a6dd342477f71", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "Index": "0", // "TV": null @@ -212,7 +212,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -248,7 +248,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, diff --git a/gnovm/tests/files/zrealm6.gno b/gnovm/tests/files/zrealm6.gno index e6ba41b6927..9fb36c64a14 100644 --- a/gnovm/tests/files/zrealm6.gno +++ b/gnovm/tests/files/zrealm6.gno @@ -83,7 +83,7 @@ func main() { // "ObjectInfo": { // "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", // "ModTime": "0", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", // "RefCount": "1" // }, // "Value": { @@ -98,7 +98,7 @@ func main() { // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:6]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:7]={ // "Fields": [ // { // "T": { @@ -148,7 +148,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "b03652fa05e2e6a7fae4ab81cb064ccd9c9a284b", +// "Hash": "81074f5da453299a913435a2ddd05248ee012f8c", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" // }, // "Index": "0", @@ -157,13 +157,13 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", // "ModTime": "7", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", // "RefCount": "1" // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ // "Fields": [ // { // "T": { @@ -213,8 +213,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "fe757e438a3eea30bab9cbb5c73175deb41089a6", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "Hash": "7c63a8fd451cd7c470c1851f1ead037246422ded", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // }, // "Index": "0", // "TV": null @@ -222,9 +222,9 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "ModTime": "7", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "RefCount": "1" // } // } @@ -260,8 +260,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "6f03b4417a083297598d2bc73302ea5a72494e75", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "Hash": "ade9fce2a987ef1924040a1d75c0172410c66952", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "Index": "0", // "TV": null @@ -278,7 +278,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -314,7 +314,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, diff --git a/gnovm/tests/files/zrealm7.gno b/gnovm/tests/files/zrealm7.gno index 3a2163e3271..7e19851cd13 100644 --- a/gnovm/tests/files/zrealm7.gno +++ b/gnovm/tests/files/zrealm7.gno @@ -84,7 +84,7 @@ func main() { // "ObjectInfo": { // "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:10", // "ModTime": "0", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9", // "RefCount": "1" // }, // "Value": { @@ -99,7 +99,7 @@ func main() { // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:8]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:9]={ // "Fields": [ // { // "T": { @@ -149,7 +149,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "49982927d2be9af54af4f4e160f0b37ca3c3c4b5", +// "Hash": "4f88fcdc73a4a94905e8e4044aa50c2ec7bf2227", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:10" // }, // "Index": "0", @@ -158,17 +158,17 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", // "RefCount": "1" // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:7]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:8]={ // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", // "RefCount": "1" // }, // "Value": { @@ -178,12 +178,12 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "0d5a30919169234b224ef6957311896cafa4498e", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" +// "Hash": "2c172bbe0183ccc73c59d9acb196c45b0331c39e", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:6]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:7]={ // "Fields": [ // { // "T": { @@ -224,8 +224,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "4660beda6905ef61bdd2efeb8ac177fd18d8d94e", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "Hash": "a4fa9bdf45caf8c6b5be7a3752704423817b3ef2", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "Index": "0", // "TV": null @@ -243,8 +243,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "6baba9a759aaab40286df16ac4952784b816aaa6", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" +// "Hash": "43f69f24b7827a331921b4af0f667346d186e0c3", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" // }, // "Index": "0", // "TV": null @@ -252,13 +252,13 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", // "RefCount": "1" // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ // "Fields": [ // { // "T": { @@ -307,17 +307,17 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "RefCount": "1" // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:6]={ // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6", // "ModTime": "9", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "RefCount": "1" // }, // "Value": { @@ -327,8 +327,8 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "ea6f76b0c3bb596434cc9294a741926ab189757b", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" +// "Hash": "f56fbd9c8db299689cc0cf806fe741b6a6e641e6", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" // } // } // } @@ -364,8 +364,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "2e2decd306b0bd159f85f13698bbc8240e587f15", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "Hash": "450aef9858564ed4ec1c418f1e8dac828079016b", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // }, // "Index": "0", // "TV": null @@ -382,7 +382,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -418,7 +418,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, diff --git a/gnovm/tests/files/zrealm_avl0.gno b/gnovm/tests/files/zrealm_avl0.gno index d9e7608181a..aff79ffabc6 100644 --- a/gnovm/tests/files/zrealm_avl0.gno +++ b/gnovm/tests/files/zrealm_avl0.gno @@ -24,9 +24,9 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:3]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", // "ModTime": "7", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7", // "RefCount": "1" @@ -38,8 +38,8 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "54bef18ac963dd67ad0634eac6b75a2c4a733b97", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" +// "Hash": "627e8e517e7ae5db0f3b753e2a32b607989198b6", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // } // } // } @@ -162,8 +162,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "ce8be5b209e8f322bf1b15c854275064d5645741", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" +// "Hash": "6da365f0d6cacbcdf53cd5a4b125803cddce08c2", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" // }, // "Index": "0", // "TV": null @@ -210,7 +210,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "da7583511e84b52e256a57deabe5b390d875407d", +// "Hash": "ff1a50d8489090af37a2c7766d659f0d717939b5", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" // } // } @@ -247,7 +247,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "e925bb6bf884ece9620dd27f831dc510b5bc0e55", +// "Hash": "ae86874f9b47fa5e64c30b3e92e9d07f2ec967a4", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // }, // "Index": "0", @@ -265,7 +265,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -301,7 +301,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, diff --git a/gnovm/tests/files/zrealm_avl1.gno b/gnovm/tests/files/zrealm_avl1.gno index 7cbb814e2b1..3b6d40d5ecd 100644 --- a/gnovm/tests/files/zrealm_avl1.gno +++ b/gnovm/tests/files/zrealm_avl1.gno @@ -143,8 +143,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "b4d88f4e396525f5dd9b2f6599531cc7a9910fc2", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" +// "Hash": "2f3adc5d0f2a3fe0331cfa93572a7abdde14c9aa", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" // }, // "Index": "0", // "TV": null @@ -191,7 +191,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "e64dc27f430466fcf8c0bf21aea298161687ca6d", +// "Hash": "fe20a19f956511f274dc77854e9e5468387260f4", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:13" // } // } @@ -235,8 +235,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "0798652a2645fc6cce744f50fc3b0c8b74644273", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "Hash": "c89a71bdf045e8bde2059dc9d33839f916e02e5d", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // }, // "Index": "0", // "TV": null @@ -254,7 +254,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "45c144eab89443ba7649622f95f7b4afe4f1c2ed", +// "Hash": "90fa67f8c47db4b9b2a60425dff08d5a3385100f", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:12" // }, // "Index": "0", @@ -283,7 +283,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "f30d9cde2b4b6bb35e422712f4f2a60e3e0d6ebb", +// "Hash": "83e42caaf53070dd95b5f859053eb51ed900bbda", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:11" // } // } @@ -320,7 +320,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "38137d7532c4cf5c5d1997db211f4144946d2c94", +// "Hash": "1faa9fa4ba1935121a6d3f0a623772e9d4499b0a", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:10" // }, // "Index": "0", @@ -338,7 +338,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -374,7 +374,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:9" +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3" // }, // "FileName": "main.gno", // "IsMethod": false, @@ -401,5 +401,5 @@ func main() { // } // ] // } -// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:3] // d[a8ada09dee16d791fd406d629fe29bb0ed084a30:4] +// d[a8ada09dee16d791fd406d629fe29bb0ed084a30:5] diff --git a/gnovm/tests/files/zrealm_avl2.gno b/gnovm/tests/files/zrealm_avl2.gno index 992d940621f..b861413feca 100644 --- a/gnovm/tests/files/zrealm_avl2.gno +++ b/gnovm/tests/files/zrealm_avl2.gno @@ -23,9 +23,9 @@ func main() { // Realm: // switchrealm["gno.land/r/test"] -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:5]={ // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5", // "ModTime": "8", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8", // "RefCount": "1" @@ -37,8 +37,8 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "ded327e78e9997256c9ab85c465e2f510710448d", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" +// "Hash": "0b5493aa4ea42087780bdfcaebab2c3eec351c15", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" // } // } // } @@ -161,8 +161,8 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "96b9d59506e2d85fa242e0ce40b6807fe8e2a81f", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4" +// "Hash": "9fa04d8791e205a6de2eedce81bb4dbd0883cac7", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:5" // }, // "Index": "0", // "TV": null @@ -209,7 +209,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "a88ab7fae377ff4435d2b3ac65d7240828eea5f1", +// "Hash": "03d901636a4e56d5bd32a75a7b923c7700c8859a", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:8" // } // } @@ -228,7 +228,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "60ef47d94ca065d457df7a505eb69cedb4dba6a3", +// "Hash": "953a28a33bf1bae93eb1fcb4d1b348ccabcbaabd", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:7" // }, // "Index": "0", diff --git a/gnovm/tests/files/zrealm_example.gno b/gnovm/tests/files/zrealm_example.gno index 86bb4009f56..45aeb7c5ddb 100644 --- a/gnovm/tests/files/zrealm_example.gno +++ b/gnovm/tests/files/zrealm_example.gno @@ -177,7 +177,7 @@ func main() { // "ObjectInfo": { // "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:7", // "ModTime": "0", -// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5", +// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:6", // "RefCount": "1" // }, // "Value": { @@ -192,7 +192,7 @@ func main() { // } // } // } -// u[1ffd45e074aa1b8df562907c95ad97526b7ca187:5]={ +// u[1ffd45e074aa1b8df562907c95ad97526b7ca187:6]={ // "Fields": [ // { // "T": { @@ -206,7 +206,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "11450bd55c5d9d2085545f469439779a9e97b5ba", +// "Hash": "a919087d0eba652876f9a8df18b30ec5ddc8c26e", // "ObjectID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:7" // }, // "Index": "0", @@ -215,13 +215,13 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5", +// "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:6", // "ModTime": "6", -// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:4", +// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5", // "RefCount": "1" // } // } -// u[1ffd45e074aa1b8df562907c95ad97526b7ca187:4]={ +// u[1ffd45e074aa1b8df562907c95ad97526b7ca187:5]={ // "Fields": [ // { // "T": { @@ -240,8 +240,8 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "bfc81d577533a36176c73970a9b2067d60f92dcd", -// "ObjectID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5" +// "Hash": "dfdeb7ed80c5b030c3a5e9701d00c66203de6f57", +// "ObjectID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:6" // } // }, // { @@ -253,9 +253,9 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:4", +// "ID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:5", // "ModTime": "6", -// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:3", +// "OwnerID": "1ffd45e074aa1b8df562907c95ad97526b7ca187:4", // "RefCount": "1" // } // } diff --git a/gnovm/tests/files/zrealm_natbind0_stdlibs.gno b/gnovm/tests/files/zrealm_natbind0_stdlibs.gno index e64231320c1..c852f4a09f7 100644 --- a/gnovm/tests/files/zrealm_natbind0_stdlibs.gno +++ b/gnovm/tests/files/zrealm_natbind0_stdlibs.gno @@ -82,9 +82,9 @@ func main() { // "BlockNode": null, // "Location": { // "Column": "1", -// "File": "main.gno", -// "Line": "10", -// "PkgPath": "gno.land/r/test" +// "File": "native.gno", +// "Line": "13", +// "PkgPath": "std" // } // }, // "Type": { @@ -129,7 +129,7 @@ func main() { // "Location": { // "Column": "1", // "File": "main.gno", -// "Line": "14", +// "Line": "10", // "PkgPath": "gno.land/r/test" // } // }, @@ -164,9 +164,9 @@ func main() { // "BlockNode": null, // "Location": { // "Column": "1", -// "File": "native.gno", -// "Line": "13", -// "PkgPath": "std" +// "File": "main.gno", +// "Line": "14", +// "PkgPath": "gno.land/r/test" // } // }, // "Type": { diff --git a/gnovm/tests/files/zrealm_std1_stdlibs.gno b/gnovm/tests/files/zrealm_std1_stdlibs.gno index 87f75bcb871..d75a2c60b71 100644 --- a/gnovm/tests/files/zrealm_std1_stdlibs.gno +++ b/gnovm/tests/files/zrealm_std1_stdlibs.gno @@ -25,7 +25,7 @@ func main() { } // Output: -// (slice[ref(1ed29bd278d735e20e296bd4afe927501941392f:4)] std.AddressList) +// (slice[ref(1ed29bd278d735e20e296bd4afe927501941392f:5)] std.AddressList) // error: address already exists // has: true // has: false diff --git a/gnovm/tests/files/zrealm_std2_stdlibs.gno b/gnovm/tests/files/zrealm_std2_stdlibs.gno index 1ae1fb4a881..810210c6160 100644 --- a/gnovm/tests/files/zrealm_std2_stdlibs.gno +++ b/gnovm/tests/files/zrealm_std2_stdlibs.gno @@ -26,7 +26,7 @@ func main() { } // Output: -// (slice[ref(1ed29bd278d735e20e296bd4afe927501941392f:4)] std.AddressList) +// (slice[ref(1ed29bd278d735e20e296bd4afe927501941392f:5)] std.AddressList) // error: address already exists // has: true // has: false diff --git a/gnovm/tests/files/zrealm_tests0_stdlibs.gno b/gnovm/tests/files/zrealm_tests0_stdlibs.gno index e4e4f9f2532..d11701505e5 100644 --- a/gnovm/tests/files/zrealm_tests0_stdlibs.gno +++ b/gnovm/tests/files/zrealm_tests0_stdlibs.gno @@ -245,9 +245,9 @@ func main() { // "@type": "/gno.RefNode", // "BlockNode": null, // "Location": { +// "Column": "1", // "File": "interfaces.gno", // "Line": "13", -// "Nonce": "0", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -311,9 +311,9 @@ func main() { // "@type": "/gno.RefNode", // "BlockNode": null, // "Location": { +// "Column": "1", // "File": "interfaces.gno", // "Line": "20", -// "Nonce": "0", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -466,87 +466,14 @@ func main() { // } // }, // "V": { -// "@type": "/gno.TypeValue", -// "Type": { -// "@type": "/gno.DeclaredType", -// "Base": { -// "@type": "/gno.StructType", -// "Fields": [ -// { -// "Embedded": false, -// "Name": "Field", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ], -// "PkgPath": "gno.land/r/demo/tests" -// }, -// "Methods": [ -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "t", -// "Tag": "", -// "Type": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestRealmObject" -// } -// } -// } -// ], -// "Results": [] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": null, -// "FileName": "tests.gno", -// "IsMethod": true, -// "Name": "Modify", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "Column": "1", -// "File": "tests.gno", -// "Line": "57", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "t", -// "Tag": "", -// "Type": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestRealmObject" -// } -// } -// } -// ], -// "Results": [] -// } -// } -// } -// ], -// "Name": "TestRealmObject", -// "PkgPath": "gno.land/r/demo/tests" -// } +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "49283398258e135138cd8e234142d5daaa8c661d", +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:4" +// }, +// "Index": "0", +// "TV": null // } // }, // { @@ -590,138 +517,6 @@ func main() { // { // "T": { // "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "str", -// "Tag": "", -// "Type": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Stringer" -// } -// } -// ], -// "Results": [] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:3" -// }, -// "FileName": "interfaces.gno", -// "IsMethod": false, -// "Name": "AddStringer", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "Column": "1", -// "File": "interfaces.gno", -// "Line": "13", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "str", -// "Tag": "", -// "Type": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Stringer" -// } -// } -// ], -// "Results": [] -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "path", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:3" -// }, -// "FileName": "interfaces.gno", -// "IsMethod": false, -// "Name": "Render", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "Column": "1", -// "File": "interfaces.gno", -// "Line": "20", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "path", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ] -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.FuncType", // "Params": [], // "Results": [ // { @@ -1353,9 +1148,9 @@ func main() { // "@type": "/gno.RefNode", // "BlockNode": null, // "Location": { +// "Column": "1", // "File": "tests.gno", -// "Line": "56", -// "Nonce": "0", +// "Line": "57", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1814,7 +1609,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1870,7 +1665,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1926,7 +1721,7 @@ func main() { // "Closure": { // "@type": "/gno.RefValue", // "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:6" +// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" // }, // "FileName": "tests.gno", // "IsMethod": false, @@ -1960,95 +1755,6 @@ func main() { // ] // } // } -// }, -// { -// "T": { -// "@type": "/gno.SliceType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Stringer" -// }, -// "Vrd": false -// }, -// "V": { -// "@type": "/gno.SliceValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "ad25f70f66c8c53042afd1377e5ff5ab744bf1a5", -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:16" -// }, -// "Length": "3", -// "Maxcap": "3", -// "Offset": "0" -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Int" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "b662d2bfde61831128c908a3d1afff97e05e6227", -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:7" -// }, -// "Index": "0", -// "TV": null -// } -// }, -// { -// "T": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.nat" -// } -// }, -// { -// "T": { -// "@type": "/gno.PrimitiveType", -// "value": "32" -// } -// }, -// { -// "T": { -// "@type": "/gno.RefType", -// "ID": "std.Address" -// }, -// "V": { -// "@type": "/gno.StringValue", -// "value": "g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm" -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } // } // ] // } From 92db816e66fde4609994e9b0b53ed73461672375 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Sun, 7 Jul 2024 01:26:39 +0900 Subject: [PATCH 12/45] golden --- gnovm/tests/files/zrealm_tests0_stdlibs.gno | 200 ++------------------ 1 file changed, 16 insertions(+), 184 deletions(-) diff --git a/gnovm/tests/files/zrealm_tests0_stdlibs.gno b/gnovm/tests/files/zrealm_tests0_stdlibs.gno index d11701505e5..8b19b56bd07 100644 --- a/gnovm/tests/files/zrealm_tests0_stdlibs.gno +++ b/gnovm/tests/files/zrealm_tests0_stdlibs.gno @@ -719,7 +719,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "12", +// "Line": "11", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -765,7 +765,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "16", +// "Line": "15", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -821,7 +821,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "20", +// "Line": "19", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -887,7 +887,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "26", +// "Line": "25", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -933,7 +933,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "30", +// "Line": "29", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -979,7 +979,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "34", +// "Line": "33", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1025,7 +1025,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "38", +// "Line": "37", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1071,7 +1071,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "42", +// "Line": "41", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1150,7 +1150,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "57", +// "Line": "56", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1218,7 +1218,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "53", +// "Line": "52", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1335,7 +1335,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "75", +// "Line": "74", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1371,7 +1371,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "80", +// "Line": "79", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1407,7 +1407,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "88", +// "Line": "87", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1453,7 +1453,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "92", +// "Line": "91", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1509,7 +1509,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "96", +// "Line": "95", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1566,7 +1566,7 @@ func main() { // "Location": { // "Column": "1", // "File": "tests.gno", -// "Line": "100", +// "Line": "99", // "PkgPath": "gno.land/r/demo/tests" // } // }, @@ -1587,174 +1587,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "4" -// } -// } -// ] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" -// }, -// "FileName": "tests.gno", -// "IsMethod": false, -// "Name": "IsCallerSubPath", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "Column": "1", -// "File": "tests.gno", -// "Line": "104", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "4" -// } -// } -// ] -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "4" -// } -// } -// ] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" -// }, -// "FileName": "tests.gno", -// "IsMethod": false, -// "Name": "IsCallerParentPath", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "Column": "1", -// "File": "tests.gno", -// "Line": "108", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "4" -// } -// } -// ] -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "4" -// } -// } -// ] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:9" -// }, -// "FileName": "tests.gno", -// "IsMethod": false, -// "Name": "HasCallerSameNamespace", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "Column": "1", -// "File": "tests.gno", -// "Line": "112", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "4" -// } -// } -// ] -// } -// } // } // ] // } From 53cbced5b31abde34b22d24015cccbb1398db3b2 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Sun, 7 Jul 2024 02:14:37 +0900 Subject: [PATCH 13/45] golden --- gnovm/tests/files/zrealm_tests0_stdlibs.gno | 338 +------------------- 1 file changed, 4 insertions(+), 334 deletions(-) diff --git a/gnovm/tests/files/zrealm_tests0_stdlibs.gno b/gnovm/tests/files/zrealm_tests0_stdlibs.gno index 36e086edf3d..8b19b56bd07 100644 --- a/gnovm/tests/files/zrealm_tests0_stdlibs.gno +++ b/gnovm/tests/files/zrealm_tests0_stdlibs.gno @@ -459,252 +459,11 @@ func main() { // }, // { // "T": { -// "@type": "/gno.TypeType" -// }, -// "V": { -// "@type": "/gno.TypeValue", -// "Type": { -// "@type": "/gno.DeclaredType", -// "Base": { -// "@type": "/gno.StructType", -// "Fields": [ -// { -// "Embedded": false, -// "Name": "neg", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "4" -// } -// }, -// { -// "Embedded": false, -// "Name": "abs", -// "Tag": "", -// "Type": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.nat" -// } -// } -// ], -// "PkgPath": "gno.land/r/demo/tests" -// }, -// "Methods": [], -// "Name": "Int", -// "PkgPath": "gno.land/r/demo/tests" -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.TypeType" -// }, -// "V": { -// "@type": "/gno.TypeValue", -// "Type": { -// "@type": "/gno.DeclaredType", -// "Base": { -// "@type": "/gno.StructType", -// "Fields": [ -// { -// "Embedded": false, -// "Name": "Field", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ], -// "PkgPath": "gno.land/r/demo/tests" -// }, -// "Methods": [ -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "t", -// "Tag": "", -// "Type": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestRealmObject" -// } -// } -// } -// ], -// "Results": [] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": null, -// "FileName": "tests.gno", -// "IsMethod": true, -// "Name": "Modify", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "Column": "1", -// "File": "tests.gno", -// "Line": "56", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "t", -// "Tag": "", -// "Type": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestRealmObject" -// } -// } -// } -// ], -// "Results": [] -// } -// } -// } -// ], -// "Name": "TestRealmObject", -// "PkgPath": "gno.land/r/demo/tests" -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.TypeType" -// }, -// "V": { -// "@type": "/gno.TypeValue", -// "Type": { -// "@type": "/gno.DeclaredType", -// "Base": { -// "@type": "/gno.StructType", -// "Fields": [ -// { -// "Embedded": false, -// "Name": "Name", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// }, -// { -// "Embedded": false, -// "Name": "Child", -// "Tag": "", -// "Type": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } -// } -// ], -// "PkgPath": "gno.land/r/demo/tests" -// }, -// "Methods": [], -// "Name": "TestNode", -// "PkgPath": "gno.land/r/demo/tests" -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "str", -// "Tag": "", -// "Type": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Stringer" -// } -// } -// ], -// "Results": [] -// }, -// "V": { -// "@type": "/gno.FuncValue", -// "Closure": { -// "@type": "/gno.RefValue", -// "Escaped": true, -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:3" -// }, -// "FileName": "interfaces.gno", -// "IsMethod": false, -// "Name": "AddStringer", -// "NativeName": "", -// "NativePkg": "", -// "PkgPath": "gno.land/r/demo/tests", -// "Source": { -// "@type": "/gno.RefNode", -// "BlockNode": null, -// "Location": { -// "Column": "1", -// "File": "interfaces.gno", -// "Line": "13", -// "PkgPath": "gno.land/r/demo/tests" -// } -// }, -// "Type": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "str", -// "Tag": "", -// "Type": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Stringer" -// } -// } -// ], -// "Results": [] +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/r/demo/tests.Int" // } -// } -// }, -// { -// "T": { -// "@type": "/gno.FuncType", -// "Params": [ -// { -// "Embedded": false, -// "Name": "path", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ], -// "Results": [ -// { -// "Embedded": false, -// "Name": "", -// "Tag": "", -// "Type": { -// "@type": "/gno.PrimitiveType", -// "value": "16" -// } -// } -// ] // }, // "V": { // "@type": "/gno.PointerValue", @@ -1828,95 +1587,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.SliceType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Stringer" -// }, -// "Vrd": false -// }, -// "V": { -// "@type": "/gno.SliceValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "ad25f70f66c8c53042afd1377e5ff5ab744bf1a5", -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:16" -// }, -// "Length": "3", -// "Maxcap": "3", -// "Offset": "0" -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.Int" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "b662d2bfde61831128c908a3d1afff97e05e6227", -// "ObjectID": "0ffe7732b4d549b4cf9ec18bd68641cd2c75ad0a:7" -// }, -// "Index": "0", -// "TV": null -// } -// }, -// { -// "T": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.nat" -// } -// }, -// { -// "T": { -// "@type": "/gno.PrimitiveType", -// "value": "32" -// } -// }, -// { -// "T": { -// "@type": "/gno.RefType", -// "ID": "std.Address" -// }, -// "V": { -// "@type": "/gno.StringValue", -// "value": "g1wymu47drhr0kuq2098m792lytgtj2nyx77yrsm" -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/r/demo/tests.TestNode" -// } -// } // } // ] // } From 252e7cdd3e80333a3f67e7d246339f412efb1ee3 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Sun, 7 Jul 2024 02:32:49 +0900 Subject: [PATCH 14/45] golden --- examples/gno.land/p/demo/avl/z_0_filetest.gno | 38 +++++++++--------- examples/gno.land/p/demo/avl/z_1_filetest.gno | 40 +++++++++---------- examples/gno.land/p/demo/avl/z_2_filetest.gno | 8 ++-- .../gno.land/r/demo/boards/z_4_filetest.gno | 10 ++--- examples/gno.land/r/demo/nft/z_0_filetest.gno | 24 +++++------ 5 files changed, 60 insertions(+), 60 deletions(-) diff --git a/examples/gno.land/p/demo/avl/z_0_filetest.gno b/examples/gno.land/p/demo/avl/z_0_filetest.gno index 993fe2f7d7b..aff79ffabc6 100644 --- a/examples/gno.land/p/demo/avl/z_0_filetest.gno +++ b/examples/gno.land/p/demo/avl/z_0_filetest.gno @@ -237,6 +237,25 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/p/demo/avl.Node" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "ae86874f9b47fa5e64c30b3e92e9d07f2ec967a4", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -306,25 +325,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/p/demo/avl.Node" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "ae86874f9b47fa5e64c30b3e92e9d07f2ec967a4", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:6" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } diff --git a/examples/gno.land/p/demo/avl/z_1_filetest.gno b/examples/gno.land/p/demo/avl/z_1_filetest.gno index fb5111acaba..3b6d40d5ecd 100644 --- a/examples/gno.land/p/demo/avl/z_1_filetest.gno +++ b/examples/gno.land/p/demo/avl/z_1_filetest.gno @@ -310,6 +310,25 @@ func main() { // "Values": [ // { // "T": { +// "@type": "/gno.PointerType", +// "Elt": { +// "@type": "/gno.RefType", +// "ID": "gno.land/p/demo/avl.Node" +// } +// }, +// "V": { +// "@type": "/gno.PointerValue", +// "Base": { +// "@type": "/gno.RefValue", +// "Hash": "1faa9fa4ba1935121a6d3f0a623772e9d4499b0a", +// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:10" +// }, +// "Index": "0", +// "TV": null +// } +// }, +// { +// "T": { // "@type": "/gno.FuncType", // "Params": [], // "Results": [] @@ -323,7 +342,7 @@ func main() { // }, // "FileName": "main.gno", // "IsMethod": false, -// "Name": "init.0", +// "Name": "init.1", // "NativeName": "", // "NativePkg": "", // "PkgPath": "gno.land/r/test", @@ -379,25 +398,6 @@ func main() { // "Results": [] // } // } -// }, -// { -// "T": { -// "@type": "/gno.PointerType", -// "Elt": { -// "@type": "/gno.RefType", -// "ID": "gno.land/p/demo/avl.Node" -// } -// }, -// "V": { -// "@type": "/gno.PointerValue", -// "Base": { -// "@type": "/gno.RefValue", -// "Hash": "1faa9fa4ba1935121a6d3f0a623772e9d4499b0a", -// "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:10" -// }, -// "Index": "0", -// "TV": null -// } // } // ] // } diff --git a/examples/gno.land/p/demo/avl/z_2_filetest.gno b/examples/gno.land/p/demo/avl/z_2_filetest.gno index 1d3f20651ed..43067c31e8f 100644 --- a/examples/gno.land/p/demo/avl/z_2_filetest.gno +++ b/examples/gno.land/p/demo/avl/z_2_filetest.gno @@ -272,7 +272,7 @@ func main() { // "ObjectInfo": { // "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:11", // "ModTime": "0", -// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "RefCount": "1" // }, // "Value": { @@ -287,7 +287,7 @@ func main() { // } // } // } -// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:4]={ +// u[a8ada09dee16d791fd406d629fe29bb0ed084a30:3]={ // "Fields": [ // { // "T": { @@ -301,7 +301,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "425bc3bff1f4c36b175d055ed8b2c289123fcca1", +// "Hash": "d31c7e797793e03ffe0bbcb72f963264f8300d22", // "ObjectID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:11" // }, // "Index": "0", @@ -310,7 +310,7 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:4", +// "ID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:3", // "ModTime": "10", // "OwnerID": "a8ada09dee16d791fd406d629fe29bb0ed084a30:2", // "RefCount": "1" diff --git a/examples/gno.land/r/demo/boards/z_4_filetest.gno b/examples/gno.land/r/demo/boards/z_4_filetest.gno index a8b932db892..f0620c28c9d 100644 --- a/examples/gno.land/r/demo/boards/z_4_filetest.gno +++ b/examples/gno.land/r/demo/boards/z_4_filetest.gno @@ -336,7 +336,7 @@ func main() { // "Escaped": true, // "ObjectID": "336074805fc853987abe6f7fe3ad97a6a6f3077a:2" // }, -// "Index": "192", +// "Index": "182", // "TV": null // } // } @@ -497,7 +497,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "f56a463a97d103e183f1f368bf00a2ce99d4de88", +// "Hash": "0fd3352422af0a56a77ef2c9e88f479054e3d51f", // "ObjectID": "f6dbf411da22e67d74cd7ddba6a76cd7e14a4822:131" // } // }, @@ -534,7 +534,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "0651ea376feea18422dbe079f9d7fcbe3dfd32ad", +// "Hash": "c45bbd47a46681a63af973db0ec2180922e4a8ae", // "ObjectID": "f6dbf411da22e67d74cd7ddba6a76cd7e14a4822:127" // } // } @@ -785,7 +785,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "1d70015c486ccc9bfb7c425152605fabc78be1dd", +// "Hash": "a416a751c3a45a1e5cba11e737c51340b081e372", // "ObjectID": "f6dbf411da22e67d74cd7ddba6a76cd7e14a4822:86" // } // }, @@ -803,7 +803,7 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "b8ee1687a4f45886912ba624c8513a2a1526b94c", +// "Hash": "36299fccbc13f2a84c4629fad4cb940f0bd4b1c6", // "ObjectID": "f6dbf411da22e67d74cd7ddba6a76cd7e14a4822:87" // } // }, diff --git a/examples/gno.land/r/demo/nft/z_0_filetest.gno b/examples/gno.land/r/demo/nft/z_0_filetest.gno index 0595e76a0ed..c72c9191b56 100644 --- a/examples/gno.land/r/demo/nft/z_0_filetest.gno +++ b/examples/gno.land/r/demo/nft/z_0_filetest.gno @@ -161,7 +161,7 @@ func main() { // "ObjectInfo": { // "ID": "67c479d3d51d4056b2f4111d5352912a00be311e:8", // "ModTime": "0", -// "OwnerID": "67c479d3d51d4056b2f4111d5352912a00be311e:6", +// "OwnerID": "67c479d3d51d4056b2f4111d5352912a00be311e:5", // "RefCount": "1" // }, // "Value": { @@ -176,7 +176,7 @@ func main() { // } // } // } -// u[67c479d3d51d4056b2f4111d5352912a00be311e:6]={ +// u[67c479d3d51d4056b2f4111d5352912a00be311e:5]={ // "Fields": [ // { // "T": { @@ -190,7 +190,7 @@ func main() { // "@type": "/gno.PointerValue", // "Base": { // "@type": "/gno.RefValue", -// "Hash": "75850e56fa2c3c8b6d6814b1f150919b75355752", +// "Hash": "b229b824842ec3e7f2341e33d0fa0ca77af2f480", // "ObjectID": "67c479d3d51d4056b2f4111d5352912a00be311e:8" // }, // "Index": "0", @@ -199,13 +199,13 @@ func main() { // } // ], // "ObjectInfo": { -// "ID": "67c479d3d51d4056b2f4111d5352912a00be311e:6", +// "ID": "67c479d3d51d4056b2f4111d5352912a00be311e:5", // "ModTime": "7", -// "OwnerID": "67c479d3d51d4056b2f4111d5352912a00be311e:5", +// "OwnerID": "67c479d3d51d4056b2f4111d5352912a00be311e:4", // "RefCount": "1" // } // } -// u[67c479d3d51d4056b2f4111d5352912a00be311e:5]={ +// u[67c479d3d51d4056b2f4111d5352912a00be311e:4]={ // "Fields": [ // {}, // { @@ -222,8 +222,8 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "700d932c087f30499941de2b589867dc17aaea5a", -// "ObjectID": "67c479d3d51d4056b2f4111d5352912a00be311e:6" +// "Hash": "1e0b9dddb406b4f50500a022266a4cb8a4ea38c6", +// "ObjectID": "67c479d3d51d4056b2f4111d5352912a00be311e:5" // } // }, // { @@ -233,15 +233,15 @@ func main() { // }, // "V": { // "@type": "/gno.RefValue", -// "Hash": "e06585aff551113920c929453ea40250f3cc01bc", -// "ObjectID": "67c479d3d51d4056b2f4111d5352912a00be311e:7" +// "Hash": "05ab6746ea84b55ca133806af215d99a1c4b045e", +// "ObjectID": "67c479d3d51d4056b2f4111d5352912a00be311e:6" // } // } // ], // "ObjectInfo": { -// "ID": "67c479d3d51d4056b2f4111d5352912a00be311e:5", +// "ID": "67c479d3d51d4056b2f4111d5352912a00be311e:4", // "ModTime": "7", -// "OwnerID": "67c479d3d51d4056b2f4111d5352912a00be311e:4", +// "OwnerID": "67c479d3d51d4056b2f4111d5352912a00be311e:3", // "RefCount": "1" // } // } From 2f5509e27d93d3804d0d00349d24e011942c4f5f Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 13 May 2024 04:04:03 +0200 Subject: [PATCH 15/45] save --- gnovm/pkg/gnolang/preprocess.go | 16 ++++++++++++++++ gnovm/tests/files/var21.gno | 17 +++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 gnovm/tests/files/var21.gno diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index a3f756ef58a..4d495b0ca1f 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2805,6 +2805,15 @@ func findUndefined(store Store, last BlockNode, x Expr) (un Name) { return findUndefined2(store, last, x, nil) } +func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { + switch s := stmt.(type) { + case *ExprStmt: + return findUndefined2(store, last, s.X, t) + default: + panic(fmt.Sprintf("findUndefinedStmt: %T not supported", s)) + } +} + func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { if x == nil { return @@ -2917,6 +2926,13 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { ct.String())) } case *FuncLitExpr: + for _, stmt := range cx.Body { + un = findUndefinedStmt(store, last, stmt, t) + + if un != "" { + return + } + } return findUndefined(store, last, &cx.Type) case *FieldTypeExpr: return findUndefined(store, last, cx.Type) diff --git a/gnovm/tests/files/var21.gno b/gnovm/tests/files/var21.gno new file mode 100644 index 00000000000..7ec32e1ebfa --- /dev/null +++ b/gnovm/tests/files/var21.gno @@ -0,0 +1,17 @@ +package main + +func main() { + myDep = "123" + myVar() +} + +func hello(s string) { + println(s) +} + +var myVar = func() { hello(myDep) } + +var myDep string + +// Output: +// 123 From 6d4e5112c0444b4084d7b5946882417916ca1af0 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 13 May 2024 14:07:33 +0200 Subject: [PATCH 16/45] save --- gnovm/pkg/gnolang/preprocess.go | 70 ++++++++++++++++++++++++++++++++- gnovm/tests/files/var21.gno | 15 ++++--- 2 files changed, 76 insertions(+), 9 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 4d495b0ca1f..94e938de43a 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2805,13 +2805,81 @@ func findUndefined(store Store, last BlockNode, x Expr) (un Name) { return findUndefined2(store, last, x, nil) } +func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name { + pkg := packageOf(last) + name := findUndefined2(store, last, x, t) + + if name == "" { + return "" + } + + _, _, ok := pkg.FileSet.GetDeclForSafe(name) + + // skip it if it's a local identifier + if !ok { + return "" + } + return name +} + func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { switch s := stmt.(type) { case *ExprStmt: - return findUndefined2(store, last, s.X, t) + return findUndefined2SkipLocals(store, last, s.X, t) + case *AssignStmt: + for _, rh := range s.Rhs { + un := findUndefined2SkipLocals(store, last, rh, t) + + if un != "" { + return un + } + } + case *IfStmt: + un := findUndefined2SkipLocals(store, last, s.Cond, t) + if un != "" { + return un + } + + un = findUndefinedStmt(store, last, &s.Else, t) + if un != "" { + return un + } + + un = findUndefinedStmt(store, last, &s.Then, t) + if un != "" { + return un + } + case *IfCaseStmt: + for _, b := range s.Body { + un := findUndefinedStmt(store, last, b, t) + + if un != "" { + return un + } + } + case *ReturnStmt: + for _, b := range s.Results { + un := findUndefined2SkipLocals(store, last, b, t) + if un != "" { + return un + } + } + case *RangeStmt: + un := findUndefined2SkipLocals(store, last, s.X, t) + if un != "" { + return un + } + + for _, b := range s.Body { + un := findUndefinedStmt(store, last, b, t) + if un != "" { + return un + } + } default: panic(fmt.Sprintf("findUndefinedStmt: %T not supported", s)) } + return "" } func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { diff --git a/gnovm/tests/files/var21.gno b/gnovm/tests/files/var21.gno index 7ec32e1ebfa..60dfb63903e 100644 --- a/gnovm/tests/files/var21.gno +++ b/gnovm/tests/files/var21.gno @@ -1,17 +1,16 @@ package main -func main() { - myDep = "123" - myVar() -} - -func hello(s string) { - println(s) -} +func main() {} var myVar = func() { hello(myDep) } var myDep string +var myVar1 = func() { + a := myDep1 +} + +var myDep1 string + // Output: // 123 From d26e51f6fa5ba3e0574556d0af61f991348b23f2 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 13 May 2024 14:15:59 +0200 Subject: [PATCH 17/45] save --- gnovm/pkg/gnolang/preprocess.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 94e938de43a..790f91b0c5b 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2805,6 +2805,7 @@ func findUndefined(store Store, last BlockNode, x Expr) (un Name) { return findUndefined2(store, last, x, nil) } +// finds the next undefined identifier and returns it if it is global func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name { pkg := packageOf(last) name := findUndefined2(store, last, x, t) @@ -2824,6 +2825,32 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { switch s := stmt.(type) { + case *SwitchStmt: + un := findUndefined2SkipLocals(store, last, s.X, t) + if un != "" { + return un + } + + un = findUndefinedStmt(store, last, s.Init, t) + if un != "" { + return un + } + + for _, b := range s.Clauses { + un = findUndefinedStmt(store, last, &b, t) + + if un != "" { + return un + } + } + case *SwitchClauseStmt: + for _, rh := range s.Cases { + un := findUndefined2SkipLocals(store, last, rh, t) + + if un != "" { + return un + } + } case *ExprStmt: return findUndefined2SkipLocals(store, last, s.X, t) case *AssignStmt: @@ -2876,6 +2903,8 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { return un } } + case nil: + return "" default: panic(fmt.Sprintf("findUndefinedStmt: %T not supported", s)) } From 45fa1d85ed086e8afc64a58acb4ac07f232259f0 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 13 May 2024 14:19:42 +0200 Subject: [PATCH 18/45] save --- gnovm/tests/files/var21.gno | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/gnovm/tests/files/var21.gno b/gnovm/tests/files/var21.gno index 60dfb63903e..858e2b35f6c 100644 --- a/gnovm/tests/files/var21.gno +++ b/gnovm/tests/files/var21.gno @@ -12,5 +12,21 @@ var myVar1 = func() { var myDep1 string -// Output: -// 123 +var myVar2 = func() { + aaa := "" + + switch myDep { + case aaa: + println(myDep2) + } +} + +var myDep2 string + +var myVar3 = func() { + for _, c := range myDep3 { + println(c) + } +} + +var myDep3 string From 94dba1fef222572fe3bbcb1b354bec743cf4f1eb Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 13 May 2024 16:52:25 +0200 Subject: [PATCH 19/45] save --- gnovm/pkg/gnolang/preprocess.go | 1 + 1 file changed, 1 insertion(+) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 790f91b0c5b..28406adb9cc 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2837,6 +2837,7 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { } for _, b := range s.Clauses { + b := b un = findUndefinedStmt(store, last, &b, t) if un != "" { From c45cabce7704c05705ea7d5def02355746004159 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 13 May 2024 17:01:04 +0200 Subject: [PATCH 20/45] save --- gnovm/pkg/gnolang/preprocess.go | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 28406adb9cc..250a44f2dfe 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2825,6 +2825,40 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { switch s := stmt.(type) { + case *IncDecStmt: + un := findUndefined2SkipLocals(store, last, s.X, t) + + if un != "" { + return un + } + case *PanicStmt: + un := findUndefined2SkipLocals(store, last, s.Exception, t) + + if un != "" { + return un + } + case *BlockStmt: + for _, rh := range s.Body { + un := findUndefinedStmt(store, last, rh, t) + + if un != "" { + return un + } + } + case *DeferStmt: + un := findUndefined2SkipLocals(store, last, s.Call.Func, t) + + if un != "" { + return un + } + + for _, rh := range s.Call.Args { + un = findUndefined2SkipLocals(store, last, rh, t) + + if un != "" { + return un + } + } case *SwitchStmt: un := findUndefined2SkipLocals(store, last, s.X, t) if un != "" { From c8bc8e50fa41e414926e1d4cc3bc6541a60ad95a Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 15 May 2024 15:41:29 +0200 Subject: [PATCH 21/45] save --- gnovm/pkg/gnolang/preprocess.go | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 250a44f2dfe..71272119090 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2807,19 +2807,17 @@ func findUndefined(store Store, last BlockNode, x Expr) (un Name) { // finds the next undefined identifier and returns it if it is global func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name { - pkg := packageOf(last) name := findUndefined2(store, last, x, t) - if name == "" { - return "" - } - - _, _, ok := pkg.FileSet.GetDeclForSafe(name) + if name != "" { + pkg := packageOf(last) - // skip it if it's a local identifier - if !ok { - return "" + if _, _, ok := pkg.FileSet.GetDeclForSafe(name); !ok { + // skip it if it's a local identifier + return "" + } } + return name } From 5a83e6185232762783aa022215376bd8a2142e34 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 12 Jun 2024 14:59:29 +0200 Subject: [PATCH 22/45] save --- gnovm/pkg/gnolang/preprocess.go | 74 +++++++++++++++++++++--------- gnovm/pkg/gnolang/symbols_table.go | 46 +++++++++++++++++++ gnovm/tests/files/var21.gno | 9 ++++ 3 files changed, 107 insertions(+), 22 deletions(-) create mode 100644 gnovm/pkg/gnolang/symbols_table.go diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 71272119090..4991d04e63d 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2806,7 +2806,7 @@ func findUndefined(store Store, last BlockNode, x Expr) (un Name) { } // finds the next undefined identifier and returns it if it is global -func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name { +func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type, st *SymbolTable) Name { name := findUndefined2(store, last, x, t) if name != "" { @@ -2816,61 +2816,87 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name // skip it if it's a local identifier return "" } + + isLocal := st.IdentifierExists(string(name)) + + if isLocal { + return "" + } } return name } -func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { +func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type, st *SymbolTable) Name { switch s := stmt.(type) { + case *ValueDecl: + for _, rh := range s.Values { + un := findUndefined2SkipLocals(store, last, rh, t, st) + + if un != "" { + return un + } + } + + for _, rh := range s.NameExprs { + st.AddIdentifier(string(rh.Name)) + } + case *DeclStmt: + for _, rh := range s.Body { + un := findUndefinedStmt(store, last, rh, t, st) + + if un != "" { + return un + } + } case *IncDecStmt: - un := findUndefined2SkipLocals(store, last, s.X, t) + un := findUndefined2SkipLocals(store, last, s.X, t, st) if un != "" { return un } case *PanicStmt: - un := findUndefined2SkipLocals(store, last, s.Exception, t) + un := findUndefined2SkipLocals(store, last, s.Exception, t, st) if un != "" { return un } case *BlockStmt: for _, rh := range s.Body { - un := findUndefinedStmt(store, last, rh, t) + un := findUndefinedStmt(store, last, rh, t, st) if un != "" { return un } } case *DeferStmt: - un := findUndefined2SkipLocals(store, last, s.Call.Func, t) + un := findUndefined2SkipLocals(store, last, s.Call.Func, t, st) if un != "" { return un } for _, rh := range s.Call.Args { - un = findUndefined2SkipLocals(store, last, rh, t) + un = findUndefined2SkipLocals(store, last, rh, t, st) if un != "" { return un } } case *SwitchStmt: - un := findUndefined2SkipLocals(store, last, s.X, t) + un := findUndefined2SkipLocals(store, last, s.X, t, st) if un != "" { return un } - un = findUndefinedStmt(store, last, s.Init, t) + un = findUndefinedStmt(store, last, s.Init, t, st) if un != "" { return un } for _, b := range s.Clauses { b := b - un = findUndefinedStmt(store, last, &b, t) + un = findUndefinedStmt(store, last, &b, t, st) if un != "" { return un @@ -2878,40 +2904,43 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { } case *SwitchClauseStmt: for _, rh := range s.Cases { - un := findUndefined2SkipLocals(store, last, rh, t) + un := findUndefined2SkipLocals(store, last, rh, t, st) if un != "" { return un } } case *ExprStmt: - return findUndefined2SkipLocals(store, last, s.X, t) + return findUndefined2SkipLocals(store, last, s.X, t, st) case *AssignStmt: - for _, rh := range s.Rhs { - un := findUndefined2SkipLocals(store, last, rh, t) + for i, rh := range s.Rhs { + if s.Op == DEFINE { + st.AddIdentifier(string(s.Lhs[i].(*NameExpr).Name)) + } + un := findUndefined2SkipLocals(store, last, rh, t, st) if un != "" { return un } } case *IfStmt: - un := findUndefined2SkipLocals(store, last, s.Cond, t) + un := findUndefined2SkipLocals(store, last, s.Cond, t, st) if un != "" { return un } - un = findUndefinedStmt(store, last, &s.Else, t) + un = findUndefinedStmt(store, last, &s.Else, t, st) if un != "" { return un } - un = findUndefinedStmt(store, last, &s.Then, t) + un = findUndefinedStmt(store, last, &s.Then, t, st) if un != "" { return un } case *IfCaseStmt: for _, b := range s.Body { - un := findUndefinedStmt(store, last, b, t) + un := findUndefinedStmt(store, last, b, t, st) if un != "" { return un @@ -2919,19 +2948,19 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { } case *ReturnStmt: for _, b := range s.Results { - un := findUndefined2SkipLocals(store, last, b, t) + un := findUndefined2SkipLocals(store, last, b, t, st) if un != "" { return un } } case *RangeStmt: - un := findUndefined2SkipLocals(store, last, s.X, t) + un := findUndefined2SkipLocals(store, last, s.X, t, st) if un != "" { return un } for _, b := range s.Body { - un := findUndefinedStmt(store, last, b, t) + un := findUndefinedStmt(store, last, b, t, st) if un != "" { return un } @@ -3056,8 +3085,9 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { ct.String())) } case *FuncLitExpr: + st := NewSymbolTable() for _, stmt := range cx.Body { - un = findUndefinedStmt(store, last, stmt, t) + un = findUndefinedStmt(store, last, stmt, t, st) if un != "" { return diff --git a/gnovm/pkg/gnolang/symbols_table.go b/gnovm/pkg/gnolang/symbols_table.go new file mode 100644 index 00000000000..24417bea0e9 --- /dev/null +++ b/gnovm/pkg/gnolang/symbols_table.go @@ -0,0 +1,46 @@ +package gnolang + +type SymbolTable struct { + scopes []*Scope +} + +type Scope struct { + symbols map[string]struct{} +} + +func NewSymbolTable() *SymbolTable { + return &SymbolTable{ + scopes: []*Scope{newScope()}, + } +} + +func newScope() *Scope { + return &Scope{ + symbols: make(map[string]struct{}), + } +} + +func (st *SymbolTable) EnterScope() { + st.scopes = append(st.scopes, newScope()) +} + +func (st *SymbolTable) ExitScope() { + if len(st.scopes) > 1 { + st.scopes = st.scopes[:len(st.scopes)-1] + } +} + +func (st *SymbolTable) AddIdentifier(name string) { + if len(st.scopes) > 0 { + st.scopes[len(st.scopes)-1].symbols[name] = struct{}{} + } +} + +func (st *SymbolTable) IdentifierExists(name string) bool { + for i := len(st.scopes) - 1; i >= 0; i-- { + if _, exists := st.scopes[i].symbols[name]; exists { + return true + } + } + return false +} diff --git a/gnovm/tests/files/var21.gno b/gnovm/tests/files/var21.gno index 858e2b35f6c..3aec47ab6e7 100644 --- a/gnovm/tests/files/var21.gno +++ b/gnovm/tests/files/var21.gno @@ -30,3 +30,12 @@ var myVar3 = func() { } var myDep3 string + +var v1 = func() int { + v2 := 11 + return v2 +}() + +var v2 = func() int { + return v1 +}() From 4e48847f7b49ecab8df04bcffab07e0ed5452590 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 12 Jun 2024 15:13:30 +0200 Subject: [PATCH 23/45] save --- gnovm/pkg/gnolang/symbols_table.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/gnovm/pkg/gnolang/symbols_table.go b/gnovm/pkg/gnolang/symbols_table.go index 24417bea0e9..ccba699d52d 100644 --- a/gnovm/pkg/gnolang/symbols_table.go +++ b/gnovm/pkg/gnolang/symbols_table.go @@ -20,16 +20,6 @@ func newScope() *Scope { } } -func (st *SymbolTable) EnterScope() { - st.scopes = append(st.scopes, newScope()) -} - -func (st *SymbolTable) ExitScope() { - if len(st.scopes) > 1 { - st.scopes = st.scopes[:len(st.scopes)-1] - } -} - func (st *SymbolTable) AddIdentifier(name string) { if len(st.scopes) > 0 { st.scopes[len(st.scopes)-1].symbols[name] = struct{}{} From ac3b2fb232fdbdeabb3ad895d38c2e0af9eeced6 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 12 Jun 2024 15:26:08 +0200 Subject: [PATCH 24/45] save --- gnovm/tests/files/var21.gno | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gnovm/tests/files/var21.gno b/gnovm/tests/files/var21.gno index 3aec47ab6e7..baa94a2e9da 100644 --- a/gnovm/tests/files/var21.gno +++ b/gnovm/tests/files/var21.gno @@ -39,3 +39,14 @@ var v1 = func() int { var v2 = func() int { return v1 }() + +var v3 = func() int { + return func() int { + v4 := 11 + return v4 + }() +}() + +var v4 = func() int { + return v3 +}() From 481ce59fba1d782fe27618565cf39b92d7af5094 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 12 Jun 2024 15:27:41 +0200 Subject: [PATCH 25/45] save --- gnovm/tests/files/var21.gno | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/gnovm/tests/files/var21.gno b/gnovm/tests/files/var21.gno index baa94a2e9da..ad0e74d12f2 100644 --- a/gnovm/tests/files/var21.gno +++ b/gnovm/tests/files/var21.gno @@ -50,3 +50,14 @@ var v3 = func() int { var v4 = func() int { return v3 }() + +var v4 = func() int { + v5 := 11 + return func() int { + return v5 + }() +}() + +var v5 = func() int { + return v4 +}() From 9e8544dd3b2a27b82a13875005ef2fc6d83199f5 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 12 Jun 2024 15:28:36 +0200 Subject: [PATCH 26/45] save --- gnovm/tests/files/var21.gno | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/gnovm/tests/files/var21.gno b/gnovm/tests/files/var21.gno index ad0e74d12f2..c7d2fd543cf 100644 --- a/gnovm/tests/files/var21.gno +++ b/gnovm/tests/files/var21.gno @@ -51,13 +51,13 @@ var v4 = func() int { return v3 }() -var v4 = func() int { - v5 := 11 +var v5 = func() int { + v6 := 11 return func() int { - return v5 + return v6 }() }() -var v5 = func() int { - return v4 +var v6 = func() int { + return v5 }() From 59ed04b606cc921c57050ece085db26ba4376700 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 12 Jun 2024 18:03:18 +0200 Subject: [PATCH 27/45] save --- gnovm/pkg/gnolang/preprocess.go | 9 +++++++++ gnovm/tests/files/var21.gno | 2 -- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 4991d04e63d..70472ca62d8 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2910,6 +2910,15 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type, st *Symbo return un } } + + for _, b := range s.Body { + un := findUndefinedStmt(store, last, b, t, st) + + if un != "" { + return un + } + } + case *ExprStmt: return findUndefined2SkipLocals(store, last, s.X, t, st) case *AssignStmt: diff --git a/gnovm/tests/files/var21.gno b/gnovm/tests/files/var21.gno index c7d2fd543cf..c9d33068653 100644 --- a/gnovm/tests/files/var21.gno +++ b/gnovm/tests/files/var21.gno @@ -2,8 +2,6 @@ package main func main() {} -var myVar = func() { hello(myDep) } - var myDep string var myVar1 = func() { From 9df6662e7c9e0dbcbf4c1a60898683db243a821b Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 12 Jun 2024 20:26:37 +0200 Subject: [PATCH 28/45] save --- gnovm/pkg/gnolang/preprocess.go | 1 + 1 file changed, 1 insertion(+) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 70472ca62d8..ccfe2df14a8 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2829,6 +2829,7 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type, st *S func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type, st *SymbolTable) Name { switch s := stmt.(type) { + case *BranchStmt: case *ValueDecl: for _, rh := range s.Values { un := findUndefined2SkipLocals(store, last, rh, t, st) From db713ccf7565d9f717e8b87784927914ef5ac266 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 8 Jul 2024 13:28:41 +0700 Subject: [PATCH 29/45] save --- gnovm/pkg/gnolang/preprocess.go | 83 ++++++++++++++++++------------ gnovm/pkg/gnolang/symbols_table.go | 36 ------------- 2 files changed, 49 insertions(+), 70 deletions(-) delete mode 100644 gnovm/pkg/gnolang/symbols_table.go diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index ccfe2df14a8..91c548a1fff 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2806,9 +2806,32 @@ func findUndefined(store Store, last BlockNode, x Expr) (un Name) { } // finds the next undefined identifier and returns it if it is global -func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type, st *SymbolTable) Name { +func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name { name := findUndefined2(store, last, x, t) + existsLocal := func(name Name, bn BlockNode) bool { + curr := bn + for { + currNames := bn.GetBlockNames() + + for _, currName := range currNames { + if currName == name { + return true + } + } + + if bn.GetStaticBlock().Source == curr { + return false + } + + curr = bn.GetStaticBlock().Source + + if curr == nil { + return false + } + } + } + if name != "" { pkg := packageOf(last) @@ -2817,7 +2840,7 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type, st *S return "" } - isLocal := st.IdentifierExists(string(name)) + isLocal := existsLocal(name, last) if isLocal { return "" @@ -2827,77 +2850,73 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type, st *S return name } -func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type, st *SymbolTable) Name { +func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { switch s := stmt.(type) { case *BranchStmt: case *ValueDecl: for _, rh := range s.Values { - un := findUndefined2SkipLocals(store, last, rh, t, st) + un := findUndefined2SkipLocals(store, last, rh, t) if un != "" { return un } } - - for _, rh := range s.NameExprs { - st.AddIdentifier(string(rh.Name)) - } case *DeclStmt: for _, rh := range s.Body { - un := findUndefinedStmt(store, last, rh, t, st) + un := findUndefinedStmt(store, last, rh, t) if un != "" { return un } } case *IncDecStmt: - un := findUndefined2SkipLocals(store, last, s.X, t, st) + un := findUndefined2SkipLocals(store, last, s.X, t) if un != "" { return un } case *PanicStmt: - un := findUndefined2SkipLocals(store, last, s.Exception, t, st) + un := findUndefined2SkipLocals(store, last, s.Exception, t) if un != "" { return un } case *BlockStmt: for _, rh := range s.Body { - un := findUndefinedStmt(store, last, rh, t, st) + un := findUndefinedStmt(store, s, rh, t) if un != "" { return un } } case *DeferStmt: - un := findUndefined2SkipLocals(store, last, s.Call.Func, t, st) + un := findUndefined2SkipLocals(store, last, s.Call.Func, t) if un != "" { return un } for _, rh := range s.Call.Args { - un = findUndefined2SkipLocals(store, last, rh, t, st) + un = findUndefined2SkipLocals(store, last, rh, t) if un != "" { return un } } case *SwitchStmt: - un := findUndefined2SkipLocals(store, last, s.X, t, st) + un := findUndefined2SkipLocals(store, last, s.X, t) if un != "" { return un } - un = findUndefinedStmt(store, last, s.Init, t, st) + un = findUndefinedStmt(store, last, s.Init, t) if un != "" { return un } for _, b := range s.Clauses { b := b - un = findUndefinedStmt(store, last, &b, t, st) + un = findUndefinedStmt(store, s, &b, t) if un != "" { return un @@ -2905,7 +2924,7 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type, st *Symbo } case *SwitchClauseStmt: for _, rh := range s.Cases { - un := findUndefined2SkipLocals(store, last, rh, t, st) + un := findUndefined2SkipLocals(store, last, rh, t) if un != "" { return un @@ -2913,7 +2932,7 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type, st *Symbo } for _, b := range s.Body { - un := findUndefinedStmt(store, last, b, t, st) + un := findUndefinedStmt(store, last, b, t) if un != "" { return un @@ -2921,36 +2940,33 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type, st *Symbo } case *ExprStmt: - return findUndefined2SkipLocals(store, last, s.X, t, st) + return findUndefined2SkipLocals(store, last, s.X, t) case *AssignStmt: - for i, rh := range s.Rhs { - if s.Op == DEFINE { - st.AddIdentifier(string(s.Lhs[i].(*NameExpr).Name)) - } - un := findUndefined2SkipLocals(store, last, rh, t, st) + for _, rh := range s.Rhs { + un := findUndefined2SkipLocals(store, last, rh, t) if un != "" { return un } } case *IfStmt: - un := findUndefined2SkipLocals(store, last, s.Cond, t, st) + un := findUndefined2SkipLocals(store, last, s.Cond, t) if un != "" { return un } - un = findUndefinedStmt(store, last, &s.Else, t, st) + un = findUndefinedStmt(store, last, &s.Else, t) if un != "" { return un } - un = findUndefinedStmt(store, last, &s.Then, t, st) + un = findUndefinedStmt(store, last, &s.Then, t) if un != "" { return un } case *IfCaseStmt: for _, b := range s.Body { - un := findUndefinedStmt(store, last, b, t, st) + un := findUndefinedStmt(store, last, b, t) if un != "" { return un @@ -2958,19 +2974,19 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type, st *Symbo } case *ReturnStmt: for _, b := range s.Results { - un := findUndefined2SkipLocals(store, last, b, t, st) + un := findUndefined2SkipLocals(store, last, b, t) if un != "" { return un } } case *RangeStmt: - un := findUndefined2SkipLocals(store, last, s.X, t, st) + un := findUndefined2SkipLocals(store, last, s.X, t) if un != "" { return un } for _, b := range s.Body { - un := findUndefinedStmt(store, last, b, t, st) + un := findUndefinedStmt(store, last, b, t) if un != "" { return un } @@ -3095,9 +3111,8 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { ct.String())) } case *FuncLitExpr: - st := NewSymbolTable() for _, stmt := range cx.Body { - un = findUndefinedStmt(store, last, stmt, t, st) + un = findUndefinedStmt(store, last, stmt, t) if un != "" { return diff --git a/gnovm/pkg/gnolang/symbols_table.go b/gnovm/pkg/gnolang/symbols_table.go deleted file mode 100644 index ccba699d52d..00000000000 --- a/gnovm/pkg/gnolang/symbols_table.go +++ /dev/null @@ -1,36 +0,0 @@ -package gnolang - -type SymbolTable struct { - scopes []*Scope -} - -type Scope struct { - symbols map[string]struct{} -} - -func NewSymbolTable() *SymbolTable { - return &SymbolTable{ - scopes: []*Scope{newScope()}, - } -} - -func newScope() *Scope { - return &Scope{ - symbols: make(map[string]struct{}), - } -} - -func (st *SymbolTable) AddIdentifier(name string) { - if len(st.scopes) > 0 { - st.scopes[len(st.scopes)-1].symbols[name] = struct{}{} - } -} - -func (st *SymbolTable) IdentifierExists(name string) bool { - for i := len(st.scopes) - 1; i >= 0; i-- { - if _, exists := st.scopes[i].symbols[name]; exists { - return true - } - } - return false -} From f4e731824a949e387610ad4247a1696788482a61 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 8 Jul 2024 18:29:52 +0200 Subject: [PATCH 30/45] Update unknow_lib.txtar --- gnovm/cmd/gno/testdata/gno_test/unknow_lib.txtar | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gnovm/cmd/gno/testdata/gno_test/unknow_lib.txtar b/gnovm/cmd/gno/testdata/gno_test/unknow_lib.txtar index 37ef68f3d91..15125f695f5 100644 --- a/gnovm/cmd/gno/testdata/gno_test/unknow_lib.txtar +++ b/gnovm/cmd/gno/testdata/gno_test/unknow_lib.txtar @@ -4,13 +4,13 @@ ! stdout .+ stderr 'panic: unknown import path foobarbaz \[recovered\]' -stderr ' panic: gno.land/r/\w{8}/contract.gno:3:8: unknown import path foobarbaz' +stderr ' panic: gno.land/r/\w{8}/contract.gno:3:1: unknown import path foobarbaz' ! gno test -v --with-native-fallback . ! stdout .+ stderr 'panic: unknown import path foobarbaz \[recovered\]' -stderr ' panic: gno.land/r/\w{8}/contract.gno:3:8: unknown import path foobarbaz' +stderr ' panic: gno.land/r/\w{8}/contract.gno:3:1: unknown import path foobarbaz' -- contract.gno -- package contract From 6873cf53fed4f411fcfe17d42e711965b2c492cd Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 8 Jul 2024 18:53:42 +0200 Subject: [PATCH 31/45] Update test_with-native-fallback.txtar --- gnovm/cmd/gno/testdata/gno_test/test_with-native-fallback.txtar | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnovm/cmd/gno/testdata/gno_test/test_with-native-fallback.txtar b/gnovm/cmd/gno/testdata/gno_test/test_with-native-fallback.txtar index 6099788a9a1..0954d1dd932 100644 --- a/gnovm/cmd/gno/testdata/gno_test/test_with-native-fallback.txtar +++ b/gnovm/cmd/gno/testdata/gno_test/test_with-native-fallback.txtar @@ -4,7 +4,7 @@ ! stdout .+ stderr 'panic: unknown import path net \[recovered\]' -stderr ' panic: gno.land/r/\w{8}/contract.gno:3:8: unknown import path net' +stderr ' panic: gno.land/r/\w{8}/contract.gno:3:1: unknown import path net' gno test -v --with-native-fallback . From 3deceb72c299e316666c7491e67da1f9d422ce8d Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Tue, 9 Jul 2024 01:42:27 +0700 Subject: [PATCH 32/45] save --- gnovm/pkg/gnolang/preprocess.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 91c548a1fff..c3a3c0e0561 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -3112,7 +3112,7 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { } case *FuncLitExpr: for _, stmt := range cx.Body { - un = findUndefinedStmt(store, last, stmt, t) + un = findUndefinedStmt(store, cx, stmt, t) if un != "" { return From cea5e78370a292b37c80079bc5fc22c0c60fd94c Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Tue, 9 Jul 2024 02:58:39 +0700 Subject: [PATCH 33/45] save --- gnovm/tests/files/var21.gno | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gnovm/tests/files/var21.gno b/gnovm/tests/files/var21.gno index c9d33068653..b9bb6ebf692 100644 --- a/gnovm/tests/files/var21.gno +++ b/gnovm/tests/files/var21.gno @@ -59,3 +59,22 @@ var v5 = func() int { var v6 = func() int { return v5 }() + +var other = func() { + if true { + something := 2 + print(something) // 2 + } else { + print(something) // a string, but single shared 'st' masks the outer/global reference. + } +} +var something = "a string" + +var other1 = func() { + if true { + something1 := 2 + print(something1) // 2 + } + print(something1) // a string, but single shared 'st' masks the outer/global reference. +} +var something1 = "a string" From a27fd0e202090dc1d901d32ecb9969b8515f3a8b Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 10 Jul 2024 18:08:06 +0700 Subject: [PATCH 34/45] save --- gnovm/pkg/gnolang/preprocess.go | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index c3a3c0e0561..96eb84ddfba 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2824,7 +2824,7 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name return false } - curr = bn.GetStaticBlock().Source + curr = bn.GetStaticBlock().GetParentNode(store) if curr == nil { return false @@ -2836,7 +2836,6 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name pkg := packageOf(last) if _, _, ok := pkg.FileSet.GetDeclForSafe(name); !ok { - // skip it if it's a local identifier return "" } @@ -2852,7 +2851,6 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { switch s := stmt.(type) { - case *BranchStmt: case *ValueDecl: for _, rh := range s.Values { un := findUndefined2SkipLocals(store, last, rh, t) @@ -2991,6 +2989,7 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { return un } } + case *BranchStmt: case nil: return "" default: From aeae7d78a7feb08cbd281152c7a3f692b7a34cef Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Tue, 16 Jul 2024 03:10:39 +0700 Subject: [PATCH 35/45] save --- gnovm/pkg/gnolang/preprocess.go | 40 ++++++++++++++++++++++++++++++++- gnovm/tests/files/closure.gno | 16 +++++++++++++ gnovm/tests/files/var22.gno | 10 +++++++++ 3 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 gnovm/tests/files/closure.gno create mode 100644 gnovm/tests/files/var22.gno diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 96eb84ddfba..b9b9e5c3509 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -2851,7 +2851,18 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { switch s := stmt.(type) { + case *TypeDecl: + un := findUndefined2SkipLocals(store, last, s.Type, t) + + if un != "" { + return un + } case *ValueDecl: + un := findUndefined2SkipLocals(store, last, s.Type, t) + + if un != "" { + return un + } for _, rh := range s.Values { un := findUndefined2SkipLocals(store, last, rh, t) @@ -2948,7 +2959,12 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { } } case *IfStmt: - un := findUndefined2SkipLocals(store, last, s.Cond, t) + un := findUndefinedStmt(store, last, s.Init, t) + if un != "" { + return un + } + + un = findUndefined2SkipLocals(store, last, s.Cond, t) if un != "" { return un } @@ -2983,6 +2999,28 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { return un } + for _, b := range s.Body { + un := findUndefinedStmt(store, last, b, t) + if un != "" { + return un + } + } + case *ForStmt: + un := findUndefinedStmt(store, s, s.Init, t) + if un != "" { + return un + } + + un = findUndefined2SkipLocals(store, s, s.Cond, t) + if un != "" { + return un + } + + un = findUndefinedStmt(store, s, s.Post, t) + if un != "" { + return un + } + for _, b := range s.Body { un := findUndefinedStmt(store, last, b, t) if un != "" { diff --git a/gnovm/tests/files/closure.gno b/gnovm/tests/files/closure.gno new file mode 100644 index 00000000000..5df92577c05 --- /dev/null +++ b/gnovm/tests/files/closure.gno @@ -0,0 +1,16 @@ +package main + +func main() { + +} + +var a = func() { + b() +} + +var b = func() { + a() +} + +// Error: +// main/files/const24.gno:6:5: constant definition loop with a diff --git a/gnovm/tests/files/var22.gno b/gnovm/tests/files/var22.gno new file mode 100644 index 00000000000..fc2ef4d35d6 --- /dev/null +++ b/gnovm/tests/files/var22.gno @@ -0,0 +1,10 @@ +package main + +func main() {} + +var foo = func() (bool, bool) { + return true, true +} + +var x = func() bool { return a }() +var a, b = foo() From 79eab9ae5afc58e9afceafe7dc5d71f940087def Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Tue, 16 Jul 2024 03:15:02 +0700 Subject: [PATCH 36/45] save --- gnovm/tests/files/closure.gno | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnovm/tests/files/closure.gno b/gnovm/tests/files/closure.gno index 5df92577c05..22857c6d0fa 100644 --- a/gnovm/tests/files/closure.gno +++ b/gnovm/tests/files/closure.gno @@ -13,4 +13,4 @@ var b = func() { } // Error: -// main/files/const24.gno:6:5: constant definition loop with a +// main/files/const24.gno:7:5: constant definition loop with a From a948580e9d26c78b22f0d9f99b33c4c329f7494c Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Tue, 16 Jul 2024 11:31:33 +0700 Subject: [PATCH 37/45] save --- gnovm/tests/files/closure.gno | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnovm/tests/files/closure.gno b/gnovm/tests/files/closure.gno index 22857c6d0fa..ea05c025954 100644 --- a/gnovm/tests/files/closure.gno +++ b/gnovm/tests/files/closure.gno @@ -13,4 +13,4 @@ var b = func() { } // Error: -// main/files/const24.gno:7:5: constant definition loop with a +// main/files/closure.gno:7:5: constant definition loop with a From 7178cfb84e0d97aac86c7bf77383415a69dc9deb Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Tue, 16 Jul 2024 11:33:53 +0700 Subject: [PATCH 38/45] save --- gnovm/tests/files/var22.gno | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/gnovm/tests/files/var22.gno b/gnovm/tests/files/var22.gno index fc2ef4d35d6..0d0d7685429 100644 --- a/gnovm/tests/files/var22.gno +++ b/gnovm/tests/files/var22.gno @@ -8,3 +8,11 @@ var foo = func() (bool, bool) { var x = func() bool { return a }() var a, b = foo() + +var a1 = func() int { + type B1 b1 + x := B1(1) + return int(x) +} + +type b1 int From b134378544de9b44da30372e7f71093b7b217841 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Mon, 9 Dec 2024 23:28:26 +0100 Subject: [PATCH 39/45] save --- gnovm/pkg/gnolang/preprocess.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 891d1067d37..255e6d324a7 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -3783,6 +3783,10 @@ func findUndefined(store Store, last BlockNode, x Expr) (un Name) { func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name { name := findUndefined2(store, last, x, t) + if name == "" { + return "" + } + existsLocal := func(name Name, bn BlockNode) bool { curr := bn for { @@ -3806,18 +3810,16 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name } } - if name != "" { - pkg := packageOf(last) + pkg := packageOf(last) - if _, _, ok := pkg.FileSet.GetDeclForSafe(name); !ok { - return "" - } + if _, _, ok := pkg.FileSet.GetDeclForSafe(name); !ok { + return "" + } - isLocal := existsLocal(name, last) + isLocal := existsLocal(name, last) - if isLocal { - return "" - } + if isLocal { + return "" } return name From e55330787b8699b64f129d6d79cfaf8809799bbe Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Wed, 11 Dec 2024 16:59:18 +0100 Subject: [PATCH 40/45] save --- gnovm/pkg/gnolang/preprocess.go | 72 ++++++++++++++++----------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 255e6d324a7..dfac1e60b74 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -3776,12 +3776,12 @@ func assertTypeDeclNoCycle2(store Store, last BlockNode, x Expr, stack *[]Name, // type expressions, which must get preprocessed for inner // composite type eliding to work. func findUndefined(store Store, last BlockNode, x Expr) (un Name) { - return findUndefined2(store, last, x, nil) + return findUndefined2(store, last, x, nil, true) } // finds the next undefined identifier and returns it if it is global func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name { - name := findUndefined2(store, last, x, t) + name := findUndefined2(store, last, x, t, false) if name == "" { return "" @@ -4012,13 +4012,13 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { return "" } -func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { +func findUndefined2(store Store, last BlockNode, x Expr, t Type, skipPredefined bool) (un Name) { if x == nil { return } switch cx := x.(type) { case *NameExpr: - if tv := last.GetValueRef(store, cx.Name, true); tv != nil { + if tv := last.GetValueRef(store, cx.Name, skipPredefined); tv != nil { return } if _, ok := UverseNode().GetLocalIndex(cx.Name); ok { @@ -4031,51 +4031,51 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { case *BasicLitExpr: return case *BinaryExpr: - un = findUndefined(store, last, cx.Left) + un = findUndefined2(store, last, cx.Left, nil, skipPredefined) if un != "" { return } - un = findUndefined(store, last, cx.Right) + un = findUndefined2(store, last, cx.Right, nil, skipPredefined) if un != "" { return } case *SelectorExpr: - return findUndefined(store, last, cx.X) + return findUndefined2(store, last, cx.X, nil, skipPredefined) case *SliceExpr: - un = findUndefined(store, last, cx.X) + un = findUndefined2(store, last, cx.X, nil, skipPredefined) if un != "" { return } if cx.Low != nil { - un = findUndefined(store, last, cx.Low) + un = findUndefined2(store, last, cx.Low, nil, skipPredefined) if un != "" { return } } if cx.High != nil { - un = findUndefined(store, last, cx.High) + un = findUndefined2(store, last, cx.High, nil, skipPredefined) if un != "" { return } } if cx.Max != nil { - un = findUndefined(store, last, cx.Max) + un = findUndefined2(store, last, cx.Max, nil, skipPredefined) if un != "" { return } } case *StarExpr: - return findUndefined(store, last, cx.X) + return findUndefined2(store, last, cx.X, nil, skipPredefined) case *RefExpr: - return findUndefined(store, last, cx.X) + return findUndefined2(store, last, cx.X, nil, skipPredefined) case *TypeAssertExpr: - un = findUndefined(store, last, cx.X) + un = findUndefined2(store, last, cx.X, nil, skipPredefined) if un != "" { return } - return findUndefined(store, last, cx.Type) + return findUndefined2(store, last, cx.Type, nil, skipPredefined) case *UnaryExpr: - return findUndefined(store, last, cx.X) + return findUndefined2(store, last, cx.X, nil, skipPredefined) case *CompositeLitExpr: var ct Type if cx.Type == nil { @@ -4085,7 +4085,7 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { ct = t cx.Type = constType(cx, t) } else { - un = findUndefined(store, last, cx.Type) + un = findUndefined2(store, last, cx.Type, nil, skipPredefined) if un != "" { return } @@ -4102,18 +4102,18 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { switch ct.Kind() { case ArrayKind, SliceKind, MapKind: for _, kvx := range cx.Elts { - un = findUndefined(store, last, kvx.Key) + un = findUndefined2(store, last, kvx.Key, nil, skipPredefined) if un != "" { return } - un = findUndefined2(store, last, kvx.Value, ct.Elem()) + un = findUndefined2(store, last, kvx.Value, ct.Elem(), skipPredefined) if un != "" { return } } case StructKind: for _, kvx := range cx.Elts { - un = findUndefined(store, last, kvx.Value) + un = findUndefined2(store, last, kvx.Value, nil, skipPredefined) if un != "" { return } @@ -4131,43 +4131,43 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { return } } - return findUndefined(store, last, &cx.Type) + return findUndefined2(store, last, &cx.Type, nil, skipPredefined) case *FieldTypeExpr: - return findUndefined(store, last, cx.Type) + return findUndefined2(store, last, cx.Type, nil, skipPredefined) case *ArrayTypeExpr: if cx.Len != nil { - un = findUndefined(store, last, cx.Len) + un = findUndefined2(store, last, cx.Len, nil, skipPredefined) if un != "" { return } } - return findUndefined(store, last, cx.Elt) + return findUndefined2(store, last, cx.Elt, nil, skipPredefined) case *SliceTypeExpr: - return findUndefined(store, last, cx.Elt) + return findUndefined2(store, last, cx.Elt, nil, skipPredefined) case *InterfaceTypeExpr: for i := range cx.Methods { - un = findUndefined(store, last, &cx.Methods[i]) + un = findUndefined2(store, last, &cx.Methods[i], nil, skipPredefined) if un != "" { return } } case *ChanTypeExpr: - return findUndefined(store, last, cx.Value) + return findUndefined2(store, last, cx.Value, nil, skipPredefined) case *FuncTypeExpr: for i := range cx.Params { - un = findUndefined(store, last, &cx.Params[i]) + un = findUndefined2(store, last, &cx.Params[i], nil, skipPredefined) if un != "" { return } } for i := range cx.Results { - un = findUndefined(store, last, &cx.Results[i]) + un = findUndefined2(store, last, &cx.Results[i], nil, skipPredefined) if un != "" { return } } case *MapTypeExpr: - un = findUndefined(store, last, cx.Key) + un = findUndefined2(store, last, cx.Key, nil, skipPredefined) if un != "" { return } @@ -4177,33 +4177,33 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type) (un Name) { } case *StructTypeExpr: for i := range cx.Fields { - un = findUndefined(store, last, &cx.Fields[i]) + un = findUndefined2(store, last, &cx.Fields[i], nil, skipPredefined) if un != "" { return } } case *MaybeNativeTypeExpr: - un = findUndefined(store, last, cx.Type) + un = findUndefined2(store, last, cx.Type, nil, skipPredefined) if un != "" { return } case *CallExpr: - un = findUndefined(store, last, cx.Func) + un = findUndefined2(store, last, cx.Func, nil, skipPredefined) if un != "" { return } for i := range cx.Args { - un = findUndefined(store, last, cx.Args[i]) + un = findUndefined2(store, last, cx.Args[i], nil, skipPredefined) if un != "" { return } } case *IndexExpr: - un = findUndefined(store, last, cx.X) + un = findUndefined2(store, last, cx.X, nil, skipPredefined) if un != "" { return } - un = findUndefined(store, last, cx.Index) + un = findUndefined2(store, last, cx.Index, nil, skipPredefined) if un != "" { return } From dea7c863bdb97560934d39808b105d5f7487546d Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Sat, 14 Dec 2024 00:19:29 +0100 Subject: [PATCH 41/45] save --- gnovm/pkg/gnolang/preprocess.go | 241 +++++++++++++++++++++++++++++++- 1 file changed, 236 insertions(+), 5 deletions(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index dfac1e60b74..bc98f9b7af9 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -3781,7 +3781,7 @@ func findUndefined(store Store, last BlockNode, x Expr) (un Name) { // finds the next undefined identifier and returns it if it is global func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name { - name := findUndefined2(store, last, x, t, false) + name := findUndefinedGlobal(store, last, x, t) if name == "" { return "" @@ -3790,7 +3790,7 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name existsLocal := func(name Name, bn BlockNode) bool { curr := bn for { - currNames := bn.GetBlockNames() + currNames := curr.GetBlockNames() for _, currName := range currNames { if currName == name { @@ -3798,13 +3798,15 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name } } - if bn.GetStaticBlock().Source == curr { + curr = bn.GetStaticBlock().GetParentNode(store) + + if curr == nil { return false } - curr = bn.GetStaticBlock().GetParentNode(store) + _, isFile := curr.(*FileNode) - if curr == nil { + if isFile { return false } } @@ -4012,6 +4014,235 @@ func findUndefinedStmt(store Store, last BlockNode, stmt Stmt, t Type) Name { return "" } +func getGlobalValueRef(sb BlockNode, store Store, n Name) *TypedValue { + sbb := sb.GetStaticBlock() + idx, ok := sb.GetLocalIndex(n) + bb := &sb.GetStaticBlock().Block + bp := sb.GetParentNode(store) + + for { + if ok && sbb.Types[idx] != nil && (bp == nil || bp.GetParentNode(store) == nil) { + return bb.GetPointerToInt(store, int(idx)).TV + } else if bp != nil { + idx, ok = bp.GetLocalIndex(n) + sbb = bp.GetStaticBlock() + bb = sbb.GetBlock() + bp = bp.GetParentNode(store) + } else { + return nil + } + } +} + +func findUndefinedGlobal(store Store, last BlockNode, x Expr, t Type) (un Name) { + if x == nil { + return + } + switch cx := x.(type) { + case *NameExpr: + if tv := getGlobalValueRef(last, store, cx.Name); tv != nil { + return + } + + if _, ok := UverseNode().GetLocalIndex(cx.Name); ok { + // XXX NOTE even if the name is shadowed by a file + // level declaration, it is fine to return here as it + // will be predefined later. + return + } + + return cx.Name + case *BasicLitExpr: + return + case *BinaryExpr: + un = findUndefinedGlobal(store, last, cx.Left, nil) + if un != "" { + return + } + un = findUndefinedGlobal(store, last, cx.Right, nil) + if un != "" { + return + } + case *SelectorExpr: + return findUndefinedGlobal(store, last, cx.X, nil) + case *SliceExpr: + un = findUndefinedGlobal(store, last, cx.X, nil) + if un != "" { + return + } + if cx.Low != nil { + un = findUndefinedGlobal(store, last, cx.Low, nil) + if un != "" { + return + } + } + if cx.High != nil { + un = findUndefinedGlobal(store, last, cx.High, nil) + if un != "" { + return + } + } + if cx.Max != nil { + un = findUndefinedGlobal(store, last, cx.Max, nil) + if un != "" { + return + } + } + case *StarExpr: + return findUndefinedGlobal(store, last, cx.X, nil) + case *RefExpr: + return findUndefinedGlobal(store, last, cx.X, nil) + case *TypeAssertExpr: + un = findUndefinedGlobal(store, last, cx.X, nil) + if un != "" { + return + } + return findUndefinedGlobal(store, last, cx.Type, nil) + case *UnaryExpr: + return findUndefinedGlobal(store, last, cx.X, nil) + case *CompositeLitExpr: + var ct Type + if cx.Type == nil { + if t == nil { + panic("cannot elide unknown composite type") + } + ct = t + cx.Type = constType(cx, t) + } else { + un = findUndefinedGlobal(store, last, cx.Type, nil) + if un != "" { + return + } + // preprocess now for eliding purposes. + // TODO recursive preprocessing here is hacky, find a better + // way. This cannot be done asynchronously, cuz undefined + // names ought to be returned immediately to let the caller + // predefine it. + cx.Type = Preprocess(store, last, cx.Type).(Expr) // recursive + ct = evalStaticType(store, last, cx.Type) + // elide composite lit element (nested) composite types. + elideCompositeElements(cx, ct) + } + switch ct.Kind() { + case ArrayKind, SliceKind, MapKind: + for _, kvx := range cx.Elts { + un = findUndefinedGlobal(store, last, kvx.Key, nil) + if un != "" { + return + } + un = findUndefinedGlobal(store, last, kvx.Value, ct.Elem()) + if un != "" { + return + } + } + case StructKind: + for _, kvx := range cx.Elts { + un = findUndefinedGlobal(store, last, kvx.Value, nil) + if un != "" { + return + } + } + default: + panic(fmt.Sprintf( + "unexpected composite lit type %s", + ct.String())) + } + case *FuncLitExpr: + for _, stmt := range cx.Body { + un = findUndefinedStmt(store, cx, stmt, t) + + if un != "" { + return + } + } + return findUndefinedGlobal(store, last, &cx.Type, nil) + case *FieldTypeExpr: + return findUndefinedGlobal(store, last, cx.Type, nil) + case *ArrayTypeExpr: + if cx.Len != nil { + un = findUndefinedGlobal(store, last, cx.Len, nil) + if un != "" { + return + } + } + return findUndefinedGlobal(store, last, cx.Elt, nil) + case *SliceTypeExpr: + return findUndefinedGlobal(store, last, cx.Elt, nil) + case *InterfaceTypeExpr: + for i := range cx.Methods { + un = findUndefinedGlobal(store, last, &cx.Methods[i], nil) + if un != "" { + return + } + } + case *ChanTypeExpr: + return findUndefinedGlobal(store, last, cx.Value, nil) + case *FuncTypeExpr: + for i := range cx.Params { + un = findUndefinedGlobal(store, last, &cx.Params[i], nil) + if un != "" { + return + } + } + for i := range cx.Results { + un = findUndefinedGlobal(store, last, &cx.Results[i], nil) + if un != "" { + return + } + } + case *MapTypeExpr: + un = findUndefinedGlobal(store, last, cx.Key, nil) + if un != "" { + return + } + un = findUndefinedGlobal(store, last, cx.Value, nil) + if un != "" { + return + } + case *StructTypeExpr: + for i := range cx.Fields { + un = findUndefinedGlobal(store, last, &cx.Fields[i], nil) + if un != "" { + return + } + } + case *MaybeNativeTypeExpr: + un = findUndefinedGlobal(store, last, cx.Type, nil) + if un != "" { + return + } + case *CallExpr: + un = findUndefinedGlobal(store, last, cx.Func, nil) + if un != "" { + return + } + for i := range cx.Args { + un = findUndefinedGlobal(store, last, cx.Args[i], nil) + if un != "" { + return + } + } + case *IndexExpr: + un = findUndefinedGlobal(store, last, cx.X, nil) + if un != "" { + return + } + un = findUndefinedGlobal(store, last, cx.Index, nil) + if un != "" { + return + } + case *constTypeExpr: + return + case *ConstExpr: + return + default: + panic(fmt.Sprintf( + "unexpected expr: %v (%v)", + x, reflect.TypeOf(x))) + } + return +} + func findUndefined2(store Store, last BlockNode, x Expr, t Type, skipPredefined bool) (un Name) { if x == nil { return From 1b1868fc7269697891b2b58c0d63dd7540f1970f Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Sat, 14 Dec 2024 00:39:53 +0100 Subject: [PATCH 42/45] save --- gnovm/pkg/gnolang/preprocess.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index bc98f9b7af9..2837e4fe478 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -3798,7 +3798,13 @@ func findUndefined2SkipLocals(store Store, last BlockNode, x Expr, t Type) Name } } - curr = bn.GetStaticBlock().GetParentNode(store) + newcurr := bn.GetStaticBlock().GetParentNode(store) + + if curr == newcurr { + return false + } + + curr = newcurr if curr == nil { return false From 9152ea877aa878829c6dc519e764818487e47637 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Thu, 16 Jan 2025 16:25:50 +0100 Subject: [PATCH 43/45] save --- gnovm/pkg/gnolang/nodes.go | 1 + gnovm/pkg/gnolang/preprocess.go | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/gnovm/pkg/gnolang/nodes.go b/gnovm/pkg/gnolang/nodes.go index b85d1ac7026..0f1f4388623 100644 --- a/gnovm/pkg/gnolang/nodes.go +++ b/gnovm/pkg/gnolang/nodes.go @@ -157,6 +157,7 @@ const ( ATTR_LOOP_USES GnoAttribute = "ATTR_LOOP_USES" // []Name loop defines actually used. ATTR_SHIFT_RHS GnoAttribute = "ATTR_SHIFT_RHS" ATTR_LAST_BLOCK_STMT GnoAttribute = "ATTR_LAST_BLOCK_STMT" + ATTR_GLOBAL GnoAttribute = "ATTR_GLOBAL" ) type Attributes struct { diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 0f62665a09f..8d9015de037 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -516,6 +516,17 @@ func preprocess1(store Store, ctx BlockNode, n Node) Node { if cd, ok := d.(*ValueDecl); ok { checkValDefineMismatch(cd) } + + isGlobal := true + + for i := len(ns) - 1; i > 0; i-- { + if _, ok := ns[i].(*FuncDecl); ok { + isGlobal = false + } + } + + d.SetAttribute(ATTR_GLOBAL, isGlobal) + // recursively predefine dependencies. d2, ppd := predefineNow(store, last, d) if ppd { @@ -4364,13 +4375,16 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type, skipPredefined ct.String())) } case *FuncLitExpr: - for _, stmt := range cx.Body { - un = findUndefinedStmt(store, cx, stmt, t) + if cx.GetAttribute(ATTR_GLOBAL) == true { + for _, stmt := range cx.Body { + un = findUndefinedStmt(store, cx, stmt, t) - if un != "" { - return + if un != "" { + return + } } } + return findUndefined2(store, last, &cx.Type, nil, skipPredefined) case *FieldTypeExpr: return findUndefined2(store, last, cx.Type, nil, skipPredefined) From 4913c76f3be7d2d57418beefeb360f36055d29c4 Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Thu, 16 Jan 2025 17:52:03 +0100 Subject: [PATCH 44/45] save --- gnovm/pkg/gnolang/preprocess.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index 8d9015de037..d337706c7ed 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -129,6 +129,7 @@ func PredefineFileSet(store Store, pn *PackageNode, fset *FileSet) { continue } + d.SetAttribute(ATTR_GLOBAL, true) // recursively predefine dependencies. d2, _ := predefineNow(store, fn, d) @@ -4442,6 +4443,7 @@ func findUndefined2(store Store, last BlockNode, x Expr, t Type, skipPredefined return } case *CallExpr: + cx.Func.SetAttribute(ATTR_GLOBAL, cx.GetAttribute(ATTR_GLOBAL)) un = findUndefined2(store, last, cx.Func, nil, skipPredefined) if un != "" { return @@ -4732,6 +4734,7 @@ func tryPredefine(store Store, last BlockNode, d Decl) (un Name) { return } for _, vx := range d.Values { + vx.SetAttribute(ATTR_GLOBAL, d.GetAttribute(ATTR_GLOBAL)) un = findUndefined(store, last, vx) if un != "" { return From 2d3f37c26c7d755fb5ec4d2e0e53ae3f9458e8bb Mon Sep 17 00:00:00 2001 From: Petar Dambovaliev Date: Thu, 16 Jan 2025 18:28:44 +0100 Subject: [PATCH 45/45] save --- gnovm/pkg/gnolang/preprocess.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go index d337706c7ed..96e09642cd8 100644 --- a/gnovm/pkg/gnolang/preprocess.go +++ b/gnovm/pkg/gnolang/preprocess.go @@ -4575,8 +4575,12 @@ func predefineNow2(store Store, last BlockNode, d Decl, stack *[]Name) (Decl, bo if !file.IsInitialized() { panic("all types from files in file-set should have already been predefined") } + + declaration := *decl + declaration.SetAttribute(ATTR_GLOBAL, true) + // predefine dependency (recursive). - *decl, _ = predefineNow2(store, file, *decl, stack) + *decl, _ = predefineNow2(store, file, declaration, stack) } else { break }