diff options
author | dcode <dcode@dcode.io> | 2022-08-31 19:53:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-31 10:53:56 -0700 |
commit | 0821cd10da9ca81371688e132ed17164f23ea889 (patch) | |
tree | 76c0ee016b9ed3c8ed1320c7980ed93ca80b14d8 /src | |
parent | c74d5eb62e13e11da4352693a76eec405fccd565 (diff) | |
download | binaryen-0821cd10da9ca81371688e132ed17164f23ea889.tar.gz binaryen-0821cd10da9ca81371688e132ed17164f23ea889.tar.bz2 binaryen-0821cd10da9ca81371688e132ed17164f23ea889.zip |
Add remaining GC and string instructions to C API (#4998)
Adds C-API bindings for the following expression classes:
RefTest
RefCast
BrOn with operations BrOnNull, BrOnNonNull, BrOnCast, BrOnCastFail, BrOnFunc, BrOnNonFunc, BrOnData, BrOnNonData, BrOnI31, BrOnNonI31
StructNew with operations StringNewUTF8, StringNewWTF8, StringNewReplace, StringNewWTF16, StringNewUTF8Array, StringNewWTF8Array, StringNewReplaceArray, StringNewWTF16Array
StructGet
StructSet
ArrayNew
ArrayInit
ArrayGet
ArraySet
ArrayLen
ArrayCopy
StringNew
StringConst
StringMeasure with operations StringMeasureUTF8, StringMeasureWTF8, StringMeasureWTF16, StringMeasureIsUSV, StringMeasureWTF16View
StringEncode with operations StringEncodeUTF8, StringEncodeWTF8, StringEncodeWTF16, StringEncodeUTF8Array, StringEncodeWTF8Array, StringEncodeWTF16Array
StringConcat
StringEq
StringAs with operations StringAsWTF8, StringAsWTF16, StringAsIter
StringWTF8Advance
StringWTF16Get
StringIterNext
StringIterMove with operations StringIterMoveAdvance, StringIterMoveRewind
StringSliceWTF with operations StringSliceWTF8, StringSliceWTF16
StringSliceIter
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 272 | ||||
-rw-r--r-- | src/binaryen-c.h | 157 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 67 |
3 files changed, 471 insertions, 25 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index c6dd1c58b..c96411ae0 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -896,10 +896,52 @@ BinaryenOp BinaryenRefIsNull(void) { return RefIsNull; } BinaryenOp BinaryenRefIsFunc(void) { return RefIsFunc; } BinaryenOp BinaryenRefIsData(void) { return RefIsData; } BinaryenOp BinaryenRefIsI31(void) { return RefIsI31; } -BinaryenOp BinaryenRefAsNonNull(void) { return RefAsNonNull; }; +BinaryenOp BinaryenRefAsNonNull(void) { return RefAsNonNull; } BinaryenOp BinaryenRefAsFunc(void) { return RefAsFunc; } -BinaryenOp BinaryenRefAsData(void) { return RefAsData; }; -BinaryenOp BinaryenRefAsI31(void) { return RefAsI31; }; +BinaryenOp BinaryenRefAsData(void) { return RefAsData; } +BinaryenOp BinaryenRefAsI31(void) { return RefAsI31; } +BinaryenOp BinaryenRefAsExternInternalize(void) { return ExternInternalize; } +BinaryenOp BinaryenRefAsExternExternalize(void) { return ExternExternalize; } +BinaryenOp BinaryenBrOnNull(void) { return BrOnNull; } +BinaryenOp BinaryenBrOnNonNull(void) { return BrOnNonNull; } +BinaryenOp BinaryenBrOnCast(void) { return BrOnCast; } +BinaryenOp BinaryenBrOnCastFail(void) { return BrOnCastFail; }; +BinaryenOp BinaryenBrOnFunc(void) { return BrOnFunc; } +BinaryenOp BinaryenBrOnNonFunc(void) { return BrOnNonFunc; } +BinaryenOp BinaryenBrOnData(void) { return BrOnData; } +BinaryenOp BinaryenBrOnNonData(void) { return BrOnNonData; } +BinaryenOp BinaryenBrOnI31(void) { return BrOnI31; } +BinaryenOp BinaryenBrOnNonI31(void) { return BrOnNonI31; } +BinaryenOp BinaryenStringNewUTF8(void) { return StringNewUTF8; } +BinaryenOp BinaryenStringNewWTF8(void) { return StringNewWTF8; } +BinaryenOp BinaryenStringNewReplace(void) { return StringNewReplace; } +BinaryenOp BinaryenStringNewWTF16(void) { return StringNewWTF16; } +BinaryenOp BinaryenStringNewUTF8Array(void) { return StringNewUTF8Array; } +BinaryenOp BinaryenStringNewWTF8Array(void) { return StringNewWTF8Array; } +BinaryenOp BinaryenStringNewReplaceArray(void) { return StringNewReplaceArray; } +BinaryenOp BinaryenStringNewWTF16Array(void) { return StringNewWTF16Array; } +BinaryenOp BinaryenStringMeasureUTF8(void) { return StringMeasureUTF8; } +BinaryenOp BinaryenStringMeasureWTF8(void) { return StringMeasureWTF8; } +BinaryenOp BinaryenStringMeasureWTF16(void) { return StringMeasureWTF16; } +BinaryenOp BinaryenStringMeasureIsUSV(void) { return StringMeasureIsUSV; } +BinaryenOp BinaryenStringMeasureWTF16View(void) { + return StringMeasureWTF16View; +} +BinaryenOp BinaryenStringEncodeUTF8(void) { return StringEncodeUTF8; } +BinaryenOp BinaryenStringEncodeWTF8(void) { return StringEncodeWTF8; } +BinaryenOp BinaryenStringEncodeWTF16(void) { return StringEncodeWTF16; } +BinaryenOp BinaryenStringEncodeUTF8Array(void) { return StringEncodeUTF8Array; } +BinaryenOp BinaryenStringEncodeWTF8Array(void) { return StringEncodeWTF8Array; } +BinaryenOp BinaryenStringEncodeWTF16Array(void) { + return StringEncodeWTF16Array; +} +BinaryenOp BinaryenStringAsWTF8(void) { return StringAsWTF8; } +BinaryenOp BinaryenStringAsWTF16(void) { return StringAsWTF16; } +BinaryenOp BinaryenStringAsIter(void) { return StringAsIter; } +BinaryenOp BinaryenStringIterMoveAdvance(void) { return StringIterMoveAdvance; } +BinaryenOp BinaryenStringIterMoveRewind(void) { return StringIterMoveRewind; } +BinaryenOp BinaryenStringSliceWTF8(void) { return StringSliceWTF8; } +BinaryenOp BinaryenStringSliceWTF16(void) { return StringSliceWTF16; } BinaryenExpressionRef BinaryenBlock(BinaryenModuleRef module, const char* name, @@ -1567,17 +1609,219 @@ BinaryenExpressionRef BinaryenI31Get(BinaryenModuleRef module, return static_cast<Expression*>( Builder(*(Module*)module).makeI31Get((Expression*)i31, signed_ != 0)); } - -// TODO (gc): ref.test -// TODO (gc): ref.cast -// TODO (gc): br_on_cast -// TODO (gc): struct.new -// TODO (gc): struct.get -// TODO (gc): struct.set -// TODO (gc): array.new -// TODO (gc): array.get -// TODO (gc): array.set -// TODO (gc): array.len +BinaryenExpressionRef BinaryenRefTest(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenHeapType intendedType) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeRefTest((Expression*)ref, HeapType(intendedType))); +} +BinaryenExpressionRef BinaryenRefCast(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenHeapType intendedType) { + return static_cast<Expression*>(Builder(*(Module*)module) + .makeRefCast((Expression*)ref, + HeapType(intendedType), + RefCast::Safety::Safe)); +} +BinaryenExpressionRef BinaryenBrOn(BinaryenModuleRef module, + BinaryenOp op, + const char* name, + BinaryenExpressionRef ref, + BinaryenHeapType intendedType) { + Builder builder(*(Module*)module); + return static_cast<Expression*>( + intendedType ? builder.makeBrOn( + BrOnOp(op), name, (Expression*)ref, HeapType(intendedType)) + : builder.makeBrOn(BrOnOp(op), name, (Expression*)ref)); +} +BinaryenExpressionRef BinaryenStructNew(BinaryenModuleRef module, + BinaryenExpressionRef* operands, + BinaryenIndex numOperands, + BinaryenHeapType type) { + std::vector<Expression*> args; + for (BinaryenIndex i = 0; i < numOperands; i++) { + args.push_back((Expression*)operands[i]); + } + return static_cast<Expression*>( + Builder(*(Module*)module).makeStructNew(HeapType(type), args)); +} +BinaryenExpressionRef BinaryenStructGet(BinaryenModuleRef module, + BinaryenIndex index, + BinaryenExpressionRef ref, + BinaryenType type, + bool signed_) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeStructGet(index, (Expression*)ref, Type(type), signed_)); +} +BinaryenExpressionRef BinaryenStructSet(BinaryenModuleRef module, + BinaryenIndex index, + BinaryenExpressionRef ref, + BinaryenExpressionRef value) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeStructSet(index, (Expression*)ref, (Expression*)value)); +} +BinaryenExpressionRef BinaryenArrayNew(BinaryenModuleRef module, + BinaryenHeapType type, + BinaryenExpressionRef size, + BinaryenExpressionRef init) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeArrayNew(HeapType(type), (Expression*)size, (Expression*)init)); +} +BinaryenExpressionRef BinaryenArrayInit(BinaryenModuleRef module, + BinaryenHeapType type, + BinaryenExpressionRef* values, + BinaryenIndex numValues) { + std::vector<Expression*> vals; + for (BinaryenIndex i = 0; i < numValues; i++) { + vals.push_back((Expression*)values[i]); + } + return static_cast<Expression*>( + Builder(*(Module*)module).makeArrayInit(HeapType(type), vals)); +} +BinaryenExpressionRef BinaryenArrayGet(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef index, + bool signed_) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeArrayGet((Expression*)ref, (Expression*)index, signed_)); +} +BinaryenExpressionRef BinaryenArraySet(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef index, + BinaryenExpressionRef value) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeArraySet((Expression*)ref, (Expression*)index, (Expression*)value)); +} +BinaryenExpressionRef BinaryenArrayLen(BinaryenModuleRef module, + BinaryenExpressionRef ref) { + return static_cast<Expression*>( + Builder(*(Module*)module).makeArrayLen((Expression*)ref)); +} +BinaryenExpressionRef BinaryenArrayCopy(BinaryenModuleRef module, + BinaryenExpressionRef destRef, + BinaryenExpressionRef destIndex, + BinaryenExpressionRef srcRef, + BinaryenExpressionRef srcIndex, + BinaryenExpressionRef length) { + return static_cast<Expression*>(Builder(*(Module*)module) + .makeArrayCopy((Expression*)destRef, + (Expression*)destIndex, + (Expression*)srcRef, + (Expression*)srcIndex, + (Expression*)length)); +} +BinaryenExpressionRef BinaryenStringNew(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ptr, + BinaryenExpressionRef length, + BinaryenExpressionRef start, + BinaryenExpressionRef end) { + Builder builder(*(Module*)module); + return static_cast<Expression*>( + length ? builder.makeStringNew( + StringNewOp(op), (Expression*)ptr, (Expression*)length) + : builder.makeStringNew(StringNewOp(op), + (Expression*)ptr, + (Expression*)start, + (Expression*)end)); +} +BinaryenExpressionRef BinaryenStringConst(BinaryenModuleRef module, + const char* name) { + return static_cast<Expression*>( + Builder(*(Module*)module).makeStringConst(name)); +} +BinaryenExpressionRef BinaryenStringMeasure(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ref) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeStringMeasure(StringMeasureOp(op), (Expression*)ref)); +} +BinaryenExpressionRef BinaryenStringEncode(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ref, + BinaryenExpressionRef ptr, + BinaryenExpressionRef start) { + return static_cast<Expression*>(Builder(*(Module*)module) + .makeStringEncode(StringEncodeOp(op), + (Expression*)ref, + (Expression*)ptr, + (Expression*)start)); +} +BinaryenExpressionRef BinaryenStringConcat(BinaryenModuleRef module, + BinaryenExpressionRef left, + BinaryenExpressionRef right) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeStringConcat((Expression*)left, (Expression*)right)); +} +BinaryenExpressionRef BinaryenStringEq(BinaryenModuleRef module, + BinaryenExpressionRef left, + BinaryenExpressionRef right) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeStringEq((Expression*)left, (Expression*)right)); +} +BinaryenExpressionRef BinaryenStringAs(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ref) { + return static_cast<Expression*>( + Builder(*(Module*)module).makeStringAs(StringAsOp(op), (Expression*)ref)); +} +BinaryenExpressionRef BinaryenStringWTF8Advance(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef pos, + BinaryenExpressionRef bytes) { + return static_cast<Expression*>(Builder(*(Module*)module) + .makeStringWTF8Advance((Expression*)ref, + (Expression*)pos, + (Expression*)bytes)); +} +BinaryenExpressionRef BinaryenStringWTF16Get(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef pos) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeStringWTF16Get((Expression*)ref, (Expression*)pos)); +} +BinaryenExpressionRef BinaryenStringIterNext(BinaryenModuleRef module, + BinaryenExpressionRef ref) { + return static_cast<Expression*>( + Builder(*(Module*)module).makeStringIterNext((Expression*)ref)); +} +BinaryenExpressionRef BinaryenStringIterMove(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ref, + BinaryenExpressionRef num) { + return static_cast<Expression*>(Builder(*(Module*)module) + .makeStringIterMove(StringIterMoveOp(op), + (Expression*)ref, + (Expression*)num)); +} +BinaryenExpressionRef BinaryenStringSliceWTF(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ref, + BinaryenExpressionRef start, + BinaryenExpressionRef end) { + return static_cast<Expression*>(Builder(*(Module*)module) + .makeStringSliceWTF(StringSliceWTFOp(op), + (Expression*)ref, + (Expression*)start, + (Expression*)end)); +} +BinaryenExpressionRef BinaryenStringSliceIter(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef num) { + return static_cast<Expression*>( + Builder(*(Module*)module) + .makeStringSliceIter((Expression*)ref, (Expression*)num)); +} // Expression utility diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 32ffea453..f3e305d03 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -644,6 +644,44 @@ BINARYEN_API BinaryenOp BinaryenRefAsNonNull(void); BINARYEN_API BinaryenOp BinaryenRefAsFunc(void); BINARYEN_API BinaryenOp BinaryenRefAsData(void); BINARYEN_API BinaryenOp BinaryenRefAsI31(void); +BINARYEN_API BinaryenOp BinaryenRefAsExternInternalize(void); +BINARYEN_API BinaryenOp BinaryenRefAsExternExternalize(void); +BINARYEN_API BinaryenOp BinaryenBrOnNull(void); +BINARYEN_API BinaryenOp BinaryenBrOnNonNull(void); +BINARYEN_API BinaryenOp BinaryenBrOnCast(void); +BINARYEN_API BinaryenOp BinaryenBrOnCastFail(void); +BINARYEN_API BinaryenOp BinaryenBrOnFunc(void); +BINARYEN_API BinaryenOp BinaryenBrOnNonFunc(void); +BINARYEN_API BinaryenOp BinaryenBrOnData(void); +BINARYEN_API BinaryenOp BinaryenBrOnNonData(void); +BINARYEN_API BinaryenOp BinaryenBrOnI31(void); +BINARYEN_API BinaryenOp BinaryenBrOnNonI31(void); +BINARYEN_API BinaryenOp BinaryenStringNewUTF8(void); +BINARYEN_API BinaryenOp BinaryenStringNewWTF8(void); +BINARYEN_API BinaryenOp BinaryenStringNewReplace(void); +BINARYEN_API BinaryenOp BinaryenStringNewWTF16(void); +BINARYEN_API BinaryenOp BinaryenStringNewUTF8Array(void); +BINARYEN_API BinaryenOp BinaryenStringNewWTF8Array(void); +BINARYEN_API BinaryenOp BinaryenStringNewReplaceArray(void); +BINARYEN_API BinaryenOp BinaryenStringNewWTF16Array(void); +BINARYEN_API BinaryenOp BinaryenStringMeasureUTF8(void); +BINARYEN_API BinaryenOp BinaryenStringMeasureWTF8(void); +BINARYEN_API BinaryenOp BinaryenStringMeasureWTF16(void); +BINARYEN_API BinaryenOp BinaryenStringMeasureIsUSV(void); +BINARYEN_API BinaryenOp BinaryenStringMeasureWTF16View(void); +BINARYEN_API BinaryenOp BinaryenStringEncodeUTF8(void); +BINARYEN_API BinaryenOp BinaryenStringEncodeWTF8(void); +BINARYEN_API BinaryenOp BinaryenStringEncodeWTF16(void); +BINARYEN_API BinaryenOp BinaryenStringEncodeUTF8Array(void); +BINARYEN_API BinaryenOp BinaryenStringEncodeWTF8Array(void); +BINARYEN_API BinaryenOp BinaryenStringEncodeWTF16Array(void); +BINARYEN_API BinaryenOp BinaryenStringAsWTF8(void); +BINARYEN_API BinaryenOp BinaryenStringAsWTF16(void); +BINARYEN_API BinaryenOp BinaryenStringAsIter(void); +BINARYEN_API BinaryenOp BinaryenStringIterMoveAdvance(void); +BINARYEN_API BinaryenOp BinaryenStringIterMoveRewind(void); +BINARYEN_API BinaryenOp BinaryenStringSliceWTF8(void); +BINARYEN_API BinaryenOp BinaryenStringSliceWTF16(void); BINARYEN_REF(Expression); @@ -959,16 +997,115 @@ BINARYEN_API BinaryenExpressionRef BinaryenI31New(BinaryenModuleRef module, BINARYEN_API BinaryenExpressionRef BinaryenI31Get(BinaryenModuleRef module, BinaryenExpressionRef i31, bool signed_); -// TODO (gc): ref.test -// TODO (gc): ref.cast -// TODO (gc): br_on_cast -// TODO (gc): struct.new -// TODO (gc): struct.get -// TODO (gc): struct.set -// TODO (gc): array.new -// TODO (gc): array.get -// TODO (gc): array.set -// TODO (gc): array.len +BINARYEN_API BinaryenExpressionRef +BinaryenRefTest(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenHeapType intendedType); +BINARYEN_API BinaryenExpressionRef +BinaryenRefCast(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenHeapType intendedType); +BINARYEN_API BinaryenExpressionRef BinaryenBrOn(BinaryenModuleRef module, + BinaryenOp op, + const char* name, + BinaryenExpressionRef ref, + BinaryenHeapType intendedType); +BINARYEN_API BinaryenExpressionRef +BinaryenStructNew(BinaryenModuleRef module, + BinaryenExpressionRef* operands, + BinaryenIndex numOperands, + BinaryenHeapType type); +BINARYEN_API BinaryenExpressionRef BinaryenStructGet(BinaryenModuleRef module, + BinaryenIndex index, + BinaryenExpressionRef ref, + BinaryenType type, + bool signed_); +BINARYEN_API BinaryenExpressionRef +BinaryenStructSet(BinaryenModuleRef module, + BinaryenIndex index, + BinaryenExpressionRef ref, + BinaryenExpressionRef value); +BINARYEN_API BinaryenExpressionRef BinaryenArrayNew(BinaryenModuleRef module, + BinaryenHeapType type, + BinaryenExpressionRef size, + BinaryenExpressionRef init); +BINARYEN_API BinaryenExpressionRef +BinaryenArrayInit(BinaryenModuleRef module, + BinaryenHeapType type, + BinaryenExpressionRef* values, + BinaryenIndex numValues); +BINARYEN_API BinaryenExpressionRef BinaryenArrayGet(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef index, + bool signed_); +BINARYEN_API BinaryenExpressionRef +BinaryenArraySet(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef index, + BinaryenExpressionRef value); +BINARYEN_API BinaryenExpressionRef BinaryenArrayLen(BinaryenModuleRef module, + BinaryenExpressionRef ref); +BINARYEN_API BinaryenExpressionRef +BinaryenArrayCopy(BinaryenModuleRef module, + BinaryenExpressionRef destRef, + BinaryenExpressionRef destIndex, + BinaryenExpressionRef srcRef, + BinaryenExpressionRef srcIndex, + BinaryenExpressionRef length); +BINARYEN_API BinaryenExpressionRef +BinaryenStringNew(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ptr, + BinaryenExpressionRef length, + BinaryenExpressionRef start, + BinaryenExpressionRef end); +BINARYEN_API BinaryenExpressionRef BinaryenStringConst(BinaryenModuleRef module, + const char* name); +BINARYEN_API BinaryenExpressionRef BinaryenStringMeasure( + BinaryenModuleRef module, BinaryenOp op, BinaryenExpressionRef ref); +BINARYEN_API BinaryenExpressionRef +BinaryenStringEncode(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ref, + BinaryenExpressionRef ptr, + BinaryenExpressionRef start); +BINARYEN_API BinaryenExpressionRef +BinaryenStringConcat(BinaryenModuleRef module, + BinaryenExpressionRef left, + BinaryenExpressionRef right); +BINARYEN_API BinaryenExpressionRef +BinaryenStringEq(BinaryenModuleRef module, + BinaryenExpressionRef left, + BinaryenExpressionRef right); +BINARYEN_API BinaryenExpressionRef BinaryenStringAs(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ref); +BINARYEN_API BinaryenExpressionRef +BinaryenStringWTF8Advance(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef pos, + BinaryenExpressionRef bytes); +BINARYEN_API BinaryenExpressionRef +BinaryenStringWTF16Get(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef pos); +BINARYEN_API BinaryenExpressionRef +BinaryenStringIterNext(BinaryenModuleRef module, BinaryenExpressionRef ref); +BINARYEN_API BinaryenExpressionRef +BinaryenStringIterMove(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ref, + BinaryenExpressionRef num); +BINARYEN_API BinaryenExpressionRef +BinaryenStringSliceWTF(BinaryenModuleRef module, + BinaryenOp op, + BinaryenExpressionRef ref, + BinaryenExpressionRef start, + BinaryenExpressionRef end); +BINARYEN_API BinaryenExpressionRef +BinaryenStringSliceIter(BinaryenModuleRef module, + BinaryenExpressionRef ref, + BinaryenExpressionRef num); // Expression diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index c684553a5..f9e4d0d44 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -118,7 +118,22 @@ function initializeConstants() { 'ArrayInit', 'ArrayGet', 'ArraySet', - 'ArrayLen' + 'ArrayLen', + 'ArrayCopy', + 'RefAs', + 'StringNew', + 'StringConst', + 'StringMeasure', + 'StringEncode', + 'StringConcat', + 'StringEq', + 'StringAs', + 'StringWTF8Advance', + 'StringWTF16Get', + 'StringIterNext', + 'StringIterMove', + 'StringSliceWTF', + 'StringSliceIter' ].forEach(name => { Module['ExpressionIds'][name] = Module[name + 'Id'] = Module['_Binaryen' + name + 'Id'](); }); @@ -542,6 +557,44 @@ function initializeConstants() { 'RefAsFunc', 'RefAsData', 'RefAsI31', + 'RefAsExternInternalize', + 'RefAsExternExternalize', + 'BrOnNull', + 'BrOnNonNull', + 'BrOnCast', + 'BrOnCastFail', + 'BrOnFunc', + 'BrOnNonFunc', + 'BrOnData', + 'BrOnNonData', + 'BrOnI31', + 'BrOnNonI31', + 'StringNewUTF8', + 'StringNewWTF8', + 'StringNewReplace', + 'StringNewWTF16', + 'StringNewUTF8Array', + 'StringNewWTF8Array', + 'StringNewReplaceArray', + 'StringNewWTF16Array', + 'StringMeasureUTF8', + 'StringMeasureWTF8', + 'StringMeasureWTF16', + 'StringMeasureIsUSV', + 'StringMeasureWTF16View', + 'StringEncodeUTF8', + 'StringEncodeWTF8', + 'StringEncodeWTF16', + 'StringEncodeUTF8Array', + 'StringEncodeWTF8Array', + 'StringEncodeWTF16Array', + 'StringAsWTF8', + 'StringAsWTF16', + 'StringAsIter', + 'StringIterMoveAdvance', + 'StringIterMoveRewind', + 'StringSliceWTF8', + 'StringSliceWTF16' ].forEach(name => { Module['Operations'][name] = Module[name] = Module['_Binaryen' + name](); }); @@ -2382,6 +2435,18 @@ function wrapModule(module, self = {}) { } }; + // TODO: extern.internalize + // TODO: extern.externalize + // TODO: ref.test + // TODO: ref.cast + // TODO: br_on_* + // TODO: struct.* + // TODO: array.* + // TODO: string.* + // TODO: stringview_wtf8.* + // TODO: stringview_wtf16.* + // TODO: stringview_iter.* + // 'Module' operations self['addFunction'] = function(name, params, results, varTypes, body) { return preserveStack(() => |