func (m *Mux) Compile() {
	m.rt.compile()
}
Compile the list of routes into bytecode. This only needs to be done once
after all the routes have been added, and will be called automatically for
you (at some performance cost on the first request) if you do not call it
explicitly.
package web
import (
	"net/http"
)
type Mux struct {
	ms mStack
	rt router
}
func New() *Mux {
	mux := Mux{
		ms: mStack{
			stack: make([]mLayer, 0),
			pool:  makeCPool(),
		},
		rt: router{
			routes:   make([]route, 0),
			notFound: parseHandler(http.NotFound),
		},
	}
	mux.ms.router = &mux.rt
	return &mux
}
func (m *Mux) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	stack := m.ms.alloc()
	stack.ServeHTTP(w, r)
	m.ms.release(stack)
}
func (m *Mux) ServeHTTPC(c C, w http.ResponseWriter, r *http.Request) {
	stack := m.ms.alloc()
	stack.ServeHTTPC(c, w, r)
	m.ms.release(stack)
}
func (m *Mux) Use(middleware interface{}) {
	m.ms.Use(middleware)
}
func (m *Mux) Insert(middleware, before interface{}) error {
	return m.ms.Insert(middleware, before)
}
func (m *Mux) Abandon(middleware interface{}) error {
	return m.ms.Abandon(middleware)
}
func (m *Mux) Handle(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mALL, handler)
}
func (m *Mux) Connect(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mCONNECT, handler)
}
func (m *Mux) Delete(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mDELETE, handler)
}
func (m *Mux) Get(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mGET|mHEAD, handler)
}
func (m *Mux) Head(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mHEAD, handler)
}
func (m *Mux) Options(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mOPTIONS, handler)
}
func (m *Mux) Patch(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mPATCH, handler)
}
func (m *Mux) Post(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mPOST, handler)
}
func (m *Mux) Put(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mPUT, handler)
}
func (m *Mux) Trace(pattern interface{}, handler interface{}) {
	m.rt.handleUntyped(pattern, mTRACE, handler)
}
func (m *Mux) NotFound(handler interface{}) {
	m.rt.notFound = parseHandler(handler)
}