Skip to content

Commit 4607e6a

Browse files
Constraining pragma identifiers (#1388)
Closes #1385 (once completed) - [x] Update `ExperimentalPragma` to reference specific keywords for `ABIEncoderV2` and `SMTChecker` - [x] Enabled from >=0.4.16 - [x] Update `AbicoderPragma` to reference specific keywords for `v1` and `v2`. - [x] Enabled from >=0.7.5 - [x] Add the correct `enabled` and `reserved` version ranges to the 4 new keywords. - [x] Search the codebase for references to these nodes to remove any exclusions. - [x] If #1325 is merged before this one, remove from the npm tests too - [x] Are there any other "dangling" identifiers? we should review them. --------- Co-authored-by: Omar Tawfik <15987992+OmarTawfik@users.noreply.github.com>
1 parent 4f42ddb commit 4607e6a

File tree

52 files changed

+1238
-280
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+1238
-280
lines changed

.changeset/free-peaches-jump.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
---
2+
"@nomicfoundation/slang": patch
3+
---
4+
5+
Fixed the pragma grammar and CST nodes:
6+
7+
- `pragma abicoder <version>`:
8+
- Only enabled starting Solidity `0.7.5`.
9+
- `<version>` is restricted to new keywords (`v1` and `v2`).
10+
- `pragma experimental <flag>`:
11+
- Only enabled starting Solidity `0.4.16`.
12+
- `<flag>` is restricted to be a string, or new keywords representing `ABIEncoderV2` and `SMTChecker`.

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

Lines changed: 82 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -90,29 +90,44 @@ codegen_language_macros::compile!(Language(
9090
Enum(
9191
name = Pragma,
9292
variants = [
93-
EnumVariant(reference = AbicoderPragma),
94-
EnumVariant(reference = ExperimentalPragma),
95-
EnumVariant(reference = VersionPragma)
93+
EnumVariant(reference = VersionPragma),
94+
EnumVariant(reference = AbicoderPragma, enabled = From("0.7.5")),
95+
EnumVariant(
96+
reference = ExperimentalPragma,
97+
enabled = From("0.4.16")
98+
)
9699
]
97100
),
98101
Struct(
99102
name = AbicoderPragma,
103+
enabled = From("0.7.5"),
100104
fields = (
101105
abicoder_keyword = Required(AbicoderKeyword),
102-
version = Required(Identifier)
106+
version = Required(AbicoderVersion)
103107
)
104108
),
105109
Struct(
106110
name = ExperimentalPragma,
111+
enabled = From("0.4.16"),
107112
fields = (
108113
experimental_keyword = Required(ExperimentalKeyword),
109114
feature = Required(ExperimentalFeature)
110115
)
111116
),
117+
Enum(
118+
name = AbicoderVersion,
119+
enabled = From("0.7.5"),
120+
variants = [
121+
EnumVariant(reference = AbicoderV1Keyword),
122+
EnumVariant(reference = AbicoderV2Keyword)
123+
]
124+
),
112125
Enum(
113126
name = ExperimentalFeature,
127+
enabled = From("0.4.16"),
114128
variants = [
115-
EnumVariant(reference = Identifier),
129+
EnumVariant(reference = ABIEncoderV2Keyword),
130+
EnumVariant(reference = SMTCheckerKeyword),
116131
EnumVariant(reference = StringLiteral)
117132
]
118133
),
@@ -222,30 +237,6 @@ codegen_language_macros::compile!(Language(
222237
Atom("X"),
223238
Atom("*")
224239
]))
225-
),
226-
Keyword(
227-
name = AbicoderKeyword,
228-
identifier = Identifier,
229-
definitions = [KeywordDefinition(
230-
reserved = Never,
231-
value = Atom("abicoder")
232-
)]
233-
),
234-
Keyword(
235-
name = ExperimentalKeyword,
236-
identifier = Identifier,
237-
definitions = [KeywordDefinition(
238-
reserved = Never,
239-
value = Atom("experimental")
240-
)]
241-
),
242-
Keyword(
243-
name = SolidityKeyword,
244-
identifier = Identifier,
245-
definitions = [KeywordDefinition(
246-
reserved = Never,
247-
value = Atom("solidity")
248-
)]
249240
)
250241
]
251242
),
@@ -470,6 +461,42 @@ codegen_language_macros::compile!(Language(
470461
Topic(
471462
title = "Keywords",
472463
items = [
464+
Keyword(
465+
name = AbicoderKeyword,
466+
identifier = Identifier,
467+
definitions = [KeywordDefinition(
468+
enabled = From("0.7.5"),
469+
reserved = Never,
470+
value = Atom("abicoder")
471+
)]
472+
),
473+
Keyword(
474+
name = AbicoderV1Keyword,
475+
identifier = Identifier,
476+
definitions = [KeywordDefinition(
477+
enabled = From("0.7.5"),
478+
reserved = Never,
479+
value = Atom("v1")
480+
)]
481+
),
482+
Keyword(
483+
name = AbicoderV2Keyword,
484+
identifier = Identifier,
485+
definitions = [KeywordDefinition(
486+
enabled = From("0.7.5"),
487+
reserved = Never,
488+
value = Atom("v2")
489+
)]
490+
),
491+
Keyword(
492+
name = ABIEncoderV2Keyword,
493+
identifier = Identifier,
494+
definitions = [KeywordDefinition(
495+
enabled = From("0.4.16"),
496+
reserved = Never,
497+
value = Atom("ABIEncoderV2")
498+
)]
499+
),
473500
Keyword(
474501
name = AbstractKeyword,
475502
identifier = Identifier,
@@ -726,6 +753,15 @@ codegen_language_macros::compile!(Language(
726753
identifier = Identifier,
727754
definitions = [KeywordDefinition(value = Atom("event"))]
728755
),
756+
Keyword(
757+
name = ExperimentalKeyword,
758+
identifier = Identifier,
759+
definitions = [KeywordDefinition(
760+
enabled = From("0.4.16"),
761+
reserved = Never,
762+
value = Atom("experimental")
763+
)]
764+
),
729765
Keyword(
730766
name = ExternalKeyword,
731767
identifier = Identifier,
@@ -1384,6 +1420,23 @@ codegen_language_macros::compile!(Language(
13841420
value = Atom("sizeof")
13851421
)]
13861422
),
1423+
Keyword(
1424+
name = SMTCheckerKeyword,
1425+
identifier = Identifier,
1426+
definitions = [KeywordDefinition(
1427+
enabled = From("0.4.16"),
1428+
reserved = Never,
1429+
value = Atom("SMTChecker")
1430+
)]
1431+
),
1432+
Keyword(
1433+
name = SolidityKeyword,
1434+
identifier = Identifier,
1435+
definitions = [KeywordDefinition(
1436+
reserved = Never,
1437+
value = Atom("solidity")
1438+
)]
1439+
),
13871440
Keyword(
13881441
name = StaticKeyword,
13891442
identifier = Identifier,

crates/solidity/outputs/cargo/crate/generated/public_api.txt

Lines changed: 5 additions & 0 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/backend/l1_structured_ast/generated/builder.rs

Lines changed: 29 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/backend/l1_structured_ast/generated/nodes.rs

Lines changed: 10 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/backend/l1_structured_ast/generated/rewriter.rs

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

0 commit comments

Comments
 (0)