public final void compile() {
   if (!isCompiling()) {
     ensureCloned();
     runtime.compile(
         this,
         TruffleBackgroundCompilation.getValue()
             && !TruffleCompilationExceptionsAreThrown.getValue());
   }
 }
 public OptimizedCallTarget cloneUninitialized() {
   ensureCloned();
   RootNode copiedRoot = cloneRootNode(uninitializedRootNode);
   if (copiedRoot == null) {
     return null;
   }
   OptimizedCallTarget splitTarget =
       (OptimizedCallTarget) runtime.createClonedCallTarget(this, copiedRoot);
   splitTarget.cloneIndex = cloneIndex++;
   return splitTarget;
 }
 private void interpreterCall() {
   if (isValid()) {
     // Stubs were deoptimized => reinstall.
     this.runtime.reinstallStubs();
   } else {
     if (uninitializedRootNode == UNINITIALIZED) {
       ensureCloned();
     }
     compilationProfile.reportInterpreterCall();
     if (!isCompiling()
         && compilationPolicy.shouldCompile(compilationProfile, getCompilerOptions())) {
       compile();
     }
   }
 }