コード例 #1
0
 private void geraCodigoInspecao(NoPara noPara) throws ExcecaoVisitaASA {
   NoExpressao incremento = noPara.getIncremento();
   if (incremento != null) {
     NoOperacaoAtribuicao atribuicao = (NoOperacaoAtribuicao) incremento;
     if (atribuicao.getOperandoEsquerdo() instanceof NoReferenciaVariavel) {
       NoReferenciaVariavel referencia = (NoReferenciaVariavel) atribuicao.getOperandoEsquerdo();
       NoDeclaracao origem = referencia.getOrigemDaReferencia();
       if (origem instanceof NoDeclaracaoVariavel) {
         Utils.geraCodigoParaInspecao((NoDeclaracaoVariavel) origem, saida, nivelEscopo, false);
       } else if (origem instanceof NoDeclaracaoParametro) {
         Utils.geraCodigoParaInspecao((NoDeclaracaoParametro) origem, saida, nivelEscopo);
       }
     }
   }
 }
コード例 #2
0
    @Override
    public Void visitar(NoReferenciaVariavel no) throws ExcecaoVisitaASA {
      String nome = no.getNome();
      if (no.getEscopo() != null) {
        saida.append(no.getEscopo()).append(".");
      }

      NoDeclaracao declaracao = no.getOrigemDaReferencia();
      boolean ehParametroPorReferencia =
          declaracao instanceof NoDeclaracaoParametro
              && (((NoDeclaracaoParametro) declaracao).getModoAcesso()
                  == ModoAcesso.POR_REFERENCIA);
      if (ehParametroPorReferencia || no.ehPassadoPorReferencia()) {
        String stringIndice = ehParametroPorReferencia ? no.getNome() : Utils.geraStringIndice(no);
        String nomeTipo = Utils.getNomeTipoJava(declaracao.getTipoDado()).toUpperCase();
        saida.format("REFS_%s[%s]", nomeTipo, stringIndice);
      } else {
        saida.append(nome);
      }

      return null;
    }