@@ -367,6 +367,30 @@ BinaryenExternalKind BinaryenExternalGlobal(void) {
367367 return static_cast <BinaryenExternalKind>(ExternalKind::Global);
368368}
369369
370+ // Features
371+
372+ BinaryenFeatures BinaryenFeatureAtomics (void ) {
373+ return static_cast <BinaryenFeatures>(FeatureSet::Feature::Atomics);
374+ }
375+ BinaryenFeatures BinaryenFeatureBulkMemory (void ) {
376+ return static_cast <BinaryenFeatures>(FeatureSet::Feature::BulkMemory);
377+ }
378+ BinaryenFeatures BinaryenFeatureMutableGlobals (void ) {
379+ return static_cast <BinaryenFeatures>(FeatureSet::Feature::MutableGlobals);
380+ }
381+ BinaryenFeatures BinaryenFeatureNontrappingFPToInt (void ) {
382+ return static_cast <BinaryenFeatures>(FeatureSet::Feature::TruncSat);
383+ }
384+ BinaryenFeatures BinaryenFeatureSignExt (void ) {
385+ return static_cast <BinaryenFeatures>(FeatureSet::Feature::SignExt);
386+ }
387+ BinaryenFeatures BinaryenFeatureSIMD128 (void ) {
388+ return static_cast <BinaryenFeatures>(FeatureSet::Feature::SIMD);
389+ }
390+ BinaryenFeatures BinaryenFeatureExceptionHandling (void ) {
391+ return static_cast <BinaryenFeatures>(FeatureSet::Feature::ExceptionHandling);
392+ }
393+
370394// Modules
371395
372396BinaryenModuleRef BinaryenModuleCreate (void ) {
@@ -3053,6 +3077,24 @@ void BinaryenSetStart(BinaryenModuleRef module, BinaryenFunctionRef start) {
30533077 wasm->addStart (((Function*)start)->name );
30543078}
30553079
3080+ // Features
3081+
3082+ BinaryenFeatures BinaryenGetFeatures (BinaryenModuleRef module ) {
3083+ if (tracing) {
3084+ std::cout << " BinaryenGetFeatures(the_module);\n " ;
3085+ }
3086+ auto * wasm = static_cast <Module*>(module );
3087+ return wasm->features .features ;
3088+ }
3089+
3090+ void BinaryenSetFeatures (BinaryenModuleRef module , BinaryenFeatures features) {
3091+ if (tracing) {
3092+ std::cout << " BinaryenSetFeatures(the_module, " << features << " );\n " ;
3093+ }
3094+ auto * wasm = static_cast <Module*>(module );
3095+ wasm->features .features = features;
3096+ }
3097+
30563098//
30573099// ========== Module Operations ==========
30583100//
@@ -3106,8 +3148,6 @@ int BinaryenModuleValidate(BinaryenModuleRef module) {
31063148 }
31073149
31083150 Module* wasm = (Module*)module ;
3109- // TODO(tlively): Add C API for managing features
3110- wasm->features = FeatureSet::All;
31113151 return WasmValidator ().validate (*wasm) ? 1 : 0 ;
31123152}
31133153
0 commit comments