LocalVar* pop_local_var(bool set_unassigned) { std::auto_ptr<VNode> vnode(getVStack()); assert(vnode.get()); LocalVar* rc = vnode->lvar; if (set_unassigned) rc->parseUnassigned(); printd(5, "pop_local_var(): popping var %s\n", rc->getName()); updateVStack(vnode->next); return rc; }
void VarRefNode::resolve(const QoreTypeInfo* typeInfo) { LocalVar* id; printd(5, "VarRefNode::resolve() name: '%s' size: %d\n", name.ostr, name.size()); bool in_closure; if (name.size() == 1 && (id = find_local_var(name.ostr, in_closure))) { if (typeInfo) parse_error(loc, "type definition given for existing local variable '%s'", id->getName()); ref.id = id; if (in_closure) setClosureIntern(); else type = VT_LOCAL; printd(5, "VarRefNode::resolve(): local var %s resolved (id: %p, in_closure: %d)\n", name.ostr, ref.id, in_closure); } else { ref.var = qore_root_ns_private::parseCheckImplicitGlobalVar(loc, name, typeInfo); type = VT_GLOBAL; printd(5, "VarRefNode::resolve(): implicit global var %s resolved (var: %p)\n", name.ostr, ref.var); } }
DLLLOCAL ~VNode() { //printd(5, "VNode::~VNode() this: %p '%s' %p top_level: %d\n", this, lvar ? lvar->getName() : "n/a", lvar, top_level); if (lvar && !refs) qore_program_private::makeParseWarning(getProgram(), *loc, QP_WARN_UNREFERENCED_VARIABLE, "UNREFERENCED-VARIABLE", "local variable '%s' was declared in this block but not referenced; to disable this warning, use '%%disable-warning unreferenced-variable' in your code", lvar->getName()); if (top_level) { save_global_vnode(0); //printd(0, "VNode::~VNode() this: %p deleting top-level global vnode\n", this); } }
DLLLOCAL const char* getName() const { return lvar->getName(); }