Ignore:
Timestamp:
May 2, 2008, 3:07:53 AM (17 years ago)
Author:
[email protected]
Message:

Reviewed by Geoffrey Garen.

https://bugs.webkit.org/show_bug.cgi?id=18826
Make JavaScript heap per-thread

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/kjs/regexp_object.cpp

    r32652 r32807  
    5252    : JSObject(objectPrototype)
    5353{
    54     putDirectFunction(new PrototypeFunction(exec, functionPrototype, 0, exec->propertyNames().compile, regExpProtoFuncCompile), DontEnum);
    55     putDirectFunction(new PrototypeFunction(exec, functionPrototype, 0, exec->propertyNames().exec, regExpProtoFuncExec), DontEnum);
    56     putDirectFunction(new PrototypeFunction(exec, functionPrototype, 0, exec->propertyNames().test, regExpProtoFuncTest), DontEnum);
    57     putDirectFunction(new PrototypeFunction(exec, functionPrototype, 0, exec->propertyNames().toString, regExpProtoFuncToString), DontEnum);
     54    putDirectFunction(new (exec) PrototypeFunction(exec, functionPrototype, 0, exec->propertyNames().compile, regExpProtoFuncCompile), DontEnum);
     55    putDirectFunction(new (exec) PrototypeFunction(exec, functionPrototype, 0, exec->propertyNames().exec, regExpProtoFuncExec), DontEnum);
     56    putDirectFunction(new (exec) PrototypeFunction(exec, functionPrototype, 0, exec->propertyNames().test, regExpProtoFuncTest), DontEnum);
     57    putDirectFunction(new (exec) PrototypeFunction(exec, functionPrototype, 0, exec->propertyNames().toString, regExpProtoFuncToString), DontEnum);
    5858}
    5959
     
    107107    if (!thisObj->inherits(&RegExpImp::info)) {
    108108        if (thisObj->inherits(&RegExpPrototype::info))
    109             return jsString("//");
     109            return jsString(exec, "//");
    110110        return throwError(exec, TypeError);
    111111    }
     
    118118    if (thisObj->get(exec, exec->propertyNames().multiline)->toBoolean(exec))
    119119        result += "m";
    120     return jsString(result);
     120    return jsString(exec, result);
    121121}
    122122
     
    151151}
    152152
    153 JSValue* RegExpImp::getValueProperty(ExecState*, int token) const
     153JSValue* RegExpImp::getValueProperty(ExecState* exec, int token) const
    154154{
    155155    switch (token) {
     
    161161            return jsBoolean(m_regExp->multiline());
    162162        case Source:
    163             return jsString(m_regExp->pattern());
     163            return jsString(exec, m_regExp->pattern());
    164164        case LastIndex:
    165             return jsNumber(m_lastIndex);
     165            return jsNumber(exec, m_lastIndex);
    166166    }
    167167   
     
    288288
    289289  // no. of arguments for constructor
    290   putDirect(exec->propertyNames().length, jsNumber(2), ReadOnly | DontDelete | DontEnum);
     290  putDirect(exec->propertyNames().length, jsNumber(exec, 2), ReadOnly | DontDelete | DontEnum);
    291291}
    292292
     
    318318{
    319319  unsigned lastNumSubpatterns = d->lastNumSubPatterns;
    320   ArrayInstance* arr = new ArrayInstance(exec->lexicalGlobalObject()->arrayPrototype(), lastNumSubpatterns + 1);
     320  ArrayInstance* arr = new (exec) ArrayInstance(exec->lexicalGlobalObject()->arrayPrototype(), lastNumSubpatterns + 1);
    321321  for (unsigned i = 0; i <= lastNumSubpatterns; ++i) {
    322322    int start = d->lastOvector[2 * i];
    323323    if (start >= 0)
    324       arr->put(exec, i, jsString(d->lastInput.substr(start, d->lastOvector[2 * i + 1] - start)));
    325   }
    326   arr->put(exec, exec->propertyNames().index, jsNumber(d->lastOvector[0]));
    327   arr->put(exec, exec->propertyNames().input, jsString(d->lastInput));
     324      arr->put(exec, i, jsString(exec, d->lastInput.substr(start, d->lastOvector[2 * i + 1] - start)));
     325  }
     326  arr->put(exec, exec->propertyNames().index, jsNumber(exec, d->lastOvector[0]));
     327  arr->put(exec, exec->propertyNames().input, jsString(exec, d->lastInput));
    328328  return arr;
    329329}
    330330
    331 JSValue* RegExpObjectImp::getBackref(unsigned i) const
     331JSValue* RegExpObjectImp::getBackref(ExecState* exec, unsigned i) const
    332332{
    333333  if (d->lastOvector && i <= d->lastNumSubPatterns)
    334     return jsString(d->lastInput.substr(d->lastOvector[2 * i], d->lastOvector[2 * i + 1] - d->lastOvector[2 * i]));
    335   return jsString("");
    336 }
    337 
    338 JSValue* RegExpObjectImp::getLastParen() const
     334    return jsString(exec, d->lastInput.substr(d->lastOvector[2 * i], d->lastOvector[2 * i + 1] - d->lastOvector[2 * i]));
     335  return jsString(exec, "");
     336}
     337
     338JSValue* RegExpObjectImp::getLastParen(ExecState* exec) const
    339339{
    340340  unsigned i = d->lastNumSubPatterns;
    341341  if (i > 0) {
    342342    ASSERT(d->lastOvector);
    343     return jsString(d->lastInput.substr(d->lastOvector[2 * i], d->lastOvector[2 * i + 1] - d->lastOvector[2 * i]));
    344   }
    345   return jsString("");
    346 }
    347 
    348 JSValue *RegExpObjectImp::getLeftContext() const
     343    return jsString(exec, d->lastInput.substr(d->lastOvector[2 * i], d->lastOvector[2 * i + 1] - d->lastOvector[2 * i]));
     344  }
     345  return jsString(exec, "");
     346}
     347
     348JSValue *RegExpObjectImp::getLeftContext(ExecState* exec) const
    349349{
    350350  if (d->lastOvector)
    351     return jsString(d->lastInput.substr(0, d->lastOvector[0]));
    352   return jsString("");
    353 }
    354 
    355 JSValue *RegExpObjectImp::getRightContext() const
     351    return jsString(exec, d->lastInput.substr(0, d->lastOvector[0]));
     352  return jsString(exec, "");
     353}
     354
     355JSValue *RegExpObjectImp::getRightContext(ExecState* exec) const
    356356{
    357357  if (d->lastOvector) {
    358358    UString s = d->lastInput;
    359     return jsString(s.substr(d->lastOvector[1], s.size() - d->lastOvector[1]));
    360   }
    361   return jsString("");
     359    return jsString(exec, s.substr(d->lastOvector[1], s.size() - d->lastOvector[1]));
     360  }
     361  return jsString(exec, "");
    362362}
    363363
     
    367367}
    368368
    369 JSValue *RegExpObjectImp::getValueProperty(ExecState*, int token) const
     369JSValue *RegExpObjectImp::getValueProperty(ExecState* exec, int token) const
    370370{
    371371  switch (token) {
    372372    case Dollar1:
    373       return getBackref(1);
     373      return getBackref(exec, 1);
    374374    case Dollar2:
    375       return getBackref(2);
     375      return getBackref(exec, 2);
    376376    case Dollar3:
    377       return getBackref(3);
     377      return getBackref(exec, 3);
    378378    case Dollar4:
    379       return getBackref(4);
     379      return getBackref(exec, 4);
    380380    case Dollar5:
    381       return getBackref(5);
     381      return getBackref(exec, 5);
    382382    case Dollar6:
    383       return getBackref(6);
     383      return getBackref(exec, 6);
    384384    case Dollar7:
    385       return getBackref(7);
     385      return getBackref(exec, 7);
    386386    case Dollar8:
    387       return getBackref(8);
     387      return getBackref(exec, 8);
    388388    case Dollar9:
    389       return getBackref(9);
     389      return getBackref(exec, 9);
    390390    case Input:
    391       return jsString(d->lastInput);
     391      return jsString(exec, d->lastInput);
    392392    case Multiline:
    393393      return jsBoolean(d->multiline);
    394394    case LastMatch:
    395       return getBackref(0);
     395      return getBackref(exec, 0);
    396396    case LastParen:
    397       return getLastParen();
     397      return getLastParen(exec);
    398398    case LeftContext:
    399       return getLeftContext();
     399      return getLeftContext(exec);
    400400    case RightContext:
    401       return getRightContext();
     401      return getRightContext(exec);
    402402    default:
    403403      ASSERT(0);
    404404  }
    405405
    406   return jsString("");
     406  return jsString(exec, "");
    407407}
    408408
     
    452452{
    453453    return regExp->isValid()
    454         ? new RegExpImp(static_cast<RegExpPrototype*>(exec->lexicalGlobalObject()->regExpPrototype()), regExp)
     454        ? new (exec) RegExpImp(static_cast<RegExpPrototype*>(exec->lexicalGlobalObject()->regExpPrototype()), regExp)
    455455        : throwError(exec, SyntaxError, UString("Invalid regular expression: ").append(regExp->errorMessage()));
    456456}
Note: See TracChangeset for help on using the changeset viewer.