WIP - add extractor, generate snippet_data
This commit is contained in:
88
node_modules/@webassemblyjs/wast-parser/esm/string-literals.js
generated
vendored
Normal file
88
node_modules/@webassemblyjs/wast-parser/esm/string-literals.js
generated
vendored
Normal file
@ -0,0 +1,88 @@
|
||||
// string literal characters cannot contain control codes
|
||||
var CONTROL_CODES = [0, // null
|
||||
7, // bell
|
||||
8, // backspace
|
||||
9, // horizontal
|
||||
10, // line feed
|
||||
11, // vertical tab
|
||||
12, // form feed
|
||||
13, // carriage return
|
||||
26, // Control-Z
|
||||
27, // escape
|
||||
127 // delete
|
||||
]; // escaped sequences can either be a two character hex value, or one of the
|
||||
// following single character codes
|
||||
|
||||
function decodeControlCharacter(char) {
|
||||
switch (char) {
|
||||
case "t":
|
||||
return 0x09;
|
||||
|
||||
case "n":
|
||||
return 0x0a;
|
||||
|
||||
case "r":
|
||||
return 0x0d;
|
||||
|
||||
case '"':
|
||||
return 0x22;
|
||||
|
||||
case "′":
|
||||
return 0x27;
|
||||
|
||||
case "\\":
|
||||
return 0x5c;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
var ESCAPE_CHAR = 92; // backslash
|
||||
|
||||
var QUOTE_CHAR = 34; // backslash
|
||||
// parse string as per the spec:
|
||||
// https://webassembly.github.io/spec/core/multipage/text/values.html#text-string
|
||||
|
||||
export function parseString(value) {
|
||||
var byteArray = [];
|
||||
var index = 0;
|
||||
|
||||
while (index < value.length) {
|
||||
var charCode = value.charCodeAt(index);
|
||||
|
||||
if (CONTROL_CODES.indexOf(charCode) !== -1) {
|
||||
throw new Error("ASCII control characters are not permitted within string literals");
|
||||
}
|
||||
|
||||
if (charCode === QUOTE_CHAR) {
|
||||
throw new Error("quotes are not permitted within string literals");
|
||||
}
|
||||
|
||||
if (charCode === ESCAPE_CHAR) {
|
||||
var firstChar = value.substr(index + 1, 1);
|
||||
var decodedControlChar = decodeControlCharacter(firstChar);
|
||||
|
||||
if (decodedControlChar !== -1) {
|
||||
// single character escaped values, e.g. \r
|
||||
byteArray.push(decodedControlChar);
|
||||
index += 2;
|
||||
} else {
|
||||
// hex escaped values, e.g. \2a
|
||||
var hexValue = value.substr(index + 1, 2);
|
||||
|
||||
if (!/^[0-9A-F]{2}$/i.test(hexValue)) {
|
||||
throw new Error("invalid character encoding");
|
||||
}
|
||||
|
||||
byteArray.push(parseInt(hexValue, 16));
|
||||
index += 3;
|
||||
}
|
||||
} else {
|
||||
// ASCII encoded values
|
||||
byteArray.push(charCode);
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
return byteArray;
|
||||
}
|
||||
Reference in New Issue
Block a user