func (p *parser) initResolve() {
	p.varTypes = make(map[string]map[string]typeInfo)
	p.varTypes[""] = make(map[string]typeInfo)  
	p.functions = make(map[string]int)
	p.arrayRef("ARGV", Position{1, 1})  
	p.multiExprs = make(map[*MultiExpr]Position, 3)
}
Initialize the resolver
package parser
import (
	"fmt"
	"reflect"
	"sort"
	. "github.com/benhoyt/goawk/internal/ast"
	. "github.com/benhoyt/goawk/lexer"
)
type varType int
const (
	typeUnknown varType = iota
	typeScalar
	typeArray
)
func (t varType) String() string {
	switch t {
	case typeScalar:
		return "Scalar"
	case typeArray:
		return "Array"
	default:
		return "Unknown"
	}
}
type typeInfo struct {
	typ      varType
	ref      *VarExpr
	scope    VarScope
	index    int
	callName string
	argIndex int
}
func (t typeInfo) String() string {
	var scope string
	switch t.scope {
	case ScopeGlobal:
		scope = "Global"
	case ScopeLocal:
		scope = "Local"
	default:
		scope = "Special"
	}
	return fmt.Sprintf("typ=%s ref=%p scope=%s index=%d callName=%q argIndex=%d",
		t.typ, t.ref, scope, t.index, t.callName, t.argIndex)
}
type varRef struct {
	funcName string
	ref      *VarExpr
	isArg    bool
	pos      Position
}
type arrayRef struct {
	funcName string
	ref      *ArrayExpr
	pos      Position
}