diff --git a/packages/pastojs/src/pas2jscompiler.pp b/packages/pastojs/src/pas2jscompiler.pp index cfb71ac2bf..7f0d00810a 100644 --- a/packages/pastojs/src/pas2jscompiler.pp +++ b/packages/pastojs/src/pas2jscompiler.pp @@ -40,39 +40,40 @@ const nSyntaxModeIs = 102; sSyntaxModeIs = 'Syntax mode is %s'; nMacroDefined = 103; sMacroDefined = 'Macro defined: %s'; nUsingPath = 104; sUsingPath = 'Using %s: "%s"'; - nFolderNotFound = 105; sFolderNotFound = '%s not found: "%s"'; - nNameValue = 106; sNameValue = '%s: "%s"'; - nReadingOptionsFromFile = 107; sReadingOptionsFromFile = 'Reading options from file "%s"'; - nEndOfReadingConfigFile = 108; sEndOfReadingConfigFile = 'End of reading config file "%s"'; - nInterpretingFileOption = 109; sInterpretingFileOption = 'interpreting file option "%s"'; - nSourceFileNotFound = 110; sSourceFileNotFound = 'source file not found "%s"'; - nFileIsFolder = 111; sFileIsFolder = 'expected file, but found directory "%s"'; + nFolderNotFound = 105; sFolderNotFound = '%s not found: %s'; + nNameValue = 106; sNameValue = '%s: %s'; + nReadingOptionsFromFile = 107; sReadingOptionsFromFile = 'Reading options from file %s'; + nEndOfReadingConfigFile = 108; sEndOfReadingConfigFile = 'End of reading config file %s'; + nInterpretingFileOption = 109; sInterpretingFileOption = 'interpreting file option %s'; + nSourceFileNotFound = 110; sSourceFileNotFound = 'source file not found %s'; + nFileIsFolder = 111; sFileIsFolder = 'expected file, but found directory %s'; nConfigFileSearch = 112; sConfigFileSearch = 'Configfile search: %s'; - nHandlingOption = 113; sHandlingOption = 'handling option "%s"'; - nQuickHandlingOption = 114; sQuickHandlingOption = 'quick handling option "%s"'; - nOutputDirectoryNotFound = 115; sOutputDirectoryNotFound = 'output directory not found: "%s"'; - nUnableToWriteFile = 116; sUnableToWriteFile = 'Unable to write file "%s"'; - nWritingFile = 117; sWritingFile = 'Writing file "%s" ...'; + nHandlingOption = 113; sHandlingOption = 'handling option %s'; + nQuickHandlingOption = 114; sQuickHandlingOption = 'quick handling option %s'; + nOutputDirectoryNotFound = 115; sOutputDirectoryNotFound = 'output directory not found: %s'; + nUnableToWriteFile = 116; sUnableToWriteFile = 'Unable to write file %s'; + nWritingFile = 117; sWritingFile = 'Writing file %s ...'; nCompilationAborted = 118; sCompilationAborted = 'Compilation aborted'; - nCfgDirective = 119; sCfgDirective = 'cfg directive "%s": %s'; + nCfgDirective = 119; sCfgDirective = 'cfg directive %s: %s'; nUnitCycle = 120; sUnitCycle = 'Unit cycle found %s'; nOptionForbidsCompile = 121; sOptionForbidsCompile = 'Option -Ju forbids to compile unit "%s"'; nUnitNeedsCompileDueToUsedUnit = 122; sUnitsNeedCompileDueToUsedUnit = 'Unit "%s" needs compile due to used unit "%s"'; nUnitNeedsCompileDueToOption = 123; sUnitsNeedCompileDueToOption = 'Unit "%s" needs compile due to option "%s"'; nUnitNeedsCompileJSMissing = 124; sUnitsNeedCompileJSMissing = 'Unit "%s" needs compile, js file missing "%s"'; - nUnitNeedsCompilePasHasChanged = 125; sUnitsNeedCompilePasHasChanged = 'Unit "%s" needs compile, Pascal file has changed, js is "%s"'; - nParsingFile = 126; sParsingFile = 'Parsing "%s" ...'; - nCompilingFile = 127; sCompilingFile = 'Compiling "%s" ...'; + nUnitNeedsCompilePasHasChanged = 125; sUnitsNeedCompilePasHasChanged = 'Unit "%s" needs compile, Pascal file has changed, js is %s'; + nParsingFile = 126; sParsingFile = 'Parsing %s ...'; + nCompilingFile = 127; sCompilingFile = 'Compiling %s ...'; nExpectedButFound = 128; sExpectedButFound = 'Illegal unit name: Expected "%s", but found "%s"'; nLinesInFilesCompiled = 129; sLinesInFilesCompiled = '%s lines in %s files compiled, %s sec'; nTargetPlatformIs = 130; sTargetPlatformIs = 'Target platform is %s'; nTargetProcessorIs = 131; sTargetProcessorIs = 'Target processor is %s'; nMessageEncodingIs = 132; sMessageEncodingIs = 'Message encoding is %s'; - nUnableToTranslatePathToDir = 133; sUnableToTranslatePathToDir = 'Unable to translate path "%s" to directory "%s"'; + nUnableToTranslatePathToDir = 133; sUnableToTranslatePathToDir = 'Unable to translate path %s to directory %s'; nSrcMapSourceRootIs = 134; sSrcMapSourceRootIs = 'source map "sourceRoot" is %s'; nSrcMapBaseDirIs = 135; sSrcMapBaseDirIs = 'source map "local base directory" is %s'; - nUnitFileNotFound = 136; sUnitFileNotFound = 'unit file not found "%s"'; - nInterfaceStyleIs = 137; sInterfaceStyleIs = 'Interface style is %s'; + nUnitFileNotFound = 136; sUnitFileNotFound = 'unit file not found %s'; + nClassInterfaceStyleIs = 137; sClassInterfaceStyleIs = 'Class interface style is %s'; + nMacroXSetToY = 138; sMacroXSetToY = 'Macro %s set to %s'; // Note: error numbers 201+ are used by Pas2jsFileCache //------------------------------------------------------------------------------ @@ -892,6 +893,8 @@ begin RaiseInternalError(20180312142954,''); FPCUReader:=PCUFormat.ReaderClass.Create; + if ShowDebug then + Log.LogMsg(nParsingFile,[QuoteStr(PCUFilename)]); aFile:=Compiler.FileCache.LoadFile(PCUFilename,true); if aFile=nil then RaiseInternalError(20180312145941,PCUFilename); @@ -1264,7 +1267,7 @@ begin writeln('TPas2jsCompilerFile.WritePCU precompiled ',PCUFilename); {$ENDIF} - Log.LogMsg(nWritingFile,[Compiler.FileCache.FormatPath(PCUFilename)],'',0,0, + Log.LogMsg(nWritingFile,[QuoteStr(Compiler.FileCache.FormatPath(PCUFilename))],'',0,0, not (coShowLineNumbers in Compiler.Options)); // check output directory @@ -1274,7 +1277,7 @@ begin {$IF defined(VerboseUnitQueue) or defined(VerbosePCUFiler)} writeln('TPas2jsCompilerFile.WritePCU output dir not found "',DestDir,'"'); {$ENDIF} - Log.LogMsg(nOutputDirectoryNotFound,[Compiler.FileCache.FormatPath(DestDir)]); + Log.LogMsg(nOutputDirectoryNotFound,[QuoteStr(Compiler.FileCache.FormatPath(DestDir))]); Compiler.Terminate(ExitCodeFileNotFound); end; if Compiler.DirectoryExists(PCUFilename) then @@ -1282,7 +1285,7 @@ begin {$IF defined(VerboseUnitQueue) or defined(VerbosePCUFiler)} writeln('TPas2jsCompilerFile.WritePCU file is folder "',DestDir,'"'); {$ENDIF} - Log.LogMsg(nFileIsFolder,[Compiler.FileCache.FormatPath(PCUFilename)]); + Log.LogMsg(nFileIsFolder,[QuoteStr(Compiler.FileCache.FormatPath(PCUFilename))]); Compiler.Terminate(ExitCodeWriteError); end; @@ -1314,7 +1317,7 @@ end; procedure TPas2jsCompilerFile.ReadUnit; begin if ShowDebug then - Log.LogPlain(['Debug: Parsing Pascal "',PasFilename,'"...']); + Log.LogMsg(nParsingFile,[QuoteStr(PasFilename)]); if FPasModule<>nil then Compiler.RaiseInternalError(20180305190321,PasFilename); FReaderState:=prsReading; @@ -2129,7 +2132,7 @@ begin else if (aFile.JSFilename<>'') and (DirectoryCache.FileAge(aFile.PasFilename)>DirectoryCache.FileAge(aFile.JSFilename)) then begin - Mark(nUnitNeedsCompilePasHasChanged,[aFile.GetModuleName,FileCache.FormatPath(aFile.JSFilename)]) + Mark(nUnitNeedsCompilePasHasChanged,[aFile.GetModuleName,QuoteStr(FileCache.FormatPath(aFile.JSFilename))]) end; end; @@ -2193,7 +2196,7 @@ begin if Checked.Find(aFile)<>nil then exit; Checked.Add(aFile); - Log.LogMsg(nCompilingFile,[FileCache.FormatPath(aFile.PasFilename)],'',0,0, + Log.LogMsg(nCompilingFile,[QuoteStr(FileCache.FormatPath(aFile.PasFilename))],'',0,0, not (coShowLineNumbers in Options)); // convert dependencies @@ -2231,8 +2234,8 @@ begin if not SrcMapInclude then begin Log.Log(mtError, - SafeFormat(sUnableToTranslatePathToDir,[LocalFilename,BaseDir]), - nUnableToTranslatePathToDir); + SafeFormat(sUnableToTranslatePathToDir,[QuoteStr(LocalFilename),QuoteStr(BaseDir)]), + nUnableToTranslatePathToDir); Terminate(ExitCodeConverterError); end; // the source is included, do not translate the filename @@ -2373,19 +2376,19 @@ begin // write to file //writeln('TPas2jsCompiler.WriteJSFiles ',aFile.PasFilename,' ',aFile.JSFilename); - Log.LogMsg(nWritingFile,[FileCache.FormatPath(DestFilename)],'',0,0, + Log.LogMsg(nWritingFile,[QuoteStr(FileCache.FormatPath(DestFilename))],'',0,0, not (coShowLineNumbers in Options)); // check output directory DestDir:=ChompPathDelim(ExtractFilePath(DestFilename)); if (DestDir<>'') and not DirectoryExists(DestDir) then begin - Log.LogMsg(nOutputDirectoryNotFound,[FileCache.FormatPath(DestDir)]); + Log.LogMsg(nOutputDirectoryNotFound,[QuoteStr(FileCache.FormatPath(DestDir))]); Terminate(ExitCodeFileNotFound); end; if DirectoryExists(DestFilename) then begin - Log.LogMsg(nFileIsFolder,[FileCache.FormatPath(DestFilename)]); + Log.LogMsg(nFileIsFolder,[QuoteStr(FileCache.FormatPath(DestFilename))]); Terminate(ExitCodeWriteError); end; @@ -2417,7 +2420,7 @@ begin except on E: Exception do begin Log.LogPlain('Error: '+E.Message); - Log.LogMsg(nUnableToWriteFile,[FileCache.FormatPath(DestFilename)]); + Log.LogMsg(nUnableToWriteFile,[QuoteStr(FileCache.FormatPath(DestFilename))]); Terminate(ExitCodeWriteError); end; end; @@ -2425,7 +2428,7 @@ begin // write source map if aFileWriter.SrcMap<>nil then begin - Log.LogMsg(nWritingFile,[FileCache.FormatPath(MapFilename)],'',0,0, + Log.LogMsg(nWritingFile,[QuoteStr(FileCache.FormatPath(MapFilename))],'',0,0, not (coShowLineNumbers in Options)); FinishSrcMap(aFileWriter.SrcMap); try @@ -2441,7 +2444,7 @@ begin except on E: Exception do begin Log.LogPlain('Error: '+E.Message); - Log.LogMsg(nUnableToWriteFile,[FileCache.FormatPath(MapFilename)]); + Log.LogMsg(nUnableToWriteFile,[QuoteStr(FileCache.FormatPath(MapFilename))]); Terminate(ExitCodeWriteError); end; end; @@ -2745,7 +2748,7 @@ var procedure DebugCfgDirective(const s: string); begin - Log.LogMsg(nCfgDirective,[Line,s],CurrentCfgFilename,CurrentCfgLineNumber,1,false); + Log.LogMsg(nCfgDirective,[QuoteStr(Line),s],CurrentCfgFilename,CurrentCfgLineNumber,1,false); end; var @@ -2756,7 +2759,7 @@ var CacheFile: TPas2jsCachedFile; begin if ShowTriedUsedFiles then - Log.LogMsgIgnoreFilter(nReadingOptionsFromFile,[CfgFilename]); + Log.LogMsgIgnoreFilter(nReadingOptionsFromFile,[QuoteStr(CfgFilename)]); IfLvl:=0; SkipLvl:=0; Skip:=skipNone; @@ -2771,7 +2774,7 @@ begin Line:=aFile.ReadLine; FCurrentCfgLineNumber:=aFile.LineNumber; if ShowDebug then - Log.LogMsgIgnoreFilter(nInterpretingFileOption,[Line]); + Log.LogMsgIgnoreFilter(nInterpretingFileOption,[QuoteStr(Line)]); if Line='' then continue; p:=PChar(Line); while (p^ in [' ',#9]) do inc(p); @@ -2909,7 +2912,7 @@ begin aFile.Free; end; if ShowTriedUsedFiles then - Log.LogMsgIgnoreFilter(nEndOfReadingConfigFile,[CfgFilename]); + Log.LogMsgIgnoreFilter(nEndOfReadingConfigFile,[QuoteStr(CfgFilename)]); end; procedure TPas2jsCompiler.LoadDefaultConfig; @@ -2987,9 +2990,9 @@ begin //writeln('TPas2jsCompiler.ReadParam ',Param,' ',Quick,' ',FromCmdLine); if ShowDebug then if Quick then - Log.LogMsgIgnoreFilter(nQuickHandlingOption,[Param]) + Log.LogMsgIgnoreFilter(nQuickHandlingOption,[QuoteStr(Param)]) else - Log.LogMsgIgnoreFilter(nHandlingOption,[Param]); + Log.LogMsgIgnoreFilter(nHandlingOption,[QuoteStr(Param)]); if Param='' then exit; ParamMacros.Substitute(Param,Self); if Param='' then exit; @@ -3630,7 +3633,8 @@ begin r(mtInfo,nSrcMapSourceRootIs,sSrcMapSourceRootIs); r(mtInfo,nSrcMapBaseDirIs,sSrcMapBaseDirIs); r(mtFatal,nUnitFileNotFound,sUnitFileNotFound); - r(mtInfo,nInterfaceStyleIs,sInterfaceStyleIs); + r(mtInfo,nClassInterfaceStyleIs,sClassInterfaceStyleIs); + r(mtInfo,nMacroXSetToY,sMacroXSetToY); Pas2jsPParser.RegisterMessages(Log); end; @@ -4081,7 +4085,7 @@ begin Log.LogMsgIgnoreFilter(nTargetProcessorIs,[PasToJsProcessorNames[TargetProcessor]]); // default syntax mode Log.LogMsgIgnoreFilter(nSyntaxModeIs,[p2jscModeNames[Mode]]); - Log.LogMsgIgnoreFilter(nInterfaceStyleIs,[InterfaceTypeNames[InterfaceType]]); + Log.LogMsgIgnoreFilter(nClassInterfaceStyleIs,[InterfaceTypeNames[InterfaceType]]); // boolean options for co in TP2jsCompilerOption do Log.LogMsgIgnoreFilter(nOptionIsEnabled, @@ -4093,8 +4097,8 @@ begin // source map options if SrcMapEnable then begin - Log.LogMsgIgnoreFilter(nSrcMapSourceRootIs,[SrcMapSourceRoot]); - Log.LogMsgIgnoreFilter(nSrcMapBaseDirIs,[SrcMapBaseDir]); + Log.LogMsgIgnoreFilter(nSrcMapSourceRootIs,[QuoteStr(SrcMapSourceRoot)]); + Log.LogMsgIgnoreFilter(nSrcMapBaseDirIs,[QuoteStr(SrcMapBaseDir)]); end; end; @@ -4109,8 +4113,9 @@ begin S:=Defines[i]; M:=TMacroDef(Defines.Objects[i]); if M<>nil then - S:=S+'='+M.Value; - Log.LogMsgIgnoreFilter(nMacroDefined,[S]); + Log.LogMsgIgnoreFilter(nMacroXSetToY,[S,QuoteStr(M.Value)]) + else + Log.LogMsgIgnoreFilter(nMacroDefined,[S]); end; end; @@ -4121,7 +4126,7 @@ procedure TPas2jsCompiler.WriteFoldersAndSearchPaths; if Folder='' then exit; Log.LogMsgIgnoreFilter(nUsingPath,[aName,Folder]); if not DirectoryExists(ChompPathDelim(Folder)) then - Log.LogMsgIgnoreFilter(nFolderNotFound,[aName,Folder]); + Log.LogMsgIgnoreFilter(nFolderNotFound,[aName,QuoteStr(Folder)]); end; var @@ -4136,7 +4141,7 @@ begin for i:=0 to FileCache.IncludePaths.Count-1 do WriteFolder('include path',FileCache.IncludePaths[i]); WriteFolder('unit output path',FileCache.UnitOutputPath); - Log.LogMsgIgnoreFilter(nNameValue,['output file',FileCache.MainJSFile]); + Log.LogMsgIgnoreFilter(nNameValue,['output file',QuoteStr(FileCache.MainJSFile)]); end; procedure TPas2jsCompiler.WriteInfo; @@ -4220,16 +4225,16 @@ begin if (UnitFilename='') or not DirectoryCache.FileExists(UnitFilename) then begin if aFormat=nil then - Log.LogMsg(nSourceFileNotFound,[UnitFilename]) + Log.LogMsg(nSourceFileNotFound,[QuoteStr(UnitFilename)]) else - Log.LogMsg(nUnitFileNotFound,[UnitFilename]); + Log.LogMsg(nUnitFileNotFound,[QuoteStr(UnitFilename)]); Terminate(ExitCodeFileNotFound); end; UnitFilename:=ExpandFileNameUTF8(UnitFilename,FileCache.BaseDirectory); if DirectoryCache.DirectoryExists(UnitFilename) then begin - Log.LogMsg(nFileIsFolder,[UnitFilename]); + Log.LogMsg(nFileIsFolder,[QuoteStr(UnitFilename)]); Terminate(ExitCodeFileNotFound); end; diff --git a/packages/pastojs/src/pas2jslogger.pp b/packages/pastojs/src/pas2jslogger.pp index a2f9f91768..d571462d32 100644 --- a/packages/pastojs/src/pas2jslogger.pp +++ b/packages/pastojs/src/pas2jslogger.pp @@ -143,6 +143,8 @@ type function CompareP2JMessage(Item1, Item2: Pointer): Integer; +function QuoteStr(const s: string): string; +function DeQuoteStr(const s: string): string; function AsString(Element: TPasElement; Full: boolean = true): string; overload; function AsString(Element: TJSElement): string; overload; function DbgString(Element: TJSElement; Indent: integer): string; overload; @@ -163,6 +165,16 @@ begin Result:=Msg1.Number-Msg2.Number; end; +function QuoteStr(const s: string): string; +begin + Result:=AnsiQuotedStr(S,'"'); +end; + +function DeQuoteStr(const s: string): string; +begin + Result:=AnsiDequotedStr(S,'"'); +end; + function AsString(Element: TPasElement; Full: boolean): string; begin if Element=nil then