Fixing ':type' and default initializing.

This commit is contained in:
rogerl%netscape.com 2003-04-17 22:58:50 +00:00
parent 5457c87da4
commit 18cd9dd151
6 changed files with 24 additions and 24 deletions

View File

@ -85,7 +85,7 @@ js2val setLength(JS2Metadata *meta, JS2Object *obj, uint32 newLength)
Multiname *mn = new Multiname(meta->engine->length_StringAtom, meta->publicNamespace);
DEFINE_ROOTKEEPER(rk, mn);
LookupKind lookup(false, JS2VAL_NULL);
defaultWriteProperty(meta, OBJECT_TO_JS2VAL(obj), meta->arrayClass, mn, &lookup, true, result);
defaultWriteProperty(meta, OBJECT_TO_JS2VAL(obj), meta->arrayClass, mn, &lookup, true, result, false);
}
else {
JS2Class *c = meta->objectType(obj);

View File

@ -633,7 +633,7 @@ namespace MetaData {
LookupKind lookup(false, JS2VAL_NULL);
Multiname *mn = new Multiname(name, meta->publicNamespace);
DEFINE_ROOTKEEPER(rk, mn);
return defaultWriteProperty(meta, base, limit, mn, &lookup, createIfMissing, newValue);
return defaultWriteProperty(meta, base, limit, mn, &lookup, createIfMissing, newValue, false);
}
bool defaultBracketRead(JS2Metadata *meta, js2val *base, JS2Class *limit, Multiname *multiname, Phase phase, js2val *rval)
@ -642,12 +642,12 @@ namespace MetaData {
return limit->read(meta, base, limit, multiname, &lookup, phase, rval);
}
bool arrayWriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue)
bool arrayWriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue, bool initFlag)
{
ASSERT(JS2VAL_IS_OBJECT(base));
JS2Object *obj = JS2VAL_TO_OBJECT(base);
bool result = defaultWriteProperty(meta, base, limit, multiname, lookupKind, createIfMissing, newValue);
bool result = defaultWriteProperty(meta, base, limit, multiname, lookupKind, createIfMissing, newValue, false);
if (result && (multiname->nsList->size() == 1) && (multiname->nsList->back() == meta->publicNamespace)) {
const char16 *numEnd;
@ -674,10 +674,10 @@ namespace MetaData {
LookupKind lookup(false, JS2VAL_NULL);
Multiname *mn = new Multiname(name, meta->publicNamespace);
DEFINE_ROOTKEEPER(rk, mn);
return arrayWriteProperty(meta, base, limit, mn, &lookup, createIfMissing, newValue);
return arrayWriteProperty(meta, base, limit, mn, &lookup, createIfMissing, newValue, false);
}
bool defaultWriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue)
bool defaultWriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue, bool initFlag)
{
InstanceMember *mBase = meta->findBaseInstanceMember(limit, multiname, WriteAccess);
if (mBase) {
@ -721,7 +721,7 @@ namespace MetaData {
case Member::ConstructorMethodMember:
case Member::SetterMember:
case Member::GetterMember:
return meta->writeLocalMember(checked_cast<LocalMember *>(m), newValue, false);
return meta->writeLocalMember(checked_cast<LocalMember *>(m), newValue, initFlag);
case Member::InstanceVariableMember:
case Member::InstanceMethodMember:
case Member::InstanceGetterMember:
@ -742,7 +742,7 @@ namespace MetaData {
bool defaultBracketWrite(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, js2val newValue)
{
LookupKind lookup(false, JS2VAL_NULL);
return limit->write(meta, base, limit, multiname, &lookup, true, newValue);
return limit->write(meta, base, limit, multiname, &lookup, true, newValue, false);
}
bool defaultDeleteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool *result)

View File

@ -516,7 +516,7 @@ namespace MetaData {
// Set type to FUTURE_TYPE - it will be resolved during 'Setup'. The value is either FUTURE_VALUE
// for 'const' - in which case the expression is compile time evaluated (or attempted) or set
// to INACCESSIBLE until run time initialization occurs.
Variable *v = new Variable(FUTURE_TYPE, immutable ? JS2VAL_FUTUREVALUE : JS2VAL_FUTUREVALUE, immutable);
Variable *v = new Variable(FUTURE_TYPE, immutable ? JS2VAL_FUTUREVALUE : JS2VAL_INACCESSIBLE, immutable);
vb->member = v;
v->vb = vb;
vb->mn = defineLocalMember(env, name, a->namespaces, a->overrideMod, a->xplicit, ReadWriteAccess, v, p->pos, true);
@ -2537,7 +2537,7 @@ doUnary:
case PackageKind:
{
JS2Class *limit = meta->objectType(OBJECT_TO_JS2VAL(*fi));
result = limit->write(meta, OBJECT_TO_JS2VAL(*fi), limit, multiname, &lookup, false, newValue);
result = limit->write(meta, OBJECT_TO_JS2VAL(*fi), limit, multiname, &lookup, false, newValue, false);
}
break;
case SystemKind:
@ -2556,7 +2556,7 @@ doUnary:
WithFrame *wf = checked_cast<WithFrame *>(*fi);
// XXX uninitialized 'with' object?
JS2Class *limit = meta->objectType(OBJECT_TO_JS2VAL(wf->obj));
result = limit->write(meta, OBJECT_TO_JS2VAL(wf->obj), limit, multiname, &lookup, false, newValue);
result = limit->write(meta, OBJECT_TO_JS2VAL(wf->obj), limit, multiname, &lookup, false, newValue, false);
}
break;
}
@ -2567,7 +2567,7 @@ doUnary:
if (createIfMissing) {
Package *pkg = getPackageFrame();
JS2Class *limit = meta->objectType(OBJECT_TO_JS2VAL(pkg));
result = limit->write(meta, OBJECT_TO_JS2VAL(pkg), limit, multiname, &lookup, true, newValue);
result = limit->write(meta, OBJECT_TO_JS2VAL(pkg), limit, multiname, &lookup, true, newValue, false);
if (result)
return;
}
@ -2589,7 +2589,7 @@ doUnary:
case PackageKind:
{
JS2Class *limit = meta->objectType(OBJECT_TO_JS2VAL(*fi));
result = limit->write(meta, OBJECT_TO_JS2VAL(*fi), limit, multiname, &lookup, false, newValue);
result = limit->write(meta, OBJECT_TO_JS2VAL(*fi), limit, multiname, &lookup, false, newValue, true);
}
break;
case SystemKind:
@ -2608,7 +2608,7 @@ doUnary:
WithFrame *wf = checked_cast<WithFrame *>(*fi);
// XXX uninitialized 'with' object?
JS2Class *limit = meta->objectType(OBJECT_TO_JS2VAL(wf->obj));
result = limit->write(meta, OBJECT_TO_JS2VAL(wf->obj), limit, multiname, &lookup, false, newValue);
result = limit->write(meta, OBJECT_TO_JS2VAL(wf->obj), limit, multiname, &lookup, false, newValue, true);
}
break;
}
@ -2620,7 +2620,7 @@ doUnary:
ASSERT(false);
Package *pkg = getPackageFrame();
JS2Class *limit = meta->objectType(OBJECT_TO_JS2VAL(pkg));
result = limit->write(meta, OBJECT_TO_JS2VAL(pkg), limit, multiname, &lookup, true, newValue);
result = limit->write(meta, OBJECT_TO_JS2VAL(pkg), limit, multiname, &lookup, true, newValue, true);
if (result)
return;
}
@ -3334,7 +3334,7 @@ bool nullClass_ReadProperty(JS2Metadata *meta, js2val *base, JS2Class *limit, Mu
bool nullClass_ReadPublicProperty(JS2Metadata *meta, js2val *base, JS2Class *limit, const String *name, Phase phase, js2val *rval) { return false; }
bool nullClass_BracketRead(JS2Metadata *meta, js2val *base, JS2Class *limit, Multiname *multiname, Phase phase, js2val *rval) { return false; }
bool nullClass_arrayWriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue) { return false; }
bool nullClass_WriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue) { return false; }
bool nullClass_WriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue, bool initFlag) { return false; }
bool nullClass_WritePublicProperty(JS2Metadata *meta, js2val base, JS2Class *limit, const String *name, bool createIfMissing, js2val newValue) { return false; }
bool nullClass_BracketWrite(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, js2val newValue) { return false; }
bool nullClass_DeleteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool *result) { return false; }

