public void handleStatement(ASTStatement node) { // System.out.println(node.getCode()); // Drawing connector.startSnap(node.getLineNumber()); // FIXME we'll see how this works // Nested scope for by macro SimpleNode s = (SimpleNode) node.jjtGetChild(0); if (s instanceof ASTStatementList) { System.out.println("This'll never happen"); SymbolTable st = new SymbolTable(Global.getCurrentSymbolTable()); st.setName("nested"); Global.setCurrentSymbolTable(st); s.jjtAccept(this, null); Global.setCurrentSymbolTable(st.getPrevious()); } else { node.jjtGetChild(0).jjtAccept(this, null); if (((SimpleNode) node.jjtGetChild(0)).getId() == JJTCALL) { ((ASTCall) (node.jjtGetChild(0))).setLineNumber(node.getLineNumber()); } update(node.getLineNumber(), UPDATE_REASON_STATEMENT); } // System.out.println("endStatement"); connector.endSnap(); }
// FIXME use this? public void update(int lineNumber, int reason) { if (XAALScripter.debug) { System.out.println("Update on " + lineNumber); } if (XAALScripter.debug) { System.out.println(Global.getCurrentSymbolTable().toString()); } // questionFactory.addAnswers(lineNumber, reason); }
public void handleStatementList(ASTStatementList node) { // connector.endPar(); //ENDPAR int numStatements = node.jjtGetNumChildren(); for (int i = 0; i < numStatements; i++) { node.jjtGetChild(i).jjtAccept(this, null); } if (!node.getIsFunction()) { Global.setCurrentSymbolTable(Global.getCurrentSymbolTable().getPrevious()); } }
public void handleVarDecl(ASTVarDecl node) { // System.out.println("Visiting var decl"); String name = node.getName(); node.setLineNumber(((SimpleNode) node.jjtGetParent()).getLineNumber()); SymbolTable s = Global.getCurrentSymbolTable(); ArrayList<Integer> values; if (node.getIsArray()) { ByValVariable v = (ByValVariable) s.getVariable(name); v.setArray(); values = (ArrayList<Integer>) handleArrayDeclaration((ASTArrayDeclaration) node.jjtGetChild(0)); v.setValues(values); } else { Integer value = (Integer) node.jjtGetChild(0).jjtAccept(this, null); s.setValue(name, value); } // Drawing Stuff connector.addVariable(s.getVariable(name), name, s.getName()); // This is a snapshot connector.showVar(Global.getCurrentSymbolTable().getVariable(name)); }
public void leaveScope() { if (XAALScripter.debug) { System.out.println("Leaving scope " + Global.getCurrentSymbolTable().getName()); } update(-1, UPDATE_REASON_LEAVEFUN); }
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); }
public Integer handleVar(ASTVar node) { System.out.println(node.jjtGetParent()); Integer value = -256; int index = -10000; String name = node.getName(); if (node.isArg()) { name += "_"; } if (JustCalling) { return value; } Variable v = Global.getCurrentSymbolTable().getVariable(name); if (v instanceof ByNameVariable) { v = Global.getCurrentSymbolTable().getCacheVariable(name); System.out.println(v + " should be null the first time"); if (v != null) { int ret = 0; try { ret = v.getValue(); } catch (VizIndexOutOfBoundsException e) { System.out.println(e); } return ret; } } else { v = Global.getCurrentSymbolTable().getVariable(name); } boolean cached = false; if (v == null) { v = Global.getCurrentSymbolTable().getVariable(name); System.out.println(v); int val = 0; try { val = v.getValue(); Global.getCurrentSymbolTable().addCacheVariable(name, val); } catch (VizIndexOutOfBoundsException e) { System.out.println(e); } if (node.getIsArray()) { name += "[" + ((SimpleNode) node.jjtGetChild(0)).getCode() + "]"; } connector.addVariableToCache(name, val, "foo"); } else { cached = true; } if (v instanceof ByNameVariable) { try { value = v.getValue(); } catch (VizIndexOutOfBoundsException e) { System.out.println(e); } } else { if (node.getIsArray()) { index = (Integer) node.jjtGetChild(0).jjtAccept(this, null); node.setIndex(index); try { value = v.getValue(index); } catch (VizIndexOutOfBoundsException e) { System.out.println(e); ASTExpression exp = (ASTExpression) node.jjtGetChild(0); ASTNum num = new ASTNum(JJTNUM); Random r = new Random(); num.setValue(r.nextInt(6)); exp.jjtAddChild(num, 0); try { index = (Integer) exp.jjtAccept(this, null); value = v.getValue(index); } catch (VizIndexOutOfBoundsException f) { System.out.println("oops..."); } program.codeBuilt = false; Global.lineNumber = 1; program.buildCode(); } } else { try { value = v.getValue(); } catch (VizIndexOutOfBoundsException f) { System.out.println(f); } } System.out.println("F*****g " + value + v + cached); } if (v instanceof ByNameVariable) { if (cached) { connector.highlightVarByName(v); } else { connector.greyScope("foo"); connector.highlightScopeByName("main"); if (((ByNameVariable) v).getVariable().getIsArray()) { connector.highlightVarByName( ((ByNameVariable) v).getVariable(), ((ByNameVariable) v).getIndex()); } else { connector.highlightVarByName(((ByNameVariable) v).getVariable()); } } } else { if (node.getIsArray()) { // connector.highlightVarByName(v, index); } else { // connector.highlightVarByName(v); } } return value; }