/** * A root-block is the root block for any SymbolScope whether program, function, trigger, or internal procedure. */ public boolean isRootBlock() { return symbolScope.getRootBlock() == this; }
/** Add a new scope to this scope. */ public TreeParserSymbolScope addScope() { TreeParserSymbolScope newScope = new TreeParserSymbolScope(this); childScopes.add(newScope); return newScope; }
/** Unlike other symbols, Frames are automatically added to the scope, right here at creation time. */ public Frame(String name, TreeParserSymbolScope scope) { super(name, scope); scope.add(this); }
/** A method-block is a block for a function/trigger/internal-procedure. */ public boolean isMethodBlock() { return (symbolScope.getRootBlock() == this) && (symbolScope.getParentScope() != null); }
result.variable = symbolScope.lookupVariable(name); if (result.variable != null) return result; result.fieldLevelWidget = symbolScope.lookupFieldLevelWidget(name); if (result.fieldLevelWidget != null) return result; s = symbolScope.lookupSymbol(ProParserTokenTypes.EVENT, name); if (s != null) { result.event = (Event) s; IField field; result = new FieldLookupResult(); field = symbolScope.getRootScope().lookupUnqualifiedField(name); if (field != null) { tableBuff = symbolScope.getRootScope().getLocalTableBuffer(field.getTable()); } else { field = symbolScope.getRootScope().getRefactorSession().getSchema().lookupUnqualifiedField(name); if (field == null) return null; tableBuff = symbolScope.getUnnamedBuffer(field.getTable()); String fieldPart = name.substring(lastDot + 1); String tablePart = name.substring(0, lastDot); tableBuff = symbolScope.getBufferSymbol(tablePart); if (tableBuff == null) return null;
case UPDATING: case BUFFERSYMBOL: buffer = currentScope.getBufferSymbol(recordNode.getText()); break; case SYMBOL: buffer = currentScope.lookupTableOrBufferSymbol(anode.getText()); break; case TEMPTABLESYMBOL: buffer = currentScope.lookupTempTable(anode.getText()); break; case SCHEMATABLESYMBOL: ITable table = refSession.getSchema().lookupTable(anode.getText()); if (table != null) buffer = currentScope.getUnnamedBuffer(table); break; default:
@Override public void methodBegin(JPNode blockAST, JPNode idNode) { LOG.trace("Entering methodBegin {} - {}", blockAST, idNode); scopeAdd(blockAST); BlockNode blockNode = (BlockNode) idNode.getParent(); TreeParserSymbolScope definingScope = currentScope.getParentScope(); Routine r = new Routine(idNode.getText(), definingScope, currentScope); r.setProgressType(ProParserTokenTypes.METHOD); r.setDefOrIdNode(blockNode); blockNode.setSymbol(r); definingScope.add(r); currentRoutine = r; }
@Override public void scopeAdd(JPNode anode) { LOG.trace("Entering scopeAdd {}", anode); BlockNode blockNode = (BlockNode) anode; currentScope = currentScope.addScope(); currentBlock = pushBlock(new Block(currentScope, blockNode)); currentScope.setRootBlock(currentBlock); blockNode.setBlock(currentBlock); }
/** * Add a TableBuffer for names lookup. This is called when copying a SymbolScopeSuper's symbols for inheritance * purposes. */ private void add(TableBuffer tableBuffer) { ITable table = tableBuffer.getTable(); addTableBuffer(tableBuffer.getName(), table, tableBuffer); getRootScope().addTableDefinitionIfNew(table); }
ITable table; boolean isDefault; TableBuffer tableBuffer = currentScope.lookupBuffer(buffName); if (tableBuffer != null) { table = tableBuffer.getTable(); isDefault = true; TableBuffer newBuff = currentScope.defineBuffer(isDefault ? "" : buffName, table); recordNode.setTableBuffer(newBuff); currentBlock.addHiddenCursor(recordNode);
/** * Define an unnamed buffer which is scoped (symbol and buffer) to the trigger scope/block. * * @param tableAST The RECORD_NAME node. Must already have the Table symbol linked to it. */ @Override public void defineBufferForTrigger(JPNode tableAST) { LOG.trace("Entering defineBufferForTrigger {}", tableAST); ITable table = astTableLink(tableAST); TableBuffer bufSymbol = currentScope.defineBuffer("", table); currentBlock.getBufferForReference(bufSymbol); // Create the BufferScope currSymbol = bufSymbol; }
/** Get a list of this scope's symbols, and all symbols of all descendant scopes, which match a given class. */ public <T extends Symbol> List<T> getAllSymbolsDeep(Class<T> klass) { List<T> ret = getAllSymbols(klass); for (TreeParserSymbolScope child : childScopes) { ret.addAll(child.getAllSymbols(klass)); } return ret; }
public Symbol(String name, TreeParserSymbolScope scope, boolean parameter) { this.name = name; this.scope = scope; this.parameter = parameter; scope.addSymbol(this); }
/** Get a list of this scope's symbols, and all symbols of all descendant scopes. */ public List<Symbol> getAllSymbolsDeep() { ArrayList<Symbol> ret = new ArrayList<>(allSymbols); for (TreeParserSymbolScope child : childScopes) { ret.addAll(child.getAllSymbolsDeep()); } return ret; }
/** * Define a new BufferSymbol. * * @param name Input "" for a default or unnamed buffer, otherwise the "named buffer" name. */ public TableBuffer defineBuffer(String name, ITable table) { TableBuffer buffer = new TableBuffer(name, this, table); addTableBuffer(name, table, buffer); return buffer; }
Variable v = symbolScope.lookupVariable(name); if (v != null) return result.setSymbol(v).build(); IFieldLevelWidget flw = symbolScope.lookupFieldLevelWidget(name); if (flw != null) return result.setSymbol(flw).build(); Symbol s = symbolScope.lookupSymbol(ProParserTokenTypes.EVENT, name); if (s != null) { return result.setSymbol(s).build(); IField field; result = new FieldLookupResult.Builder(); field = symbolScope.getRootScope().lookupUnqualifiedField(name); if (field != null) { tableBuff = symbolScope.getRootScope().getLocalTableBuffer(field.getTable()); } else { field = symbolScope.getRootScope().getRefactorSession().getSchema().lookupUnqualifiedField(name); if (field == null) return null; tableBuff = symbolScope.getUnnamedBuffer(field.getTable()); String fieldPart = name.substring(lastDot + 1); String tablePart = name.substring(0, lastDot); tableBuff = symbolScope.getBufferSymbol(tablePart); if (tableBuff == null) return null;
/** The program-block is the outer program block (not internal procedure block) */ public boolean isProgramBlock() { return (symbolScope.getRootBlock() == this) && (symbolScope.getParentScope() == null); }
case UPDATING: case BUFFERSYMBOL: buffer = currentScope.getBufferSymbol(recordNode.getText()); break; case SYMBOL: buffer = currentScope.lookupTableOrBufferSymbol(anode.getText()); break; case TEMPTABLESYMBOL: buffer = currentScope.lookupTempTable(anode.getText()); break; case SCHEMATABLESYMBOL: ITable table = refSession.getSchema().lookupTable(anode.getText()); if (table != null) buffer = currentScope.getUnnamedBuffer(table); break; default:
@Override public void propGetSetBegin(JPNode propAST) { LOG.trace("Entering propGetSetBegin {}", propAST); scopeAdd(propAST); BlockNode blockNode = (BlockNode) propAST; TreeParserSymbolScope definingScope = currentScope.getParentScope(); Routine r = new Routine(propAST.getText(), definingScope, currentScope); r.setProgressType(propAST.getType()); r.setDefOrIdNode(blockNode); blockNode.setSymbol(r); definingScope.add(r); currentRoutine = r; }
@Override public void scopeAdd(JPNode anode) { LOG.trace("Entering scopeAdd {}", anode); BlockNode blockNode = (BlockNode) anode; currentScope = currentScope.addScope(); currentBlock = pushBlock(new Block(currentScope, blockNode)); currentScope.setRootBlock(currentBlock); blockNode.setBlock(currentBlock); }