delay() and hardware interupts question

Hi

long-time listener first time caller.

Is delay() interrupted by a hardware interrupt? If a hardware interrupt occurs during a delay() statement what happens? I have been researching this put found contradicting statement on internet searches

// Push Button pin
#define buttonPin 2

void setup() {
  // Setup pins for button enable internal pull-up resistors and ISR
  digitalWrite(buttonPin, HIGH);
  attachInterrupt(0, TestButton, FALLING);

}
void loop() {

//do stuff a
foo;
delay(5);
//do stuff b
foo;
delay(5);
}

// TestButton:  ISR interrupt service routine on button press
void TestButton()
{
 //do stuff c
foo;
}

Yes, delay is interrupted by interrupts.

This is the delay function,

void delay(unsigned long ms)
{
    uint32_t start = micros();

    while (ms > 0) {
        yield();
        while ( ms > 0 && (micros() - start) >= 1000) {
            ms--;
            start += 1000;
        }
    }
}

found in wiring.c. It's just a function. Nothing magical about it and can be interrupted the same as any other function. Before you ask, yield is a weak function declared in hooks.c which allows its use in your own code for whatever during a delay (being a weak function means the compiler doesn't complain when you declare it a second time).