* Compact arrays/object literals and func. arguments

git-svn-id: trunk@27457 -
This commit is contained in:
michael 2014-04-03 20:17:26 +00:00
parent dd8f4eccf2
commit 910e5ff888
3 changed files with 104 additions and 135 deletions

View File

@ -75,7 +75,10 @@ Type
woUseUTF8,
woTabIndent,
woEmptyStatementAsComment,
woQuoteElementNames);
woQuoteElementNames,
woCompactArrayLiterals,
woCompactObjectLiterals,
woCompactArguments);
TWriteOptions = Set of TWriteOption;
TJSWriter = Class
@ -532,20 +535,24 @@ Var
Var
i,C : Integer;
WC : Boolean;
isArgs,WC : Boolean;
BC : String[2];
begin
BC:=Chars[El is TJSArguments];
isArgs:=el is TJSArguments;
BC:=Chars[isArgs];
C:=EL.Elements.Count-1;
if C=-1 then
begin
if el is TJSArguments then
if isArgs then
Write(bc)
else
Write(bc);
Exit;
end;
WC:=(woCompact in Options);
WC:=(woCompact in Options) or
((Not isArgs) and (woCompactArrayLiterals in Options)) or
(isArgs and (woCompactArguments in Options)) ;
if WC then
Write(Copy(BC,1,1))
else
@ -584,7 +591,7 @@ begin
Write('{}');
Exit;
end;
WC:=(woCompact in Options);
WC:=(woCompact in Options) or (woCompactObjectLiterals in Options);
if WC then
Write('{')
else

View File

@ -63,6 +63,7 @@ type
Procedure TestArrayOneElementIndent;
Procedure TestArrayTwoElements;
Procedure TestArrayTwoElementsCompact;
Procedure TestArrayTwoElementsCompact2;
Procedure TestArrayThreeElementsCompact;
Procedure TestObjectEmpty;
Procedure TestObjectEmptyCompact;
@ -72,6 +73,7 @@ type
Procedure TestObjectOneElementCompactQuoted;
Procedure TestObjectTwoElements;
Procedure TestObjectTwoElementCompact;
Procedure TestObjectTwoElementCompact2;
Procedure TestObjectTwoElementCompactQuoted;
Procedure TestObjectThreeElementsCompact;
end;
@ -246,6 +248,7 @@ type
Procedure TestNewMemberNoArgs;
Procedure TestCall;
Procedure TestCallCompact;
Procedure TestCallCompact2;
Procedure TestCallNoArgs;
Procedure TestConditional;
Procedure TestRegularExpressionLiteral;
@ -680,6 +683,23 @@ begin
AssertWrite('call a(123)','a(123)',U);
end;
Procedure TTestExpressionWriter.TestCallCompact2;
Var
U : TJSCallExpression;
begin
Writer.Options:=Writer.Options+[woCompactArguments];
U:=TJSCallExpression.Create(0,0);
U.Expr:=CreateIdent('a');
U.Args:=TJSArguments.Create(0,0);
U.Args.Elements.AddElement;
U.Args.Elements[0].Expr:=CreateLiteral(123);
U.Args.Elements.AddElement;
U.Args.Elements[1].Expr:=CreateLiteral(456);
AssertWrite('call a(123,456)','a(123, 456)',U);
end;
Procedure TTestExpressionWriter.TestCallNoArgs;
Var
U : TJSCallExpression;
@ -2081,6 +2101,23 @@ begin
AssertWrite('Empty array ','[1, 2]',L);
end;
Procedure TTestLiteralWriter.TestArrayTwoElementsCompact2;
Var
L : TJSArrayLiteral;
I : TJSLiteral;
begin
Writer.Options:=[woCompactArrayLiterals,woUseUTF8];
L:=TJSArrayLiteral.Create(0,0);
I:=TJSLiteral.Create(0,0);
I.Value.AsNumber:=1;
L.Elements.AddElement.Expr:=I;
I:=TJSLiteral.Create(0,0);
I.Value.AsNumber:=2;
L.Elements.AddElement.Expr:=I;
AssertWrite('Empty array ','[1, 2]',L);
end;
Procedure TTestLiteralWriter.TestArrayThreeElementsCompact;
Var
L : TJSArrayLiteral;
@ -2234,6 +2271,28 @@ begin
AssertWrite('Empty object ','{abc: 1, efg: 2}',L);
end;
Procedure TTestLiteralWriter.TestObjectTwoElementCompact2;
Var
L : TJSObjectLiteral;
E : TJSObjectLiteralElement;
I : TJSLiteral;
begin
L:=TJSObjectLiteral.Create(0,0);
E:=L.Elements.AddElement;
I:=TJSLiteral.Create(0,0);
I.Value.AsNumber:=1;
E.Expr:=I;
E.Name:='abc';
E:=L.Elements.AddElement;
I:=TJSLiteral.Create(0,0);
I.Value.AsNumber:=2;
E.Expr:=I;
E.Name:='efg';
Writer.Options:=[woCompactObjectLiterals,woUseUTF8];
AssertWrite('Empty object ','{abc: 1, efg: 2}',L);
end;
Procedure TTestLiteralWriter.TestObjectTwoElementCompactQuoted;
Var
L : TJSObjectLiteral;

