lang: ast: Add more context to table errors

This makes debugging easier. We don't expect these errors to occur with
normal usage.
This commit is contained in:
James Shubin
2025-03-05 13:24:07 -05:00
parent 2899bc234a
commit a549a30f71

View File

@@ -744,7 +744,7 @@ func (obj *StmtRes) Output(table map[interfaces.Func]types.Value) (*interfaces.O
} }
nameValue, exists := table[obj.namePtr] nameValue, exists := table[obj.namePtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
names := []string{} // list of names to build names := []string{} // list of names to build
@@ -822,7 +822,7 @@ func (obj *StmtRes) resource(table map[interfaces.Func]types.Value, resName stri
} }
b, exists := table[x.conditionPtr] b, exists := table[x.conditionPtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
if !b.Bool() { // if value exists, and is false, skip it if !b.Bool() { // if value exists, and is false, skip it
@@ -870,7 +870,7 @@ func (obj *StmtRes) resource(table map[interfaces.Func]types.Value, resName stri
} }
fv, exists := table[x.valuePtr] fv, exists := table[x.valuePtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
// mutate the struct field f with the mcl data in fv // mutate the struct field f with the mcl data in fv
@@ -902,7 +902,7 @@ func (obj *StmtRes) edges(table map[interfaces.Func]types.Value, resName string)
} }
b, exists := table[x.conditionPtr] b, exists := table[x.conditionPtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
if !b.Bool() { // if value exists, and is false, skip it if !b.Bool() { // if value exists, and is false, skip it
@@ -915,7 +915,7 @@ func (obj *StmtRes) edges(table map[interfaces.Func]types.Value, resName string)
} }
nameValue, exists := table[x.EdgeHalf.namePtr] nameValue, exists := table[x.EdgeHalf.namePtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
// the edge name can be a single string or a list of strings... // the edge name can be a single string or a list of strings...
@@ -1045,7 +1045,7 @@ func (obj *StmtRes) metaparams(table map[interfaces.Func]types.Value, res engine
} }
b, exists := table[x.conditionPtr] b, exists := table[x.conditionPtr]
if !exists { if !exists {
return ErrTableNoValue return fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
if !b.Bool() { // if value exists, and is false, skip it if !b.Bool() { // if value exists, and is false, skip it
@@ -1058,7 +1058,7 @@ func (obj *StmtRes) metaparams(table map[interfaces.Func]types.Value, res engine
} }
v, exists := table[x.metaExprPtr] v, exists := table[x.metaExprPtr]
if !exists { if !exists {
return ErrTableNoValue return fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
switch p := strings.ToLower(x.Property); p { switch p := strings.ToLower(x.Property); p {
@@ -2383,7 +2383,7 @@ func (obj *StmtEdge) Output(table map[interfaces.Func]types.Value) (*interfaces.
} }
nameValue1, exists := table[obj.EdgeHalfList[i].namePtr] nameValue1, exists := table[obj.EdgeHalfList[i].namePtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
// the edge name can be a single string or a list of strings... // the edge name can be a single string or a list of strings...
@@ -2410,7 +2410,7 @@ func (obj *StmtEdge) Output(table map[interfaces.Func]types.Value) (*interfaces.
} }
nameValue2, exists := table[obj.EdgeHalfList[i+1].namePtr] nameValue2, exists := table[obj.EdgeHalfList[i+1].namePtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
names2 := []string{} // list of names to build names2 := []string{} // list of names to build
@@ -2966,7 +2966,7 @@ func (obj *StmtIf) Output(table map[interfaces.Func]types.Value) (*interfaces.Ou
} }
b, exists := table[obj.conditionPtr] b, exists := table[obj.conditionPtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
var output *interfaces.Output var output *interfaces.Output
@@ -3473,7 +3473,7 @@ func (obj *StmtFor) Output(table map[interfaces.Func]types.Value) (*interfaces.O
} }
expr, exists := table[obj.exprPtr] expr, exists := table[obj.exprPtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
if obj.Body == nil { // logically body is optional if obj.Body == nil { // logically body is optional
@@ -3972,7 +3972,7 @@ func (obj *StmtForKV) Output(table map[interfaces.Func]types.Value) (*interfaces
} }
expr, exists := table[obj.exprPtr] expr, exists := table[obj.exprPtr]
if !exists { if !exists {
return nil, ErrTableNoValue return nil, fmt.Errorf("%w: %T", ErrTableNoValue, obj)
} }
if obj.Body == nil { // logically body is optional if obj.Body == nil { // logically body is optional