Beispiel #1
0
 public void ProcessStatementForRaw(DMASTProcStatementForRaw statementForRaw)
 {
     _proc.StartScope();
     {
         foreach (var decl in FindVarDecls(statementForRaw.Expression1))
         {
             ProcessStatementVarDeclaration(new DMASTProcStatementVarDeclaration(statementForRaw.Location, decl.DeclPath, null));
         }
         if (statementForRaw.Expression2 != null || statementForRaw.Expression3 != null)
         {
             ProcessStatementForStandard(new DMASTProcStatementForStandard(statementForRaw.Location,
                                                                           new DMASTProcStatementExpression(statementForRaw.Location, statementForRaw.Expression1),
                                                                           statementForRaw.Expression2, statementForRaw.Expression3, statementForRaw.Body));
         }
         else
         {
             if (statementForRaw.Expression1 is DMASTAssign assign && assign.Expression is DMASTVarDeclExpression && assign.Value is DMASTExpressionInRange)
             {
                 string variableIdent = null;
                 var    exprIn        = assign.Value as DMASTExpressionInRange;
                 if (assign.Expression is DMASTVarDeclExpression decl)
                 {
                     variableIdent = decl.DeclPath.Path.LastElement;
                 }
                 if (exprIn.Step == null)
                 {
                     exprIn.Step = new DMASTConstantInteger(exprIn.Location, 1);
                 }
                 ProcessStatementForRange(new DMASTProcStatementForRange(statementForRaw.Location,
                                                                         new DMASTProcStatementExpression(statementForRaw.Location, statementForRaw.Expression1),
                                                                         new DMASTIdentifier(exprIn.Value.Location, variableIdent), exprIn.StartRange, exprIn.EndRange, exprIn.Step, statementForRaw.Body));
             }
Beispiel #2
0
 public void VisitProcStatementForRaw(DMASTProcStatementForRaw statementForRaw)
 {
     if (statementForRaw.Expression1 != null)
     {
         SimplifyExpression(ref statementForRaw.Expression1);
     }
     if (statementForRaw.Expression2 != null)
     {
         SimplifyExpression(ref statementForRaw.Expression2);
     }
     if (statementForRaw.Expression3 != null)
     {
         SimplifyExpression(ref statementForRaw.Expression3);
     }
     statementForRaw.Body?.Visit(this);
 }