@@ -140,20 +140,20 @@ class V8 : public WasmVm {
140
140
141
141
static std::string printValue (const wasm::Val &value) {
142
142
switch (value.kind ()) {
143
- case wasm::I32:
143
+ case wasm::ValKind:: I32:
144
144
return std::to_string (value.get <uint32_t >());
145
- case wasm::I64:
145
+ case wasm::ValKind:: I64:
146
146
return std::to_string (value.get <uint64_t >());
147
- case wasm::F32:
147
+ case wasm::ValKind:: F32:
148
148
return std::to_string (value.get <float >());
149
- case wasm::F64:
149
+ case wasm::ValKind:: F64:
150
150
return std::to_string (value.get <double >());
151
151
default :
152
152
return " unknown" ;
153
153
}
154
154
}
155
155
156
- static std::string printValues (const wasm::Val values[] , size_t size) {
156
+ static std::string printValues (const wasm::vec<wasm:: Val> & values, size_t size) {
157
157
if (size == 0 ) {
158
158
return " " ;
159
159
}
@@ -170,17 +170,17 @@ static std::string printValues(const wasm::Val values[], size_t size) {
170
170
171
171
static const char *printValKind (wasm::ValKind kind) {
172
172
switch (kind) {
173
- case wasm::I32:
173
+ case wasm::ValKind:: I32:
174
174
return " i32" ;
175
- case wasm::I64:
175
+ case wasm::ValKind:: I64:
176
176
return " i64" ;
177
- case wasm::F32:
177
+ case wasm::ValKind:: F32:
178
178
return " f32" ;
179
- case wasm::F64:
179
+ case wasm::ValKind:: F64:
180
180
return " f64" ;
181
- case wasm::ANYREF :
182
- return " anyref " ;
183
- case wasm::FUNCREF:
181
+ case wasm::ValKind::EXTERNREF :
182
+ return " externref " ;
183
+ case wasm::ValKind:: FUNCREF:
184
184
return " funcref" ;
185
185
default :
186
186
return " unknown" ;
@@ -229,11 +229,11 @@ template <typename T> wasm::Val makeVal(T t) { return wasm::Val::make(t); }
229
229
template <> wasm::Val makeVal (Word t) { return wasm::Val::make (static_cast <uint32_t >(t.u64_ )); }
230
230
231
231
template <typename T> constexpr auto convertArgToValKind ();
232
- template <> constexpr auto convertArgToValKind<Word>() { return wasm::I32; };
233
- template <> constexpr auto convertArgToValKind<uint32_t >() { return wasm::I32; };
234
- template <> constexpr auto convertArgToValKind<int64_t >() { return wasm::I64; };
235
- template <> constexpr auto convertArgToValKind<uint64_t >() { return wasm::I64; };
236
- template <> constexpr auto convertArgToValKind<double >() { return wasm::F64; };
232
+ template <> constexpr auto convertArgToValKind<Word>() { return wasm::ValKind:: I32; };
233
+ template <> constexpr auto convertArgToValKind<uint32_t >() { return wasm::ValKind:: I32; };
234
+ template <> constexpr auto convertArgToValKind<int64_t >() { return wasm::ValKind:: I64; };
235
+ template <> constexpr auto convertArgToValKind<uint64_t >() { return wasm::ValKind:: I64; };
236
+ template <> constexpr auto convertArgToValKind<double >() { return wasm::ValKind:: F64; };
237
237
238
238
template <typename T, std::size_t ... I>
239
239
constexpr auto convertArgsTupleToValTypesImpl (std::index_sequence<I...> /* comptime*/ ) {
@@ -343,7 +343,7 @@ bool V8::link(std::string_view /*debug_name*/) {
343
343
assert (module_ != nullptr );
344
344
345
345
const auto import_types = module_.get ()->imports ();
346
- std::vector< const wasm::Extern *> imports;
346
+ wasm::vec< wasm::Extern *> imports = wasm::vec<wasm::Extern*>:: make_uninitialized (import_types. size ()) ;
347
347
348
348
for (size_t i = 0 ; i < import_types.size (); i++) {
349
349
std::string_view module (import_types[i]->module ().get (), import_types[i]->module ().size ());
@@ -352,7 +352,7 @@ bool V8::link(std::string_view /*debug_name*/) {
352
352
353
353
switch (import_type->kind ()) {
354
354
355
- case wasm::EXTERN_FUNC : {
355
+ case wasm::ExternKind::FUNC : {
356
356
auto it = host_functions_.find (std::string (module ) + " ." + std::string (name));
357
357
if (it == host_functions_.end ()) {
358
358
fail (FailState::UnableToInitializeCode,
@@ -372,18 +372,18 @@ bool V8::link(std::string_view /*debug_name*/) {
372
372
printValTypes (func->type ()->results ()));
373
373
return false ;
374
374
}
375
- imports. push_back ( func) ;
375
+ imports[i] = func;
376
376
} break ;
377
377
378
- case wasm::EXTERN_GLOBAL : {
378
+ case wasm::ExternKind::GLOBAL : {
379
379
// TODO(PiotrSikora): add support when/if needed.
380
380
fail (FailState::UnableToInitializeCode,
381
381
" Failed to load Wasm module due to a missing import: " + std::string (module ) + " ." +
382
382
std::string (name));
383
383
return false ;
384
384
} break ;
385
385
386
- case wasm::EXTERN_MEMORY : {
386
+ case wasm::ExternKind::MEMORY : {
387
387
assert (memory_ == nullptr );
388
388
auto type = wasm::MemoryType::make (import_type->memory ()->limits ());
389
389
if (type == nullptr ) {
@@ -393,10 +393,10 @@ bool V8::link(std::string_view /*debug_name*/) {
393
393
if (memory_ == nullptr ) {
394
394
return false ;
395
395
}
396
- imports. push_back ( memory_.get () );
396
+ imports[i] = memory_.get ();
397
397
} break ;
398
398
399
- case wasm::EXTERN_TABLE : {
399
+ case wasm::ExternKind::TABLE : {
400
400
assert (table_ == nullptr );
401
401
auto type =
402
402
wasm::TableType::make (wasm::ValType::make (import_type->table ()->element ()->kind ()),
@@ -408,16 +408,12 @@ bool V8::link(std::string_view /*debug_name*/) {
408
408
if (table_ == nullptr ) {
409
409
return false ;
410
410
}
411
- imports. push_back ( table_.get () );
411
+ imports[i] = table_.get ();
412
412
} break ;
413
413
}
414
414
}
415
415
416
- if (import_types.size () != imports.size ()) {
417
- return false ;
418
- }
419
-
420
- instance_ = wasm::Instance::make (store_.get (), module_.get (), imports.data ());
416
+ instance_ = wasm::Instance::make (store_.get (), module_.get (), imports);
421
417
if (instance_ == nullptr ) {
422
418
fail (FailState::UnableToInitializeCode, " Failed to create new Wasm instance" );
423
419
return false ;
@@ -435,16 +431,16 @@ bool V8::link(std::string_view /*debug_name*/) {
435
431
436
432
switch (export_type->kind ()) {
437
433
438
- case wasm::EXTERN_FUNC : {
434
+ case wasm::ExternKind::FUNC : {
439
435
assert (export_item->func () != nullptr );
440
436
module_functions_.insert_or_assign (std::string (name), export_item->func ()->copy ());
441
437
} break ;
442
438
443
- case wasm::EXTERN_GLOBAL : {
439
+ case wasm::ExternKind::GLOBAL : {
444
440
// TODO(PiotrSikora): add support when/if needed.
445
441
} break ;
446
442
447
- case wasm::EXTERN_MEMORY : {
443
+ case wasm::ExternKind::MEMORY : {
448
444
assert (export_item->memory () != nullptr );
449
445
assert (memory_ == nullptr );
450
446
memory_ = exports[i]->memory ()->copy ();
@@ -453,7 +449,7 @@ bool V8::link(std::string_view /*debug_name*/) {
453
449
}
454
450
} break ;
455
451
456
- case wasm::EXTERN_TABLE : {
452
+ case wasm::ExternKind::TABLE : {
457
453
// TODO(PiotrSikora): add support when/if needed.
458
454
} break ;
459
455
}
@@ -531,7 +527,7 @@ void V8::registerHostFunctionImpl(std::string_view module_name, std::string_view
531
527
convertArgsTupleToValTypes<std::tuple<>>());
532
528
auto func = wasm::Func::make (
533
529
store_.get (), type.get (),
534
- [](void *data, const wasm::Val params[] , wasm::Val /* results*/ [] ) -> wasm::own<wasm::Trap> {
530
+ [](void *data, const wasm::vec<wasm:: Val>& params, wasm::vec<wasm:: Val>& /* results*/ ) -> wasm::own<wasm::Trap> {
535
531
auto *func_data = reinterpret_cast <FuncData *>(data);
536
532
const bool log = func_data->vm_ ->cmpLogLevel (LogLevel::trace);
537
533
if (log) {
@@ -567,7 +563,7 @@ void V8::registerHostFunctionImpl(std::string_view module_name, std::string_view
567
563
convertArgsTupleToValTypes<std::tuple<R>>());
568
564
auto func = wasm::Func::make (
569
565
store_.get (), type.get (),
570
- [](void *data, const wasm::Val params[] , wasm::Val results[] ) -> wasm::own<wasm::Trap> {
566
+ [](void *data, const wasm::vec<wasm:: Val>& params, wasm::vec<wasm:: Val>& results) -> wasm::own<wasm::Trap> {
571
567
auto *func_data = reinterpret_cast <FuncData *>(data);
572
568
const bool log = func_data->vm_ ->cmpLogLevel (LogLevel::trace);
573
569
if (log) {
@@ -621,20 +617,21 @@ void V8::getModuleFunctionImpl(std::string_view function_name,
621
617
const bool log = cmpLogLevel (LogLevel::trace);
622
618
SaveRestoreContext saved_context (context);
623
619
wasm::own<wasm::Trap> trap = nullptr ;
620
+ wasm::vec<wasm::Val> results = wasm::vec<wasm::Val>::make_uninitialized ();
624
621
625
622
// Workaround for MSVC++ not supporting zero-sized arrays.
626
623
if constexpr (sizeof ...(args) > 0 ) {
627
- wasm::Val params[] = { makeVal (args)...} ;
624
+ wasm::vec<wasm:: Val> params = wasm::vec<wasm::Val>:: make ( makeVal (args)...) ;
628
625
if (log) {
629
626
integration ()->trace (" [host->vm] " + std::string (function_name) + " (" +
630
627
printValues (params, sizeof ...(Args)) + " )" );
631
628
}
632
- trap = func->call (params, nullptr );
629
+ trap = func->call (params, results );
633
630
} else {
634
631
if (log) {
635
632
integration ()->trace (" [host->vm] " + std::string (function_name) + " ()" );
636
633
}
637
- trap = func->call (nullptr , nullptr );
634
+ trap = func->call (wasm::vec<wasm::Val>:: make_uninitialized (), results );
638
635
}
639
636
640
637
if (trap) {
@@ -671,12 +668,12 @@ void V8::getModuleFunctionImpl(std::string_view function_name,
671
668
*function = [func, function_name, this ](ContextBase *context, Args... args) -> R {
672
669
const bool log = cmpLogLevel (LogLevel::trace);
673
670
SaveRestoreContext saved_context (context);
674
- wasm::Val results[ 1 ] ;
671
+ wasm::vec<wasm:: Val> results = wasm::vec<wasm::Val>:: make_uninitialized ( 1 ) ;
675
672
wasm::own<wasm::Trap> trap = nullptr ;
676
673
677
674
// Workaround for MSVC++ not supporting zero-sized arrays.
678
675
if constexpr (sizeof ...(args) > 0 ) {
679
- wasm::Val params[] = { makeVal (args)...} ;
676
+ wasm::vec<wasm:: Val> params = wasm::vec<wasm::Val>:: make ( makeVal (args)...) ;
680
677
if (log) {
681
678
integration ()->trace (" [host->vm] " + std::string (function_name) + " (" +
682
679
printValues (params, sizeof ...(Args)) + " )" );
@@ -686,7 +683,7 @@ void V8::getModuleFunctionImpl(std::string_view function_name,
686
683
if (log) {
687
684
integration ()->trace (" [host->vm] " + std::string (function_name) + " ()" );
688
685
}
689
- trap = func->call (nullptr , results);
686
+ trap = func->call (wasm::vec<wasm::Val>:: make_uninitialized () , results);
690
687
}
691
688
692
689
if (trap) {
0 commit comments