@@ -271,19 +271,16 @@ class ExprVisitor : public AstVisitorBase<ExprVisitor> {
271
271
emitImplicitConversionExpr (expr, label);
272
272
}
273
273
274
- void visitTypeExpr (swift::TypeExpr* expr) {
275
- auto label = dispatcher_.assignNewLabel (expr);
276
- dispatcher_.emit (TypeExprsTrap{label});
277
- if (auto repr = expr->getTypeRepr ()) {
278
- auto typeLabel = dispatcher_.fetchLabel (repr);
279
- dispatcher_.emit (TypeExprTypeReprsTrap{label, typeLabel});
280
- }
274
+ codeql::TypeExpr translateTypeExpr (const swift::TypeExpr& expr) {
275
+ TypeExpr entry{dispatcher_.assignNewLabel (expr)};
276
+ entry.type_repr = dispatcher_.fetchOptionalLabel (expr.getTypeRepr ());
277
+ return entry;
281
278
}
282
279
283
- void visitParenExpr ( swift::ParenExpr* expr) {
284
- auto label = dispatcher_.assignNewLabel (expr);
285
- dispatcher_. emit (ParenExprsTrap{label} );
286
- emitIdentityExpr (expr, label) ;
280
+ codeql::ParenExpr translateParenExpr ( const swift::ParenExpr& expr) {
281
+ ParenExpr entry{ dispatcher_.assignNewLabel (expr)} ;
282
+ fillIdentityExpr (expr, entry );
283
+ return entry ;
287
284
}
288
285
289
286
void visitLoadExpr (swift::LoadExpr* expr) {
@@ -531,6 +528,62 @@ class ExprVisitor : public AstVisitorBase<ExprVisitor> {
531
528
dispatcher_.emit (OtherConstructorDeclRefExprsTrap{label, ctorLabel});
532
529
}
533
530
531
+ codeql::UnresolvedDeclRefExpr translateUnresolvedDeclRefExpr (
532
+ const swift::UnresolvedDeclRefExpr& expr) {
533
+ codeql::UnresolvedDeclRefExpr entry{dispatcher_.assignNewLabel (expr)};
534
+ if (expr.hasName ()) {
535
+ llvm::SmallVector<char > scratch;
536
+ entry.name = expr.getName ().getString (scratch).str ();
537
+ }
538
+ return entry;
539
+ }
540
+
541
+ codeql::UnresolvedDotExpr translateUnresolvedDotExpr (const swift::UnresolvedDotExpr& expr) {
542
+ codeql::UnresolvedDotExpr entry{dispatcher_.assignNewLabel (expr)};
543
+ assert (expr.getBase () && " Expect UnresolvedDotExpr to have a base" );
544
+ entry.base = dispatcher_.fetchLabel (expr.getBase ());
545
+ llvm::SmallVector<char > scratch;
546
+ entry.name = expr.getName ().getString (scratch).str ();
547
+ return entry;
548
+ }
549
+
550
+ codeql::UnresolvedMemberExpr translateUnresolvedMemberExpr (
551
+ const swift::UnresolvedMemberExpr& expr) {
552
+ UnresolvedMemberExpr entry{dispatcher_.assignNewLabel (expr)};
553
+ llvm::SmallVector<char > scratch;
554
+ entry.name = expr.getName ().getString (scratch).str ();
555
+ return entry;
556
+ }
557
+
558
+ codeql::SequenceExpr translateSequenceExpr (const swift::SequenceExpr& expr) {
559
+ SequenceExpr entry{dispatcher_.assignNewLabel (expr)};
560
+ entry.elements = dispatcher_.fetchRepeatedLabels (expr.getElements ());
561
+ return entry;
562
+ }
563
+
564
+ codeql::BridgeToObjCExpr translateBridgeToObjCExpr (const swift::BridgeToObjCExpr& expr) {
565
+ BridgeToObjCExpr entry{dispatcher_.assignNewLabel (expr)};
566
+ entry.sub_expr = dispatcher_.fetchLabel (expr.getSubExpr ());
567
+ return entry;
568
+ }
569
+
570
+ codeql::BridgeFromObjCExpr translateBridgeFromObjCExpr (const swift::BridgeFromObjCExpr& expr) {
571
+ BridgeFromObjCExpr entry{dispatcher_.assignNewLabel (expr)};
572
+ entry.sub_expr = dispatcher_.fetchLabel (expr.getSubExpr ());
573
+ return entry;
574
+ }
575
+
576
+ codeql::DotSelfExpr translateDotSelfExpr (const swift::DotSelfExpr& expr) {
577
+ DotSelfExpr entry{dispatcher_.assignNewLabel (expr)};
578
+ fillIdentityExpr (expr, entry);
579
+ return entry;
580
+ }
581
+
582
+ codeql::ErrorExpr translateErrorExpr (const swift::ErrorExpr& expr) {
583
+ ErrorExpr entry{dispatcher_.assignNewLabel (expr)};
584
+ return entry;
585
+ }
586
+
534
587
private:
535
588
void fillAbstractClosureExpr (const swift::AbstractClosureExpr& expr,
536
589
codeql::AbstractClosureExpr& entry) {
@@ -560,9 +613,9 @@ class ExprVisitor : public AstVisitorBase<ExprVisitor> {
560
613
dispatcher_.emit (ExplicitCastExprsTrap{label, dispatcher_.fetchLabel (expr->getSubExpr ())});
561
614
}
562
615
563
- void emitIdentityExpr ( swift::IdentityExpr* expr, TrapLabel<IdentityExprTag> label ) {
564
- assert (expr-> getSubExpr () && " IdentityExpr has getSubExpr()" );
565
- dispatcher_. emit (IdentityExprsTrap{label, dispatcher_.fetchLabel (expr-> getSubExpr ())} );
616
+ void fillIdentityExpr ( const swift::IdentityExpr& expr, codeql::IdentityExpr& entry ) {
617
+ assert (expr. getSubExpr () && " IdentityExpr has getSubExpr()" );
618
+ entry. sub_expr = dispatcher_.fetchLabel (expr. getSubExpr ());
566
619
}
567
620
568
621
void emitAnyTryExpr (swift::AnyTryExpr* expr, TrapLabel<AnyTryExprTag> label) {
@@ -590,9 +643,11 @@ class ExprVisitor : public AstVisitorBase<ExprVisitor> {
590
643
void emitLookupExpr (const swift::LookupExpr* expr, TrapLabel<LookupExprTag> label) {
591
644
assert (expr->getBase () && " LookupExpr has getBase()" );
592
645
auto baseLabel = dispatcher_.fetchLabel (expr->getBase ());
593
- assert (expr->hasDecl () && " LookupExpr has decl" );
594
- auto declLabel = dispatcher_.fetchLabel (expr->getDecl ().getDecl ());
595
- dispatcher_.emit (LookupExprsTrap{label, baseLabel, declLabel});
646
+ dispatcher_.emit (LookupExprsTrap{label, baseLabel});
647
+ if (expr->hasDecl ()) {
648
+ auto declLabel = dispatcher_.fetchLabel (expr->getDecl ().getDecl ());
649
+ dispatcher_.emit (LookupExprMembersTrap{label, declLabel});
650
+ }
596
651
}
597
652
598
653
/*
0 commit comments