зеркало из https://github.com/mozilla/pjs.git
switching to qualified multinames.
This commit is contained in:
Родитель
fce5a73bf0
Коммит
a351fb6b30
|
@ -547,6 +547,15 @@ namespace MetaData {
|
|||
bCon->addFloat64(checked_cast<NumberExprNode *>(p)->value);
|
||||
}
|
||||
break;
|
||||
case ExprNode::qualify:
|
||||
{
|
||||
QualifyExprNode *qe = checked_cast<QualifyExprNode *>(p);
|
||||
const StringAtom &name = checked_cast<IdentifierExprNode *>(p)->name;
|
||||
const StringAtom &qualifierName = checked_cast<IdentifierExprNode *>(qe->qualifier)->name;
|
||||
|
||||
returnRef = new LexicalReference(i->name, cxt.strict);
|
||||
}
|
||||
break;
|
||||
case ExprNode::identifier:
|
||||
{
|
||||
IdentifierExprNode *i = checked_cast<IdentifierExprNode *>(p);
|
||||
|
@ -591,6 +600,11 @@ namespace MetaData {
|
|||
case ExprNode::dot:
|
||||
{
|
||||
BinaryExprNode *b = checked_cast<BinaryExprNode *>(p);
|
||||
if (b->op2->getKind() == ExprNode::identifier) {
|
||||
}
|
||||
else {
|
||||
if (b->op2->getKind() == ExprNode::qualify) {
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче