@Override public String[] getArgumentNames() { return base.getArgumentNames(); }
@Override public String[] getArgumentNames() { return base.getArgumentNames(); }
protected String[] getArgumentNames(CAstEntity f) { return f.getArgumentNames(); }
protected String[] getArgumentNames(CAstEntity f) { return f.getArgumentNames(); }
@Override protected EntityContext makeCodeContext(EntityContext context, CAstEntity n) { if (n.getKind() == CAstEntity.FUNCTION_ENTITY) { // need to handle arguments String[] argumentNames = n.getArgumentNames(); for (String arg : argumentNames) { // System.err.println("declaration of " + arg + " in " + n); MapUtil.findOrCreateSet(entity2DeclaredNames, n).add(arg); } } return new EntityContext(n); }
@Override protected EntityContext makeCodeContext(EntityContext context, CAstEntity n) { if (n.getKind() == CAstEntity.FUNCTION_ENTITY) { // need to handle arguments String[] argumentNames = n.getArgumentNames(); for (String arg : argumentNames) { // System.err.println("declaration of " + arg + " in " + n); MapUtil.findOrCreateSet(entity2DeclaredNames, n).add(arg); } } return new EntityContext(n); }
protected void doPrintTo(CAstEntity e, Writer w) { try { w.write(getEntityKindAsString(e.getKind())); w.write(": "); w.write(e.getName()); w.write('\n'); if (e.getArgumentNames().length > 0) { w.write("("); String[] names = e.getArgumentNames(); for (String name : names) { w.write(" " + name); } w.write(" )\n"); } if (e.getAST() != null) { doPrintTo(e.getAST(), e.getSourceMap(), w); w.write('\n'); } for (Collection<CAstEntity> collection : e.getAllScopedEntities().values()) { for (CAstEntity entity : collection) { doPrintTo(entity, w); } } w.flush(); } catch (IOException e1) { System.err.println("unexpected I/O exception " + e1); } } }
protected void doPrintTo(CAstEntity e, Writer w) { try { w.write(getEntityKindAsString(e.getKind())); w.write(": "); w.write(e.getName()); w.write('\n'); if (e.getArgumentNames().length > 0) { w.write("("); String[] names = e.getArgumentNames(); for (String name : names) { w.write(" " + name); } w.write(" )\n"); } if (e.getAST() != null) { doPrintTo(e.getAST(), e.getSourceMap(), w); w.write('\n'); } for (Collection<CAstEntity> collection : e.getAllScopedEntities().values()) { for (CAstEntity entity : collection) { doPrintTo(entity, w); } } w.flush(); } catch (IOException e1) { System.err.println("unexpected I/O exception " + e1); } } }
/** * generate prologue code for each function body */ protected void doPrologue(WalkContext context) { // perform a lexical write to copy the value stored in the local // associated with each parameter to the lexical name final CAstEntity entity = context.top(); Set<String> exposedNames = entity2ExposedNames.get(entity); if (exposedNames != null) { int i = 0; for (String arg : entity.getArgumentNames()) { if (exposedNames.contains(arg)) { final Scope currentScope = context.currentScope(); Symbol symbol = currentScope.lookup(arg); assert symbol.getDefiningScope() == currentScope; int argVN = symbol.valueNumber(); CAstType type = (entity.getType() instanceof CAstType.Method)? (CAstType)((CAstType.Method)entity.getType()).getArgumentTypes().get(i): topType(); Access A = new Access(arg, context.getEntityName(entity), makeType(type), argVN); context.cfg().addInstruction(new AstLexicalWrite(context.cfg().currentInstruction, A)); } } } }
private void dump(CAstEntity entity, int indent, StringBuilder buf) { Collection<CAstEntity> scopedEntities = Collections.emptySet(); if(entity.getKind() == CAstEntity.SCRIPT_ENTITY) { buf.append(indent(indent)).append(entity.getName()).append(":\n"); scopedEntities = dumpScopedEntities(entity, indent+2, buf); dump(entity.getAST(), indent, buf, entity.getControlFlow()); } else if(entity.getKind() == CAstEntity.FUNCTION_ENTITY) { buf.append(indent(indent)).append("function ").append(entity.getName()).append('('); for(int i=0;i<entity.getArgumentCount();++i) { if(i>0) buf.append(", "); buf.append(entity.getArgumentNames()[i]); } buf.append(") {\n"); scopedEntities = dumpScopedEntities(entity, indent+2, buf); dump(entity.getAST(), indent+2, buf, entity.getControlFlow()); buf.append(indent(indent)).append("}\n\n"); } else { throw new Error("Unknown entity kind " + entity.getKind()); } for(CAstEntity scopedEntity : scopedEntities) dump(scopedEntity, indent, buf); }
/** * generate prologue code for each function body */ protected void doPrologue(WalkContext context) { // perform a lexical write to copy the value stored in the local // associated with each parameter to the lexical name final CAstEntity entity = context.top(); Set<String> exposedNames = entity2ExposedNames.get(entity); if (exposedNames != null) { int i = 0; for (String arg : entity.getArgumentNames()) { if (exposedNames.contains(arg)) { final Scope currentScope = context.currentScope(); Symbol symbol = currentScope.lookup(arg); assert symbol.getDefiningScope() == currentScope; int argVN = symbol.valueNumber(); CAstType type = (entity.getType() instanceof CAstType.Method)? (CAstType)((CAstType.Method)entity.getType()).getArgumentTypes().get(i): topType(); Access A = new Access(arg, context.getEntityName(entity), makeType(type), argVN); context.cfg().addInstruction(new AstLexicalWrite(context.cfg().currentInstruction, A)); } } } }