@@ -271,19 +271,16 @@ class ExprVisitor : public AstVisitorBase<ExprVisitor> {
271271 emitImplicitConversionExpr (expr, label);
272272 }
273273
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;
281278 }
282279
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 ;
287284 }
288285
289286 void visitLoadExpr (swift::LoadExpr* expr) {
@@ -531,6 +528,62 @@ class ExprVisitor : public AstVisitorBase<ExprVisitor> {
531528 dispatcher_.emit (OtherConstructorDeclRefExprsTrap{label, ctorLabel});
532529 }
533530
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+
534587 private:
535588 void fillAbstractClosureExpr (const swift::AbstractClosureExpr& expr,
536589 codeql::AbstractClosureExpr& entry) {
@@ -560,9 +613,9 @@ class ExprVisitor : public AstVisitorBase<ExprVisitor> {
560613 dispatcher_.emit (ExplicitCastExprsTrap{label, dispatcher_.fetchLabel (expr->getSubExpr ())});
561614 }
562615
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 ());
566619 }
567620
568621 void emitAnyTryExpr (swift::AnyTryExpr* expr, TrapLabel<AnyTryExprTag> label) {
@@ -590,9 +643,11 @@ class ExprVisitor : public AstVisitorBase<ExprVisitor> {
590643 void emitLookupExpr (const swift::LookupExpr* expr, TrapLabel<LookupExprTag> label) {
591644 assert (expr->getBase () && " LookupExpr has getBase()" );
592645 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+ }
596651 }
597652
598653 /*
0 commit comments