Commit 617f127
Overload (and other ambiguities) resolution and many fixes in the new binder (#1426)
This PR adds functionality to resolve function overloads and many other
ambiguities that were not possible to resolve with the stack graph
binder. It also fixes a lot of issues found via running the new binder
against contracts from sourcify (see #1419) as well as comparing the
bindings output by `solc`. The resulting binding information should be
much better than that obtained by the stack graph binder. Notably:
- function overloads are resolved by matching the type (and count) of
arguments
- `super` calls should resolve considering the current contract as the
target
- `using` directives consider the full type to which they apply
(previously eg. function types were not discernible)
- full and correct public getters types are created for complex data
types
- all built-ins should type correctly, even in tricky cases such as
`.push()` for arrays
- `abi.decode` can now be typed correctly
We're still not doing full validation, so the binder may return
incorrect results eg. for cases with no ambiguity but a type mismatch.
But the valid Solidity code, the expectation is that the new binder is
correct.
A lot of new snapshot cases are added in this PR, mostly to test
specific functionality or cases that the new binder handles. In many of
these, the old binder will produce incorrect output, so the diff reports
are expected to grow in number significantly.
---------
Co-authored-by: Beta Ziliani <beta@manas.tech>1 parent b71eaa9 commit 617f127
File tree
338 files changed
+17631
-3413
lines changed- crates/solidity
- outputs/cargo
- crate/src
- backend
- binder
- passes
- p3_linearise_contracts
- p4_type_definitions
- p5_resolve_references
- types
- utils
- tests/src
- backend/passes
- binder
- generated
- bindings/bindings_output/generated
- testing/snapshots/bindings_output
- arrays
- byte_array_indexing
- diff/generated
- generated
- v2/generated
- bytes_index_access
- diff/generated
- generated
- v2/generated
- built_ins
- abi_decode
- diff/generated
- generated
- v2/generated
- msg_data
- diff/generated
- generated
- v2/generated
- contracts
- diamond
- diff/generated
- v2/generated
- implicit_conversion_to_address
- diff/generated
- generated
- v2/generated
- inherited_legacy_constructor
- diff/generated
- generated
- v2/generated
- legacy_function_options
- diff/generated
- generated
- v2/generated
- overload_disambiguation_with_this
- diff/generated
- generated
- v2/generated
- private_member_not_visible
- diff/generated
- generated
- v2/generated
- public_getter_selector
- diff/generated
- generated
- v2/generated
- public_struct_getter
- generated
- v2/generated
- state_var_override
- diff/generated
- generated
- v2/generated
- super_linearisation
- diff/generated
- v2/generated
- virtual_methods
- diff/generated
- v2/generated
- events
- called_as_functions
- diff/generated
- generated
- v2/generated
- overload_selection
- diff/generated
- generated
- v2/generated
- expressions
- conditional
- diff/generated
- generated
- v2/generated
- funcalls_ambiguous_overload
- diff/generated
- generated
- v2/generated
- funcalls_named_overloads
- diff/generated
- generated
- v2/generated
- funcalls_nested_overload
- diff/generated
- generated
- v2/generated
- funcalls_overload_indexed
- diff/generated
- generated
- v2/generated
- funcalls_overload_member_access
- diff/generated
- generated
- v2/generated
- funcalls_overload_options
- diff/generated
- generated
- v2/generated
- funcalls_overload_this
- diff/generated
- generated
- v2/generated
- funcalls_overload_using_for
- diff/generated
- generated
- v2/generated
- funcalls_overload
- diff/generated
- generated
- v2/generated
- legacy_call_options
- diff/generated
- generated
- v2/generated
- literal_arithmetic
- diff/generated
- generated
- v2/generated
- literal_implicit_conversion
- diff/generated
- generated
- v2/generated
- member_inherits_data_location
- diff/generated
- generated
- v2/generated
- new_array
- diff/generated
- generated
- v2/generated
- uint160_address_casting
- diff/generated
- generated
- v2/generated
- functions
- external_calls_implicit_conversions
- diff/generated
- generated
- v2/generated
- implicit_location_conversion
- diff/generated
- generated
- v2/generated
- overrides_interface_method
- diff/generated
- generated
- v2/generated
- interfaces/implicit_conversions
- diff/generated
- generated
- v2/generated
- modifiers
- diamond
- diff/generated
- v2/generated
- virtual_modifier
- diff/generated
- v2/generated
- scoping
- hoisting_scopes/v2/generated
- private_variables
- diff/generated
- generated
- v2/generated
- statement_scope
- diff/generated
- generated
- v2/generated
- using
- attached_to_this
- diff/generated
- generated
- v2/generated
- can_override_built_ins
- diff/generated
- generated
- v2/generated
- disambiguate_with_interface_function
- diff/generated
- generated
- v2/generated
- overloaded_functions_attached
- diff/generated
- generated
- v2/generated
- overloaded_multi_arity
- diff/generated
- generated
- v2/generated
- receiver_implicit_conversion
- diff/generated
- generated
- v2/generated
- variables
- var_declaration/v2/generated
- var_tuple_declaration/v2/generated
- var_type_detection
- diff/generated
- generated
- v2/generated
- yul
- non_functional_notation
- diff/generated
- generated
- v2/generated
- slot_of_public_var_override
- diff/generated
- generated
- v2/generated
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
338 files changed
+17631
-3413
lines changedSome generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 59 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
74 | 74 | | |
75 | 75 | | |
76 | 76 | | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
77 | 85 | | |
78 | 86 | | |
79 | 87 | | |
80 | 88 | | |
81 | 89 | | |
| 90 | + | |
82 | 91 | | |
83 | 92 | | |
84 | 93 | | |
| |||
121 | 130 | | |
122 | 131 | | |
123 | 132 | | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
124 | 140 | | |
125 | 141 | | |
126 | 142 | | |
127 | 143 | | |
128 | 144 | | |
| 145 | + | |
129 | 146 | | |
130 | 147 | | |
131 | 148 | | |
| |||
240 | 257 | | |
241 | 258 | | |
242 | 259 | | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
243 | 294 | | |
244 | 295 | | |
245 | 296 | | |
| |||
298 | 349 | | |
299 | 350 | | |
300 | 351 | | |
| 352 | + | |
301 | 353 | | |
302 | 354 | | |
303 | 355 | | |
304 | 356 | | |
305 | 357 | | |
| 358 | + | |
306 | 359 | | |
307 | 360 | | |
308 | 361 | | |
| |||
361 | 414 | | |
362 | 415 | | |
363 | 416 | | |
364 | | - | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
365 | 422 | | |
366 | 423 | | |
367 | 424 | | |
368 | 425 | | |
| 426 | + | |
369 | 427 | | |
370 | 428 | | |
371 | 429 | | |
| |||
Lines changed: 71 additions & 14 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | | - | |
| 13 | + | |
| 14 | + | |
14 | 15 | | |
15 | 16 | | |
16 | 17 | | |
17 | | - | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
18 | 21 | | |
19 | 22 | | |
20 | 23 | | |
| |||
108 | 111 | | |
109 | 112 | | |
110 | 113 | | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
| 114 | + | |
| 115 | + | |
115 | 116 | | |
116 | 117 | | |
117 | | - | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
118 | 126 | | |
| 127 | + | |
| 128 | + | |
119 | 129 | | |
120 | 130 | | |
121 | 131 | | |
| |||
212 | 222 | | |
213 | 223 | | |
214 | 224 | | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
215 | 230 | | |
216 | 231 | | |
217 | 232 | | |
| |||
222 | 237 | | |
223 | 238 | | |
224 | 239 | | |
| 240 | + | |
| 241 | + | |
| 242 | + | |
| 243 | + | |
| 244 | + | |
225 | 245 | | |
226 | 246 | | |
227 | 247 | | |
| |||
300 | 320 | | |
301 | 321 | | |
302 | 322 | | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
303 | 331 | | |
304 | 332 | | |
305 | 333 | | |
| |||
344 | 372 | | |
345 | 373 | | |
346 | 374 | | |
347 | | - | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
348 | 378 | | |
349 | 379 | | |
350 | 380 | | |
| |||
361 | 391 | | |
362 | 392 | | |
363 | 393 | | |
364 | | - | |
| 394 | + | |
365 | 395 | | |
366 | 396 | | |
367 | 397 | | |
| |||
372 | 402 | | |
373 | 403 | | |
374 | 404 | | |
375 | | - | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
376 | 429 | | |
377 | 430 | | |
378 | 431 | | |
| |||
395 | 448 | | |
396 | 449 | | |
397 | 450 | | |
398 | | - | |
| 451 | + | |
399 | 452 | | |
400 | 453 | | |
401 | 454 | | |
| |||
423 | 476 | | |
424 | 477 | | |
425 | 478 | | |
426 | | - | |
| 479 | + | |
| 480 | + | |
| 481 | + | |
427 | 482 | | |
428 | 483 | | |
429 | 484 | | |
| |||
524 | 579 | | |
525 | 580 | | |
526 | 581 | | |
527 | | - | |
| 582 | + | |
528 | 583 | | |
529 | 584 | | |
530 | 585 | | |
| |||
533 | 588 | | |
534 | 589 | | |
535 | 590 | | |
536 | | - | |
| 591 | + | |
| 592 | + | |
| 593 | + | |
537 | 594 | | |
538 | 595 | | |
539 | 596 | | |
| |||
0 commit comments