diff --git a/packages/analysis/src/static/Parser.ts b/packages/analysis/src/static/Parser.ts index 5cc570d3..0387ad7c 100644 --- a/packages/analysis/src/static/Parser.ts +++ b/packages/analysis/src/static/Parser.ts @@ -30,6 +30,7 @@ import Lexer from './Lexer'; import Coder from './Coder'; const DEFAULT_IDENTIFIER = 'default'; +const EXPORTED_PREFIX = '$_EXPORT'; export default class Parser { @@ -384,7 +385,7 @@ export default class Parser { // Default exports of values need to move to their own declaration - const identifier = `$_EXPORT_${token.start}_${token.end}`; + const identifier = `${EXPORTED_PREFIX}_${token.start}_${token.end}`; tokenList.insert( new Token(TokenType.KEYWORD, Keyword.CONST, 0, 0), @@ -405,6 +406,25 @@ export default class Parser { token = tokenList.step(); // Read away the declaration keyword stepSize++; + + if (token.hasValue(Indicator.GENERATOR)) + { + token = tokenList.step(); // Read away the generator indicator + stepSize++; + } + } + + if (token.hasValue(Keyword.EXTENDS) + || token.hasValue(Group.OPEN) + || token.hasValue(Scope.OPEN)) + { + // Anonymous functions and class need an identifier + + const identifier = `${EXPORTED_PREFIX}_${token.start}_${token.end}`; + + tokenList.insert(new Token(TokenType.IDENTIFIER, identifier, 0, 0)); + + token = tokenList.current; } const identifier = this.#isIdentifier(token) ? token.value : ''; diff --git a/packages/analysis/src/static/definitions/Keyword.ts b/packages/analysis/src/static/definitions/Keyword.ts index d1109942..dc85b833 100644 --- a/packages/analysis/src/static/definitions/Keyword.ts +++ b/packages/analysis/src/static/definitions/Keyword.ts @@ -50,7 +50,11 @@ const Keyword = THROW: 'throw', TRY: 'try', CATCH: 'catch', - FINALLY: 'finally' + FINALLY: 'finally', + + // TYPE CHECKING + TYPEOF: 'typeof', + INSTANCEOF: 'instanceof' }; const Keywords = Object.values(Keyword); diff --git a/packages/analysis/test/static/Parser.spec.ts b/packages/analysis/test/static/Parser.spec.ts index b7021d62..561c69e8 100644 --- a/packages/analysis/test/static/Parser.spec.ts +++ b/packages/analysis/test/static/Parser.spec.ts @@ -350,7 +350,7 @@ describe('Parser', () => expect(exported.from).toBeUndefined(); const member = exported.members[0]; - expect(member.identifier).toEqual(''); + expect(member.identifier).toEqual('$_EXPORT_23_23'); expect(member.alias).toEqual('default'); const declaration = module.statements[1] as ESFunction; @@ -368,7 +368,7 @@ describe('Parser', () => expect(exported.from).toBeUndefined(); const member = exported.members[0]; - expect(member.identifier).toEqual(''); + expect(member.identifier).toEqual('$_EXPORT_21_21'); expect(member.alias).toEqual('default'); const declaration = module.statements[1] as ESClass;