From 94ed1011db3dc9ff8fbc9213c4919428ae3ecfa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustavo=20Gir=C3=A1ldez?= Date: Fri, 27 Sep 2024 20:04:57 -0400 Subject: [PATCH] Resolve type expressions built-in fields --- .../inputs/language/bindings/rules.msgb | 9 +++++ .../inputs/language/src/definition.rs | 14 +++++++- .../bindings/generated/binding_rules.rs | 9 +++++ .../generated/bindings/generated/built_ins.rs | 4 ++- .../bindings/generated/built_ins/0.4.11.sol | 8 +++++ .../bindings/generated/built_ins/0.5.0.sol | 8 +++++ .../bindings/generated/built_ins/0.7.0.sol | 25 ++++++++++++++ .../bindings/generated/built_ins/0.8.0.sol | 9 ++++- .../outputs/cargo/slang_solidity/src/lib.rs | 3 +- .../generated/0.7.0-failure.txt | 34 +++++++++++++++++++ .../{0.5.3-failure.txt => 0.5.3-success.txt} | 4 +-- .../{0.5.3-failure.txt => 0.5.3-success.txt} | 4 +-- 12 files changed, 123 insertions(+), 8 deletions(-) create mode 100644 crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.7.0.sol create mode 100644 crates/solidity/testing/snapshots/bindings_output/built_ins/global_properties/generated/0.7.0-failure.txt rename crates/solidity/testing/snapshots/bindings_output/enums/sample/generated/{0.5.3-failure.txt => 0.5.3-success.txt} (97%) rename crates/solidity/testing/snapshots/bindings_output/expressions/type_expr/generated/{0.5.3-failure.txt => 0.5.3-success.txt} (92%) diff --git a/crates/solidity/inputs/language/bindings/rules.msgb b/crates/solidity/inputs/language/bindings/rules.msgb index d4cbd4d64..76c0e4940 100644 --- a/crates/solidity/inputs/language/bindings/rules.msgb +++ b/crates/solidity/inputs/language/bindings/rules.msgb @@ -1830,6 +1830,15 @@ inherit .parent_scope ;; Type expressions @type_expr [Expression [TypeExpression @type [TypeName]]] { edge @type.type_ref -> @type_expr.lexical_scope + + node typeof + attr (typeof) push_symbol = "@typeof" + node type + attr (type) push_symbol = "%type" + + edge @type_expr.output -> typeof + edge typeof -> type + edge type -> @type_expr.lexical_scope } ;; New expressions diff --git a/crates/solidity/inputs/language/src/definition.rs b/crates/solidity/inputs/language/src/definition.rs index 34bd9e508..d06c04e85 100644 --- a/crates/solidity/inputs/language/src/definition.rs +++ b/crates/solidity/inputs/language/src/definition.rs @@ -6649,6 +6649,18 @@ codegen_language_macros::compile!(Language( return_type = "bool" )] ), + BuiltInType( + name = "$type", + fields = [ + BuiltInField(definition = "string name"), + BuiltInField(definition = "bytes creationCode"), + BuiltInField(definition = "bytes runtimeCode"), + BuiltInField(definition = "bytes4 interfaceId"), + BuiltInField(definition = "int min"), + BuiltInField(definition = "int max") + ], + functions = [] + ), BuiltInType( name = "$txType", fields = [ @@ -6657,7 +6669,7 @@ codegen_language_macros::compile!(Language( ], functions = [] ), - BuiltInVariable(definition = "uint now"), + BuiltInVariable(definition = "uint now", enabled = Till("0.7.0")), BuiltInVariable(definition = "$txType tx") ] )); diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/binding_rules.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/binding_rules.rs index df57f8d9a..53911c549 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/binding_rules.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/binding_rules.rs @@ -1835,6 +1835,15 @@ inherit .parent_scope ;; Type expressions @type_expr [Expression [TypeExpression @type [TypeName]]] { edge @type.type_ref -> @type_expr.lexical_scope + + node typeof + attr (typeof) push_symbol = "@typeof" + node type + attr (type) push_symbol = "%type" + + edge @type_expr.output -> typeof + edge typeof -> type + edge type -> @type_expr.lexical_scope } ;; New expressions diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins.rs b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins.rs index 84fa153e9..338abd78a 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins.rs @@ -6,8 +6,10 @@ use semver::Version; pub fn get_contents(version: &Version) -> &'static str { if *version < Version::new(0, 5, 0) { include_str!("./built_ins/0.4.11.sol") - } else if *version < Version::new(0, 8, 0) { + } else if *version < Version::new(0, 7, 0) { include_str!("./built_ins/0.5.0.sol") + } else if *version < Version::new(0, 8, 0) { + include_str!("./built_ins/0.7.0.sol") } else { include_str!("./built_ins/0.8.0.sol") } diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.4.11.sol b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.4.11.sol index 1031860fd..bb7683358 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.4.11.sol +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.4.11.sol @@ -7,6 +7,14 @@ contract $BuiltIns$ { uint256 balance; function(uint256 amount) returns (bool) send; } + struct $type { + string name; + bytes creationCode; + bytes runtimeCode; + bytes4 interfaceId; + int min; + int max; + } struct $txType { uint gasprice; address payable origin; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.5.0.sol b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.5.0.sol index 5e5d47d5a..576a3b136 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.5.0.sol +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.5.0.sol @@ -9,6 +9,14 @@ contract $BuiltIns$ { uint256 balance; function(uint256 amount) returns (bool) send; } + struct $type { + string name; + bytes creationCode; + bytes runtimeCode; + bytes4 interfaceId; + int min; + int max; + } struct $txType { uint gasprice; address payable origin; diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.7.0.sol b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.7.0.sol new file mode 100644 index 000000000..592351fcc --- /dev/null +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.7.0.sol @@ -0,0 +1,25 @@ +// This file is generated automatically. Do not edit by hand. +contract $BuiltIns$ { + function addmod(uint x, uint y, uint k) public returns (uint); + function assert(bool condition) public; + function require(bool condition) public; + function require(bool condition, string memory message) public; + function revert(string memory reason) public; + struct $address { + uint256 balance; + function(uint256 amount) returns (bool) send; + } + struct $type { + string name; + bytes creationCode; + bytes runtimeCode; + bytes4 interfaceId; + int min; + int max; + } + struct $txType { + uint gasprice; + address payable origin; + } + $txType tx; +} diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.8.0.sol b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.8.0.sol index 1d6fcd2cb..6286c519e 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.8.0.sol +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.8.0.sol @@ -10,10 +10,17 @@ contract $BuiltIns$ { bytes code; function(uint256 amount) returns (bool) send; } + struct $type { + string name; + bytes creationCode; + bytes runtimeCode; + bytes4 interfaceId; + int min; + int max; + } struct $txType { uint gasprice; address payable origin; } - uint now; $txType tx; } diff --git a/crates/solidity/outputs/cargo/slang_solidity/src/lib.rs b/crates/solidity/outputs/cargo/slang_solidity/src/lib.rs index db19abaa4..515f523f6 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/src/lib.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/src/lib.rs @@ -4,9 +4,10 @@ pub use generated::*; #[cfg(feature = "__experimental_bindings_api")] pub fn transform_built_ins_node(node: &generated::cst::Node) -> generated::cst::Node { - use generated::cst::{Edge, Node, NonterminalNode, TerminalNode}; use std::rc::Rc; + use generated::cst::{Edge, Node, NonterminalNode, TerminalNode}; + use crate::cst::TerminalKind; match node { diff --git a/crates/solidity/testing/snapshots/bindings_output/built_ins/global_properties/generated/0.7.0-failure.txt b/crates/solidity/testing/snapshots/bindings_output/built_ins/global_properties/generated/0.7.0-failure.txt new file mode 100644 index 000000000..5a1091743 --- /dev/null +++ b/crates/solidity/testing/snapshots/bindings_output/built_ins/global_properties/generated/0.7.0-failure.txt @@ -0,0 +1,34 @@ +# This file is generated automatically by infrastructure scripts. Please don't edit by hand. + +References and definitions: + ╭─[input.sol:1:1] + │ + 1 │ contract Test { + │ ──┬─ + │ ╰─── def: 1 + 2 │ uint last_time; + │ ────┬──── + │ ╰────── def: 2 + 3 │ function foo() public { + │ ─┬─ + │ ╰─── def: 3 + 4 │ address origin = tx.origin; + │ ───┬── ─┬ ───┬── + │ ╰──────────────── def: 4 + │ │ │ + │ ╰───────── ref: built-in + │ │ + │ ╰──── ref: built-in + 5 │ last_time = now; + │ ────┬──── ─┬─ + │ ╰──────────── ref: 2 + │ │ + │ ╰─── unresolved + 6 │ uint price = tx.gasprice; + │ ──┬── ─┬ ────┬─── + │ ╰────────────────── def: 5 + │ │ │ + │ ╰─────────── ref: built-in + │ │ + │ ╰───── ref: built-in +───╯ diff --git a/crates/solidity/testing/snapshots/bindings_output/enums/sample/generated/0.5.3-failure.txt b/crates/solidity/testing/snapshots/bindings_output/enums/sample/generated/0.5.3-success.txt similarity index 97% rename from crates/solidity/testing/snapshots/bindings_output/enums/sample/generated/0.5.3-failure.txt rename to crates/solidity/testing/snapshots/bindings_output/enums/sample/generated/0.5.3-success.txt index 459b6a9b6..329ad750c 100644 --- a/crates/solidity/testing/snapshots/bindings_output/enums/sample/generated/0.5.3-failure.txt +++ b/crates/solidity/testing/snapshots/bindings_output/enums/sample/generated/0.5.3-success.txt @@ -69,7 +69,7 @@ References and definitions: │ ──────┬────── ─┬─ │ ╰───────────── ref: 2 │ │ - │ ╰─── unresolved + │ ╰─── ref: built-in │ 29 │ function getSmallestValue() public pure returns (ActionChoices) { │ ────────┬─────── ──────┬────── @@ -80,5 +80,5 @@ References and definitions: │ ──────┬────── ─┬─ │ ╰───────────── ref: 2 │ │ - │ ╰─── unresolved + │ ╰─── ref: built-in ────╯ diff --git a/crates/solidity/testing/snapshots/bindings_output/expressions/type_expr/generated/0.5.3-failure.txt b/crates/solidity/testing/snapshots/bindings_output/expressions/type_expr/generated/0.5.3-success.txt similarity index 92% rename from crates/solidity/testing/snapshots/bindings_output/expressions/type_expr/generated/0.5.3-failure.txt rename to crates/solidity/testing/snapshots/bindings_output/expressions/type_expr/generated/0.5.3-success.txt index fe84ba22c..295aa8325 100644 --- a/crates/solidity/testing/snapshots/bindings_output/expressions/type_expr/generated/0.5.3-failure.txt +++ b/crates/solidity/testing/snapshots/bindings_output/expressions/type_expr/generated/0.5.3-success.txt @@ -22,7 +22,7 @@ References and definitions: │ │ │ │ ╰───────── ref: 1 │ │ - │ ╰─── unresolved + │ ╰─── ref: built-in 5 │ Answer first = type(Answer).min; │ ───┬── ──┬── ───┬── ─┬─ │ ╰───────────────────────────── ref: 2 @@ -31,5 +31,5 @@ References and definitions: │ │ │ │ ╰───────── ref: 2 │ │ - │ ╰─── unresolved + │ ╰─── ref: built-in ───╯