@@ -286,7 +286,7 @@ x2 * 1.0
286
286
In contrast, let us imagine we do not know the value of ` n ` :
287
287
288
288
``` scala
289
- power(2 , unkownNumber )
289
+ power(2 , unknownNumber )
290
290
```
291
291
Driven by the inline annotation on the parameter, the compiler will try to unroll the recursion.
292
292
But without any success, since the parameter is not statically known.
@@ -297,22 +297,22 @@ But without any success, since the parameter is not statically known.
297
297
``` scala
298
298
// first inlines as
299
299
val x = 2
300
- if (unkownNumber == 0 ) 1.0
301
- else if (unkownNumber % 2 == 1 ) x * power(x, unkownNumber - 1 )
302
- else power(x * x, unkownNumber / 2 )
300
+ if (unknownNumber == 0 ) 1.0
301
+ else if (unknownNumber % 2 == 1 ) x * power(x, unknownNumber - 1 )
302
+ else power(x * x, unknownNumber / 2 )
303
303
// then inlined as
304
304
val x = 2
305
- if (unkownNumber == 0 ) 1.0
306
- else if (unkownNumber % 2 == 1 ) x * {
307
- if (unkownNumber - 1 == 0 ) 1.0
308
- else if ((unkownNumber - 1 ) % 2 == 1 ) x2 * power(x2, unkownNumber - 1 - 1 )
309
- else power(x2 * x2, (unkownNumber - 1 ) / 2 )
305
+ if (unknownNumber == 0 ) 1.0
306
+ else if (unknownNumber % 2 == 1 ) x * {
307
+ if (unknownNumber - 1 == 0 ) 1.0
308
+ else if ((unknownNumber - 1 ) % 2 == 1 ) x2 * power(x2, unknownNumber - 1 - 1 )
309
+ else power(x2 * x2, (unknownNumber - 1 ) / 2 )
310
310
}
311
311
else {
312
312
val x2 = x * x
313
- if (unkownNumber / 2 == 0 ) 1.0
314
- else if ((unkownNumber / 2 ) % 2 == 1 ) x2 * power(x2, unkownNumber / 2 - 1 )
315
- else power(x2 * x2, unkownNumber / 2 / 2 )
313
+ if (unknownNumber / 2 == 0 ) 1.0
314
+ else if ((unknownNumber / 2 ) % 2 == 1 ) x2 * power(x2, unknownNumber / 2 - 1 )
315
+ else power(x2 * x2, unknownNumber / 2 / 2 )
316
316
}
317
317
// Oops this will never finish compiling
318
318
...
@@ -331,7 +331,7 @@ inline def power(x: Double, inline n: Int): Double =
331
331
332
332
``` scala
333
333
power(2 , 2 ) // Ok
334
- power(2 , unkownNumber ) // error
334
+ power(2 , unknownNumber ) // error
335
335
```
336
336
337
337
We will come back to this example later and see how we can get more control on how code is generated.
0 commit comments