diff --git a/js2/src/js2metadata.cpp b/js2/src/js2metadata.cpp index 302caef9c504..155d23eb858a 100644 --- a/js2/src/js2metadata.cpp +++ b/js2/src/js2metadata.cpp @@ -547,6 +547,15 @@ namespace MetaData { bCon->addFloat64(checked_cast(p)->value); } break; + case ExprNode::qualify: + { + QualifyExprNode *qe = checked_cast(p); + const StringAtom &name = checked_cast(p)->name; + const StringAtom &qualifierName = checked_cast(qe->qualifier)->name; + + returnRef = new LexicalReference(i->name, cxt.strict); + } + break; case ExprNode::identifier: { IdentifierExprNode *i = checked_cast(p); @@ -591,6 +600,11 @@ namespace MetaData { case ExprNode::dot: { BinaryExprNode *b = checked_cast(p); + if (b->op2->getKind() == ExprNode::identifier) { + } + else { + if (b->op2->getKind() == ExprNode::qualify) { + } } break; default: diff --git a/js2/src/js2metadata.h b/js2/src/js2metadata.h index 5cf29e3f6981..7901dcbbc4c9 100644 --- a/js2/src/js2metadata.h +++ b/js2/src/js2metadata.h @@ -401,6 +401,7 @@ class LexicalReference : public Reference { // q::a. public: LexicalReference(const StringAtom &name, bool strict) : variableMultiname(new Multiname(name)), env(NULL), strict(strict) { } + LexicalReference(const StringAtom &name, const StringAtom &qualifiedName, bool strict) : variableMultiname(new Multiname(name)), env(NULL), strict(strict) { } LexicalReference(Multiname *vm, Environment *env, bool strict) : variableMultiname(vm), env(env), strict(strict) { } Multiname *variableMultiname; // A nonempty set of qualified names to which this reference can refer diff --git a/js2/src/js2op_access.cpp b/js2/src/js2op_access.cpp index af740657e8c9..a9d01b66dc90 100644 --- a/js2/src/js2op_access.cpp +++ b/js2/src/js2op_access.cpp @@ -31,11 +31,23 @@ * file under either the NPL or the GPL. */ - - case eLexicalRead: { + case eMultiname: { Multiname *mn = bCon->mMultinameList[BytecodeContainer::getShort(pc)]; pc += sizeof(short); mn->addNamespace(meta->cxt); + } + break; + + case eQualifiedMultiname: { + Multiname *mn = bCon->mMultinameList[BytecodeContainer::getShort(pc)]; + pc += sizeof(short); + mn->addNamespace(meta->cxt); + } + break; + + case eLexicalRead: { + js2val n = pop(); + ASSERT(JS2VAL_IS_OBJECT(n)); meta->env.lexicalRead(meta, mn, phase); } break;