Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Return a reference with all entitlements, when access through owned values #2637

Merged

Conversation

SupunS
Copy link
Member

@SupunS SupunS commented Jul 6, 2023

Work towards #2638
Work towards onflow/flips#94
Closes #2536

Description

Adds the improvement discussed in #2588 (comment)


  • Targeted PR against master branch
  • Linked to Github issue with discussion and accepted design OR link to spec that describes this work
  • Code follows the standards mentioned here
  • Updated relevant documentation
  • Re-reviewed Files changed in the Github PR explorer
  • Added appropriate labels

@SupunS SupunS self-assigned this Jul 6, 2023
@SupunS SupunS marked this pull request as ready for review July 6, 2023 20:45
@github-actions
Copy link

github-actions bot commented Jul 6, 2023

Cadence Benchstat comparison

This branch with compared with the base branch onflow:feature/mutability-restrictions commit 8fe5295
The command for i in {1..N}; do go test ./... -run=XXX -bench=. -benchmem -shuffle=on; done was used.
Bench tests were run a total of 7 times on each branch.

Collapsed results for better readability

old.txtnew.txt
time/opdelta
CheckContractInterfaceFungibleTokenConformance-2145µs ± 0%144µs ± 0%~(p=1.000 n=1+1)
ContractInterfaceFungibleToken-249.5µs ± 0%49.3µs ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsCCF-2183ms ± 0%179ms ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-2569ms ± 0%564ms ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-23.82µs ± 0%3.83µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.TokensWithdrawn-22.98µs ± 0%2.92µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-23.88µs ± 0%3.81µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-24.17µs ± 0%4.06µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-23.05µs ± 0%2.97µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowIDTableStaking.RewardsPaid-23.55µs ± 0%3.54µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited-23.60µs ± 0%3.49µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-23.59µs ± 0%3.40µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensMinted-22.94µs ± 0%3.00µs ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowToken.TokensWithdrawn-24.02µs ± 0%3.56µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.FeesDeducted-214.9µs ± 0%24.4µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowFees.TokensWithdrawn-28.19µs ± 0%12.07µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-212.8µs ± 0%13.3µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-217.7µs ± 0%18.9µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-28.42µs ± 0%9.00µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowIDTableStaking.RewardsPaid-210.9µs ± 0%11.3µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited-211.6µs ± 0%11.9µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-210.5µs ± 0%10.8µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensMinted-28.12µs ± 0%8.84µs ± 0%~(p=1.000 n=1+1)
DecodeJSON/FlowToken.TokensWithdrawn-211.3µs ± 0%11.9µs ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsCCF-281.0ms ± 0%116.0ms ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-2148ms ± 0%205ms ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-22.85µs ± 0%1.69µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.TokensWithdrawn-22.05µs ± 0%1.38µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-22.38µs ± 0%1.69µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-21.82µs ± 0%1.83µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-21.39µs ± 0%1.36µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowIDTableStaking.RewardsPaid-21.54µs ± 0%1.55µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited-21.63µs ± 0%1.63µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-21.62µs ± 0%1.63µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensMinted-21.36µs ± 0%1.35µs ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowToken.TokensWithdrawn-21.65µs ± 0%1.65µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowFees.FeesDeducted-23.58µs ± 0%3.69µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowFees.TokensWithdrawn-21.87µs ± 0%1.91µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-23.15µs ± 0%3.13µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-24.50µs ± 0%4.55µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-21.89µs ± 0%1.93µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowIDTableStaking.RewardsPaid-22.61µs ± 0%2.59µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited-23.02µs ± 0%3.07µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-22.35µs ± 0%2.32µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensMinted-21.87µs ± 0%1.88µs ± 0%~(p=1.000 n=1+1)
EncodeJSON/FlowToken.TokensWithdrawn-23.03µs ± 0%2.90µs ± 0%~(p=1.000 n=1+1)
ExportType/composite_type-2411ns ± 0%414ns ± 0%~(p=1.000 n=1+1)
ExportType/simple_type-261.7ns ± 0%64.3ns ± 0%~(p=1.000 n=1+1)
InterpretRecursionFib-23.08ms ± 0%2.81ms ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-21.54µs ± 0%1.81µs ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_sub-interpreter-2715ns ± 0%732ns ± 0%~(p=1.000 n=1+1)
ParseArray-29.39ms ± 0%10.46ms ± 0%~(p=1.000 n=1+1)
ParseDeploy/byte_array-214.2ms ± 0%14.4ms ± 0%~(p=1.000 n=1+1)
ParseDeploy/decode_hex-21.44ms ± 0%1.41ms ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/With_memory_metering-2226µs ± 0%239µs ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/Without_memory_metering-2174µs ± 0%189µs ± 0%~(p=1.000 n=1+1)
ParseInfix-28.01µs ± 0%8.04µs ± 0%~(p=1.000 n=1+1)
QualifiedIdentifierCreation/One_level-22.77ns ± 0%2.79ns ± 0%~(p=1.000 n=1+1)
QualifiedIdentifierCreation/Three_levels-2166ns ± 0%162ns ± 0%~(p=1.000 n=1+1)
RuntimeResourceDictionaryValues-26.40ms ± 0%6.31ms ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-25.75µs ± 0%5.47µs ± 0%~(p=1.000 n=1+1)
SuperTypeInference/arrays-2392ns ± 0%395ns ± 0%~(p=1.000 n=1+1)
SuperTypeInference/composites-2171ns ± 0%171ns ± 0%~(p=1.000 n=1+1)
SuperTypeInference/integers-2117ns ± 0%114ns ± 0%~(p=1.000 n=1+1)
ValueIsSubtypeOfSemaType-2112ns ± 0%109ns ± 0%~(p=1.000 n=1+1)
 
