Commit c06fe60
committed
Refactor function resolution to support polymorphism and function arguments
Functions are now stored in the environment using their full
signatures rather than just their names. This allows support for
polymorphic functions and multiple overloads with different type
parameters.
Additionally, when evaluating a FuncCall whose target is an
Expression::Var, the resolution process has changed. Instead of
directly evaluating the variable and assuming it holds a value, we now
perform a scoped lookup. In each environment scope, we first look for
a variable with the given name; if not found, we then look for a
function. This behavior ensures variables shadow functions of the same
name in the same scope.
This change allows function values to be passed as arguments and gives
priority to local variables when both a function and variable share
the same identifier, enabling more flexible and predictable behavior
in higher-order and polymorphic scenarios1 parent f6f4666 commit c06fe60
6 files changed
Lines changed: 301 additions & 79 deletions
File tree
- src
- environment
- interpreter
- ir
- parser
- type_checker
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
1 | 2 | | |
2 | 3 | | |
3 | 4 | | |
4 | 5 | | |
5 | 6 | | |
| 7 | + | |
6 | 8 | | |
7 | 9 | | |
8 | 10 | | |
9 | 11 | | |
10 | | - | |
| 12 | + | |
11 | 13 | | |
12 | 14 | | |
13 | 15 | | |
| |||
26 | 28 | | |
27 | 29 | | |
28 | 30 | | |
29 | | - | |
| 31 | + | |
| 32 | + | |
30 | 33 | | |
31 | 34 | | |
32 | 35 | | |
| |||
41 | 44 | | |
42 | 45 | | |
43 | 46 | | |
44 | | - | |
45 | | - | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
46 | 59 | | |
47 | 60 | | |
48 | 61 | | |
| |||
51 | 64 | | |
52 | 65 | | |
53 | 66 | | |
54 | | - | |
55 | | - | |
| 67 | + | |
| 68 | + | |
56 | 69 | | |
57 | 70 | | |
58 | 71 | | |
59 | 72 | | |
60 | | - | |
| 73 | + | |
61 | 74 | | |
62 | 75 | | |
63 | | - | |
| 76 | + | |
64 | 77 | | |
65 | 78 | | |
66 | 79 | | |
67 | 80 | | |
68 | 81 | | |
69 | | - | |
| 82 | + | |
70 | 83 | | |
71 | 84 | | |
72 | 85 | | |
73 | | - | |
74 | | - | |
| 86 | + | |
| 87 | + | |
75 | 88 | | |
76 | 89 | | |
77 | | - | |
| 90 | + | |
78 | 91 | | |
79 | 92 | | |
80 | 93 | | |
| |||
108 | 121 | | |
109 | 122 | | |
110 | 123 | | |
111 | | - | |
| 124 | + | |
112 | 125 | | |
113 | | - | |
| 126 | + | |
114 | 127 | | |
115 | 128 | | |
116 | 129 | | |
117 | | - | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
118 | 149 | | |
119 | 150 | | |
120 | 151 | | |
| |||
160 | 191 | | |
161 | 192 | | |
162 | 193 | | |
163 | | - | |
| 194 | + | |
164 | 195 | | |
165 | | - | |
166 | | - | |
| 196 | + | |
| 197 | + | |
167 | 198 | | |
168 | 199 | | |
169 | | - | |
170 | | - | |
| 200 | + | |
| 201 | + | |
171 | 202 | | |
172 | 203 | | |
173 | 204 | | |
174 | 205 | | |
175 | 206 | | |
176 | 207 | | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
177 | 214 | | |
178 | 215 | | |
179 | 216 | | |
| |||
245 | 282 | | |
246 | 283 | | |
247 | 284 | | |
| 285 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
| 4 | + | |
| 5 | + | |
4 | 6 | | |
5 | 7 | | |
6 | 8 | | |
| |||
383 | 385 | | |
384 | 386 | | |
385 | 387 | | |
386 | | - | |
| 388 | + | |
387 | 389 | | |
388 | 390 | | |
389 | 391 | | |
390 | | - | |
391 | | - | |
392 | | - | |
| 392 | + | |
| 393 | + | |
| 394 | + | |
| 395 | + | |
| 396 | + | |
| 397 | + | |
| 398 | + | |
| 399 | + | |
| 400 | + | |
| 401 | + | |
| 402 | + | |
| 403 | + | |
| 404 | + | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
393 | 423 | | |
394 | | - | |
395 | | - | |
396 | | - | |
397 | | - | |
398 | | - | |
399 | | - | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
400 | 432 | | |
401 | | - | |
402 | | - | |
403 | | - | |
404 | | - | |
| 433 | + | |
405 | 434 | | |
406 | 435 | | |
407 | 436 | | |
408 | 437 | | |
409 | | - | |
410 | | - | |
411 | | - | |
412 | | - | |
413 | | - | |
| 438 | + | |
| 439 | + | |
| 440 | + | |
| 441 | + | |
| 442 | + | |
| 443 | + | |
| 444 | + | |
| 445 | + | |
| 446 | + | |
| 447 | + | |
| 448 | + | |
| 449 | + | |
| 450 | + | |
| 451 | + | |
| 452 | + | |
| 453 | + | |
| 454 | + | |
414 | 455 | | |
415 | | - | |
416 | | - | |
| 456 | + | |
| 457 | + | |
| 458 | + | |
| 459 | + | |
| 460 | + | |
| 461 | + | |
| 462 | + | |
| 463 | + | |
417 | 464 | | |
418 | 465 | | |
419 | 466 | | |
420 | | - | |
421 | | - | |
422 | | - | |
423 | | - | |
| 467 | + | |
| 468 | + | |
424 | 469 | | |
425 | | - | |
| 470 | + | |
| 471 | + | |
| 472 | + | |
426 | 473 | | |
427 | 474 | | |
428 | 475 | | |
429 | 476 | | |
430 | | - | |
| 477 | + | |
| 478 | + | |
| 479 | + | |
| 480 | + | |
431 | 481 | | |
432 | 482 | | |
433 | 483 | | |
| |||
0 commit comments