From 608de70568318bc45102df8487b29f6cb7e7b58a Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 6 Jun 2022 15:32:39 +0200 Subject: [PATCH] JS: Associate symbols with external module decls --- .../src/com/semmle/js/extractor/ASTExtractor.java | 1 + .../semmle/ts/ast/ExternalModuleDeclaration.java | 13 ++++++++++++- .../semmle/ts/extractor/TypeScriptASTConverter.java | 7 +++++-- javascript/ql/lib/semmlecode.javascript.dbscheme | 2 +- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java index 859977395c0..1f322935b56 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java +++ b/javascript/extractor/src/com/semmle/js/extractor/ASTExtractor.java @@ -2191,6 +2191,7 @@ public class ASTExtractor { visitAll(nd.getBody(), key); contextManager.leaveContainer(); scopeManager.leaveScope(); + emitNodeSymbol(nd, key); return key; } diff --git a/javascript/extractor/src/com/semmle/ts/ast/ExternalModuleDeclaration.java b/javascript/extractor/src/com/semmle/ts/ast/ExternalModuleDeclaration.java index 555e86da2b4..8e4eca9c980 100644 --- a/javascript/extractor/src/com/semmle/ts/ast/ExternalModuleDeclaration.java +++ b/javascript/extractor/src/com/semmle/ts/ast/ExternalModuleDeclaration.java @@ -7,9 +7,10 @@ import com.semmle.js.ast.Visitor; import java.util.List; /** A statement of form declare module "X" {...}. */ -public class ExternalModuleDeclaration extends Statement { +public class ExternalModuleDeclaration extends Statement implements INodeWithSymbol { private final Literal name; private final List body; + private int symbol = -1; public ExternalModuleDeclaration(SourceLocation loc, Literal name, List body) { super("ExternalModuleDeclaration", loc); @@ -29,4 +30,14 @@ public class ExternalModuleDeclaration extends Statement { public List getBody() { return body; } + + @Override + public int getSymbol() { + return this.symbol; + } + + @Override + public void setSymbol(int symbol) { + this.symbol = symbol; + } } diff --git a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java index c3172a76d67..013eb72b7a2 100644 --- a/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java +++ b/javascript/extractor/src/com/semmle/ts/extractor/TypeScriptASTConverter.java @@ -591,7 +591,7 @@ public class TypeScriptASTConverter { return convertTryStatement(node, loc); case "TupleType": return convertTupleType(node, loc); - case "NamedTupleMember": + case "NamedTupleMember": return convertNamedTupleMember(node, loc); case "TypeAliasDeclaration": return convertTypeAliasDeclaration(node, loc); @@ -1710,7 +1710,10 @@ public class TypeScriptASTConverter { } if (nameNode instanceof Literal) { // Declaration of form: declare module "X" {...} - return new ExternalModuleDeclaration(loc, (Literal) nameNode, body); + ExternalModuleDeclaration decl = new ExternalModuleDeclaration(loc, (Literal) nameNode, body); + attachSymbolInformation(decl, node); + System.out.println("ExternalModuleDeclaration symbol = " + decl.getSymbol()); + return decl; } if (hasFlag(node, "GlobalAugmentation")) { // Declaration of form: declare global {...} diff --git a/javascript/ql/lib/semmlecode.javascript.dbscheme b/javascript/ql/lib/semmlecode.javascript.dbscheme index c1ee5346e06..51fb6fd1cd3 100644 --- a/javascript/ql/lib/semmlecode.javascript.dbscheme +++ b/javascript/ql/lib/semmlecode.javascript.dbscheme @@ -713,7 +713,7 @@ case @symbol.kind of ; @type_with_symbol = @type_reference | @typevariable_type | @typeof_type | @unique_symbol_type; -@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference; +@ast_node_with_symbol = @type_definition | @namespace_definition | @toplevel | @typeaccess | @namespace_access | @var_decl | @function | @invokeexpr | @import_declaration | @external_module_reference | @external_module_declaration; ast_node_symbol( unique int node: @ast_node_with_symbol ref,