diff --git a/packages/dap4delphi.dpk b/packages/dap4delphi.dpk index c95c878..d3b2ff3 100644 --- a/packages/dap4delphi.dpk +++ b/packages/dap4delphi.dpk @@ -9,21 +9,21 @@ package dap4delphi; {$EXTENDEDSYNTAX ON} {$IMPORTEDDATA ON} {$IOCHECKS ON} -{$LOCALSYMBOLS ON} +{$LOCALSYMBOLS OFF} {$LONGSTRINGS ON} {$OPENSTRINGS ON} -{$OPTIMIZATION OFF} -{$OVERFLOWCHECKS ON} -{$RANGECHECKS ON} -{$REFERENCEINFO ON} +{$OPTIMIZATION ON} +{$OVERFLOWCHECKS OFF} +{$RANGECHECKS OFF} +{$REFERENCEINFO OFF} {$SAFEDIVIDE OFF} -{$STACKFRAMES ON} +{$STACKFRAMES OFF} {$TYPEDADDRESS OFF} {$VARSTRINGCHECKS ON} {$WRITEABLECONST OFF} {$MINENUMSIZE 1} {$IMAGEBASE $400000} -{$DEFINE DEBUG} +{$DEFINE RELEASE} {$ENDIF IMPLICITBUILDING} {$DESCRIPTION 'Debug Adapter Protocol'} {$LIBSUFFIX AUTO} diff --git a/packages/dap4delphi.dproj b/packages/dap4delphi.dproj index c8e3e6b..94b8905 100644 --- a/packages/dap4delphi.dproj +++ b/packages/dap4delphi.dproj @@ -7,8 +7,9 @@ True Release Win32 - 1 + 135299 Package + dap4delphi true @@ -33,11 +34,31 @@ Base true + + true + Base + true + + + true + Base + true + + + true + Base + true + true Base true + + true + Base + true + true Base @@ -54,12 +75,6 @@ Base true - - true - Cfg_2 - true - true - ..\lib\$(Platform)\$(Config) .\$(Platform)\$(Config) @@ -74,10 +89,12 @@ All dap4delphi 1033 - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.65.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= Debug Adapter Protocol true $(Auto) + true + 65 None @@ -116,12 +133,28 @@ $(BDS)\bin\Artwork\iOS\iPad\FM_SettingIcon_58x58.png $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png + + /usr/bin/gnome-terminal -- "%debuggee%" + + + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + false + /usr/X11/bin/xterm -e "%debuggee%" + + + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface + Debug + false + /usr/X11/bin/xterm -e "%debuggee%" + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) Debug - true - CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= - 1033 + + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug DEBUG;$(DCC_Define) @@ -136,7 +169,6 @@ false ..\lib\$(Platform)\$(Config) - true false @@ -144,10 +176,6 @@ 0 0 - - true - 1033 - MainSource @@ -185,10 +213,12 @@ dap4delphi.dpk - Embarcadero C++Builder Office 2000 Servers Package - Embarcadero C++Builder Office XP Servers Package - Microsoft Office 2000 Sample Automation Server Wrapper Components - Microsoft Office XP Sample Automation Server Wrapper Components + File C:\Users\Public\Documents\Embarcadero\Studio\23.0\Bpl\AIAPI.bpl not found + File \\Mac\Home\Documents\Embarcadero\Studio\Projects\GDK-topgrid-9953c686d959\GDK-topgrid-9953c686d959\Lib\osgi06301.bpl not found + Embarcadero C++Builder Office 2000 Servers Package + Embarcadero C++Builder Office XP Servers Package + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components @@ -294,6 +324,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -314,6 +354,66 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -324,6 +424,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -494,6 +604,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -599,6 +759,127 @@ 0 + + + 1 + + + 1 + + + + + + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + Contents\Resources + 1 + + + + + library\lib\armeabi-v7a + 1 + + + library\lib\arm64-v8a + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + + + + 1 + + + 1 + + + 1 + + + + + Assets + 1 + + + Assets + 1 + + + + + Assets + 1 + + + Assets + 1 + + ..\$(PROJECTNAME).launchscreen\Assets\AppIcon.appiconset @@ -799,127 +1080,6 @@ 1 - - - 1 - - - 1 - - - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF - 1 - - - - - - - - 1 - - - 1 - - - 1 - - - - - - - - Contents\Resources - 1 - - - Contents\Resources - 1 - - - Contents\Resources - 1 - - - - - library\lib\armeabi-v7a - 1 - - - library\lib\arm64-v8a - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 1 - - - 0 - - - - - library\lib\armeabi-v7a - 1 - - - - - 1 - - - 1 - - - - - Assets - 1 - - - Assets - 1 - - - - - Assets - 1 - - - Assets - 1 - - @@ -932,17 +1092,18 @@ + False False False False - False - False - False + True + True + True True - False + True 12 diff --git a/source/BaseProtocol.Events.pas b/source/BaseProtocol.Events.pas index 014c05a..7312d2b 100644 --- a/source/BaseProtocol.Events.pas +++ b/source/BaseProtocol.Events.pas @@ -278,7 +278,7 @@ TProgressEndEventBody = class(TBaseType) FMessage: string; public property ProgressId: string read FProgressId write FProgressId; - property Message: string read FMessage write FMessage; + property &Message: string read FMessage write FMessage; end; [EventType(TEventType.ProgressEnd)] diff --git a/source/BaseProtocol.Json.pas b/source/BaseProtocol.Json.pas index a321d86..3df5207 100644 --- a/source/BaseProtocol.Json.pas +++ b/source/BaseProtocol.Json.pas @@ -96,8 +96,8 @@ class procedure TBaseProtocolJsonAdapter.RegisterConverters( DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); - DoRegisterObjectListConverter(AMarshal); - DoRegisterObjectListConverter(AMarshal); + DoRegisterObjectListConverter(AMarshal); + DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); @@ -107,9 +107,9 @@ class procedure TBaseProtocolJsonAdapter.RegisterConverters( DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); - DoRegisterObjectListConverter(AMarshal); - DoRegisterObjectListConverter(AMarshal); - DoRegisterObjectListConverter(AMarshal); + DoRegisterObjectListConverter(AMarshal); + DoRegisterObjectListConverter(AMarshal); + DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); DoRegisterObjectListConverter(AMarshal); @@ -163,8 +163,8 @@ class procedure TBaseProtocolJsonAdapter.RegisterReverters( DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); - DoRegisterObjectListReverter(AUnmarshal); - DoRegisterObjectListReverter(AUnmarshal); + DoRegisterObjectListReverter(AUnmarshal); + DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); @@ -174,9 +174,9 @@ class procedure TBaseProtocolJsonAdapter.RegisterReverters( DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); - DoRegisterObjectListReverter(AUnmarshal); - DoRegisterObjectListReverter(AUnmarshal); - DoRegisterObjectListReverter(AUnmarshal); + DoRegisterObjectListReverter(AUnmarshal); + DoRegisterObjectListReverter(AUnmarshal); + DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); DoRegisterObjectListReverter(AUnmarshal); diff --git a/source/BaseProtocol.Parser.pas b/source/BaseProtocol.Parser.pas index 736d879..3961091 100644 --- a/source/BaseProtocol.Parser.pas +++ b/source/BaseProtocol.Parser.pas @@ -54,11 +54,15 @@ class function TBaseProtocolParser.GetProtocolMessageType( const AJSONObject: TJSONObject): TClass; begin case JsonToMessageType(AJSONObject) of - TMessageType.Request : Exit(TProtocolMessage.Requests[JsonToRequestType(AJSONObject)]); - TMessageType.Response: Exit(TProtocolMessage.Responses[JsonToRequestType(AJSONObject)]); - TMessageType.Event : Exit(TProtocolMessage.Events[JsonToEventType(AJSONObject)]); + TMessageType.Request: + Result := TProtocolMessage.Requests[JsonToRequestType(AJSONObject)]; + TMessageType.Response: + Result := TProtocolMessage.Responses[JsonToRequestType(AJSONObject)]; + TMessageType.Event: + Result := TProtocolMessage.Events[JsonToEventType(AJSONObject)]; + else + Result := nil; end; - Result := nil; end; class function TBaseProtocolParser.JsonToMessageType( diff --git a/source/BaseProtocol.Requests.pas b/source/BaseProtocol.Requests.pas index 905c89c..7933852 100644 --- a/source/BaseProtocol.Requests.pas +++ b/source/BaseProtocol.Requests.pas @@ -269,13 +269,13 @@ TSetExceptionBreakpointsArguments = class(TBaseType) [JSONName('filters')] FFilters: TArray; [JSONName('filterOptions'), Managed()] - FFilterOptions: TExceptionFilterOptions; + FFilterOptions: TExceptionFilterOptionsList; [JSONName('exceptionOptions'), Managed()] - FExceptionOptions: TExceptionOptions; + FExceptionOptions: TExceptionOptionsList; public property Filters: TArray read FFilters write FFilters; - property FilterOptions: TExceptionFilterOptions read FFilterOptions write FFilterOptions; - property ExceptionOptions: TExceptionOptions read FExceptionOptions write FExceptionOptions; + property FilterOptions: TExceptionFilterOptionsList read FFilterOptions write FFilterOptions; + property ExceptionOptions: TExceptionOptionsList read FExceptionOptions write FExceptionOptions; end; [RequestCommand(TRequestCommand.SetExceptionBreakpoints)] @@ -297,9 +297,15 @@ TDatabreakpointInfoArguments = class(TBaseType) FVariablesReference: integer; [JSONName('name')] FName: string; + [JSONName('frameId')] + FFrameId: integer; + [JSONName('mode')] + FMode: TBreakpointMode_; public property VariablesReference: integer read FVariablesReference write FVariablesReference; property Name: string read FName write FName; + property FrameId: integer read FFrameId write FFrameId; + property Mode: TBreakpointMode_ read FMode write FMode; end; [RequestCommand(TRequestCommand.DataBreakpointInfo)] @@ -646,12 +652,15 @@ TSetVariableResponseBody = class(TBaseType) FNamedVariables: integer; [JSONName('indexedVariables')] FIndexedVariables: integer; + [JSONName('memoryReference')] + FMemoryReference: string; public property Value: string read FValue write FValue; property &Type: string read FType write FType; property VariablesReference: integer read FVariablesReference write FVariablesReference; property NamedVariables: integer read FNamedVariables write FNamedVariables; property IndexedVariables: integer read FIndexedVariables write FIndexedVariables; + property MemoryReference: string read FMemoryReference write FMemoryReference; end; TSetVariableResponse = class(TResponse); @@ -755,27 +764,27 @@ TLoadedSourcesResponseBody = class(TBaseType) TLoadedSourcesResponse = class(TResponse); - TEvaluteArguments = class(TBaseType) + TEvaluateArguments = class(TBaseType) private [JSONName('expression')] FExpression: string; [JSONName('frameId')] - FFrameId: integer; + FFrameId: integer; [JSONName('context'), JSONReflect(ctString, rtString, TEnumInterceptor)] FContext: TEvaluteContext; [JSONName('format'), Managed()] FFormat: TValueFormat; public property Expression: string read FExpression write FExpression; - property FrameId: Integer read FFrameId write FFrameId; + property FrameId: Integer read FFrameId write FFrameId; property Context: TEvaluteContext read FContext write FContext; property Format: TValueFormat read FFormat write FFormat; end; [RequestCommand(TRequestCommand.Evaluate)] - TEvaluteRequest = class(TRequest); + TEvaluateRequest = class(TRequest); - TEvaluteResponseBody = class(TBaseType) + TEvaluateResponseBody = class(TBaseType) private [JSONName('result')] FResult: string; @@ -790,7 +799,7 @@ TEvaluteResponseBody = class(TBaseType) [JSONName('indexedVariables')] FIndexedVariables: integer; [JSONName('memoryReference')] - FMemoryReference: integer; + FMemoryReference: string; public property Result: string read FResult write FResult; property &Type: string read FType write FType; @@ -798,10 +807,10 @@ TEvaluteResponseBody = class(TBaseType) property VariablesReference: integer read FVariablesReference write FVariablesReference; property NamedVariables: integer read FNamedVariables write FNamedVariables; property IndexedVariables: integer read FIndexedVariables write FIndexedVariables; - property MemoryReference: integer read FMemoryReference write FMemoryReference; + property MemoryReference: string read FMemoryReference write FMemoryReference; end; - TEvaluteResponse = class(TResponse); + TEvaluateResponse = class(TResponse); TSetExpressionArguments = class(TBaseType) private @@ -835,12 +844,15 @@ TSetExpressionResponseBody = class(TBaseType) FNamedVariables: integer; [JSONName('indexedVariables')] FIndexedVariables: integer; + [JSONName('memoryReference')] + FMemoryReference: string; public property Value: string read FValue write FValue; property PresentationHint: TVariablePresentationHint read FPresentationHint write FPresentationHint; property VariablesReference: integer read FVariablesReference write FVariablesReference; property NamedVariables: integer read FNamedVariables write FNamedVariables; property IndexedVariables: integer read FIndexedVariables write FIndexedVariables; + property MemoryReference: string read FMemoryReference write FMemoryReference; end; TSetExpressionResponse = class(TResponse); @@ -899,7 +911,7 @@ TGotoTargetsResponseBody = class(TBaseType) TGotoTargetsResponse = class(TResponse); - TCompletitionsArguments = class(TBaseType) + TCompletionsArguments = class(TBaseType) private [JSONName('frameId')] FFrameId: integer; @@ -917,17 +929,17 @@ TCompletitionsArguments = class(TBaseType) end; [RequestCommand(TRequestCommand.Completions)] - TCompletitionsRequest = class(TRequest); + TCompletionsRequest = class(TRequest); - TCompletitionsResponseBody = class(TBaseType) + TCompletionsResponseBody = class(TBaseType) private - [JSONName('frameId'), Managed()] - FTargets: TCompletitionItems; + [JSONName('targets'), Managed()] + FTargets: TCompletionItems; public - property Targets: TCompletitionItems read FTargets write FTargets; + property Targets: TCompletionItems read FTargets write FTargets; end; - TCompletitionsResponse = class(TResponse); + TCompletionsResponse = class(TResponse); TExceptionInfoArguments = class(TBaseType) private @@ -949,12 +961,12 @@ TExceptionInfoResponseBody = class(TBaseType) [JSONName('breakMode'), JSONReflect(ctString, rtString, TEnumInterceptor)] FBreakMode: TExceptionBreakMode; [JSONName('details'), Managed()] - FDetails: TExceptionDetail; + FDetails: TExceptionDetails; public property ExceptionId: string read FExceptionId write FExceptionId; property Description: string read FDescription write FDescription; property BreakMode: TExceptionBreakMode read FBreakMode write FBreakMode; - property Details: TExceptionDetail read FDetails write FDetails; + property Details: TExceptionDetails read FDetails write FDetails; end; TExceptionInfoResponse = class(TResponse); @@ -1051,9 +1063,9 @@ TDisassembleRequest = class(TRequest); TDisassembleResponseBody = class(TBaseType) private [JSONName('instructions'), Managed()] - FInstructions: TDynamicDisassembleInstructions; + FInstructions: TDynamicDisassembledInstructions; public - property Instructions: TDynamicDisassembleInstructions read FInstructions write FInstructions; + property Instructions: TDynamicDisassembledInstructions read FInstructions write FInstructions; end; TDisassembleResponse = class(TResponse); @@ -1098,13 +1110,13 @@ class procedure TRequestsRegistration.RegisterAll; TProtocolMessage.RegisterRequest(TRequestCommand.Attach, TAttachRequest, TAttachResponse); TProtocolMessage.RegisterRequest(TRequestCommand.BreakpointLocations, TDynamicBreakpointLocationsRequest, TBreakpointLocationsResponse); TProtocolMessage.RegisterRequest(TRequestCommand.Cancel, TCancelRequest, TCancelResponse); - TProtocolMessage.RegisterRequest(TRequestCommand.Completions, TCompletitionsRequest, TCompletitionsResponse); + TProtocolMessage.RegisterRequest(TRequestCommand.Completions, TCompletionsRequest, TCompletionsResponse); TProtocolMessage.RegisterRequest(TRequestCommand.ConfigurationDone, TConfigurationDoneRequest, TConfigurationDoneResponse); TProtocolMessage.RegisterRequest(TRequestCommand.Continue, TContinueRequest, TContinueResponse); TProtocolMessage.RegisterRequest(TRequestCommand.DataBreakpointInfo, TDatabreakpointInfoRequest, TDatabreakpointInfoResponse); TProtocolMessage.RegisterRequest(TRequestCommand.Disassemble, TDisassembleRequest, TDisassembleResponse); TProtocolMessage.RegisterRequest(TRequestCommand.Disconnect, TDisconnectRequest, TDisconnectResponse); - TProtocolMessage.RegisterRequest(TRequestCommand.Evaluate, TEvaluteRequest, TEvaluteResponse); + TProtocolMessage.RegisterRequest(TRequestCommand.Evaluate, TEvaluateRequest, TEvaluateResponse); TProtocolMessage.RegisterRequest(TRequestCommand.ExceptionInfo, TExceptionInfoRequest, TExceptionInfoResponse); TProtocolMessage.RegisterRequest(TRequestCommand.Goto, TGotoRequest, TGotoResponse); TProtocolMessage.RegisterRequest(TRequestCommand.GotoTargets, TDynamicGotoTargetsRequest, TGotoTargetsResponse); diff --git a/source/BaseProtocol.ReverseRequests.pas b/source/BaseProtocol.ReverseRequests.pas index 83445f6..b20f3fd 100644 --- a/source/BaseProtocol.ReverseRequests.pas +++ b/source/BaseProtocol.ReverseRequests.pas @@ -25,12 +25,15 @@ TRunInTerminalRequestArguments = class(TBaseType) FArgs: TArray; [JSONName('env'), Managed()] FEnv: TEnvs; + [JSONName('argsCanBeInterpretedByShell')] + FArgsCanBeInterpretedByShell: boolean; public property Kind: TRunInTerminalRequestArgumentsKind read FKind write FKind; property Title: string read FTitle write FTitle; property Cwd: string read FCwd write FCwd; property Args: TArray read FArgs write FArgs; property Env: TEnvs read FEnv write FEnv; + property ArgsCanBeInterpretedByShell: boolean read FArgsCanBeInterpretedByShell write FArgsCanBeInterpretedByShell; end; [RequestCommand(TRequestCommand.RunInTerminal)] diff --git a/source/BaseProtocol.Types.pas b/source/BaseProtocol.Types.pas index 42fc06f..ad4b78f 100644 --- a/source/BaseProtocol.Types.pas +++ b/source/BaseProtocol.Types.pas @@ -61,6 +61,11 @@ interface Variables, WriteMemory); + TResponseMessage = ( + Cancelled, + NotStopped + ); + TEventType = ( Unknown, Breakpoint, @@ -225,7 +230,7 @@ interface Line, Instruction); - TCompletitionItemType = ( + TCompletionItemType = ( None, Method, &Function, @@ -266,6 +271,25 @@ interface Threads, Variables); TInvalidatedAreas = set of TInvalidatedArea; + + TBreakpointModeApplicability = ( + Source, + Exception, + Data, + Instruction + ); + TBreakpointModeApplicabilities = set of TBreakpointModeApplicability; + + TBreakpointMode_ = ( + Hardware, + Software + ); + TBreakpointModes_ = set of TBreakpointMode_; + + TBreakpointReason = ( + Pending, + Failed + ); {$SCOPEDENUMS OFF} {$ENDREGION 'ENUNS'} @@ -430,16 +454,19 @@ TBreakpoint = class(TBaseType) FInstructionReference: string; [JSONName('offset')] FOffset: integer; + [JSONName('reason'), JSONReflect(ctStrings, rtStrings, TEnumInterceptor)] + FReason: TBreakpointReason; public property Id: integer read FId write FId; property Verified: boolean read FVerified write FVerified; - property Message: string read FMessage write FMessage; + property &Message: string read FMessage write FMessage; property Line: integer read FLine write FLine; property Column: integer read FColumn write FColumn; property EndLine: integer read FEndLine write FEndLine; property EndColumn: integer read FEndColumn write FEndColumn; property InstructionReference: string read FInstructionReference write FInstructionReference; property Offset: integer read FOffset write FOffset; + property Reason: TBreakpointReason read FReason write FReason; end; TBreakpoint = class(TBreakpoint) @@ -455,6 +482,24 @@ TBreakpoint = class(TBreakpoint) TBreakpoints = TObjectList; TDynamicBreakpoints = TObjectList; + TBreakpointMode = class(TBaseType) + private + [JSONName('mode'), JSONReflect(ctStrings, rtStrings, TEnumInterceptor)] + FMode: TBreakpointMode_; + [JSONName('label')] + FLabel: string; + [JSONName('description')] + FDescription: string; + [JSONName('appliesTo'), JSONReflect(ctString, rtString, TSetInterceptor)] + FAppliesTo: TBreakpointModeApplicabilities; + public + property Mode: TBreakpointMode_ read FMode write FMode; + property &Label: string read FLabel write FLabel; + property Description: string read FDescription write FDescription; + property AppliesTo: TBreakpointModeApplicabilities read FAppliesTo write FAppliesTo; + end; + TBreakpointModes = TObjectList; + TModule = class(TBaseType) private [JSONName('id')] @@ -546,6 +591,8 @@ TCapabilities = class(TBaseType) FSupportsFunctionBreakpoints: boolean; [JSONName('supportsConditionalBreakpoints')] FSupportsConditionalBreakpoints: boolean; + [JSONName('supportsHitConditionalBreakpoints')] + FSupportsHitConditionalBreakpoints: boolean; [JSONName('supportsEvaluateForHovers')] FSupportsEvaluateForHovers: boolean; [JSONName('exceptionBreakpointFilters'), Managed()] @@ -558,11 +605,11 @@ TCapabilities = class(TBaseType) FSupportsRestartFrame: boolean; [JSONName('supportsGotoTargetsRequest')] FSupportsGotoTargetsRequest: boolean; - [JSONName('supportsCompletitionsRequest')] - FSupportsCompletitionsRequest: boolean; - [JSONName('completitionTriggerCharacters')] - FCompletitionTriggerCharacters: TArray; - [JSONName('supportsModuleRequests')] + [JSONName('supportsCompletionsRequest')] + FSupportsCompletionsRequest: boolean; + [JSONName('completionTriggerCharacters')] + FCompletionTriggerCharacters: TArray; + [JSONName('supportsModulesRequest')] FSupportsModuleRequests: boolean; [JSONName('additionalModuleColumns')] FAdditionalModuleColumns: TColumnDescriptors; @@ -602,8 +649,8 @@ TCapabilities = class(TBaseType) FSupportsDisassembleRequest: boolean; [JSONName('supportsCancelRequest')] FSupportsCancelRequest: boolean; - [JSONName('supportsBreakpointLocationRequest')] - FSupportsBreakpointLocationRequest: boolean; + [JSONName('supportsBreakpointLocationsRequest')] + FSupportsBreakpointLocationsRequest: boolean; [JSONName('supportsClipboardContext')] FSupportsClipboardContext: boolean; [JSONName('supportsSteppingGranularity')] @@ -614,18 +661,21 @@ TCapabilities = class(TBaseType) FSupportsExceptionFilterOptions: boolean; [JSONName('supportsSingleThreadExecutionRequests')] FSupportsSingleThreadExecutionRequests: boolean; + [JSONName('breakpointModes'), JSONReflect(ctStrings, rtStrings, TSetInterceptor)] + FBreakpointModes: TBreakpointModes_; public property SupportsConfigurationDoneRequest: boolean read FSupportsConfigurationDoneRequest write FSupportsConfigurationDoneRequest; property SupportsFunctionBreakpoints: boolean read FSupportsFunctionBreakpoints write FSupportsFunctionBreakpoints; property SupportsConditionalBreakpoints: boolean read FSupportsConditionalBreakpoints write FSupportsConditionalBreakpoints; + property SupportsHitConditionalBreakpoints: boolean read FSupportsHitConditionalBreakpoints write FSupportsHitConditionalBreakpoints; property SupportsEvaluateForHovers: boolean read FSupportsEvaluateForHovers write FSupportsEvaluateForHovers; property ExceptionBreakpointFilters: TExceptionBreakpointsFilters read FExceptionBreakpointFilters write FExceptionBreakpointFilters; property SupportsStepBack: boolean read FSupportsStepBack write FSupportsStepBack; property SupportsSetVariable: boolean read FSupportsSetVariable write FSupportsSetVariable; property SupportsRestartFrame: boolean read FSupportsRestartFrame write FSupportsRestartFrame; property SupportsGotoTargetsRequest: boolean read FSupportsGotoTargetsRequest write FSupportsGotoTargetsRequest; - property SupportsCompletitionsRequest: boolean read FSupportsCompletitionsRequest write FSupportsCompletitionsRequest; - property CompletitionTriggerCharacters: TArray read FCompletitionTriggerCharacters write FCompletitionTriggerCharacters; + property SupportsCompletionsRequest: boolean read FSupportsCompletionsRequest write FSupportsCompletionsRequest; + property CompletionTriggerCharacters: TArray read FCompletionTriggerCharacters write FCompletionTriggerCharacters; property SupportsModuleRequests: boolean read FSupportsModuleRequests write FSupportsModuleRequests; property AdditionalModuleColumns: TColumnDescriptors read FAdditionalModuleColumns write FAdditionalModuleColumns; property SupportedChecksumAlgorithms: TChecksumAlgorithms read FSupportedChecksumAlgorithms write FSupportedChecksumAlgorithms; @@ -646,12 +696,13 @@ TCapabilities = class(TBaseType) property SupportsWriteMemoryRequest: boolean read FSupportsWriteMemoryRequest write FSupportsWriteMemoryRequest; property SupportsDisassembleRequest: boolean read FSupportsDisassembleRequest write FSupportsDisassembleRequest; property SupportsCancelRequest: boolean read FSupportsCancelRequest write FSupportsCancelRequest; - property SupportsBreakpointLocationRequest: boolean read FSupportsBreakpointLocationRequest write FSupportsBreakpointLocationRequest; + property SupportsBreakpointLocationsRequest: boolean read FSupportsBreakpointLocationsRequest write FSupportsBreakpointLocationsRequest; property SupportsClipboardContext: boolean read FSupportsClipboardContext write FSupportsClipboardContext; property SupportsSteppingGranularity: boolean read FSupportsSteppingGranularity write FSupportsSteppingGranularity; property SupportsInstructionBreakpoints: boolean read FSupportsInstructionBreakpoints write FSupportsInstructionBreakpoints; property SupportsExceptionFilterOptions: boolean read FSupportsExceptionFilterOptions write FSupportsExceptionFilterOptions; property SupportsSingleThreadExecutionRequests: boolean read FSupportsSingleThreadExecutionRequests write FSupportsSingleThreadExecutionRequests; + property BreakpointModes: TBreakpointModes_ read FBreakpointModes write FBreakpointModes; end; TBreakpointLocation = class(TBaseType) @@ -685,12 +736,15 @@ TSourceBreakpoint = class(TBaseType) FHitCondition: string; [JSONName('logMessage')] FLogMessage: string; + [JSONName('mode'), JSONReflect(ctStrings, rtStrings, TEnumInterceptor)] + FMode: TBreakpointMode_; public property Line: integer read FLine write FLine; property Column: integer read FColumn write FColumn; property Condition: string read FCondition write FCondition; property HitCondition: string read FHitCondition write FHitCondition; property LogMessage: string read FLogMessage write FLogMessage; + property Mode: TBreakpointMode_ read FMode write FMode; end; TSourceBreakpoints = TObjectList; @@ -711,18 +765,21 @@ TFunctionBreakpoint = class(TBaseType) TFunctionBreakpoints = TObjectList; - TExceptionFilterOption = class(TBaseType) + TExceptionFilterOptions = class(TBaseType) private [JSONName('filterId')] FFilterId: string; [JSONName('condition')] FCondition: string; + [JSONName('mode'), JSONReflect(ctStrings, rtStrings, TEnumInterceptor)] + FMode: TBreakpointMode_; public property FilterId: string read FFilterId write FFilterId; property Condition: string read FCondition write FCondition; + property Mode: TBreakpointMode_ read FMode write FMode; end; - TExceptionFilterOptions = TObjectList; + TExceptionFilterOptionsList = TObjectList; TExceptionPathSegment = class(TBaseType) private @@ -735,7 +792,7 @@ TExceptionPathSegment = class(TBaseType) property Names: TArray read FNames write FNames; end; - TExceptionOption = class(TBaseType) + TExceptionOptions = class(TBaseType) private [JSONName('path'), Managed()] FPath: TExceptionPathSegment; @@ -746,7 +803,7 @@ TExceptionOption = class(TBaseType) property BreakMode: TExceptionBreakMode read FBreakMode write FBreakMode; end; - TExceptionOptions = TObjectList; + TExceptionOptionsList = TObjectList; TDataBreakpoint = class(TBaseType) private @@ -777,11 +834,14 @@ TInstructionBreakpoint = class(TBaseType) FCondition: string; [JSONName('hitCondition')] FHitCondition: string; + [JSONName('mode'), JSONReflect(ctStrings, rtStrings, TEnumInterceptor)] + FMode: TBreakpointMode_; public property InstructionReference: string read FInstructionReference write FInstructionReference; property Offset: string read FOffset write FOffset; property Condition: string read FCondition write FCondition; property HitCondition: string read FHitCondition write FHitCondition; + property Mode: TBreakpointMode_ read FMode write FMode; end; TInstructionBreakpoints = TObjectList; @@ -1042,7 +1102,7 @@ TTarget = class(TBaseType) TTargets = TObjectList; - TCompletitionItem = class(TBaseType) + TCompletionItem = class(TBaseType) private [JSONName('label')] FLabel: string; @@ -1055,7 +1115,7 @@ TCompletitionItem = class(TBaseType) [JSONName('start')] FStart: integer; [JSONName('type'), JSONReflect(ctString, rtString, TEnumInterceptor)] - FType: TCompletitionItemType; + FType: TCompletionItemType; [JSONName('length')] FLength: integer; [JSONName('selectionStart')] @@ -1067,18 +1127,19 @@ TCompletitionItem = class(TBaseType) property Text: string read FText write FText; property SortText: string read FSortText write FSortText; property Detail: string read FDetail write FDetail; - property &Type: TCompletitionItemType read FType write FType; + property &Type: TCompletionItemType read FType write FType; property Start: integer read FStart write FStart; property Length: integer read FLength write FLength; property SelectionStart: integer read FSelectionStart write FSelectionStart; property SelectionLength: integer read FSelectionLength write FSelectionLength; end; - TCompletitionItems = TObjectList; + TCompletionItems = TObjectList; + + TExceptionDetails = class; + TExceptionDetailsList = TObjectList; - TExceptionDetail = class; - TExceptionDetails = TObjectList; - TExceptionDetail = class(TBaseType) + TExceptionDetails = class(TBaseType) private [JSONName('message')] FMessage: string; @@ -1091,17 +1152,17 @@ TExceptionDetail = class(TBaseType) [JSONName('stackTrace')] FStackTrace: string; [JSONName('innerException'), Managed()] - FInnerException: TExceptionDetails; + FInnerException: TExceptionDetailsList; public property Message: string read FMessage write FMessage; property TypeName: string read FTypeName write FTypeName; property FullTypeName: string read FFullTypeName write FFullTypeName; property EvaluteName: string read FEvaluteName write FEvaluteName; property StackTrace: string read FStackTrace write FStackTrace; - property InnerException: TExceptionDetails read FInnerException write FInnerException; + property InnerException: TExceptionDetailsList read FInnerException write FInnerException; end; - TDisassembleInstruction = class(TBaseType) + TDisassembledInstruction = class(TBaseType) private [JSONName('address')] FAddress: string; @@ -1130,7 +1191,7 @@ TDisassembleInstruction = class(TBaseType) property EndColumn: integer read FEndColumn write FEndColumn; end; - TDisassembleInstruction = class(TDisassembleInstruction) + TDisassembledInstruction = class(TDisassembledInstruction) private [JSONName('location'), Managed()] FLocation: TSource; @@ -1138,11 +1199,11 @@ TDisassembleInstruction = class(TDisassembleInstruction) property Location: TSource read FLocation write FLocation; end; - TDynamicDisassembleInstruction = TDisassembleInstruction; + TDynamicDisassembledInstruction = TDisassembledInstruction; - TDisassembleInstructions = TObjectList; + TDisassembledInstructions = TObjectList; - TDynamicDisassembleInstructions = TObjectList; + TDynamicDisassembledInstructions = TObjectList; const TWO_CRLF = sLineBreak + sLineBreak; @@ -1230,6 +1291,7 @@ procedure TSource.Assign(Source: TPersistent); begin inherited; { TODO : Fix here when we get the AdapterData type possibilities } + LNewItem := nil; for var LItem in Self.Sources do begin //Creates an identical instance type LNewItem := LItem.ClassType.InitInstance(LNewItem) as TPersistent; diff --git a/source/BaseProtocol.pas b/source/BaseProtocol.pas index 0eba122..dd57e80 100644 --- a/source/BaseProtocol.pas +++ b/source/BaseProtocol.pas @@ -103,7 +103,6 @@ TEvent = class(TEvent) end; //Response classes - TResponseMessage = string; [MessageType(TMessageType.Response)] TResponse = class(TProtocolMessage) private @@ -113,7 +112,7 @@ TResponse = class(TProtocolMessage) FSuccess: boolean; [JSONName('command'), JSONReflect(ctString, rtString, TEnumInterceptor)] FCommand: TRequestCommand; - [JSONName('message')] + [JSONName('message'), JSONReflect(ctString, rtString, TEnumInterceptor)] FMessage: TResponseMessage; public procedure AfterConstruction(); override; @@ -121,7 +120,7 @@ TResponse = class(TProtocolMessage) property RequestSeq: integer read FRequestSeq write FRequestSeq; property Success: boolean read FSuccess write FSuccess; property Command: TRequestCommand read FCommand write FCommand; - property Message: TResponseMessage read FMessage write FMessage; + property &Message: TResponseMessage read FMessage write FMessage; end; TResponse = class(TResponse)