From 904199aa0549b572abd5f3c00cf52686339ac4d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustavo=20Gir=C3=A1ldez?= Date: Fri, 4 Oct 2024 14:20:04 -0400 Subject: [PATCH] Revamp built-ins generation code --- .../language/definition/src/model/manifest.rs | 42 +++++++ .../language/tests/src/pass/tiny_language.rs | 2 + .../src/runtime/bindings/built_ins.rs.jinja2 | 26 +++-- .../runtime/generator/src/bindings/mod.rs | 108 ++---------------- .../runtime/generator/src/built_ins/mod.rs | 94 +++++++++++++++ crates/codegen/runtime/generator/src/lib.rs | 42 ++----- .../solidity/inputs/language/src/bindings.rs | 58 ++++++++++ .../inputs/language/src/definition.rs | 1 + crates/solidity/inputs/language/src/lib.rs | 56 +-------- .../outputs/cargo/slang_solidity/build.rs | 14 +-- .../generated/bindings/generated/built_ins.rs | 56 +-------- .../bindings/generated/built_ins/0.4.11.sol | 16 +++ .../bindings/generated/built_ins/0.5.0.sol | 18 +++ .../bindings/generated/built_ins/0.8.0.sol | 19 +++ crates/solidity/outputs/npm/package/build.rs | 4 +- .../outputs/cargo/slang_testlang/build.rs | 4 +- .../generated/bindings/generated/built_ins.rs | 4 +- crates/testlang/outputs/npm/package/build.rs | 4 +- 18 files changed, 306 insertions(+), 262 deletions(-) create mode 100644 crates/codegen/runtime/generator/src/built_ins/mod.rs create mode 100644 crates/solidity/inputs/language/src/bindings.rs create mode 100644 crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.4.11.sol create mode 100644 crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.5.0.sol create mode 100644 crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.8.0.sol diff --git a/crates/codegen/language/definition/src/model/manifest.rs b/crates/codegen/language/definition/src/model/manifest.rs index dc86cb2bf2..72e42a727f 100644 --- a/crates/codegen/language/definition/src/model/manifest.rs +++ b/crates/codegen/language/definition/src/model/manifest.rs @@ -17,6 +17,7 @@ pub struct Language { pub documentation_dir: PathBuf, pub binding_rules_file: PathBuf, + pub file_extension: Option, pub root_item: Identifier, @@ -107,6 +108,47 @@ impl Language { res } + + /// Collects all versions that change the language built-ins. + /// + /// Includes the first supported version. Returns an empty set if there are + /// no built-ins defined. + pub fn collect_built_ins_versions(&self) -> BTreeSet { + if self.built_ins.is_empty() { + return BTreeSet::new(); + } + + let first = self.versions.first().unwrap().clone(); + let mut res = BTreeSet::from_iter([first]); + + let mut add_spec = |spec: &Option| { + if let Some(spec) = spec { + res.extend(spec.versions().cloned()); + } + }; + + for item in &self.built_ins { + match item { + BuiltIn::BuiltInFunction { item } => { + add_spec(&item.enabled); + } + BuiltIn::BuiltInType { item } => { + add_spec(&item.enabled); + for field in &item.fields { + add_spec(&field.enabled); + } + for function in &item.functions { + add_spec(&function.enabled); + } + } + BuiltIn::BuiltInVariable { item } => { + add_spec(&item.enabled); + } + } + } + + res + } } #[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)] diff --git a/crates/codegen/language/tests/src/pass/tiny_language.rs b/crates/codegen/language/tests/src/pass/tiny_language.rs index 527ca799be..6b5652634a 100644 --- a/crates/codegen/language/tests/src/pass/tiny_language.rs +++ b/crates/codegen/language/tests/src/pass/tiny_language.rs @@ -11,6 +11,7 @@ codegen_language_macros::compile!(Language( name = Tiny, documentation_dir = "tiny/docs", binding_rules_file = "tiny/bindings/rules.msgb", + file_extension = ".tiny", root_item = Foo, leading_trivia = Sequence([]), trailing_trivia = Sequence([]), @@ -50,6 +51,7 @@ fn definition() { name: "Tiny".into(), documentation_dir: Path::repo_path("tiny/docs"), binding_rules_file: Path::repo_path("tiny/bindings/rules.msgb"), + file_extension: Some(".tiny".into()), root_item: "Foo".into(), leading_trivia: TriviaParser::Sequence { parsers: [].into() }, trailing_trivia: TriviaParser::Sequence { parsers: [].into() }, diff --git a/crates/codegen/runtime/cargo/src/runtime/bindings/built_ins.rs.jinja2 b/crates/codegen/runtime/cargo/src/runtime/bindings/built_ins.rs.jinja2 index 4c7e2262aa..856f983808 100644 --- a/crates/codegen/runtime/cargo/src/runtime/bindings/built_ins.rs.jinja2 +++ b/crates/codegen/runtime/cargo/src/runtime/bindings/built_ins.rs.jinja2 @@ -3,18 +3,22 @@ use semver::Version; #[allow(unused_variables)] pub fn get_contents(version: &Version) -> &'static str { {%- if not rendering_in_stubs -%} - {%- for version, contents in model.bindings.built_ins_source %} - {%- if loop.last -%} - { - r####"{{ contents }}"#### - } - {%- else -%} + {%- for version in model.bindings.built_ins_versions %} + {%- if not loop.first -%} if *version < Version::new({{ version | split(pat=".") | join(sep=", ") }}) { - r####"{{ contents }}"#### + include_str!("./built_ins/{{ prev_version }}{{ model.bindings.file_extension }}") } else {% endif %} - {%- endfor -%} - {%- else -%} - unreachable!("Built-ins not defined in stubs") - {%- endif -%} + {% if loop.last %} + { + include_str!("./built_ins/{{ version }}{{ model.bindings.file_extension }}") + } + {% endif %} + {% set_global prev_version = version %} + {%- else -%} + "" + {%- endfor -%} + {%- else -%} + unreachable!("Built-ins not defined in stubs") + {%- endif -%} } diff --git a/crates/codegen/runtime/generator/src/bindings/mod.rs b/crates/codegen/runtime/generator/src/bindings/mod.rs index 1861dbea9e..5a29fc29a9 100644 --- a/crates/codegen/runtime/generator/src/bindings/mod.rs +++ b/crates/codegen/runtime/generator/src/bindings/mod.rs @@ -1,117 +1,33 @@ -use std::collections::BTreeMap; +use std::collections::BTreeSet; +use std::rc::Rc; use anyhow::Result; -use codegen_language_definition::model::{BuiltIn, BuiltInField, BuiltInFunction, BuiltInType}; +use codegen_language_definition::model::Language; use infra_utils::codegen::CodegenFileSystem; use infra_utils::paths::PathExtensions; use semver::Version; use serde::Serialize; -use crate::LanguageModel; - #[derive(Default, Serialize)] pub struct BindingsModel { binding_rules_source: String, - built_ins_source: BTreeMap, + built_ins_versions: BTreeSet, + file_extension: String, } impl BindingsModel { - pub fn from_language(language: &LanguageModel) -> Result { + pub fn from_language(language: &Rc) -> Result { // We use `CodegenFileSystem` here to ensure the rules are rebuilt if the rules file changes - let binding_rules_dir = language.definition.binding_rules_file.unwrap_parent(); + let binding_rules_dir = language.binding_rules_file.unwrap_parent(); let mut fs = CodegenFileSystem::new(binding_rules_dir)?; - let binding_rules_source = fs.read_file(&language.definition.binding_rules_file)?; - - let mut built_ins_source = BTreeMap::new(); - let mut last_contents = None; - for version in &language.definition.versions { - let built_ins = filter_built_ins_for_version(&language.definition.built_ins, version); - let contents = (language.render_built_ins)(&built_ins); - match last_contents { - None => last_contents = Some(contents), - Some(ref last) if last == &contents => (), - _ => { - let last = last_contents.replace(contents); - built_ins_source.insert(version.clone(), last.unwrap()); - } - } - } - if let Some(version) = language.definition.versions.last() { - built_ins_source.insert(version.clone(), last_contents.unwrap()); - } + let binding_rules_source = fs.read_file(&language.binding_rules_file)?; + let built_ins_versions = language.collect_built_ins_versions(); + let file_extension = language.file_extension.clone().unwrap_or_default(); Ok(Self { binding_rules_source, - built_ins_source, - }) - } -} - -fn filter_built_ins_for_version(built_ins: &[BuiltIn], version: &Version) -> Vec { - built_ins - .iter() - .filter_map(|built_in| match built_in { - BuiltIn::BuiltInFunction { item } => filter_built_in_function(item, version) - .map(|item| BuiltIn::BuiltInFunction { item: item.into() }), - BuiltIn::BuiltInType { item } => filter_built_in_type(item, version) - .map(|item| BuiltIn::BuiltInType { item: item.into() }), - BuiltIn::BuiltInVariable { item } => filter_built_in_field(item, version) - .map(|item| BuiltIn::BuiltInVariable { item: item.into() }), - }) - .collect() -} - -fn filter_built_in_function( - function: &BuiltInFunction, - version: &Version, -) -> Option { - if function - .enabled - .as_ref() - .map_or(true, |enabled| enabled.contains(version)) - { - Some(function.clone()) - } else { - None - } -} - -fn filter_built_in_field(field: &BuiltInField, version: &Version) -> Option { - if field - .enabled - .as_ref() - .map_or(true, |enabled| enabled.contains(version)) - { - Some(field.clone()) - } else { - None - } -} - -fn filter_built_in_type(typ: &BuiltInType, version: &Version) -> Option { - if typ - .enabled - .as_ref() - .map_or(true, |enabled| enabled.contains(version)) - { - let fields = typ - .fields - .iter() - .filter_map(|field| filter_built_in_field(field, version)) - .collect(); - let functions = typ - .functions - .iter() - .filter_map(|function| filter_built_in_function(function, version)) - .collect(); - - Some(BuiltInType { - name: typ.name.clone(), - fields, - functions, - enabled: typ.enabled.clone(), + built_ins_versions, + file_extension, }) - } else { - None } } diff --git a/crates/codegen/runtime/generator/src/built_ins/mod.rs b/crates/codegen/runtime/generator/src/built_ins/mod.rs new file mode 100644 index 0000000000..8a63a9a9a7 --- /dev/null +++ b/crates/codegen/runtime/generator/src/built_ins/mod.rs @@ -0,0 +1,94 @@ +use std::path::Path; +use std::rc::Rc; + +use anyhow::Result; +use codegen_language_definition::model::{ + BuiltIn, BuiltInField, BuiltInFunction, BuiltInType, Language, +}; +use semver::Version; + +pub fn render_built_ins( + language: &Rc, + output_dir: &Path, + render_fn: impl Fn(&[BuiltIn]) -> String, +) -> Result<()> { + let versions = language.collect_built_ins_versions(); + let file_extension = language.file_extension.clone().unwrap_or_default(); + for version in &versions { + let built_ins = filter_built_ins_for_version(&language.built_ins, version); + let contents = render_fn(&built_ins); + + let output_path = output_dir.join(format!("{version}{file_extension}")); + std::fs::write(output_path, contents)?; + } + Ok(()) +} + +fn filter_built_ins_for_version(built_ins: &[BuiltIn], version: &Version) -> Vec { + built_ins + .iter() + .filter_map(|built_in| match built_in { + BuiltIn::BuiltInFunction { item } => filter_built_in_function(item, version) + .map(|item| BuiltIn::BuiltInFunction { item: item.into() }), + BuiltIn::BuiltInType { item } => filter_built_in_type(item, version) + .map(|item| BuiltIn::BuiltInType { item: item.into() }), + BuiltIn::BuiltInVariable { item } => filter_built_in_field(item, version) + .map(|item| BuiltIn::BuiltInVariable { item: item.into() }), + }) + .collect() +} + +fn filter_built_in_function( + function: &BuiltInFunction, + version: &Version, +) -> Option { + if function + .enabled + .as_ref() + .map_or(true, |enabled| enabled.contains(version)) + { + Some(function.clone()) + } else { + None + } +} + +fn filter_built_in_field(field: &BuiltInField, version: &Version) -> Option { + if field + .enabled + .as_ref() + .map_or(true, |enabled| enabled.contains(version)) + { + Some(field.clone()) + } else { + None + } +} + +fn filter_built_in_type(typ: &BuiltInType, version: &Version) -> Option { + if typ + .enabled + .as_ref() + .map_or(true, |enabled| enabled.contains(version)) + { + let fields = typ + .fields + .iter() + .filter_map(|field| filter_built_in_field(field, version)) + .collect(); + let functions = typ + .functions + .iter() + .filter_map(|function| filter_built_in_function(function, version)) + .collect(); + + Some(BuiltInType { + name: typ.name.clone(), + fields, + functions, + enabled: typ.enabled.clone(), + }) + } else { + None + } +} diff --git a/crates/codegen/runtime/generator/src/lib.rs b/crates/codegen/runtime/generator/src/lib.rs index 1e6d020fd5..aaec4f03cc 100644 --- a/crates/codegen/runtime/generator/src/lib.rs +++ b/crates/codegen/runtime/generator/src/lib.rs @@ -1,5 +1,6 @@ mod ast; mod bindings; +mod built_ins; mod kinds; mod parser; @@ -8,7 +9,8 @@ use std::path::{Path, PathBuf}; use std::rc::Rc; use anyhow::Result; -use codegen_language_definition::model::{BuiltIn, Language}; +pub use built_ins::render_built_ins; +use codegen_language_definition::model::Language; use infra_utils::cargo::CargoWorkspace; use infra_utils::codegen::CodegenRuntime; use semver::Version; @@ -19,37 +21,13 @@ use crate::bindings::BindingsModel; use crate::kinds::KindsModel; use crate::parser::ParserModel; -pub struct LanguageModel { - pub definition: Rc, - pub render_built_ins: fn(&[BuiltIn]) -> String, -} - -impl LanguageModel { - pub fn from_definition(definition: Rc) -> Self { - Self { - definition, - render_built_ins: |_| String::default(), - } - } - - pub fn from_definition_and_render_built_ins( - definition: Rc, - render_built_ins: fn(&[BuiltIn]) -> String, - ) -> Self { - Self { - definition, - render_built_ins, - } - } -} - pub enum OutputLanguage { Cargo, Npm, } impl OutputLanguage { - pub fn generate_runtime(&self, language: &LanguageModel, output_dir: &Path) -> Result<()> { + pub fn generate_runtime(&self, language: &Rc, output_dir: &Path) -> Result<()> { let model = ModelWrapper { rendering_in_stubs: false, model: RuntimeModel::from_language(language)?, @@ -103,16 +81,16 @@ struct RuntimeModel { } impl RuntimeModel { - pub fn from_language(language: &LanguageModel) -> Result { + pub fn from_language(language: &Rc) -> Result { Ok(Self { slang_version: CargoWorkspace::local_version()?, - all_language_versions: language.definition.versions.iter().cloned().collect(), - breaking_language_versions: language.definition.collect_breaking_versions(), + all_language_versions: language.versions.iter().cloned().collect(), + breaking_language_versions: language.collect_breaking_versions(), - ast: AstModel::from_language(&language.definition), + ast: AstModel::from_language(language), bindings: BindingsModel::from_language(language)?, - parser: ParserModel::from_language(&language.definition), - kinds: KindsModel::from_language(&language.definition), + parser: ParserModel::from_language(language), + kinds: KindsModel::from_language(language), }) } } diff --git a/crates/solidity/inputs/language/src/bindings.rs b/crates/solidity/inputs/language/src/bindings.rs new file mode 100644 index 0000000000..bcb5ae73a0 --- /dev/null +++ b/crates/solidity/inputs/language/src/bindings.rs @@ -0,0 +1,58 @@ +use std::fmt::{Error, Write}; + +use codegen_language_definition::model::BuiltIn; + +pub fn render_built_ins(built_ins: &[BuiltIn]) -> String { + try_render_built_ins(built_ins).expect("Failed to render built-ins") +} + +fn try_render_built_ins(built_ins: &[BuiltIn]) -> Result { + let mut buffer = String::new(); + writeln!( + buffer, + "// This file is generated automatically. Do not edit by hand." + )?; + writeln!(buffer, "contract $$ {{")?; + for item in built_ins { + match item { + BuiltIn::BuiltInFunction { item } => { + writeln!( + buffer, + " function {name}({parameters}) public{return_type};", + name = item.name, + parameters = item.parameters.join(", "), + return_type = item + .return_type + .as_ref() + .map(|return_type| format!(" returns ({return_type})")) + .unwrap_or_default(), + )?; + } + BuiltIn::BuiltInType { item } => { + writeln!(buffer, " struct {name} {{", name = item.name)?; + for field in &item.fields { + writeln!(buffer, " {field_def};", field_def = field.definition)?; + } + for function in &item.functions { + writeln!( + buffer, + " function({parameters}){return_type} {name};", + name = function.name, + return_type = function + .return_type + .as_deref() + .map(|return_type| format!(" returns ({return_type})")) + .unwrap_or_default(), + parameters = function.parameters.join(", "), + )?; + } + writeln!(buffer, " }}")?; + } + BuiltIn::BuiltInVariable { item } => { + writeln!(buffer, " {var_def};", var_def = item.definition)?; + } + } + } + writeln!(buffer, "}}")?; + Ok(buffer) +} diff --git a/crates/solidity/inputs/language/src/definition.rs b/crates/solidity/inputs/language/src/definition.rs index c852f72806..8918f3ddd8 100644 --- a/crates/solidity/inputs/language/src/definition.rs +++ b/crates/solidity/inputs/language/src/definition.rs @@ -4,6 +4,7 @@ codegen_language_macros::compile!(Language( name = Solidity, documentation_dir = "crates/solidity/inputs/language/docs", binding_rules_file = "crates/solidity/inputs/language/bindings/rules.msgb", + file_extension = ".sol", root_item = SourceUnit, // TODO(#1020): Define the end-of-file trivia explicitly rather than // implicitly reusing the leading trivia in the generater parser code. diff --git a/crates/solidity/inputs/language/src/lib.rs b/crates/solidity/inputs/language/src/lib.rs index 86091fd83d..59f8d775a5 100644 --- a/crates/solidity/inputs/language/src/lib.rs +++ b/crates/solidity/inputs/language/src/lib.rs @@ -1,59 +1,7 @@ //! This crate is responsible for creating the Solidity language definition and exposing it to downstream crates. +mod bindings; mod definition; -use std::fmt::{Error, Write}; - -use codegen_language_definition::model::BuiltIn; +pub use bindings::render_built_ins; pub use definition::SolidityDefinition; - -pub fn render_built_ins(built_ins: &[BuiltIn]) -> String { - try_render_built_ins(built_ins).expect("Failed to render built-ins") -} - -fn try_render_built_ins(built_ins: &[BuiltIn]) -> Result { - let mut buffer = String::new(); - writeln!(buffer, "contract $$ {{")?; - for item in built_ins { - match item { - BuiltIn::BuiltInFunction { item } => { - writeln!( - buffer, - "function {name}({parameters}) public{return_type};", - name = item.name, - parameters = item.parameters.join(", "), - return_type = item - .return_type - .as_ref() - .map(|return_type| format!(" returns ({return_type})")) - .unwrap_or_default(), - )?; - } - BuiltIn::BuiltInType { item } => { - writeln!(buffer, "struct {name} {{", name = item.name)?; - for field in &item.fields { - writeln!(buffer, " {field_def};", field_def = field.definition)?; - } - for function in &item.functions { - writeln!( - buffer, - " function({parameters}){return_type} {name};", - name = function.name, - return_type = function - .return_type - .as_deref() - .map(|return_type| format!(" returns ({return_type})")) - .unwrap_or_default(), - parameters = function.parameters.join(", "), - )?; - } - writeln!(buffer, "}}")?; - } - BuiltIn::BuiltInVariable { item } => { - writeln!(buffer, "{var_def};", var_def = item.definition)?; - } - } - } - writeln!(buffer, "}}")?; - Ok(buffer) -} diff --git a/crates/solidity/outputs/cargo/slang_solidity/build.rs b/crates/solidity/outputs/cargo/slang_solidity/build.rs index f3f9cfaf30..aa7bc7e23e 100644 --- a/crates/solidity/outputs/cargo/slang_solidity/build.rs +++ b/crates/solidity/outputs/cargo/slang_solidity/build.rs @@ -2,17 +2,17 @@ //! It is removed when publishing to crates.io. use anyhow::Result; -use codegen_runtime_generator::{LanguageModel, OutputLanguage}; +use codegen_runtime_generator::OutputLanguage; use infra_utils::cargo::CargoWorkspace; -use solidity_language::SolidityDefinition; +use solidity_language::{render_built_ins, SolidityDefinition}; fn main() -> Result<()> { - let language = LanguageModel::from_definition_and_render_built_ins( - SolidityDefinition::create(), - solidity_language::render_built_ins, - ); + let language = SolidityDefinition::create(); let output_dir = CargoWorkspace::locate_source_crate("slang_solidity")?.join("src/generated"); - OutputLanguage::Cargo.generate_runtime(&language, &output_dir) + OutputLanguage::Cargo.generate_runtime(&language, &output_dir)?; + + let built_ins_output_dir = output_dir.join("bindings/generated/built_ins"); + codegen_runtime_generator::render_built_ins(&language, &built_ins_output_dir, render_built_ins) } 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 8b688f1e4a..84fa153e90 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 @@ -5,60 +5,10 @@ use semver::Version; #[allow(unused_variables)] pub fn get_contents(version: &Version) -> &'static str { if *version < Version::new(0, 5, 0) { - r####"contract $$ { -function addmod(uint x, uint y, uint k) public returns (uint); -function assert(bool condition) public; -function revert(string memory reason) public; -struct $BuiltIn$Address { - uint256 balance; - function(uint256 amount) returns (bool) send; -} -struct $BuiltIn$TxType { - uint gasprice; - address payable origin; -} -uint now; -$BuiltIn$TxType tx; -} -"#### + include_str!("./built_ins/0.4.11.sol") } else if *version < Version::new(0, 8, 0) { - r####"contract $$ { -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 $BuiltIn$Address { - uint256 balance; - function(uint256 amount) returns (bool) send; -} -struct $BuiltIn$TxType { - uint gasprice; - address payable origin; -} -uint now; -$BuiltIn$TxType tx; -} -"#### + include_str!("./built_ins/0.5.0.sol") } else { - r####"contract $$ { -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 $BuiltIn$Address { - uint256 balance; - bytes code; - function(uint256 amount) returns (bool) send; -} -struct $BuiltIn$TxType { - uint gasprice; - address payable origin; -} -uint now; -$BuiltIn$TxType tx; -} -"#### + 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 new file mode 100644 index 0000000000..a1e1a14cb8 --- /dev/null +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.4.11.sol @@ -0,0 +1,16 @@ +// This file is generated automatically. Do not edit by hand. +contract $$ { + function addmod(uint x, uint y, uint k) public returns (uint); + function assert(bool condition) public; + function revert(string memory reason) public; + struct $BuiltIn$Address { + uint256 balance; + function(uint256 amount) returns (bool) send; + } + struct $BuiltIn$TxType { + uint gasprice; + address payable origin; + } + uint now; + $BuiltIn$TxType tx; +} 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 new file mode 100644 index 0000000000..2f814fe186 --- /dev/null +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.5.0.sol @@ -0,0 +1,18 @@ +// This file is generated automatically. Do not edit by hand. +contract $$ { + 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 $BuiltIn$Address { + uint256 balance; + function(uint256 amount) returns (bool) send; + } + struct $BuiltIn$TxType { + uint gasprice; + address payable origin; + } + uint now; + $BuiltIn$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 new file mode 100644 index 0000000000..53de098ae5 --- /dev/null +++ b/crates/solidity/outputs/cargo/slang_solidity/src/generated/bindings/generated/built_ins/0.8.0.sol @@ -0,0 +1,19 @@ +// This file is generated automatically. Do not edit by hand. +contract $$ { + 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 $BuiltIn$Address { + uint256 balance; + bytes code; + function(uint256 amount) returns (bool) send; + } + struct $BuiltIn$TxType { + uint gasprice; + address payable origin; + } + uint now; + $BuiltIn$TxType tx; +} diff --git a/crates/solidity/outputs/npm/package/build.rs b/crates/solidity/outputs/npm/package/build.rs index 49bc87b457..68237b33d7 100644 --- a/crates/solidity/outputs/npm/package/build.rs +++ b/crates/solidity/outputs/npm/package/build.rs @@ -1,10 +1,10 @@ use anyhow::Result; -use codegen_runtime_generator::{LanguageModel, OutputLanguage}; +use codegen_runtime_generator::OutputLanguage; use infra_utils::cargo::CargoWorkspace; use solidity_language::SolidityDefinition; fn main() -> Result<()> { - let language = LanguageModel::from_definition(SolidityDefinition::create()); + let language = SolidityDefinition::create(); let output_dir = CargoWorkspace::locate_source_crate("solidity_npm_package")?.join("src/generated"); diff --git a/crates/testlang/outputs/cargo/slang_testlang/build.rs b/crates/testlang/outputs/cargo/slang_testlang/build.rs index a55ab3eb05..7b2f00b850 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/build.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/build.rs @@ -1,10 +1,10 @@ use anyhow::Result; -use codegen_runtime_generator::{LanguageModel, OutputLanguage}; +use codegen_runtime_generator::OutputLanguage; use infra_utils::cargo::CargoWorkspace; use testlang_language::TestlangDefinition; fn main() -> Result<()> { - let language = LanguageModel::from_definition(TestlangDefinition::create()); + let language = TestlangDefinition::create(); let output_dir = CargoWorkspace::locate_source_crate("slang_testlang")?.join("src/generated"); diff --git a/crates/testlang/outputs/cargo/slang_testlang/src/generated/bindings/generated/built_ins.rs b/crates/testlang/outputs/cargo/slang_testlang/src/generated/bindings/generated/built_ins.rs index 81c45f34b5..0c4a214fc9 100644 --- a/crates/testlang/outputs/cargo/slang_testlang/src/generated/bindings/generated/built_ins.rs +++ b/crates/testlang/outputs/cargo/slang_testlang/src/generated/bindings/generated/built_ins.rs @@ -4,7 +4,5 @@ use semver::Version; #[allow(unused_variables)] pub fn get_contents(version: &Version) -> &'static str { - { - r####""#### - } + "" } diff --git a/crates/testlang/outputs/npm/package/build.rs b/crates/testlang/outputs/npm/package/build.rs index b768675ff7..62c0a20f2b 100644 --- a/crates/testlang/outputs/npm/package/build.rs +++ b/crates/testlang/outputs/npm/package/build.rs @@ -1,10 +1,10 @@ use anyhow::Result; -use codegen_runtime_generator::{LanguageModel, OutputLanguage}; +use codegen_runtime_generator::OutputLanguage; use infra_utils::cargo::CargoWorkspace; use testlang_language::TestlangDefinition; fn main() -> Result<()> { - let language = LanguageModel::from_definition(TestlangDefinition::create()); + let language = TestlangDefinition::create(); let output_dir = CargoWorkspace::locate_source_crate("testlang_npm_package")?.join("src/generated");