| // Copyright (c) 2021, Compiler Explorer Authors |
| // All rights reserved. |
| // |
| // Redistribution and use in source and binary forms, with or without |
| // modification, are permitted provided that the following conditions are met: |
| // |
| // * Redistributions of source code must retain the above copyright notice, |
| // this list of conditions and the following disclaimer. |
| // * Redistributions in binary form must reproduce the above copyright |
| // notice, this list of conditions and the following disclaimer in the |
| // documentation and/or other materials provided with the distribution. |
| // |
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
| // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| // POSSIBILITY OF SUCH DAMAGE. |
| |
| import {CompilerOutputOptions} from '../types/features/filters.interfaces'; |
| import {CfgState} from './panes/cfg-view.interfaces'; |
| import {LLVMOptPipelineViewState} from './panes/llvm-opt-pipeline.interfaces'; |
| import {GccDumpViewState} from './panes/gccdump-view.interfaces'; |
| export const COMPILER_COMPONENT_NAME = 'compiler'; |
| export const EXECUTOR_COMPONENT_NAME = 'executor'; |
| export const EDITOR_COMPONENT_NAME = 'codeEditor'; |
| export const TREE_COMPONENT_NAME = 'tree'; |
| export const OUTPUT_COMPONENT_NAME = 'output'; |
| export const TOOL_COMPONENT_NAME = 'tool'; |
| |
| export const TOOL_INPUT_VIEW_COMPONENT_NAME = 'toolInputView'; |
| export const DIFF_VIEW_COMPONENT_NAME = 'diff'; |
| export const OPT_VIEW_COMPONENT_NAME = 'opt'; |
| export const FLAGS_VIEW_COMPONENT_NAME = 'flags'; |
| export const PP_VIEW_COMPONENT_NAME = 'pp'; |
| export const AST_VIEW_COMPONENT_NAME = 'ast'; |
| export const GCC_DUMP_VIEW_COMPONENT_NAME = 'gccdump'; |
| export const CFG_VIEW_COMPONENT_NAME = 'cfg'; |
| export const CONFORMANCE_VIEW_COMPONENT_NAME = 'conformance'; |
| export const IR_VIEW_COMPONENT_NAME = 'ir'; |
| export const LLVM_OPT_PIPELINE_VIEW_COMPONENT_NAME = 'llvmOptPipelineView'; |
| export const RUST_MIR_VIEW_COMPONENT_NAME = 'rustmir'; |
| export const HASKELL_CORE_VIEW_COMPONENT_NAME = 'haskellCore'; |
| export const HASKELL_STG_VIEW_COMPONENT_NAME = 'haskellStg'; |
| export const HASKELL_CMM_VIEW_COMPONENT_NAME = 'haskellCmm'; |
| export const GNAT_DEBUG_TREE_VIEW_COMPONENT_NAME = 'gnatdebugtree'; |
| export const GNAT_DEBUG_VIEW_COMPONENT_NAME = 'gnatdebug'; |
| export const RUST_MACRO_EXP_VIEW_COMPONENT_NAME = 'rustmacroexp'; |
| export const RUST_HIR_VIEW_COMPONENT_NAME = 'rusthir'; |
| export const DEVICE_VIEW_COMPONENT_NAME = 'device'; |
| |
| export interface ComponentConfig<S> { |
| type: string; |
| componentName: string; |
| componentState: S; |
| } |
| |
| export type StateWithLanguage = {lang: string}; |
| // TODO(#4490 The War of The Types) We should normalize state types |
| export type StateWithEditor = {source: string | number}; |
| export type StateWithTree = {tree: number}; |
| export type StateWithId = {id: number}; |
| export type EmptyState = Record<never, never>; |
| |
| export type EmptyCompilerState = StateWithLanguage & StateWithEditor; |
| export type PopulatedCompilerState = StateWithEditor & { |
| filters: CompilerOutputOptions | undefined; |
| options: unknown; |
| compiler: string; |
| libs?: unknown; |
| lang?: string; |
| }; |
| export type CompilerForTreeState = StateWithLanguage & StateWithTree; |
| |
| export type EmptyExecutorState = StateWithLanguage & |
| StateWithEditor & { |
| compilationPanelShown: boolean; |
| compilerOutShown: boolean; |
| }; |
| export type PopulatedExecutorState = StateWithLanguage & |
| StateWithEditor & |
| StateWithTree & { |
| compiler: string; |
| libs: unknown; |
| options: unknown; |
| compilationPanelShown: boolean; |
| compilerOutShown: boolean; |
| }; |
| export type ExecutorForTreeState = StateWithLanguage & |
| StateWithTree & { |
| compilationPanelShown: boolean; |
| compilerOutShown: boolean; |
| }; |
| |
| export type EmptyEditorState = Partial<StateWithId & StateWithLanguage>; |
| export type PopulatedEditorState = StateWithId & { |
| source: string; |
| options: unknown; |
| }; |
| |
| export type EmptyTreeState = Partial<StateWithId>; |
| |
| export type OutputState = StateWithTree & { |
| compiler: number; // CompilerID |
| editor: number; // EditorId |
| }; |
| |
| export type ToolViewState = StateWithTree & |
| ToolState & { |
| id: number; // CompilerID (TODO(#4703): Why is this not part of StateWithTree) |
| compilerName: string; // Compiler Name (TODO(#4703): Why is this not part of StateWithTree) |
| editorid: number; // EditorId |
| toolId: string; |
| }; |
| |
| export type EmptyToolInputViewState = EmptyState; |
| export type PopulatedToolInputViewState = { |
| compilerId: number; |
| toolId: string; |
| toolName: string; |
| }; |
| |
| export type EmptyDiffViewState = EmptyState; |
| export type PopulatedDiffViewState = { |
| lhs: unknown; |
| rhs: unknown; |
| }; |
| |
| export type EmptyOptViewState = EmptyState; |
| export type PopulatedOptViewState = StateWithId & |
| StateWithEditor & { |
| optOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyFlagsViewState = EmptyState; |
| export type PopulatedFlagsViewState = StateWithId & { |
| compilerName: string; |
| compilerFlags: unknown; |
| }; |
| |
| export type EmptyPpViewState = EmptyState; |
| export type PopulatedPpViewState = StateWithId & |
| StateWithEditor & { |
| ppOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyAstViewState = EmptyState; |
| export type PopulatedAstViewState = StateWithId & |
| StateWithEditor & { |
| astOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyGccDumpViewState = EmptyState; |
| export type PopulatedGccDumpViewState = StateWithId & |
| GccDumpViewState & { |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyCfgViewState = EmptyState; |
| export type PopulatedCfgViewState = StateWithId & |
| CfgState & { |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyConformanceViewState = EmptyState; // TODO: unusued? |
| export type PopulatedConformanceViewState = { |
| editorid: number; |
| treeid: number; |
| langId: string; |
| source: string; |
| }; |
| |
| export type EmptyIrViewState = EmptyState; |
| export type PopulatedIrViewState = StateWithId & { |
| editorid: number; |
| treeid: number; |
| source: string; |
| irOutput: unknown; |
| compilerName: string; |
| }; |
| |
| export type EmptyLLVMOptPipelineViewState = EmptyState; |
| export type PopulatedLLVMOptPipelineViewState = StateWithId & |
| LLVMOptPipelineViewState & { |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyRustMirViewState = EmptyState; |
| export type PopulatedRustMirViewState = StateWithId & { |
| source: string; |
| rustMirOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyHaskellCoreViewState = EmptyState; |
| export type PopulatedHaskellCoreViewState = StateWithId & { |
| source: string; |
| haskellCoreOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyHaskellStgViewState = EmptyState; |
| export type PopulatedHaskellStgViewState = StateWithId & { |
| source: string; |
| haskellStgOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyHaskellCmmViewState = EmptyState; |
| export type PopulatedHaskellCmmViewState = StateWithId & { |
| source: string; |
| haskellCmmOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyGnatDebugTreeViewState = EmptyState; |
| export type PopulatedGnatDebugTreeViewState = StateWithId & { |
| source: string; |
| gnatDebugTreeOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyGnatDebugViewState = EmptyState; |
| export type PopulatedGnatDebugViewState = StateWithId & { |
| source: string; |
| gnatDebugOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyRustMacroExpViewState = EmptyState; |
| export type PopulatedRustMacroExpViewState = StateWithId & { |
| source: string; |
| rustMacroExpOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyRustHirViewState = EmptyState; |
| export type PopulatedRustHirViewState = StateWithId & { |
| source: string; |
| rustHirOutput: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |
| |
| export type EmptyDeviceViewState = EmptyState; |
| export type PopulatedDeviceViewState = StateWithId & { |
| source: string; |
| devices: unknown; |
| compilerName: string; |
| editorid: number; |
| treeid: number; |
| }; |