mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-28 14:24:45 +00:00
Merge pull request #1694 from rtfeldman/wasm-layout-fix
Wasm layout fix
This commit is contained in:
commit
c80534d03b
4 changed files with 8 additions and 35 deletions
|
@ -1150,8 +1150,8 @@ fn strToBytes(arg: RocStr) RocList {
|
||||||
}
|
}
|
||||||
|
|
||||||
const FromUtf8Result = extern struct {
|
const FromUtf8Result = extern struct {
|
||||||
string: RocStr,
|
|
||||||
byte_index: usize,
|
byte_index: usize,
|
||||||
|
string: RocStr,
|
||||||
is_ok: bool,
|
is_ok: bool,
|
||||||
problem_code: Utf8ByteProblem,
|
problem_code: Utf8ByteProblem,
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::llvm::bitcode::{call_bitcode_fn, call_void_bitcode_fn};
|
use crate::llvm::bitcode::{call_bitcode_fn, call_void_bitcode_fn};
|
||||||
use crate::llvm::build::{complex_bitcast, struct_from_fields, Env, Scope};
|
use crate::llvm::build::{complex_bitcast, Env, Scope};
|
||||||
use crate::llvm::build_list::{allocate_list, call_bitcode_fn_returns_list, store_list};
|
use crate::llvm::build_list::{allocate_list, call_bitcode_fn_returns_list, store_list};
|
||||||
use inkwell::builder::Builder;
|
use inkwell::builder::Builder;
|
||||||
use inkwell::values::{BasicValueEnum, FunctionValue, IntValue, PointerValue, StructValue};
|
use inkwell::values::{BasicValueEnum, FunctionValue, IntValue, PointerValue, StructValue};
|
||||||
|
@ -268,48 +268,19 @@ fn decode_from_utf8_result<'a, 'ctx, 'env>(
|
||||||
let ctx = env.context;
|
let ctx = env.context;
|
||||||
|
|
||||||
let fields = match env.ptr_bytes {
|
let fields = match env.ptr_bytes {
|
||||||
8 => [
|
8 | 4 => [
|
||||||
env.ptr_int().into(),
|
env.ptr_int().into(),
|
||||||
super::convert::zig_str_type(env).into(),
|
super::convert::zig_str_type(env).into(),
|
||||||
env.context.bool_type().into(),
|
env.context.bool_type().into(),
|
||||||
ctx.i8_type().into(),
|
ctx.i8_type().into(),
|
||||||
],
|
],
|
||||||
4 => [
|
|
||||||
super::convert::zig_str_type(env).into(),
|
|
||||||
env.ptr_int().into(),
|
|
||||||
env.context.bool_type().into(),
|
|
||||||
ctx.i8_type().into(),
|
|
||||||
],
|
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let record_type = env.context.struct_type(&fields, false);
|
let record_type = env.context.struct_type(&fields, false);
|
||||||
|
|
||||||
match env.ptr_bytes {
|
match env.ptr_bytes {
|
||||||
8 => {
|
8 | 4 => {
|
||||||
let zig_struct = builder
|
|
||||||
.build_load(pointer, "load_utf8_validate_bytes_result")
|
|
||||||
.into_struct_value();
|
|
||||||
|
|
||||||
let string = builder
|
|
||||||
.build_extract_value(zig_struct, 0, "string")
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let byte_index = builder
|
|
||||||
.build_extract_value(zig_struct, 1, "byte_index")
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let is_ok = builder.build_extract_value(zig_struct, 2, "is_ok").unwrap();
|
|
||||||
|
|
||||||
let problem_code = builder
|
|
||||||
.build_extract_value(zig_struct, 3, "problem_code")
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let values = [byte_index, string, is_ok, problem_code];
|
|
||||||
|
|
||||||
struct_from_fields(env, record_type, values.iter().copied().enumerate())
|
|
||||||
}
|
|
||||||
4 => {
|
|
||||||
let result_ptr_cast = env
|
let result_ptr_cast = env
|
||||||
.builder
|
.builder
|
||||||
.build_bitcast(
|
.build_bitcast(
|
||||||
|
|
|
@ -1158,8 +1158,8 @@ impl<'a> Builtin<'a> {
|
||||||
//
|
//
|
||||||
// In webassembly, For that to be safe
|
// In webassembly, For that to be safe
|
||||||
// they must be aligned to allow such access
|
// they must be aligned to allow such access
|
||||||
List(_) | EmptyList => pointer_size.max(8),
|
List(_) | EmptyList => pointer_size,
|
||||||
Str | EmptyStr => pointer_size.max(8),
|
Str | EmptyStr => pointer_size,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2531,6 +2531,8 @@ fn pattern_match_unit_tag() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// see for why this is disabled on wasm32 https://github.com/rtfeldman/roc/issues/1687
|
||||||
|
#[cfg(not(feature = "wasm-cli-run"))]
|
||||||
#[test]
|
#[test]
|
||||||
fn mirror_llvm_alignment_padding() {
|
fn mirror_llvm_alignment_padding() {
|
||||||
// see https://github.com/rtfeldman/roc/issues/1569
|
// see https://github.com/rtfeldman/roc/issues/1569
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue