Skip to content

Commit f5c37a6

Browse files
committed
Bind %YulExternal members only inside assembly blocks
1 parent 2e0d21e commit f5c37a6

File tree

22 files changed

+153
-113
lines changed

22 files changed

+153
-113
lines changed

crates/solidity/inputs/language/bindings/rules.msgb

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,9 @@ inherit .star_extension
102102

103103
;; Special case for built-ins: we want to export all symbols in the contract:
104104
;; functions, types and state variables. All built-in symbols are defined in an
105-
;; internal contract named '%BuiltIns%' (renamed from '$BuiltIns$') so we need
106-
;; to export all its members and type members directly as a source unit
107-
;; definition.
105+
;; internal contract named '%SolidityBuiltIns%' (renamed from
106+
;; '$SolidityBuiltIns$') so we need to export all its members and type members
107+
;; directly as a source unit definition.
108108
;; __SLANG_SOLIDITY_BUILT_INS_CONTRACT_NAME__ keep in sync with language definition.
109109
@source_unit [SourceUnit [SourceUnitMembers
110110
[SourceUnitMember @contract [ContractDefinition name: ["%SolidityBuiltIns%"]]]
@@ -114,6 +114,20 @@ inherit .star_extension
114114
}
115115
}
116116

117+
;; Similarly for Yul built-ins, we export all the symbols in the `%YulBuiltIns%`
118+
;; contract guarded by a `@yul` symbol.
119+
;; __SLANG_YUL_BUILT_INS_CONTRACT_NAME__ keep in sync with language definition file.
120+
@source_unit [SourceUnit [SourceUnitMembers
121+
[SourceUnitMember @contract [ContractDefinition name: ["%YulBuiltIns%"]]]
122+
]] {
123+
if (is-system-file FILE_PATH) {
124+
node yul
125+
attr (yul) pop_symbol = "@yul"
126+
edge @source_unit.defs -> yul
127+
edge yul -> @contract.instance
128+
}
129+
}
130+
117131
@source_unit [SourceUnit [SourceUnitMembers [SourceUnitMember @using [UsingDirective]]]] {
118132
; TODO: this is the hook for top-level extensions, but this should connect to
119133
; an extensions scope that gets pushed to the scope stack, as in the case of
@@ -1992,6 +2006,11 @@ inherit .star_extension
19922006
;;; Assembly
19932007
@stmt [Statement [AssemblyStatement @body body: [YulBlock]]] {
19942008
edge @body.lexical_scope -> @stmt.lexical_scope
2009+
2010+
node yul
2011+
attr (yul) push_symbol = "@yul"
2012+
edge @body.lexical_scope -> yul
2013+
edge yul -> @stmt.lexical_scope
19952014
}
19962015

19972016

crates/solidity/inputs/language/src/definition.rs

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7060,17 +7060,6 @@ codegen_language_macros::compile!(Language(
70607060
],
70617061
enabled = From("0.8.8")
70627062
),
7063-
BuiltInType(
7064-
name = "$YulExternal",
7065-
fields = [
7066-
// These apply to state and storage variables
7067-
BuiltInField(definition = "uint slot"),
7068-
BuiltInField(definition = "uint offset"),
7069-
// Dynamic calldata arrays also have a length
7070-
BuiltInField(definition = "uint length")
7071-
],
7072-
functions = []
7073-
),
70747063
BuiltInVariable(definition = "$Function $placeholder"),
70757064
BuiltInVariable(definition = "$AbiType abi"),
70767065
BuiltInVariable(definition = "$BlockType block"),
@@ -7081,6 +7070,20 @@ codegen_language_macros::compile!(Language(
70817070
BuiltInVariable(definition = "$TransactionType tx")
70827071
]
70837072
),
7084-
BuiltInContext(name = "$YulBuiltIns$", definitions = [])
7073+
BuiltInContext(
7074+
// __SLANG_YUL_BUILT_INS_CONTRACT_NAME__ keep in sync with binding rules file.
7075+
name = "$YulBuiltIns$",
7076+
definitions = [BuiltInType(
7077+
name = "$YulExternal",
7078+
fields = [
7079+
// These apply to state and storage variables
7080+
BuiltInField(definition = "uint slot"),
7081+
BuiltInField(definition = "uint offset"),
7082+
// Dynamic calldata arrays also have a length
7083+
BuiltInField(definition = "uint length")
7084+
],
7085+
functions = []
7086+
)]
7087+
)
70857088
]
70867089
));

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/binding_rules.rs

Lines changed: 21 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.4.11.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.4.17.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.4.22.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.5.0.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.5.3.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.6.0.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.6.2.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.6.7.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.6.8.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.7.0.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.8.0.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/solidity/outputs/cargo/crate/src/generated/bindings/generated/built_ins/0.8.11.sol

Lines changed: 5 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)