leb128.js 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.shrinkPaddedLEB128 = shrinkPaddedLEB128;
  6. var _ast = require("@webassemblyjs/ast");
  7. var _encoder = require("@webassemblyjs/wasm-gen/lib/encoder");
  8. var _helperBuffer = require("@webassemblyjs/helper-buffer");
  9. var debug = require("debug")("webassemblyjs:wasm:opt");
  10. function shiftFollowingSections(ast, _ref, deltaInSizeEncoding) {
  11. var section = _ref.section;
  12. // Once we hit our section every that is after needs to be shifted by the delta
  13. var encounteredSection = false;
  14. (0, _ast.traverse)(ast, {
  15. SectionMetadata: function SectionMetadata(path) {
  16. if (path.node.section === section) {
  17. encounteredSection = true;
  18. return;
  19. }
  20. if (encounteredSection === true) {
  21. (0, _ast.shiftSection)(ast, path.node, deltaInSizeEncoding);
  22. debug("shift section section=%s detla=%d", path.node.section, deltaInSizeEncoding);
  23. }
  24. }
  25. });
  26. }
  27. function shrinkPaddedLEB128(ast, uint8Buffer) {
  28. (0, _ast.traverse)(ast, {
  29. SectionMetadata: function SectionMetadata(_ref2) {
  30. var node = _ref2.node;
  31. /**
  32. * Section size
  33. */
  34. {
  35. var newu32Encoded = (0, _encoder.encodeU32)(node.size.value);
  36. var newu32EncodedLen = newu32Encoded.length;
  37. var start = node.size.loc.start.column;
  38. var end = node.size.loc.end.column;
  39. var oldu32EncodedLen = end - start;
  40. if (newu32EncodedLen !== oldu32EncodedLen) {
  41. var deltaInSizeEncoding = oldu32EncodedLen - newu32EncodedLen;
  42. debug("found LEB128 encoding size delta section=%s detla=%s", node.section, deltaInSizeEncoding);
  43. uint8Buffer = (0, _helperBuffer.overrideBytesInBuffer)(uint8Buffer, start, end, newu32Encoded);
  44. shiftFollowingSections(ast, node, -deltaInSizeEncoding);
  45. }
  46. }
  47. }
  48. });
  49. return uint8Buffer;
  50. }