Fork of daniellemaywood.uk/gleam — Wasm codegen work
2

Configure Feed

Select the types of activity you want to include in your feed.

Add skeleton support for cranelift target

author
Danielle Maywood
committer
nandi
date (Jul 26, 2026, 12:10 PM -0700) commit 1a7fd9ce parent 5cfee981 change-id vyxqomxz
+174 -4
+1
compiler-cli/src/compile_package.rs
··· 45 45 .javascript_prelude 46 46 .ok_or_else(|| Error::JavaScriptPreludeRequired)?, 47 47 }, 48 + Target::Cranelift => TargetCodegenConfiguration::Cranelift {}, 48 49 }; 49 50 50 51 tracing::info!("Compiling package");
+1
compiler-cli/src/publish.rs
··· 545 545 let generated_files = match target { 546 546 Target::Erlang => generated_erlang_files(paths, &built.root_package)?, 547 547 Target::JavaScript => vec![], 548 + Target::Cranelift => vec![], 548 549 }; 549 550 let src_files = project_files(Utf8Path::new(""))?; 550 551 let contents_tar_gz = contents_tarball(paths, &src_files, &generated_files)?;
+1
compiler-cli/src/run.rs
··· 157 157 run_javascript_bun_command(paths, &main_function.package, &module, arguments) 158 158 } 159 159 }, 160 + Target::Cranelift => todo!("run"), 160 161 } 161 162 } 162 163
+24 -2
compiler-core/src/analyse.rs
··· 457 457 has_body: true, 458 458 has_erlang_external: false, 459 459 has_javascript_external: false, 460 + has_cranelift_external: false, 460 461 }; 461 462 let mut expr_typer = ExprTyper::new(environment, definition, &mut self.problems); 462 463 let typed_expr = expr_typer.infer_const(&annotation, *value); ··· 550 551 deprecation, 551 552 external_erlang, 552 553 external_javascript, 554 + external_cranelift, 553 555 return_type: (), 554 556 implementations: _, 555 557 purity: _, ··· 574 576 self.assert_valid_javascript_external(&name, external_javascript.as_ref(), location); 575 577 576 578 // Find the external implementation for the current target, if one has been given. 577 - let external = 578 - target_function_implementation(target, &external_erlang, &external_javascript); 579 + let external = target_function_implementation( 580 + target, 581 + &external_erlang, 582 + &external_javascript, 583 + &external_cranelift, 584 + ); 579 585 580 586 // The function must have at least one implementation somewhere. 581 587 let has_implementation = self.ensure_function_has_an_implementation( ··· 598 604 has_body, 599 605 has_erlang_external: external_erlang.is_some(), 600 606 has_javascript_external: external_javascript.is_some(), 607 + has_cranelift_external: external_cranelift.is_some(), 601 608 }; 602 609 603 610 // We have already registered the function in the `register_value_from_function` ··· 791 798 external_javascript: external_javascript 792 799 .as_ref() 793 800 .map(|(m, f, _)| (m.clone(), f.clone())), 801 + external_cranelift: external_javascript 802 + .as_ref() 803 + .map(|(m, f, _)| (m.clone(), f.clone())), 794 804 field_map, 795 805 module: environment.current_module.clone(), 796 806 arity: typed_arguments.len(), ··· 831 841 body, 832 842 external_erlang, 833 843 external_javascript, 844 + external_cranelift, 834 845 implementations, 835 846 purity, 836 847 }; ··· 1595 1606 documentation, 1596 1607 external_erlang, 1597 1608 external_javascript, 1609 + external_cranelift, 1598 1610 deprecation, 1599 1611 end_position: _, 1600 1612 body: _, ··· 1672 1684 .as_ref() 1673 1685 .map(|(m, f, _)| (m.clone(), f.clone())), 1674 1686 external_javascript: external_javascript 1687 + .as_ref() 1688 + .map(|(m, f, _)| (m.clone(), f.clone())), 1689 + external_cranelift: external_cranelift 1675 1690 .as_ref() 1676 1691 .map(|(m, f, _)| (m.clone(), f.clone())), 1677 1692 module: environment.current_module.clone(), ··· 1773 1788 target: Target, 1774 1789 external_erlang: &'a Option<(EcoString, EcoString, SrcSpan)>, 1775 1790 external_javascript: &'a Option<(EcoString, EcoString, SrcSpan)>, 1791 + external_cranelift: &'a Option<(EcoString, EcoString, SrcSpan)>, 1776 1792 ) -> &'a Option<(EcoString, EcoString, SrcSpan)> { 1777 1793 match target { 1778 1794 Target::Erlang => external_erlang, 1779 1795 Target::JavaScript => external_javascript, 1796 + Target::Cranelift => external_cranelift, 1780 1797 } 1781 1798 } 1782 1799 ··· 1940 1957 return_type, 1941 1958 external_erlang, 1942 1959 external_javascript, 1960 + external_cranelift, 1943 1961 implementations, 1944 1962 purity, 1945 1963 } = function; ··· 1964 1982 .as_ref() 1965 1983 .map(|(m, f, _)| (m.clone(), f.clone())), 1966 1984 external_javascript: external_javascript 1985 + .as_ref() 1986 + .map(|(m, f, _)| (m.clone(), f.clone())), 1987 + external_cranelift: external_javascript 1967 1988 .as_ref() 1968 1989 .map(|(m, f, _)| (m.clone(), f.clone())), 1969 1990 module: module_name.clone(), ··· 2003 2024 body, 2004 2025 external_erlang, 2005 2026 external_javascript, 2027 + external_cranelift, 2006 2028 implementations, 2007 2029 purity, 2008 2030 }
+1
compiler-core/src/ast.rs
··· 870 870 pub documentation: Option<(u32, EcoString)>, 871 871 pub external_erlang: Option<(EcoString, EcoString, SrcSpan)>, 872 872 pub external_javascript: Option<(EcoString, EcoString, SrcSpan)>, 873 + pub external_cranelift: Option<(EcoString, EcoString, SrcSpan)>, 873 874 pub implementations: Implementations, 874 875 pub purity: Purity, 875 876 }
+1
compiler-core/src/ast/tests.rs
··· 167 167 has_body: true, 168 168 has_erlang_external: false, 169 169 has_javascript_external: false, 170 + has_cranelift_external: false, 170 171 }, 171 172 &mut problems, 172 173 )
+5
compiler-core/src/build.rs
··· 73 73 #[serde(alias = "js")] 74 74 #[clap(alias = "js")] 75 75 JavaScript, 76 + #[strum(serialize = "cranelift")] 77 + #[serde(rename = "cranelift")] 78 + Cranelift, 76 79 } 77 80 78 81 impl Target { ··· 185 188 Erlang { 186 189 app_file: Option<ErlangAppCodegenConfiguration>, 187 190 }, 191 + Cranelift {}, 188 192 } 189 193 190 194 impl TargetCodegenConfiguration { ··· 192 196 match self { 193 197 Self::JavaScript { .. } => Target::JavaScript, 194 198 Self::Erlang { .. } => Target::Erlang, 199 + Self::Cranelift { .. } => Target::Cranelift, 195 200 } 196 201 } 197 202 }
+3
compiler-core/src/build/package_compiler.rs
··· 376 376 TargetCodegenConfiguration::Erlang { app_file } => { 377 377 self.perform_erlang_codegen(modules, cached_module_names, app_file.as_ref()) 378 378 } 379 + TargetCodegenConfiguration::Cranelift {} => { 380 + todo!("codegen") 381 + } 379 382 } 380 383 } 381 384
+2
compiler-core/src/build/project_compiler.rs
··· 618 618 // This path is relative to each package output directory 619 619 prelude_location: Utf8PathBuf::from("../prelude.mjs"), 620 620 }, 621 + 622 + Target::Cranelift => super::TargetCodegenConfiguration::Cranelift {}, 621 623 }; 622 624 623 625 let mut compiler = PackageCompiler::new(
+5
compiler-core/src/call_graph/into_dependency_order_tests.rs
··· 47 47 documentation: None, 48 48 external_erlang: None, 49 49 external_javascript: None, 50 + external_cranelift: None, 50 51 implementations: Implementations { 51 52 gleam: true, 52 53 uses_erlang_externals: true, 53 54 uses_javascript_externals: false, 55 + uses_cranelift_externals: false, 54 56 can_run_on_erlang: true, 55 57 can_run_on_javascript: true, 58 + can_run_on_cranelift: true, 56 59 }, 57 60 purity: Purity::Impure, 58 61 }) ··· 73 76 gleam: true, 74 77 uses_erlang_externals: true, 75 78 uses_javascript_externals: false, 79 + uses_cranelift_externals: false, 76 80 can_run_on_erlang: true, 77 81 can_run_on_javascript: true, 82 + can_run_on_cranelift: true, 78 83 }, 79 84 type_: (), 80 85 deprecation: Deprecation::NotDeprecated,
+1
compiler-core/src/inline.rs
··· 2005 2005 implementations: Implementations::supporting_all(), 2006 2006 external_erlang: None, 2007 2007 external_javascript: None, 2008 + external_cranelift: None, 2008 2009 purity: Purity::Unknown, 2009 2010 } 2010 2011 }
+32
compiler-core/src/metadata/tests.rs
··· 60 60 gleam: true, 61 61 uses_erlang_externals: false, 62 62 uses_javascript_externals: false, 63 + uses_cranelift_externals: false, 63 64 can_run_on_erlang: true, 64 65 can_run_on_javascript: true, 66 + can_run_on_cranelift: true, 65 67 }, 66 68 name: "one".into(), 67 69 }, ··· 538 540 }, 539 541 external_erlang: None, 540 542 external_javascript: None, 543 + external_cranelift: None, 541 544 implementations: Implementations { 542 545 gleam: true, 543 546 uses_erlang_externals: false, 544 547 uses_javascript_externals: false, 548 + uses_cranelift_externals: false, 545 549 can_run_on_erlang: true, 546 550 can_run_on_javascript: true, 551 + can_run_on_cranelift: true, 547 552 }, 548 553 purity: Purity::Pure, 549 554 }, ··· 594 599 }, 595 600 external_erlang: None, 596 601 external_javascript: None, 602 + external_cranelift: None, 597 603 implementations: Implementations { 598 604 gleam: true, 599 605 uses_erlang_externals: false, 600 606 uses_javascript_externals: false, 607 + uses_cranelift_externals: false, 601 608 can_run_on_erlang: true, 602 609 can_run_on_javascript: true, 610 + can_run_on_cranelift: true, 603 611 }, 604 612 purity: Purity::Pure, 605 613 }, ··· 648 656 }, 649 657 external_erlang: None, 650 658 external_javascript: None, 659 + external_cranelift: None, 651 660 implementations: Implementations { 652 661 gleam: true, 653 662 uses_erlang_externals: false, 654 663 uses_javascript_externals: false, 664 + uses_cranelift_externals: false, 655 665 can_run_on_erlang: true, 656 666 can_run_on_javascript: true, 667 + can_run_on_cranelift: true, 657 668 }, 658 669 purity: Purity::Pure, 659 670 }, ··· 704 715 }, 705 716 external_erlang: None, 706 717 external_javascript: None, 718 + external_cranelift: None, 707 719 implementations: Implementations { 708 720 gleam: true, 709 721 uses_erlang_externals: false, 710 722 uses_javascript_externals: false, 723 + uses_cranelift_externals: false, 711 724 can_run_on_erlang: true, 712 725 can_run_on_javascript: true, 726 + can_run_on_cranelift: true, 713 727 }, 714 728 purity: Purity::TrustedPure, 715 729 }, ··· 756 770 }), 757 771 external_erlang: None, 758 772 external_javascript: None, 773 + external_cranelift: None, 759 774 module: "a".into(), 760 775 arity: 5, 761 776 location: SrcSpan { start: 2, end: 11 }, ··· 763 778 gleam: true, 764 779 uses_erlang_externals: false, 765 780 uses_javascript_externals: false, 781 + uses_cranelift_externals: false, 766 782 can_run_on_erlang: true, 767 783 can_run_on_javascript: true, 784 + can_run_on_cranelift: true, 768 785 }, 769 786 purity: Purity::Pure, 770 787 }, ··· 1228 1245 gleam: true, 1229 1246 uses_erlang_externals: false, 1230 1247 uses_javascript_externals: false, 1248 + uses_cranelift_externals: false, 1231 1249 can_run_on_erlang: true, 1232 1250 can_run_on_javascript: true, 1251 + can_run_on_cranelift: true, 1233 1252 }, 1234 1253 name: "one_original".into(), 1235 1254 }, ··· 1261 1280 gleam: true, 1262 1281 uses_erlang_externals: false, 1263 1282 uses_javascript_externals: false, 1283 + uses_cranelift_externals: false, 1264 1284 can_run_on_erlang: true, 1265 1285 can_run_on_javascript: true, 1286 + can_run_on_cranelift: true, 1266 1287 }, 1267 1288 name: "one".into(), 1268 1289 }, ··· 1283 1304 gleam: true, 1284 1305 uses_erlang_externals: false, 1285 1306 uses_javascript_externals: false, 1307 + uses_cranelift_externals: false, 1286 1308 can_run_on_erlang: true, 1287 1309 can_run_on_javascript: true, 1310 + can_run_on_cranelift: true, 1288 1311 }, 1289 1312 name: "one_original".into(), 1290 1313 }, ··· 1532 1555 }, 1533 1556 external_erlang: Some(("wibble".into(), "wobble".into())), 1534 1557 external_javascript: Some(("wobble".into(), "wibble".into())), 1558 + external_cranelift: None, 1535 1559 implementations: Implementations { 1536 1560 gleam: false, 1537 1561 uses_erlang_externals: true, 1538 1562 uses_javascript_externals: true, 1563 + uses_cranelift_externals: false, 1539 1564 can_run_on_erlang: false, 1540 1565 can_run_on_javascript: true, 1566 + can_run_on_cranelift: false, 1541 1567 }, 1542 1568 purity: Purity::Impure, 1543 1569 }, ··· 1613 1639 }, 1614 1640 external_erlang: Some(("wibble".into(), "wobble".into())), 1615 1641 external_javascript: Some(("wobble".into(), "wibble".into())), 1642 + external_cranelift: None, 1616 1643 implementations: Implementations { 1617 1644 gleam: false, 1618 1645 uses_erlang_externals: true, 1619 1646 uses_javascript_externals: true, 1647 + uses_cranelift_externals: false, 1620 1648 can_run_on_erlang: true, 1621 1649 can_run_on_javascript: true, 1650 + can_run_on_cranelift: false, 1622 1651 }, 1623 1652 purity: Purity::Unknown, 1624 1653 }, ··· 1673 1702 }, 1674 1703 external_erlang: Some(("wibble".into(), "wobble".into())), 1675 1704 external_javascript: Some(("wobble".into(), "wibble".into())), 1705 + external_cranelift: None, 1676 1706 implementations: Implementations { 1677 1707 gleam: false, 1678 1708 uses_erlang_externals: true, 1679 1709 uses_javascript_externals: true, 1710 + uses_cranelift_externals: false, 1680 1711 can_run_on_erlang: true, 1681 1712 can_run_on_javascript: true, 1713 + can_run_on_cranelift: false, 1682 1714 }, 1683 1715 purity: Purity::Impure, 1684 1716 },
+12 -1
compiler-core/src/package_interface.rs
··· 237 237 /// - `uses_javascript_externals: true` the function is using JavaScript 238 238 /// external code. 239 239 uses_javascript_externals: bool, 240 + /// Set to `true` if the const/function is defined using Cranelift external 241 + /// code. That means that the function will use Cranelift code through FFI when 242 + /// compiled for the Cranelift target. 243 + uses_cranelift_externals: bool, 240 244 /// Whether the function can be called on the Erlang target, either due to a 241 245 /// pure Gleam implementation or an implementation that uses some Erlang 242 246 /// externals. ··· 245 249 /// to a pure Gleam implementation or an implementation that uses some 246 250 /// JavaScript externals. 247 251 can_run_on_javascript: bool, 252 + /// Whether the function can be called on the Cranelift target, either due to a 253 + /// pure Gleam implementation or an implementation that uses some Cranelift 254 + /// externals. 255 + can_run_on_cranelift: bool, 248 256 } 249 257 250 258 impl ImplementationsInterface { ··· 262 270 gleam, 263 271 uses_erlang_externals, 264 272 uses_javascript_externals, 265 - 273 + uses_cranelift_externals, 266 274 can_run_on_erlang, 267 275 can_run_on_javascript, 276 + can_run_on_cranelift, 268 277 } = implementations; 269 278 270 279 ImplementationsInterface { 271 280 gleam: *gleam, 272 281 uses_erlang_externals: *uses_erlang_externals, 273 282 uses_javascript_externals: *uses_javascript_externals, 283 + uses_cranelift_externals: *uses_cranelift_externals, 274 284 can_run_on_erlang: *can_run_on_erlang, 275 285 can_run_on_javascript: *can_run_on_javascript, 286 + can_run_on_cranelift: *can_run_on_cranelift, 276 287 } 277 288 } 278 289 }
+11 -1
compiler-core/src/parse.rs
··· 131 131 deprecated: Deprecation, 132 132 external_erlang: Option<(EcoString, EcoString, SrcSpan)>, 133 133 external_javascript: Option<(EcoString, EcoString, SrcSpan)>, 134 + external_cranelift: Option<(EcoString, EcoString, SrcSpan)>, 134 135 internal: InternalAttribute, 135 136 } 136 137 137 138 impl Attributes { 138 139 fn has_function_only(&self) -> bool { 139 - self.external_erlang.is_some() || self.external_javascript.is_some() 140 + self.external_erlang.is_some() 141 + || self.external_javascript.is_some() 142 + || self.external_cranelift.is_some() 140 143 } 141 144 142 145 fn has_external_for(&self, target: Target) -> bool { 143 146 match target { 144 147 Target::Erlang => self.external_erlang.is_some(), 145 148 Target::JavaScript => self.external_javascript.is_some(), 149 + Target::Cranelift => self.external_cranelift.is_some(), 146 150 } 147 151 } 148 152 ··· 150 154 match target { 151 155 Target::Erlang => self.external_erlang = ext, 152 156 Target::JavaScript => self.external_javascript = ext, 157 + Target::Cranelift => self.external_cranelift = ext, 153 158 } 154 159 } 155 160 } ··· 2268 2273 deprecation: std::mem::take(&mut attributes.deprecated), 2269 2274 external_erlang: attributes.external_erlang.take(), 2270 2275 external_javascript: attributes.external_javascript.take(), 2276 + external_cranelift: attributes.external_cranelift.take(), 2271 2277 implementations: Implementations { 2272 2278 gleam: true, 2273 2279 can_run_on_erlang: true, 2274 2280 can_run_on_javascript: true, 2281 + can_run_on_cranelift: true, 2275 2282 uses_erlang_externals: false, 2276 2283 uses_javascript_externals: false, 2284 + uses_cranelift_externals: false, 2277 2285 }, 2278 2286 purity: Purity::Pure, 2279 2287 }))) ··· 3300 3308 gleam: true, 3301 3309 can_run_on_erlang: true, 3302 3310 can_run_on_javascript: true, 3311 + can_run_on_cranelift: true, 3303 3312 uses_erlang_externals: false, 3304 3313 uses_javascript_externals: false, 3314 + uses_cranelift_externals: false, 3305 3315 }, 3306 3316 }))) 3307 3317 }
+3
compiler-core/src/type_.rs
··· 745 745 implementations: Implementations, 746 746 external_erlang: Option<(EcoString, EcoString)>, 747 747 external_javascript: Option<(EcoString, EcoString)>, 748 + external_cranelift: Option<(EcoString, EcoString)>, 748 749 purity: Purity, 749 750 }, 750 751 ··· 879 880 gleam: true, 880 881 can_run_on_erlang: true, 881 882 can_run_on_javascript: true, 883 + can_run_on_cranelift: true, 882 884 uses_javascript_externals: false, 883 885 uses_erlang_externals: false, 886 + uses_cranelift_externals: false, 884 887 }, 885 888 886 889 ValueConstructorVariant::ModuleFn {
+20
compiler-core/src/type_/expression.rs
··· 51 51 pub gleam: bool, 52 52 pub can_run_on_erlang: bool, 53 53 pub can_run_on_javascript: bool, 54 + pub can_run_on_cranelift: bool, 54 55 /// Whether the function has an implementation that uses external erlang 55 56 /// code. 56 57 pub uses_erlang_externals: bool, 57 58 /// Whether the function has an implementation that uses external javascript 58 59 /// code. 59 60 pub uses_javascript_externals: bool, 61 + /// Whether the function has an implementation that uses external cranelift 62 + /// code. 63 + pub uses_cranelift_externals: bool, 60 64 } 61 65 62 66 impl Implementations { ··· 65 69 gleam: true, 66 70 can_run_on_erlang: true, 67 71 can_run_on_javascript: true, 72 + can_run_on_cranelift: true, 68 73 uses_javascript_externals: false, 69 74 uses_erlang_externals: false, 75 + uses_cranelift_externals: false, 70 76 } 71 77 } 72 78 } ··· 163 169 pub has_erlang_external: bool, 164 170 /// The function has @external(JavaScript, "...", "...") 165 171 pub has_javascript_external: bool, 172 + /// The function has @external(cranelift, "...", "...") 173 + pub has_cranelift_external: bool, 166 174 } 167 175 168 176 impl FunctionDefinition { ··· 170 178 match target { 171 179 Target::Erlang => self.has_erlang_external, 172 180 Target::JavaScript => self.has_javascript_external, 181 + Target::Cranelift => self.has_cranelift_external, 173 182 } 174 183 } 175 184 } ··· 189 198 gleam, 190 199 uses_erlang_externals: other_uses_erlang_externals, 191 200 uses_javascript_externals: other_uses_javascript_externals, 201 + uses_cranelift_externals: other_uses_cranelift_externals, 192 202 can_run_on_erlang: other_can_run_on_erlang, 193 203 can_run_on_javascript: other_can_run_on_javascript, 204 + can_run_on_cranelift: othere_can_run_on_cranelift, 194 205 } = implementations; 195 206 let FunctionDefinition { 196 207 has_body: _, 197 208 has_erlang_external, 198 209 has_javascript_external, 210 + has_cranelift_external, 199 211 } = current_function_definition; 200 212 201 213 // If a pure-Gleam function uses a function that doesn't have a pure ··· 208 220 || (self.can_run_on_erlang && (*gleam || *other_can_run_on_erlang)); 209 221 self.can_run_on_javascript = *has_javascript_external 210 222 || (self.can_run_on_javascript && (*gleam || *other_can_run_on_javascript)); 223 + self.can_run_on_cranelift = *has_cranelift_external 224 + || (self.can_run_on_cranelift && (*gleam || *othere_can_run_on_cranelift)); 211 225 212 226 // If a function uses a function that relies on external code (be it 213 227 // javascript or erlang) then it's considered as using external code as ··· 230 244 self.uses_erlang_externals = self.uses_erlang_externals || *other_uses_erlang_externals; 231 245 self.uses_javascript_externals = 232 246 self.uses_javascript_externals || *other_uses_javascript_externals; 247 + self.uses_cranelift_externals = 248 + self.uses_cranelift_externals || *other_uses_cranelift_externals; 233 249 } 234 250 235 251 /// Returns true if the current target is supported by the given ··· 241 257 || match target { 242 258 Target::Erlang => self.can_run_on_erlang, 243 259 Target::JavaScript => self.can_run_on_javascript, 260 + Target::Cranelift => self.can_run_on_cranelift, 244 261 } 245 262 } 246 263 } ··· 319 336 gleam: definition.has_body, 320 337 can_run_on_erlang: definition.has_body || definition.has_erlang_external, 321 338 can_run_on_javascript: definition.has_body || definition.has_javascript_external, 339 + can_run_on_cranelift: definition.has_body || definition.has_cranelift_external, 322 340 uses_erlang_externals: definition.has_erlang_external, 323 341 uses_javascript_externals: definition.has_javascript_external, 342 + uses_cranelift_externals: definition.has_cranelift_external, 324 343 }; 325 344 326 345 let uses_externals = match environment.target { 327 346 Target::Erlang => implementations.uses_erlang_externals, 328 347 Target::JavaScript => implementations.uses_javascript_externals, 348 + Target::Cranelift => implementations.uses_cranelift_externals, 329 349 }; 330 350 331 351 let purity = if is_trusted_pure_module(environment) {
+15
compiler-core/src/type_/tests.rs
··· 425 425 has_body: true, 426 426 has_erlang_external: false, 427 427 has_javascript_external: false, 428 + has_cranelift_external: false, 428 429 }, 429 430 &mut problems, 430 431 ) ··· 2983 2984 gleam: true, 2984 2985 uses_erlang_externals: false, 2985 2986 uses_javascript_externals: false, 2987 + uses_cranelift_externals: false, 2986 2988 can_run_on_erlang: true, 2987 2989 can_run_on_javascript: true, 2990 + can_run_on_cranelift: true, 2988 2991 }, 2989 2992 name: "main".into(), 2990 2993 }, ··· 3010 3013 module: "module".into(), 3011 3014 external_erlang: None, 3012 3015 external_javascript: None, 3016 + external_cranelift: None, 3013 3017 implementations: Implementations { 3014 3018 gleam: true, 3015 3019 uses_erlang_externals: false, 3016 3020 uses_javascript_externals: false, 3021 + uses_cranelift_externals: false, 3017 3022 can_run_on_erlang: true, 3018 3023 can_run_on_javascript: true, 3024 + can_run_on_cranelift: true, 3019 3025 }, 3020 3026 purity: Purity::Pure, 3021 3027 }, ··· 3041 3047 module: "module".into(), 3042 3048 external_erlang: None, 3043 3049 external_javascript: None, 3050 + external_cranelift: None, 3044 3051 implementations: Implementations { 3045 3052 gleam: true, 3046 3053 uses_erlang_externals: false, 3047 3054 uses_javascript_externals: false, 3055 + uses_cranelift_externals: false, 3048 3056 can_run_on_erlang: true, 3049 3057 can_run_on_javascript: true, 3058 + can_run_on_cranelift: true, 3050 3059 }, 3051 3060 purity: Purity::Pure, 3052 3061 }, ··· 3072 3081 module: "module".into(), 3073 3082 external_erlang: Some(("wibble".into(), "wobble".into())), 3074 3083 external_javascript: Some(("wobble".into(), "wibble".into())), 3084 + external_cranelift: None, 3075 3085 implementations: Implementations { 3076 3086 gleam: false, 3077 3087 uses_erlang_externals: true, 3078 3088 uses_javascript_externals: true, 3089 + uses_cranelift_externals: false, 3079 3090 can_run_on_erlang: false, 3080 3091 can_run_on_javascript: true, 3092 + can_run_on_cranelift: false, 3081 3093 }, 3082 3094 purity: Purity::Impure, 3083 3095 }, ··· 3103 3115 module: "module".into(), 3104 3116 external_erlang: Some(("wibble".into(), "wobble".into())), 3105 3117 external_javascript: Some(("wobble".into(), "wibble".into())), 3118 + external_cranelift: None, 3106 3119 implementations: Implementations { 3107 3120 gleam: false, 3108 3121 uses_erlang_externals: true, 3109 3122 uses_javascript_externals: true, 3123 + uses_cranelift_externals: false, 3110 3124 can_run_on_erlang: true, 3111 3125 can_run_on_javascript: false, 3126 + can_run_on_cranelift: false, 3112 3127 }, 3113 3128 purity: Purity::Impure, 3114 3129 },
+30
compiler-core/src/type_/tests/target_implementations.rs
··· 54 54 gleam: true, 55 55 uses_erlang_externals: false, 56 56 uses_javascript_externals: false, 57 + uses_cranelift_externals: false, 57 58 can_run_on_erlang: true, 58 59 can_run_on_javascript: true, 60 + can_run_on_cranelift: true, 59 61 } 60 62 ), 61 63 ( ··· 64 66 gleam: true, 65 67 uses_erlang_externals: false, 66 68 uses_javascript_externals: false, 69 + uses_cranelift_externals: false, 67 70 can_run_on_erlang: true, 68 71 can_run_on_javascript: true, 72 + can_run_on_cranelift: true, 69 73 } 70 74 ) 71 75 ], ··· 88 92 gleam: false, 89 93 uses_erlang_externals: true, 90 94 uses_javascript_externals: false, 95 + uses_cranelift_externals: false, 91 96 can_run_on_erlang: true, 92 97 can_run_on_javascript: false, 98 + can_run_on_cranelift: false, 93 99 } 94 100 ), 95 101 ( ··· 98 104 gleam: false, 99 105 uses_erlang_externals: true, 100 106 uses_javascript_externals: false, 107 + uses_cranelift_externals: false, 101 108 can_run_on_erlang: true, 102 109 can_run_on_javascript: false, 110 + can_run_on_cranelift: false, 103 111 } 104 112 ) 105 113 ], ··· 123 131 gleam: false, 124 132 uses_erlang_externals: true, 125 133 uses_javascript_externals: true, 134 + uses_cranelift_externals: false, 126 135 can_run_on_erlang: true, 127 136 can_run_on_javascript: true, 137 + can_run_on_cranelift: false, 128 138 } 129 139 ), 130 140 ( ··· 133 143 gleam: false, 134 144 uses_erlang_externals: true, 135 145 uses_javascript_externals: true, 146 + uses_cranelift_externals: false, 136 147 can_run_on_erlang: true, 137 148 can_run_on_javascript: true, 149 + can_run_on_cranelift: false, 138 150 } 139 151 ) 140 152 ], ··· 162 174 gleam: true, 163 175 uses_erlang_externals: true, 164 176 uses_javascript_externals: false, 177 + uses_cranelift_externals: false, 165 178 can_run_on_erlang: true, 166 179 can_run_on_javascript: true, 180 + can_run_on_cranelift: true, 167 181 } 168 182 ), 169 183 ( ··· 172 186 gleam: true, 173 187 uses_erlang_externals: false, 174 188 uses_javascript_externals: true, 189 + uses_cranelift_externals: false, 175 190 can_run_on_erlang: true, 176 191 can_run_on_javascript: true, 192 + can_run_on_cranelift: true, 177 193 } 178 194 ), 179 195 ( ··· 182 198 gleam: true, 183 199 uses_erlang_externals: true, 184 200 uses_javascript_externals: true, 201 + uses_cranelift_externals: false, 185 202 can_run_on_erlang: true, 186 203 can_run_on_javascript: true, 204 + can_run_on_cranelift: true, 187 205 } 188 206 ) 189 207 ], ··· 209 227 gleam: false, 210 228 uses_erlang_externals: true, 211 229 uses_javascript_externals: true, 230 + uses_cranelift_externals: false, 212 231 can_run_on_erlang: true, 213 232 can_run_on_javascript: true, 233 + can_run_on_cranelift: false, 214 234 } 215 235 ), 216 236 ( ··· 219 239 gleam: false, 220 240 uses_erlang_externals: true, 221 241 uses_javascript_externals: true, 242 + uses_cranelift_externals: false, 222 243 can_run_on_erlang: true, 223 244 can_run_on_javascript: true, 245 + can_run_on_cranelift: false, 224 246 } 225 247 ), 226 248 ( ··· 229 251 gleam: false, 230 252 uses_erlang_externals: false, 231 253 uses_javascript_externals: true, 254 + uses_cranelift_externals: false, 232 255 can_run_on_erlang: false, 233 256 can_run_on_javascript: true, 257 + can_run_on_cranelift: false, 234 258 } 235 259 ) 236 260 ], ··· 256 280 gleam: false, 257 281 uses_erlang_externals: true, 258 282 uses_javascript_externals: true, 283 + uses_cranelift_externals: false, 259 284 can_run_on_erlang: true, 260 285 can_run_on_javascript: true, 286 + can_run_on_cranelift: false, 261 287 } 262 288 ), 263 289 ( ··· 266 292 gleam: false, 267 293 uses_erlang_externals: true, 268 294 uses_javascript_externals: false, 295 + uses_cranelift_externals: false, 269 296 can_run_on_erlang: true, 270 297 can_run_on_javascript: false, 298 + can_run_on_cranelift: false, 271 299 } 272 300 ), 273 301 ( ··· 276 304 gleam: false, 277 305 uses_erlang_externals: true, 278 306 uses_javascript_externals: true, 307 + uses_cranelift_externals: false, 279 308 can_run_on_erlang: true, 280 309 can_run_on_javascript: true, 310 + can_run_on_cranelift: false, 281 311 } 282 312 ) 283 313 ],
+1
compiler-core/src/warning.rs
··· 388 388 let full_name = match target { 389 389 Target::Erlang => "erlang", 390 390 Target::JavaScript => "javascript", 391 + Target::Cranelift => "cranelift", 391 392 }; 392 393 393 394 Diagnostic {
+1
compiler-wasm/src/lib.rs
··· 187 187 emit_source_maps: false, 188 188 prelude_location: Utf8PathBuf::from("./gleam_prelude.mjs"), 189 189 }, 190 + Target::Cranelift => TargetCodegenConfiguration::Cranelift {}, 190 191 }; 191 192 192 193 tracing::info!("Compiling package");
+3
test-output/src/tests/echo.rs
··· 115 115 Target::Erlang => { 116 116 assert_echo!(&snapshot_name, Some($target), None, $project_name); 117 117 } 118 + Target::Cranelift => { 119 + assert_echo!(&snapshot_name, Some($target), None, $project_name); 120 + } 118 121 } 119 122 }; 120 123
+1
test-package-compiler/src/lib.rs
··· 37 37 emit_source_maps: config.javascript.source_maps, 38 38 prelude_location: Utf8PathBuf::from("../prelude.mjs"), 39 39 }, 40 + Target::Cranelift => TargetCodegenConfiguration::Cranelift {}, 40 41 }; 41 42 42 43 let ids = gleam_core::uid::UniqueIdGenerator::new();