switching to qualified multinames.

This commit is contained in:
rogerl%netscape.com 2002-08-26 17:53:04 +00:00
Родитель 65faa05435
Коммит 822b933fd9
3 изменённых файлов: 29 добавлений и 2 удалений

Просмотреть файл

@ -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;