@@ -29,7 +29,6 @@ use buck2_events::dispatch::span;
29
29
use buck2_events:: dispatch:: span_async;
30
30
use buck2_futures:: cancellation:: CancellationContext ;
31
31
use buck2_interpreter:: dice:: starlark_provider:: with_starlark_eval_provider;
32
- use buck2_interpreter:: error:: BuckStarlarkError ;
33
32
use buck2_interpreter:: file_loader:: LoadedModule ;
34
33
use buck2_interpreter:: file_loader:: ModuleDeps ;
35
34
use buck2_interpreter:: import_paths:: HasImportPaths ;
@@ -46,15 +45,12 @@ use dice::DiceComputations;
46
45
use dice:: Key ;
47
46
use dupe:: Dupe ;
48
47
use futures:: FutureExt ;
49
- use indoc:: indoc;
50
48
use starlark:: codemap:: FileSpan ;
51
- use starlark:: environment:: Globals ;
52
- use starlark:: environment:: Module ;
53
49
use starlark:: syntax:: AstModule ;
54
- use starlark:: syntax:: Dialect ;
55
50
56
51
use crate :: interpreter:: buckconfig:: ConfigsOnDiceViewForStarlark ;
57
52
use crate :: interpreter:: cell_info:: InterpreterCellInfo ;
53
+ use crate :: interpreter:: check_starlark_stack_size:: check_starlark_stack_size;
58
54
use crate :: interpreter:: cycles:: LoadCycleDescriptor ;
59
55
use crate :: interpreter:: global_interpreter_state:: HasGlobalInterpreterState ;
60
56
use crate :: interpreter:: interpreter_for_cell:: InterpreterForCell ;
@@ -68,8 +64,6 @@ enum DiceCalculationDelegateError {
68
64
EvalBuildFileError ( BuildFilePath ) ,
69
65
#[ error( "Error evaluating module: `{0}`" ) ]
70
66
EvalModuleError ( String ) ,
71
- #[ error( "Error checking starlark stack size" ) ]
72
- CheckStarlarkStackSizeError ,
73
67
}
74
68
75
69
#[ async_trait]
@@ -442,80 +436,12 @@ impl<'c, 'd: 'c> DiceCalculationDelegate<'c, 'd> {
442
436
. await
443
437
}
444
438
445
- // In order to prevent non deterministic crashes
446
- // we intentionally set off a starlark stack overflow, to make
447
- // sure that starlark catches the overflow and reports an error
448
- // before the native stack overflows
449
- async fn check_starlark_stack_size ( & mut self ) -> anyhow:: Result < ( ) > {
450
- #[ derive( Debug , Display , Clone , Allocative , Eq , PartialEq , Hash ) ]
451
- struct StarlarkStackSizeChecker ;
452
-
453
- #[ async_trait]
454
- impl Key for StarlarkStackSizeChecker {
455
- type Value = buck2_error:: Result < ( ) > ;
456
-
457
- async fn compute (
458
- & self ,
459
- ctx : & mut DiceComputations ,
460
- _cancellation : & CancellationContext ,
461
- ) -> Self :: Value {
462
- with_starlark_eval_provider (
463
- ctx,
464
- & mut StarlarkProfilerOpt :: disabled ( ) ,
465
- "Check starlark stack size" . to_owned ( ) ,
466
- move |provider, _| {
467
- let env = Module :: new ( ) ;
468
- let ( mut eval, _) = provider. make ( & env) ?;
469
- let content = indoc ! (
470
- r#"
471
- def f():
472
- f()
473
- f()
474
- "#
475
- ) ;
476
- let ast =
477
- AstModule :: parse ( "x.star" , content. to_owned ( ) , & Dialect :: Extended )
478
- . map_err ( BuckStarlarkError :: new) ?;
479
- match eval. eval_module ( ast, & Globals :: standard ( ) ) {
480
- Err ( e) if e. to_string ( ) . contains ( "Starlark call stack overflow" ) => {
481
- Ok ( ( ) )
482
- }
483
- Err ( p) => Err ( BuckStarlarkError :: new ( p) . into ( ) ) ,
484
- Ok ( _) => {
485
- Err ( DiceCalculationDelegateError :: CheckStarlarkStackSizeError
486
- . into ( ) )
487
- }
488
- }
489
- } ,
490
- )
491
- . await ?;
492
- Ok ( ( ) )
493
- }
494
-
495
- fn equality ( x : & Self :: Value , y : & Self :: Value ) -> bool {
496
- match ( x, y) {
497
- ( Ok ( x) , Ok ( y) ) => x == y,
498
- _ => false ,
499
- }
500
- }
501
-
502
- fn validity ( x : & Self :: Value ) -> bool {
503
- x. is_ok ( )
504
- }
505
- }
506
-
507
- self . ctx
508
- . compute ( & StarlarkStackSizeChecker )
509
- . await ?
510
- . map_err ( anyhow:: Error :: from)
511
- }
512
-
513
439
pub async fn eval_build_file (
514
440
& mut self ,
515
441
package : PackageLabel ,
516
442
profiler_instrumentation : & mut StarlarkProfilerOpt < ' _ > ,
517
443
) -> buck2_error:: Result < Arc < EvaluationResult > > {
518
- self . check_starlark_stack_size ( ) . await ?;
444
+ check_starlark_stack_size ( self . ctx ) . await ?;
519
445
520
446
let listing = self . resolve_package_listing ( package. dupe ( ) ) . await ?;
521
447
0 commit comments