소스 검색

pastojs+pparser: fixed copying last line of asm..block with option po_asmwhole

git-svn-id: trunk@36650 -
Mattias Gaertner 8 년 전
부모
커밋
5e409ff349
3개의 변경된 파일19개의 추가작업 그리고 9개의 파일을 삭제
  1. 1 2
      packages/fcl-passrc/src/pparser.pp
  2. 8 0
      packages/fcl-passrc/src/pscanner.pp
  3. 10 7
      packages/pastojs/tests/tcmodules.pas

+ 1 - 2
packages/fcl-passrc/src/pparser.pp

@@ -4655,7 +4655,7 @@ begin
     repeat
       Scanner.ReadNonPascalTillEndToken(true);
       case Scanner.CurToken of
-      tkLineEnding:
+      tkLineEnding,tkWhitespace:
         AsmBlock.Tokens.Add(Scanner.CurTokenString);
       tkend:
         begin
@@ -4687,7 +4687,6 @@ begin
       NextToken;
       end;
     end;
-  // NextToken; // Eat end.
   // Do not consume end. Current token will normally be end;
 end;
 

+ 8 - 0
packages/fcl-passrc/src/pscanner.pp

@@ -2325,6 +2325,14 @@ begin
             begin
             // 'end' found
             Add;
+            if FCurTokenString<>'' then
+              begin
+              // return characters in front of 'end'
+              Result:=tkWhitespace;
+              FCurToken:=Result;
+              exit;
+              end;
+            // return 'end'
             Result := tkend;
             SetLength(FCurTokenString, 3);
             Move(TokenStr^, FCurTokenString[1], 3);

+ 10 - 7
packages/pastojs/tests/tcmodules.pas

@@ -2407,19 +2407,22 @@ end;
 procedure TTestModule.TestProc_Asm;
 begin
   StartProgram(false);
-  Add('function DoIt: longint;');
-  Add('begin;');
-  Add('  asm');
-  Add('  { a:{ b:{}, c:[]}, d:''1'' };');
-  Add('  end;');
-  Add('end;');
-  Add('begin');
+  Add([
+  'function DoIt: longint;',
+  'begin;',
+  '  asm',
+  '  { a:{ b:{}, c:[]}, d:''1'' };',
+  '  end;',
+  '  asm console.log(); end;',
+  'end;',
+  'begin']);
   ConvertProgram;
   CheckSource('TestProcedureAsm',
     LinesToStr([ // statements
     'this.DoIt = function () {',
     '  var Result = 0;',
     '  { a:{ b:{}, c:[]}, d:''1'' };',
+    '  console.log();',
     '  return Result;',
     '};'
     ]),