alloc/opdelta
CheckContractInterfaceFungibleTokenConformance-253.3kB ± 0%53.3kB ± 0%~(all equal)
ContractInterfaceFungibleToken-225.9kB ± 0%25.9kB ± 0%~(all equal)
DecodeBatchEventsCCF-267.3MB ± 0%67.3MB ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-2246MB ± 0%246MB ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-21.41kB ± 0%1.41kB ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-21.22kB ± 0%1.22kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-21.49kB ± 0%1.49kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-21.50kB ± 0%1.50kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-21.26kB ± 0%1.26kB ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-21.38kB ± 0%1.38kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-21.34kB ± 0%1.34kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-21.33kB ± 0%1.33kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-21.22kB ± 0%1.22kB ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-21.35kB ± 0%1.35kB ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-26.03kB ± 0%6.03kB ± 0%~(all equal)
DecodeJSON/FlowFees.TokensWithdrawn-23.62kB ± 0%3.62kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-25.46kB ± 0%5.46kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-27.40kB ± 0%7.40kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-23.67kB ± 0%3.67kB ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.RewardsPaid-24.57kB ± 0%4.57kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited-24.93kB ± 0%4.93kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-24.50kB ± 0%4.50kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensMinted-23.63kB ± 0%3.63kB ± 0%~(all equal)
DecodeJSON/FlowToken.TokensWithdrawn-24.91kB ± 0%4.91kB ± 0%~(all equal)
EncodeBatchEventsCCF-237.1MB ± 0%37.1MB ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-234.0MB ± 0%34.0MB ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-2736B ± 0%736B ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-2688B ± 0%688B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-2800B ± 0%800B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-2768B ± 0%768B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-2704B ± 0%704B ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-2784B ± 0%784B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-2752B ± 0%752B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-2736B ± 0%736B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-2688B ± 0%688B ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-2752B ± 0%752B ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-2768B ± 0%768B ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-2408B ± 0%408B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-2760B ± 0%760B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-2952B ± 0%952B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-2424B ± 0%424B ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-2624B ± 0%624B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-2680B ± 0%680B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-2544B ± 0%544B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-2416B ± 0%416B ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-2672B ± 0%672B ± 0%~(all equal)
ExportType/composite_type-2136B ± 0%136B ± 0%~(all equal)
ExportType/simple_type-20.00B 0.00B ~(all equal)
InterpretRecursionFib-21.00MB ± 0%1.00MB ± 0%~(p=1.000 n=1+1)
NewInterpreter/new_interpreter-2992B ± 0%992B ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-2200B ± 0%200B ± 0%~(all equal)
ParseArray-22.74MB ± 0%2.74MB ± 0%~(p=1.000 n=1+1)
ParseDeploy/byte_array-24.09MB ± 0%4.30MB ± 0%~(p=1.000 n=1+1)
ParseDeploy/decode_hex-2214kB ± 0%214kB ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/With_memory_metering-229.7kB ± 0%29.8kB ± 0%~(p=1.000 n=1+1)
ParseFungibleToken/Without_memory_metering-229.8kB ± 0%29.8kB ± 0%~(all equal)
ParseInfix-21.91kB ± 0%1.91kB ± 0%~(all equal)
QualifiedIdentifierCreation/One_level-20.00B 0.00B ~(all equal)
QualifiedIdentifierCreation/Three_levels-264.0B ± 0%64.0B ± 0%~(all equal)
RuntimeResourceDictionaryValues-22.30MB ± 0%2.30MB ± 0%~(p=1.000 n=1+1)
RuntimeScriptNoop-23.21kB ± 0%3.21kB ± 0%~(p=1.000 n=1+1)
SuperTypeInference/arrays-296.0B ± 0%96.0B ± 0%~(all equal)
SuperTypeInference/composites-20.00B 0.00B ~(all equal)
SuperTypeInference/integers-20.00B 0.00B ~(all equal)
ValueIsSubtypeOfSemaType-248.0B ± 0%48.0B ± 0%~(all equal)
 
