C_For_Loop¶
- class C_For_Loop (concrete, physical)¶
If no condition exists (e.g.,
for(;;);) an artificial Boolean-Literal(true) should be generated by the front end- Direct parents:
inherits Loop_Statement
- Ancestor classes and implemented interfaces:
Conditional_Interface, Linked_Node, Logical_Code_Range_Interface, Loop_Statement, Operation, Physical_IR_Root, Statement
Field
Kind
Type
Description
Initialization
syntactic
class Operation
A statement that will be executed before the loop. Can be a declaration
Continue_Expression
syntactic
class Expression
An expression which is executed in the kernel after the body i.e., the last argument of the C-for
Loop_Body (from Loop_Statement)
syntactic
class Statement
The part of the loop that loops, excluding continue/step action
Logical (from Linked_Node)
semantic to logical
class Logical_IR_Root
cross-reference into LIR
Parent (from Physical_IR_Root)
semantic
class Physical_IR_Root
The parent of the node in the syntactic forest.
Original_Position_Index (from Physical_IR_Root)
attribute
builtin SLoc_Index_Type
Internal source location info. If from macro expansion, this location is inside the macro body or macro argument
Original_Position (from Physical_IR_Root)
attribute
builtin SLoc
Source location. If from macro expansion, this location is inside the macro body or macro argument
Position (from Physical_IR_Root)
attribute
builtin SLoc
Source location. If from macro expansion, this location is that of the macro expansion
Artificial (from Physical_IR_Root)
attribute
builtin Boolean
Whether this node was compiler-generated
Parenthesized (from Physical_IR_Root)
attribute
builtin Boolean
Whether this node was enclosed in parentheses (used for expressions)
In_Template_Instance (from Physical_IR_Root)
attribute
builtin Boolean
Whether this node is inside a template instance
Enclosing_Template_Instance (from Physical_IR_Root)
semantic
class Physical_IR_Root
Innermost enclosing template instance if In_Template_Instance is true
Code_Start (from Logical_Code_Range_Interface)
semantic to logical
class Execution_Node
Start of the LIR code belonging to this statement. If set to an instruction, that instruction is part of the code range. If set to a block, the code range begins with the tail jump of that block, but does not include the block’s code. Use
is_inside_code_range()to determine if an instruction is between Code_Start and Code_End.Code_End (from Logical_Code_Range_Interface)
semantic to logical
class Execution_Node
If set to an instruction, it is the first instruction after those belonging to the code range belonging to this statement. If set to a block, the code range includes all instructions in that block but not the block’s tail jump. In other words: A block is used to refer to the “instruction-after-last” in that block; all instructions between Code_Start (inclusive) to Code_End (exclusive) belong to the code range. If Code_Start==Code_End, then the statement did not emit any LIR instructions.
Condition (from Conditional_Interface)
syntactic
class Expression
the condition to check in an
if,?:, loop,assert,switchalso used for#ifvariants, and C# 6 exception filters