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); }