/// If value is not undefined, return it. Otherwise return default_. function maybeDefault(value, default_) { if (value === undefined) {
return default_;
}
return value;
}
/// Coerce value to boolean if not undefined. Otherwise return default_. function booleanOrDefault(value, default_) {
return !!maybeDefault(value, default_);
}
/// Allocate memory in the Module. function malloc(size) { var addr = Module._malloc(size); if (addr == 0) { thrownew Error('out of memory');
}
return addr;
}
/// Convert an ArrayBuffer/TypedArray/string into a buffer that can be /// used by the Module. function allocateBuffer(buf) { var addr; var size; if (buf instanceof ArrayBuffer) {
size = buf.byteLength;
addr = malloc(size);
(new Uint8Array(HEAP8.buffer, addr, size)).set(new Uint8Array(buf))
} elseif (ArrayBuffer.isView(buf)) {
size = buf.buffer.byteLength;
addr = malloc(size);
(new Uint8Array(HEAP8.buffer, addr, size)).set(buf);
} elseif (typeof buf == 'string') {
size = buf.length;
addr = malloc(size);
writeAsciiToMemory(buf, addr, true); // don't null-terminate
} else { thrownew Error('unknown buffer type: ' + buf);
}
return {addr: addr, size: size};
}
function allocateCString(s) { var size = s.length; var addr = malloc(size);
writeAsciiToMemory(s, addr);
return {addr: addr, size: size};
}
/// Features function Features(obj) { this.addr = Module._wabt_new_features(); for (var [f, v] of Object.entries(FEATURES)) { this[f] = booleanOrDefault(obj[f], v);
}
}
Features.prototype = Object.create(Object.prototype);
OutputBuffer.prototype.toTypedArray = function() { if (!this.addr) {
return null;
}
var addr = Module._wabt_output_buffer_get_data(this.addr); var size = Module._wabt_output_buffer_get_size(this.addr); var buffer = new Uint8Array(size);
buffer.set(new Uint8Array(HEAPU8.buffer, addr, size));
return buffer;
};
OutputBuffer.prototype.toString = function() { if (!this.addr) {
return '';
}
var addr = Module._wabt_output_buffer_get_data(this.addr); var size = Module._wabt_output_buffer_get_size(this.addr);
return UTF8ToString(addr, size);
};
/// parseWat function parseWat(filename, buffer, options) { var errors = new Errors('text'); var lexer = new Lexer(filename, buffer, errors);
errors.lexer = lexer; var features = new Features(options || {});
try { var parseResult_addr =
Module._wabt_parse_wat(lexer.addr, features.addr, errors.addr);
var result = Module._wabt_parse_wat_result_get_result(parseResult_addr); if (result !== WABT_OK) { thrownew Error('parseWat failed:\n' + errors.format());
}
var module_addr =
Module._wabt_parse_wat_result_release_module(parseResult_addr); var result = new WasmModule(module_addr, errors); // Clear errors so it isn't destroyed below.
errors = null;
return result;
} finally {
Module._wabt_destroy_parse_wat_result(parseResult_addr);
features.destroy(); if (errors) {
errors.destroy();
}
}
}
// readWasm function readWasm(buffer, options) { var bufferObj = allocateBuffer(buffer); var errors = new Errors('binary'); var readDebugNames = booleanOrDefault(options.readDebugNames, false); var features = new Features(options);
var result =
Module._wabt_read_binary_result_get_result(readBinaryResult_addr); if (result !== WABT_OK) { thrownew Error('readWasm failed:\n' + errors.format());
}
var module_addr =
Module._wabt_read_binary_result_release_module(readBinaryResult_addr); var result = new WasmModule(module_addr, errors); // Clear errors so it isn't destroyed below.
errors = null;
return result;
} finally {
Module._wabt_destroy_read_binary_result(readBinaryResult_addr);
features.destroy(); if (errors) {
errors.destroy();
}
Module._free(bufferObj.addr);
}
}
// WasmModule (can't call it Module because emscripten has claimed it.) function WasmModule(module_addr, errors) { this.module_addr = module_addr; this.errors = errors;
}
WasmModule.prototype = Object.create(Object.prototype);
WasmModule.prototype.validate = function(options) { var features = new Features(options || {}); try { var result = Module._wabt_validate_module( this.module_addr, features.addr, this.errors.addr); if (result !== WABT_OK) { thrownew Error('validate failed:\n' + this.errors.format());
}
} finally {
features.destroy();
}
};
WasmModule.prototype.resolveNames = function() { // No-op, this is now part of text parsing.
};
WasmModule.prototype.generateNames = function() { var result = Module._wabt_generate_names_module(this.module_addr); if (result !== WABT_OK) { thrownew Error('generateNames failed.');
}
};
WasmModule.prototype.applyNames = function() { var result = Module._wabt_apply_names_module(this.module_addr); if (result !== WABT_OK) { thrownew Error('applyNames failed.');
}
};
WasmModule.prototype.toText = function(options) { var foldExprs = booleanOrDefault(options.foldExprs, false); var inlineExport = booleanOrDefault(options.inlineExport, false);
var writeModuleResult_addr =
Module._wabt_write_text_module(this.module_addr, foldExprs, inlineExport);
var result =
Module._wabt_write_module_result_get_result(writeModuleResult_addr);
var binaryOutputBuffer = new OutputBuffer(Module._wabt_write_module_result_release_output_buffer(
writeModuleResult_addr)); var logOutputBuffer = new OutputBuffer(
Module._wabt_write_module_result_release_log_output_buffer(
writeModuleResult_addr));
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.