View File

@ -60,7 +60,7 @@ typedef js2val (NativeCode)(JS2Metadata *meta, const js2val thisValue, js2val ar
typedef bool (Read)(JS2Metadata *meta, js2val *base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, Phase phase, js2val *rval);
typedef bool (ReadPublic)(JS2Metadata *meta, js2val *base, JS2Class *limit, const String *name, Phase phase, js2val *rval);
typedef bool (Write)(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue);
typedef bool (Write)(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue, bool initFlag);
typedef bool (WritePublic)(JS2Metadata *meta, js2val base, JS2Class *limit, const String *name, bool createIfMissing, js2val newValue);
typedef bool (DeleteProperty)(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool *result);
typedef bool (DeletePublic)(JS2Metadata *meta, js2val base, JS2Class *limit, const String *name, bool *result);
@ -71,8 +71,8 @@ typedef bool (BracketDelete)(JS2Metadata *meta, js2val base, JS2Class *limit, Mu
bool defaultReadProperty(JS2Metadata *meta, js2val *base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, Phase phase, js2val *rval);
bool defaultReadPublicProperty(JS2Metadata *meta, js2val *base, JS2Class *limit, const String *name, Phase phase, js2val *rval);
bool defaultBracketRead(JS2Metadata *meta, js2val *base, JS2Class *limit, Multiname *multiname, Phase phase, js2val *rval);
bool arrayWriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue);
bool defaultWriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue);
bool arrayWriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue, bool initFlag);
bool defaultWriteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool createIfMissing, js2val newValue, bool initFlag);
bool defaultWritePublicProperty(JS2Metadata *meta, js2val base, JS2Class *limit, const String *name, bool createIfMissing, js2val newValue);
bool defaultBracketWrite(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, js2val newValue);
bool defaultDeleteProperty(JS2Metadata *meta, js2val base, JS2Class *limit, Multiname *multiname, LookupKind *lookupKind, bool *result);

