@@ -1473,10 +1473,13 @@ module API {
14731473 /** Gets the `member` edge label for member `m`. */
14741474 bindingset [ m]
14751475 bindingset [ result ]
1476- LabelMember member ( string m ) { result .getProperty ( ) = m }
1476+ LabelContent member ( string m ) { result .getContent ( ) .asPropertyName ( ) = m }
1477+
1478+ /** Gets the `content` edge label for content `c`. */
1479+ LabelContent content ( Content c ) { result .getContent ( ) = c }
14771480
14781481 /** Gets the `member` edge label for the unknown member. */
1479- LabelUnknownMember unknownMember ( ) { any ( ) }
1482+ LabelContent unknownMember ( ) { result . getContent ( ) . isUnknownArrayElement ( ) }
14801483
14811484 /**
14821485 * Gets a property name referred to by the given dynamic property access,
@@ -1533,10 +1536,10 @@ module API {
15331536 LabelForwardingFunction forwardingFunction ( ) { any ( ) }
15341537
15351538 /** Gets the `promised` edge label connecting a promise to its contained value. */
1536- LabelPromised promised ( ) { any ( ) }
1539+ LabelContent promised ( ) { result . getContent ( ) = MkPromiseValue ( ) }
15371540
15381541 /** Gets the `promisedError` edge label connecting a promise to its rejected value. */
1539- LabelPromisedError promisedError ( ) { any ( ) }
1542+ LabelContent promisedError ( ) { result . getContent ( ) = MkPromiseError ( ) }
15401543
15411544 /** Gets the label for an edge leading from a value `D` to any class that has `D` as a decorator. */
15421545 LabelDecoratedClass decoratedClass ( ) { any ( ) }
@@ -1550,6 +1553,7 @@ module API {
15501553 /** Gets an entry-point label for the entry-point `e`. */
15511554 LabelEntryPoint entryPoint ( API:: EntryPoint e ) { result .getEntryPoint ( ) = e }
15521555
1556+ private import semmle.javascript.dataflow.internal.Contents:: Private
15531557 private import LabelImpl
15541558
15551559 private module LabelImpl {
@@ -1559,18 +1563,7 @@ module API {
15591563 exists ( Impl:: MkModuleImport ( mod ) )
15601564 } or
15611565 MkLabelInstance ( ) or
1562- MkLabelMember ( string prop ) {
1563- exports ( _, prop , _) or
1564- exists ( any ( DataFlow:: ClassNode c ) .getInstanceMethod ( prop ) ) or
1565- prop = "exports" or
1566- prop = any ( CanonicalName c ) .getName ( ) or
1567- prop = any ( DataFlow:: PropRef p ) .getPropertyName ( ) or
1568- exists ( Impl:: MkTypeUse ( _, prop ) ) or
1569- exists ( any ( Module m ) .getAnExportedValue ( prop ) ) or
1570- PreCallGraphStep:: loadStep ( _, _, prop ) or
1571- PreCallGraphStep:: storeStep ( _, _, prop )
1572- } or
1573- MkLabelUnknownMember ( ) or
1566+ MkLabelContent ( DataFlow:: Content content ) or
15741567 MkLabelParameter ( int i ) {
15751568 i =
15761569 [ 0 .. max ( int args |
@@ -1581,8 +1574,6 @@ module API {
15811574 } or
15821575 MkLabelReceiver ( ) or
15831576 MkLabelReturn ( ) or
1584- MkLabelPromised ( ) or
1585- MkLabelPromisedError ( ) or
15861577 MkLabelDecoratedClass ( ) or
15871578 MkLabelDecoratedMember ( ) or
15881579 MkLabelDecoratedParameter ( ) or
@@ -1602,13 +1593,13 @@ module API {
16021593 }
16031594
16041595 /** A label that gets a promised value. */
1605- class LabelPromised extends ApiLabel , MkLabelPromised {
1606- override string toString ( ) { result = "getPromised()" }
1596+ deprecated class LabelPromised extends ApiLabel {
1597+ LabelPromised ( ) { this = MkLabelContent ( MkPromiseValue ( ) ) }
16071598 }
16081599
16091600 /** A label that gets a rejected promise. */
1610- class LabelPromisedError extends ApiLabel , MkLabelPromisedError {
1611- override string toString ( ) { result = "getPromisedError()" }
1601+ deprecated class LabelPromisedError extends ApiLabel {
1602+ LabelPromisedError ( ) { this = MkLabelContent ( MkPromiseError ( ) ) }
16121603 }
16131604
16141605 /** A label that gets the return value of a function. */
@@ -1634,23 +1625,36 @@ module API {
16341625 override string toString ( ) { result = "getInstance()" }
16351626 }
16361627
1628+ /** A label for a content. */
1629+ class LabelContent extends ApiLabel , MkLabelContent {
1630+ private DataFlow:: Content content ;
1631+
1632+ LabelContent ( ) { this = MkLabelContent ( content ) }
1633+
1634+ /** Gets the content associated with this label. */
1635+ DataFlow:: Content getContent ( ) { result = content }
1636+
1637+ override string toString ( ) {
1638+ result = "getMember(\"" + content .asPropertyName ( ) + "\")"
1639+ or
1640+ not exists ( content .asPropertyName ( ) ) and
1641+ result = "getContent(" + content + ")"
1642+ }
1643+ }
1644+
16371645 /** A label for the member named `prop`. */
1638- class LabelMember extends ApiLabel , MkLabelMember {
1639- string prop ;
1646+ deprecated class LabelMember extends LabelContent {
1647+ private string prop ;
16401648
1641- LabelMember ( ) { this = MkLabelMember ( prop ) }
1649+ LabelMember ( ) { prop = this . getContent ( ) . asPropertyName ( ) }
16421650
16431651 /** Gets the property associated with this label. */
16441652 string getProperty ( ) { result = prop }
1645-
1646- override string toString ( ) { result = "getMember(\"" + prop + "\")" }
16471653 }
16481654
16491655 /** A label for a member with an unknown name. */
1650- class LabelUnknownMember extends ApiLabel , MkLabelUnknownMember {
1651- LabelUnknownMember ( ) { this = MkLabelUnknownMember ( ) }
1652-
1653- override string toString ( ) { result = "getUnknownMember()" }
1656+ deprecated class LabelUnknownMember extends LabelContent {
1657+ LabelUnknownMember ( ) { this .getContent ( ) .isUnknownArrayElement ( ) }
16541658 }
16551659
16561660 /** A label for parameter `i`. */
0 commit comments