mirror of https://github.com/buggins/dlangide.git
Merge branch 'master' of github.com:buggins/dlangide
This commit is contained in:
commit
91591afb65
|
@ -2029,39 +2029,40 @@ class Tokenizer
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Token processDecNumber(dchar c) {
|
protected Token processDecNumber(dchar c) {
|
||||||
_pos--;
|
|
||||||
_sharedIntegerToken.setPos(_startLine, _startPos);
|
_sharedIntegerToken.setPos(_startLine, _startPos);
|
||||||
_sharedRealToken.setPos(_startLine, _startPos);
|
_sharedRealToken.setPos(_startLine, _startPos);
|
||||||
if (_pos >= _len)
|
//if (_pos >= _len)
|
||||||
return parserError("Unexpected end of line in number", _sharedIntegerToken);
|
// return parserError("Unexpected end of line in number", _sharedIntegerToken);
|
||||||
int digits = 0;
|
int digits = 1;
|
||||||
ulong number = 0;
|
ulong number = c - '0';
|
||||||
int i = _pos;
|
int i = _pos;
|
||||||
bool overflow = false;
|
bool overflow = false;
|
||||||
for (;i < _len; i++) {
|
if (_line == _startLine) {
|
||||||
dchar ch = _lineText[i];
|
for (;i < _len; i++) {
|
||||||
uint digit = 0;
|
dchar ch = _lineText[i];
|
||||||
if (ch >= '0' && ch <= '9')
|
uint digit = 0;
|
||||||
digit = ch - '0';
|
if (ch >= '0' && ch <= '9')
|
||||||
else if (ch == '_')
|
digit = ch - '0';
|
||||||
continue;
|
else if (ch == '_')
|
||||||
else
|
continue;
|
||||||
break;
|
else
|
||||||
number *= 10;
|
|
||||||
if (digits >= 18) {
|
|
||||||
if ((number * 10) / 10 != number) {
|
|
||||||
overflow = true;
|
|
||||||
break;
|
break;
|
||||||
|
number *= 10;
|
||||||
|
if (digits >= 18) {
|
||||||
|
if ((number * 10) / 10 != number) {
|
||||||
|
overflow = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
number += digit;
|
||||||
|
digits++;
|
||||||
}
|
}
|
||||||
number += digit;
|
_pos = i;
|
||||||
digits++;
|
|
||||||
}
|
}
|
||||||
_pos = i;
|
|
||||||
if (overflow)
|
if (overflow)
|
||||||
return parserError("number is too big to fit 64 bits", _sharedIntegerToken);
|
return parserError("number is too big to fit 64 bits", _sharedIntegerToken);
|
||||||
_sharedIntegerToken.setValue(number);
|
_sharedIntegerToken.setValue(number);
|
||||||
dchar next = _pos < _len ? _lineText[_pos] : 0;
|
dchar next = _line == _startLine && _pos < _len ? _lineText[_pos] : 0;
|
||||||
if (next == 0)
|
if (next == 0)
|
||||||
return _sharedIntegerToken;
|
return _sharedIntegerToken;
|
||||||
if (next == 'e' || next == 'E') {
|
if (next == 'e' || next == 'E') {
|
||||||
|
|
Loading…
Reference in New Issue