File tree Expand file tree Collapse file tree 6 files changed +651
-10
lines changed
src/semmle/code/csharp/ir
implementation/raw/internal Expand file tree Collapse file tree 6 files changed +651
-10
lines changed Original file line number Diff line number Diff line change @@ -269,7 +269,11 @@ newtype TTranslatedElement =
269269 )
270270 } or
271271 // A local declaration
272- TTranslatedDeclaration ( LocalVariableDeclExpr entry ) or
272+ TTranslatedDeclaration ( LocalVariableDeclExpr entry ) {
273+ // foreach var decl and init is treated separately,
274+ // because foreach needs desugaring
275+ not entry .getParent ( ) instanceof ForeachStmt
276+ } or
273277 // A compiler generated element, generated by `generatedBy` during the
274278 // desugaring process
275279 TTranslatedCompilerGeneratedElement ( Element generatedBy , int index ) {
Original file line number Diff line number Diff line change @@ -11,6 +11,7 @@ private import TranslatedInitialization
1111private import common.TranslatedConditionBlueprint
1212private import IRInternal
1313private import semmle.code.csharp.ir.internal.IRUtilities
14+ private import desugar.Foreach
1415
1516TranslatedStmt getTranslatedStmt ( Stmt stmt ) { result .getAST ( ) = stmt }
1617
@@ -853,3 +854,35 @@ class TranslatedSwitchStmt extends TranslatedStmt {
853854 )
854855 }
855856}
857+
858+ class TranslatedEnumeratorForeach extends TranslatedLoop {
859+ override ForeachStmt stmt ;
860+
861+ override TranslatedElement getChild ( int id ) {
862+ id = 0 and result = getTempEnumDecl ( ) or
863+ id = 1 and result = getTry ( )
864+ }
865+
866+ override Instruction getFirstInstruction ( ) {
867+ result = getTempEnumDecl ( ) .getFirstInstruction ( )
868+ }
869+
870+ override Instruction getChildSuccessor ( TranslatedElement child ) {
871+ (
872+ child = getTempEnumDecl ( ) and
873+ result = getTry ( ) .getFirstInstruction ( )
874+ ) or
875+ (
876+ child = getTry ( ) and
877+ result = getParent ( ) .getChildSuccessor ( this )
878+ )
879+ }
880+
881+ private TranslatedElement getTry ( ) {
882+ result = ForeachElements:: getTry ( stmt )
883+ }
884+
885+ private TranslatedElement getTempEnumDecl ( ) {
886+ result = ForeachElements:: getEnumDecl ( stmt )
887+ }
888+ }
You can’t perform that action at this time.
0 commit comments