Browse Source

fcl-js: added TJSUnaryBracketsExpression, needed for (function(){})

git-svn-id: trunk@41358 -
Mattias Gaertner 6 years ago
parent
commit
34515b09cf
2 changed files with 45 additions and 17 deletions
  1. 19 0
      packages/fcl-js/src/jstree.pp
  2. 26 17
      packages/fcl-js/src/jswriter.pp

+ 19 - 0
packages/fcl-js/src/jstree.pp

@@ -439,6 +439,13 @@ Type
     Class function PostFixOperatorToken : tjsToken; override;
     Class function PostFixOperatorToken : tjsToken; override;
   end;
   end;
 
 
+  { TJSUnaryBracketsExpression - e.g. '(A)' }
+
+  TJSUnaryBracketsExpression = Class(TJSUnaryExpression)
+  Public
+    Class function PrefixOperatorToken : tjsToken; override;
+    Class function PostFixOperatorToken : tjsToken; override;
+  end;
 
 
   { TJSBinary - base class }
   { TJSBinary - base class }
 
 
@@ -1432,6 +1439,18 @@ begin
   Result:=tjsThrow;
   Result:=tjsThrow;
 end;
 end;
 
 
+{ TJSUnaryBracketsExpression }
+
+class function TJSUnaryBracketsExpression.PrefixOperatorToken: tjsToken;
+begin
+  Result:=tjsBraceOpen;
+end;
+
+class function TJSUnaryBracketsExpression.PostFixOperatorToken: tjsToken;
+begin
+  Result:=tjsBraceClose;
+end;
+
 { TJSUnaryPostMinusMinusExpression }
 { TJSUnaryPostMinusMinusExpression }
 
 
 Class function TJSUnaryPostMinusMinusExpression.PostFixOperatorToken : tjsToken;
 Class function TJSUnaryPostMinusMinusExpression.PostFixOperatorToken : tjsToken;

+ 26 - 17
packages/fcl-js/src/jswriter.pp

@@ -240,7 +240,9 @@ Type
     Property Options : TWriteOptions Read FOptions Write SetOptions;
     Property Options : TWriteOptions Read FOptions Write SetOptions;
     Property IndentSize : Byte Read FIndentSize Write FIndentSize;
     Property IndentSize : Byte Read FIndentSize Write FIndentSize;
     Property UseUTF8 : Boolean Read GetUseUTF8;
     Property UseUTF8 : Boolean Read GetUseUTF8;
-    property LastChar: WideChar read FLastChar;
+    Property LastChar: WideChar read FLastChar;
+    Property SkipCurlyBrackets : Boolean read FSkipCurlyBrackets write FSkipCurlyBrackets;
+    Property SkipRoundBrackets : Boolean read FSkipRoundBrackets write FSkipRoundBrackets;
   end;
   end;
   EJSWriter = Class(Exception);
   EJSWriter = Class(Exception);
 
 
@@ -944,10 +946,14 @@ begin
         and (not (A is TJSSourceElements))
         and (not (A is TJSSourceElements))
         and (not (A is TJSEmptyBlockStatement))
         and (not (A is TJSEmptyBlockStatement))
     then
     then
+      begin
+      if FLastChar<>';' then
+        Write(';');
       if C then
       if C then
-        Write('; ')
+        Write(' ')
       else
       else
-        Writeln(';');
+        Writeln('');
+      end;
     end;
     end;
   Writer.CurElement:=LastEl;
   Writer.CurElement:=LastEl;
   if C then
   if C then
@@ -1197,17 +1203,15 @@ begin
     Write(S);
     Write(S);
     end;
     end;
   WriteJS(El.A);
   WriteJS(El.A);
-  if (S='') then
+  S:=El.PostFixOperator;
+  if (S<>'') then
     begin
     begin
-    S:=El.PostFixOperator;
-    if (S<>'') then
-      begin
-      Writer.CurElement:=El;
-      if ((S='-') and (FLastChar='-'))
-          or ((S='+') and (FLastChar='+')) then
-        Write(' ');
-      Write(S);
-      end;
+    Writer.CurElement:=El;
+    case S[1] of
+    '+': if FLastChar='+' then Write(' ');
+    '-': if FLastChar='-' then Write(' ');
+    end;
+    Write(S);
     end;
     end;
 end;
 end;
 
 
@@ -1240,10 +1244,12 @@ begin
       begin
       begin
       if not (LastEl is TJSStatementList) then
       if not (LastEl is TJSStatementList) then
         begin
         begin
+        if FLastChar<>';' then
+          Write(';');
         if C then
         if C then
-          Write('; ')
+          Write(' ')
         else
         else
-          Writeln(';');
+          Writeln('');
         end;
         end;
       FSkipCurlyBrackets:=True;
       FSkipCurlyBrackets:=True;
       WriteJS(El.B);
       WriteJS(El.B);
@@ -1252,11 +1258,14 @@ begin
     if (not C) and not (LastEl is TJSStatementList) then
     if (not C) and not (LastEl is TJSStatementList) then
       writeln(';');
       writeln(';');
     end
     end
-  else if Assigned(El.B) then
+  else if Assigned(El.B) and not IsEmptyStatement(El.B) then
     begin
     begin
     WriteJS(El.B);
     WriteJS(El.B);
     if (not C) and not (El.B is TJSStatementList) then
     if (not C) and not (El.B is TJSStatementList) then
-      writeln(';');
+      if FLastChar=';' then
+        writeln('')
+      else
+        writeln(';');
     end;
     end;
   if B then
   if B then
     begin
     begin