mirror of
https://github.com/fluencelabs/marine.git
synced 2025-06-24 12:11:38 +00:00
Lexicographical sort record types before topological sort (#94)
This commit is contained in:
28
Cargo.lock
generated
28
Cargo.lock
generated
@ -1496,7 +1496,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marine"
|
name = "marine"
|
||||||
version = "0.6.7"
|
version = "0.6.8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"Inflector",
|
"Inflector",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@ -1505,7 +1505,7 @@ dependencies = [
|
|||||||
"clap",
|
"clap",
|
||||||
"exitfailure",
|
"exitfailure",
|
||||||
"marine-it-generator 0.5.3",
|
"marine-it-generator 0.5.3",
|
||||||
"marine-it-parser 0.6.4",
|
"marine-it-parser 0.6.5",
|
||||||
"marine-module-info-parser 0.1.0",
|
"marine-module-info-parser 0.1.0",
|
||||||
"semver 0.11.0",
|
"semver 0.11.0",
|
||||||
"serde",
|
"serde",
|
||||||
@ -1539,7 +1539,7 @@ version = "0.5.3"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"cargo_toml",
|
"cargo_toml",
|
||||||
"it-lilo",
|
"it-lilo",
|
||||||
"marine-it-parser 0.6.4",
|
"marine-it-parser 0.6.5",
|
||||||
"marine-macro-impl",
|
"marine-macro-impl",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"serde",
|
"serde",
|
||||||
@ -1586,7 +1586,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marine-it-parser"
|
name = "marine-it-parser"
|
||||||
version = "0.6.4"
|
version = "0.6.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"itertools 0.10.1",
|
"itertools 0.10.1",
|
||||||
@ -1656,7 +1656,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "marine-module-interface"
|
name = "marine-module-interface"
|
||||||
version = "0.1.3"
|
version = "0.1.4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"itertools 0.10.1",
|
"itertools 0.10.1",
|
||||||
@ -1717,7 +1717,7 @@ dependencies = [
|
|||||||
"log",
|
"log",
|
||||||
"marine-it-generator 0.5.3",
|
"marine-it-generator 0.5.3",
|
||||||
"marine-it-interfaces 0.4.0",
|
"marine-it-interfaces 0.4.0",
|
||||||
"marine-it-parser 0.6.4",
|
"marine-it-parser 0.6.5",
|
||||||
"marine-module-info-parser 0.1.0",
|
"marine-module-info-parser 0.1.0",
|
||||||
"marine-module-interface",
|
"marine-module-interface",
|
||||||
"marine-utils 0.2.0",
|
"marine-utils 0.2.0",
|
||||||
@ -2403,9 +2403,9 @@ checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "redox_syscall"
|
name = "redox_syscall"
|
||||||
version = "0.2.8"
|
version = "0.2.9"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "742739e41cd49414de871ea5e549afb7e2a3ac77b589bcbebe8c82fab37147fc"
|
checksum = "5ab49abadf3f9e1c4bc499e8845e152ad87d2ad2d30371841171169e9d75feee"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
]
|
]
|
||||||
@ -2416,7 +2416,7 @@ version = "0.1.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f"
|
checksum = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"redox_syscall 0.2.8",
|
"redox_syscall 0.2.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2437,7 +2437,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
|
checksum = "528532f3d801c87aec9def2add9ca802fe569e44a544afe633765267840abe64"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom 0.2.3",
|
"getrandom 0.2.3",
|
||||||
"redox_syscall 0.2.8",
|
"redox_syscall 0.2.9",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -2886,7 +2886,7 @@ dependencies = [
|
|||||||
"cfg-if 1.0.0",
|
"cfg-if 1.0.0",
|
||||||
"libc",
|
"libc",
|
||||||
"rand",
|
"rand",
|
||||||
"redox_syscall 0.2.8",
|
"redox_syscall 0.2.9",
|
||||||
"remove_dir_all",
|
"remove_dir_all",
|
||||||
"winapi 0.3.9",
|
"winapi 0.3.9",
|
||||||
]
|
]
|
||||||
@ -2919,7 +2919,7 @@ checksum = "077185e2eac69c3f8379a4298e1e07cd36beb962290d4a51199acf0fdc10607e"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"numtoa",
|
"numtoa",
|
||||||
"redox_syscall 0.2.8",
|
"redox_syscall 0.2.9",
|
||||||
"redox_termios",
|
"redox_termios",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -3278,9 +3278,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vcpkg"
|
name = "vcpkg"
|
||||||
version = "0.2.13"
|
version = "0.2.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "025ce40a007e1907e58d5bc1a594def78e5573bb0b1160bc389634e8f12e4faa"
|
checksum = "70455df2fdf4e9bf580a92e443f1eb0303c390d682e2ea817312c9e81f8c3399"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "vec_map"
|
name = "vec_map"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "marine-it-parser"
|
name = "marine-it-parser"
|
||||||
description = "Fluence Marine interface types parser"
|
description = "Fluence Marine interface types parser"
|
||||||
version = "0.6.4"
|
version = "0.6.5"
|
||||||
authors = ["Fluence Labs"]
|
authors = ["Fluence Labs"]
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
@ -12,7 +12,7 @@ path = "src/lib.rs"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
marine-it-interfaces = { path = "../it-interfaces", version = "0.4.0" }
|
marine-it-interfaces = { path = "../it-interfaces", version = "0.4.0" }
|
||||||
marine-module-interface = { path = "../module-interface", version = "0.1.3" }
|
marine-module-interface = { path = "../module-interface", version = "0.1.4" }
|
||||||
|
|
||||||
anyhow = "1.0.31"
|
anyhow = "1.0.31"
|
||||||
walrus = "0.18.0"
|
walrus = "0.18.0"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "marine-module-interface"
|
name = "marine-module-interface"
|
||||||
description = "Fluence Marine module interface"
|
description = "Fluence Marine module interface"
|
||||||
version = "0.1.3"
|
version = "0.1.4"
|
||||||
authors = ["Fluence Labs"]
|
authors = ["Fluence Labs"]
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
|
@ -25,6 +25,7 @@ use wasmer_it::IType;
|
|||||||
|
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
use itertools::Itertools;
|
||||||
|
|
||||||
pub(crate) struct RecordsTransformer {
|
pub(crate) struct RecordsTransformer {
|
||||||
used: HashSet<u64>,
|
used: HashSet<u64>,
|
||||||
@ -48,7 +49,8 @@ impl RecordsTransformer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn topological_sort(&mut self, exported_records: &IRecordTypes) -> InterfaceResult<()> {
|
fn topological_sort(&mut self, exported_records: &IRecordTypes) -> InterfaceResult<()> {
|
||||||
for (id, record) in exported_records {
|
// sort records types inside HashMap to achieve their deterministic order
|
||||||
|
for (id, record) in exported_records.iter().sorted_by_key(|(_, v)| &v.name) {
|
||||||
self.dfs(*id, record, exported_records)?;
|
self.dfs(*id, record, exported_records)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
marine-runtime = { path = "../runtime", version = "0.5.1" }
|
marine-runtime = { path = "../runtime", version = "0.5.1" }
|
||||||
marine-module-interface = { path = "../crates/module-interface", version = "0.1.3" }
|
marine-module-interface = { path = "../crates/module-interface", version = "0.1.4" }
|
||||||
marine-utils = { path = "../crates/utils", version = "0.2.0" }
|
marine-utils = { path = "../crates/utils", version = "0.2.0" }
|
||||||
marine-rs-sdk-main = { version = "0.6.10", features = ["logger"] }
|
marine-rs-sdk-main = { version = "0.6.10", features = ["logger"] }
|
||||||
marine-rs-sdk = { version = "0.6.10", features = ["logger"] }
|
marine-rs-sdk = { version = "0.6.10", features = ["logger"] }
|
||||||
|
@ -15,7 +15,7 @@ marine-module-info-parser = { path = "../crates/module-info-parser", version = "
|
|||||||
marine-it-interfaces = { path = "../crates/it-interfaces", version = "0.4.0" }
|
marine-it-interfaces = { path = "../crates/it-interfaces", version = "0.4.0" }
|
||||||
marine-it-parser = { path = "../crates/it-parser", version = "0.6.4" }
|
marine-it-parser = { path = "../crates/it-parser", version = "0.6.4" }
|
||||||
marine-it-generator = { path = "../crates/it-generator", version = "0.5.3" }
|
marine-it-generator = { path = "../crates/it-generator", version = "0.5.3" }
|
||||||
marine-module-interface = { path = "../crates/module-interface", version = "0.1.3" }
|
marine-module-interface = { path = "../crates/module-interface", version = "0.1.4" }
|
||||||
marine-utils = { path = "../crates/utils", version = "0.2.0" }
|
marine-utils = { path = "../crates/utils", version = "0.2.0" }
|
||||||
|
|
||||||
wasmer-runtime = { package = "wasmer-runtime-fl", version = "0.17.0" }
|
wasmer-runtime = { package = "wasmer-runtime-fl", version = "0.17.0" }
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "marine"
|
name = "marine"
|
||||||
description = "Fluence Marine command line tool"
|
description = "Fluence Marine command line tool"
|
||||||
version = "0.6.7"
|
version = "0.6.8"
|
||||||
authors = ["Fluence Labs"]
|
authors = ["Fluence Labs"]
|
||||||
repository = "https://github.com/fluencelabs/marine/tools/cli"
|
repository = "https://github.com/fluencelabs/marine/tools/cli"
|
||||||
license = "Apache-2.0"
|
license = "Apache-2.0"
|
||||||
@ -13,7 +13,7 @@ path = "src/main.rs"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
marine-it-generator = { path = "../../crates/it-generator", version = "0.5.3" }
|
marine-it-generator = { path = "../../crates/it-generator", version = "0.5.3" }
|
||||||
marine-it-parser = { path = "../../crates/it-parser", version = "0.6.4" }
|
marine-it-parser = { path = "../../crates/it-parser", version = "0.6.5" }
|
||||||
marine-module-info-parser = { path = "../../crates/module-info-parser", version = "0.1.0" }
|
marine-module-info-parser = { path = "../../crates/module-info-parser", version = "0.1.0" }
|
||||||
|
|
||||||
semver = "0.11.0"
|
semver = "0.11.0"
|
||||||
|
Reference in New Issue
Block a user