vendor/github.com/pelletier/go-toml/parser.go
changeset 260 445e01aede7e
parent 256 6d9efbef00a9
equal deleted inserted replaced
259:db4911b0c721 260:445e01aede7e
   291 		return math.Inf(1)
   291 		return math.Inf(1)
   292 	case tokenNan:
   292 	case tokenNan:
   293 		return math.NaN()
   293 		return math.NaN()
   294 	case tokenInteger:
   294 	case tokenInteger:
   295 		cleanedVal := cleanupNumberToken(tok.val)
   295 		cleanedVal := cleanupNumberToken(tok.val)
   296 		var err error
   296 		base := 10
   297 		var val int64
   297 		s := cleanedVal
       
   298 		checkInvalidUnderscore := numberContainsInvalidUnderscore
   298 		if len(cleanedVal) >= 3 && cleanedVal[0] == '0' {
   299 		if len(cleanedVal) >= 3 && cleanedVal[0] == '0' {
   299 			switch cleanedVal[1] {
   300 			switch cleanedVal[1] {
   300 			case 'x':
   301 			case 'x':
   301 				err = hexNumberContainsInvalidUnderscore(tok.val)
   302 				checkInvalidUnderscore = hexNumberContainsInvalidUnderscore
   302 				if err != nil {
   303 				base = 16
   303 					p.raiseError(tok, "%s", err)
       
   304 				}
       
   305 				val, err = strconv.ParseInt(cleanedVal[2:], 16, 64)
       
   306 			case 'o':
   304 			case 'o':
   307 				err = numberContainsInvalidUnderscore(tok.val)
   305 				base = 8
   308 				if err != nil {
       
   309 					p.raiseError(tok, "%s", err)
       
   310 				}
       
   311 				val, err = strconv.ParseInt(cleanedVal[2:], 8, 64)
       
   312 			case 'b':
   306 			case 'b':
   313 				err = numberContainsInvalidUnderscore(tok.val)
   307 				base = 2
   314 				if err != nil {
       
   315 					p.raiseError(tok, "%s", err)
       
   316 				}
       
   317 				val, err = strconv.ParseInt(cleanedVal[2:], 2, 64)
       
   318 			default:
   308 			default:
   319 				panic("invalid base") // the lexer should catch this first
   309 				panic("invalid base") // the lexer should catch this first
   320 			}
   310 			}
   321 		} else {
   311 			s = cleanedVal[2:]
   322 			err = numberContainsInvalidUnderscore(tok.val)
   312 		}
   323 			if err != nil {
   313 
   324 				p.raiseError(tok, "%s", err)
   314 		err := checkInvalidUnderscore(tok.val)
   325 			}
       
   326 			val, err = strconv.ParseInt(cleanedVal, 10, 64)
       
   327 		}
       
   328 		if err != nil {
   315 		if err != nil {
   329 			p.raiseError(tok, "%s", err)
   316 			p.raiseError(tok, "%s", err)
   330 		}
   317 		}
   331 		return val
   318 
       
   319 		var val interface{}
       
   320 		val, err = strconv.ParseInt(s, base, 64)
       
   321 		if err == nil {
       
   322 			return val
       
   323 		}
       
   324 
       
   325 		if s[0] != '-' {
       
   326 			if val, err = strconv.ParseUint(s, base, 64); err == nil {
       
   327 				return val
       
   328 			}
       
   329 		}
       
   330 		p.raiseError(tok, "%s", err)
   332 	case tokenFloat:
   331 	case tokenFloat:
   333 		err := numberContainsInvalidUnderscore(tok.val)
   332 		err := numberContainsInvalidUnderscore(tok.val)
   334 		if err != nil {
   333 		if err != nil {
   335 			p.raiseError(tok, "%s", err)
   334 			p.raiseError(tok, "%s", err)
   336 		}
   335 		}