go-vise

Constrained Size Output Virtual Machine
Info | Log | Files | Refs | README | LICENSE

debug.go (1090B)


      1 package state
      2 
      3 import (
      4 	"fmt"
      5 	"strings"
      6 )
      7 
      8 type flagDebugger struct {
      9 	flagStrings map[uint32]string
     10 }
     11 
     12 func newFlagDebugger() flagDebugger {
     13 	fd := flagDebugger{
     14 		flagStrings: make(map[uint32]string),
     15 	}
     16 	fd.register(FLAG_READIN, "INTERNAL_READIN")
     17 	fd.register(FLAG_INMATCH, "INTERNAL_INMATCH")
     18 	fd.register(FLAG_TERMINATE, "INTERNAL_TERMINATE")
     19 	fd.register(FLAG_DIRTY, "INTERNAL_DIRTY")
     20 	fd.register(FLAG_WAIT, "INTERNAL_WAIT")
     21 	fd.register(FLAG_LOADFAIL, "INTERNAL_LOADFAIL")
     22 	return fd
     23 }
     24 
     25 func(fd *flagDebugger) register(flag uint32, name string) {
     26 	fd.flagStrings[flag] = name
     27 }
     28 
     29 func(fd *flagDebugger) Register(flag uint32, name string) error {
     30 	if (flag < 8) {
     31 		return fmt.Errorf("flag %v is not definable by user", flag)
     32 	}
     33 	fd.register(flag, name)
     34 	return nil
     35 }
     36 
     37 func(fd *flagDebugger) AsString(flags []byte, length uint32) string {
     38 	var r []string
     39 	var i uint32
     40 	for i = 0; i < length + 8; i++ {
     41 		if getFlag(i, flags) {
     42 			s := fmt.Sprintf("%s(%v)", fd.flagStrings[i], i)
     43 			r = append(r, s)
     44 		}
     45 	}
     46 	return strings.Join(r, ",")
     47 }
     48 
     49 var (
     50 	FlagDebugger = newFlagDebugger()
     51 )