@@ -256,7 +256,7 @@ struct JobExecutorBuildDelegate: LLBuildEngineDelegate {
256
256
case ExecuteAllJobsRule . ruleName:
257
257
return ExecuteAllJobsRule ( key)
258
258
case ExecuteJobRule . ruleName:
259
- return ExecuteJobRule ( key)
259
+ return ExecuteJobRule ( key, context : context )
260
260
default :
261
261
fatalError ( " Unknown rule \( rule) " )
262
262
}
@@ -336,18 +336,18 @@ class ExecuteJobRule: LLBuildRule {
336
336
override class var ruleName : String { " \( ExecuteJobRule . self) " }
337
337
338
338
private let key : RuleKey
339
+ private let context : JobExecutor . Context
339
340
340
341
/// True if any of the inputs had any error.
341
342
private var allInputsSucceeded : Bool = true
342
343
343
- init ( _ key: Key ) {
344
+ init ( _ key: Key , context : JobExecutor . Context ) {
344
345
self . key = RuleKey ( key)
346
+ self . context = context
345
347
super. init ( )
346
348
}
347
349
348
350
override func start( _ engine: LLTaskBuildEngine ) {
349
- let context = engine. jobExecutorContext
350
-
351
351
for (idx, input) in key. job. inputs. enumerated ( ) {
352
352
if let producingJob = context. producerMap [ input. file] {
353
353
let key = ExecuteJobRule . RuleKey ( job: producingJob)
@@ -375,14 +375,11 @@ class ExecuteJobRule: LLBuildRule {
375
375
return engine. taskIsComplete ( DriverBuildValue . jobExecution ( success: false ) )
376
376
}
377
377
378
- let context = engine. jobExecutorContext
379
- context. jobQueue. addOperation {
380
- self . executeJob ( engine)
381
- }
378
+ engine. taskIsComplete ( self . executeJob ( engine) )
382
379
}
383
380
384
- private func executeJob( _ engine: LLTaskBuildEngine ) {
385
- let context = engine . jobExecutorContext
381
+ private func executeJob( _ engine: LLTaskBuildEngine ) -> DriverBuildValue {
382
+ let context = self . context
386
383
let resolver = context. argsResolver
387
384
let job = key. job
388
385
let env = context. env. merging ( job. extraEnvironment, uniquingKeysWith: { $1 } )
@@ -433,15 +430,8 @@ class ExecuteJobRule: LLBuildRule {
433
430
value = . jobExecution( success: false )
434
431
}
435
432
436
- engine . taskIsComplete ( value)
433
+ return value
437
434
}
438
435
}
439
436
440
437
extension Job : LLBuildValue { }
441
-
442
- extension LLTaskBuildEngine {
443
- /// Returns the job executor context.
444
- var jobExecutorContext : JobExecutor . Context {
445
- return ( delegate as! JobExecutorBuildDelegate ) . context
446
- }
447
- }
0 commit comments