View File

@ -71,7 +71,7 @@
pc += sizeof(short);
b = pop();
JS2Class *limit = meta->objectType(b);
if (!limit->write(meta, b, limit, mn, &lookup, true, a)) {
if (!limit->write(meta, b, limit, mn, &lookup, true, a, false)) {
if (!meta->cxt.E3compatibility)
meta->reportError(Exception::propertyAccessError, "No property named {0}", errorPos(), mn->name);
}

View File

@ -957,7 +957,7 @@
if (!limit->read(meta, &baseVal, limit, mn, &lookup, RunPhase, &a))
meta->reportError(Exception::propertyAccessError, "No property named {0}", errorPos(), mn->name);
float64 num = meta->toFloat64(a);
if (!limit->write(meta, baseVal, limit, mn, &lookup, true, allocNumber(num + 1.0)))
if (!limit->write(meta, baseVal, limit, mn, &lookup, true, allocNumber(num + 1.0), false))
meta->reportError(Exception::propertyAccessError, "No property named {0}", errorPos(), mn->name);
pushNumber(num);
baseVal = JS2VAL_VOID;
@ -973,7 +973,7 @@
if (!limit->read(meta, &baseVal, limit, mn, &lookup, RunPhase, &a))
meta->reportError(Exception::propertyAccessError, "No property named {0}", errorPos(), mn->name);
float64 num = meta->toFloat64(a);
if (!limit->write(meta, baseVal, limit, mn, &lookup, true, allocNumber(num - 1.0)))
if (!limit->write(meta, baseVal, limit, mn, &lookup, true, allocNumber(num - 1.0), false))
meta->reportError(Exception::propertyAccessError, "No property named {0}", errorPos(), mn->name);
pushNumber(num);
baseVal = JS2VAL_VOID;
@ -990,7 +990,7 @@
meta->reportError(Exception::propertyAccessError, "No property named {0}", errorPos(), mn->name);
float64 num = meta->toFloat64(a);
a = pushNumber(num + 1.0);
if (!limit->write(meta, baseVal, limit, mn, &lookup, true, a))
if (!limit->write(meta, baseVal, limit, mn, &lookup, true, a, false))
meta->reportError(Exception::propertyAccessError, "No property named {0}", errorPos(), mn->name);
baseVal = JS2VAL_VOID;
}
@ -1006,7 +1006,7 @@
meta->reportError(Exception::propertyAccessError, "No property named {0}", errorPos(), mn->name);
float64 num = meta->toFloat64(a);
a = pushNumber(num - 1.0);
if (!limit->write(meta, baseVal, limit, mn, &lookup, true, a))
if (!limit->write(meta, baseVal, limit, mn, &lookup, true, a, false))
meta->reportError(Exception::propertyAccessError, "No property named {0}", errorPos(), mn->name);
baseVal = JS2VAL_VOID;
}