View File

@ -43,7 +43,6 @@
<TopLine Value="1"/>
<CursorPos X="48" Y="3"/>
<UsageCount Value="201"/>
<LoadedDesigner Value="True"/>
</Unit0>
<Unit1>
<Filename Value="tcscanner.pp"/>
@ -67,10 +66,10 @@
<Filename Value="../src/jsparser.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="jsparser"/>
<EditorIndex Value="4"/>
<EditorIndex Value="3"/>
<WindowIndex Value="1"/>
<TopLine Value="2032"/>
<CursorPos X="57" Y="2068"/>
<TopLine Value="67"/>
<CursorPos X="14" Y="85"/>
<UsageCount Value="201"/>
<Loaded Value="True"/>
</Unit3>
@ -89,10 +88,10 @@
<Filename Value="../src/jstree.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="jstree"/>
<EditorIndex Value="1"/>
<EditorIndex Value="5"/>
<WindowIndex Value="1"/>
<TopLine Value="838"/>
<CursorPos X="3" Y="856"/>
<TopLine Value="739"/>
<CursorPos X="3" Y="757"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit5>
@ -100,10 +99,10 @@
<Filename Value="tcparser.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="tcparser"/>
<EditorIndex Value="5"/>
<EditorIndex Value="4"/>
<WindowIndex Value="1"/>
<TopLine Value="1"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1878"/>
<CursorPos X="3" Y="1883"/>
<UsageCount Value="201"/>
<Loaded Value="True"/>
</Unit6>
@ -113,8 +112,8 @@
<UnitName Value="jswriter"/>
<EditorIndex Value="0"/>
<WindowIndex Value="1"/>
<TopLine Value="90"/>
<CursorPos X="27" Y="120"/>
<TopLine Value="8"/>
<CursorPos X="28" Y="15"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
</Unit7>
@ -133,17 +132,17 @@
<WindowIndex Value="1"/>
<TopLine Value="157"/>
<CursorPos X="1" Y="175"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit9>
<Unit10>
<Filename Value="tcwriter.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="tcwriter"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="3"/>
<EditorIndex Value="2"/>
<WindowIndex Value="1"/>
<TopLine Value="1822"/>
<CursorPos X="3" Y="1841"/>
<TopLine Value="668"/>
<CursorPos X="45" Y="698"/>
<UsageCount Value="220"/>
<Loaded Value="True"/>
</Unit10>
@ -153,16 +152,16 @@
<WindowIndex Value="1"/>
<TopLine Value="558"/>
<CursorPos X="21" Y="580"/>
<UsageCount Value="62"/>
<UsageCount Value="61"/>
</Unit11>
<Unit12>
<Filename Value="../src/jstoken.pp"/>
<IsPartOfProject Value="True"/>
<UnitName Value="jstoken"/>
<EditorIndex Value="2"/>
<EditorIndex Value="1"/>
<WindowIndex Value="1"/>
<TopLine Value="4"/>
<CursorPos X="82" Y="11"/>
<TopLine Value="1"/>
<CursorPos X="18" Y="8"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit12>
@ -172,7 +171,7 @@
<WindowIndex Value="1"/>
<TopLine Value="106"/>
<CursorPos X="22" Y="108"/>
<UsageCount Value="14"/>
<UsageCount Value="13"/>
</Unit13>
<Unit14>
<Filename Value="../../../rtl/tests/punit.pp"/>
@ -180,137 +179,41 @@
<WindowIndex Value="1"/>
<TopLine Value="405"/>
<CursorPos X="41" Y="415"/>
<UsageCount Value="19"/>
<UsageCount Value="18"/>
</Unit14>
<Unit15>
<Filename Value="../../../../released/rtl/inc/mathh.inc"/>
<WindowIndex Value="1"/>
<TopLine Value="60"/>
<CursorPos X="14" Y="78"/>
<UsageCount Value="14"/>
<UsageCount Value="13"/>
</Unit15>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<JumpHistory Count="6" HistoryIndex="5">
<Position1>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="1017" Column="16" TopLine="1000"/>
<Filename Value="tcparser.pp"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position1>
<Position2>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="1024" Column="19" TopLine="1007"/>
<Filename Value="tcparser.pp"/>
<Caret Line="1732" Column="55" TopLine="1713"/>
</Position2>
<Position3>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="1027" Column="24" TopLine="1010"/>
<Filename Value="tcparser.pp"/>
<Caret Line="1883" Column="3" TopLine="1878"/>
</Position3>
<Position4>
<Filename Value="tcwriter.pp"/>
<Caret Line="161" Column="28" TopLine="142"/>
<Caret Line="66" Column="43" TopLine="51"/>
</Position4>
<Position5>
<Filename Value="tcwriter.pp"/>
<Caret Line="1463" Column="39" TopLine="1450"/>
<Caret Line="76" Column="43" TopLine="48"/>
</Position5>
<Position6>
<Filename Value="tcwriter.pp"/>
<Caret Line="1617" Column="110" TopLine="1598"/>
<Caret Line="251" Column="31" TopLine="232"/>
</Position6>
<Position7>
<Filename Value="tcwriter.pp"/>
<Caret Line="162" Column="33" TopLine="143"/>
</Position7>
<Position8>
<Filename Value="tcwriter.pp"/>
<Caret Line="163" Column="29" TopLine="143"/>
</Position8>
<Position9>
<Filename Value="tcwriter.pp"/>
<Caret Line="164" Column="36" TopLine="145"/>
</Position9>
<Position10>
<Filename Value="tcwriter.pp"/>
<Caret Line="165" Column="34" TopLine="146"/>
</Position10>
<Position11>
<Filename Value="tcwriter.pp"/>
<Caret Line="1727" Column="184" TopLine="1709"/>
</Position11>
<Position12>
<Filename Value="tcwriter.pp"/>
<Caret Line="166" Column="41" TopLine="147"/>
</Position12>
<Position13>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="1067" Column="1" TopLine="1064"/>
</Position13>
<Position14>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="1082" Column="15" TopLine="1064"/>
</Position14>
<Position15>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="1086" Column="29" TopLine="1070"/>
</Position15>
<Position16>
<Filename Value="tcwriter.pp"/>
<Caret Line="167" Column="1" TopLine="148"/>
</Position16>
<Position17>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="721" Column="6" TopLine="697"/>
</Position17>
<Position18>
<Filename Value="tcwriter.pp"/>
<Caret Line="168" Column="30" TopLine="149"/>
</Position18>
<Position19>
<Filename Value="tcwriter.pp"/>
<Caret Line="1770" Column="20" TopLine="1766"/>
</Position19>
<Position20>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="114" Column="20" TopLine="78"/>
</Position20>
<Position21>
<Filename Value="tcwriter.pp"/>
<Caret Line="73" Column="1" TopLine="73"/>
</Position21>
<Position22>
<Filename Value="tcwriter.pp"/>
<Caret Line="2329" Column="1" TopLine="2293"/>
</Position22>
<Position23>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="1219" Column="6" TopLine="1212"/>
</Position23>
<Position24>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position24>
<Position25>
<Filename Value="../src/jswriter.pp"/>
<Caret Line="120" Column="27" TopLine="90"/>
</Position25>
<Position26>
<Filename Value="../src/jsparser.pp"/>
<Caret Line="1771" Column="21" TopLine="1746"/>
</Position26>
<Position27>
<Filename Value="../src/jsparser.pp"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position27>
<Position28>
<Filename Value="../src/jsparser.pp"/>
<Caret Line="103" Column="51" TopLine="73"/>
</Position28>
<Position29>
<Filename Value="tcwriter.pp"/>
<Caret Line="170" Column="40" TopLine="145"/>
</Position29>
<Position30>
<Filename Value="tcwriter.pp"/>
<Caret Line="1808" Column="24" TopLine="1789"/>
</Position30>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>