mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-12 09:29:07 +02:00
pastojs: number literals: remove leading zeroes
git-svn-id: trunk@38900 -
This commit is contained in:
parent
c618822648
commit
50564747b2
@ -6185,6 +6185,23 @@ end;
|
|||||||
function TPasToJSConverter.ConvertPrimitiveExpression(El: TPrimitiveExpr;
|
function TPasToJSConverter.ConvertPrimitiveExpression(El: TPrimitiveExpr;
|
||||||
AContext: TConvertContext): TJSElement;
|
AContext: TConvertContext): TJSElement;
|
||||||
|
|
||||||
|
function DeleteLeadingZeroes(const s: string): string;
|
||||||
|
// Note: 01 is in JS octal, and in strict mode forbidden
|
||||||
|
var
|
||||||
|
i: Integer;
|
||||||
|
begin
|
||||||
|
Result:=s;
|
||||||
|
i:=1;
|
||||||
|
while i<length(Result) do
|
||||||
|
begin
|
||||||
|
if (Result[i]='0') and (Result[i+1] in ['0'..'9'])
|
||||||
|
and ((i=1) or not (Result[i-1] in ['.','0'..'9'])) then
|
||||||
|
Delete(Result,i,1)
|
||||||
|
else
|
||||||
|
inc(i);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
L : TJSLiteral;
|
L : TJSLiteral;
|
||||||
Number : TJSNumber;
|
Number : TJSNumber;
|
||||||
@ -6219,7 +6236,7 @@ begin
|
|||||||
if ConversionError<>0 then
|
if ConversionError<>0 then
|
||||||
DoError(20161024191248,nInvalidNumber,sInvalidNumber,[El.Value],El);
|
DoError(20161024191248,nInvalidNumber,sInvalidNumber,[El.Value],El);
|
||||||
L:=CreateLiteralNumber(El,Number);
|
L:=CreateLiteralNumber(El,Number);
|
||||||
L.Value.CustomValue:=TJSString(El.Value);
|
L.Value.CustomValue:=TJSString(DeleteLeadingZeroes(El.Value));
|
||||||
end;
|
end;
|
||||||
'$','&','%':
|
'$','&','%':
|
||||||
begin
|
begin
|
||||||
@ -6231,7 +6248,7 @@ begin
|
|||||||
// number was rounded -> we lost precision
|
// number was rounded -> we lost precision
|
||||||
DoError(20161024230812,nInvalidNumber,sInvalidNumber,[El.Value],El);
|
DoError(20161024230812,nInvalidNumber,sInvalidNumber,[El.Value],El);
|
||||||
L:=CreateLiteralNumber(El,Number);
|
L:=CreateLiteralNumber(El,Number);
|
||||||
S:=copy(El.Value,2,length(El.Value));
|
S:=DeleteLeadingZeroes(copy(El.Value,2,length(El.Value)));
|
||||||
case El.Value[1] of
|
case El.Value[1] of
|
||||||
'$': S:='0x'+S;
|
'$': S:='0x'+S;
|
||||||
'&': if TargetProcessor=ProcessorECMAScript5 then
|
'&': if TargetProcessor=ProcessorECMAScript5 then
|
||||||
@ -6239,7 +6256,7 @@ begin
|
|||||||
else
|
else
|
||||||
S:='0o'+S;
|
S:='0o'+S;
|
||||||
'%': if TargetProcessor=ProcessorECMAScript5 then
|
'%': if TargetProcessor=ProcessorECMAScript5 then
|
||||||
S:=''
|
S:='' // use decimal
|
||||||
else
|
else
|
||||||
S:='0b'+S;
|
S:='0b'+S;
|
||||||
end;
|
end;
|
||||||
@ -16006,7 +16023,7 @@ begin
|
|||||||
else if C=TPasRecordType then
|
else if C=TPasRecordType then
|
||||||
Result:=CreateRecordInit(TPasRecordType(T),Expr,El,AContext)
|
Result:=CreateRecordInit(TPasRecordType(T),Expr,El,AContext)
|
||||||
else if Assigned(Expr) then
|
else if Assigned(Expr) then
|
||||||
// if there is an expression then simply convert the it
|
// if there is an expression then simply convert it
|
||||||
Result:=ConvertElement(Expr,AContext)
|
Result:=ConvertElement(Expr,AContext)
|
||||||
else if C=TPasSetType then
|
else if C=TPasSetType then
|
||||||
// a "set" without initial value
|
// a "set" without initial value
|
||||||
|
@ -1994,29 +1994,31 @@ begin
|
|||||||
Add(' i5: nativeint = -4503599627370496;');
|
Add(' i5: nativeint = -4503599627370496;');
|
||||||
Add(' i6: nativeint = $fffffffffffff;');
|
Add(' i6: nativeint = $fffffffffffff;');
|
||||||
Add(' i7: nativeint = -$10000000000000;');
|
Add(' i7: nativeint = -$10000000000000;');
|
||||||
|
Add(' i8: byte = 00;');
|
||||||
Add(' u8: nativeuint = $fffffffffffff;');
|
Add(' u8: nativeuint = $fffffffffffff;');
|
||||||
Add(' u9: nativeuint = $0000000000000;');
|
Add(' u9: nativeuint = $0000000000000;');
|
||||||
Add('begin');
|
Add('begin');
|
||||||
ConvertProgram;
|
ConvertProgram;
|
||||||
CheckSource('TestVarBaseTypes',
|
CheckSource('TestVarBaseTypes',
|
||||||
LinesToStr([
|
LinesToStr([
|
||||||
'this.i=0;',
|
'this.i = 0;',
|
||||||
'this.s="";',
|
'this.s = "";',
|
||||||
'this.c="";',
|
'this.c = "";',
|
||||||
'this.b=false;',
|
'this.b = false;',
|
||||||
'this.d=0.0;',
|
'this.d = 0.0;',
|
||||||
'this.i2=3;',
|
'this.i2 = 3;',
|
||||||
'this.s2="foo";',
|
'this.s2 = "foo";',
|
||||||
'this.c2="4";',
|
'this.c2 = "4";',
|
||||||
'this.b2=true;',
|
'this.b2 = true;',
|
||||||
'this.d2=5.6;',
|
'this.d2 = 5.6;',
|
||||||
'this.i3=0x707;',
|
'this.i3 = 0x707;',
|
||||||
'this.i4= 4503599627370495;',
|
'this.i4 = 4503599627370495;',
|
||||||
'this.i5= -4503599627370496;',
|
'this.i5 = -4503599627370496;',
|
||||||
'this.i6= 0xfffffffffffff;',
|
'this.i6 = 0xfffffffffffff;',
|
||||||
'this.i7=-0x10000000000000;',
|
'this.i7 =-0x10000000000000;',
|
||||||
'this.u8= 0xfffffffffffff;',
|
'this.i8 = 0;',
|
||||||
'this.u9= 0x0000000000000;'
|
'this.u8 = 0xfffffffffffff;',
|
||||||
|
'this.u9 = 0x0000000000000;'
|
||||||
]),
|
]),
|
||||||
'');
|
'');
|
||||||
end;
|
end;
|
||||||
@ -4831,6 +4833,10 @@ begin
|
|||||||
' d:=1/3;',
|
' d:=1/3;',
|
||||||
' d:=5.0E-324;',
|
' d:=5.0E-324;',
|
||||||
' d:=1.7E308;',
|
' d:=1.7E308;',
|
||||||
|
' d:=001.00E00;',
|
||||||
|
' d:=002.00E001;',
|
||||||
|
' d:=-003.00E-00;',
|
||||||
|
' d:=-004.00E-001;',
|
||||||
' d:=10**3;',
|
' d:=10**3;',
|
||||||
' d:=10 mod 3;',
|
' d:=10 mod 3;',
|
||||||
' d:=10 div 3;',
|
' d:=10 div 3;',
|
||||||
@ -4883,6 +4889,10 @@ begin
|
|||||||
'$mod.d = 1 / 3;',
|
'$mod.d = 1 / 3;',
|
||||||
'$mod.d = 5.0E-324;',
|
'$mod.d = 5.0E-324;',
|
||||||
'$mod.d = 1.7E308;',
|
'$mod.d = 1.7E308;',
|
||||||
|
'$mod.d = 1.00E0;',
|
||||||
|
'$mod.d = 2.00E1;',
|
||||||
|
'$mod.d = -3.00E-0;',
|
||||||
|
'$mod.d = -4.00E-1;',
|
||||||
'$mod.d = Math.pow(10, 3);',
|
'$mod.d = Math.pow(10, 3);',
|
||||||
'$mod.d = 10 % 3;',
|
'$mod.d = 10 % 3;',
|
||||||
'$mod.d = Math.floor(10 / 3);',
|
'$mod.d = Math.floor(10 / 3);',
|
||||||
|
Loading…
Reference in New Issue
Block a user