diff options
author | Kyle Gunger <kgunger12@gmail.com> | 2022-12-14 17:22:16 -0500 |
---|---|---|
committer | Kyle Gunger <kgunger12@gmail.com> | 2022-12-14 17:22:16 -0500 |
commit | 0f1faa877167324c52f2626cebe335a85cae40d9 (patch) | |
tree | 51d91e7a9e9490f4b5f35bc79fc29be5a7e80b52 | |
parent | 64d8a228f4407bddea8be60e4657f04a49b1c35a (diff) |
Bugfix: Types in types
+ Fix for structs where a member's type was unable to be determined
-rw-r--r-- | src/texec/eval.go | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/texec/eval.go b/src/texec/eval.go index b0f4a47..47a379e 100644 --- a/src/texec/eval.go +++ b/src/texec/eval.go @@ -239,7 +239,7 @@ func searchNode(s TArtifact) (*tparse.Node, TArtifact) { return nil, tNull.T } -func searchDef(s TArtifact) *TVariable { +func searchDef(s TArtifact) (*TVariable, TArtifact) { // i-- because of reverse lookup for i := len(cart.Path); i >= 0; i-- { @@ -253,10 +253,13 @@ func searchDef(s TArtifact) *TVariable { ret := getDef(tst, s.Name) if ret != nil { - return ret + pth := []string{} + pth = append(pth, cart.Path[:i]...) + pth = append(pth, s.Path...) + return ret, TArtifact{ pth , s.Name } } } - return nil + return nil, tNull.T } // End block of complexity horror @@ -463,7 +466,7 @@ func getLiteralType(v tparse.Node) TType { // Convert Value to Struct from Array (cvsa) // USE ONLY IN THE CASE OF tStruct! func cvsa(sct TArtifact, dat []interface{}) VarMap { - sv := searchDef(sct) + sv, sct := searchDef(sct) old_c := cart cart = sct @@ -516,8 +519,7 @@ func cata(st TArtifact, dat []interface{}) []interface{} { // Copy struct to struct // Makes a deep copy of a struct. func csts(st TArtifact, dat VarMap) VarMap { - sv := searchDef(st) - + sv, st := searchDef(st) old_c := cart cart = st @@ -678,7 +680,7 @@ func resolveArtifact(a TArtifact, ctx *VarMap) *TVariable { val, prs := (*ctx)[a.Name] if !prs || len(a.Path) != 0 { // Try searching the modules for it - val = searchDef(a) + val, _ = searchDef(a) } return val } |