allocs/opdelta
CheckContractInterfaceFungibleTokenConformance-2850 ± 0%850 ± 0%~(all equal)
ContractInterfaceFungibleToken-2392 ± 0%392 ± 0%~(all equal)
DecodeBatchEventsCCF-21.48M ± 0%1.48M ± 0%~(p=1.000 n=1+1)
DecodeBatchEventsJSON-24.75M ± 0%4.75M ± 0%~(p=1.000 n=1+1)
DecodeCCF/FlowFees.FeesDeducted-230.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowFees.TokensWithdrawn-226.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-230.0 ± 0%30.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-232.0 ± 0%32.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.NewWeeklyPayout-226.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowIDTableStaking.RewardsPaid-229.0 ± 0%29.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited-231.0 ± 0%31.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensDeposited_with_nil_receiver-229.0 ± 0%29.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensMinted-226.0 ± 0%26.0 ± 0%~(all equal)
DecodeCCF/FlowToken.TokensWithdrawn-231.0 ± 0%31.0 ± 0%~(all equal)
DecodeJSON/FlowFees.FeesDeducted-2129 ± 0%129 ± 0%~(all equal)
DecodeJSON/FlowFees.TokensWithdrawn-272.0 ± 0%72.0 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-2103 ± 0%103 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-2163 ± 0%163 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.NewWeeklyPayout-271.0 ± 0%71.0 ± 0%~(all equal)
DecodeJSON/FlowIDTableStaking.RewardsPaid-288.0 ± 0%88.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited-296.0 ± 0%96.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensDeposited_with_nil_receiver-287.0 ± 0%87.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensMinted-272.0 ± 0%72.0 ± 0%~(all equal)
DecodeJSON/FlowToken.TokensWithdrawn-296.0 ± 0%96.0 ± 0%~(all equal)
EncodeBatchEventsCCF-2467k ± 0%467k ± 0%~(p=1.000 n=1+1)
EncodeBatchEventsJSON-2757k ± 0%757k ± 0%~(p=1.000 n=1+1)
EncodeCCF/FlowFees.FeesDeducted-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowFees.TokensWithdrawn-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.DelegatorRewardsPaid-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.EpochTotalRewardsPaid-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.NewWeeklyPayout-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowIDTableStaking.RewardsPaid-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensDeposited_with_nil_receiver-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensMinted-29.00 ± 0%9.00 ± 0%~(all equal)
EncodeCCF/FlowToken.TokensWithdrawn-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeJSON/FlowFees.FeesDeducted-217.0 ± 0%17.0 ± 0%~(all equal)
EncodeJSON/FlowFees.TokensWithdrawn-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.DelegatorRewardsPaid-214.0 ± 0%14.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.EpochTotalRewardsPaid-223.0 ± 0%23.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.NewWeeklyPayout-210.0 ± 0%10.0 ± 0%~(all equal)
EncodeJSON/FlowIDTableStaking.RewardsPaid-213.0 ± 0%13.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited-217.0 ± 0%17.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensDeposited_with_nil_receiver-212.0 ± 0%12.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensMinted-211.0 ± 0%11.0 ± 0%~(all equal)
EncodeJSON/FlowToken.TokensWithdrawn-216.0 ± 0%16.0 ± 0%~(all equal)
ExportType/composite_type-23.00 ± 0%3.00 ± 0%~(all equal)
ExportType/simple_type-20.00 0.00 ~(all equal)
InterpretRecursionFib-218.9k ± 0%18.9k ± 0%~(all equal)
NewInterpreter/new_interpreter-216.0 ± 0%16.0 ± 0%~(all equal)
NewInterpreter/new_sub-interpreter-24.00 ± 0%4.00 ± 0%~(all equal)
ParseArray-259.6k ± 0%59.6k ± 0%~(p=1.000 n=1+1)
ParseDeploy/byte_array-289.4k ± 0%89.4k ± 0%~(p=1.000 n=1+1)
ParseDeploy/decode_hex-263.0 ± 0%63.0 ± 0%~(all equal)
ParseFungibleToken/With_memory_metering-2778 ± 0%778 ± 0%~(all equal)
ParseFungibleToken/Without_memory_metering-2778 ± 0%778 ± 0%~(all equal)
ParseInfix-248.0 ± 0%48.0 ± 0%~(all equal)
QualifiedIdentifierCreation/One_level-20.00 0.00 ~(all equal)
QualifiedIdentifierCreation/Three_levels-22.00 ± 0%2.00 ± 0%~(all equal)
RuntimeResourceDictionaryValues-237.0k ± 0%37.0k ± 0%~(all equal)
RuntimeScriptNoop-251.0 ± 0%51.0 ± 0%~(all equal)
SuperTypeInference/arrays-23.00 ± 0%3.00 ± 0%~(all equal)
SuperTypeInference/composites-20.00 0.00 ~(all equal)
SuperTypeInference/integers-20.00 0.00 ~(all equal)
ValueIsSubtypeOfSemaType-21.00 ± 0%1.00 ± 0%~(all equal)
 

