diff --git a/src/QsCompiler/BondSchemas/Protocols.cs b/src/QsCompiler/BondSchemas/Protocols.cs index 862161560e..9d10a0ed42 100644 --- a/src/QsCompiler/BondSchemas/Protocols.cs +++ b/src/QsCompiler/BondSchemas/Protocols.cs @@ -52,8 +52,43 @@ public static void Initialize() { lock (BondSharedDataStructuresLock) { - simpleBinaryDeserializerInitialization = QueueSimpleBinaryDeserializerInitialization(); - simpleBinarySerializerInitialization = QueueSimpleBinarySerializerInitialization(); + if (simpleBinaryDeserializerInitialization == null) + { + simpleBinaryDeserializerInitialization = QueueSimpleBinaryDeserializerInitialization(); + } + + if (simpleBinarySerializerInitialization == null) + { + simpleBinarySerializerInitialization = QueueSimpleBinarySerializerInitialization(); + } + } + } + + /// + /// Starts the creation of a Bond deserializer. + /// + public static void InitializeDeserializer() + { + lock (BondSharedDataStructuresLock) + { + if (simpleBinaryDeserializerInitialization == null) + { + simpleBinaryDeserializerInitialization = QueueSimpleBinaryDeserializerInitialization(); + } + } + } + + /// + /// Starts the creation of a Bond serializer. + /// + public static void InitializeSerializer() + { + lock (BondSharedDataStructuresLock) + { + if (simpleBinarySerializerInitialization == null) + { + simpleBinarySerializerInitialization = QueueSimpleBinarySerializerInitialization(); + } } } diff --git a/src/QsCompiler/Compiler/CompilationLoader.cs b/src/QsCompiler/Compiler/CompilationLoader.cs index 86d51ec911..1764c75bcf 100644 --- a/src/QsCompiler/Compiler/CompilationLoader.cs +++ b/src/QsCompiler/Compiler/CompilationLoader.cs @@ -477,11 +477,22 @@ public CompilationLoader(SourceLoader loadSources, ReferenceLoader loadReference this.RaiseCompilationTaskStart(null, "OverallCompilation"); // loading the content to compiler - BondSchemas.Protocols.Initialize(); this.logger = logger; this.LoadDiagnostics = ImmutableArray.Empty; this.config = options ?? default; + // When loading references is done through the generated C# a Bond deserializer is not needed. + if (!this.config.LoadReferencesBasedOnGeneratedCsharp) + { + BondSchemas.Protocols.InitializeDeserializer(); + } + + // When the syntax tree is not serialized a Bond serializer is not needed. + if (this.config.SerializeSyntaxTree) + { + BondSchemas.Protocols.InitializeSerializer(); + } + Status rewriteStepLoading = Status.Succeeded; this.externalRewriteSteps = ExternalRewriteStepsManager.Load(this.config, d => this.LogAndUpdateLoadDiagnostics(ref rewriteStepLoading, d), ex => this.LogAndUpdate(ref rewriteStepLoading, ex)); this.PrintLoadedRewriteSteps(this.externalRewriteSteps);