github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/lang/expressions/ast_test.go (about)

     1  package expressions
     2  
     3  import "fmt"
     4  
     5  func (tree *ParserT) Dump() interface{} {
     6  	var (
     7  		dump  = make(map[string]interface{})
     8  		nodes = make([]interface{}, len(tree.ast))
     9  	)
    10  
    11  	for i := range tree.ast {
    12  		node := make(map[string]interface{})
    13  		node["key"] = tree.ast[i].key.String()
    14  		node["value"] = tree.ast[i].Value()
    15  		node["pos"] = tree.ast[i].pos
    16  		if tree.ast[i].dt != nil {
    17  			dt, err := tree.ast[i].dt.GetValue()
    18  			if err == nil && dt != nil {
    19  				node["dt.prim"] = dt.Primitive.String()
    20  				node["dt.murex"] = dt.DataType
    21  				node["dt.value"] = dt.Value
    22  			} else {
    23  				node["dt"] = fmt.Sprintf("%v", err)
    24  			}
    25  		} else {
    26  			node["dt"] = "unset"
    27  		}
    28  
    29  		nodes[i] = node
    30  	}
    31  
    32  	dump["ast"] = nodes
    33  	dump["charPos"] = tree.charPos
    34  	dump["charOffset"] = tree.charOffset
    35  	dump["astPos"] = tree.astPos
    36  	dump["expression"] = string(tree.expression)
    37  	dump["statement"] = map[string]interface{}{
    38  		"command":    tree.statement.String(),
    39  		"parameters": tree.statement.Parameters(),
    40  	}
    41  
    42  	return dump
    43  }