@codecov
Copy link

codecov bot commented Jul 6, 2023

Codecov Report

Merging #2637 (e2ccbb0) into feature/mutability-restrictions (73c9b97) will increase coverage by 0.00%.
The diff coverage is 100.00%.

❗ Current head e2ccbb0 differs from pull request most recent head 842a9cd. Consider uploading reports for the commit 842a9cd to get more accurate results

@@                       Coverage Diff                        @@
##           feature/mutability-restrictions    #2637   +/-   ##
================================================================
  Coverage                            78.89%   78.90%           
================================================================
  Files                                  341      341           
  Lines                                81820    81850   +30     
================================================================
+ Hits                                 64555    64585   +30     
  Misses                               14909    14909           
  Partials                              2356     2356           
Flag Coverage Δ
unittests 78.90% <100.00%> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files Coverage Δ
runtime/interpreter/interpreter.go 88.37% <100.00%> (+0.02%) ⬆️
runtime/interpreter/interpreter_expression.go 87.54% <100.00%> (ø)
runtime/sema/check_member_expression.go 98.30% <100.00%> (+0.10%) ⬆️

Copy link
Member

@turbolent turbolent left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@turbolent
Copy link
Member

It would be good to get a review from @dsainati1 here before merging

@SupunS SupunS force-pushed the supun/identity-mapping-improvement branch from b52fa45 to a54cad8 Compare July 7, 2023 18:14
Copy link
Contributor

@dsainati1 dsainati1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, thank you for adding this. Does this also address #2588 (comment)?

I don't see any updated tests here, so if this is not fixed by this PR I think it can be just by using this same AllSupportedEntitlements functionality.

runtime/interpreter/interpreter.go Show resolved Hide resolved
runtime/tests/checker/entitlements_test.go Show resolved Hide resolved
runtime/sema/check_member_expression.go Outdated Show resolved Hide resolved
@SupunS
Copy link
Member Author

SupunS commented Jul 10, 2023

@dsainati1 No it doesn't address #2588 (comment). Like discussed there, it is impossible to know all possible entitlements for a AnyStruct/AnyResource, neither there is a way to represent the notion of 'all enttilements'. Created #2635, to track that.

@dsainati1
Copy link
Contributor

is impossible to know all possible entitlements for a AnyStruct/AnyResource

Ah okay I see the problem. In that case I think the current behavior is fine actually; after thinking about it further this is not the only case with the Identity mapping where you can get fewer entitlements on an owned access than with an entitled reference. E.g.

entitlement A
entitlement B

struct X {
    access(A) let foo: String 
    // ...
}

struct Y {
    access(Identity) fun getX(): auth(Identity) &X {
            // ....
    }
} 

// access on owned Y
let y = Y()
let x: auth(A) &X = y.getX() // entitled only to `A`, as this is all that `X` supports

// access on authorized Y reference
let yRef = &y as auth(A, B) &Y 
let x: auth(A, B) &X = y.getX() // entitled to both

It is somewhat unusual to realize that the Identity mapping loses the monotonicity property that other entitlement mappings usually have with respect to the owned value being the most powerful possible input, but I think that is okay. I really don't want to add an owner entitlement for the reasons discussed before, namely that it enables a lazy programming style where developers don't have to fully consider their security properties as thoroughly as they should.

@SupunS SupunS force-pushed the supun/identity-mapping-improvement branch from e2ccbb0 to 76e239e Compare July 17, 2023 21:23
@SupunS SupunS force-pushed the supun/identity-mapping-improvement branch from 76e239e to 842a9cd Compare July 17, 2023 21:25
@SupunS SupunS requested a review from dsainati1 July 17, 2023 21:27
Copy link
Contributor

@dsainati1 dsainati1 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me! Thanks for investigating all the issues here.

@SupunS SupunS merged commit e8c73bd into feature/mutability-restrictions Jul 18, 2023
@SupunS SupunS deleted the supun/identity-mapping-improvement branch October 24, 2024 18:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants