github.com/consensys/gnark@v0.11.0/constraint/debug_info.go (about)

     1  package constraint
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/consensys/gnark/internal/utils"
     7  )
     8  
     9  type DebugInfo LogEntry
    10  
    11  func (system *System) NewDebugInfo(errName string, i ...interface{}) DebugInfo {
    12  	var l LogEntry
    13  
    14  	const minLogSize = 500
    15  	var sbb strings.Builder
    16  	sbb.Grow(minLogSize)
    17  	sbb.WriteString("[")
    18  	sbb.WriteString(errName)
    19  	sbb.WriteString("] ")
    20  
    21  	for _, _i := range i {
    22  		switch v := _i.(type) {
    23  		case LinearExpression:
    24  			l.WriteVariable(v, &sbb)
    25  		case string:
    26  			sbb.WriteString(v)
    27  		case Term:
    28  			l.WriteVariable(LinearExpression{v}, &sbb)
    29  		default:
    30  			_v := utils.FromInterface(v)
    31  			sbb.WriteString(_v.String())
    32  		}
    33  	}
    34  	sbb.WriteByte('\n')
    35  	sbb.WriteString("%s\n") // some space for the stack.
    36  	l.Format = sbb.String()
    37  
    38  	// get the stack
    39  	l.Stack = system.SymbolTable.CollectStack()
    40  
    41  	return DebugInfo(l)
    42  }