Skip to content

Commit

Permalink
Fixed creation of locals from destructed params. (#245)
Browse files Browse the repository at this point in the history
  • Loading branch information
max-leuthaeuser authored Feb 2, 2023
1 parent d930a57 commit a6e87fd
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 5 deletions.
17 changes: 12 additions & 5 deletions src/main/scala/io/shiftleft/js2cpg/astcreation/AstCreator.scala
Original file line number Diff line number Diff line change
Expand Up @@ -227,11 +227,14 @@ class AstCreator(diffGraph: DiffGraphBuilder, source: JsSource, usedIdentNodes:
astEdgeBuilder.addAstEdge(destructingAssignmentId, blockId, blockOrder)
case None =>
paramComponents.foreach { param =>
val paramName = param.getName
val localParamId = createIdentifierNode(paramName, param)
val paramId = createIdentifierNode(name, param)
val keyId = astNodeBuilder.createFieldIdentifierNode(paramName, param)
val accessId = astNodeBuilder.createFieldAccessNode(paramId, keyId, astNodeBuilder.lineAndColumn(param))
val paramName = param.getName
val localParamId = createIdentifierNode(paramName, param)
val paramId = createIdentifierNode(name, param)
val localParamLocal = astNodeBuilder.createLocalNode(paramName, Defines.ANY.label)
addLocalToAst(localParamLocal)
scope.addVariable(paramName, localParamLocal, MethodScope)
val keyId = astNodeBuilder.createFieldIdentifierNode(paramName, param)
val accessId = astNodeBuilder.createFieldAccessNode(paramId, keyId, astNodeBuilder.lineAndColumn(param))
val assignmentCallId =
astNodeBuilder.createAssignmentNode(localParamId, accessId, astNodeBuilder.lineAndColumn(param))
astEdgeBuilder.addAstEdge(assignmentCallId, blockId, blockOrder)
Expand Down Expand Up @@ -276,6 +279,10 @@ class AstCreator(diffGraph: DiffGraphBuilder, source: JsSource, usedIdentNodes:

val localParamId = createIdentifierNode(paramName, parameter)

val localParamLocal = astNodeBuilder.createLocalNode(paramName, Defines.ANY.label)
addLocalToAst(localParamLocal)
scope.addVariable(paramName, localParamLocal, MethodScope)

val paramId = createIdentifierNode(name, parameter)

val keyId = astNodeBuilder.createFieldIdentifierNode(paramName, parameter)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2011,6 +2011,13 @@ class AstCreationPassTest extends AbstractPassTest {
outerLocalXViaRef.head shouldBe outerLocalX.head
}

"have correct closure binding (destructing parameter)" in AstFixture("""
|const WindowOpen = ({ value }) => {
| return () => windowOpenButton(value);
|};""".stripMargin) { cpg =>
cpg.local.name("value").closureBindingId.l shouldBe List("test.js::program:anonymous:anonymous:value")
}

"have correct closure binding (single variable)" in AstFixture("""
| function foo()
| {
Expand Down

0 comments on commit a6e87fd

Please sign in to comment.