this is the simplest modulation, that usually is considered as
FM, but in the end is a PM.
Well, as I see it, it should be either FM or PM, it can't be one but in the end is something else. And your code is can only (not usually) be considered FM.
But it seems you're saying both are related, without getting into details - which is something we've already discussed here, and I've also pointed out (with no details either). But the bottom line is that they're different, and the same input parameters generate different results. Though I've said before the parameters can be "converted"/"adjusted" to sound the same.
Namely, the same modulation index does not generate the same result (Jean noticed that), and I can add the detail that the same modulating signal/waveform generate different results too. For example, a triangular wave modulating the phase is the same as a square wave modulating the frequency. So, they're quite different.
In terms of sine waves, what we've been doing so far, if you modulate the phase with a sine wave, you need to modulate the frequency with a cosine wave.
Like I pointed before, if you're going for a phase modulation implementation, you should just modulate the phase instead of trying to replicate it via frequency modulation, cause it's just more convenient to do directly via phase modulation if you want it to behave like that.
And that noted, several FM modules are not actually implemented via frequency modulation, but phase modulation (i.e DX7 and native's instruments FM8).
Anyway, performing FM in Chuck is easy and straightforward, it was never a question. The relationship between FM and PM was known and does not really mean they're both the same thing.
Hence, there's still a need to quest for an easy implementation of phase modulation.