зеркало из 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);
|
bCon->addFloat64(checked_cast<NumberExprNode *>(p)->value);
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case ExprNode::identifier:
|
||||||
{
|
{
|
||||||
IdentifierExprNode *i = checked_cast<IdentifierExprNode *>(p);
|
IdentifierExprNode *i = checked_cast<IdentifierExprNode *>(p);
|
||||||
|
@ -591,6 +600,11 @@ namespace MetaData {
|
||||||
case ExprNode::dot:
|
case ExprNode::dot:
|
||||||
{
|
{
|
||||||
BinaryExprNode *b = checked_cast<BinaryExprNode *>(p);
|
BinaryExprNode *b = checked_cast<BinaryExprNode *>(p);
|
||||||
|
if (b->op2->getKind() == ExprNode::identifier) {
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (b->op2->getKind() == ExprNode::qualify) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -401,6 +401,7 @@ class LexicalReference : public Reference {
|
||||||
// q::a.
|
// q::a.
|
||||||
public:
|
public:
|
||||||
LexicalReference(const StringAtom &name, bool strict) : variableMultiname(new Multiname(name)), env(NULL), strict(strict) { }
|
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) { }
|
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
|
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.
|
* file under either the NPL or the GPL.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
case eMultiname: {
|
||||||
case eLexicalRead: {
|
|
||||||
Multiname *mn = bCon->mMultinameList[BytecodeContainer::getShort(pc)];
|
Multiname *mn = bCon->mMultinameList[BytecodeContainer::getShort(pc)];
|
||||||
pc += sizeof(short);
|
pc += sizeof(short);
|
||||||
mn->addNamespace(meta->cxt);
|
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);
|
meta->env.lexicalRead(meta, mn, phase);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче