106 lines
2.2 KiB
JavaScript
106 lines
2.2 KiB
JavaScript
/**
|
|
* Copyright 2017 Shape Security, Inc.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License")
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
const { whitespaceArray, whitespaceBool, idStartLargeRegex, idStartBool, idContinueLargeRegex, idContinueBool } = require('./unicode');
|
|
|
|
|
|
const strictReservedWords = [
|
|
'null',
|
|
'true',
|
|
'false',
|
|
|
|
'implements',
|
|
'interface',
|
|
'package',
|
|
'private',
|
|
'protected',
|
|
'public',
|
|
'static',
|
|
'let',
|
|
|
|
'if',
|
|
'in',
|
|
'do',
|
|
'var',
|
|
'for',
|
|
'new',
|
|
'try',
|
|
'this',
|
|
'else',
|
|
'case',
|
|
'void',
|
|
'with',
|
|
'enum',
|
|
'while',
|
|
'break',
|
|
'catch',
|
|
'throw',
|
|
'const',
|
|
'yield',
|
|
'class',
|
|
'super',
|
|
'return',
|
|
'typeof',
|
|
'delete',
|
|
'switch',
|
|
'export',
|
|
'import',
|
|
'default',
|
|
'finally',
|
|
'extends',
|
|
'function',
|
|
'continue',
|
|
'debugger',
|
|
'instanceof',
|
|
];
|
|
|
|
exports.isStrictModeReservedWord = id => {
|
|
return strictReservedWords.indexOf(id) !== -1;
|
|
};
|
|
|
|
exports.isWhiteSpace = ch => {
|
|
return ch < 128 ? whitespaceBool[ch] : ch === 0xA0 || ch > 0x167F && whitespaceArray.indexOf(ch) !== -1;
|
|
};
|
|
|
|
exports.isLineTerminator = ch => {
|
|
return ch === 0x0A || ch === 0x0D || ch === 0x2028 || ch === 0x2029;
|
|
};
|
|
|
|
exports.isIdentifierStart = ch => {
|
|
return ch < 128 ? idStartBool[ch] : idStartLargeRegex.test(String.fromCodePoint(ch));
|
|
};
|
|
|
|
exports.isIdentifierPart = ch => {
|
|
return ch < 128 ? idContinueBool[ch] : idContinueLargeRegex.test(String.fromCodePoint(ch));
|
|
};
|
|
|
|
exports.isDecimalDigit = ch => {
|
|
return ch >= 48 && ch <= 57;
|
|
};
|
|
|
|
exports.getHexValue = rune => {
|
|
if (rune >= '0' && rune <= '9') {
|
|
return rune.charCodeAt(0) - 48;
|
|
}
|
|
if (rune >= 'a' && rune <= 'f') {
|
|
return rune.charCodeAt(0) - 87;
|
|
}
|
|
if (rune >= 'A' && rune <= 'F') {
|
|
return rune.charCodeAt(0) - 55;
|
|
}
|
|
return -1;
|
|
};
|