Fixed bad delete of string ptrs in libraries.
git-svn-id: svn://10.0.0.236/trunk@133340 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
43076e4c08
commit
8318629a33
@ -175,6 +175,9 @@ static bool processArgs(int argc, char **argv, int *result)
|
||||
stdOut << "unrecognized command line switch\n";
|
||||
i = argc;
|
||||
break;
|
||||
case 'i':
|
||||
doInteractive = true;
|
||||
break;
|
||||
case 'f':
|
||||
{
|
||||
try {
|
||||
|
||||
@ -91,7 +91,6 @@ js2val Array_Constructor(JS2Metadata *meta, const js2val /*thisValue*/, js2val *
|
||||
setLength(meta, arrInst, 1);
|
||||
Multiname mn(meta->toString((int32)0), meta->publicNamespace);
|
||||
meta->writeDynamicProperty(arrInst, &mn, true, argv[0], RunPhase);
|
||||
delete mn.name;
|
||||
}
|
||||
}
|
||||
else {
|
||||
@ -100,7 +99,6 @@ js2val Array_Constructor(JS2Metadata *meta, const js2val /*thisValue*/, js2val *
|
||||
for (uint32 i = 0; i < argc; i++) {
|
||||
mn.name = meta->toString(i);
|
||||
meta->writeDynamicProperty(arrInst, &mn, true, argv[i], RunPhase);
|
||||
delete mn.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -123,13 +121,12 @@ static js2val Array_toString(JS2Metadata *meta, const js2val thisValue, js2val *
|
||||
js2val result;
|
||||
String *s = new String();
|
||||
for (uint32 i = 0; i < length; i++) {
|
||||
mn.name = numberToString(i);
|
||||
mn.name = meta->engine->numberToString(i);
|
||||
if (meta->readDynamicProperty(arrInst, &mn, &lookup, RunPhase, &result)
|
||||
&& !JS2VAL_IS_UNDEFINED(result))
|
||||
s->append(*meta->toString(result));
|
||||
if (i < (length - 1))
|
||||
s->append(widenCString(","));
|
||||
delete mn.name;
|
||||
}
|
||||
result = meta->engine->allocString(s);
|
||||
delete s;
|
||||
@ -154,13 +151,12 @@ static js2val Array_toSource(JS2Metadata *meta, const js2val thisValue, js2val *
|
||||
js2val result;
|
||||
String *s = new String();
|
||||
for (uint32 i = 0; i < length; i++) {
|
||||
mn.name = numberToString(i);
|
||||
mn.name = meta->engine->numberToString(i);
|
||||
if (meta->readDynamicProperty(arrInst, &mn, &lookup, RunPhase, &result)
|
||||
&& !JS2VAL_IS_UNDEFINED(result))
|
||||
s->append(*meta->toString(result));
|
||||
if (i < (length - 1))
|
||||
s->append(widenCString(","));
|
||||
delete mn.name;
|
||||
}
|
||||
s->append(widenCString("]"));
|
||||
result = meta->engine->allocString(s);
|
||||
@ -178,9 +174,8 @@ static js2val Array_push(JS2Metadata *meta, const js2val thisValue, js2val *argv
|
||||
|
||||
Multiname mn(NULL, meta->publicNamespace);
|
||||
for (uint32 i = 0; i < argc; i++) {
|
||||
mn.name = numberToString(i + length);
|
||||
mn.name = meta->engine->numberToString(i + length);
|
||||
meta->writeDynamicProperty(thisObj, &mn, true, argv[i], RunPhase);
|
||||
delete mn.name;
|
||||
}
|
||||
return setLength(meta, thisObj, length + argc);
|
||||
}
|
||||
@ -192,14 +187,13 @@ static js2val Array_pop(JS2Metadata *meta, const js2val thisValue, js2val * /*ar
|
||||
uint32 length = getLength(meta, thisObj);
|
||||
|
||||
if (length > 0) {
|
||||
Multiname mn(numberToString(length - 1), meta->publicNamespace);
|
||||
Multiname mn(meta->engine->numberToString(length - 1), meta->publicNamespace);
|
||||
LookupKind lookup(false, JS2VAL_NULL);
|
||||
js2val result = JS2VAL_UNDEFINED;
|
||||
bool deleteResult;
|
||||
meta->readDynamicProperty(thisObj, &mn, &lookup, RunPhase, &result);
|
||||
meta->deleteProperty(thisValue, &mn, &lookup, RunPhase, &deleteResult);
|
||||
setLength(meta, thisObj, length - 1);
|
||||
delete mn.name;
|
||||
return result;
|
||||
}
|
||||
else
|
||||
@ -219,22 +213,19 @@ js2val Array_concat(JS2Metadata *meta, const js2val thisValue, js2val *argv, uin
|
||||
|
||||
do {
|
||||
if (meta->objectType(E) != meta->arrayClass) {
|
||||
mn.name = numberToString(n++);
|
||||
mn.name = meta->engine->numberToString(n++);
|
||||
meta->writeDynamicProperty(A, &mn, true, E, RunPhase);
|
||||
delete mn.name;
|
||||
}
|
||||
else {
|
||||
ASSERT(JS2VAL_IS_OBJECT(thisValue));
|
||||
JS2Object *arrObj = JS2VAL_TO_OBJECT(E);
|
||||
uint32 length = getLength(meta, arrObj);
|
||||
for (uint32 k = 0; k < length; k++) {
|
||||
mn.name = numberToString(k);
|
||||
mn.name = meta->engine->numberToString(k);
|
||||
js2val rval = JS2VAL_UNDEFINED;
|
||||
meta->readDynamicProperty(arrObj, &mn, &lookup, RunPhase, &rval);
|
||||
delete mn.name;
|
||||
mn.name = numberToString(n++);
|
||||
mn.name = meta->engine->numberToString(n++);
|
||||
meta->writeDynamicProperty(A, &mn, true, rval, RunPhase);
|
||||
delete mn.name;
|
||||
}
|
||||
}
|
||||
E = argv[i++];
|
||||
@ -261,14 +252,13 @@ static js2val Array_join(JS2Metadata *meta, const js2val thisValue, js2val *argv
|
||||
|
||||
for (uint32 k = 0; k < length; k++) {
|
||||
js2val result = JS2VAL_UNDEFINED;
|
||||
mn.name = numberToString(k);
|
||||
mn.name = meta->engine->numberToString(k);
|
||||
meta->readDynamicProperty(thisObj, &mn, &lookup, RunPhase, &result);
|
||||
if (!JS2VAL_IS_UNDEFINED(result) && !JS2VAL_IS_NULL(result))
|
||||
*S += *meta->toString(result);
|
||||
|
||||
if (k < (length - 1))
|
||||
*S += *separator;
|
||||
delete mn.name;
|
||||
}
|
||||
|
||||
return meta->engine->allocString(S);
|
||||
@ -290,8 +280,8 @@ static js2val Array_reverse(JS2Metadata *meta, const js2val thisValue, js2val *
|
||||
bool deleteResult;
|
||||
js2val result1 = JS2VAL_UNDEFINED;
|
||||
js2val result2 = JS2VAL_UNDEFINED;
|
||||
mn1.name = numberToString(k);
|
||||
mn2.name = numberToString(length - k - 1);
|
||||
mn1.name = meta->engine->numberToString(k);
|
||||
mn2.name = meta->engine->numberToString(length - k - 1);
|
||||
|
||||
if (meta->hasOwnProperty(thisObj, mn1.name)) {
|
||||
if (meta->hasOwnProperty(thisObj, mn2.name)) {
|
||||
@ -317,8 +307,6 @@ static js2val Array_reverse(JS2Metadata *meta, const js2val thisValue, js2val *
|
||||
meta->deleteProperty(thisValue, &mn2, &lookup, RunPhase, &deleteResult);
|
||||
}
|
||||
}
|
||||
delete mn1.name;
|
||||
delete mn2.name;
|
||||
}
|
||||
|
||||
return thisValue;
|
||||
@ -340,13 +328,12 @@ static js2val Array_shift(JS2Metadata *meta, const js2val thisValue, js2val * /*
|
||||
LookupKind lookup(false, JS2VAL_NULL);
|
||||
js2val result;
|
||||
bool deleteResult;
|
||||
mn1.name = numberToString((int32)0);
|
||||
mn1.name = meta->engine->numberToString((int32)0);
|
||||
meta->readDynamicProperty(thisObj, &mn1, &lookup, RunPhase, &result);
|
||||
delete mn1.name;
|
||||
|
||||
for (uint32 k = 1; k < length; k++) {
|
||||
mn1.name = numberToString(k);
|
||||
mn2.name = numberToString(k - 1);
|
||||
mn1.name = meta->engine->numberToString(k);
|
||||
mn2.name = meta->engine->numberToString(k - 1);
|
||||
|
||||
if (meta->hasOwnProperty(thisObj, mn1.name)) {
|
||||
meta->readDynamicProperty(thisObj, &mn1, &lookup, RunPhase, &result);
|
||||
@ -354,13 +341,10 @@ static js2val Array_shift(JS2Metadata *meta, const js2val thisValue, js2val * /*
|
||||
}
|
||||
else
|
||||
meta->deleteProperty(thisValue, &mn2, &lookup, RunPhase, &deleteResult);
|
||||
delete mn1.name;
|
||||
delete mn2.name;
|
||||
}
|
||||
|
||||
mn1.name = numberToString(length - 1);
|
||||
mn1.name = meta->engine->numberToString(length - 1);
|
||||
meta->deleteProperty(thisValue, &mn2, &lookup, RunPhase, &deleteResult);
|
||||
delete mn1.name;
|
||||
setLength(meta, thisObj, length - 1);
|
||||
return result;
|
||||
}
|
||||
@ -419,17 +403,15 @@ static js2val Array_slice(JS2Metadata *meta, const js2val thisValue, js2val *arg
|
||||
LookupKind lookup(false, JS2VAL_NULL);
|
||||
uint32 n = 0;
|
||||
while (start < end) {
|
||||
mn1.name = numberToString(start);
|
||||
mn1.name = meta->engine->numberToString(start);
|
||||
if (meta->hasOwnProperty(thisObj, mn1.name)) {
|
||||
js2val rval;
|
||||
mn2.name = numberToString(n);
|
||||
mn2.name = meta->engine->numberToString(n);
|
||||
meta->readDynamicProperty(thisObj, &mn1, &lookup, RunPhase, &rval);
|
||||
meta->writeDynamicProperty(A, &mn2, true, rval, RunPhase);
|
||||
delete mn2.name;
|
||||
}
|
||||
n++;
|
||||
start++;
|
||||
delete mn1.name;
|
||||
}
|
||||
setLength(meta, A, n);
|
||||
return result;
|
||||
@ -574,17 +556,15 @@ static js2val Array_sort(JS2Metadata *meta, const js2val thisValue, js2val *argv
|
||||
Multiname mn(NULL, meta->publicNamespace);
|
||||
LookupKind lookup(false, JS2VAL_NULL);
|
||||
for (i = 0; i < length; i++) {
|
||||
mn.name = numberToString(i);
|
||||
mn.name = meta->engine->numberToString(i);
|
||||
meta->readDynamicProperty(thisObj, &mn, &lookup, RunPhase, &vec[i]);
|
||||
delete mn.name;
|
||||
}
|
||||
|
||||
js_qsort(vec, length, &ca);
|
||||
|
||||
for (i = 0; i < length; i++) {
|
||||
mn.name = numberToString(i);
|
||||
mn.name = meta->engine->numberToString(i);
|
||||
meta->writeDynamicProperty(thisObj, &mn, true, vec[i], RunPhase);
|
||||
delete mn.name;
|
||||
}
|
||||
delete[] mn.name;
|
||||
}
|
||||
@ -633,15 +613,13 @@ static js2val Array_splice(JS2Metadata *meta, const js2val thisValue, js2val *ar
|
||||
Multiname mn2(NULL, meta->publicNamespace);
|
||||
LookupKind lookup(false, JS2VAL_NULL);
|
||||
for (k = 0; k < deleteCount; k++) {
|
||||
mn1.name = numberToString(start + k);
|
||||
mn1.name = meta->engine->numberToString(start + k);
|
||||
if (meta->hasOwnProperty(thisObj, mn1.name)) {
|
||||
js2val rval;
|
||||
mn2.name = numberToString(k);
|
||||
mn2.name = meta->engine->numberToString(k);
|
||||
meta->readDynamicProperty(thisObj, &mn1, &lookup, RunPhase, &rval);
|
||||
meta->writeDynamicProperty(A, &mn2, true, rval, RunPhase);
|
||||
delete mn2.name;
|
||||
}
|
||||
delete mn1.name;
|
||||
}
|
||||
setLength(meta, A, deleteCount);
|
||||
|
||||
@ -649,8 +627,8 @@ static js2val Array_splice(JS2Metadata *meta, const js2val thisValue, js2val *ar
|
||||
if (newItemCount < deleteCount) {
|
||||
bool deleteResult;
|
||||
for (k = start; k < (length - deleteCount); k++) {
|
||||
mn1.name = numberToString(k + deleteCount);
|
||||
mn2.name = numberToString(k + newItemCount);
|
||||
mn1.name = meta->engine->numberToString(k + deleteCount);
|
||||
mn2.name = meta->engine->numberToString(k + newItemCount);
|
||||
if (meta->hasOwnProperty(thisObj, mn1.name)) {
|
||||
js2val rval;
|
||||
meta->readDynamicProperty(thisObj, &mn1, &lookup, RunPhase, &rval);
|
||||
@ -658,21 +636,18 @@ static js2val Array_splice(JS2Metadata *meta, const js2val thisValue, js2val *ar
|
||||
}
|
||||
else
|
||||
meta->deleteProperty(thisValue, &mn2, &lookup, RunPhase, &deleteResult);
|
||||
delete mn1.name;
|
||||
delete mn2.name;
|
||||
}
|
||||
for (k = length; k > (length - deleteCount + newItemCount); k--) {
|
||||
mn1.name = numberToString(k - 1);
|
||||
mn1.name = meta->engine->numberToString(k - 1);
|
||||
meta->deleteProperty(thisValue, &mn1, &lookup, RunPhase, &deleteResult);
|
||||
delete mn1.name;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (newItemCount > deleteCount) {
|
||||
for (k = length - deleteCount; k > start; k--) {
|
||||
bool deleteResult;
|
||||
mn1.name = numberToString(k + deleteCount - 1);
|
||||
mn1.name = numberToString(k + newItemCount - 1);
|
||||
mn1.name = meta->engine->numberToString(k + deleteCount - 1);
|
||||
mn2.name = meta->engine->numberToString(k + newItemCount - 1);
|
||||
if (meta->hasOwnProperty(thisObj, mn1.name)) {
|
||||
js2val rval;
|
||||
meta->readDynamicProperty(thisObj, &mn1, &lookup, RunPhase, &rval);
|
||||
@ -680,16 +655,13 @@ static js2val Array_splice(JS2Metadata *meta, const js2val thisValue, js2val *ar
|
||||
}
|
||||
else
|
||||
meta->deleteProperty(thisValue, &mn2, &lookup, RunPhase, &deleteResult);
|
||||
delete mn1.name;
|
||||
delete mn2.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
k = start;
|
||||
for (uint32 i = 2; i < argc; i++) {
|
||||
mn1.name = numberToString(k++);
|
||||
mn1.name = meta->engine->numberToString(k++);
|
||||
meta->writeDynamicProperty(A, &mn2, true, argv[i], RunPhase);
|
||||
delete mn1.name;
|
||||
}
|
||||
setLength(meta, thisObj, (length - deleteCount + newItemCount));
|
||||
|
||||
@ -712,8 +684,8 @@ static js2val Array_unshift(JS2Metadata *meta, const js2val thisValue, js2val *a
|
||||
|
||||
for (k = length; k > 0; k--) {
|
||||
bool deleteResult;
|
||||
mn1.name = numberToString(k - 1);
|
||||
mn2.name = numberToString(k + argc - 1);
|
||||
mn1.name = meta->engine->numberToString(k - 1);
|
||||
mn2.name = meta->engine->numberToString(k + argc - 1);
|
||||
if (meta->hasOwnProperty(thisObj, mn1.name)) {
|
||||
js2val rval;
|
||||
meta->readDynamicProperty(thisObj, &mn1, &lookup, RunPhase, &rval);
|
||||
@ -721,14 +693,11 @@ static js2val Array_unshift(JS2Metadata *meta, const js2val thisValue, js2val *a
|
||||
}
|
||||
else
|
||||
meta->deleteProperty(thisValue, &mn2, &lookup, RunPhase, &deleteResult);
|
||||
delete mn1.name;
|
||||
delete mn2.name;
|
||||
}
|
||||
|
||||
for (k = 0; k < argc; k++) {
|
||||
mn1.name = numberToString(k);
|
||||
mn1.name = meta->engine->numberToString(k);
|
||||
meta->writeDynamicProperty(thisObj, &mn1, true, argv[k], RunPhase);
|
||||
delete mn1.name;
|
||||
}
|
||||
setLength(meta, thisObj, (length + argc));
|
||||
|
||||
|
||||
@ -1075,7 +1075,7 @@ static js2val Date_toSource(JS2Metadata *meta, const js2val thisValue, js2val *
|
||||
{
|
||||
StringFormatter buf;
|
||||
float64 *date = Date_getProlog(meta, thisValue);
|
||||
buf << "(new Date(" << *numberToString(date) << "))";
|
||||
buf << "(new Date(" << *meta->engine->numberToString(date) << "))";
|
||||
return meta->engine->allocString(buf.getString());
|
||||
}
|
||||
|
||||
|
||||
@ -124,11 +124,9 @@ namespace MetaData {
|
||||
} while (hndlr->mActivation != curAct);
|
||||
if (jsx.hasKind(Exception::userException)) // snatch the exception before the stack gets clobbered
|
||||
x = pop();
|
||||
/*
|
||||
switch interpreter to execution of the activation
|
||||
XXX will need more (argument frame handling etc.)
|
||||
*/
|
||||
activationStackTop = prev;
|
||||
activationStackTop = prev; // need the one before the target function to
|
||||
// be at the top, because of postincrement
|
||||
bCon = curAct->bCon;
|
||||
}
|
||||
else {
|
||||
if (jsx.hasKind(Exception::userException))
|
||||
@ -160,7 +158,6 @@ namespace MetaData {
|
||||
#endif
|
||||
sp = hndlr->mStackTop;
|
||||
pc = hndlr->mPC;
|
||||
bCon = hndlr->mActivation->bCon;
|
||||
push(x);
|
||||
}
|
||||
else
|
||||
@ -251,19 +248,19 @@ namespace MetaData {
|
||||
}
|
||||
|
||||
// Convert an integer to a string
|
||||
String *numberToString(int32 i)
|
||||
String *JS2Engine::numberToString(int32 i)
|
||||
{
|
||||
char buf[dtosStandardBufferSize];
|
||||
const char *chrp = doubleToStr(buf, dtosStandardBufferSize, i, dtosStandard, 0);
|
||||
return new JavaScript::String(widenCString(chrp));
|
||||
return allocStringPtr(&meta->world.identifiers[chrp]);
|
||||
}
|
||||
|
||||
// Convert a double to a string
|
||||
String *numberToString(float64 *number)
|
||||
String *JS2Engine::numberToString(float64 *number)
|
||||
{
|
||||
char buf[dtosStandardBufferSize];
|
||||
const char *chrp = doubleToStr(buf, dtosStandardBufferSize, *number, dtosStandard, 0);
|
||||
return new JavaScript::String(widenCString(chrp));
|
||||
return allocStringPtr(&meta->world.identifiers[chrp]);
|
||||
}
|
||||
|
||||
// x is a Number, validate that it has no fractional component
|
||||
|
||||
@ -187,6 +187,9 @@ public:
|
||||
String *allocStringPtr(const String *s);
|
||||
String *allocStringPtr(const char *s);
|
||||
|
||||
String *numberToString(float64 *number);
|
||||
String *numberToString(int32 i);
|
||||
|
||||
js2val allocFloat(float32 x);
|
||||
js2val pushFloat(float32 x) { js2val retval = allocFloat(x); push(retval); return retval; }
|
||||
|
||||
@ -293,11 +296,6 @@ public:
|
||||
};
|
||||
|
||||
|
||||
String *numberToString(float64 *number);
|
||||
String *numberToString(int32 i);
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -2166,7 +2166,7 @@ doUnary:
|
||||
bCon->addString(checked_cast<StringExprNode *>(e->field)->str, p->pos);
|
||||
break;
|
||||
case ExprNode::number:
|
||||
bCon->addString(numberToString(&(checked_cast<NumberExprNode *>(e->field))->value), p->pos);
|
||||
bCon->addString(engine->numberToString(&(checked_cast<NumberExprNode *>(e->field))->value), p->pos);
|
||||
break;
|
||||
default:
|
||||
NOT_REACHED("bad field name");
|
||||
@ -3702,23 +3702,23 @@ deleteClassProperty:
|
||||
if (JS2VAL_IS_BOOLEAN(x))
|
||||
return (JS2VAL_TO_BOOLEAN(x)) ? engine->true_StringAtom : engine->false_StringAtom;
|
||||
if (JS2VAL_IS_INT(x))
|
||||
return numberToString(JS2VAL_TO_INT(x));
|
||||
return engine->numberToString(JS2VAL_TO_INT(x));
|
||||
if (JS2VAL_IS_LONG(x)) {
|
||||
float64 d;
|
||||
JSLL_L2D(d, *JS2VAL_TO_LONG(x));
|
||||
return numberToString(&d);
|
||||
return engine->numberToString(&d);
|
||||
}
|
||||
if (JS2VAL_IS_ULONG(x)) {
|
||||
float64 d;
|
||||
JSLL_UL2D(d, *JS2VAL_TO_ULONG(x));
|
||||
return numberToString(&d);
|
||||
return engine->numberToString(&d);
|
||||
}
|
||||
if (JS2VAL_IS_FLOAT(x)) {
|
||||
float64 d = *JS2VAL_TO_FLOAT(x);
|
||||
return numberToString(&d);
|
||||
return engine->numberToString(&d);
|
||||
}
|
||||
if (JS2VAL_IS_DOUBLE(x))
|
||||
return numberToString(JS2VAL_TO_DOUBLE(x));
|
||||
return engine->numberToString(JS2VAL_TO_DOUBLE(x));
|
||||
return toString(toPrimitive(x));
|
||||
}
|
||||
|
||||
|
||||
@ -72,7 +72,7 @@ namespace MetaData {
|
||||
if (meta->objectType(thisValue) != meta->numberClass)
|
||||
meta->reportError(Exception::typeError, "Number.toString called on something other than a number thing", meta->engine->errorPos());
|
||||
NumberInstance *numInst = checked_cast<NumberInstance *>(JS2VAL_TO_OBJECT(thisValue));
|
||||
return meta->engine->allocString(numberToString(&numInst->mValue));
|
||||
return STRING_TO_JS2VAL(meta->engine->numberToString(&numInst->mValue));
|
||||
}
|
||||
|
||||
#define MAKE_INSTANCE_VARIABLE(name, type) \
|
||||
|
||||
@ -168,7 +168,7 @@ static js2val String_match(JS2Metadata *meta, const js2val thisValue, js2val *ar
|
||||
else
|
||||
lastIndex = match->endIndex;
|
||||
js2val matchStr = meta->engine->allocString(JS2VAL_TO_STRING(S)->substr(toUInt32(match->startIndex), toUInt32(match->endIndex) - match->startIndex));
|
||||
Multiname mname(&meta->world.identifiers[*meta->toString(index)], meta->publicNamespace);
|
||||
Multiname mname(&meta->world.identifiers[*meta->engine->numberToString(index)], meta->publicNamespace);
|
||||
index++;
|
||||
meta->writeDynamicProperty(A, &mname, true, matchStr, RunPhase);
|
||||
}
|
||||
@ -232,7 +232,7 @@ static const String interpretDollar(JS2Metadata *meta, const String *replaceStr,
|
||||
* in the same manner as in String.prototype.match, including the update of searchValue.lastIndex. Let m
|
||||
* be the number of left capturing parentheses in searchValue (NCapturingParens as specified in section 15.10.2.1).
|
||||
*
|
||||
* If searchValue is not a regular expression, let searchString be meta->toString(searchValue) and search string for the first
|
||||
* If searchValue is not a regular expression, let searchString be toString(searchValue) and search string for the first
|
||||
* occurrence of searchString. Let m be 0.
|
||||
*
|
||||
* If replaceValue is a function, then for each matched substring, call the function with the following m + 3 arguments.
|
||||
@ -432,9 +432,8 @@ static js2val String_split(JS2Metadata *meta, const js2val thisValue, js2val *ar
|
||||
strSplitMatch(S, 0, R, z);
|
||||
if (!z.failure)
|
||||
return result;
|
||||
mn.name = meta->toString((int32)0);
|
||||
mn.name = meta->engine->numberToString((int32)0); // XXX
|
||||
meta->writeDynamicProperty(A, &mn, true, STRING_TO_JS2VAL(S), RunPhase);
|
||||
delete mn.name;
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -443,9 +442,8 @@ static js2val String_split(JS2Metadata *meta, const js2val thisValue, js2val *ar
|
||||
step11:
|
||||
if (q == s) {
|
||||
js2val v = meta->engine->allocString(new String(*S, p, (s - p)));
|
||||
mn.name = meta->toString(getLength(meta, A));
|
||||
mn.name = meta->engine->numberToString(getLength(meta, A));
|
||||
meta->writeDynamicProperty(A, &mn, true, v, RunPhase);
|
||||
delete mn.name;
|
||||
return result;
|
||||
}
|
||||
MatchResult z;
|
||||
@ -464,17 +462,15 @@ step11:
|
||||
}
|
||||
String *T = meta->engine->allocStringPtr(new String(*S, p, (q - p))); // XXX
|
||||
js2val v = STRING_TO_JS2VAL(T);
|
||||
mn.name = meta->toString(getLength(meta, A));
|
||||
mn.name = meta->engine->numberToString(getLength(meta, A));
|
||||
meta->writeDynamicProperty(A, &mn, true, v, RunPhase);
|
||||
delete mn.name;
|
||||
if (getLength(meta, A) == lim)
|
||||
return result;
|
||||
p = e;
|
||||
|
||||
for (uint32 i = 0; i < z.capturesCount; i++) {
|
||||
mn.name = meta->toString(getLength(meta, A));
|
||||
mn.name = meta->engine->numberToString(getLength(meta, A));
|
||||
meta->writeDynamicProperty(A, &mn, true, z.captures[i], RunPhase);
|
||||
delete mn.name;
|
||||
if (getLength(meta, A) == lim)
|
||||
return result;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user