diff options
author | Daniel Wirtz <dcode@dcode.io> | 2017-11-11 19:39:21 +0100 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2017-11-11 10:39:21 -0800 |
commit | 5e4ea073ed1f6000197fab70041544ea73a8b4a0 (patch) | |
tree | d14dd69237f24a43a924ffba1a006ff6a829ca9b /src | |
parent | 5b44a8bbf43bb4f1bd8c27d8eceae0111e729c89 (diff) | |
download | binaryen-5e4ea073ed1f6000197fab70041544ea73a8b4a0.tar.gz binaryen-5e4ea073ed1f6000197fab70041544ea73a8b4a0.tar.bz2 binaryen-5e4ea073ed1f6000197fab70041544ea73a8b4a0.zip |
Added expression utility functions to binaryen-c/.js (#1269)
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 47 | ||||
-rw-r--r-- | src/binaryen-c.h | 37 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 37 |
3 files changed, 121 insertions, 0 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 03bc3fac7..08136d059 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -106,6 +106,37 @@ BinaryenType BinaryenFloat32(void) { return f32; } BinaryenType BinaryenFloat64(void) { return f64; } BinaryenType BinaryenUndefined(void) { return uint32_t(-1); } +// Expression ids + +BinaryenExpressionId BinaryenInvalidId(void) { return Expression::Id::InvalidId; } +BinaryenExpressionId BinaryenBlockId(void) { return Expression::Id::BlockId; } +BinaryenExpressionId BinaryenIfId(void) { return Expression::Id::IfId; } +BinaryenExpressionId BinaryenLoopId(void) { return Expression::Id::LoopId; } +BinaryenExpressionId BinaryenBreakId(void) { return Expression::Id::BreakId; } +BinaryenExpressionId BinaryenSwitchId(void) { return Expression::Id::SwitchId; } +BinaryenExpressionId BinaryenCallId(void) { return Expression::Id::CallId; } +BinaryenExpressionId BinaryenCallImportId(void) { return Expression::Id::CallImportId; } +BinaryenExpressionId BinaryenCallIndirectId(void) { return Expression::Id::CallIndirectId; } +BinaryenExpressionId BinaryenGetLocalId(void) { return Expression::Id::GetLocalId; } +BinaryenExpressionId BinaryenSetLocalId(void) { return Expression::Id::SetLocalId; } +BinaryenExpressionId BinaryenGetGlobalId(void) { return Expression::Id::GetGlobalId; } +BinaryenExpressionId BinaryenSetGlobalId(void) { return Expression::Id::SetGlobalId; } +BinaryenExpressionId BinaryenLoadId(void) { return Expression::Id::LoadId; } +BinaryenExpressionId BinaryenStoreId(void) { return Expression::Id::StoreId; } +BinaryenExpressionId BinaryenConstId(void) { return Expression::Id::ConstId; } +BinaryenExpressionId BinaryenUnaryId(void) { return Expression::Id::UnaryId; } +BinaryenExpressionId BinaryenBinaryId(void) { return Expression::Id::BinaryId; } +BinaryenExpressionId BinaryenSelectId(void) { return Expression::Id::SelectId; } +BinaryenExpressionId BinaryenDropId(void) { return Expression::Id::DropId; } +BinaryenExpressionId BinaryenReturnId(void) { return Expression::Id::ReturnId; } +BinaryenExpressionId BinaryenHostId(void) { return Expression::Id::HostId; } +BinaryenExpressionId BinaryenNopId(void) { return Expression::Id::NopId; } +BinaryenExpressionId BinaryenUnreachableId(void) { return Expression::Id::UnreachableId; } +BinaryenExpressionId BinaryenAtomicCmpxchgId(void) { return Expression::Id::AtomicCmpxchgId; } +BinaryenExpressionId BinaryenAtomicRMWId(void) { return Expression::Id::AtomicRMWId; } +BinaryenExpressionId BinaryenAtomicWaitId(void) { return Expression::Id::AtomicWaitId; } +BinaryenExpressionId BinaryenAtomicWakeId(void) { return Expression::Id::AtomicWakeId; } + // Modules BinaryenModuleRef BinaryenModuleCreate(void) { @@ -742,6 +773,22 @@ BinaryenExpressionRef BinaryenAtomicWake(BinaryenModuleRef module, BinaryenExpre return static_cast<Expression*>(ret); } +// Expression utility + +BinaryenExpressionId BinaryenExpressionGetId(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenExpressionGetId(expressions[" << expressions[expr] << "]);\n"; + } + + return ((Expression*)expr)->_id; +} +BinaryenType BinaryenExpressionGetType(BinaryenExpressionRef expr) { + if (tracing) { + std::cout << " BinaryenExpressionGetType(expressions[" << expressions[expr] << "]);\n"; + } + + return ((Expression*)expr)->type; +} void BinaryenExpressionPrint(BinaryenExpressionRef expr) { if (tracing) { std::cout << " BinaryenExpressionPrint(expressions[" << expressions[expr] << "]);\n"; diff --git a/src/binaryen-c.h b/src/binaryen-c.h index d95d013ed..c136b5f70 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -76,6 +76,39 @@ BinaryenType BinaryenFloat64(void); // the API figure out the type instead of providing one. BinaryenType BinaryenUndefined(void); +// Expression ids (call to get the value of each; you can cache them) + +typedef uint32_t BinaryenExpressionId; + +BinaryenExpressionId BinaryenInvalidId(void); +BinaryenExpressionId BinaryenBlockId(void); +BinaryenExpressionId BinaryenIfId(void); +BinaryenExpressionId BinaryenLoopId(void); +BinaryenExpressionId BinaryenBreakId(void); +BinaryenExpressionId BinaryenSwitchId(void); +BinaryenExpressionId BinaryenCallId(void); +BinaryenExpressionId BinaryenCallImportId(void); +BinaryenExpressionId BinaryenCallIndirectId(void); +BinaryenExpressionId BinaryenGetLocalId(void); +BinaryenExpressionId BinaryenSetLocalId(void); +BinaryenExpressionId BinaryenGetGlobalId(void); +BinaryenExpressionId BinaryenSetGlobalId(void); +BinaryenExpressionId BinaryenLoadId(void); +BinaryenExpressionId BinaryenStoreId(void); +BinaryenExpressionId BinaryenConstId(void); +BinaryenExpressionId BinaryenUnaryId(void); +BinaryenExpressionId BinaryenBinaryId(void); +BinaryenExpressionId BinaryenSelectId(void); +BinaryenExpressionId BinaryenDropId(void); +BinaryenExpressionId BinaryenReturnId(void); +BinaryenExpressionId BinaryenHostId(void); +BinaryenExpressionId BinaryenNopId(void); +BinaryenExpressionId BinaryenUnreachableId(void); +BinaryenExpressionId BinaryenAtomicCmpxchgId(void); +BinaryenExpressionId BinaryenAtomicRMWId(void); +BinaryenExpressionId BinaryenAtomicWaitId(void); +BinaryenExpressionId BinaryenAtomicWakeId(void); + // Modules // // Modules contain lists of functions, imports, exports, function types. The @@ -332,6 +365,10 @@ BinaryenExpressionRef BinaryenAtomicCmpxchg(BinaryenModuleRef module, BinaryenIn BinaryenExpressionRef BinaryenAtomicWait(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef expected, BinaryenExpressionRef timeout, BinaryenType type); BinaryenExpressionRef BinaryenAtomicWake(BinaryenModuleRef module, BinaryenExpressionRef ptr, BinaryenExpressionRef wakeCount); +// Gets the id (kind) of the specified expression. +BinaryenExpressionId BinaryenExpressionGetId(BinaryenExpressionRef expr); +// Gets the type of the specified expression. +BinaryenType BinaryenExpressionGetType(BinaryenExpressionRef expr); // Print an expression to stdout. Useful for debugging. void BinaryenExpressionPrint(BinaryenExpressionRef expr); diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index d4e2cbf80..e5ee24f4d 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -29,6 +29,35 @@ Module['f64'] = Module['_BinaryenFloat64'](); Module['undefined'] = Module['_BinaryenUndefined'](); + Module['InvalidId'] = Module['_BinaryenInvalidId'](); + Module['BlockId'] = Module['_BinaryenBlockId'](); + Module['IfId'] = Module['_BinaryenIfId'](); + Module['LoopId'] = Module['_BinaryenLoopId'](); + Module['BreakId'] = Module['_BinaryenBreakId'](); + Module['SwitchId'] = Module['_BinaryenSwitchId'](); + Module['CallId'] = Module['_BinaryenCallId'](); + Module['CallImportId'] = Module['_BinaryenCallImportId'](); + Module['CallIndirectId'] = Module['_BinaryenCallIndirectId'](); + Module['GetLocalId'] = Module['_BinaryenGetLocalId'](); + Module['SetLocalId'] = Module['_BinaryenSetLocalId'](); + Module['GetGlobalId'] = Module['_BinaryenGetGlobalId'](); + Module['SetGlobalId'] = Module['_BinaryenSetGlobalId'](); + Module['LoadId'] = Module['_BinaryenLoadId'](); + Module['StoreId'] = Module['_BinaryenStoreId'](); + Module['ConstId'] = Module['_BinaryenConstId'](); + Module['UnaryId'] = Module['_BinaryenUnaryId'](); + Module['BinaryId'] = Module['_BinaryenBinaryId'](); + Module['SelectId'] = Module['_BinaryenSelectId'](); + Module['DropId'] = Module['_BinaryenDropId'](); + Module['ReturnId'] = Module['_BinaryenReturnId'](); + Module['HostId'] = Module['_BinaryenHostId'](); + Module['NopId'] = Module['_BinaryenNopId'](); + Module['UnreachableId'] = Module['_BinaryenUnreachableId'](); + Module['AtomicCmpxchgId'] = Module['_BinaryenAtomicCmpxchgId'](); + Module['AtomicRMWId'] = Module['_BinaryenAtomicRMWId'](); + Module['AtomicWaitId'] = Module['_BinaryenAtomicWaitId'](); + Module['AtomicWakeId'] = Module['_BinaryenAtomicWakeId'](); + Module['ClzInt32'] = Module['_BinaryenClzInt32'](); Module['CtzInt32'] = Module['_BinaryenCtzInt32'](); Module['PopcntInt32'] = Module['_BinaryenPopcntInt32'](); @@ -894,6 +923,14 @@ }; }; + Module['getExpressionId'] = function(expr) { + return Module['_BinaryenExpressionGetId'](expr); + }; + + Module['getExpressionType'] = function(expr) { + return Module['_BinaryenExpressionGetType'](expr); + }; + // emit text of an expression or a module Module['emitText'] = function(expr) { if (typeof expr === 'object') { |