demangle.go
func (st *state) number() int {
	neg := false
	if len(st.str) > 0 && st.str[0] == 'n' {
		neg = true
		st.advance(1)
	}
	if len(st.str) == 0 || !isDigit(st.str[0]) {
		st.fail("missing number")
	}
	val := 0
	for len(st.str) > 0 && isDigit(st.str[0]) {
		// Number picked to ensure we can't overflow with 32-bit int.
		// Any very large number here is bogus.
		if val >= 0x80000000/10-10 {
			st.fail("numeric overflow")
		}
		val = val*10 + int(st.str[0]-'0')
		st.advance(1)
	}
	if neg {
		val = -val
	}
	return val
}
func (st *state) number() int {
	neg := false
	if len(st.str) > 0 && st.str[0] == 'n' {
		neg = true
		st.advance(1)
	}
	if len(st.str) == 0 || !isDigit(st.str[0]) {
		st.fail("missing number")
	}
	val := 0
	for len(st.str) > 0 && isDigit(st.str[0]) {
		// Number picked to ensure we can't overflow with 32-bit int.
		// Any very large number here is bogus.
		if val >= 0x80000000/10-10 {
			st.fail("numeric overflow")
		}
		val = val*10 + int(st.str[0]-'0')
		st.advance(1)
	}
	if neg {
		val = -val
	}
	return val
}
func ( st * state ) number ( ) int { neg := false if len ( st . str ) > 0 && st . str [ 0 ] == 'n' { neg = true st . advance ( 1 ) } if len ( st . str ) == 0 || ! isDigit ( st . str [ 0 ] ) { st . fail ( " " ) } val := 0 for len ( st . str ) > 0 && isDigit ( st . str [ 0 ] ) { // Number picked to ensure we can't overflow with 32-bit int. // Any very large number here is bogus. if val >= 0x80000000 / 10 - 10 { st . fail ( " " ) } val = val * 10 + int ( st . str [ 0 ] - '0' ) st . advance ( 1 ) } if neg { val = - val } return val }
// number ::= [n] <(non-negative decimal integer)>
number :: = [ n ] < ( non - negative decimal integer ) >