mirror of
https://github.com/FuelLabs/sway.git
synced 2025-08-08 04:38:19 +00:00
3 commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
![]() |
a5d9d2835f
|
Merge std and core libraries (#6729)
## Description Merges the two libraries. They were initially separate to separate the core logic and fuel vm specific functionality, but that separation is no longer maintained so having a merged library is better. Closes #6708 ## Checklist - [ ] I have linked to any relevant issues. - [ ] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [ ] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [ ] I have requested a review from the relevant team or maintainers. --------- Co-authored-by: Sophie <47993817+sdankel@users.noreply.github.com> Co-authored-by: Igor Rončević <ironcev@hotmail.com> |
||
![]() |
1aec319e31
|
set new encoding as true by default and allow it to be disabled (#5915)
## Description This PR sets the "new encoding" (from now on will be called "encoding v1") as the default. We can still disable it using `no_encoding_v1`, which switches back to "encoding v0". Actions that needs to be done after this being merged will exist in https://github.com/FuelLabs/sway/issues/5727 New features - ABI Super traits; - AbiEncode buffer dynamic sizing; Bugs Fixed - `ContractCall` intrinsic interaction effect was not set correctly; Fixing warnings and error messages - Better error message when core-lib is not available for scripts/contracts/predicates; - Better error message when main inputs/outputs are unknown or error types; - Better error message when main inputs/outputs do not implement AbiEncode/AbiDecode; - Don't warn impurity attributes on the "__entry" fn; - Don't warn CEI on the "__entry" fn. Our CEI analysis, currently, does not recognize `Never`. This means it does not realize it is impossible to call two contract functions; Test Disabled (needs to be enabled again in the future) - should_pass/language/name_resolution_after_monomorphization - should_pass/language/shadowing/shadowed_glob_imports - should_pass/language/name_resolution_inside_intrinsics - sdk-harness/external_proxy test is not working. I am assuming it is the LDC bug that is already fixed on version 0.25. What is happening is that the literal "double_value" has the correct length, but some random data. Which makes the method selector fails. Only after we call LDC. The proxy contract is working. Test generating more warnings than before - should_pass/dca/contract/superabi_contract_calls What happens here is that when we implement a trait for `Contract`, we actually generate two functions: one prefixed `__contract_entry` that is called by the method selector; and another one normal, that can be called freely. So, if the trait method is never called manually, it is marked as dead. - should_pass/dca/contract/abi_fn_params I actually think the new warning is correct and nothing here needs to be done. Test with fewer warnings than before - should_pass/dca/unused_fields auto-impl is making all fields being used. so no dead code warnings are being generated. We need to fix this. Changes to std-lib - Functions that return data about call context changed the semantic. `first_param` and `second_param` return the value as the VM sees them. We now have `called_method` and `called_args`. This means that we can change the protocol later and still keep these four functions always working and with meaningful names. - - predicate_data also was updated to use encoding v1 protocol. ICE - increase_buffer_if_needed implementation is a little bit strange because does not work as a method inside `Buffer`. For some reason, it is generating an ICE. I need to create an issue so we can fix, and improve the implementation here. - `Buffer` used by AbiEncode needs a `push_bytes` so we can be more efficient when encoding Bytes and others. ## Checklist - [ ] I have linked to any relevant issues. - [ ] I have commented my code, particularly in hard-to-understand areas. - [ ] I have updated the documentation where relevant (API docs, the reference, and the Sway book). - [ ] If my change requires substantial documentation changes, I have [requested support from the DevRel team](https://github.com/FuelLabs/devrel-requests/issues/new/choose) - [ ] I have added tests that prove my fix is effective or that my feature works. - [ ] I have added (or requested a maintainer to add) the necessary `Breaking*` or `New Feature` labels where relevant. - [ ] I have done my best to ensure that my PR adheres to [the Fuel Labs Code Review Standards](https://github.com/FuelLabs/rfcs/blob/master/text/code-standards/external-contributors.md). - [ ] I have requested a review from the relevant team or maintainers. |
||
![]() |
8320c1ba12
|
Struct field privacy (#5508)
## Description This PR makes struct fields private by default and introduces explicit public struct fields: ``` pub struct Struct { pub public_field: u8, private_field: u8, } ``` Private fields can be accessed only withing the module in which their struct is declared. Error messages are properly orchestrated so that no conflicting or duplicated messages are emitted. Since the change is a breaking change, relevant suggestion on how to fix the particular issue are given. To avoid an abrupt breaking change, the errors are temporarily turned into warnings. These warnings will become errors in the upcoming versions of Sway. The demo section below demonstrate how the errors will look like, and how a one warning equivalent looks now. Standard library structs like `Vec` or `String`, are adapted where needed by adding the `pub` keyword to the fields that are accessed outside of the struct declaration module. Some of these fields should very likely remain public, but some, like e.g., `RawBytes::ptr` or `Vec::buf` should be private. Adjusting the standard library to properly utilize private fields is out of scope of this PR and will be done separately. I expect breaking changes in the STD once we start modeling structs keeping encapsulation in mind. In addition, the PR: - migrates [annotate_snippets](https://github.com/rust-lang/annotate-snippets-rs) crate to its latest version (breaking changes) - removes a redundant non-existing field error and orchestrates non-existing field error with privacy errors - replaces an invalid and misleading error when accessing fields on storage elements that are not structs Closes #4692. ## Known limitations There is an issue in displaying multi-line code snippets, which is independent of these changes, but wasn't apparent before. The issue is visible in the demo section below, where the struct bodies are sometimes not fully shown, and they should be. This issue is reported in #5499 and will be solved in a separate PR. ## Demo (an excerpt 😄) ### Private struct field is inaccessible ![Private struct field is inaccessible]( |