/** {@inheritDoc} */ protected void enterVariable(Variable variable) { Integer allocation = (Integer) symbolTable.get(variable.getSymbolKey(), "allocation"); String symKey = variable.getSymbolKey().toString(); String allocString = ""; if (allocation != null) { int slot = (allocation & (0xff)); int mode = allocation >> 8; allocString = ((mode == STACK_ADDR) ? "Y" : "X") + slot; } addLineToRow("arg/var(" + symKey + ") " + allocString); nextRow(); } }
Integer count = (Integer) symbolTable.get(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_VAR_OCCURRENCE_COUNT); count = (count == null) ? 1 : (count + 1); symbolTable.put(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_VAR_OCCURRENCE_COUNT, count); (Boolean) symbolTable.get(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_VAR_NON_ARG); nonArgPositionOnly = (nonArgPositionOnly == null) ? true : nonArgPositionOnly; symbolTable.put(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_VAR_NON_ARG, nonArgPositionOnly); symbolTable.put(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_VAR_LAST_ARG_FUNCTOR, topLevelBodyFunctor); symbolTable.put(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_VAR_LAST_ARG_FUNCTOR, null);
/** * {@inheritDoc} * * <p/>Allocates unallocated variables to stack slots. */ public void visit(Variable variable) { if (symbolTable.get(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_ALLOCATION) == null) { if (variable.isAnonymous()) { /*log.fine("Query variable " + variable + " is temporary.");*/ int allocation = (lastAllocatedTempReg++ & (0xff)) | (REG_ADDR << 8); symbolTable.put(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_ALLOCATION, allocation); varNames.put((byte) allocation, variable.getName()); } else { /*log.fine("Query variable " + variable + " is permanent.");*/ int allocation = (numPermanentVars++ & (0xff)) | (WAMInstruction.STACK_ADDR << 8); symbolTable.put(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_ALLOCATION, allocation); varNames.put((byte) allocation, variable.getName()); } } super.visit(variable); } }
symbolTable.put(variable.getSymbolKey(), SymbolTableKeys.SYMKEY_ALLOCATION, allocation);
/** {@inheritDoc} */ public void visit(Variable variable) { SymbolKey symbolKey = variable.getSymbolKey(); // Check if the variable has already been annotated. TermDomain annotation = (TermDomain) symbolTable.get(symbolKey, TERM_DOMAIN); if (annotation == null) { // variable is ground if it appears in a call to a predicate that always grounds that argument. /*log.fine("non-ground " + variable.toString(interner, true, false));*/ symbolTable.put(symbolKey, TERM_DOMAIN, new TermDomain(false)); } else { /*log.fine("already seen " + variable.toString(interner, true, false));*/ } // Check if the variable domain has already been annotated for a previous occurrence of the variable. VarDomain varDomain = (VarDomain) symbolTable.get(symbolKey, VARIABLE_DOMAIN); if (varDomain == null) { varDomain = new VarDomain(traverser.isInHead()); symbolTable.put(symbolKey, VARIABLE_DOMAIN, varDomain); } else { varDomain.isTemporary = traverser.isInHead() && varDomain.isTemporary(); } /*log.fine(variable.toString(interner, true, false) + (varDomain.isTemporary() ? " may be temporary." : " is not temporary."));*/ }
/** {@inheritDoc} */ public void visit(Variable variable) { SymbolKey symbolKey = variable.getSymbolKey(); // Check if the variable has already been annotated. TermDomain annotation = (TermDomain) symbolTable.get(symbolKey, TERM_DOMAIN); if (annotation == null) { // variable is ground if it appears in a call to a predicate that always grounds that argument. /*log.fine("non-ground " + variable.toString(interner, true, false));*/ symbolTable.put(symbolKey, TERM_DOMAIN, new TermDomain(false)); } else { /*log.fine("already seen " + variable.toString(interner, true, false));*/ } // Check if the variable domain has already been annotated for a previous occurrence of the variable. VarDomain varDomain = (VarDomain) symbolTable.get(symbolKey, VARIABLE_DOMAIN); if (varDomain == null) { varDomain = new VarDomain(traverser.isInHead()); symbolTable.put(symbolKey, VARIABLE_DOMAIN, varDomain); } else { varDomain.isTemporary = traverser.isInHead() && varDomain.isTemporary(); } /*log.fine(variable.toString(interner, true, false) + (varDomain.isTemporary() ? " may be temporary." : " is not temporary."));*/ }