Ejemplo n.º 1
0
  public void handleAssignment(ASTAssignment node) {
    connector.startPar(); // STARTPAR
    Random r = new Random();
    int q = r.nextInt(100);

    boolean gotAQuestion = q < QUESTION_FREQUENCY; // q < QUESTION_FREQUENCY;//HACK FOR NOW FIXME
    String name = node.getName();
    if (((ASTVar) node.jjtGetChild(0)).isArg()) {
      name += "_";
    }
    Integer value = (Integer) node.jjtGetChild(1).jjtAccept(this, null);
    int index = 0;

    Variable v = Global.getCurrentSymbolTable().getVariable(name);
    if (v instanceof ByNameVariable) {
      if (gotAQuestion) {
        if (v.getIsArray()) {
          gotAQuestion = false;
        } else {
          assignmentQuestion = questionFactory.getByNameQuestion(node.getLineNumber(), name);
        }
      }
      v.setValue(value);
      index = ((ByNameVariable) v).getIndex();
    } else if (v.getIsArray()) {
      index = (Integer) node.jjtGetChild(0).jjtGetChild(0).jjtAccept(this, null);

      try {
        v.setValue(value, index);
      } catch (VizIndexOutOfBoundsException e) {

        System.out.println(e);
      }
      if (gotAQuestion) {
        assignmentQuestion =
            questionFactory.getAssignmentQuestion(node.getLineNumber(), name, index);
      }
    } else {
      if (gotAQuestion) {
        assignmentQuestion = questionFactory.getAssignmentQuestion(node.getLineNumber(), name);
      }
      try {
        v.setValue(value);
      } catch (Exception e) {
        System.out.println(e);
      }
    }
    System.out.println(assignmentQuestion);
    if (gotAQuestion) {
      int i = -257;
      if (assignmentQuestion.getIndex() != -1) {
        if (assignmentQuestion.aboutArg) {
          try {
            i =
                Global.getFunction("main")
                    .getSymbolTable()
                    .get(assignmentQuestion.getVariable(), assignmentQuestion.getIndex());
          } catch (Exception e) {
            System.out.println(e);
          }
        } else {
          try {
            i = Global.getCurrentSymbolTable().get(name, assignmentQuestion.getIndex());
          } catch (Exception e) {
            System.out.println(e);
          }
        }
      } else {
        if (assignmentQuestion.aboutArg || v instanceof ByNameVariable) {
          System.out.println("Getting " + name);
          try {
            i = Global.getFunction("main").getSymbolTable().get(assignmentQuestion.getVariable());
          } catch (Exception e) {
            System.out.println(e);
          }
        }
        {
          try {
            i = Global.getCurrentSymbolTable().get(name);
          } catch (Exception e) {
            System.out.println(e);
          }
        }
      }
      if (gotAQuestion) {
        setAssignmentQuestionAnswer(i);
        connector.addQuestion(assignmentQuestion);
      }
    }

    if (v instanceof ByNameVariable) {

      connector.greyScope("foo");
      System.out.println("Greying scope");
      connector.highlightScopeByName("main");

      if (v.getIsArray()) {
        connector.highlightVarByName(((ByNameVariable) v).getVariable(), index);
        connector.modifyVarByName(((ByNameVariable) v).getVariable(), index, value);
      } else {
        connector.highlightVarByName(((ByNameVariable) v).getVariable());
        connector.modifyVarByName(((ByNameVariable) v).getVariable(), value);
      }
    } else {
      if (v.getIsArray()) {
        connector.modifyVarByName(v, index, value);
      } else {
        connector.modifyVarByName(v, value);
      }
    }
    connector.endPar(); // ENDPAR
    update(node.getLineNumber(), UPDATE_REASON_ASSIGNMENT);
  }