MCPcopy Create free account
hub / github.com/microsoft/typescript-go / scanNumber

Method scanNumber

internal/scanner/scanner.go:1944–2042  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1942}
1943
1944func (s *Scanner) scanNumber() ast.Kind {
1945 start := s.pos
1946 var fixedPart string
1947 if s.char() == '0' {
1948 s.pos++
1949 if s.char() == '_' {
1950 s.tokenFlags |= ast.TokenFlagsContainsSeparator | ast.TokenFlagsContainsInvalidSeparator
1951 s.errorAt(diagnostics.Numeric_separators_are_not_allowed_here, s.pos, 1)
1952 s.pos = start
1953 fixedPart = s.scanNumberFragment()
1954 } else {
1955 digits, isOctal := s.scanDigits()
1956 if digits == "" {
1957 fixedPart = "0"
1958 } else if !isOctal {
1959 s.tokenFlags |= ast.TokenFlagsContainsLeadingZero
1960 fixedPart = digits
1961 } else {
1962 val, _ := strconv.ParseInt(digits, 8, 64)
1963 s.tokenValue = strconv.FormatInt(val, 10)
1964 s.tokenFlags |= ast.TokenFlagsOctal
1965 withMinus := s.token == ast.KindMinusToken
1966 literal := core.IfElse(withMinus, "-", "") + "0o" + strconv.FormatInt(val, 8)
1967 if withMinus {
1968 start--
1969 }
1970 s.errorAt(diagnostics.Octal_literals_are_not_allowed_Use_the_syntax_0, start, s.pos-start, literal)
1971 return ast.KindNumericLiteral
1972 }
1973 }
1974 } else {
1975 fixedPart = s.scanNumberFragment()
1976 }
1977 fixedPartEnd := s.pos
1978 fractionalPart := ""
1979 exponentPreamble := ""
1980 exponentPart := ""
1981 if s.char() == '.' {
1982 s.pos++
1983 fractionalPart = s.scanNumberFragment()
1984 }
1985 end := s.pos
1986 if s.char() == 'E' || s.char() == 'e' {
1987 s.pos++
1988 s.tokenFlags |= ast.TokenFlagsScientific
1989 if s.char() == '+' || s.char() == '-' {
1990 s.pos++
1991 }
1992 startNumericPart := s.pos
1993 exponentPart = s.scanNumberFragment()
1994 if exponentPart == "" {
1995 s.error(diagnostics.Digit_expected)
1996 } else {
1997 exponentPreamble = s.text[end:startNumericPart]
1998 end = s.pos
1999 }
2000 }
2001 if s.tokenFlags&ast.TokenFlagsContainsSeparator != 0 {

Callers 1

ScanMethod · 0.95

Calls 13

charMethod · 0.95
errorAtMethod · 0.95
scanNumberFragmentMethod · 0.95
scanDigitsMethod · 0.95
errorMethod · 0.95
scanBigIntSuffixMethod · 0.95
charAndSizeMethod · 0.95
scanIdentifierPartsMethod · 0.95
IfElseFunction · 0.92
FromStringFunction · 0.92
IsIdentifierStartFunction · 0.85
lenFunction · 0.85

Tested by

no test coverage detected